| From c525b7af96714f72e316c70781570a4a3e1c2856 Mon Sep 17 00:00:00 2001 |
| From: Miquel Raynal <miquel.raynal@bootlin.com> |
| Date: Fri, 24 Apr 2020 18:44:59 +0200 |
| Subject: [PATCH] mtd: rawnand: marvell: Fix probe error path |
| |
| commit c525b7af96714f72e316c70781570a4a3e1c2856 upstream. |
| |
| Ensure all chips are deregistered and cleaned in case of error during |
| the probe. |
| |
| Fixes: 02f26ecf8c77 ("mtd: nand: add reworked Marvell NAND controller driver") |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> |
| Link: https://lore.kernel.org/linux-mtd/20200424164501.26719-5-miquel.raynal@bootlin.com |
| |
| diff --git a/drivers/mtd/nand/raw/marvell_nand.c b/drivers/mtd/nand/raw/marvell_nand.c |
| index 893f86c2f57c..b5b58075ae3e 100644 |
| --- a/drivers/mtd/nand/raw/marvell_nand.c |
| +++ b/drivers/mtd/nand/raw/marvell_nand.c |
| @@ -2674,6 +2674,16 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc, |
| return 0; |
| } |
| |
| +static void marvell_nand_chips_cleanup(struct marvell_nfc *nfc) |
| +{ |
| + struct marvell_nand_chip *entry, *temp; |
| + |
| + list_for_each_entry_safe(entry, temp, &nfc->chips, node) { |
| + nand_release(&entry->chip); |
| + list_del(&entry->node); |
| + } |
| +} |
| + |
| static int marvell_nand_chips_init(struct device *dev, struct marvell_nfc *nfc) |
| { |
| struct device_node *np = dev->of_node; |
| @@ -2708,21 +2718,16 @@ static int marvell_nand_chips_init(struct device *dev, struct marvell_nfc *nfc) |
| ret = marvell_nand_chip_init(dev, nfc, nand_np); |
| if (ret) { |
| of_node_put(nand_np); |
| - return ret; |
| + goto cleanup_chips; |
| } |
| } |
| |
| return 0; |
| -} |
| |
| -static void marvell_nand_chips_cleanup(struct marvell_nfc *nfc) |
| -{ |
| - struct marvell_nand_chip *entry, *temp; |
| +cleanup_chips: |
| + marvell_nand_chips_cleanup(nfc); |
| |
| - list_for_each_entry_safe(entry, temp, &nfc->chips, node) { |
| - nand_release(&entry->chip); |
| - list_del(&entry->node); |
| - } |
| + return ret; |
| } |
| |
| static int marvell_nfc_init_dma(struct marvell_nfc *nfc) |
| -- |
| 2.27.0 |
| |