spi: do not use malloc in Gigadevice driver
This allows us to use the driver before ramstage. BRANCH=none BUG=none TEST=built and booted on Pinky Signed-off-by: David Hendricks <dhendrix@chromium.org> Change-Id: I0ce901331e401274254b8889484ffb41359119fa Reviewed-on: https://chromium-review.googlesource.com/235864 Reviewed-by: Julius Werner <jwerner@chromium.org> (cherry picked from commit cd57587dab74de509d5c50cfc1ad337d765af6c8) Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/237022
This commit is contained in:
parent
75fdfeec7a
commit
6f430af7ba
1 changed files with 16 additions and 19 deletions
|
|
@ -195,13 +195,17 @@ static int gigadevice_erase(struct spi_flash *flash, u32 offset, size_t len)
|
|||
return spi_flash_cmd_erase(flash, CMD_GD25_SE, offset, len);
|
||||
}
|
||||
|
||||
static struct gigadevice_spi_flash stm;
|
||||
|
||||
struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode)
|
||||
{
|
||||
const struct gigadevice_spi_flash_params *params;
|
||||
unsigned page_size;
|
||||
struct gigadevice_spi_flash *stm;
|
||||
unsigned int i;
|
||||
|
||||
if (stm.params)
|
||||
die("Gigadevice driver already initialized.");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(gigadevice_spi_flash_table); i++) {
|
||||
params = &gigadevice_spi_flash_table[i];
|
||||
if (params->id == ((idcode[1] << 8) | idcode[2]))
|
||||
|
|
@ -215,32 +219,25 @@ struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
stm = malloc(sizeof(struct gigadevice_spi_flash));
|
||||
if (!stm) {
|
||||
printk(BIOS_WARNING,
|
||||
"SF gigadevice.c: Failed to allocate memory\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stm->params = params;
|
||||
stm->flash.spi = spi;
|
||||
stm->flash.name = params->name;
|
||||
stm.params = params;
|
||||
stm.flash.spi = spi;
|
||||
stm.flash.name = params->name;
|
||||
|
||||
/* Assuming power-of-two page size initially. */
|
||||
page_size = 1 << params->l2_page_size;
|
||||
|
||||
stm->flash.write = gigadevice_write;
|
||||
stm->flash.erase = gigadevice_erase;
|
||||
stm.flash.write = gigadevice_write;
|
||||
stm.flash.erase = gigadevice_erase;
|
||||
#if CONFIG_SPI_FLASH_NO_FAST_READ
|
||||
stm->flash.read = spi_flash_cmd_read_slow;
|
||||
stm.flash.read = spi_flash_cmd_read_slow;
|
||||
#else
|
||||
stm->flash.read = spi_flash_cmd_read_fast;
|
||||
stm.flash.read = spi_flash_cmd_read_fast;
|
||||
#endif
|
||||
stm->flash.sector_size = (1 << stm->params->l2_page_size) *
|
||||
stm->params->pages_per_sector;
|
||||
stm->flash.size = page_size * params->pages_per_sector
|
||||
stm.flash.sector_size = (1 << stm.params->l2_page_size) *
|
||||
stm.params->pages_per_sector;
|
||||
stm.flash.size = page_size * params->pages_per_sector
|
||||
* params->sectors_per_block
|
||||
* params->nr_blocks;
|
||||
|
||||
return &stm->flash;
|
||||
return &stm.flash;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue