On 13.11.2007 02:35, Carl-Daniel Hailfinger wrote: > On 12.11.2007 18:07, Marc Jones wrote: > >> Carl-Daniel Hailfinger wrote: >> >>> while taking a look at stage0 and stage1 code in v3, I was surprised to >>> see no coherent structure in the code for Geode LX boards. >>> While some of this may be due to dead code, I'd like to know: >>> * which board can serve as structural reference >>> * which board is working best. >>> >>> Once I know that, I can send cleanup patches and maybe even kill a few >>> functions and files. >>> >> I use the amd/norwich and Ron uses the adl/msm800sev. The norwich >> mainboard is more generic but they should be very similar to each >> other. The artecgroup mainboard is incomplete. >> > > Thanks for the info! I'll proceed with structural unification of the > adl/msm800sev and amd/norwich mainboards and make the artec/dbe61 > conform to their style. >
Question: Why does mainboard/adl/msm800sev/initram.c contain the following code snippet? int main(void) { [...] /* Switch from Cache as RAM to real RAM */ printk(BIOS_SPEW, "Before wbinvd\n"); __asm__("wbinvd\n"); printk(BIOS_SPEW, "After wbinvd\n"); } That function is executed from arch/x86/stage1.c:stage1_main() by the following code snippet: if (check_normal_boot_flag()) { printk(BIOS_DEBUG, "Choosing normal boot.\n"); ret = execute_in_place(&archive, "normal/initram"); } else { printk(BIOS_DEBUG, "Choosing fallback boot.\n"); ret = execute_in_place(&archive, "fallback/initram"); /* Try a normal boot if fallback doesn't exist in the lar. * TODO: There are other ways to do this. * It could be ifdef or the boot flag could be forced. */ if (ret) { printk(BIOS_DEBUG, "Fallback failed. Try normal boot\n"); ret = execute_in_place(&archive, "normal/initram"); } } Shortly after that, in stage1_main() we find this: /* Turn off Cache-As-Ram */ disable_car(); And arch/x86/geodelx/stage1.c:disable_car() looks like this: void disable_car(void) { int i; for (i = 0; i < ARRAY_SIZE(msr_table); i++) wrmsr(msr_table[i].msrnum, msr_table[i].msr); __asm__("wbinvd\n"); } So the question is: Why do we execute wbinvd twice, once in mainboard initram code, once directly afterwards in generic stage1 code? Interesting tidbit: This only applies to the msm800sev and not the norwich. > As I work through the code, I will generate a stream of patches, mostly > for documentation and cleanup. > ... and lots of questions. > Do you have boot logs with maximum verbosity for the msm800sev or the > norwich? If I can see them, I have a chance to improve debug printout as > well. > These boot logs would be much appreciated. Regards, Carl-Daniel -- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios