nand: raw: Do not free xnand structure
authorMichal Simek <michal.simek@xilinx.com>
Tue, 25 Feb 2020 13:51:48 +0000 (14:51 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 6 Apr 2020 10:52:05 +0000 (12:52 +0200)
xnand structure is private data structure and it is handled by core and
probe shouldn't touch it.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
drivers/mtd/nand/raw/zynq_nand.c

index 28db415..7039149 100644 (file)
@@ -1081,18 +1081,18 @@ static int zynq_nand_probe(struct udevice *dev)
        u8 set_feature[4] = {ONDIE_ECC_FEATURE_ENABLE, 0x00, 0x00, 0x00};
        unsigned long ecc_cfg;
        int ondie_ecc_enabled = 0;
-       int err = -1;
        int is_16bit_bw;
 
        smc->reg = (struct zynq_nand_smc_regs *)dev_read_addr(dev);
        of_nand = dev_read_subnode(dev, "flash@e1000000");
        if (!ofnode_valid(of_nand)) {
                printf("Failed to find nand node in dt\n");
-               goto fail;
+               return -ENODEV;
        }
+
        if (ofnode_read_resource(of_nand, 0, &res)) {
                printf("Failed to get nand resource\n");
-               goto fail;
+               return -ENODEV;
        }
 
        xnand->nand_base = (void __iomem *)res.start;
@@ -1119,7 +1119,7 @@ static int zynq_nand_probe(struct udevice *dev)
        if (is_16bit_bw == NAND_BW_UNKNOWN) {
                printf("%s: Unable detect NAND based on MIO settings\n",
                       __func__);
-               goto fail;
+               return -EINVAL;
        }
 
        if (is_16bit_bw == NAND_BW_16BIT)
@@ -1130,13 +1130,13 @@ static int zynq_nand_probe(struct udevice *dev)
        /* Initialize the NAND flash interface on NAND controller */
        if (zynq_nand_init_nand_flash(mtd, nand_chip->options) < 0) {
                printf("%s: nand flash init failed\n", __func__);
-               goto fail;
+               return -EINVAL;
        }
 
        /* first scan to find the device and get the page size */
        if (nand_scan_ident(mtd, 1, NULL)) {
                printf("%s: nand_scan_ident failed\n", __func__);
-               goto fail;
+               return -EINVAL;
        }
        /* Send the command for reading device ID */
        nand_chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
@@ -1261,14 +1261,12 @@ static int zynq_nand_probe(struct udevice *dev)
        /* Second phase scan */
        if (nand_scan_tail(mtd)) {
                printf("%s: nand_scan_tail failed\n", __func__);
-               goto fail;
+               return -EINVAL;
        }
        if (nand_register(0, mtd))
-               goto fail;
+               return -EINVAL;
+
        return 0;
-fail:
-       free(xnand);
-       return err;
 }
 
 static const struct udevice_id zynq_nand_dt_ids[] = {