diff mbox

[2/4] ARM: OMAP2+: gpmc-nand: fix error unwinding

Message ID 20170219113448.wdif6zby34z2ptfa@lenoch (mailing list archive)
State New, archived
Headers show

Commit Message

Ladislav Michl Feb. 19, 2017, 11:34 a.m. UTC
On Sun, Feb 19, 2017 at 09:54:05AM +0100, Ladislav Michl wrote:
> Hi Roger,
> 
> On Tue, Feb 14, 2017 at 12:02:19PM +0200, Roger Quadros wrote:
> > Hi,
> > 
> > On 11/02/17 15:02, Ladislav Michl wrote:
> > > Do not call platform_device_put if platform_device_alloc
> > > failed to allocate.
> > > 
> > 
> > It doesn't matter if platform_device_put is called if
> > platform_device_alloc fails as it checks for NULL pdev internally.
> > 
> > Did you face any issues without this patch?
> 
> No, it just makes things to look more likely an error unwinding pattern
> which is IMHO easier to read. I'm not pushing to include this patch as
> I made it while looking for differences between probing NAND and OneNAND.

Actually said patch should be dropped as it is way better to remove this
code alltogether :-)

Tony what about following patch?

-- >8 --
From: Ladislav Michl <ladis@linux-mips.org>
Subject: [PATCH] ARM: OMAP2+: Remove legacy gpmc-nand.c

This code is no longer used and can be removed as we
are using device tree.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 arch/arm/mach-omap2/Makefile                 |   3 -
 arch/arm/mach-omap2/gpmc-nand.c              | 154 ---------------------------
 drivers/memory/omap-gpmc.c                   |   1 -
 drivers/mtd/nand/omap2.c                     |  40 ++-----
 include/linux/platform_data/mtd-nand-omap2.h |  19 ----
 5 files changed, 10 insertions(+), 207 deletions(-)

Comments

Roger Quadros Feb. 20, 2017, 11:08 a.m. UTC | #1
Hi Ladislav,

On 19/02/17 13:34, Ladislav Michl wrote:
> On Sun, Feb 19, 2017 at 09:54:05AM +0100, Ladislav Michl wrote:
>> Hi Roger,
>>
>> On Tue, Feb 14, 2017 at 12:02:19PM +0200, Roger Quadros wrote:
>>> Hi,
>>>
>>> On 11/02/17 15:02, Ladislav Michl wrote:
>>>> Do not call platform_device_put if platform_device_alloc
>>>> failed to allocate.
>>>>
>>>
>>> It doesn't matter if platform_device_put is called if
>>> platform_device_alloc fails as it checks for NULL pdev internally.
>>>
>>> Did you face any issues without this patch?
>>
>> No, it just makes things to look more likely an error unwinding pattern
>> which is IMHO easier to read. I'm not pushing to include this patch as
>> I made it while looking for differences between probing NAND and OneNAND.
> 
> Actually said patch should be dropped as it is way better to remove this
> code alltogether :-)
> 
> Tony what about following patch?

I'm OK with it if nobody is using it now.

I think you should split the patch into 3 patches:
mach-omap2, memory/ and mtd/nand.

cheers,
-roger

> 
> -- >8 --
> From: Ladislav Michl <ladis@linux-mips.org>
> Subject: [PATCH] ARM: OMAP2+: Remove legacy gpmc-nand.c
> 
> This code is no longer used and can be removed as we
> are using device tree.
> 
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
>  arch/arm/mach-omap2/Makefile                 |   3 -
>  arch/arm/mach-omap2/gpmc-nand.c              | 154 ---------------------------
>  drivers/memory/omap-gpmc.c                   |   1 -
>  drivers/mtd/nand/omap2.c                     |  40 ++-----
>  include/linux/platform_data/mtd-nand-omap2.h |  19 ----
>  5 files changed, 10 insertions(+), 207 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 093458b62c8d..c89757abb0ae 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -241,6 +241,3 @@ obj-$(CONFIG_MACH_OMAP2_TUSB6010)	+= usb-tusb6010.o
>  
>  onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
>  obj-y					+= $(onenand-m) $(onenand-y)
> -
> -nand-$(CONFIG_MTD_NAND_OMAP2)		:= gpmc-nand.o
> -obj-y					+= $(nand-m) $(nand-y)
> diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c
> deleted file mode 100644
> index f6ac027f3c3b..000000000000
> --- a/arch/arm/mach-omap2/gpmc-nand.c
> +++ /dev/null
> @@ -1,154 +0,0 @@
> -/*
> - * gpmc-nand.c
> - *
> - * Copyright (C) 2009 Texas Instruments
> - * Vimal Singh <vimalsingh@ti.com>
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/platform_device.h>
> -#include <linux/io.h>
> -#include <linux/omap-gpmc.h>
> -#include <linux/mtd/nand.h>
> -#include <linux/platform_data/mtd-nand-omap2.h>
> -
> -#include <asm/mach/flash.h>
> -
> -#include "soc.h"
> -
> -/* minimum size for IO mapping */
> -#define	NAND_IO_SIZE	4
> -
> -static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)
> -{
> -	/* platforms which support all ECC schemes */
> -	if (soc_is_am33xx() || soc_is_am43xx() || cpu_is_omap44xx() ||
> -		 soc_is_omap54xx() || soc_is_dra7xx())
> -		return 1;
> -
> -	if (ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW ||
> -		 ecc_opt == OMAP_ECC_BCH8_CODE_HW_DETECTION_SW) {
> -		if (cpu_is_omap24xx())
> -			return 0;
> -		else if (cpu_is_omap3630() && (GET_OMAP_REVISION() == 0))
> -			return 0;
> -		else
> -			return 1;
> -	}
> -
> -	/* OMAP3xxx do not have ELM engine, so cannot support ECC schemes
> -	 * which require H/W based ECC error detection */
> -	if ((cpu_is_omap34xx() || cpu_is_omap3630()) &&
> -	    ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) ||
> -		 (ecc_opt == OMAP_ECC_BCH8_CODE_HW)))
> -		return 0;
> -
> -	/* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */
> -	if (ecc_opt == OMAP_ECC_HAM1_CODE_HW ||
> -	    ecc_opt == OMAP_ECC_HAM1_CODE_SW)
> -		return 1;
> -	else
> -		return 0;
> -}
> -
> -/* This function will go away once the device-tree convertion is complete */
> -static void gpmc_set_legacy(struct omap_nand_platform_data *gpmc_nand_data,
> -			    struct gpmc_settings *s)
> -{
> -	/* Enable RD PIN Monitoring Reg */
> -	if (gpmc_nand_data->dev_ready) {
> -		s->wait_on_read = true;
> -		s->wait_on_write = true;
> -	}
> -
> -	if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16)
> -		s->device_width = GPMC_DEVWIDTH_16BIT;
> -	else
> -		s->device_width = GPMC_DEVWIDTH_8BIT;
> -}
> -
> -int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data,
> -		   struct gpmc_timings *gpmc_t)
> -{
> -	int err	= 0;
> -	struct gpmc_settings s;
> -	struct platform_device *pdev;
> -	struct resource gpmc_nand_res[] = {
> -		{ .flags = IORESOURCE_MEM, },
> -		{ .flags = IORESOURCE_IRQ, },
> -		{ .flags = IORESOURCE_IRQ, },
> -	};
> -
> -	BUG_ON(gpmc_nand_data->cs >= GPMC_CS_NUM);
> -
> -	err = gpmc_cs_request(gpmc_nand_data->cs, NAND_IO_SIZE,
> -			      (unsigned long *)&gpmc_nand_res[0].start);
> -	if (err < 0) {
> -		pr_err("omap2-gpmc: Cannot request GPMC CS %d, error %d\n",
> -		       gpmc_nand_data->cs, err);
> -		return err;
> -	}
> -	gpmc_nand_res[0].end = gpmc_nand_res[0].start + NAND_IO_SIZE - 1;
> -	gpmc_nand_res[1].start = gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE);
> -	gpmc_nand_res[2].start = gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT);
> -
> -	memset(&s, 0, sizeof(struct gpmc_settings));
> -	gpmc_set_legacy(gpmc_nand_data, &s);
> -
> -	s.device_nand = true;
> -
> -	if (gpmc_t) {
> -		err = gpmc_cs_set_timings(gpmc_nand_data->cs, gpmc_t, &s);
> -		if (err < 0) {
> -			pr_err("omap2-gpmc: Unable to set gpmc timings: %d\n",
> -			       err);
> -			return err;
> -		}
> -	}
> -
> -	err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s);
> -	if (err < 0)
> -		goto out_free_cs;
> -
> -	err = gpmc_configure(GPMC_CONFIG_WP, 0);
> -	if (err < 0)
> -		goto out_free_cs;
> -
> -	if (!gpmc_hwecc_bch_capable(gpmc_nand_data->ecc_opt)) {
> -		pr_err("omap2-nand: Unsupported NAND ECC scheme selected\n");
> -		err = -EINVAL;
> -		goto out_free_cs;
> -	}
> -
> -
> -	pdev = platform_device_alloc("omap2-nand", gpmc_nand_data->cs);
> -	if (pdev) {
> -		err = platform_device_add_resources(pdev, gpmc_nand_res,
> -						    ARRAY_SIZE(gpmc_nand_res));
> -		if (!err)
> -			pdev->dev.platform_data = gpmc_nand_data;
> -	} else {
> -		err = -ENOMEM;
> -	}
> -	if (err)
> -		goto out_free_pdev;
> -
> -	err = platform_device_add(pdev);
> -	if (err) {
> -		dev_err(&pdev->dev, "Unable to register NAND device\n");
> -		goto out_free_pdev;
> -	}
> -
> -	return 0;
> -
> -out_free_pdev:
> -	platform_device_put(pdev);
> -out_free_cs:
> -	gpmc_cs_free(gpmc_nand_data->cs);
> -
> -	return err;
> -}
> diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
> index 725fceb2146a..5920c7eb3c01 100644
> --- a/drivers/memory/omap-gpmc.c
> +++ b/drivers/memory/omap-gpmc.c
> @@ -1079,7 +1079,6 @@ void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
>  {
>  	int i;
>  
> -	reg->gpmc_status = NULL;	/* deprecated */
>  	reg->gpmc_nand_command = gpmc_base + GPMC_CS0_OFFSET +
>  				GPMC_CS_NAND_COMMAND + GPMC_CS_SIZE * cs;
>  	reg->gpmc_nand_address = gpmc_base + GPMC_CS0_OFFSET +
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 2a52101120d4..7161f96e3c7d 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1588,8 +1588,7 @@ static bool is_elm_present(struct omap_nand_info *info,
>  	return true;
>  }
>  
> -static bool omap2_nand_ecc_check(struct omap_nand_info *info,
> -				 struct omap_nand_platform_data	*pdata)
> +static bool omap2_nand_ecc_check(struct omap_nand_info *info)
>  {
>  	bool ecc_needs_bch, ecc_needs_omap_bch, ecc_needs_elm;
>  
> @@ -1804,7 +1803,6 @@ static const struct mtd_ooblayout_ops omap_sw_ooblayout_ops = {
>  static int omap_nand_probe(struct platform_device *pdev)
>  {
>  	struct omap_nand_info		*info;
> -	struct omap_nand_platform_data	*pdata = NULL;
>  	struct mtd_info			*mtd;
>  	struct nand_chip		*nand_chip;
>  	int				err;
> @@ -1814,6 +1812,9 @@ static int omap_nand_probe(struct platform_device *pdev)
>  	int				min_oobbytes = BADBLOCK_MARKER_LENGTH;
>  	int				oobbytes_per_step;
>  
> +	if (!dev->of_node)
> +		return -EINVAL;
> +
>  	info = devm_kzalloc(&pdev->dev, sizeof(struct omap_nand_info),
>  				GFP_KERNEL);
>  	if (!info)
> @@ -1821,29 +1822,9 @@ static int omap_nand_probe(struct platform_device *pdev)
>  
>  	info->pdev = pdev;
>  
> -	if (dev->of_node) {
> -		if (omap_get_dt_info(dev, info))
> -			return -EINVAL;
> -	} else {
> -		pdata = dev_get_platdata(&pdev->dev);
> -		if (!pdata) {
> -			dev_err(&pdev->dev, "platform data missing\n");
> -			return -EINVAL;
> -		}
> -
> -		info->gpmc_cs = pdata->cs;
> -		info->reg = pdata->reg;
> -		info->ecc_opt = pdata->ecc_opt;
> -		if (pdata->dev_ready)
> -			dev_info(&pdev->dev, "pdata->dev_ready is deprecated\n");
> -
> -		info->xfer_type = pdata->xfer_type;
> -		info->devsize = pdata->devsize;
> -		info->elm_of_node = pdata->elm_of_node;
> -		info->flash_bbt = pdata->flash_bbt;
> -	}
> +	if (omap_get_dt_info(dev, info))
> +		return -EINVAL;
>  
> -	platform_set_drvdata(pdev, info);
>  	info->ops = gpmc_omap_get_nand_ops(&info->reg, info->gpmc_cs);
>  	if (!info->ops) {
>  		dev_err(&pdev->dev, "Failed to get GPMC->NAND interface\n");
> @@ -1993,7 +1974,7 @@ static int omap_nand_probe(struct platform_device *pdev)
>  		goto return_error;
>  	}
>  
> -	if (!omap2_nand_ecc_check(info, pdata)) {
> +	if (!omap2_nand_ecc_check(info)) {
>  		err = -EINVAL;
>  		goto return_error;
>  	}
> @@ -2158,10 +2139,9 @@ static int omap_nand_probe(struct platform_device *pdev)
>  	if (err)
>  		goto return_error;
>  
> -	if (dev->of_node)
> -		mtd_device_register(mtd, NULL, 0);
> -	else
> -		mtd_device_register(mtd, pdata->parts, pdata->nr_parts);
> +	err = mtd_device_register(mtd, NULL, 0);
> +	if (err)
> +		goto return_error;
>  
>  	platform_set_drvdata(pdev, mtd);
>  
> diff --git a/include/linux/platform_data/mtd-nand-omap2.h b/include/linux/platform_data/mtd-nand-omap2.h
> index 17d57a18bac5..619df2431e75 100644
> --- a/include/linux/platform_data/mtd-nand-omap2.h
> +++ b/include/linux/platform_data/mtd-nand-omap2.h
> @@ -63,24 +63,5 @@ struct gpmc_nand_regs {
>  	void __iomem	*gpmc_bch_result4[GPMC_BCH_NUM_REMAINDER];
>  	void __iomem	*gpmc_bch_result5[GPMC_BCH_NUM_REMAINDER];
>  	void __iomem	*gpmc_bch_result6[GPMC_BCH_NUM_REMAINDER];
> -	/* Deprecated. Do not use */
> -	void __iomem	*gpmc_status;
> -};
> -
> -struct omap_nand_platform_data {
> -	int			cs;
> -	struct mtd_partition	*parts;
> -	int			nr_parts;
> -	bool			flash_bbt;
> -	enum nand_io		xfer_type;
> -	int			devsize;
> -	enum omap_ecc           ecc_opt;
> -
> -	struct device_node	*elm_of_node;
> -
> -	/* deprecated */
> -	struct gpmc_nand_regs	reg;
> -	struct device_node	*of_node;
> -	bool			dev_ready;
>  };
>  #endif
>
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 093458b62c8d..c89757abb0ae 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -241,6 +241,3 @@  obj-$(CONFIG_MACH_OMAP2_TUSB6010)	+= usb-tusb6010.o
 
 onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
 obj-y					+= $(onenand-m) $(onenand-y)
-
-nand-$(CONFIG_MTD_NAND_OMAP2)		:= gpmc-nand.o
-obj-y					+= $(nand-m) $(nand-y)
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c
deleted file mode 100644
index f6ac027f3c3b..000000000000
--- a/arch/arm/mach-omap2/gpmc-nand.c
+++ /dev/null
@@ -1,154 +0,0 @@ 
-/*
- * gpmc-nand.c
- *
- * Copyright (C) 2009 Texas Instruments
- * Vimal Singh <vimalsingh@ti.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/omap-gpmc.h>
-#include <linux/mtd/nand.h>
-#include <linux/platform_data/mtd-nand-omap2.h>
-
-#include <asm/mach/flash.h>
-
-#include "soc.h"
-
-/* minimum size for IO mapping */
-#define	NAND_IO_SIZE	4
-
-static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)
-{
-	/* platforms which support all ECC schemes */
-	if (soc_is_am33xx() || soc_is_am43xx() || cpu_is_omap44xx() ||
-		 soc_is_omap54xx() || soc_is_dra7xx())
-		return 1;
-
-	if (ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW ||
-		 ecc_opt == OMAP_ECC_BCH8_CODE_HW_DETECTION_SW) {
-		if (cpu_is_omap24xx())
-			return 0;
-		else if (cpu_is_omap3630() && (GET_OMAP_REVISION() == 0))
-			return 0;
-		else
-			return 1;
-	}
-
-	/* OMAP3xxx do not have ELM engine, so cannot support ECC schemes
-	 * which require H/W based ECC error detection */
-	if ((cpu_is_omap34xx() || cpu_is_omap3630()) &&
-	    ((ecc_opt == OMAP_ECC_BCH4_CODE_HW) ||
-		 (ecc_opt == OMAP_ECC_BCH8_CODE_HW)))
-		return 0;
-
-	/* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */
-	if (ecc_opt == OMAP_ECC_HAM1_CODE_HW ||
-	    ecc_opt == OMAP_ECC_HAM1_CODE_SW)
-		return 1;
-	else
-		return 0;
-}
-
-/* This function will go away once the device-tree convertion is complete */
-static void gpmc_set_legacy(struct omap_nand_platform_data *gpmc_nand_data,
-			    struct gpmc_settings *s)
-{
-	/* Enable RD PIN Monitoring Reg */
-	if (gpmc_nand_data->dev_ready) {
-		s->wait_on_read = true;
-		s->wait_on_write = true;
-	}
-
-	if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16)
-		s->device_width = GPMC_DEVWIDTH_16BIT;
-	else
-		s->device_width = GPMC_DEVWIDTH_8BIT;
-}
-
-int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data,
-		   struct gpmc_timings *gpmc_t)
-{
-	int err	= 0;
-	struct gpmc_settings s;
-	struct platform_device *pdev;
-	struct resource gpmc_nand_res[] = {
-		{ .flags = IORESOURCE_MEM, },
-		{ .flags = IORESOURCE_IRQ, },
-		{ .flags = IORESOURCE_IRQ, },
-	};
-
-	BUG_ON(gpmc_nand_data->cs >= GPMC_CS_NUM);
-
-	err = gpmc_cs_request(gpmc_nand_data->cs, NAND_IO_SIZE,
-			      (unsigned long *)&gpmc_nand_res[0].start);
-	if (err < 0) {
-		pr_err("omap2-gpmc: Cannot request GPMC CS %d, error %d\n",
-		       gpmc_nand_data->cs, err);
-		return err;
-	}
-	gpmc_nand_res[0].end = gpmc_nand_res[0].start + NAND_IO_SIZE - 1;
-	gpmc_nand_res[1].start = gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE);
-	gpmc_nand_res[2].start = gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT);
-
-	memset(&s, 0, sizeof(struct gpmc_settings));
-	gpmc_set_legacy(gpmc_nand_data, &s);
-
-	s.device_nand = true;
-
-	if (gpmc_t) {
-		err = gpmc_cs_set_timings(gpmc_nand_data->cs, gpmc_t, &s);
-		if (err < 0) {
-			pr_err("omap2-gpmc: Unable to set gpmc timings: %d\n",
-			       err);
-			return err;
-		}
-	}
-
-	err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s);
-	if (err < 0)
-		goto out_free_cs;
-
-	err = gpmc_configure(GPMC_CONFIG_WP, 0);
-	if (err < 0)
-		goto out_free_cs;
-
-	if (!gpmc_hwecc_bch_capable(gpmc_nand_data->ecc_opt)) {
-		pr_err("omap2-nand: Unsupported NAND ECC scheme selected\n");
-		err = -EINVAL;
-		goto out_free_cs;
-	}
-
-
-	pdev = platform_device_alloc("omap2-nand", gpmc_nand_data->cs);
-	if (pdev) {
-		err = platform_device_add_resources(pdev, gpmc_nand_res,
-						    ARRAY_SIZE(gpmc_nand_res));
-		if (!err)
-			pdev->dev.platform_data = gpmc_nand_data;
-	} else {
-		err = -ENOMEM;
-	}
-	if (err)
-		goto out_free_pdev;
-
-	err = platform_device_add(pdev);
-	if (err) {
-		dev_err(&pdev->dev, "Unable to register NAND device\n");
-		goto out_free_pdev;
-	}
-
-	return 0;
-
-out_free_pdev:
-	platform_device_put(pdev);
-out_free_cs:
-	gpmc_cs_free(gpmc_nand_data->cs);
-
-	return err;
-}
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index 725fceb2146a..5920c7eb3c01 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -1079,7 +1079,6 @@  void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
 {
 	int i;
 
-	reg->gpmc_status = NULL;	/* deprecated */
 	reg->gpmc_nand_command = gpmc_base + GPMC_CS0_OFFSET +
 				GPMC_CS_NAND_COMMAND + GPMC_CS_SIZE * cs;
 	reg->gpmc_nand_address = gpmc_base + GPMC_CS0_OFFSET +
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 2a52101120d4..7161f96e3c7d 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1588,8 +1588,7 @@  static bool is_elm_present(struct omap_nand_info *info,
 	return true;
 }
 
-static bool omap2_nand_ecc_check(struct omap_nand_info *info,
-				 struct omap_nand_platform_data	*pdata)
+static bool omap2_nand_ecc_check(struct omap_nand_info *info)
 {
 	bool ecc_needs_bch, ecc_needs_omap_bch, ecc_needs_elm;
 
@@ -1804,7 +1803,6 @@  static const struct mtd_ooblayout_ops omap_sw_ooblayout_ops = {
 static int omap_nand_probe(struct platform_device *pdev)
 {
 	struct omap_nand_info		*info;
-	struct omap_nand_platform_data	*pdata = NULL;
 	struct mtd_info			*mtd;
 	struct nand_chip		*nand_chip;
 	int				err;
@@ -1814,6 +1812,9 @@  static int omap_nand_probe(struct platform_device *pdev)
 	int				min_oobbytes = BADBLOCK_MARKER_LENGTH;
 	int				oobbytes_per_step;
 
+	if (!dev->of_node)
+		return -EINVAL;
+
 	info = devm_kzalloc(&pdev->dev, sizeof(struct omap_nand_info),
 				GFP_KERNEL);
 	if (!info)
@@ -1821,29 +1822,9 @@  static int omap_nand_probe(struct platform_device *pdev)
 
 	info->pdev = pdev;
 
-	if (dev->of_node) {
-		if (omap_get_dt_info(dev, info))
-			return -EINVAL;
-	} else {
-		pdata = dev_get_platdata(&pdev->dev);
-		if (!pdata) {
-			dev_err(&pdev->dev, "platform data missing\n");
-			return -EINVAL;
-		}
-
-		info->gpmc_cs = pdata->cs;
-		info->reg = pdata->reg;
-		info->ecc_opt = pdata->ecc_opt;
-		if (pdata->dev_ready)
-			dev_info(&pdev->dev, "pdata->dev_ready is deprecated\n");
-
-		info->xfer_type = pdata->xfer_type;
-		info->devsize = pdata->devsize;
-		info->elm_of_node = pdata->elm_of_node;
-		info->flash_bbt = pdata->flash_bbt;
-	}
+	if (omap_get_dt_info(dev, info))
+		return -EINVAL;
 
-	platform_set_drvdata(pdev, info);
 	info->ops = gpmc_omap_get_nand_ops(&info->reg, info->gpmc_cs);
 	if (!info->ops) {
 		dev_err(&pdev->dev, "Failed to get GPMC->NAND interface\n");
@@ -1993,7 +1974,7 @@  static int omap_nand_probe(struct platform_device *pdev)
 		goto return_error;
 	}
 
-	if (!omap2_nand_ecc_check(info, pdata)) {
+	if (!omap2_nand_ecc_check(info)) {
 		err = -EINVAL;
 		goto return_error;
 	}
@@ -2158,10 +2139,9 @@  static int omap_nand_probe(struct platform_device *pdev)
 	if (err)
 		goto return_error;
 
-	if (dev->of_node)
-		mtd_device_register(mtd, NULL, 0);
-	else
-		mtd_device_register(mtd, pdata->parts, pdata->nr_parts);
+	err = mtd_device_register(mtd, NULL, 0);
+	if (err)
+		goto return_error;
 
 	platform_set_drvdata(pdev, mtd);
 
diff --git a/include/linux/platform_data/mtd-nand-omap2.h b/include/linux/platform_data/mtd-nand-omap2.h
index 17d57a18bac5..619df2431e75 100644
--- a/include/linux/platform_data/mtd-nand-omap2.h
+++ b/include/linux/platform_data/mtd-nand-omap2.h
@@ -63,24 +63,5 @@  struct gpmc_nand_regs {
 	void __iomem	*gpmc_bch_result4[GPMC_BCH_NUM_REMAINDER];
 	void __iomem	*gpmc_bch_result5[GPMC_BCH_NUM_REMAINDER];
 	void __iomem	*gpmc_bch_result6[GPMC_BCH_NUM_REMAINDER];
-	/* Deprecated. Do not use */
-	void __iomem	*gpmc_status;
-};
-
-struct omap_nand_platform_data {
-	int			cs;
-	struct mtd_partition	*parts;
-	int			nr_parts;
-	bool			flash_bbt;
-	enum nand_io		xfer_type;
-	int			devsize;
-	enum omap_ecc           ecc_opt;
-
-	struct device_node	*elm_of_node;
-
-	/* deprecated */
-	struct gpmc_nand_regs	reg;
-	struct device_node	*of_node;
-	bool			dev_ready;
 };
 #endif