mtd: rawnand: mtk: Add validity check for CE# pin setting
authorXiaolei Li <xiaolei.li@mediatek.com>
Tue, 7 May 2019 10:25:40 +0000 (18:25 +0800)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 27 Jun 2019 18:05:25 +0000 (20:05 +0200)
Currently, we only check how many CE# pins are set in device tree.
But it should be necessary to check whether CE# pin setting is
duplicated or if CE# pin index exceeds the maximum CE# number that
controller supports.

So, add validity check to avoid these invalid settings.

Signed-off-by: Xiaolei Li <xiaolei.li@mediatek.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/mtk_nand.c

index 03aff7e..d3f00d6 100644 (file)
@@ -154,6 +154,8 @@ struct mtk_nfc {
        struct list_head chips;
 
        u8 *buffer;
+
+       unsigned long assigned_cs;
 };
 
 /*
@@ -1359,6 +1361,17 @@ static int mtk_nfc_nand_chip_init(struct device *dev, struct mtk_nfc *nfc,
                        dev_err(dev, "reg property failure : %d\n", ret);
                        return ret;
                }
+
+               if (tmp >= MTK_NAND_MAX_NSELS) {
+                       dev_err(dev, "invalid CS: %u\n", tmp);
+                       return -EINVAL;
+               }
+
+               if (test_and_set_bit(tmp, &nfc->assigned_cs)) {
+                       dev_err(dev, "CS %u already assigned\n", tmp);
+                       return -EINVAL;
+               }
+
                chip->sels[i] = tmp;
        }