ramips: use separated mtd patch reverting write_page() removal
This helps understanding mtd changes needed to get downstream NAND driver working. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		| @@ -0,0 +1,67 @@ | |||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Subject: [PATCH] Revert "mtd: nand: Remove unused chip->write_page() hook" | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | This reverts commit f107d7a43923a83d837b3ea3c7b7de58cd014bbd. | ||||||
|  |  | ||||||
|  | OpenWrt's downstream driver mtk_nand2 still uses that callback. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/mtd/nand/nand_base.c | ||||||
|  | +++ b/drivers/mtd/nand/nand_base.c | ||||||
|  | @@ -2577,7 +2577,7 @@ static int nand_write_page_syndrome(stru | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | - * nand_write_page - write one page | ||||||
|  | + * nand_write_page - [REPLACEABLE] write one page | ||||||
|  |   * @mtd: MTD device structure | ||||||
|  |   * @chip: NAND chip descriptor | ||||||
|  |   * @offset: address offset within the page | ||||||
|  | @@ -2761,9 +2761,9 @@ static int nand_do_write_ops(struct mtd_ | ||||||
|  |  			memset(chip->oob_poi, 0xff, mtd->oobsize); | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  | -		ret = nand_write_page(mtd, chip, column, bytes, wbuf, | ||||||
|  | -				      oob_required, page, | ||||||
|  | -				      (ops->mode == MTD_OPS_RAW)); | ||||||
|  | +		ret = chip->write_page(mtd, chip, column, bytes, wbuf, | ||||||
|  | +					oob_required, page, | ||||||
|  | +					(ops->mode == MTD_OPS_RAW)); | ||||||
|  |  		if (ret) | ||||||
|  |  			break; | ||||||
|  |   | ||||||
|  | @@ -4719,6 +4719,9 @@ int nand_scan_tail(struct mtd_info *mtd) | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	if (!chip->write_page) | ||||||
|  | +		chip->write_page = nand_write_page; | ||||||
|  | + | ||||||
|  |  	/* | ||||||
|  |  	 * Check ECC mode, default to software if 3byte/512byte hardware ECC is | ||||||
|  |  	 * selected and we have 256 byte pagesize fallback to software ECC | ||||||
|  | --- a/include/linux/mtd/rawnand.h | ||||||
|  | +++ b/include/linux/mtd/rawnand.h | ||||||
|  | @@ -862,6 +862,7 @@ struct nand_manufacturer_ops { | ||||||
|  |   *			structure which is shared among multiple independent | ||||||
|  |   *			devices. | ||||||
|  |   * @priv:		[OPTIONAL] pointer to private chip data | ||||||
|  | + * @write_page:		[REPLACEABLE] High-level page write function | ||||||
|  |   * @manufacturer:	[INTERN] Contains manufacturer information | ||||||
|  |   */ | ||||||
|  |   | ||||||
|  | @@ -885,6 +886,9 @@ struct nand_chip { | ||||||
|  |  	int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this); | ||||||
|  |  	int (*erase)(struct mtd_info *mtd, int page); | ||||||
|  |  	int (*scan_bbt)(struct mtd_info *mtd); | ||||||
|  | +	int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | ||||||
|  | +			uint32_t offset, int data_len, const uint8_t *buf, | ||||||
|  | +			int oob_required, int page, int raw); | ||||||
|  |  	int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip, | ||||||
|  |  			int feature_addr, uint8_t *subfeature_para); | ||||||
|  |  	int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip, | ||||||
| @@ -18,37 +18,9 @@ | |||||||
|  			if (ret < 0) { |  			if (ret < 0) { | ||||||
|  				if (use_bufpoi) |  				if (use_bufpoi) | ||||||
|  					/* Invalidate page cache */ |  					/* Invalidate page cache */ | ||||||
| @@ -2761,9 +2765,14 @@ static int nand_do_write_ops(struct mtd_ |  | ||||||
|  			memset(chip->oob_poi, 0xff, mtd->oobsize); |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		ret = nand_write_page(mtd, chip, column, bytes, wbuf, |  | ||||||
| -				      oob_required, page, |  | ||||||
| -				      (ops->mode == MTD_OPS_RAW)); |  | ||||||
| +		if (chip->write_page) |  | ||||||
| +			ret = chip->write_page(mtd, chip, column, bytes, wbuf, |  | ||||||
| +					       oob_required, page, |  | ||||||
| +					       (ops->mode == MTD_OPS_RAW)); |  | ||||||
| +		else |  | ||||||
| +			ret = nand_write_page(mtd, chip, column, bytes, wbuf, |  | ||||||
| +					      oob_required, page, |  | ||||||
| +					      (ops->mode == MTD_OPS_RAW)); |  | ||||||
|  		if (ret) |  | ||||||
|  			break; |  | ||||||
|   |  | ||||||
| --- a/include/linux/mtd/rawnand.h | --- a/include/linux/mtd/rawnand.h | ||||||
| +++ b/include/linux/mtd/rawnand.h | +++ b/include/linux/mtd/rawnand.h | ||||||
| @@ -885,6 +885,9 @@ struct nand_chip { | @@ -897,6 +897,9 @@ struct nand_chip { | ||||||
|  	int(*waitfunc)(struct mtd_info *mtd, struct nand_chip *this); |  | ||||||
|  	int (*erase)(struct mtd_info *mtd, int page); |  | ||||||
|  	int (*scan_bbt)(struct mtd_info *mtd); |  | ||||||
| +	int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |  | ||||||
| +			uint32_t offset, int data_len, const uint8_t *buf, |  | ||||||
| +			int oob_required, int page, int raw); |  | ||||||
|  	int (*onfi_set_features)(struct mtd_info *mtd, struct nand_chip *chip, |  | ||||||
|  			int feature_addr, uint8_t *subfeature_para); |  | ||||||
|  	int (*onfi_get_features)(struct mtd_info *mtd, struct nand_chip *chip, |  | ||||||
| @@ -893,6 +896,9 @@ struct nand_chip { |  | ||||||
|  	int (*setup_data_interface)(struct mtd_info *mtd, int chipnr, |  	int (*setup_data_interface)(struct mtd_info *mtd, int chipnr, | ||||||
|  				    const struct nand_data_interface *conf); |  				    const struct nand_data_interface *conf); | ||||||
|   |   | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki