From 7194527b6a456abaa24198dc4b6c289905c4cffd Mon Sep 17 00:00:00 2001 From: Sean Anderson Date: Mon, 12 Apr 2021 18:53:05 -0400 Subject: cmd: fs: Use part_get_info_by_dev_and_name_or_num to parse partitions This allows using dev#partlabel syntax. Signed-off-by: Sean Anderson --- include/part.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/part.h b/include/part.h index 7f78271a983..419c8597088 100644 --- a/include/part.h +++ b/include/part.h @@ -230,7 +230,7 @@ int part_get_info_by_name(struct blk_desc *dev_desc, * @param[in] allow_whole_dev true to allow the user to select partition 0 * (which means the whole device), false to require a valid * partition number >= 1 - * @return 0 on success, or a negative on error + * @return the partition number on success, or negative errno on error */ int part_get_info_by_dev_and_name_or_num(const char *dev_iface, const char *dev_part_str, @@ -275,6 +275,16 @@ static inline int blk_get_device_part_str(const char *ifname, struct disk_partition *info, int allow_whole_dev) { *dev_desc = NULL; return -1; } +static inline int +part_get_info_by_dev_and_name_or_num(const char *dev_iface, + const char *dev_part_str, + struct blk_desc **dev_desc, + struct disk_partition *part_info, + int allow_whole_dev) +{ + *dev_desc = NULL; + return -ENOSYS; +} #endif /* -- cgit v1.2.3 From 77b8cfef531f7758f35a8598bd474713cfc2c2ec Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:25 +0100 Subject: lmb: move CONFIG_LMB in Kconfig Migrate CONFIG_LMB in Kconfig. Signed-off-by: Patrick Delaunay --- include/configs/10m50_devboard.h | 5 ----- include/configs/3c120_devboard.h | 5 ----- include/configs/sandbox.h | 2 -- include/configs/x86-common.h | 2 -- include/image.h | 2 +- 5 files changed, 1 insertion(+), 15 deletions(-) (limited to 'include') diff --git a/include/configs/10m50_devboard.h b/include/configs/10m50_devboard.h index 768b4a6dfc3..3ffc744928f 100644 --- a/include/configs/10m50_devboard.h +++ b/include/configs/10m50_devboard.h @@ -34,11 +34,6 @@ */ #define CONFIG_BOOTP_BOOTFILESIZE -/* - * FDT options - */ -#define CONFIG_LMB - /* * MEMORY ORGANIZATION * -Monitor at top of sdram. diff --git a/include/configs/3c120_devboard.h b/include/configs/3c120_devboard.h index 30bbd716b20..3f065ff315c 100644 --- a/include/configs/3c120_devboard.h +++ b/include/configs/3c120_devboard.h @@ -34,11 +34,6 @@ */ #define CONFIG_BOOTP_BOOTFILESIZE -/* - * FDT options - */ -#define CONFIG_LMB - /* * MEMORY ORGANIZATION * -Monitor at top of sdram. diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index 6e79d3f56ee..8eeccdd4264 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -22,8 +22,6 @@ #define CONFIG_SYS_TIMER_RATE 1000000 #endif -#define CONFIG_LMB - #define CONFIG_HOST_MAX_DEVICES 4 /* diff --git a/include/configs/x86-common.h b/include/configs/x86-common.h index 641ed2c5ecd..f186dd6b823 100644 --- a/include/configs/x86-common.h +++ b/include/configs/x86-common.h @@ -16,8 +16,6 @@ */ #define CONFIG_PHYSMEM -#define CONFIG_LMB - #define CONFIG_SYS_BOOTM_LEN (16 << 20) /* SATA AHCI storage */ diff --git a/include/image.h b/include/image.h index 3ff3c035a78..459685d4d43 100644 --- a/include/image.h +++ b/include/image.h @@ -434,7 +434,7 @@ typedef struct bootm_headers { #define BOOTM_STATE_OS_GO (0x00000400) int state; -#ifdef CONFIG_LMB +#if defined(CONFIG_LMB) && !defined(USE_HOSTCC) struct lmb lmb; /* for memory mgmt */ #endif } bootm_headers_t; -- cgit v1.2.3 From 8f167da9c572845782000075e092e63a8273032d Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:26 +0100 Subject: lmb: remove lmb_region.size Remove the unused field size of struct lmb_region as it is initialized to 0 and never used after in lmb library. See Linux kernel commit 4734b594c6ca ("memblock: Remove memblock_type.size and add memblock.memory_size instead") Signed-off-by: Patrick Delaunay --- include/lmb.h | 1 - 1 file changed, 1 deletion(-) (limited to 'include') diff --git a/include/lmb.h b/include/lmb.h index e9f19b16ea0..a3247544c1e 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -21,7 +21,6 @@ struct lmb_property { struct lmb_region { unsigned long cnt; - phys_size_t size; struct lmb_property region[MAX_LMB_REGIONS+1]; }; -- cgit v1.2.3 From 00fd8dad4d2ed738d11f29d992dc106bbdf4d68f Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:27 +0100 Subject: lmb: add a max parameter in the struct lmb_region Add a max parameter in lmb_region struct to handle test in lmb_add_region without using the MAX_LMB_REGIONS define. This patch allows to modify these size independently for memory of reserved regions in the next patches. Signed-off-by: Patrick Delaunay --- include/lmb.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/lmb.h b/include/lmb.h index a3247544c1e..f3397c7f730 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -21,6 +21,7 @@ struct lmb_property { struct lmb_region { unsigned long cnt; + unsigned long max; struct lmb_property region[MAX_LMB_REGIONS+1]; }; -- cgit v1.2.3 From 4fa0150d6c9c252af6887c55cbacd6734a40e9ab Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:28 +0100 Subject: lmb: move MAX_LMB_REGIONS value in Kconfig Move MAX_LMB_REGIONS value in Kconfig, the max number of the regions in lmb library. Signed-off-by: Patrick Delaunay --- include/lmb.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'include') diff --git a/include/lmb.h b/include/lmb.h index f3397c7f730..d3adf8ef696 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -12,8 +12,6 @@ * Copyright (C) 2001 Peter Bergner, IBM Corp. */ -#define MAX_LMB_REGIONS 8 - struct lmb_property { phys_addr_t base; phys_size_t size; @@ -22,7 +20,7 @@ struct lmb_property { struct lmb_region { unsigned long cnt; unsigned long max; - struct lmb_property region[MAX_LMB_REGIONS+1]; + struct lmb_property region[CONFIG_LMB_MAX_REGIONS + 1]; }; struct lmb { -- cgit v1.2.3 From cb1e619824f0c942ccd9b230b5f41caaf7cd91b4 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:29 +0100 Subject: lmb: correct size of the regions array As in lmb_region, cnt < max and in the lmb library use region[i] only with i in 0...cnt, this region array size can be reduced by 1 element without overflow. This patch allows to reduce the struct lmb size. Signed-off-by: Patrick Delaunay --- include/lmb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/lmb.h b/include/lmb.h index d3adf8ef696..898ce15d076 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -20,7 +20,7 @@ struct lmb_property { struct lmb_region { unsigned long cnt; unsigned long max; - struct lmb_property region[CONFIG_LMB_MAX_REGIONS + 1]; + struct lmb_property region[CONFIG_LMB_MAX_REGIONS]; }; struct lmb { -- cgit v1.2.3 From 6d66502bc74182105c7fc77efe7bf8d04ac4e345 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Wed, 10 Mar 2021 10:16:31 +0100 Subject: lmb: Add 2 config to define the max number of regions Add 2 configs CONFIG_LMB_MEMORY_REGIONS and CONFIG_LMB_RESERVED_REGIONS to change independently the max number of the regions in lmb library. When CONFIG_LMB_USE_MAX_REGIONS=y, move the lmb property arrays to struct lmb and manage the array size with the element 'max' of struct lmb_region; their are still allocated in stack. When CONFIG_LMB_USE_MAX_REGIONS=n, keep the current location in struct lmb_region to allow compiler optimization. Increase CONFIG_LMB_RESERVED_REGIONS is useful to avoid lmb errors in bootm when the number of reserved regions (not adjacent) is reached: + 1 region for relocated U-Boot + 1 region for initrd + 1 region for relocated linux device tree + reserved memory regions present in Linux device tree. The current limit of 8 regions is reached with only 5 reserved regions in DT. see Linux kernel commit bf23c51f1f49 ("memblock: Move memblock arrays to static storage in memblock.c and make their size a variable") Signed-off-by: Patrick Delaunay --- include/lmb.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'include') diff --git a/include/lmb.h b/include/lmb.h index 898ce15d076..541e17093c6 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -12,20 +12,54 @@ * Copyright (C) 2001 Peter Bergner, IBM Corp. */ +/** + * struct lmb_property - Description of one region. + * + * @base: Base address of the region. + * @size: Size of the region + */ struct lmb_property { phys_addr_t base; phys_size_t size; }; +/** + * struct lmb_region - Description of a set of region. + * + * @cnt: Number of regions. + * @max: Size of the region array, max value of cnt. + * @region: Array of the region properties + */ struct lmb_region { unsigned long cnt; unsigned long max; +#if IS_ENABLED(CONFIG_LMB_USE_MAX_REGIONS) struct lmb_property region[CONFIG_LMB_MAX_REGIONS]; +#else + struct lmb_property *region; +#endif }; +/** + * struct lmb - Logical memory block handle. + * + * Clients provide storage for Logical memory block (lmb) handles. + * The content of the structure is managed by the lmb library. + * A lmb struct is initialized by lmb_init() functions. + * The lmb struct is passed to all other lmb APIs. + * + * @memory: Description of memory regions. + * @reserved: Description of reserved regions. + * @memory_regions: Array of the memory regions (statically allocated) + * @reserved_regions: Array of the reserved regions (statically allocated) + */ struct lmb { struct lmb_region memory; struct lmb_region reserved; +#if !IS_ENABLED(CONFIG_LMB_USE_MAX_REGIONS) + struct lmb_property memory_regions[CONFIG_LMB_MEMORY_REGIONS]; + struct lmb_property reserved_regions[CONFIG_LMB_RESERVED_REGIONS]; +#endif }; extern void lmb_init(struct lmb *lmb); -- cgit v1.2.3