[coreboot] fam10/newconfig on supermicro h8dme - early hang

Myles Watson mylesgw at gmail.com
Wed Dec 23 00:11:06 CET 2009


> Right. Setting CONFIG_LOGICAL_CPUS to zero and making sure that
> conditional
> on CONFIG_LOGICAL_CPUS at the top of northbridge.c does not apply fixed
> that.
> 
> Should this go into the tree?
> 
> --- northbridge/amd/amdfam10/northbridge.c (revision 4978)
> +++ northbridge/amd/amdfam10/northbridge.c (working copy)
> @@ -31,10 +31,10 @@
> 
>  #include <cpu/x86/lapic.h>
> 
> -#if CONFIG_LOGICAL_CPUS==1
>  #include <cpu/amd/quadcore.h>
>  #include <pc80/mc146818rtc.h>
> -#endif
> 
>  #include "chip.h"
>  #include "root_complex/chip.h"

I like just moving the endif to protect nb_cfg_54, if it would work.  It
compiles for me.

--- northbridge/amd/amdfam10/northbridge.c (revision 4978)
+++ northbridge/amd/amdfam10/northbridge.c (working copy)
@@ -1235,7 +1235,6 @@
 	disable_siblings = !CONFIG_LOGICAL_CPUS;
 #if CONFIG_LOGICAL_CPUS == 1
 	get_option(&disable_siblings, "quad_core");
-#endif
 
 	// for pre_e0, nb_cfg_54 can not be set, ( even set, when you read
it
 	//    still be 0)
@@ -1243,6 +1242,7 @@
 	//    and differ d0 and e0 single core
 
 	nb_cfg_54 = read_nb_cfg_54();
+#endif
 
 #if CONFIG_CBB
 	dev_mc = dev_find_slot(0, PCI_DEVFN(CONFIG_CDB, 0)); //0x00


> 
> > > and by adding a return at the very beginning of start_other_cores in
> > >
> > >   cpu/amd/quadcore/quadcore.c
> > >
> > > which gets me a bit further, but not much. It hangs in the
> > > mcp55_early_pcie_setup function in
> > >
> > >   southbridge/nvidia/mcp55/mcp55_early_setup_car.c
> > >
> > > Log attached. Anything else I should try?
> >
> > If inl and outl are hanging, I would dump the routing registers and read
> the
> > device's IDs to see what's going wrong.  I'm not very familiar with how
> the
> > fam10 code works, but dumping the routing registers should be mostly cut
> and
> > paste from the k8/util.c code.
> 
> Right. I've done that - log attached. I'm dumping with
> 
>     showallroutes(BIOS_DEBUG, PCI_DEV(0, 0x18, 1));
> 
> I'm not sure what to make of the dump though (attached).
MMIO(b8)0000000000-31a4f2ffff, ->(0,1), , , CPU disable 0, Lock 0, Non
posted 0

This is broken, but I'm not sure if it's the dump or the register value.  It
shouldn't affect the IO, though.  That register looked fine.  It seems like
IO is broken for you not to be able to start the other processors or
complete the mcp55 init.

You could print out PCI_DEV(0,0x18,0) @ 0x6C to make sure that the lower
bits are what you expect.  The ones I'd look at are the default link (bits
11,3,2), disable routing bit (bit 0).

The default link should be 2.  The disable routing bit can tell you if it's
important that the routing registers are messed up.

Thanks,
Myles





More information about the coreboot mailing list