Message ID | 20240820104239.1774600-6-quic_mdalam@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | Add QPIC SPI NAND driver | expand |
Hi Md, kernel test robot noticed the following build warnings: [auto build test WARNING on mtd/nand/next] [also build test WARNING on broonie-spi/for-next robh/for-next linus/master v6.11-rc4 next-20240821] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Md-Sadre-Alam/spi-dt-bindings-Introduce-qcom-spi-qpic-snand/20240820-184732 base: https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next patch link: https://lore.kernel.org/r/20240820104239.1774600-6-quic_mdalam%40quicinc.com patch subject: [PATCH v8 5/8] mtd: rawnand: qcom: use FIELD_PREP and GENMASK config: s390-randconfig-r111-20240821 (https://download.01.org/0day-ci/archive/20240822/202408221634.2JY5J8DX-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 14.1.0 reproduce: (https://download.01.org/0day-ci/archive/20240822/202408221634.2JY5J8DX-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408221634.2JY5J8DX-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) drivers/mtd/nand/raw/qcom_nandc.c:168:55: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __le32 [usertype] val @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:168:55: sparse: expected restricted __le32 [usertype] val drivers/mtd/nand/raw/qcom_nandc.c:168:55: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:198:55: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __le32 [usertype] val @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:198:55: sparse: expected restricted __le32 [usertype] val drivers/mtd/nand/raw/qcom_nandc.c:198:55: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:241:28: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] addr0 @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:241:28: sparse: expected restricted __le32 [usertype] addr0 drivers/mtd/nand/raw/qcom_nandc.c:241:28: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:242:28: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] addr1 @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:242:28: sparse: expected restricted __le32 [usertype] addr1 drivers/mtd/nand/raw/qcom_nandc.c:242:28: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:261:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:261:29: sparse: expected restricted __le32 [usertype] cmd drivers/mtd/nand/raw/qcom_nandc.c:261:29: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:263:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:263:29: sparse: expected restricted __le32 [usertype] cmd drivers/mtd/nand/raw/qcom_nandc.c:263:29: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:265:21: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:265:21: sparse: expected restricted __le32 [usertype] cmd drivers/mtd/nand/raw/qcom_nandc.c:265:21: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:269:29: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:269:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0 @@ got unsigned int @@ drivers/mtd/nand/raw/qcom_nandc.c:269:22: sparse: expected restricted __le32 [usertype] cfg0 drivers/mtd/nand/raw/qcom_nandc.c:269:22: sparse: got unsigned int drivers/mtd/nand/raw/qcom_nandc.c:275:29: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:275:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0 @@ got unsigned int @@ drivers/mtd/nand/raw/qcom_nandc.c:275:22: sparse: expected restricted __le32 [usertype] cfg0 drivers/mtd/nand/raw/qcom_nandc.c:275:22: sparse: got unsigned int >> drivers/mtd/nand/raw/qcom_nandc.c:279:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [assigned] [usertype] ecc_bch_cfg @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:279:29: sparse: expected restricted __le32 [assigned] [usertype] ecc_bch_cfg drivers/mtd/nand/raw/qcom_nandc.c:279:29: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:292:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] exec @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:292:27: sparse: expected restricted __le32 [usertype] exec drivers/mtd/nand/raw/qcom_nandc.c:292:27: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:879:20: sparse: sparse: invalid assignment: &= drivers/mtd/nand/raw/qcom_nandc.c:879:20: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:879:20: sparse: right side has type unsigned long drivers/mtd/nand/raw/qcom_nandc.c:880:20: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:880:20: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:880:20: sparse: right side has type int drivers/mtd/nand/raw/qcom_nandc.c:883:27: sparse: sparse: invalid assignment: &= drivers/mtd/nand/raw/qcom_nandc.c:883:27: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:883:27: sparse: right side has type unsigned long drivers/mtd/nand/raw/qcom_nandc.c:884:27: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:884:27: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:884:27: sparse: right side has type int drivers/mtd/nand/raw/qcom_nandc.c:885:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] ecc_buf_cfg @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:885:27: sparse: expected restricted __le32 [usertype] ecc_buf_cfg drivers/mtd/nand/raw/qcom_nandc.c:885:27: sparse: got int >> drivers/mtd/nand/raw/qcom_nandc.c:1490:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0 @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1490:20: sparse: expected restricted __le32 [usertype] cfg0 drivers/mtd/nand/raw/qcom_nandc.c:1490:20: sparse: got unsigned long >> drivers/mtd/nand/raw/qcom_nandc.c:1499:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg1 @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1499:20: sparse: expected restricted __le32 [usertype] cfg1 drivers/mtd/nand/raw/qcom_nandc.c:1499:20: sparse: got unsigned long >> drivers/mtd/nand/raw/qcom_nandc.c:1506:24: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0_raw @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1506:24: sparse: expected restricted __le32 [usertype] cfg0_raw drivers/mtd/nand/raw/qcom_nandc.c:1506:24: sparse: got unsigned long >> drivers/mtd/nand/raw/qcom_nandc.c:1511:24: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg1_raw @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1511:24: sparse: expected restricted __le32 [usertype] cfg1_raw drivers/mtd/nand/raw/qcom_nandc.c:1511:24: sparse: got unsigned long >> drivers/mtd/nand/raw/qcom_nandc.c:1519:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] ecc_bch_cfg @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1519:27: sparse: expected restricted __le32 [usertype] ecc_bch_cfg drivers/mtd/nand/raw/qcom_nandc.c:1519:27: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1527:35: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] ecc_buf_cfg @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1527:35: sparse: expected restricted __le32 [usertype] ecc_buf_cfg drivers/mtd/nand/raw/qcom_nandc.c:1527:35: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1529:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] clrflashstatus @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1529:30: sparse: expected restricted __le32 [usertype] clrflashstatus drivers/mtd/nand/raw/qcom_nandc.c:1529:30: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1530:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] clrreadstatus @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1530:29: sparse: expected restricted __le32 [usertype] clrreadstatus drivers/mtd/nand/raw/qcom_nandc.c:1530:29: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1613:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd_reg @@ got int [assigned] ret @@ drivers/mtd/nand/raw/qcom_nandc.c:1613:39: sparse: expected restricted __le32 [usertype] cmd_reg drivers/mtd/nand/raw/qcom_nandc.c:1613:39: sparse: got int [assigned] ret drivers/mtd/nand/raw/qcom_nandc.c:1623:49: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:1623:49: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:1623:49: sparse: right side has type int drivers/mtd/nand/raw/qcom_nandc.c:1626:49: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:1626:49: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:1626:49: sparse: right side has type unsigned char drivers/mtd/nand/raw/qcom_nandc.c:1711:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] exec @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1711:27: sparse: expected restricted __le32 [usertype] exec drivers/mtd/nand/raw/qcom_nandc.c:1711:27: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1770:31: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] chip_sel @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1770:31: sparse: expected restricted __le32 [usertype] chip_sel drivers/mtd/nand/raw/qcom_nandc.c:1770:31: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1771:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] exec @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1771:27: sparse: expected restricted __le32 [usertype] exec drivers/mtd/nand/raw/qcom_nandc.c:1771:27: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1809:24: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:1810:30: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:1810:30: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:1810:30: sparse: right side has type unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1813:41: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:1813:35: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0 @@ got unsigned int @@ drivers/mtd/nand/raw/qcom_nandc.c:1813:35: sparse: expected restricted __le32 [usertype] cfg0 drivers/mtd/nand/raw/qcom_nandc.c:1813:35: sparse: got unsigned int drivers/mtd/nand/raw/qcom_nandc.c:1816:24: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:1828:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] exec @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1828:27: sparse: expected restricted __le32 [usertype] exec drivers/mtd/nand/raw/qcom_nandc.c:1828:27: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1832:17: sparse: sparse: restricted __le32 degrades to integer drivers/mtd/nand/raw/qcom_nandc.c:1866:22: sparse: sparse: invalid assignment: |= drivers/mtd/nand/raw/qcom_nandc.c:1866:22: sparse: left side has type restricted __le32 drivers/mtd/nand/raw/qcom_nandc.c:1866:22: sparse: right side has type unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1878:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg0 @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1878:20: sparse: expected restricted __le32 [usertype] cfg0 drivers/mtd/nand/raw/qcom_nandc.c:1878:20: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1883:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cfg1 @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1883:20: sparse: expected restricted __le32 [usertype] cfg1 drivers/mtd/nand/raw/qcom_nandc.c:1883:20: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1892:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] ecc_buf_cfg @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1892:42: sparse: expected restricted __le32 [usertype] ecc_buf_cfg drivers/mtd/nand/raw/qcom_nandc.c:1892:42: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1896:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] vld @@ got unsigned long @@ drivers/mtd/nand/raw/qcom_nandc.c:1896:34: sparse: expected restricted __le32 [usertype] vld drivers/mtd/nand/raw/qcom_nandc.c:1896:34: sparse: got unsigned long drivers/mtd/nand/raw/qcom_nandc.c:1897:35: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cmd1 @@ got unsigned int @@ drivers/mtd/nand/raw/qcom_nandc.c:1897:35: sparse: expected restricted __le32 [usertype] cmd1 drivers/mtd/nand/raw/qcom_nandc.c:1897:35: sparse: got unsigned int drivers/mtd/nand/raw/qcom_nandc.c:1901:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] exec @@ got int @@ drivers/mtd/nand/raw/qcom_nandc.c:1901:27: sparse: expected restricted __le32 [usertype] exec drivers/mtd/nand/raw/qcom_nandc.c:1901:27: sparse: got int drivers/mtd/nand/raw/qcom_nandc.c:1904:40: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] orig_cmd1 @@ got unsigned int [usertype] cmd1 @@ drivers/mtd/nand/raw/qcom_nandc.c:1904:40: sparse: expected restricted __le32 [usertype] orig_cmd1 drivers/mtd/nand/raw/qcom_nandc.c:1904:40: sparse: got unsigned int [usertype] cmd1 drivers/mtd/nand/raw/qcom_nandc.c:1905:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] orig_vld @@ got unsigned int [usertype] vld @@ drivers/mtd/nand/raw/qcom_nandc.c:1905:39: sparse: expected restricted __le32 [usertype] orig_vld drivers/mtd/nand/raw/qcom_nandc.c:1905:39: sparse: got unsigned int [usertype] vld vim +279 drivers/mtd/nand/raw/qcom_nandc.c 244 245 /* 246 * update_rw_regs: set up read/write register values, these will be 247 * written to the NAND controller registers via DMA 248 * 249 * @num_cw: number of steps for the read/write operation 250 * @read: read or write operation 251 * @cw : which code word 252 */ 253 static void update_rw_regs(struct qcom_nand_host *host, int num_cw, bool read, int cw) 254 { 255 struct nand_chip *chip = &host->chip; 256 __le32 cmd, cfg0, cfg1, ecc_bch_cfg; 257 struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip); 258 259 if (read) { 260 if (host->use_ecc) 261 cmd = OP_PAGE_READ_WITH_ECC | PAGE_ACC | LAST_PAGE; 262 else 263 cmd = OP_PAGE_READ | PAGE_ACC | LAST_PAGE; 264 } else { 265 cmd = OP_PROGRAM_PAGE | PAGE_ACC | LAST_PAGE; 266 } 267 268 if (host->use_ecc) { 269 cfg0 = (host->cfg0 & ~(7U << CW_PER_PAGE)) | 270 (num_cw - 1) << CW_PER_PAGE; 271 272 cfg1 = host->cfg1; 273 ecc_bch_cfg = host->ecc_bch_cfg; 274 } else { 275 cfg0 = (host->cfg0_raw & ~(7U << CW_PER_PAGE)) | 276 (num_cw - 1) << CW_PER_PAGE; 277 278 cfg1 = host->cfg1_raw; > 279 ecc_bch_cfg = ECC_CFG_ECC_DISABLE; 280 } 281 282 nandc->regs->cmd = cmd; 283 nandc->regs->cfg0 = cfg0; 284 nandc->regs->cfg1 = cfg1; 285 nandc->regs->ecc_bch_cfg = ecc_bch_cfg; 286 287 if (!nandc->props->qpic_version2) 288 nandc->regs->ecc_buf_cfg = host->ecc_buf_cfg; 289 290 nandc->regs->clrflashstatus = host->clrflashstatus; 291 nandc->regs->clrreadstatus = host->clrreadstatus; 292 nandc->regs->exec = 1; 293 294 if (read) 295 nandc_set_read_loc(chip, cw, 0, 0, host->use_ecc ? 296 host->cw_data : host->cw_size, 1); 297 } 298
diff --git a/drivers/mtd/nand/raw/qcom_nandc.c b/drivers/mtd/nand/raw/qcom_nandc.c index 01583535bc81..087e1188fc68 100644 --- a/drivers/mtd/nand/raw/qcom_nandc.c +++ b/drivers/mtd/nand/raw/qcom_nandc.c @@ -276,7 +276,7 @@ static void update_rw_regs(struct qcom_nand_host *host, int num_cw, bool read, i (num_cw - 1) << CW_PER_PAGE; cfg1 = host->cfg1_raw; - ecc_bch_cfg = 1 << ECC_CFG_ECC_DISABLE; + ecc_bch_cfg = ECC_CFG_ECC_DISABLE; } nandc->regs->cmd = cmd; @@ -1487,42 +1487,41 @@ static int qcom_nand_attach_chip(struct nand_chip *chip) host->cw_size = host->cw_data + ecc->bytes; bad_block_byte = mtd->writesize - host->cw_size * (cwperpage - 1) + 1; - host->cfg0 = (cwperpage - 1) << CW_PER_PAGE - | host->cw_data << UD_SIZE_BYTES - | 0 << DISABLE_STATUS_AFTER_WRITE - | 5 << NUM_ADDR_CYCLES - | host->ecc_bytes_hw << ECC_PARITY_SIZE_BYTES_RS - | 0 << STATUS_BFR_READ - | 1 << SET_RD_MODE_AFTER_STATUS - | host->spare_bytes << SPARE_SIZE_BYTES; - - host->cfg1 = 7 << NAND_RECOVERY_CYCLES - | 0 << CS_ACTIVE_BSY - | bad_block_byte << BAD_BLOCK_BYTE_NUM - | 0 << BAD_BLOCK_IN_SPARE_AREA - | 2 << WR_RD_BSY_GAP - | wide_bus << WIDE_FLASH - | host->bch_enabled << ENABLE_BCH_ECC; - - host->cfg0_raw = (cwperpage - 1) << CW_PER_PAGE - | host->cw_size << UD_SIZE_BYTES - | 5 << NUM_ADDR_CYCLES - | 0 << SPARE_SIZE_BYTES; - - host->cfg1_raw = 7 << NAND_RECOVERY_CYCLES - | 0 << CS_ACTIVE_BSY - | 17 << BAD_BLOCK_BYTE_NUM - | 1 << BAD_BLOCK_IN_SPARE_AREA - | 2 << WR_RD_BSY_GAP - | wide_bus << WIDE_FLASH - | 1 << DEV0_CFG1_ECC_DISABLE; - - host->ecc_bch_cfg = !host->bch_enabled << ECC_CFG_ECC_DISABLE - | 0 << ECC_SW_RESET - | host->cw_data << ECC_NUM_DATA_BYTES - | 1 << ECC_FORCE_CLK_OPEN - | ecc_mode << ECC_MODE - | host->ecc_bytes_hw << ECC_PARITY_SIZE_BYTES_BCH; + host->cfg0 = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) | + FIELD_PREP(UD_SIZE_BYTES_MASK, host->cw_data) | + FIELD_PREP(DISABLE_STATUS_AFTER_WRITE, 0) | + FIELD_PREP(NUM_ADDR_CYCLES_MASK, 5) | + FIELD_PREP(ECC_PARITY_SIZE_BYTES_RS, host->ecc_bytes_hw) | + FIELD_PREP(STATUS_BFR_READ, 0) | + FIELD_PREP(SET_RD_MODE_AFTER_STATUS, 1) | + FIELD_PREP(SPARE_SIZE_BYTES_MASK, host->spare_bytes); + + host->cfg1 = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 7) | + FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, bad_block_byte) | + FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 0) | + FIELD_PREP(WR_RD_BSY_GAP_MASK, 2) | + FIELD_PREP(WIDE_FLASH, wide_bus) | + FIELD_PREP(ENABLE_BCH_ECC, host->bch_enabled); + + host->cfg0_raw = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) | + FIELD_PREP(UD_SIZE_BYTES_MASK, host->cw_size) | + FIELD_PREP(NUM_ADDR_CYCLES_MASK, 5) | + FIELD_PREP(SPARE_SIZE_BYTES_MASK, 0); + + host->cfg1_raw = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 7) | + FIELD_PREP(CS_ACTIVE_BSY, 0) | + FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, 17) | + FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 1) | + FIELD_PREP(WR_RD_BSY_GAP_MASK, 2) | + FIELD_PREP(WIDE_FLASH, wide_bus) | + FIELD_PREP(DEV0_CFG1_ECC_DISABLE, 1); + + host->ecc_bch_cfg = FIELD_PREP(ECC_CFG_ECC_DISABLE, !host->bch_enabled) | + FIELD_PREP(ECC_SW_RESET, 0) | + FIELD_PREP(ECC_NUM_DATA_BYTES_MASK, host->cw_data) | + FIELD_PREP(ECC_FORCE_CLK_OPEN, 1) | + FIELD_PREP(ECC_MODE_MASK, ecc_mode) | + FIELD_PREP(ECC_PARITY_SIZE_BYTES_BCH_MASK, host->ecc_bytes_hw); if (!nandc->props->qpic_version2) host->ecc_buf_cfg = 0x203 << NUM_STEPS; @@ -1876,21 +1875,21 @@ static int qcom_param_page_type_exec(struct nand_chip *chip, const struct nand_ nandc->regs->addr0 = 0; nandc->regs->addr1 = 0; - nandc->regs->cfg0 = 0 << CW_PER_PAGE - | 512 << UD_SIZE_BYTES - | 5 << NUM_ADDR_CYCLES - | 0 << SPARE_SIZE_BYTES; + host->cfg0 = FIELD_PREP(CW_PER_PAGE_MASK, 0) | + FIELD_PREP(UD_SIZE_BYTES_MASK, 512) | + FIELD_PREP(NUM_ADDR_CYCLES_MASK, 5) | + FIELD_PREP(SPARE_SIZE_BYTES_MASK, 0); - nandc->regs->cfg1 = 7 << NAND_RECOVERY_CYCLES - | 0 << CS_ACTIVE_BSY - | 17 << BAD_BLOCK_BYTE_NUM - | 1 << BAD_BLOCK_IN_SPARE_AREA - | 2 << WR_RD_BSY_GAP - | 0 << WIDE_FLASH - | 1 << DEV0_CFG1_ECC_DISABLE; + host->cfg1 = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 7) | + FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, 17) | + FIELD_PREP(CS_ACTIVE_BSY, 0) | + FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 1) | + FIELD_PREP(WR_RD_BSY_GAP_MASK, 2) | + FIELD_PREP(WIDE_FLASH, 0) | + FIELD_PREP(DEV0_CFG1_ECC_DISABLE, 1); if (!nandc->props->qpic_version2) - nandc->regs->ecc_buf_cfg = 1 << ECC_CFG_ECC_DISABLE; + nandc->regs->ecc_buf_cfg = ECC_CFG_ECC_DISABLE; /* configure CMD1 and VLD for ONFI param probing in QPIC v1 */ if (!nandc->props->qpic_version2) { diff --git a/include/linux/mtd/nand-qpic-common.h b/include/linux/mtd/nand-qpic-common.h index 425994429387..e79c79775eb8 100644 --- a/include/linux/mtd/nand-qpic-common.h +++ b/include/linux/mtd/nand-qpic-common.h @@ -70,35 +70,42 @@ #define BS_CORRECTABLE_ERR_MSK 0x1f /* NAND_DEVn_CFG0 bits */ -#define DISABLE_STATUS_AFTER_WRITE 4 +#define DISABLE_STATUS_AFTER_WRITE BIT(4) #define CW_PER_PAGE 6 +#define CW_PER_PAGE_MASK GENMASK(8, 6) #define UD_SIZE_BYTES 9 #define UD_SIZE_BYTES_MASK GENMASK(18, 9) -#define ECC_PARITY_SIZE_BYTES_RS 19 +#define ECC_PARITY_SIZE_BYTES_RS GENMASK(22, 19) #define SPARE_SIZE_BYTES 23 #define SPARE_SIZE_BYTES_MASK GENMASK(26, 23) #define NUM_ADDR_CYCLES 27 -#define STATUS_BFR_READ 30 -#define SET_RD_MODE_AFTER_STATUS 31 +#define NUM_ADDR_CYCLES_MASK GENMASK(29, 27) +#define STATUS_BFR_READ BIT(30) +#define SET_RD_MODE_AFTER_STATUS BIT(31) /* NAND_DEVn_CFG0 bits */ -#define DEV0_CFG1_ECC_DISABLE 0 -#define WIDE_FLASH 1 +#define DEV0_CFG1_ECC_DISABLE BIT(0) +#define WIDE_FLASH BIT(1) #define NAND_RECOVERY_CYCLES 2 -#define CS_ACTIVE_BSY 5 +#define NAND_RECOVERY_CYCLES_MASK GENMASK(4, 2) +#define CS_ACTIVE_BSY BIT(5) #define BAD_BLOCK_BYTE_NUM 6 -#define BAD_BLOCK_IN_SPARE_AREA 16 +#define BAD_BLOCK_BYTE_NUM_MASK GENMASK(15, 6) +#define BAD_BLOCK_IN_SPARE_AREA BIT(16) #define WR_RD_BSY_GAP 17 -#define ENABLE_BCH_ECC 27 +#define WR_RD_BSY_GAP_MASK GENMASK(22, 17) +#define ENABLE_BCH_ECC BIT(27) /* NAND_DEV0_ECC_CFG bits */ -#define ECC_CFG_ECC_DISABLE 0 -#define ECC_SW_RESET 1 +#define ECC_CFG_ECC_DISABLE BIT(0) +#define ECC_SW_RESET BIT(1) #define ECC_MODE 4 +#define ECC_MODE_MASK GENMASK(5, 4) #define ECC_PARITY_SIZE_BYTES_BCH 8 +#define ECC_PARITY_SIZE_BYTES_BCH_MASK GENMASK(12, 8) #define ECC_NUM_DATA_BYTES 16 #define ECC_NUM_DATA_BYTES_MASK GENMASK(25, 16) -#define ECC_FORCE_CLK_OPEN 30 +#define ECC_FORCE_CLK_OPEN BIT(30) /* NAND_DEV_CMD1 bits */ #define READ_ADDR 0
Use the bitfield macro FIELD_PREP, and GENMASK to do the shift and mask in one go. This makes the code more readable. Signed-off-by: Md Sadre Alam <quic_mdalam@quicinc.com> --- Change in [v8] * No change Change in [v7] * No change Change in [v6] * Added FIELD_PREP() and GENMASK() macro Change in [v5] * This patch was not included in [v1] Change in [v4] * This patch was not included in [v4] Change in [v3] * This patch was not included in [v3] Change in [v2] * This patch was not included in [v2] Change in [v1] * This patch was not included in [v1] drivers/mtd/nand/raw/qcom_nandc.c | 97 ++++++++++++++-------------- include/linux/mtd/nand-qpic-common.h | 31 +++++---- 2 files changed, 67 insertions(+), 61 deletions(-)