All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash()
@ 2023-08-31  7:04 Michal Simek
  2023-08-31  7:04 ` [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT Michal Simek
  2023-09-07 11:24 ` [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek
  0 siblings, 2 replies; 4+ messages in thread
From: Michal Simek @ 2023-08-31  7:04 UTC (permalink / raw)
  To: u-boot, git
  Cc: Simon Glass, Abdellatif El Khlifi, Dzmitry Sankouski,
	Ilias Apalodimas, Nikhil M Jain

ofnode_read_bootscript_flash() reads bootscript address from
/options/u-boot DT node. bootscr-flash-offset and bootscr-flash-size
properties are read and values are filled. When bootscr-flash-size is not
defined, bootscr-flash-offset property is unusable that's why cleaned.
Both of these properties should be defined to function properly.

Also add test to cover this new function.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Michal Simek <michal.simek@amd.com>
---

Changes in v2:
- Add missing static inline for !DM case (found by CI loop)

 arch/sandbox/dts/test.dts |  2 ++
 drivers/core/ofnode.c     | 34 ++++++++++++++++++++++++++++++++++
 include/dm/ofnode.h       | 27 +++++++++++++++++++++++++++
 test/dm/ofnode.c          |  9 +++++++--
 4 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 84879cc31ac0..cedb66af09e7 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -83,6 +83,8 @@
 		u-boot {
 			compatible = "u-boot,config";
 			bootscr-ram-offset = /bits/ 64 <0x12345678>;
+			bootscr-flash-offset = /bits/ 64 <0>;
+			bootscr-flash-size = /bits/ 64 <0x2000>;
 		};
 	};
 
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index d94f0300c30a..023aad06ddc3 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -1588,6 +1588,40 @@ int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset)
 	return 0;
 }
 
+int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
+				 u64 *bootscr_flash_size)
+{
+	int ret;
+	ofnode uboot;
+
+	*bootscr_flash_offset = 0;
+	*bootscr_flash_size = 0;
+
+	uboot = ofnode_path("/options/u-boot");
+	if (!ofnode_valid(uboot)) {
+		printf("%s: Missing /u-boot node\n", __func__);
+		return -EINVAL;
+	}
+
+	ret = ofnode_read_u64(uboot, "bootscr-flash-offset",
+			      bootscr_flash_offset);
+	if (ret)
+		return -EINVAL;
+
+	ret = ofnode_read_u64(uboot, "bootscr-flash-size",
+			      bootscr_flash_size);
+	if (ret)
+		return -EINVAL;
+
+	if (!bootscr_flash_size) {
+		debug("bootscr-flash-size is zero. Ignoring properties!\n");
+		*bootscr_flash_offset = 0;
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 ofnode ofnode_get_phy_node(ofnode node)
 {
 	/* DT node properties that reference a PHY node */
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index c1afa69e1c56..6f8dc4fb4551 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -1521,6 +1521,27 @@ const char *ofnode_conf_read_str(const char *prop_name);
  */
 int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset);
 
+/**
+ * ofnode_read_bootscript_flash() - Read bootscr-flash-offset/size
+ *
+ * @bootscr_flash_offset: pointer to 64bit offset where bootscr-flash-offset
+ * property value is stored
+ * @bootscr_flash_size: pointer to 64bit size where bootscr-flash-size property
+ * value is stored
+ *
+ * This reads a bootscr-flash-offset and bootscr-flash-size properties from
+ * the /options/u-boot/ node of the devicetree. bootscr-flash-offset holds
+ * the offset of the boot script file from start of flash. bootscr-flash-size
+ * holds the boot script size in flash. When bootscr-flash-size is not defined,
+ * bootscr-flash-offset property is cleaned.
+ *
+ * This only works with the control FDT.
+ *
+ * Return: 0 if OK, -EINVAL if property is not found or incorrect.
+ */
+int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
+				 u64 *bootscr_flash_size);
+
 #else /* CONFIG_DM */
 static inline bool ofnode_conf_read_bool(const char *prop_name)
 {
@@ -1542,6 +1563,12 @@ static inline int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *boot
 	return -EINVAL;
 }
 
+static inline int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
+					       u64 *bootscr_flash_size)
+{
+	return -EINVAL;
+}
+
 #endif /* CONFIG_DM */
 
 /**
diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
index a4e04f23784f..d84b738ed7c4 100644
--- a/test/dm/ofnode.c
+++ b/test/dm/ofnode.c
@@ -585,14 +585,19 @@ DM_TEST(dm_test_ofnode_conf, 0);
 
 static int dm_test_ofnode_options(struct unit_test_state *uts)
 {
-	u64 bootscr_address;
-	u64 bootscr_offset;
+	u64 bootscr_address, bootscr_offset;
+	u64 bootscr_flash_offset, bootscr_flash_size;
 
 	ut_assertok(ofnode_read_bootscript_address(&bootscr_address,
 						   &bootscr_offset));
 	ut_asserteq_64(0, bootscr_address);
 	ut_asserteq_64(0x12345678, bootscr_offset);
 
+	ut_assertok(ofnode_read_bootscript_flash(&bootscr_flash_offset,
+						 &bootscr_flash_size));
+	ut_asserteq_64(0, bootscr_flash_offset);
+	ut_asserteq_64(0x2000, bootscr_flash_size);
+
 	return 0;
 }
 DM_TEST(dm_test_ofnode_options, 0);
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT
  2023-08-31  7:04 [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek
@ 2023-08-31  7:04 ` Michal Simek
  2023-08-31 19:02   ` Simon Glass
  2023-09-07 11:24 ` [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek
  1 sibling, 1 reply; 4+ messages in thread
From: Michal Simek @ 2023-08-31  7:04 UTC (permalink / raw)
  To: u-boot, git

Location of bootscript in flash can be specified via /options/u-boot DT
node by using bootscr-flash-offset and bootscr-flash-size properties.
Values should be saved to script_offset_f and script_size_f variables.
Variables are described in doc/develop/bootstd.rst as:
script_offset_f
    SPI flash offset from which to load the U-Boot script, e.g. 0xffe000

script_size_f
    Size of the script to load, e.g. 0x2000

Both of them are used by sf_get_bootflow() in drivers/mtd/spi/sf_bootdev.c
to identify bootscript location inside flash.

Signed-off-by: Michal Simek <michal.simek@amd.com>
---

Changes in v2:
- Change message from printf to debug not to disturb current users

 board/xilinx/common/board.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
index b3fb6acc25a3..126f0d81a9ed 100644
--- a/board/xilinx/common/board.c
+++ b/board/xilinx/common/board.c
@@ -411,6 +411,7 @@ int board_late_init_xilinx(void)
 	int i, id, macid = 0;
 	struct xilinx_board_description *desc;
 	phys_size_t bootm_size = gd->ram_top - gd->ram_base;
+	u64 bootscr_flash_offset, bootscr_flash_size;
 
 	if (!IS_ENABLED(CONFIG_MICROBLAZE)) {
 		ulong scriptaddr;
@@ -435,11 +436,19 @@ int board_late_init_xilinx(void)
 		}
 	}
 
+	if (!ofnode_read_bootscript_flash(&bootscr_flash_offset,
+					  &bootscr_flash_size)) {
+		ret |= env_set_hex("script_offset_f", bootscr_flash_offset);
+		ret |= env_set_hex("script_size_f", bootscr_flash_size);
+	} else {
+		debug("!!! Please define bootscr-flash-offset via DT !!!\n");
+		ret |= env_set_hex("script_offset_f",
+				   CONFIG_BOOT_SCRIPT_OFFSET);
+	}
+
 	if (IS_ENABLED(CONFIG_ARCH_ZYNQ) || IS_ENABLED(CONFIG_MICROBLAZE))
 		bootm_size = min(bootm_size, (phys_size_t)(SZ_512M + SZ_256M));
 
-	ret |= env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
-
 	ret |= env_set_addr("bootm_low", (void *)gd->ram_base);
 	ret |= env_set_addr("bootm_size", (void *)bootm_size);
 
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT
  2023-08-31  7:04 ` [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT Michal Simek
@ 2023-08-31 19:02   ` Simon Glass
  0 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2023-08-31 19:02 UTC (permalink / raw)
  To: Michal Simek; +Cc: u-boot, git

On Thu, 31 Aug 2023 at 01:04, Michal Simek <michal.simek@amd.com> wrote:
>
> Location of bootscript in flash can be specified via /options/u-boot DT
> node by using bootscr-flash-offset and bootscr-flash-size properties.
> Values should be saved to script_offset_f and script_size_f variables.
> Variables are described in doc/develop/bootstd.rst as:
> script_offset_f
>     SPI flash offset from which to load the U-Boot script, e.g. 0xffe000
>
> script_size_f
>     Size of the script to load, e.g. 0x2000
>
> Both of them are used by sf_get_bootflow() in drivers/mtd/spi/sf_bootdev.c
> to identify bootscript location inside flash.
>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> ---
>
> Changes in v2:
> - Change message from printf to debug not to disturb current users
>
>  board/xilinx/common/board.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>


>
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index b3fb6acc25a3..126f0d81a9ed 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -411,6 +411,7 @@ int board_late_init_xilinx(void)
>         int i, id, macid = 0;
>         struct xilinx_board_description *desc;
>         phys_size_t bootm_size = gd->ram_top - gd->ram_base;
> +       u64 bootscr_flash_offset, bootscr_flash_size;
>
>         if (!IS_ENABLED(CONFIG_MICROBLAZE)) {
>                 ulong scriptaddr;
> @@ -435,11 +436,19 @@ int board_late_init_xilinx(void)
>                 }
>         }
>
> +       if (!ofnode_read_bootscript_flash(&bootscr_flash_offset,
> +                                         &bootscr_flash_size)) {
> +               ret |= env_set_hex("script_offset_f", bootscr_flash_offset);
> +               ret |= env_set_hex("script_size_f", bootscr_flash_size);
> +       } else {
> +               debug("!!! Please define bootscr-flash-offset via DT !!!\n");
> +               ret |= env_set_hex("script_offset_f",
> +                                  CONFIG_BOOT_SCRIPT_OFFSET);
> +       }
> +
>         if (IS_ENABLED(CONFIG_ARCH_ZYNQ) || IS_ENABLED(CONFIG_MICROBLAZE))
>                 bootm_size = min(bootm_size, (phys_size_t)(SZ_512M + SZ_256M));
>
> -       ret |= env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
> -
>         ret |= env_set_addr("bootm_low", (void *)gd->ram_base);
>         ret |= env_set_addr("bootm_size", (void *)bootm_size);
>
> --
> 2.36.1
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash()
  2023-08-31  7:04 [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek
  2023-08-31  7:04 ` [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT Michal Simek
@ 2023-09-07 11:24 ` Michal Simek
  1 sibling, 0 replies; 4+ messages in thread
From: Michal Simek @ 2023-09-07 11:24 UTC (permalink / raw)
  To: u-boot, git
  Cc: Simon Glass, Abdellatif El Khlifi, Dzmitry Sankouski,
	Ilias Apalodimas, Nikhil M Jain



On 8/31/23 09:04, Michal Simek wrote:
> ofnode_read_bootscript_flash() reads bootscript address from
> /options/u-boot DT node. bootscr-flash-offset and bootscr-flash-size
> properties are read and values are filled. When bootscr-flash-size is not
> defined, bootscr-flash-offset property is unusable that's why cleaned.
> Both of these properties should be defined to function properly.
> 
> Also add test to cover this new function.
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> ---
> 
> Changes in v2:
> - Add missing static inline for !DM case (found by CI loop)
> 
>   arch/sandbox/dts/test.dts |  2 ++
>   drivers/core/ofnode.c     | 34 ++++++++++++++++++++++++++++++++++
>   include/dm/ofnode.h       | 27 +++++++++++++++++++++++++++
>   test/dm/ofnode.c          |  9 +++++++--
>   4 files changed, 70 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index 84879cc31ac0..cedb66af09e7 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -83,6 +83,8 @@
>   		u-boot {
>   			compatible = "u-boot,config";
>   			bootscr-ram-offset = /bits/ 64 <0x12345678>;
> +			bootscr-flash-offset = /bits/ 64 <0>;
> +			bootscr-flash-size = /bits/ 64 <0x2000>;
>   		};
>   	};
>   
> diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
> index d94f0300c30a..023aad06ddc3 100644
> --- a/drivers/core/ofnode.c
> +++ b/drivers/core/ofnode.c
> @@ -1588,6 +1588,40 @@ int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset)
>   	return 0;
>   }
>   
> +int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
> +				 u64 *bootscr_flash_size)
> +{
> +	int ret;
> +	ofnode uboot;
> +
> +	*bootscr_flash_offset = 0;
> +	*bootscr_flash_size = 0;
> +
> +	uboot = ofnode_path("/options/u-boot");
> +	if (!ofnode_valid(uboot)) {
> +		printf("%s: Missing /u-boot node\n", __func__);
> +		return -EINVAL;
> +	}
> +
> +	ret = ofnode_read_u64(uboot, "bootscr-flash-offset",
> +			      bootscr_flash_offset);
> +	if (ret)
> +		return -EINVAL;
> +
> +	ret = ofnode_read_u64(uboot, "bootscr-flash-size",
> +			      bootscr_flash_size);
> +	if (ret)
> +		return -EINVAL;
> +
> +	if (!bootscr_flash_size) {
> +		debug("bootscr-flash-size is zero. Ignoring properties!\n");
> +		*bootscr_flash_offset = 0;
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
>   ofnode ofnode_get_phy_node(ofnode node)
>   {
>   	/* DT node properties that reference a PHY node */
> diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
> index c1afa69e1c56..6f8dc4fb4551 100644
> --- a/include/dm/ofnode.h
> +++ b/include/dm/ofnode.h
> @@ -1521,6 +1521,27 @@ const char *ofnode_conf_read_str(const char *prop_name);
>    */
>   int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset);
>   
> +/**
> + * ofnode_read_bootscript_flash() - Read bootscr-flash-offset/size
> + *
> + * @bootscr_flash_offset: pointer to 64bit offset where bootscr-flash-offset
> + * property value is stored
> + * @bootscr_flash_size: pointer to 64bit size where bootscr-flash-size property
> + * value is stored
> + *
> + * This reads a bootscr-flash-offset and bootscr-flash-size properties from
> + * the /options/u-boot/ node of the devicetree. bootscr-flash-offset holds
> + * the offset of the boot script file from start of flash. bootscr-flash-size
> + * holds the boot script size in flash. When bootscr-flash-size is not defined,
> + * bootscr-flash-offset property is cleaned.
> + *
> + * This only works with the control FDT.
> + *
> + * Return: 0 if OK, -EINVAL if property is not found or incorrect.
> + */
> +int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
> +				 u64 *bootscr_flash_size);
> +
>   #else /* CONFIG_DM */
>   static inline bool ofnode_conf_read_bool(const char *prop_name)
>   {
> @@ -1542,6 +1563,12 @@ static inline int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *boot
>   	return -EINVAL;
>   }
>   
> +static inline int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
> +					       u64 *bootscr_flash_size)
> +{
> +	return -EINVAL;
> +}
> +
>   #endif /* CONFIG_DM */
>   
>   /**
> diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
> index a4e04f23784f..d84b738ed7c4 100644
> --- a/test/dm/ofnode.c
> +++ b/test/dm/ofnode.c
> @@ -585,14 +585,19 @@ DM_TEST(dm_test_ofnode_conf, 0);
>   
>   static int dm_test_ofnode_options(struct unit_test_state *uts)
>   {
> -	u64 bootscr_address;
> -	u64 bootscr_offset;
> +	u64 bootscr_address, bootscr_offset;
> +	u64 bootscr_flash_offset, bootscr_flash_size;
>   
>   	ut_assertok(ofnode_read_bootscript_address(&bootscr_address,
>   						   &bootscr_offset));
>   	ut_asserteq_64(0, bootscr_address);
>   	ut_asserteq_64(0x12345678, bootscr_offset);
>   
> +	ut_assertok(ofnode_read_bootscript_flash(&bootscr_flash_offset,
> +						 &bootscr_flash_size));
> +	ut_asserteq_64(0, bootscr_flash_offset);
> +	ut_asserteq_64(0x2000, bootscr_flash_size);
> +
>   	return 0;
>   }
>   DM_TEST(dm_test_ofnode_options, 0);

Applied both.

M

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-07 11:24 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-31  7:04 [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek
2023-08-31  7:04 ` [PATCH v2 2/2] xilinx: board: Add support to pick bootscr flash offset/size from DT Michal Simek
2023-08-31 19:02   ` Simon Glass
2023-09-07 11:24 ` [PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash() Michal Simek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.