SPI: Add API for programmer-specific flashing.
Change-Id: I7a2f5b9ae74458b5ed6271b1c27842c61546dcd2 Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: http://review.coreboot.org/4712 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
e33d6cac96
commit
e23bd0e3c4
|
@ -267,6 +267,13 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
|
||||||
goto err_claim_bus;
|
goto err_claim_bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (spi->force_programmer_specific && spi->programmer_specific_probe) {
|
||||||
|
flash = spi->programmer_specific_probe (spi);
|
||||||
|
if (!flash)
|
||||||
|
goto err_read_id;
|
||||||
|
goto flash_detected;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read the ID codes */
|
/* Read the ID codes */
|
||||||
ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
|
ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -295,11 +302,19 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!flash && spi->programmer_specific_probe) {
|
||||||
|
#if CONFIG_SMM_TSEG && defined(__SMM__)
|
||||||
|
/* Need to relocate this function */
|
||||||
|
tseg_relocate((void **)&spi->programmer_specific_probe);
|
||||||
|
#endif
|
||||||
|
flash = spi->programmer_specific_probe (spi);
|
||||||
|
}
|
||||||
if (!flash) {
|
if (!flash) {
|
||||||
printk(BIOS_WARNING, "SF: Unsupported manufacturer %02x\n", *idp);
|
printk(BIOS_WARNING, "SF: Unsupported manufacturer %02x\n", *idp);
|
||||||
goto err_manufacturer_probe;
|
goto err_manufacturer_probe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flash_detected:
|
||||||
#if CONFIG_SMM_TSEG && defined(__SMM__)
|
#if CONFIG_SMM_TSEG && defined(__SMM__)
|
||||||
/* Ensure flash handlers are valid for TSEG */
|
/* Ensure flash handlers are valid for TSEG */
|
||||||
tseg_relocate((void **)&flash->read);
|
tseg_relocate((void **)&flash->read);
|
||||||
|
|
|
@ -64,6 +64,8 @@ struct spi_slave {
|
||||||
unsigned int bus;
|
unsigned int bus;
|
||||||
unsigned int cs;
|
unsigned int cs;
|
||||||
unsigned int rw;
|
unsigned int rw;
|
||||||
|
int force_programmer_specific;
|
||||||
|
struct spi_flash * (*programmer_specific_probe) (struct spi_slave *spi);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue