diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/mtd/nand/raw/meson_nand.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/mtd/nand/raw/meson_nand.c')
| -rw-r--r-- | drivers/mtd/nand/raw/meson_nand.c | 22 | 
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c index 5ee01231ac4c..1feea7d82252 100644 --- a/drivers/mtd/nand/raw/meson_nand.c +++ b/drivers/mtd/nand/raw/meson_nand.c @@ -176,6 +176,7 @@ struct meson_nfc {  	dma_addr_t daddr;  	dma_addr_t iaddr; +	u32 info_bytes;  	unsigned long assigned_cs;  }; @@ -279,7 +280,7 @@ static void meson_nfc_cmd_access(struct nand_chip *nand, int raw, bool dir,  	if (raw) {  		len = mtd->writesize + mtd->oobsize; -		cmd = (len & GENMASK(5, 0)) | scrambler | DMA_DIR(dir); +		cmd = (len & GENMASK(13, 0)) | scrambler | DMA_DIR(dir);  		writel(cmd, nfc->reg_base + NFC_REG_CMD);  		return;  	} @@ -503,6 +504,7 @@ static int meson_nfc_dma_buffer_setup(struct nand_chip *nand, void *databuf,  					 nfc->daddr, datalen, dir);  			return ret;  		} +		nfc->info_bytes = infolen;  		cmd = GENCMDIADDRL(NFC_CMD_AIL, nfc->iaddr);  		writel(cmd, nfc->reg_base + NFC_REG_CMD); @@ -520,8 +522,10 @@ static void meson_nfc_dma_buffer_release(struct nand_chip *nand,  	struct meson_nfc *nfc = nand_get_controller_data(nand);  	dma_unmap_single(nfc->dev, nfc->daddr, datalen, dir); -	if (infolen) +	if (infolen) {  		dma_unmap_single(nfc->dev, nfc->iaddr, infolen, dir); +		nfc->info_bytes = 0; +	}  }  static int meson_nfc_read_buf(struct nand_chip *nand, u8 *buf, int len) @@ -540,7 +544,7 @@ static int meson_nfc_read_buf(struct nand_chip *nand, u8 *buf, int len)  	if (ret)  		goto out; -	cmd = NFC_CMD_N2M | (len & GENMASK(5, 0)); +	cmd = NFC_CMD_N2M | (len & GENMASK(13, 0));  	writel(cmd, nfc->reg_base + NFC_REG_CMD);  	meson_nfc_drain_cmd(nfc); @@ -564,7 +568,7 @@ static int meson_nfc_write_buf(struct nand_chip *nand, u8 *buf, int len)  	if (ret)  		return ret; -	cmd = NFC_CMD_M2N | (len & GENMASK(5, 0)); +	cmd = NFC_CMD_M2N | (len & GENMASK(13, 0));  	writel(cmd, nfc->reg_base + NFC_REG_CMD);  	meson_nfc_drain_cmd(nfc); @@ -710,6 +714,8 @@ static void meson_nfc_check_ecc_pages_valid(struct meson_nfc *nfc,  		usleep_range(10, 15);  		/* info is updated by nfc dma engine*/  		smp_rmb(); +		dma_sync_single_for_cpu(nfc->dev, nfc->iaddr, nfc->info_bytes, +					DMA_FROM_DEVICE);  		ret = *info & ECC_COMPLETE;  	} while (!ret);  } @@ -991,7 +997,7 @@ static const struct mtd_ooblayout_ops meson_ooblayout_ops = {  static int meson_nfc_clk_init(struct meson_nfc *nfc)  { -	struct clk_parent_data nfc_divider_parent_data[1]; +	struct clk_parent_data nfc_divider_parent_data[1] = {0};  	struct clk_init_data init = {0};  	int ret; @@ -1434,20 +1440,18 @@ err_clk:  	return ret;  } -static int meson_nfc_remove(struct platform_device *pdev) +static void meson_nfc_remove(struct platform_device *pdev)  {  	struct meson_nfc *nfc = platform_get_drvdata(pdev);  	meson_nfc_nand_chip_cleanup(nfc);  	meson_nfc_disable_clk(nfc); - -	return 0;  }  static struct platform_driver meson_nfc_driver = {  	.probe  = meson_nfc_probe, -	.remove = meson_nfc_remove, +	.remove_new = meson_nfc_remove,  	.driver = {  		.name  = "meson-nand",  		.of_match_table = meson_nfc_id_table,  |