Message ID | 20240516131320.579822-2-miquel.raynal@bootlin.com |
---|---|
State | Accepted |
Headers | show |
Series | mtd: rawnand: NAND early identification fixes | expand |
On Thu, 2024-05-16 at 13:13:19 UTC, Miquel Raynal wrote: > The nand_read_data_op() operation, which only consists in DATA_IN > cycles, is sadly not supported by all controllers despite being very > basic. The core, for some time, supposed all drivers would support > it. An improvement to this situation for supporting more constrained > controller added a check to verify if the operation was supported before > attempting it by running the function with the check_only boolean set > first, and then possibly falling back to another (possibly slightly less > optimized) alternative. > > An even newer addition moved that check very early and probe time, in > order to perform the check only once. The content of the operation was > not so important, as long as the controller driver would tell whether > such operation on the NAND bus would be possible or not. In practice, no > buffer was provided (no fake buffer or whatever) as it is anyway not > relevant for the "check_only" condition. Unfortunately, early in the > function, there is an if statement verifying that the input parameters > are right for normal use, making the early check always unsuccessful. > > Fixes: 9f820fc0651c ("mtd: rawnand: Check the data only read pattern only once") > Cc: stable@vger.kernel.org > Reported-by: Alexander Dahl <ada@thorsis.com> > Closes: https://lore.kernel.org/linux-mtd/20240306-shaky-bunion-d28b65ea97d7@thorsis.com/ > Reported-by: Steven Seeger <steven.seeger@flightsystems.net> > Closes: https://lore.kernel.org/linux-mtd/DM6PR05MB4506554457CF95191A670BDEF7062@DM6PR05MB4506.namprd05.prod.outlook.com/ > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > Reviewed-by: Alexander Dahl <ada@thorsis.com> Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/fixes. Miquel
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index acd137dd0957..248e654ecefd 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -2173,7 +2173,7 @@ EXPORT_SYMBOL_GPL(nand_reset_op); int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len, bool force_8bit, bool check_only) { - if (!len || !buf) + if (!len || (!check_only && !buf)) return -EINVAL; if (nand_has_exec_op(chip)) {