All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Md Sadre Alam <quic_mdalam@quicinc.com>,
	broonie@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, andersson@kernel.org,
	konrad.dybcio@linaro.org, miquel.raynal@bootlin.com,
	richard@nod.at, vigneshr@ti.com,
	manivannan.sadhasivam@linaro.org, esben@geanix.com,
	linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mtd@lists.infradead.org
Cc: oe-kbuild-all@lists.linux.dev, quic_mdalam@quicinc.com,
	quic_varada@quicinc.com, quic_srichara@quicinc.com
Subject: Re: [PATCH v7 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
Date: Thu, 25 Jul 2024 07:45:28 +0800	[thread overview]
Message-ID: <202407250710.knYmJebL-lkp@intel.com> (raw)
In-Reply-To: <20240724114225.2176448-7-quic_mdalam@quicinc.com>

Hi Md,

kernel test robot noticed the following build errors:

[auto build test ERROR on mtd/nand/next]
[also build test ERROR on broonie-spi/for-next robh/for-next linus/master v6.10 next-20240724]
[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/20240724-195819
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next
patch link:    https://lore.kernel.org/r/20240724114225.2176448-7-quic_mdalam%40quicinc.com
patch subject: [PATCH v7 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
config: xtensa-allyesconfig (https://download.01.org/0day-ci/archive/20240725/202407250710.knYmJebL-lkp@intel.com/config)
compiler: xtensa-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240725/202407250710.knYmJebL-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/202407250710.knYmJebL-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_init':
>> drivers/spi/spi-qpic-snand.c:174:25: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
     174 |         snand_cfg_val = FIELD_PREP(CLK_CNTR_INIT_VAL_VEC_MASK, CLK_CNTR_INIT_VAL_VEC) |
         |                         ^~~~~~~~~~
   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_ecc_init_ctx_pipelined':
>> drivers/spi/spi-qpic-snand.c:247:42: warning: variable 'steps' set but not used [-Wunused-but-set-variable]
     247 |         int step_size = 0, strength = 0, steps;
         |                                          ^~~~~
   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_write_page':
   drivers/spi/spi-qpic-snand.c:1261:30: warning: variable 's_op' set but not used [-Wunused-but-set-variable]
    1261 |         struct qpic_snand_op s_op = {};
         |                              ^~~~
   drivers/spi/spi-qpic-snand.c: At top level:
   drivers/spi/spi-qpic-snand.c:1632:19: error: initialization of 'int (*)(struct platform_device *)' from incompatible pointer type 'void (*)(struct platform_device *)' [-Wincompatible-pointer-types]
    1632 |         .remove = qcom_spi_remove,
         |                   ^~~~~~~~~~~~~~~
   drivers/spi/spi-qpic-snand.c:1632:19: note: (near initialization for 'qcom_spi_driver.remove')


vim +/FIELD_PREP +174 drivers/spi/spi-qpic-snand.c

   168	
   169	static int qcom_spi_init(struct qcom_nand_controller *snandc)
   170	{
   171		u32 snand_cfg_val = 0x0;
   172		int ret;
   173	
 > 174		snand_cfg_val = FIELD_PREP(CLK_CNTR_INIT_VAL_VEC_MASK, CLK_CNTR_INIT_VAL_VEC) |
   175				FIELD_PREP(LOAD_CLK_CNTR_INIT_EN, 0) |
   176				FIELD_PREP(FEA_STATUS_DEV_ADDR_MASK, FEA_STATUS_DEV_ADDR) |
   177				FIELD_PREP(SPI_CFG, 0);
   178	
   179		snandc->regs->spi_cfg = snand_cfg_val;
   180		snandc->regs->num_addr_cycle = SPI_NUM_ADDR;
   181		snandc->regs->busy_wait_cnt = SPI_WAIT_CNT;
   182	
   183		qcom_write_reg_dma(snandc, &snandc->regs->spi_cfg, NAND_FLASH_SPI_CFG, 1, 0);
   184	
   185		snand_cfg_val &= ~LOAD_CLK_CNTR_INIT_EN;
   186		snandc->regs->spi_cfg = snand_cfg_val;
   187	
   188		qcom_write_reg_dma(snandc, &snandc->regs->spi_cfg, NAND_FLASH_SPI_CFG, 1, 0);
   189	
   190		qcom_write_reg_dma(snandc, &snandc->regs->num_addr_cycle, NAND_NUM_ADDR_CYCLES, 1, 0);
   191		qcom_write_reg_dma(snandc, &snandc->regs->busy_wait_cnt, NAND_BUSY_CHECK_WAIT_CNT, 1,
   192				   NAND_BAM_NEXT_SGL);
   193	
   194		ret = qcom_submit_descs(snandc);
   195		if (ret) {
   196			dev_err(snandc->dev, "failure in submitting spi init descriptor\n");
   197			return ret;
   198		}
   199	
   200		return ret;
   201	}
   202	
   203	static int qcom_spi_ooblayout_ecc(struct mtd_info *mtd, int section,
   204					  struct mtd_oob_region *oobregion)
   205	{
   206		struct nand_device *nand = mtd_to_nanddev(mtd);
   207		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   208		struct qpic_ecc *qecc = snandc->qspi->ecc;
   209	
   210		if (section > 1)
   211			return -ERANGE;
   212	
   213		oobregion->length = qecc->ecc_bytes_hw + qecc->spare_bytes;
   214		oobregion->offset = mtd->oobsize - oobregion->length;
   215	
   216		return 0;
   217	}
   218	
   219	static int qcom_spi_ooblayout_free(struct mtd_info *mtd, int section,
   220					   struct mtd_oob_region *oobregion)
   221	{
   222		struct nand_device *nand = mtd_to_nanddev(mtd);
   223		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   224		struct qpic_ecc *qecc = snandc->qspi->ecc;
   225	
   226		if (section)
   227			return -ERANGE;
   228	
   229		oobregion->length = qecc->steps * 4;
   230		oobregion->offset = ((qecc->steps - 1) * qecc->bytes) + qecc->bbm_size;
   231	
   232		return 0;
   233	}
   234	
   235	static const struct mtd_ooblayout_ops qcom_spi_ooblayout = {
   236		.ecc = qcom_spi_ooblayout_ecc,
   237		.free = qcom_spi_ooblayout_free,
   238	};
   239	
   240	static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
   241	{
   242		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   243		struct nand_ecc_props *conf = &nand->ecc.ctx.conf;
   244		struct nand_ecc_props *reqs = &nand->ecc.requirements;
   245		struct nand_ecc_props *user = &nand->ecc.user_conf;
   246		struct mtd_info *mtd = nanddev_to_mtd(nand);
 > 247		int step_size = 0, strength = 0, steps;
   248		int cwperpage, bad_block_byte;
   249		struct qpic_ecc *ecc_cfg;
   250	
   251		cwperpage = mtd->writesize / NANDC_STEP_SIZE;
   252		snandc->qspi->num_cw = cwperpage;
   253	
   254		ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
   255		if (!ecc_cfg)
   256			return -ENOMEM;
   257		snandc->qspi->oob_buf = kzalloc(mtd->writesize + mtd->oobsize,
   258						GFP_KERNEL);
   259		if (!snandc->qspi->oob_buf)
   260			return -ENOMEM;
   261	
   262		memset(snandc->qspi->oob_buf, 0xff, mtd->writesize + mtd->oobsize);
   263	
   264		nand->ecc.ctx.priv = ecc_cfg;
   265		snandc->qspi->mtd = mtd;
   266	
   267		if (user->step_size && user->strength) {
   268			step_size = user->step_size;
   269			strength = user->strength;
   270		} else if (reqs->step_size && reqs->strength) {
   271			step_size = reqs->step_size;
   272			strength = reqs->strength;
   273		}
   274	
   275		if (step_size && strength)
   276			steps = mtd->writesize / step_size;
   277	
   278		ecc_cfg->ecc_bytes_hw = 7;
   279		ecc_cfg->spare_bytes = 4;
   280		ecc_cfg->bbm_size = 1;
   281		ecc_cfg->bch_enabled = true;
   282		ecc_cfg->bytes = ecc_cfg->ecc_bytes_hw + ecc_cfg->spare_bytes + ecc_cfg->bbm_size;
   283	
   284		ecc_cfg->steps = 4;
   285		ecc_cfg->strength = 4;
   286		ecc_cfg->step_size = 512;
   287		ecc_cfg->cw_data = 516;
   288		ecc_cfg->cw_size = ecc_cfg->cw_data + ecc_cfg->bytes;
   289		bad_block_byte = mtd->writesize - ecc_cfg->cw_size * (cwperpage - 1) + 1;
   290	
   291		mtd_set_ooblayout(mtd, &qcom_spi_ooblayout);
   292	
   293		ecc_cfg->cfg0 = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) |
   294				FIELD_PREP(UD_SIZE_BYTES_MASK, ecc_cfg->cw_data) |
   295				FIELD_PREP(DISABLE_STATUS_AFTER_WRITE, 1) |
   296				FIELD_PREP(NUM_ADDR_CYCLES_MASK, 3) |
   297				FIELD_PREP(ECC_PARITY_SIZE_BYTES_RS, ecc_cfg->ecc_bytes_hw) |
   298				FIELD_PREP(STATUS_BFR_READ, 0) |
   299				FIELD_PREP(SET_RD_MODE_AFTER_STATUS, 1) |
   300				FIELD_PREP(SPARE_SIZE_BYTES_MASK, ecc_cfg->spare_bytes);
   301	
   302		ecc_cfg->cfg1 = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 0) |
   303				FIELD_PREP(CS_ACTIVE_BSY, 0) |
   304				FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, bad_block_byte) |
   305				FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 0) |
   306				FIELD_PREP(WR_RD_BSY_GAP_MASK, 20) |
   307				FIELD_PREP(WIDE_FLASH, 0) |
   308				FIELD_PREP(ENABLE_BCH_ECC, ecc_cfg->bch_enabled);
   309	
   310		ecc_cfg->cfg0_raw = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) |
   311				    FIELD_PREP(NUM_ADDR_CYCLES_MASK, 3) |
   312				    FIELD_PREP(UD_SIZE_BYTES_MASK, ecc_cfg->cw_size) |
   313				    FIELD_PREP(SPARE_SIZE_BYTES_MASK, 0);
   314	
   315		ecc_cfg->cfg1_raw = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 0) |
   316				    FIELD_PREP(CS_ACTIVE_BSY, 0) |
   317				    FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, 17) |
   318				    FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 1) |
   319				    FIELD_PREP(WR_RD_BSY_GAP_MASK, 20) |
   320				    FIELD_PREP(WIDE_FLASH, 0) |
   321				    FIELD_PREP(DEV0_CFG1_ECC_DISABLE, 1);
   322	
   323		ecc_cfg->ecc_bch_cfg = FIELD_PREP(ECC_CFG_ECC_DISABLE, !ecc_cfg->bch_enabled) |
   324				       FIELD_PREP(ECC_SW_RESET, 0) |
   325				       FIELD_PREP(ECC_NUM_DATA_BYTES_MASK, ecc_cfg->cw_data) |
   326				       FIELD_PREP(ECC_FORCE_CLK_OPEN, 1) |
   327				       FIELD_PREP(ECC_MODE_MASK, 0) |
   328				       FIELD_PREP(ECC_PARITY_SIZE_BYTES_BCH_MASK, ecc_cfg->ecc_bytes_hw);
   329	
   330		ecc_cfg->ecc_buf_cfg = 0x203 << NUM_STEPS;
   331		ecc_cfg->clrflashstatus = FS_READY_BSY_N;
   332		ecc_cfg->clrreadstatus = 0xc0;
   333	
   334		conf->step_size = ecc_cfg->step_size;
   335		conf->strength = ecc_cfg->strength;
   336	
   337		snandc->regs->erased_cw_detect_cfg_clr = cpu_to_le32(CLR_ERASED_PAGE_DET);
   338		snandc->regs->erased_cw_detect_cfg_set = cpu_to_le32(SET_ERASED_PAGE_DET);
   339	
   340		dev_dbg(snandc->dev, "ECC strength: %u bits per %u bytes\n",
   341			ecc_cfg->strength, ecc_cfg->step_size);
   342	
   343		return 0;
   344	}
   345	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Md Sadre Alam <quic_mdalam@quicinc.com>,
	broonie@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, andersson@kernel.org,
	konrad.dybcio@linaro.org, miquel.raynal@bootlin.com,
	richard@nod.at, vigneshr@ti.com,
	manivannan.sadhasivam@linaro.org, esben@geanix.com,
	linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mtd@lists.infradead.org
Cc: oe-kbuild-all@lists.linux.dev, quic_mdalam@quicinc.com,
	quic_varada@quicinc.com, quic_srichara@quicinc.com
Subject: Re: [PATCH v7 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
Date: Thu, 25 Jul 2024 07:45:28 +0800	[thread overview]
Message-ID: <202407250710.knYmJebL-lkp@intel.com> (raw)
In-Reply-To: <20240724114225.2176448-7-quic_mdalam@quicinc.com>

Hi Md,

kernel test robot noticed the following build errors:

[auto build test ERROR on mtd/nand/next]
[also build test ERROR on broonie-spi/for-next robh/for-next linus/master v6.10 next-20240724]
[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/20240724-195819
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next
patch link:    https://lore.kernel.org/r/20240724114225.2176448-7-quic_mdalam%40quicinc.com
patch subject: [PATCH v7 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
config: xtensa-allyesconfig (https://download.01.org/0day-ci/archive/20240725/202407250710.knYmJebL-lkp@intel.com/config)
compiler: xtensa-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240725/202407250710.knYmJebL-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/202407250710.knYmJebL-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_init':
>> drivers/spi/spi-qpic-snand.c:174:25: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
     174 |         snand_cfg_val = FIELD_PREP(CLK_CNTR_INIT_VAL_VEC_MASK, CLK_CNTR_INIT_VAL_VEC) |
         |                         ^~~~~~~~~~
   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_ecc_init_ctx_pipelined':
>> drivers/spi/spi-qpic-snand.c:247:42: warning: variable 'steps' set but not used [-Wunused-but-set-variable]
     247 |         int step_size = 0, strength = 0, steps;
         |                                          ^~~~~
   drivers/spi/spi-qpic-snand.c: In function 'qcom_spi_write_page':
   drivers/spi/spi-qpic-snand.c:1261:30: warning: variable 's_op' set but not used [-Wunused-but-set-variable]
    1261 |         struct qpic_snand_op s_op = {};
         |                              ^~~~
   drivers/spi/spi-qpic-snand.c: At top level:
   drivers/spi/spi-qpic-snand.c:1632:19: error: initialization of 'int (*)(struct platform_device *)' from incompatible pointer type 'void (*)(struct platform_device *)' [-Wincompatible-pointer-types]
    1632 |         .remove = qcom_spi_remove,
         |                   ^~~~~~~~~~~~~~~
   drivers/spi/spi-qpic-snand.c:1632:19: note: (near initialization for 'qcom_spi_driver.remove')


vim +/FIELD_PREP +174 drivers/spi/spi-qpic-snand.c

   168	
   169	static int qcom_spi_init(struct qcom_nand_controller *snandc)
   170	{
   171		u32 snand_cfg_val = 0x0;
   172		int ret;
   173	
 > 174		snand_cfg_val = FIELD_PREP(CLK_CNTR_INIT_VAL_VEC_MASK, CLK_CNTR_INIT_VAL_VEC) |
   175				FIELD_PREP(LOAD_CLK_CNTR_INIT_EN, 0) |
   176				FIELD_PREP(FEA_STATUS_DEV_ADDR_MASK, FEA_STATUS_DEV_ADDR) |
   177				FIELD_PREP(SPI_CFG, 0);
   178	
   179		snandc->regs->spi_cfg = snand_cfg_val;
   180		snandc->regs->num_addr_cycle = SPI_NUM_ADDR;
   181		snandc->regs->busy_wait_cnt = SPI_WAIT_CNT;
   182	
   183		qcom_write_reg_dma(snandc, &snandc->regs->spi_cfg, NAND_FLASH_SPI_CFG, 1, 0);
   184	
   185		snand_cfg_val &= ~LOAD_CLK_CNTR_INIT_EN;
   186		snandc->regs->spi_cfg = snand_cfg_val;
   187	
   188		qcom_write_reg_dma(snandc, &snandc->regs->spi_cfg, NAND_FLASH_SPI_CFG, 1, 0);
   189	
   190		qcom_write_reg_dma(snandc, &snandc->regs->num_addr_cycle, NAND_NUM_ADDR_CYCLES, 1, 0);
   191		qcom_write_reg_dma(snandc, &snandc->regs->busy_wait_cnt, NAND_BUSY_CHECK_WAIT_CNT, 1,
   192				   NAND_BAM_NEXT_SGL);
   193	
   194		ret = qcom_submit_descs(snandc);
   195		if (ret) {
   196			dev_err(snandc->dev, "failure in submitting spi init descriptor\n");
   197			return ret;
   198		}
   199	
   200		return ret;
   201	}
   202	
   203	static int qcom_spi_ooblayout_ecc(struct mtd_info *mtd, int section,
   204					  struct mtd_oob_region *oobregion)
   205	{
   206		struct nand_device *nand = mtd_to_nanddev(mtd);
   207		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   208		struct qpic_ecc *qecc = snandc->qspi->ecc;
   209	
   210		if (section > 1)
   211			return -ERANGE;
   212	
   213		oobregion->length = qecc->ecc_bytes_hw + qecc->spare_bytes;
   214		oobregion->offset = mtd->oobsize - oobregion->length;
   215	
   216		return 0;
   217	}
   218	
   219	static int qcom_spi_ooblayout_free(struct mtd_info *mtd, int section,
   220					   struct mtd_oob_region *oobregion)
   221	{
   222		struct nand_device *nand = mtd_to_nanddev(mtd);
   223		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   224		struct qpic_ecc *qecc = snandc->qspi->ecc;
   225	
   226		if (section)
   227			return -ERANGE;
   228	
   229		oobregion->length = qecc->steps * 4;
   230		oobregion->offset = ((qecc->steps - 1) * qecc->bytes) + qecc->bbm_size;
   231	
   232		return 0;
   233	}
   234	
   235	static const struct mtd_ooblayout_ops qcom_spi_ooblayout = {
   236		.ecc = qcom_spi_ooblayout_ecc,
   237		.free = qcom_spi_ooblayout_free,
   238	};
   239	
   240	static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
   241	{
   242		struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
   243		struct nand_ecc_props *conf = &nand->ecc.ctx.conf;
   244		struct nand_ecc_props *reqs = &nand->ecc.requirements;
   245		struct nand_ecc_props *user = &nand->ecc.user_conf;
   246		struct mtd_info *mtd = nanddev_to_mtd(nand);
 > 247		int step_size = 0, strength = 0, steps;
   248		int cwperpage, bad_block_byte;
   249		struct qpic_ecc *ecc_cfg;
   250	
   251		cwperpage = mtd->writesize / NANDC_STEP_SIZE;
   252		snandc->qspi->num_cw = cwperpage;
   253	
   254		ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
   255		if (!ecc_cfg)
   256			return -ENOMEM;
   257		snandc->qspi->oob_buf = kzalloc(mtd->writesize + mtd->oobsize,
   258						GFP_KERNEL);
   259		if (!snandc->qspi->oob_buf)
   260			return -ENOMEM;
   261	
   262		memset(snandc->qspi->oob_buf, 0xff, mtd->writesize + mtd->oobsize);
   263	
   264		nand->ecc.ctx.priv = ecc_cfg;
   265		snandc->qspi->mtd = mtd;
   266	
   267		if (user->step_size && user->strength) {
   268			step_size = user->step_size;
   269			strength = user->strength;
   270		} else if (reqs->step_size && reqs->strength) {
   271			step_size = reqs->step_size;
   272			strength = reqs->strength;
   273		}
   274	
   275		if (step_size && strength)
   276			steps = mtd->writesize / step_size;
   277	
   278		ecc_cfg->ecc_bytes_hw = 7;
   279		ecc_cfg->spare_bytes = 4;
   280		ecc_cfg->bbm_size = 1;
   281		ecc_cfg->bch_enabled = true;
   282		ecc_cfg->bytes = ecc_cfg->ecc_bytes_hw + ecc_cfg->spare_bytes + ecc_cfg->bbm_size;
   283	
   284		ecc_cfg->steps = 4;
   285		ecc_cfg->strength = 4;
   286		ecc_cfg->step_size = 512;
   287		ecc_cfg->cw_data = 516;
   288		ecc_cfg->cw_size = ecc_cfg->cw_data + ecc_cfg->bytes;
   289		bad_block_byte = mtd->writesize - ecc_cfg->cw_size * (cwperpage - 1) + 1;
   290	
   291		mtd_set_ooblayout(mtd, &qcom_spi_ooblayout);
   292	
   293		ecc_cfg->cfg0 = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) |
   294				FIELD_PREP(UD_SIZE_BYTES_MASK, ecc_cfg->cw_data) |
   295				FIELD_PREP(DISABLE_STATUS_AFTER_WRITE, 1) |
   296				FIELD_PREP(NUM_ADDR_CYCLES_MASK, 3) |
   297				FIELD_PREP(ECC_PARITY_SIZE_BYTES_RS, ecc_cfg->ecc_bytes_hw) |
   298				FIELD_PREP(STATUS_BFR_READ, 0) |
   299				FIELD_PREP(SET_RD_MODE_AFTER_STATUS, 1) |
   300				FIELD_PREP(SPARE_SIZE_BYTES_MASK, ecc_cfg->spare_bytes);
   301	
   302		ecc_cfg->cfg1 = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 0) |
   303				FIELD_PREP(CS_ACTIVE_BSY, 0) |
   304				FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, bad_block_byte) |
   305				FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 0) |
   306				FIELD_PREP(WR_RD_BSY_GAP_MASK, 20) |
   307				FIELD_PREP(WIDE_FLASH, 0) |
   308				FIELD_PREP(ENABLE_BCH_ECC, ecc_cfg->bch_enabled);
   309	
   310		ecc_cfg->cfg0_raw = FIELD_PREP(CW_PER_PAGE_MASK, (cwperpage - 1)) |
   311				    FIELD_PREP(NUM_ADDR_CYCLES_MASK, 3) |
   312				    FIELD_PREP(UD_SIZE_BYTES_MASK, ecc_cfg->cw_size) |
   313				    FIELD_PREP(SPARE_SIZE_BYTES_MASK, 0);
   314	
   315		ecc_cfg->cfg1_raw = FIELD_PREP(NAND_RECOVERY_CYCLES_MASK, 0) |
   316				    FIELD_PREP(CS_ACTIVE_BSY, 0) |
   317				    FIELD_PREP(BAD_BLOCK_BYTE_NUM_MASK, 17) |
   318				    FIELD_PREP(BAD_BLOCK_IN_SPARE_AREA, 1) |
   319				    FIELD_PREP(WR_RD_BSY_GAP_MASK, 20) |
   320				    FIELD_PREP(WIDE_FLASH, 0) |
   321				    FIELD_PREP(DEV0_CFG1_ECC_DISABLE, 1);
   322	
   323		ecc_cfg->ecc_bch_cfg = FIELD_PREP(ECC_CFG_ECC_DISABLE, !ecc_cfg->bch_enabled) |
   324				       FIELD_PREP(ECC_SW_RESET, 0) |
   325				       FIELD_PREP(ECC_NUM_DATA_BYTES_MASK, ecc_cfg->cw_data) |
   326				       FIELD_PREP(ECC_FORCE_CLK_OPEN, 1) |
   327				       FIELD_PREP(ECC_MODE_MASK, 0) |
   328				       FIELD_PREP(ECC_PARITY_SIZE_BYTES_BCH_MASK, ecc_cfg->ecc_bytes_hw);
   329	
   330		ecc_cfg->ecc_buf_cfg = 0x203 << NUM_STEPS;
   331		ecc_cfg->clrflashstatus = FS_READY_BSY_N;
   332		ecc_cfg->clrreadstatus = 0xc0;
   333	
   334		conf->step_size = ecc_cfg->step_size;
   335		conf->strength = ecc_cfg->strength;
   336	
   337		snandc->regs->erased_cw_detect_cfg_clr = cpu_to_le32(CLR_ERASED_PAGE_DET);
   338		snandc->regs->erased_cw_detect_cfg_set = cpu_to_le32(SET_ERASED_PAGE_DET);
   339	
   340		dev_dbg(snandc->dev, "ECC strength: %u bits per %u bytes\n",
   341			ecc_cfg->strength, ecc_cfg->step_size);
   342	
   343		return 0;
   344	}
   345	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2024-07-24 23:45 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-24 11:42 [PATCH v7 0/8] Add QPIC SPI NAND driver Md Sadre Alam
2024-07-24 11:42 ` Md Sadre Alam
2024-07-24 11:42 ` [PATCH v7 1/8] spi: dt-bindings: Introduce qcom,spi-qpic-snand Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-24 11:42 ` [PATCH v7 2/8] mtd: rawnand: qcom: cleanup qcom_nandc driver Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-24 20:15   ` kernel test robot
2024-07-24 20:15     ` kernel test robot
2024-07-25 18:26   ` kernel test robot
2024-07-25 18:26     ` kernel test robot
2024-07-24 11:42 ` [PATCH v7 3/8] mtd: rawnand: qcom: Add qcom prefix to common api Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-24 11:42 ` [PATCH v7 4/8] mtd: nand: Add qpic_common API file Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-25 19:40   ` kernel test robot
2024-07-25 19:40     ` kernel test robot
2024-07-24 11:42 ` [PATCH v7 5/8] mtd: rawnand: qcom: use FIELD_PREP and GENMASK Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-25 20:55   ` kernel test robot
2024-07-25 20:55     ` kernel test robot
2024-07-24 11:42 ` [PATCH v7 6/8] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-24 23:45   ` kernel test robot [this message]
2024-07-24 23:45     ` kernel test robot
2024-07-24 11:42 ` [PATCH v7 7/8] arm64: dts: qcom: ipq9574: Add SPI nand support Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam
2024-07-24 11:42 ` [PATCH v7 8/8] arm64: dts: qcom: ipq9574: Disable eMMC node Md Sadre Alam
2024-07-24 11:42   ` Md Sadre Alam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202407250710.knYmJebL-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=andersson@kernel.org \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=esben@geanix.com \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=miquel.raynal@bootlin.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=quic_mdalam@quicinc.com \
    --cc=quic_srichara@quicinc.com \
    --cc=quic_varada@quicinc.com \
    --cc=richard@nod.at \
    --cc=robh@kernel.org \
    --cc=vigneshr@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.