[U-Boot] [PATCH v6 28/31] mtd: mtdpart: implement proper partition handling
    Boris Brezillon 
    boris.brezillon at bootlin.com
       
    Thu Aug 16 16:19:48 UTC 2018
    
    
  
+Rafal
On Thu, 16 Aug 2018 17:30:26 +0200
Miquel Raynal <miquel.raynal at bootlin.com> wrote:
> Instead of collecting partitions in a flat list, create a hierarchy
> within the mtd_info structure: use a partitions list to keep track of
> the partitions of an MTD device (which might be itself a partition of
> another MTD device), a pointer to the parent device (NULL when the MTD
> device is the root one, not a partition).
> 
> By also saving directly in mtd_info the offset of the partition, we
> can get rid of the mtd_part structure.
That's also something I'd like to have in Linux ;-). But you'll
probably have to sync with Rafal before porting that to Linux.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> ---
[...]
> diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
> index 755c785416..3902c9ec08 100644
> --- a/include/linux/mtd/mtd.h
> +++ b/include/linux/mtd/mtd.h
> @@ -307,6 +307,15 @@ struct mtd_info {
>  	struct udevice *dev;
>  #endif
>  	int usecount;
> +
> +	/* MTD devices do not have any parent. MTD partitions do. */
> +	struct mtd_info *parent;
Add a blank line after each declaration.
> +	/* Offset of the partition relatively to the parent offset */
	Say that it must be 0 for real MTD devices (those that are not
	partitions).
> +	u64 offset;
> +	/* List node for this MTD device */
	/*
	 * List node used to add an MTD partition to the parent
	 * partition list.
	 */
> +	struct list_head node;
> +	/* List of this MTD devices partitions (if any) */
	/*
	 * List of partitions attached to this MTD device (the parent
	 * MTD device can itself be a partition).
	 */
> +	struct list_head partitions;
>  };
>  
>  #if IS_ENABLED(CONFIG_DM)
> @@ -334,6 +343,16 @@ static inline const struct device_node *mtd_get_of_node(struct mtd_info *mtd)
>  }
>  #endif
>  
> +static inline bool mtd_is_partition(const struct mtd_info *mtd)
> +{
> +	return mtd->parent;
> +}
> +
> +static inline struct mtd_info *mtd_part_node_to_info(struct list_head *n)
> +{
> +	return container_of(n, struct mtd_info, node);
> +}
Do you really need that one? Don't we have a list_for_each_entry() in
uboot?
    
    
More information about the U-Boot
mailing list