On Mon, 2011-10-24 at 10:22 -0600, Marc Jones wrote: > On Mon, Oct 24, 2011 at 4:15 AM, Patrick Georgi <[email protected]> > wrote: > > Hi all, > > > > as you may be aware, coreboot has two different ROM layouts so far. > > > > The older one is derived from what we did before CBFS, and has all code that > > does RAM init (our "romstage") in the bootblock (up to 64k at the top end of > > the image). This worked for a long time, but required some hackery for > > supporting dual-image scenarios (like fallback/normal, where we normal > > passed control to fallback by jumping to start-8 bytes), and it also broke > > when AMD's RAM setup became so complicated that it doesn't fit in 64k > > anymore. > > Those 64k are mandated by ROM mappings of various chipsets which, by > > default, only provide access to the upper 64k. > > > > The newer one, created after the CBFS switch and exploiting its features, > > has a tiny bootblock (hence the name), often less than 1k, which implements > > some policy: By default, it simply looks up "fallback/romstage" in CBFS and > > executes it. Our other policy does the old fallback/normal routine (using a > > counter in nvram), but executing files in CBFS as well, instead of jumping > > into the void and hoping that there's code there. > > > > The problem with the new approach is that it requires full ROM mapping > > rather early. Boards whose romstage fit in the 64k were free to defer > > setting up mapping to whereever it is convenient inside the romstage, so > > it's not all that easy to identify without means to test it. Unfortunately, > > this is a runtime problem, not a build problem, so it's hard to test all our > > 160 boards. For this reason, we kept both mechanisms in the tree, under the > > monikers BIG_BOOTBLOCK and TINY_BOOTBLOCK. > > > > Some chipsets that are in common use were converted rather early, so by now, > > 100 boards use tiny bootblock, while 60 use the old method. > > Since then - not much happened. > > > > Kyösti Mälkki recently brought this issue up again (thanks!), and proposes > > to invert the flags, making tiny bootblock the default, so "big" bootblock > > has to be requested explicitely and also adding some "maybe" flag for boards > > that might just work. This is quite a large change, but I fear it'll bring > > relatively little progress - people will just copy the TINY_NO_BOOTBLOCK (or > > what it's called in the latest patch iteration) flag and move on. > > > > Therefore, I propose (http://review.coreboot.org/#change,320) to get rid of > > the "big bootblock" variant altogether. This might break some boards > > (silently: they still build, but they fail on boot), but at least it forces > > action to fix them. > > > > Advantages: > > - one flag less to care about > > - more uniform feature set (big bootblock didn't support any fallback > > mechanism) > > - more opportunities to clean out and simplify the build system and code - > > there are some crude workarounds to make both mechanisms work > > > > Disadvantages: > > - Boards might be broken for a long time until someone tries them again. The > > visible result is that the boot fails early (ie. no error signalling at all, > > the system simply hangs, nothing visible). > > > > It's possible to determine all boards that _might_ be affected (those that > > use a big bootblock now), so I could add that list to the commit message, > > hopefully helping whoever stumbles over this issue. > > > > Comments? > > > > Hi Patrick, > > I think that this makes sense. It seems like the change would improve > the build and standardize early coreboot. I think that we can support > developers in the porting for those platforms when they come up. The > ROM decode is a typically a southbridge setting, so do you know what > southbridges would be untested? > > Marc > >
Hello Marc I am glad this topic brings up discussion. List of mainboards that currently do not select TINY_BOOTBLOCK and do not select ROMCC in Kconfig: aaeon/pfm-540i_revb amd/db800 amd/norwich amd/rumba artecgroup/dbe61 asus/a8v-e_deluxe asus/a8v-e_se asus/mew-am asus/mew-vm bcom/winnetp680 digitallogic/msm800sev ecs/p6iwp-fe hp/e_vectra_p2706t iei/pcisa-lx-800-r10 intel/eagleheights intel/mtarvon jetway/j7f24 lenovo/x60 lippert/frontrunner lippert/hurricane-lx lippert/literunner-lx lippert/roadrunner-lx lippert/spacerunner-lx mitac/6513wu msi/ms6178 nec/powermate2000 pcengines/alix1c pcengines/alix2d roda/rk886ex traverse/geos tyan/s2735 via/epia-cn via/epia-m700 via/pc2500e winent/pl6064 wyse/s50 List of southbridges on those mainboards, as taken from the mainboard/Kconfig files. SOUTHBRIDGE_AMD_CS5535 SOUTHBRIDGE_AMD_CS5536 SOUTHBRIDGE_INTEL_I3100 SOUTHBRIDGE_INTEL_I82801AX SOUTHBRIDGE_INTEL_I82801EX SOUTHBRIDGE_INTEL_I82801GX SOUTHBRIDGE_INTEL_I82870 SOUTHBRIDGE_RICOH_RL5C476 SOUTHBRIDGE_TI_PCI7420 SOUTHBRIDGE_VIA_K8T890 SOUTHBRIDGE_VIA_VT8237R It appears all but the two below already have an implementation with tiny bootblock on some other mainboard: SOUTHBRIDGE_AMD_CS5535 SOUTHBRIDGE_AMD_CS5536 It may be that the only reason BIG_BOOTBLOCK gets dragged along, is that there has been no clear migration path away from it. I think there now exists a better choice, pushing the choice in menuconfig. http://review.coreboot.org/333 As a side note. I did not realise it was possible to have TINY_BOOTBLOCK without Cache-As-Ram. There was no such implementation (besides QEMU). I thought that tiny bootblock would also move memory controller initialisation away from romstage (so it could be compiled with gcc) and then utilise cache for its stack. KM -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

