On 01.11.2008 20:11, Carl-Daniel Hailfinger wrote: > On 01.11.2008 18:56, Corey Osgood wrote: > >> System reset seems to occur between 2 and 3, both of those logs attached, >> along with arch/x86/via/stage1.o With HALT_AFTER=3, the post code keeps >> changing, as expected with the system rebooting, with HALT_AFTER=2 it was >> 0xc2. >> >> > > Great results, thanks a lot! > One bug spotted and fixed. Can you retest with the same method and the > updated patch attached to this mail? I hope it will die much later, > perhaps at HALT_AFTER=13 or so. >
Thanks for the information that HALT_AFTER=5 is the last working setting. Can you try the new patch with HALT_AFTER=11 and up to 14? Regards, Carl-Daniel -- http://www.hailfinger.org/
Index: corebootv3-via_car/arch/x86/via/stage1.c =================================================================== --- corebootv3-via_car/arch/x86/via/stage1.c (Revision 977) +++ corebootv3-via_car/arch/x86/via/stage1.c (Arbeitskopie) @@ -29,12 +29,14 @@ #include <string.h> #include <mtrr.h> #include <via_c7.h> +#include <uart8250.h> /** * Disable Cache As RAM (CAR) after memory is setup. */ void disable_car(void) { + printk(BIOS_DEBUG, "disable_car entry\n"); /* Determine new global variable location. Stack organization from top * Top 4 bytes are reserved * Pointer to global variables @@ -45,16 +47,182 @@ const struct global_vars *newlocation = (struct global_vars *)((RAM_STACK_BASE - sizeof(struct global_vars *) - sizeof(struct global_vars)) & ~0x7); /* Copy global variables to new location. */ memcpy(newlocation, global_vars(), sizeof(struct global_vars)); + printk(BIOS_DEBUG, "disable_car global_vars copy done\n"); /* Set the new global variable pointer. */ *(struct global_vars **)(RAM_STACK_BASE - sizeof(struct global_vars *)) = newlocation; + printk(BIOS_DEBUG, "disable_car global_vars pointer adjusted, entering asm code..."); + printk(BIOS_DEBUG, "now..........................................................................\n"); + uart8250_tx_byte(TTYSx_BASE, 'F'); + uart8250_tx_byte(TTYSx_BASE, 'O'); + uart8250_tx_byte(TTYSx_BASE, 'O'); + uart8250_tx_byte(TTYSx_BASE, 'B'); + uart8250_tx_byte(TTYSx_BASE, 'A'); + uart8250_tx_byte(TTYSx_BASE, 'R'); + uart8250_tx_byte(TTYSx_BASE, '\n'); + +#define HALT_AFTER 2 __asm__ __volatile__( + + " movb $0xC0, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 0 + " hlt\n" +#endif + + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xC1, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 1 + " hlt\n" +#endif + + " movl %[newesp], %%esp \n" + + " movb $0xC2, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 2 + " hlt\n" +#endif + + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $112, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $103, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xC3, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 3 + " hlt\n" +#endif + +#if 0 /* We don't need cache as ram for now on */ /* disable cache */ " movl %%cr0, %%eax \n" " orl $(0x1<<30),%%eax \n" " movl %%eax, %%cr0 \n" + " movb $0xC4, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 4 + " hlt\n" +#endif + + " movl $99, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xC5, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 5 + " hlt\n" +#endif + /* disable fixed mtrr from now on, it will be enabled by coreboot_ram again*/ " movl %[_SYSCFG_MSR], %%ecx \n" " rdmsr \n" @@ -64,6 +232,81 @@ " wrmsr \n" #warning Must clear MTRR 0x200 and 0x201 + " movb $0xC6, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 6 + " hlt\n" +#endif + + " movl $102, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $120, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xC7, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 7 + " hlt\n" +#endif + /* Set the default memory type and disable fixed and enable variable MTRRs */ " movl %[_MTRRdefType_MSR], %%ecx \n" " xorl %%edx, %%edx \n" @@ -71,20 +314,214 @@ " movl $0x00000800, %%eax \n" " wrmsr \n" + " movb $0xC8, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 8 + " hlt\n" +#endif + + " movl $118, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xC9, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 9 + " hlt\n" +#endif + /* enable cache */ " movl %%cr0, %%eax \n" " andl $0x9fffffff,%%eax \n" " movl %%eax, %%cr0 \n" + " movb $0xCA, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 10 + " hlt\n" +#endif + + " movl $99, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + +#endif + + " movb $0xCB, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 11 + " hlt\n" +#endif + " wbinvd \n" - " movl %[newesp], %%esp \n" + " movb $0xCC, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 12 + " hlt\n" +#endif + + " movl $119, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $118, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $111, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl %[_TTYSx_BASE], %%eax\n" + " call uart8250_tx_byte\n" + + " movb $0xCD, %%al\n" + " outb %%al, $0x80\n" + +#if HALT_AFTER == 13 + " hlt\n" +#endif + " call stage1_phase3 \n" :: [newesp] "i" (newlocation), [_SYSCFG_MSR] "i" (SYSCFG_MSR), [_SYSCFG_MSR_newval] "i" (~(SYSCFG_MSR_MtrrFixDramModEn | SYSCFG_MSR_MtrrFixDramEn)), [_SYSCFG_MSR_MtrrFixDramModEn] "i" (SYSCFG_MSR_MtrrFixDramModEn), [_SYSCFG_MSR_MtrrFixDramEn] "i" (SYSCFG_MSR_MtrrFixDramEn), - [_MTRRdefType_MSR] "i" (MTRRdefType_MSR) + [_MTRRdefType_MSR] "i" (MTRRdefType_MSR), + [_TTYSx_BASE] "i" (TTYSx_BASE) : "memory"); } Index: corebootv3-via_car/arch/x86/stage1.c =================================================================== --- corebootv3-via_car/arch/x86/stage1.c (Revision 977) +++ corebootv3-via_car/arch/x86/stage1.c (Arbeitskopie) @@ -263,6 +263,7 @@ #ifdef CONFIG_CONSOLE_BUFFER /* Move the printk buffer to PRINTK_BUF_ADDR_RAM */ printk_buffer_move((void *)PRINTK_BUF_ADDR_RAM, PRINTK_BUF_SIZE_RAM); + printk(BIOS_DEBUG, "Done printk() buffer move\n"); #endif /* Turn off Cache-As-Ram */ disable_car();
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot