Hi Keith
On Sun, Mar 1, 2020 at 9:44 PM Keith Hui buurin@gmail.com wrote:
Hi coreboot folks,
I was unable to get any serial output, even with early serial configured.
Z77 power on defaults will see port 80 decoded by LPC according to their datasheet, and I found Asus actually included with some boards a POST card that plugs into the TPM header, so I'm on the right track. Now to see if I can implement the LPC protocol correctly on an Arduino Due, chosen for its 84MHz clock and 3.3v operation.
I looked at the source and only see the CONFIG_POST_DEVICE_* options used by sb/amd/*/hudson, not by any Intel platform code.
I then looked at the datasheet and the lspci dump with OEM BIOS. I would need to do something to device 0x1e.0 (disabled!) and 0x1c.6 (PCIe root port 6) and I would need new code that connects to CONFIG_POST_DEVICE_*.
I couldn't get LPC bus right on the Due, but I did get serial going. Initially I didn't get anything past the bootblock signon banner, but curiously after inserting a stub bootblock_mainboard_init(), I was able to get serial going and got some logs.
That is good to hear.
My .config is attached, and the boot log follows. TL;DR: Memory init failed.
That is not so good to hear.
The RAM are a pair of Samsung 4GB PC3-12800S-11-11-F3 SODIMM modules on adapters. They did work with OEM firmware. And the adapters have been used elsewhere with no problems.
Alright. That is a rather weird configuration, but I guess it should work.
After replacing the RAM with a pair of OCZ 2GBs I was eventually able to go all the way through SeaBIOS. It probably booted my SystemRescueCD on a USB3 stick too, but I cannot say for sure, with only a black screen throughout out of onboard video.
OCZ boots with both MRC and native RAM init; Samsung SODIMM fails with both.
Uh, interesting. I have seen native raminit fail on some cases, but that MRC also fails is weird.
Where should I look next?
Thanks Keith
--- BEGIN SERIAL LOG ---
<snip>
SPD probe channel0, slot0 SPD probe channel0, slot1 SPD probe channel0, slot0 Row addr bits : 15 Column addr bits : 10 Number of ranks : 2 DIMM Capacity : 4096 MB CAS latencies : 5 6 7 8 9 10 11 tCKmin : 1.250 ns tAAmin : 13.125 ns tWRmin : 15.000 ns tRCDmin : 13.125 ns tRRDmin : 6.000 ns tRPmin : 13.125 ns tRASmin : 35.000 ns tRCmin : 48.125 ns tRFCmin : 160.000 ns tWTRmin : 7.500 ns tRTPmin : 7.500 ns tFAWmin : 30.000 ns channel[0] rankmap = 0x3 SPD probe channel0, slot1 Row addr bits : 15 Column addr bits : 10 Number of ranks : 2 DIMM Capacity : 4096 MB CAS latencies : 5 6 7 8 9 10 11 tCKmin : 1.250 ns tAAmin : 13.125 ns tWRmin : 15.000 ns tRCDmin : 13.125 ns tRRDmin : 6.000 ns tRPmin : 13.125 ns tRASmin : 35.000 ns tRCmin : 48.125 ns tRFCmin : 160.000 ns tWTRmin : 7.500 ns tRTPmin : 7.500 ns tFAWmin : 30.000 ns channel[0] rankmap = 0xf SPD probe channel1, slot0 SPD probe channel1, slot1 SPD probe channel1, slot0 SPD probe channel1, slot1 Starting Ivybridge RAM training (0).
Note that only Channel 0 has DIMMs. Channel 1 is completely empty, so you are not using dual channel. Note that having two DIMMs on a single channel is extremely unusual. This means, it is probably not well-tested. Try to put the failing DIMMs on separate channels, and try the slots that are furthest away from the CPU.
100MHz reference clock support: yes Trying CAS 11, tCK 320. Found compatible clock, CAS pair.
<snip>
Done memory map Done io registers Done jedec reset Done MRS commands edge write discovery failed: 0, 0, 2 RAM training failed, trying fallback.
This means that, for some reason, one of the memory training algorithms failed. Native raminit has some weird bugs, but it's hard to fix them given the publicly available documentation (none). The raminit then proceeds to do "fallback" mode, which disables the failing channel and tries again.
SPD probe channel0, slot0 SPD probe channel0, slot1 SPD probe channel0, slot0 Row addr bits : 15 Column addr bits : 10 Number of ranks : 2 DIMM Capacity : 4096 MB CAS latencies : 5 6 7 8 9 10 11 tCKmin : 1.250 ns tAAmin : 13.125 ns tWRmin : 15.000 ns tRCDmin : 13.125 ns tRRDmin : 6.000 ns tRPmin : 13.125 ns tRASmin : 35.000 ns tRCmin : 48.125 ns tRFCmin : 160.000 ns tWTRmin : 7.500 ns tRTPmin : 7.500 ns tFAWmin : 30.000 ns channel[0] rankmap = 0x3 SPD probe channel0, slot1 Row addr bits : 15 Column addr bits : 10 Number of ranks : 2 DIMM Capacity : 4096 MB CAS latencies : 5 6 7 8 9 10 11 tCKmin : 1.250 ns tAAmin : 13.125 ns tWRmin : 15.000 ns tRCDmin : 13.125 ns tRRDmin : 6.000 ns tRPmin : 13.125 ns tRASmin : 35.000 ns tRCmin : 48.125 ns tRFCmin : 160.000 ns tWTRmin : 7.500 ns tRTPmin : 7.500 ns tFAWmin : 30.000 ns channel[0] rankmap = 0xf SPD probe channel1, slot0 SPD probe channel1, slot1 SPD probe channel1, slot0 SPD probe channel1, slot1 Starting Ivybridge RAM training (0). No valid DIMMs found
Both DIMMs are on the failing channel. This means that there are no DIMMs to initialize on the other channel, so raminit just halts.
--- END NATIVE RAMINIT LOG ---
--- BEGIN MRC RAMINIT LOG ---
<snip> (MRC raminit debug logs are wet noodles, not really useful)
--- END MRC RAMINIT LOG ---
[1] This is a message I added in the stub.
Best regards,
Angel Pons