In working with the sis630, I noticed the linuxbios code as it stands does not normally enable the ram in the hole at 0xf0000 when booting from flash. So I turned it on and discovered that Linux needs the gdt, which gets covered by the ram when it is turned on. So I wrote code to shadow the gdt to ram (at the same addr), and discovered that the pirq_routing table will overwrite the gdt if it is too large (>0x50 bytes), which of course mine was. (pirq_table at offset 0, gdtptr at offset 0x40).
So I decided to set the bios base address to 0xffff0000 using the biosbase command to avoid the whole problem (normally defaults to 0xf0000). But Linux won't boot with a gdt located >1M (apparently), so I added code to relocate the gdt into lower ram where it works fine.
Maybe someone knows else knows why Linux won't start with a gdt in high flash but I couldn't figure it out.
-Steve