[PATCH v2] mtd: rawnand: marvell: Clean the controller state before each operation

Daniel Mack daniel at zonque.org
Sun Apr 28 05:20:49 PDT 2019


On 14/4/2019 10:50 AM, Boris Brezillon wrote:
> On Mon,  8 Apr 2019 10:31:45 +0200
> Miquel Raynal <miquel.raynal at bootlin.com> wrote:
> 
>> Since the migration of the driver to stop using the legacy
>> ->select_chip() hook, there is nothing deselecting the target anymore,  
>> thus the selection is not forced at the next access. Ensure the ND_RUN
>> bit and the interrupts are always in a clean state.
>>
>> Cc: Daniel Mack <daniel at zonque.org>
>> Cc: stable at vger.kernel.org
>> Fixes: b25251414f6e00 ("mtd: rawnand: marvell: Stop implementing ->select_chip()")
>> Suggested-by: Boris Brezillon <boris.brezillon at collabora.com>
>> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> 
> Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>

Has this one been queued in any tree yet?



Thanks,
Daniel




> 
>> ---
>>
>> Changes in v2:
>> * Also include the reset of the interrupts each time
>>   marvell_nfc_select_target() is called.
>>
>>  drivers/mtd/nand/raw/marvell_nand.c | 12 ++++++------
>>  1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/mtd/nand/raw/marvell_nand.c b/drivers/mtd/nand/raw/marvell_nand.c
>> index f38e5c1b87e4..d984538980e2 100644
>> --- a/drivers/mtd/nand/raw/marvell_nand.c
>> +++ b/drivers/mtd/nand/raw/marvell_nand.c
>> @@ -722,12 +722,6 @@ static void marvell_nfc_select_target(struct nand_chip *chip,
>>  	struct marvell_nfc *nfc = to_marvell_nfc(chip->controller);
>>  	u32 ndcr_generic;
>>  
>> -	if (chip == nfc->selected_chip && die_nr == marvell_nand->selected_die)
>> -		return;
>> -
>> -	writel_relaxed(marvell_nand->ndtr0, nfc->regs + NDTR0);
>> -	writel_relaxed(marvell_nand->ndtr1, nfc->regs + NDTR1);
>> -
>>  	/*
>>  	 * Reset the NDCR register to a clean state for this particular chip,
>>  	 * also clear ND_RUN bit.
>> @@ -739,6 +733,12 @@ static void marvell_nfc_select_target(struct nand_chip *chip,
>>  	/* Also reset the interrupt status register */
>>  	marvell_nfc_clear_int(nfc, NDCR_ALL_INT);
>>  
>> +	if (chip == nfc->selected_chip && die_nr == marvell_nand->selected_die)
>> +		return;
>> +
>> +	writel_relaxed(marvell_nand->ndtr0, nfc->regs + NDTR0);
>> +	writel_relaxed(marvell_nand->ndtr1, nfc->regs + NDTR1);
>> +
>>  	nfc->selected_chip = chip;
>>  	marvell_nand->selected_die = die_nr;
>>  }
> 




More information about the linux-mtd mailing list