aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2015-10-30 02:59:19 -0400
committerBrian Norris <computersforpeace@gmail.com>2015-10-30 14:50:34 -0400
commit3f06d2a912b55c53e9efbd799f7205dbfe041029 (patch)
tree8676561b58b6cd83b87214519f9ab775dc9663c9
parent5a2415b0769233194f20d3906c3ffc6a2033317c (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.c38
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 */
352enum {
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 */
348enum { 370enum {
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