[PATCH v3 7/7] mtd: nand: remove useless fields from pxa3xx NAND platform data

Miquel Raynal miquel.raynal at bootlin.com
Mon Feb 12 02:17:28 PST 2018


Hi Robert,

Would you mind reviewing this patch that simplifies the content of the
pxa3xx pdata?

Thank you,
Miquèl

On Tue,  9 Jan 2018 11:36:37 +0100, Miquel Raynal
<miquel.raynal at free-electrons.com> wrote:

> The "enable arbiter" bit is available only for pxa3xx based platforms
> but it was experimentally shown that even if this bit is reserved,
> some Marvell platforms (64-bit) actually need it to be set. The driver
> always set this bit regardless of this property, which is harmless.
> Then this property is not needed.
> 
> The "num_cs" field is always 1 and for a good reason, the old driver
> (pxa3xx_nand.c) could only handle one. The new driver that replaces it
> (marvell_nand.c) can handle more, but better use device tree for such
> description. As there is only one available chip select, there is no
> need for an array of partitions neither an array of partition numbers.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal at free-electrons.com>
> ---
>  arch/arm/mach-pxa/cm-x300.c                   |  6 ++--
>  arch/arm/mach-pxa/colibri-pxa3xx.c            |  6 ++--
>  arch/arm/mach-pxa/littleton.c                 |  6 ++--
>  arch/arm/mach-pxa/mxm8x10.c                   |  6 ++--
>  arch/arm/mach-pxa/raumfeld.c                  |  6 ++--
>  arch/arm/mach-pxa/zylonite.c                  |  6 ++--
>  drivers/mtd/nand/marvell_nand.c               |  3 +-
>  include/linux/platform_data/mtd-nand-pxa3xx.h | 43 ++++++++-------------------
>  8 files changed, 25 insertions(+), 57 deletions(-)
> 
> diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c
> index fe1c76bca212..0ac130bbf935 100644
> --- a/arch/arm/mach-pxa/cm-x300.c
> +++ b/arch/arm/mach-pxa/cm-x300.c
> @@ -429,11 +429,9 @@ static struct mtd_partition cm_x300_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data cm_x300_nand_info = {
> -	.enable_arbiter	= 1,
>  	.keep_config	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= cm_x300_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(cm_x300_nand_partitions),
> +	.parts		= cm_x300_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(cm_x300_nand_partitions),
>  };
>  
>  static void __init cm_x300_init_nand(void)
> diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c b/arch/arm/mach-pxa/colibri-pxa3xx.c
> index 3018eafd723e..e31a591e949f 100644
> --- a/arch/arm/mach-pxa/colibri-pxa3xx.c
> +++ b/arch/arm/mach-pxa/colibri-pxa3xx.c
> @@ -138,11 +138,9 @@ static struct mtd_partition colibri_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data colibri_nand_info = {
> -	.enable_arbiter	= 1,
>  	.keep_config	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= colibri_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(colibri_nand_partitions),
> +	.parts		= colibri_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(colibri_nand_partitions),
>  };
>  
>  void __init colibri_pxa3xx_init_nand(void)
> diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
> index 380b07a15ef9..48912d60c630 100644
> --- a/arch/arm/mach-pxa/littleton.c
> +++ b/arch/arm/mach-pxa/littleton.c
> @@ -328,10 +328,8 @@ static struct mtd_partition littleton_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data littleton_nand_info = {
> -	.enable_arbiter	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= littleton_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(littleton_nand_partitions),
> +	.parts		= littleton_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(littleton_nand_partitions),
>  };
>  
>  static void __init littleton_init_nand(void)
> diff --git a/arch/arm/mach-pxa/mxm8x10.c b/arch/arm/mach-pxa/mxm8x10.c
> index 743d983fc222..d81b20a85ca7 100644
> --- a/arch/arm/mach-pxa/mxm8x10.c
> +++ b/arch/arm/mach-pxa/mxm8x10.c
> @@ -389,11 +389,9 @@ static struct mtd_partition mxm_8x10_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
> -	.enable_arbiter	= 1,
>  	.keep_config	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= mxm_8x10_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(mxm_8x10_nand_partitions)
> +	.parts		= mxm_8x10_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(mxm_8x10_nand_partitions)
>  };
>  
>  static void __init mxm_8x10_nand_init(void)
> diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c
> index 9d662fed03ec..af72e79a7ffa 100644
> --- a/arch/arm/mach-pxa/raumfeld.c
> +++ b/arch/arm/mach-pxa/raumfeld.c
> @@ -346,11 +346,9 @@ static struct mtd_partition raumfeld_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data raumfeld_nand_info = {
> -	.enable_arbiter	= 1,
>  	.keep_config	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= raumfeld_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(raumfeld_nand_partitions),
> +	.parts		= raumfeld_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(raumfeld_nand_partitions),
>  };
>  
>  /**
> diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
> index 3a99fc054e96..d69de312d8d9 100644
> --- a/arch/arm/mach-pxa/zylonite.c
> +++ b/arch/arm/mach-pxa/zylonite.c
> @@ -376,10 +376,8 @@ static struct mtd_partition zylonite_nand_partitions[] = {
>  };
>  
>  static struct pxa3xx_nand_platform_data zylonite_nand_info = {
> -	.enable_arbiter	= 1,
> -	.num_cs		= 1,
> -	.parts[0]	= zylonite_nand_partitions,
> -	.nr_parts[0]	= ARRAY_SIZE(zylonite_nand_partitions),
> +	.parts		= zylonite_nand_partitions,
> +	.nr_parts	= ARRAY_SIZE(zylonite_nand_partitions),
>  };
>  
>  static void __init zylonite_init_nand(void)
> diff --git a/drivers/mtd/nand/marvell_nand.c b/drivers/mtd/nand/marvell_nand.c
> index 9d01120d97c5..ea05ed8091df 100644
> --- a/drivers/mtd/nand/marvell_nand.c
> +++ b/drivers/mtd/nand/marvell_nand.c
> @@ -2519,8 +2519,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
>  
>  	if (pdata)
>  		/* Legacy bindings support only one chip */
> -		ret = mtd_device_register(mtd, pdata->parts[0],
> -					  pdata->nr_parts[0]);
> +		ret = mtd_device_register(mtd, pdata->parts, pdata->nr_parts);
>  	else
>  		ret = mtd_device_register(mtd, NULL, 0);
>  	if (ret) {
> diff --git a/include/linux/platform_data/mtd-nand-pxa3xx.h b/include/linux/platform_data/mtd-nand-pxa3xx.h
> index b42ad83cbc20..4fd0f592a2d2 100644
> --- a/include/linux/platform_data/mtd-nand-pxa3xx.h
> +++ b/include/linux/platform_data/mtd-nand-pxa3xx.h
> @@ -6,41 +6,22 @@
>  #include <linux/mtd/partitions.h>
>  
>  /*
> - * Current pxa3xx_nand controller has two chip select which
> - * both be workable.
> - *
> - * Notice should be taken that:
> - * When you want to use this feature, you should not enable the
> - * keep configuration feature, for two chip select could be
> - * attached with different nand chip. The different page size
> - * and timing requirement make the keep configuration impossible.
> + * Current pxa3xx_nand controller has two chip select which both be workable but
> + * historically all platforms remaining on platform data used only one. Switch
> + * to device tree if you need more.
>   */
> -
> -/* The max num of chip select current support */
> -#define NUM_CHIP_SELECT		(2)
>  struct pxa3xx_nand_platform_data {
> -
> -	/* the data flash bus is shared between the Static Memory
> -	 * Controller and the Data Flash Controller,  the arbiter
> -	 * controls the ownership of the bus
> -	 */
> -	int	enable_arbiter;
> -
> -	/* allow platform code to keep OBM/bootloader defined NFC config */
> -	int	keep_config;
> -
> -	/* indicate how many chip selects will be used */
> -	int	num_cs;
> -
> -	/* use an flash-based bad block table */
> -	bool	flash_bbt;
> -
> -	/* requested ECC strength and ECC step size */
> +	/* Keep OBM/bootloader NFC timing configuration */
> +	bool keep_config;
> +	/* Use a flash-based bad block table */
> +	bool flash_bbt;
> +	/* Requested ECC strength and ECC step size */
>  	int ecc_strength, ecc_step_size;
> -
> -	const struct mtd_partition		*parts[NUM_CHIP_SELECT];
> -	unsigned int				nr_parts[NUM_CHIP_SELECT];
> +	/* Partitions */
> +	const struct mtd_partition *parts;
> +	unsigned int nr_parts;
>  };
>  
>  extern void pxa3xx_set_nand_info(struct pxa3xx_nand_platform_data *info);
> +
>  #endif /* __ASM_ARCH_PXA3XX_NAND_H */



-- 
Miquel Raynal, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com



More information about the linux-mtd mailing list