[SeaBIOS] [PATCH 00/11] Relocate init code to high memory
Avi Kivity
avi at redhat.com
Thu Sep 16 18:44:27 CEST 2010
On 09/16/2010 06:24 PM, Peter Stuge wrote:
> After reset and until CS is reloaded, it looks a lot like the CPU is
> running in real mode from CS:IP f000:fff0. In practise, CS is set up
> (since 386) so that this actually fetches from fffffff0. Again, it
> goes away as soon as CS is reloaded, e.g. after a far jmp or call.
> (The details are similar to the flat real AKA unreal mode trick IIRC.)
>
> The *only* place that the ROM chip is ever accessible is at top of 4GB.
> How much of the ROM that is actually set up to be decoded on reset is
> quite chipset specific.
>
> Physical address 0xf00000 is RAM. It's true that most firmware copies
> at least parts of itself to top 64kb of 1MB (after RAM init of
> course) but this has absolutely nothing to do with the ROM chip.
>
>
So, the copy has to happen before the far jump, but after the DRAM
controller has been initialized?
This contradicts
http://download.intel.com/design/intarch/datashts/29055002.pdf:
> 3.1.3. BIOS MEMORY
> The PIIX/PIIX3 supports 512 Kbytes of BIOS space. This includes the
> normal 128-Kbyte space plus an
> additional 384-Kbyte BIOS space (known as the extended BIOS area). The
> XBCS Register provides BIOS
> space access control. Access to the lower 64-Kbyte block of the
> 128-Kbyte space and the extended BIOS
> space can be individually enabled/disabled. In addition, write
> protection can be programmed for the entire
> BIOS space.
> PCI Access to BIOS Memory
> The 128-Kbyte BIOS memory space is located at 000E0000–000FFFFFh (top
> of 1 Mbyte) and is aliased at
> FFFE0000h (top of 4 Gbytes). This 128-Kbyte byte block is split into
> two 64-Kbyte blocks. Accesses to the
> top 64 Kbytes (000F0000–000FFFFFh) are forwarded to the ISA Bus and
> BIOSCS# is always generated.
> Accesses to the bottom 64 Kbytes (000E0000–000EFFFFh) are forwarded to
> the ISA Bus and BIOSCS# is
> only generated when this BIOS region is enabled. 1.If this BIOS region
> is enabled (bit 6=1 in the XBCS
> Register), accesses to the aliased region at the top of 4 Gbytes
> (FFFE0000h - FFFEFFFFh) are forwarded to
> ISA and BIOSCS# generated. If disabaled, these accesses are not
> forwarded to ISA and BIOSCS# is not
> generated.
> The additional 384-Kbyte region resides at FFF80000–FFFDFFFFh. If this
> BIOS region is enabled (bit 7=1 in
> the XBCS Register), these accesses (FFF80000h–FFFDFFFFh) are forwarded
> to ISA and BIOSCS#
> generated. If disabled, these accesses are not forwarded to ISA and
> BIOSCS# not generated.
> ISA Access to BIOS Memory
> The PIIX/PIIX3 confines all ISA-initiated BIOS accesses to the top 64
> Kbytes of the 128-Kbyte region
> (F0000–FFFFFh) to the ISA Bus, even if BIOS is shadowed in main
> memory. Accesses to the bottom 64
> Kbytes of the 128-Kbyte BIOS region (E0000–EFFFFh) are confined to the
> ISA Bus, when this region is
> enabled. When the BIOS region is disabled, accesses are forwarded to
> main memory.
> Accesses to the top 64-Kbyte BIOS region always generates BIOSCS#.
> Accesses to the bottom 64-Kbyte
> BIOS region generate BIOSCS#, when this region is enabled.
See also the documentation of the XBCS register.
--
error compiling committee.c: too many arguments to function
More information about the SeaBIOS
mailing list