Commit 0fa712c9 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Tudor Ambarus

mtd: spi-nor: sfdp: add/use local variable in spi_nor_parse_bfpt()

Despite of how spi_nor_parse_bfpt() abuses the structure fields during
their calculation, gcc manages to make some decent code out of that. :-)
Yet adding a local variable to store the BFPT DWORDs during calculations
still saves 12 bytes of the object code (AArch64 gcc 4.8.5)...
Signed-off-by: default avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: default avatarTudor Ambarus <tudor.ambarus@microchip.com>
parent dec18bd8
...@@ -437,7 +437,7 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, ...@@ -437,7 +437,7 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
struct sfdp_bfpt bfpt; struct sfdp_bfpt bfpt;
size_t len; size_t len;
int i, cmd, err; int i, cmd, err;
u32 addr; u32 addr, val;
u16 half; u16 half;
u8 erase_mask; u8 erase_mask;
...@@ -473,21 +473,21 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, ...@@ -473,21 +473,21 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
} }
/* Flash Memory Density (in bits). */ /* Flash Memory Density (in bits). */
params->size = bfpt.dwords[BFPT_DWORD(2)]; val = bfpt.dwords[BFPT_DWORD(2)];
if (params->size & BIT(31)) { if (val & BIT(31)) {
params->size &= ~BIT(31); val &= ~BIT(31);
/* /*
* Prevent overflows on params->size. Anyway, a NOR of 2^64 * Prevent overflows on params->size. Anyway, a NOR of 2^64
* bits is unlikely to exist so this error probably means * bits is unlikely to exist so this error probably means
* the BFPT we are reading is corrupted/wrong. * the BFPT we are reading is corrupted/wrong.
*/ */
if (params->size > 63) if (val > 63)
return -EINVAL; return -EINVAL;
params->size = 1ULL << params->size; params->size = 1ULL << val;
} else { } else {
params->size++; params->size = val + 1;
} }
params->size >>= 3; /* Convert to bytes. */ params->size >>= 3; /* Convert to bytes. */
...@@ -554,10 +554,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, ...@@ -554,10 +554,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
params); params);
/* Page size: this field specifies 'N' so the page size = 2^N bytes. */ /* Page size: this field specifies 'N' so the page size = 2^N bytes. */
params->page_size = bfpt.dwords[BFPT_DWORD(11)]; val = bfpt.dwords[BFPT_DWORD(11)];
params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK; val &= BFPT_DWORD11_PAGE_SIZE_MASK;
params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT; val >>= BFPT_DWORD11_PAGE_SIZE_SHIFT;
params->page_size = 1U << params->page_size; params->page_size = 1U << val;
/* Quad Enable Requirements. */ /* Quad Enable Requirements. */
switch (bfpt.dwords[BFPT_DWORD(15)] & BFPT_DWORD15_QER_MASK) { switch (bfpt.dwords[BFPT_DWORD(15)] & BFPT_DWORD15_QER_MASK) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment