diff options
author | Brian Norris <computersforpeace@gmail.com> | 2015-10-30 02:59:19 -0400 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2015-10-30 14:50:34 -0400 |
commit | 3f06d2a912b55c53e9efbd799f7205dbfe041029 (patch) | |
tree | 8676561b58b6cd83b87214519f9ab775dc9663c9 | |
parent | 5a2415b0769233194f20d3906c3ffc6a2033317c (diff) |
mtd: brcmnand: factor out CFG and CFG_EXT bitfields
Use enum instead of magic numbers for CFG and CFG_EXT bitfields.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Tested-by: Anup Patel <anup.patel@broadcom.com>
-rw-r--r-- | drivers/mtd/nand/brcmnand/brcmnand.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c index 7c1c306650a4..3bd31a6055b6 100644 --- a/drivers/mtd/nand/brcmnand/brcmnand.c +++ b/drivers/mtd/nand/brcmnand/brcmnand.c | |||
@@ -344,6 +344,28 @@ static const u8 brcmnand_cs_offsets_cs0[] = { | |||
344 | [BRCMNAND_CS_TIMING2] = 0x14, | 344 | [BRCMNAND_CS_TIMING2] = 0x14, |
345 | }; | 345 | }; |
346 | 346 | ||
347 | /* | ||
348 | * Bitfields for the CFG and CFG_EXT registers. Pre-v7.1 controllers only had | ||
349 | * one config register, but once the bitfields overflowed, newer controllers | ||
350 | * (v7.1 and newer) added a CFG_EXT register and shuffled a few fields around. | ||
351 | */ | ||
352 | enum { | ||
353 | CFG_BLK_ADR_BYTES_SHIFT = 8, | ||
354 | CFG_COL_ADR_BYTES_SHIFT = 12, | ||
355 | CFG_FUL_ADR_BYTES_SHIFT = 16, | ||
356 | CFG_BUS_WIDTH_SHIFT = 23, | ||
357 | CFG_BUS_WIDTH = BIT(CFG_BUS_WIDTH_SHIFT), | ||
358 | CFG_DEVICE_SIZE_SHIFT = 24, | ||
359 | |||
360 | /* Only for pre-v7.1 (with no CFG_EXT register) */ | ||
361 | CFG_PAGE_SIZE_SHIFT = 20, | ||
362 | CFG_BLK_SIZE_SHIFT = 28, | ||
363 | |||
364 | /* Only for v7.1+ (with CFG_EXT register) */ | ||
365 | CFG_EXT_PAGE_SIZE_SHIFT = 0, | ||
366 | CFG_EXT_BLK_SIZE_SHIFT = 4, | ||
367 | }; | ||
368 | |||
347 | /* BRCMNAND_INTFC_STATUS */ | 369 | /* BRCMNAND_INTFC_STATUS */ |
348 | enum { | 370 | enum { |
349 | INTFC_FLASH_STATUS = GENMASK(7, 0), | 371 | INTFC_FLASH_STATUS = GENMASK(7, 0), |
@@ -1720,17 +1742,19 @@ static int brcmnand_set_cfg(struct brcmnand_host *host, | |||
1720 | } | 1742 | } |
1721 | device_size = fls64(cfg->device_size) - fls64(BRCMNAND_MIN_DEVSIZE); | 1743 | device_size = fls64(cfg->device_size) - fls64(BRCMNAND_MIN_DEVSIZE); |
1722 | 1744 | ||
1723 | tmp = (cfg->blk_adr_bytes << 8) | | 1745 | tmp = (cfg->blk_adr_bytes << CFG_BLK_ADR_BYTES_SHIFT) | |
1724 | (cfg->col_adr_bytes << 12) | | 1746 | (cfg->col_adr_bytes << CFG_COL_ADR_BYTES_SHIFT) | |
1725 | (cfg->ful_adr_bytes << 16) | | 1747 | (cfg->ful_adr_bytes << CFG_FUL_ADR_BYTES_SHIFT) | |
1726 | (!!(cfg->device_width == 16) << 23) | | 1748 | (!!(cfg->device_width == 16) << CFG_BUS_WIDTH_SHIFT) | |
1727 | (device_size << 24); | 1749 | (device_size << CFG_DEVICE_SIZE_SHIFT); |
1728 | if (cfg_offs == cfg_ext_offs) { | 1750 | if (cfg_offs == cfg_ext_offs) { |
1729 | tmp |= (page_size << 20) | (block_size << 28); | 1751 | tmp |= (page_size << CFG_PAGE_SIZE_SHIFT) | |
1752 | (block_size << CFG_BLK_SIZE_SHIFT); | ||
1730 | nand_writereg(ctrl, cfg_offs, tmp); | 1753 | nand_writereg(ctrl, cfg_offs, tmp); |
1731 | } else { | 1754 | } else { |
1732 | nand_writereg(ctrl, cfg_offs, tmp); | 1755 | nand_writereg(ctrl, cfg_offs, tmp); |
1733 | tmp = page_size | (block_size << 4); | 1756 | tmp = (page_size << CFG_EXT_PAGE_SIZE_SHIFT) | |
1757 | (block_size << CFG_EXT_BLK_SIZE_SHIFT); | ||
1734 | nand_writereg(ctrl, cfg_ext_offs, tmp); | 1758 | nand_writereg(ctrl, cfg_ext_offs, tmp); |
1735 | } | 1759 | } |
1736 | 1760 | ||