sf: Avoid allocating memory on every read operation
authorSimon Glass <sjg@chromium.org>
Mon, 1 Oct 2018 18:22:09 +0000 (12:22 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 9 Oct 2018 10:40:27 +0000 (04:40 -0600)
At present spi_flash_cmd_read_ops() allocates and frees a few bytes of
memory every time it is called. It is faster to use the stack for this
and this is now supported by the minimum GCC version required by U-Boot.

Remove the allocation and use a variable-sized array instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/mtd/spi/spi_flash.c

index c1591242591da8da4fd33d9f67dbfad6f754760b..7113c855fe4c8ba3bc8661d2c38ca1ce5cfc80cf 100644 (file)
@@ -468,7 +468,7 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
                size_t len, void *data)
 {
        struct spi_slave *spi = flash->spi;
-       u8 *cmd, cmdsz;
+       u8 cmdsz;
        u32 remain_len, read_len, read_addr;
        int bank_sel = 0;
        int ret = -1;
@@ -488,11 +488,7 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
        }
 
        cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
-       cmd = calloc(1, cmdsz);
-       if (!cmd) {
-               debug("SF: Failed to allocate cmd\n");
-               return -ENOMEM;
-       }
+       u8 cmd[cmdsz];
 
        cmd[0] = flash->read_cmd;
        while (len) {
@@ -535,7 +531,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
        ret = clean_bar(flash);
 #endif
 
-       free(cmd);
        return ret;
 }