Cleanups for physmap_of.c

Josh Boyer jwboyer at linux.vnet.ibm.com
Wed Sep 19 22:14:33 EST 2007


On Wed, 19 Sep 2007 14:16:46 +1000
David Gibson <david at gibson.dropbear.id.au> wrote:

> This patch includes a whole batch of smallish cleanups for
> drivers/mtd/physmap_of.c.
> 
> 	- A bunch of uneeded #includes are removed
> 	- We switch to the modern linux/of.h etc. in place of
> asm/prom.h
> 	- Use some helper macros to avoid some ugly inline #ifdefs
> 	- A few lines of unreachable code are removed
> 	- A number of indentation / line-wrapping fixes
> 	- More consistent use of kernel idioms such as if (!p) instead
> of if (p == NULL)
> 	- Clarify some printk()s and other informative strings.	

Most of that looks good.  Just a couple issues below.  Mostly it
doesn't apply cleanly to my tree because you didn't base if off of the
patch I sent out last week to fix optional partitions.

> 	- (the big one) Despite the name, this driver really has
> nothing to do with drivers/mtd/physmap.c.  The fact that the flash
> chips must be physically direct mapped is a constrant, but doesn't
> really say anything about the actual purpose of this driver, which is
> to instantiate MTD devices based on information from the device tree.
> Therefore the physmap name is replaced everywhere within the file with
> "of_flash".  The file itself and the Kconfig option is not renamed for
> now (so that the diff is actually a diff).  That can come later.

Later when?  If we're all in agreement, then why don't we just apply
your patch after you fix it up and I can move the file in my git tree.
That way we don't forget about it.

> Signed-off-by: David Gibson <david at gibson.dropbear.id.au>
> 
> Index: working-2.6/drivers/mtd/maps/physmap_of.c
> ===================================================================
> --- working-2.6.orig/drivers/mtd/maps/physmap_of.c	2007-09-14 14:24:06.000000000 +1000
> +++ working-2.6/drivers/mtd/maps/physmap_of.c	2007-09-19 13:59:23.000000000 +1000
> @@ -1,5 +1,5 @@
>  /*
> - * Normal mappings of chips in physical memory for OF devices
> + * Flash mappings described by the OF (or flattened) device tree
>   *
>   * Copyright (C) 2006 MontaVista Software Inc.
>   * Author: Vitaly Wool <vwool at ru.mvista.com>
> @@ -15,20 +15,15 @@
> 
>  #include <linux/module.h>
>  #include <linux/types.h>
> -#include <linux/kernel.h>
>  #include <linux/init.h>
> -#include <linux/slab.h>
>  #include <linux/device.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/map.h>
>  #include <linux/mtd/partitions.h>
> -#include <linux/mtd/physmap.h>
> -#include <asm/io.h>
> -#include <asm/prom.h>
> -#include <asm/of_device.h>
> -#include <asm/of_platform.h>
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> 
> -struct physmap_flash_info {
> +struct of_flash {
>  	struct mtd_info		*mtd;
>  	struct map_info		map;
>  	struct resource		*res;
> @@ -38,8 +33,10 @@ struct physmap_flash_info {
>  };
> 
>  #ifdef CONFIG_MTD_PARTITIONS
> +#define OF_FLASH_PARTS(info)	((info)->parts)
> +
>  static int parse_obsolete_partitions(struct of_device *dev,
> -				     struct physmap_flash_info *info,
> +				     struct of_flash *info,
>  				     struct device_node *dp)
>  {
>  	int i, plen, nr_parts;
> @@ -56,11 +53,9 @@ static int parse_obsolete_partitions(str
> 
>  	nr_parts = plen / sizeof(part[0]);
> 
> -	info->parts = kzalloc(nr_parts * sizeof(struct mtd_partition), GFP_KERNEL);
> -	if (!info->parts) {
> -		printk(KERN_ERR "Can't allocate the flash partition data!\n");
> +	info->parts = kzalloc(nr_parts * sizeof(*info->parts), GFP_KERNEL);
> +	if (!info->parts)
>  		return -ENOMEM;

You dropped the printk here.  Any particular reason why?

> -	}
> 
>  	names = of_get_property(dp, "partition-names", &plen);
> 
> @@ -86,8 +81,8 @@ static int parse_obsolete_partitions(str
>  	return nr_parts;
>  }
> 
> -static int __devinit process_partitions(struct physmap_flash_info *info,
> -					struct of_device *dev)
> +static int __devinit parse_partitions(struct of_flash *info,
> +				      struct of_device *dev)
>  {
>  	const char *partname;
>  	static const char *part_probe_types[]
> @@ -109,87 +104,68 @@ static int __devinit process_partitions(
>  	for (pp = dp->child; pp; pp = pp->sibling)
>  		nr_parts++;
> 
> -	if (nr_parts) {
> -		info->parts = kzalloc(nr_parts * sizeof(struct mtd_partition),
> -				      GFP_KERNEL);
> -		if (!info->parts) {
> -			printk(KERN_ERR "Can't allocate the flash partition data!\n");
> -			return -ENOMEM;
> -		}
> +	if (nr_parts == 0)
> +		return parse_obsolete_partitions(dev, info, dp);

You reintroduced the optional partitions bug I fixed with:

http://git.infradead.org/?p=users/jwboyer/powerpc.git;a=commit;h=7cafc8f8c89d1f49039b7c345ca832fbd2d1e639

josh



More information about the Linuxppc-dev mailing list