Commit 623c0141 authored by Miquel Raynal's avatar Miquel Raynal

mtd: rawnand: timings: Provide onfi_fill_data_interface() with a data interface

Right now the core uses onfi_fill_data_interface() to initialize the
nand_data_interface object embedded in nand_chip, but we are about to
allocate this object dynamically and let manufacturer drivers provide
their own interface config. Let's patch the onfi_fill_data_interface()
so it can initialize an interface config that's not the one
currently attached to the nand_chip.
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Link: https://lore.kernel.org/linux-mtd/20200529111322.7184-14-miquel.raynal@bootlin.com
parent 844cc464
...@@ -85,6 +85,7 @@ int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs); ...@@ -85,6 +85,7 @@ int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs);
int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr, int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr,
int allowbbt); int allowbbt);
int onfi_fill_data_interface(struct nand_chip *chip, int onfi_fill_data_interface(struct nand_chip *chip,
struct nand_data_interface *iface,
enum nand_data_interface_type type, enum nand_data_interface_type type,
int timing_mode); int timing_mode);
int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param); int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param);
......
...@@ -927,7 +927,7 @@ static int nand_reset_data_interface(struct nand_chip *chip, int chipnr) ...@@ -927,7 +927,7 @@ static int nand_reset_data_interface(struct nand_chip *chip, int chipnr)
* timings to timing mode 0. * timings to timing mode 0.
*/ */
onfi_fill_data_interface(chip, NAND_SDR_IFACE, 0); onfi_fill_data_interface(chip, &chip->data_interface, NAND_SDR_IFACE, 0);
ret = chip->controller->ops->setup_data_interface(chip, chipnr, ret = chip->controller->ops->setup_data_interface(chip, chipnr,
&chip->data_interface); &chip->data_interface);
if (ret) if (ret)
...@@ -1040,7 +1040,8 @@ static int nand_choose_data_interface(struct nand_chip *chip) ...@@ -1040,7 +1040,8 @@ static int nand_choose_data_interface(struct nand_chip *chip)
} }
for (mode = fls(modes) - 1; mode >= 0; mode--) { for (mode = fls(modes) - 1; mode >= 0; mode--) {
ret = onfi_fill_data_interface(chip, NAND_SDR_IFACE, mode); ret = onfi_fill_data_interface(chip, &chip->data_interface,
NAND_SDR_IFACE, mode);
if (ret) if (ret)
continue; continue;
...@@ -5182,7 +5183,7 @@ static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips, ...@@ -5182,7 +5183,7 @@ static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips,
mutex_init(&chip->lock); mutex_init(&chip->lock);
/* Enforce the right timings for reset/detection */ /* Enforce the right timings for reset/detection */
onfi_fill_data_interface(chip, NAND_SDR_IFACE, 0); onfi_fill_data_interface(chip, &chip->data_interface, NAND_SDR_IFACE, 0);
ret = nand_dt_init(chip); ret = nand_dt_init(chip);
if (ret) if (ret)
......
...@@ -276,14 +276,15 @@ static const struct nand_data_interface onfi_sdr_timings[] = { ...@@ -276,14 +276,15 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
/** /**
* onfi_fill_data_interface - Initialize a data interface from a given ONFI mode * onfi_fill_data_interface - Initialize a data interface from a given ONFI mode
* @chip: The NAND chip * @chip: The NAND chip
* @iface: The data interface to fill
* @type: The data interface type * @type: The data interface type
* @timing_mode: The ONFI timing mode * @timing_mode: The ONFI timing mode
*/ */
int onfi_fill_data_interface(struct nand_chip *chip, int onfi_fill_data_interface(struct nand_chip *chip,
struct nand_data_interface *iface,
enum nand_data_interface_type type, enum nand_data_interface_type type,
int timing_mode) int timing_mode)
{ {
struct nand_data_interface *iface = &chip->data_interface;
struct onfi_params *onfi = chip->parameters.onfi; struct onfi_params *onfi = chip->parameters.onfi;
if (type != NAND_SDR_IFACE) if (type != NAND_SDR_IFACE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment