Hi Pedro,

On 06.08.22 18:45, Pedro Erencia wrote:
> I was going to try coreboot on an ASROCK FM2A88X Extreme4+ (
> https://www.asrock.com/mb/AMD/FM2A88X%20Extreme4+/) with the configuration
> of the supported ASUS A88XM-E (
> https://doc.coreboot.org/mainboard/asus/a88xm-e.html) which has the same
> chipset (A88X Bolton).

to repeat Paul's warning: A coreboot build is very board specific.
There's a chance that it boots, but there's also a chance that some
hardware breaks. The chance that everything works OOB is probably
lower.

> The fact is that, at this moment, I only have a 16 MiB flash, while the
> image is 8 MiB. As the chipset claims that it
> “Supports a maximum SPI ROM size of 16MB” I think there should be no
> problem, but I wonder how I have to burn the image. That led me to the
> question of how the translation between CPU and flash addresses are done.
> For supporting various ROM sizes, I guess the controller should somehow
> know the size of the ROM, but I don't see anywhere where that could be
> specified.
> The only thing I found is this stack overflow question (
> https://stackoverflow.com/questions/60200796/how-does-processor-read-bios-from-spi-flash).
> There, flash descriptors and some straps are mentioned to provide the ROM
> size, but none of those methods are mentioned on the Bolton Datasheet.
> So I have two questions here,
> 1. How should I burn the 8 MiB image on the 16 MiB flash?
> 2. Out of curiosity, how is the cpu-flash address translation done?

You are right that it's not explicitly configured. It's a simple trick:
If you don't know the size you have to start at an offset from one end.
For the lower end (address 0) that's simple, every SPI flash starts at
address 0. But x86 is very special: The firmware actually starts at the
end of the flash. And that's where one details plays a significant role:
A SPI flash ignores address bits that it doesn't know. So, when it is
asked for data at address 0xfffff0, it will always return the last 16
bytes (assuming a flash chip that uses commands with 24-bit addresses).
The size of the chip doesn't matter, a 1MiB chip would simply ignore the
4 most-significant address bits.

Before SPI flash, the logic was in the flash chip itself, AIUI. The
chips were on the memory bus and knew they should reply to requests in
the range 0x100000000-flashsize..0xffffffff.

Nico
_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-le...@coreboot.org

Reply via email to