mtd: rawnand: Pass a nand_chip object to chip->setup_read_retry()

Let's make the raw NAND API consistent by patching all helpers and
hooks to take a nand_chip object instead of an mtd_info one or
remove the mtd_info object when both are passed.

Let's tackle the chip->setup_read_retry() hook.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
Boris Brezillon 2018-09-06 14:05:32 +02:00 committed by Miquel Raynal
parent aa36ff25ff
commit 2e7f1cec27
4 changed files with 8 additions and 12 deletions

View file

@ -3475,17 +3475,15 @@ static uint8_t *nand_transfer_oob(struct mtd_info *mtd, uint8_t *oob,
/** /**
* nand_setup_read_retry - [INTERN] Set the READ RETRY mode * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
* @mtd: MTD device structure * @chip: NAND chip object
* @retry_mode: the retry mode to use * @retry_mode: the retry mode to use
* *
* Some vendors supply a special command to shift the Vt threshold, to be used * Some vendors supply a special command to shift the Vt threshold, to be used
* when there are too many bitflips in a page (i.e., ECC error). After setting * when there are too many bitflips in a page (i.e., ECC error). After setting
* a new threshold, the host should retry reading the page. * a new threshold, the host should retry reading the page.
*/ */
static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode) static int nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
pr_debug("setting READ RETRY mode %d\n", retry_mode); pr_debug("setting READ RETRY mode %d\n", retry_mode);
if (retry_mode >= chip->read_retries) if (retry_mode >= chip->read_retries)
@ -3494,7 +3492,7 @@ static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
if (!chip->setup_read_retry) if (!chip->setup_read_retry)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return chip->setup_read_retry(mtd, retry_mode); return chip->setup_read_retry(chip, retry_mode);
} }
static void nand_wait_readrdy(struct nand_chip *chip) static void nand_wait_readrdy(struct nand_chip *chip)
@ -3619,7 +3617,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
if (mtd->ecc_stats.failed - ecc_failures) { if (mtd->ecc_stats.failed - ecc_failures) {
if (retry_mode + 1 < chip->read_retries) { if (retry_mode + 1 < chip->read_retries) {
retry_mode++; retry_mode++;
ret = nand_setup_read_retry(mtd, ret = nand_setup_read_retry(chip,
retry_mode); retry_mode);
if (ret < 0) if (ret < 0)
break; break;
@ -3646,7 +3644,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
/* Reset to retry mode 0 */ /* Reset to retry mode 0 */
if (retry_mode) { if (retry_mode) {
ret = nand_setup_read_retry(mtd, 0); ret = nand_setup_read_retry(chip, 0);
if (ret < 0) if (ret < 0)
break; break;
retry_mode = 0; retry_mode = 0;

View file

@ -113,9 +113,8 @@ static int hynix_nand_reg_write_op(struct nand_chip *chip, u8 addr, u8 val)
return 0; return 0;
} }
static int hynix_nand_setup_read_retry(struct mtd_info *mtd, int retry_mode) static int hynix_nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
struct hynix_nand *hynix = nand_get_manufacturer_data(chip); struct hynix_nand *hynix = nand_get_manufacturer_data(chip);
const u8 *values; const u8 *values;
int i, ret; int i, ret;

View file

@ -74,9 +74,8 @@ struct micron_nand {
struct micron_on_die_ecc ecc; struct micron_on_die_ecc ecc;
}; };
static int micron_nand_setup_read_retry(struct mtd_info *mtd, int retry_mode) static int micron_nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
u8 feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode}; u8 feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};
return nand_set_features(chip, ONFI_FEATURE_ADDR_READ_RETRY, feature); return nand_set_features(chip, ONFI_FEATURE_ADDR_READ_RETRY, feature);

View file

@ -1303,7 +1303,7 @@ struct nand_chip {
uint8_t *subfeature_para); uint8_t *subfeature_para);
int (*get_features)(struct nand_chip *chip, int feature_addr, int (*get_features)(struct nand_chip *chip, int feature_addr,
uint8_t *subfeature_para); uint8_t *subfeature_para);
int (*setup_read_retry)(struct mtd_info *mtd, int retry_mode); int (*setup_read_retry)(struct nand_chip *chip, int retry_mode);
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);