Attached patches for cn700, vt8237(r/s), and the mainboard, Jetway J7F2, along with a boot log. Currently, we're stuck in a reboot loop and I have no idea why, seems to be related to CAR disabling (this wasn't happening when disable_car was a noop). Carl-Daniel, any ideas?
-Corey
On 29.10.2008 09:02, Corey Osgood wrote:
Attached patches for cn700, vt8237(r/s), and the mainboard, Jetway J7F2, along with a boot log. Currently, we're stuck in a reboot loop and I have no idea why, seems to be related to CAR disabling (this wasn't happening when disable_car was a noop). Carl-Daniel, any ideas?
Sure. Too many of them, in fact. Do you have any way to log POST codes?
I'll cook up a few patches today in the hope that we can track this down.
Regards, Carl-Daniel
On 29.10.2008 09:02, Corey Osgood wrote:
Attached patches for cn700, vt8237(r/s), and the mainboard, Jetway J7F2, along with a boot log. Currently, we're stuck in a reboot loop and I have no idea why, seems to be related to CAR disabling (this wasn't happening when disable_car was a noop). Carl-Daniel, any ideas?
Could you try this patch and report serial output back to the list? It should at least give me an impression about where the code is broken.
Regards, Carl-Daniel
Add more debugging to the critical stage1 code around disable_car().
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: corebootv3-via_car/arch/x86/via/stage1.c =================================================================== --- corebootv3-via_car/arch/x86/via/stage1.c (Revision 958) +++ corebootv3-via_car/arch/x86/via/stage1.c (Arbeitskopie) @@ -50,6 +50,7 @@ */ 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 @@ -60,9 +61,12 @@ 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"); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */ Index: corebootv3-via_car/arch/x86/stage1.c =================================================================== --- corebootv3-via_car/arch/x86/stage1.c (Revision 958) +++ corebootv3-via_car/arch/x86/stage1.c (Arbeitskopie) @@ -264,6 +264,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();
debug log attached.
Thanks, Corey
On Thu, Oct 30, 2008 at 8:09 PM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 29.10.2008 09:02, Corey Osgood wrote:
Attached patches for cn700, vt8237(r/s), and the mainboard, Jetway J7F2, along with a boot log. Currently, we're stuck in a reboot loop and I have
no
idea why, seems to be related to CAR disabling (this wasn't happening
when
disable_car was a noop). Carl-Daniel, any ideas?
Could you try this patch and report serial output back to the list? It should at least give me an impression about where the code is broken.
Regards, Carl-Daniel
Add more debugging to the critical stage1 code around disable_car().
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: corebootv3-via_car/arch/x86/via/stage1.c
--- corebootv3-via_car/arch/x86/via/stage1.c (Revision 958) +++ corebootv3-via_car/arch/x86/via/stage1.c (Arbeitskopie) @@ -50,6 +50,7 @@ */ 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 @@ -60,9 +61,12 @@ 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"); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */ Index: corebootv3-via_car/arch/x86/stage1.c =================================================================== --- corebootv3-via_car/arch/x86/stage1.c (Revision 958) +++ corebootv3-via_car/arch/x86/stage1.c (Arbeitskopie) @@ -264,6 +264,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();
On 31.10.2008 01:36, Corey Osgood wrote:
debug log attached.
Thanks, the log was really informative. Can you apply the following patch and report back? Yes, the patch is evil, but it may help track down the issue.
Regards, Carl-Daniel
Index: arch/x86/via/stage1.c =================================================================== --- arch/x86/via/stage1.c (Revision 976) +++ 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,9 +47,19 @@ 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'); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */ @@ -55,6 +67,52 @@ " orl $(0x1<<30),%%eax \n" " movl %%eax, %%cr0 \n"
+ " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* disable fixed mtrr from now on, it will be enabled by coreboot_ram again*/ " movl %[_SYSCFG_MSR], %%ecx \n" " rdmsr \n" @@ -64,6 +122,70 @@ " wrmsr \n" #warning Must clear MTRR 0x200 and 0x201
+ " movl $102, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $120, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $0000024, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* Set the default memory type and disable fixed and enable variable MTRRs */ " movl %[_MTRRdefType_MSR], %%ecx \n" " xorl %%edx, %%edx \n" @@ -71,14 +193,214 @@ " movl $0x00000800, %%eax \n" " wrmsr \n"
+ " movl $118, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $0000027, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* enable cache */ " movl %%cr0, %%eax \n" " andl $0x9fffffff,%%eax \n" " movl %%eax, %%cr0 \n"
+ " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $0000016, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " wbinvd \n"
+ " movl $119, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $118, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $111, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $0000014, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl %[newesp], %%esp \n" + + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $112, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $103, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $0000014, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " call stage1_phase3 \n" :: [newesp] "i" (newlocation), [_SYSCFG_MSR] "i" (SYSCFG_MSR), Index: arch/x86/amd/k8/stage1.c =================================================================== Index: arch/x86/stage1.c =================================================================== --- arch/x86/stage1.c (Revision 976) +++ 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();
On 01.11.2008 02:50, Carl-Daniel Hailfinger wrote:
On 31.10.2008 01:36, Corey Osgood wrote:
debug log attached.
Thanks, the log was really informative. Can you apply the following patch and report back? Yes, the patch is evil, but it may help track down the issue.
And the patch had minor garbage in it. New patch follows:
Index: arch/x86/via/stage1.c =================================================================== --- arch/x86/via/stage1.c (Revision 976) +++ 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,9 +47,19 @@ 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'); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */ @@ -55,6 +67,52 @@ " orl $(0x1<<30),%%eax \n" " movl %%eax, %%cr0 \n"
+ " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* disable fixed mtrr from now on, it will be enabled by coreboot_ram again*/ " movl %[_SYSCFG_MSR], %%ecx \n" " rdmsr \n" @@ -64,6 +122,67 @@ " wrmsr \n" #warning Must clear MTRR 0x200 and 0x201
+ " movl $102, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $120, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* Set the default memory type and disable fixed and enable variable MTRRs */ " movl %[_MTRRdefType_MSR], %%ecx \n" " xorl %%edx, %%edx \n" @@ -71,14 +190,202 @@ " movl $0x00000800, %%eax \n" " wrmsr \n"
+ " movl $118, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $109, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $116, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $114, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + /* enable cache */ " movl %%cr0, %%eax \n" " andl $0x9fffffff,%%eax \n" " movl %%eax, %%cr0 \n"
+ " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $108, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " wbinvd \n"
+ " movl $119, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $98, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $105, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $118, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $111, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl %[newesp], %%esp \n" + + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $115, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $112, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $32, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $99, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $104, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $97, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $110, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $103, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $101, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $100, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " movl $10, %%edx\n" + " movl $1016, %%eax\n" + " call uart8250_tx_byte\n" + " call stage1_phase3 \n" :: [newesp] "i" (newlocation), [_SYSCFG_MSR] "i" (SYSCFG_MSR), Index: arch/x86/stage1.c =================================================================== --- arch/x86/stage1.c (Revision 976) +++ 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();
Debug log attached, I'm using COM2 so I modified the patch to use $760 instead of $1016, I hope that's right. I'm honestly not sure if the output is what you were expecting or not, I don't think it is though. One thing I noticed in the build log, with or without the patch, dunno if it matters or not:
/home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c: In function 'disable_car': /home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c:49: warning: passing argument 1 of 'memcpy' discards qualifiers from pointer target type
Thanks, Corey
On Fri, Oct 31, 2008 at 9:59 PM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 02:50, Carl-Daniel Hailfinger wrote:
On 31.10.2008 01:36, Corey Osgood wrote:
debug log attached.
Thanks, the log was really informative. Can you apply the following patch and report back? Yes, the patch is evil, but it may help track down the issue.
And the patch had minor garbage in it. New patch follows:
Index: arch/x86/via/stage1.c
--- arch/x86/via/stage1.c (Revision 976) +++ 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,9 +47,19 @@ 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'); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */
@@ -55,6 +67,52 @@ " orl $(0x1<<30),%%eax \n" " movl %%eax, %%cr0 \n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* disable fixed mtrr from now on, it will be enabled by
coreboot_ram again*/ " movl %[_SYSCFG_MSR], %%ecx \n" " rdmsr \n" @@ -64,6 +122,67 @@ " wrmsr \n" #warning Must clear MTRR 0x200 and 0x201
" movl $102, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $120, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $109, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $116, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* Set the default memory type and disable fixed and enable
variable MTRRs */ " movl %[_MTRRdefType_MSR], %%ecx \n" " xorl %%edx, %%edx \n" @@ -71,14 +190,202 @@ " movl $0x00000800, %%eax \n" " wrmsr \n"
" movl $118, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $109, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $116, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* enable cache */ " movl %%cr0, %%eax \n" " andl $0x9fffffff,%%eax \n" " movl %%eax, %%cr0 \n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" wbinvd \n"
" movl $119, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $118, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $111, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl %[newesp], %%esp \n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $112, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $103, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" call stage1_phase3 \n" :: [newesp] "i" (newlocation), [_SYSCFG_MSR] "i" (SYSCFG_MSR),
Index: arch/x86/stage1.c
--- arch/x86/stage1.c (Revision 976) +++ 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();
On Sat, Nov 1, 2008 at 1:06 AM, Corey Osgood corey.osgood@gmail.com wrote:
Debug log attached, I'm using COM2 so I modified the patch to use $760 instead of $1016, I hope that's right. I'm honestly not sure if the output is what you were expecting or not, I don't think it is though. One thing I noticed in the build log, with or without the patch, dunno if it matters or not:
/home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c: In function 'disable_car': /home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c:49: warning: passing argument 1 of 'memcpy' discards qualifiers from pointer target type
Thanks, Corey
I should have also mentioned that I didn't trim anything, the serial console hangs at the end of the log file, but the post code keeps changing, so I'm assuming something is going on but nothing's going to the console.
-Corey
On Fri, Oct 31, 2008 at 9:59 PM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 02:50, Carl-Daniel Hailfinger wrote:
On 31.10.2008 01:36, Corey Osgood wrote:
debug log attached.
Thanks, the log was really informative. Can you apply the following patch and report back? Yes, the patch is evil, but it may help track down the issue.
And the patch had minor garbage in it. New patch follows:
Index: arch/x86/via/stage1.c
--- arch/x86/via/stage1.c (Revision 976) +++ 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,9 +47,19 @@ 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'); __asm__ __volatile__( /* We don't need cache as ram for now on */ /* disable cache */
@@ -55,6 +67,52 @@ " orl $(0x1<<30),%%eax \n" " movl %%eax, %%cr0 \n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* disable fixed mtrr from now on, it will be enabled by
coreboot_ram again*/ " movl %[_SYSCFG_MSR], %%ecx \n" " rdmsr \n" @@ -64,6 +122,67 @@ " wrmsr \n" #warning Must clear MTRR 0x200 and 0x201
" movl $102, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $120, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $109, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $116, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* Set the default memory type and disable fixed and enable
variable MTRRs */ " movl %[_MTRRdefType_MSR], %%ecx \n" " xorl %%edx, %%edx \n" @@ -71,14 +190,202 @@ " movl $0x00000800, %%eax \n" " wrmsr \n"
" movl $118, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $109, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $116, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $114, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
/* enable cache */ " movl %%cr0, %%eax \n" " andl $0x9fffffff,%%eax \n" " movl %%eax, %%cr0 \n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $108, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" wbinvd \n"
" movl $119, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $98, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $105, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $118, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $111, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl %[newesp], %%esp \n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $115, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $112, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $32, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $99, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $104, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $97, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $110, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $103, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $101, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $100, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" movl $10, %%edx\n"
" movl $1016, %%eax\n"
" call uart8250_tx_byte\n"
" call stage1_phase3 \n" :: [newesp] "i" (newlocation), [_SYSCFG_MSR] "i" (SYSCFG_MSR),
Index: arch/x86/stage1.c
--- arch/x86/stage1.c (Revision 976) +++ 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();
On 01.11.2008 06:08, Corey Osgood wrote:
On Sat, Nov 1, 2008 at 1:06 AM, Corey Osgood corey.osgood@gmail.com wrote:
Debug log attached, I'm using COM2 so I modified the patch to use $760 instead of $1016, I hope that's right. I'm honestly not sure if the output is what you were expecting or not, I don't think it is though. One thing I noticed in the build log, with or without the patch, dunno if it matters or not:
/home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c: In function 'disable_car': /home/corey/coreboot/coreboot-v3/arch/x86/via/stage1.c:49: warning: passing argument 1 of 'memcpy' discards qualifiers from pointer target type
Thanks, Corey
I should have also mentioned that I didn't trim anything, the serial console hangs at the end of the log file, but the post code keeps changing, so I'm assuming something is going on but nothing's going to the console.
Thanks. I now understand where parts of the garbage come from. Can you try the attached patch? It should require no further fixups for COM2.
It would be great if you could use various values between 0 and 13 (inclusive) for the #define HALT_AFTER. The idea there is to decrease/increase the value up to the biggest value where it doesn't reboot automatically. The POST codes emitted by the diagnostic code should be between 0xC0 and 0xCD. The last expected POST code for a given HALT_AFTER is 0xC0+HALT_AFTER.
I'm also increasingly convinced that RAM is not working right, especially for the area we use as stack. Can you enable ram_check() in mainboard/.../initram.c again?
Regards, Carl-Daniel
On 01.11.2008 12:33, Carl-Daniel Hailfinger wrote:
Thanks. I now understand where parts of the garbage come from. Can you try the attached patch? It should require no further fixups for COM2.
It would be great if you could use various values between 0 and 13 (inclusive) for the #define HALT_AFTER. The idea there is to decrease/increase the value up to the biggest value where it doesn't reboot automatically. The POST codes emitted by the diagnostic code should be between 0xC0 and 0xCD. The last expected POST code for a given HALT_AFTER is 0xC0+HALT_AFTER.
I'm also increasingly convinced that RAM is not working right, especially for the area we use as stack. Can you enable ram_check() in mainboard/.../initram.c again?
My apologies. I had attached an older version of the patch. Please try this one. Oh, and I'd be very interested in your build/arch/x86/via/stage1.o file.
Regards, Carl-Daniel
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.
Thanks, Corey
On Sat, Nov 1, 2008 at 7:38 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 12:33, Carl-Daniel Hailfinger wrote:
Thanks. I now understand where parts of the garbage come from. Can you try the attached patch? It should require no further fixups for COM2.
It would be great if you could use various values between 0 and 13 (inclusive) for the #define HALT_AFTER. The idea there is to decrease/increase the value up to the biggest value where it doesn't reboot automatically. The POST codes emitted by the diagnostic code should be between 0xC0 and 0xCD. The last expected POST code for a given HALT_AFTER is 0xC0+HALT_AFTER.
I'm also increasingly convinced that RAM is not working right, especially for the area we use as stack. Can you enable ram_check() in mainboard/.../initram.c again?
My apologies. I had attached an older version of the patch. Please try this one. Oh, and I'd be very interested in your build/arch/x86/via/stage1.o file.
Regards, Carl-Daniel
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.
Regards, Carl-Daniel
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
On 01.11.2008 22:28, Carl-Daniel Hailfinger wrote:
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.
OK, I reread every line of the code and reimplemented the problematic stuff from scratch.
Can you try the new patch with HALT_AFTER=5 and 6? I'm pretty confident that if 6 works, all later numbers should also not reboot. By the way, the new code should be even better than the (working) v2 code.
Regards, Carl-Daniel
On Tue, Nov 4, 2008 at 9:58 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 22:28, Carl-Daniel Hailfinger wrote:
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.
OK, I reread every line of the code and reimplemented the problematic stuff from scratch.
Can you try the new patch with HALT_AFTER=5 and 6? I'm pretty confident that if 6 works, all later numbers should also not reboot. By the way, the new code should be even better than the (working) v2 code.
I'll test it out this evening, thanks!
-Corey
On Tue, Nov 4, 2008 at 9:58 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 22:28, Carl-Daniel Hailfinger wrote:
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.
OK, I reread every line of the code and reimplemented the problematic stuff from scratch.
Can you try the new patch with HALT_AFTER=5 and 6? I'm pretty confident that if 6 works, all later numbers should also not reboot. By the way, the new code should be even better than the (working) v2 code.
That did the trick!
Thanks, Corey
On 05.11.2008 05:29, Corey Osgood wrote:
On Tue, Nov 4, 2008 at 9:58 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 01.11.2008 22:28, Carl-Daniel Hailfinger wrote:
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.
OK, I reread every line of the code and reimplemented the problematic stuff from scratch.
Can you try the new patch with HALT_AFTER=5 and 6? I'm pretty confident that if 6 works, all later numbers should also not reboot. By the way, the new code should be even better than the (working) v2 code.
That did the trick!
Great, thanks for testing!
I just sent a patch with the final fixup sans debug code.
Regards, Carl-Daniel
On Tue, Nov 4, 2008 at 8:29 PM, Corey Osgood corey.osgood@gmail.com wrote:
That did the trick!
So where do we stand on the via and v3?
ron
On 05.11.2008 05:58, ron minnich wrote:
On Tue, Nov 4, 2008 at 8:29 PM, Corey Osgood corey.osgood@gmail.com wrote:
That did the trick!
So where do we stand on the via and v3?
I'd say the CAR code (both enable and disable) is complete and perfect ;-)
Corey knows about the other stuff.
Does anybody have a VIA Nano board where he can try the stage1 code? Using the jetway target with minor adjustments for SuperIO should give serial output. And if serial output works, we know the CAR code is OK for the Nano. That would certainly be a welcome event. Similar tests appreciated for VIA C3 and anything else you can lay your hands on.
Regards, Carl-Daniel
On 05.11.2008 06:03, Carl-Daniel Hailfinger wrote:
On 05.11.2008 05:58, ron minnich wrote:
On Tue, Nov 4, 2008 at 8:29 PM, Corey Osgood corey.osgood@gmail.com wrote:
That did the trick!
So where do we stand on the via and v3?
I'd say the CAR code (both enable and disable) is complete and perfect ;-)
Corey knows about the other stuff.
Does anybody have a VIA Nano board where he can try the stage1 code? Using the jetway target with minor adjustments for SuperIO should give serial output. And if serial output works, we know the CAR code is OK for the Nano. That would certainly be a welcome event. Similar tests appreciated for VIA C3 and anything else you can lay your hands on.
The reason why I'm asking for this is simple: Give people serial output and they feel success even if lots of stuff is still to be done. That's an important motivator and one of the areas where v3 can shine due to its structure.
Regards, Carl-Daniel
On Wed, Nov 5, 2008 at 12:07 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
On 05.11.2008 06:03, Carl-Daniel Hailfinger wrote:
On 05.11.2008 05:58, ron minnich wrote:
On Tue, Nov 4, 2008 at 8:29 PM, Corey Osgood corey.osgood@gmail.com
wrote:
That did the trick!
So where do we stand on the via and v3?
I'd say the CAR code (both enable and disable) is complete and perfect
;-)
Corey knows about the other stuff.
Does anybody have a VIA Nano board where he can try the stage1 code? Using the jetway target with minor adjustments for SuperIO should give serial output. And if serial output works, we know the CAR code is OK for the Nano. That would certainly be a welcome event. Similar tests appreciated for VIA C3 and anything else you can lay your hands on.
The reason why I'm asking for this is simple: Give people serial output and they feel success even if lots of stuff is still to be done. That's an important motivator and one of the areas where v3 can shine due to its structure.
cn700 & v3: if you comment out vt8237_enable()'s content in vt8237.c, it might boot a payload, I'm tracking down the problem there right now. I don't think we can use eg dev->pci.id.vendor in stage2.phase2? I want to clean that up by the end of the night.
other cpus: I've got a Nehemiah C3 board here I'll try at some point, but I'm focusing on c7 atm. I think the CPU is too different there, but I could be wrong. If anyone wants to give me a Nano board, I'll try it out :D
-Corey
On Tue, Nov 4, 2008 at 9:17 PM, Corey Osgood corey.osgood@gmail.com wrote:
cn700 & v3: if you comment out vt8237_enable()'s content in vt8237.c, it might boot a payload, I'm tracking down the problem there right now. I don't think we can use eg dev->pci.id.vendor in stage2.phase2? I want to clean that up by the end of the night.
yes, in phase 2 that has not been set up yet. It gets set up in phase 3 during the scanning.
ron
I am going to ack these as I am working on this today and there is no point in getting out of sync. Let me know soon if you don't want to commit, I can do it.
Acked-by: Ronald G. Minnich rminnich@gmail.com
On Wed, Oct 29, 2008 at 1:02 AM, Corey Osgood corey.osgood@gmail.com wrote:
Attached patches for cn700, vt8237(r/s), and the mainboard, Jetway J7F2, along with a boot log. Currently, we're stuck in a reboot loop and I have no idea why, seems to be related to CAR disabling (this wasn't happening when disable_car was a noop). Carl-Daniel, any ideas?
-Corey
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot