static int __init au1x00_setup(void)
{
+ struct cpu_spec *sp;
char *argptr;
unsigned long prid, cpupll, bclk = 1;
- /* Various early Au1000 Errata corrected by this */
- set_c0_config(1<<19); /* Config[OD] */
+ set_cpuspec();
+ sp = cur_cpu_spec[0];
board_setup(); /* board specific setup */
prid = read_c0_prid();
- switch (prid)
- {
- case 0x00030100: printk("Au1000 DA "); bclk = 0; break;
- case 0x00030201: printk("Au1000 HA "); bclk = 0; break;
- case 0x00030202: printk("Au1000 HB "); bclk = 0; break;
- case 0x00030203: printk("Au1000 HC "); break;
- case 0x00030204: printk("Au1000 HD "); break;
-
- case 0x01030200: printk("Au1500 AB "); break;
- case 0x01030201: printk("Au1500 AC "); break;
- case 0x01030202: printk("Au1500 AD "); break;
-
- case 0x02030200: printk("Au1100 AB "); break;
- case 0x02030201: printk("Au1100 BA "); break;
- case 0x02030202: printk("Au1100 BC "); break;
- case 0x02030203: printk("Au1100 BD "); break;
- case 0x02030204: printk("Au1100 BE "); break;
-
- case 0x03030200: printk("Au1550 AA "); break;
-
- default: printk("Unknown Au1x00! "); bclk = 0; break;
- }
cpupll = (au_readl(0xB1900060) & 0x3F) * 12;
printk("(PRId %08X) @ %dMHZ\n", prid, cpupll);
+ bclk = sp->cpu_bclk;
if (bclk)
{
/* Enable BCLK switching */
printk("BCLK switching enabled!\n");
}
+ if (sp->cpu_od) {
+ /* Various early Au1000 Errata corrected by this */
+ set_c0_config(1<<19); /* Set Config[OD] */
+ }
+ else {
+ /* Clear to obtain best system bus performance */
+ clear_c0_config(1<<19); /* Clear Config[OD] */
+ }
+
argptr = prom_getcmdline();
#ifdef CONFIG_SERIAL_AU1X00_CONSOLE