
[PATCH] IXP425: Improving print_cpuinfo code
The existing version of print_cpuinfo did read the processor ID and detects clock speed from this.
This is not correct, as the IXP425 has the ability to "downgrade" clock speed by using strapping resistors.
The improved code reads strapping information from register and corrects the actual clock speed. Both information are displayed.
The patch is against "latest" u-boot git-repository
Please (still) be patient if style of submission or patches are offending.
Signed-off-by: Stefan Althoefer stefan.althoefer@web.de ----
diff -uprN u-boot-orig//cpu/ixp/cpu.c u-boot/cpu/ixp/cpu.c --- u-boot-orig//cpu/ixp/cpu.c 2008-12-02 17:25:31.000000000 +0100 +++ u-boot/cpu/ixp/cpu.c 2008-12-03 11:35:37.000000000 +0100 @@ -45,32 +45,68 @@ DECLARE_GLOBAL_DATA_PTR; int print_cpuinfo (void) { unsigned long id; + unsigned long cfg_clk; int speed = 0; + int model = 0;
asm ("mrc p15, 0, %0, c0, c0, 0":"=r" (id)); + cfg_clk = *IXP425_EXP_CFG0 >> 21;
- puts("CPU: Intel IXP425 at "); + puts("CPU: Intel IXP42X"); switch ((id & 0x000003f0) >> 4) { case 0x1c: - loops_per_jiffy = 887467; - speed = 533; + model = 533; + switch (cfg_clk) { + case 0x1: + speed = 400; + break; + case 0x3: + speed = 266; + break; + default: + speed = 533; + break; + } break;
case 0x1d: - loops_per_jiffy = 666016; - speed = 400; + model = 400; + switch (cfg_clk) { + case 0x3: + speed = 266; + break; + default: + speed = 400; + break; + } break;
case 0x1f: - loops_per_jiffy = 442901; + model = 266; speed = 266; break; }
+ /* FIXME: is there any need for the jiffies? */ + switch (speed) { + case 266: + loops_per_jiffy = 442901; + break; + case 400: + loops_per_jiffy = 666016; + break; + case 533: + loops_per_jiffy = 887467; + break; + } + + if (model) + printf("-%d", model); + if (speed) - printf("%d MHz\n", speed); + printf(" at %d MHz\n", speed); else - puts("unknown revision\n"); + puts(" unknown revision\n");
return 0; }