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: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
This commit is contained in:
parent
dec18bd8f4
commit
0fa712c9db
@ -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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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,
|
|||||||
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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user