Message ID | 20190722055621.23526-9-sshivamurthy@micron.com |
---|---|
State | Changes Requested |
Delegated to: | Miquel Raynal |
Headers | show |
Series | Introduce generic ONFI support | expand |
Hi Shiva, shiva.linuxworks@gmail.com wrote on Mon, 22 Jul 2019 07:56:21 +0200: "with multiple dies" in the title > From: Shivamurthy Shastri <sshivamurthy@micron.com> > > Some of the Micron flashes has multi-die, and need to select the die have multiple dies and > each time while accessing it. > > Signed-off-by: Shivamurthy Shastri <sshivamurthy@micron.com> > --- > drivers/mtd/nand/spi/micron.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c > index 1e28ea3d1362..fa2b43caf39d 100644 > --- a/drivers/mtd/nand/spi/micron.c > +++ b/drivers/mtd/nand/spi/micron.c > @@ -90,6 +90,19 @@ static int micron_ecc_get_status(struct spinand_device *spinand, > return -EINVAL; > } > Please explain in a comment what you do here, like in the commit title. > +static int micron_select_target(struct spinand_device *spinand, > + unsigned int target) > +{ > + struct spi_mem_op op = SPINAND_SET_FEATURE_OP(0xd0, > + spinand->scratchbuf); > + > + if (target == 1) > + target = 0x40; > + > + *spinand->scratchbuf = target; if (target == 1) *spinand->scratchbuf = 0x40 space > + return spi_mem_exec_op(spinand->spimem, &op); > +} > + > static int micron_spinand_detect(struct spinand_device *spinand) > { > const struct spi_mem_op *op; > @@ -105,6 +118,7 @@ static int micron_spinand_detect(struct spinand_device *spinand) > spinand->flags = 0; > spinand->eccinfo.get_status = micron_ecc_get_status; > spinand->eccinfo.ooblayout = µn_ooblayout_ops; > + spinand->select_target = micron_select_target; > > op = spinand_select_op_variant(spinand, > &read_cache_variants); Thanks, Miquèl
diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 1e28ea3d1362..fa2b43caf39d 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -90,6 +90,19 @@ static int micron_ecc_get_status(struct spinand_device *spinand, return -EINVAL; } +static int micron_select_target(struct spinand_device *spinand, + unsigned int target) +{ + struct spi_mem_op op = SPINAND_SET_FEATURE_OP(0xd0, + spinand->scratchbuf); + + if (target == 1) + target = 0x40; + + *spinand->scratchbuf = target; + return spi_mem_exec_op(spinand->spimem, &op); +} + static int micron_spinand_detect(struct spinand_device *spinand) { const struct spi_mem_op *op; @@ -105,6 +118,7 @@ static int micron_spinand_detect(struct spinand_device *spinand) spinand->flags = 0; spinand->eccinfo.get_status = micron_ecc_get_status; spinand->eccinfo.ooblayout = µn_ooblayout_ops; + spinand->select_target = micron_select_target; op = spinand_select_op_variant(spinand, &read_cache_variants);