diff --git a/doc/release_notes/devel.rst b/doc/release_notes/devel.rst index 3bd25de7a..44490b183 100644 --- a/doc/release_notes/devel.rst +++ b/doc/release_notes/devel.rst @@ -7,13 +7,12 @@ the next release of flashrom and which are currently only available by source code checkout (see :doc:`../dev_guide/building_from_source`). These changes may be further revised before the next release. -Known issues -============ +Bugs fixed +========== -AMD-based PCs with FCH are unable to read flash contents for internal (BIOS -flash) chips larger than 16 MB, and attempting to do so may crash the system. -Systems with AMD "Promontory" IO extenders (mostly "Zen" desktop platforms) are -not currently supported. +AMD-based PCs with FCH were unable to read flash contents for internal (BIOS +flash) chips larger than 16 MB, and attempting to do so could crash the +system. https://ticket.coreboot.org/issues/370 diff --git a/sb600spi.c b/sb600spi.c index 4947447c0..f48e166cc 100644 --- a/sb600spi.c +++ b/sb600spi.c @@ -575,6 +575,11 @@ static int promontory_read_memmapped(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len) { struct sb600spi_data * data = (struct sb600spi_data *)flash->mst->spi.data; + + /* If the flash size is bigger than 16MiB, we can't read it from the top of 4G */ + if (flash->chip->total_size > (16 * 1024)) + return default_spi_read(flash, buf, start, len); + if (!data->flash) { map_flash(flash); data->flash = flash; /* keep a copy of flashctx for unmap() on tear-down. */ @@ -617,7 +622,7 @@ static const struct spi_master spi_master_yangtze = { }; static const struct spi_master spi_master_promontory = { - .max_data_read = MAX_DATA_READ_UNLIMITED, + .max_data_read = FIFO_SIZE_YANGTZE - 3, .max_data_write = FIFO_SIZE_YANGTZE - 3, .command = spi100_spi_send_command, .map_flash_region = physmap,