[PATCH 1/1] xilinx: zynq: add FDT_FIXUP_PARTITIONS support

Michal Simek michal.simek at amd.com
Tue Mar 19 07:59:17 CET 2024



On 3/18/24 17:17, James Hilliard wrote:
> On Mon, Mar 18, 2024 at 5:07 AM Michal Simek <michal.simek at amd.com> wrote:
>>
>>
>>
>> On 3/18/24 09:48, James Hilliard wrote:
>>> On Mon, Mar 18, 2024 at 2:26 AM Michal Simek <michal.simek at amd.com> wrote:
>>>>
>>>>
>>>>
>>>> On 3/15/24 20:25, James Hilliard wrote:
>>>>> There are situations where we may want to let U-Boot modify the FDT
>>>>
>>>> please use imperative mood.
>>>>
>>>>> nand partitions for the kernel, such as when supporting multiple
>>>>> sizes of NAND chips.
>>>>>
>>>>> Lets also refactor xilinx common board support to have a
>>>>> ft_common_board_setup which gets called by the ft_board_setup for each
>>>>> specific board so that we can add non-common functionality to each
>>>>> ft_board_setup like FDT_FIXUP_PARTITIONS as needed.
>>>>>
>>>>> This pattern is modeled after the one used by tdx-common.c.
>>>>>
>>>>> Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
>>>>> ---
>>>>>     board/xilinx/common/board.c     |  2 +-
>>>>>     board/xilinx/common/board.h     |  2 ++
>>>>>     board/xilinx/mbv/board.c        |  9 +++++++++
>>>>>     board/xilinx/versal-net/board.c |  7 +++++++
>>>>>     board/xilinx/versal/board.c     |  7 +++++++
>>>>>     board/xilinx/zynq/board.c       | 17 +++++++++++++++++
>>>>>     board/xilinx/zynqmp/zynqmp.c    |  7 +++++++
>>>>>     board/xilinx/zynqmp_r5/board.c  |  8 ++++++++
>>>>>     8 files changed, 58 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
>>>>> index 9641ed307b..629ba2b902 100644
>>>>> --- a/board/xilinx/common/board.c
>>>>> +++ b/board/xilinx/common/board.c
>>>>> @@ -686,7 +686,7 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
>>>>>
>>>>>     #ifdef CONFIG_OF_BOARD_SETUP
>>>>>     #define MAX_RAND_SIZE 8
>>>>> -int ft_board_setup(void *blob, struct bd_info *bd)
>>>>> +int ft_common_board_setup(void *blob, struct bd_info *bd)
>>>>>     {
>>>>>         size_t n = MAX_RAND_SIZE;
>>>>>         struct udevice *dev;
>>>>> diff --git a/board/xilinx/common/board.h b/board/xilinx/common/board.h
>>>>> index 64d657673e..73f576952a 100644
>>>>> --- a/board/xilinx/common/board.h
>>>>> +++ b/board/xilinx/common/board.h
>>>>> @@ -18,4 +18,6 @@ bool board_detection(void);
>>>>>     char *soc_name_decode(void);
>>>>>
>>>>>     bool soc_detection(void);
>>>>> +
>>>>> +int ft_common_board_setup(void *blob, struct bd_info *bd);
>>>>>     #endif /* BOARD_XILINX_COMMON_BOARD_H */
>>>>> diff --git a/board/xilinx/mbv/board.c b/board/xilinx/mbv/board.c
>>>>> index ccf4395d6a..d8af1eaa90 100644
>>>>> --- a/board/xilinx/mbv/board.c
>>>>> +++ b/board/xilinx/mbv/board.c
>>>>> @@ -5,7 +5,16 @@
>>>>>      * Michal Simek <michal.simek at amd.com>
>>>>>      */
>>>>>
>>>>> +#include "../common/board.h"
>>>>> +
>>>>>     int board_init(void)
>>>>>     {
>>>>>         return 0;
>>>>>     }
>>>>> +
>>>>> +#ifdef CONFIG_OF_BOARD_SETUP
>>>>> +int ft_board_setup(void *blob, struct bd_info *bd)
>>>>> +{
>>>>> +     return ft_common_board_setup(blob, bd);
>>>>> +}
>>>>> +#endif
>>>>
>>>> Any reason not to put directly to board/xilinx/common/board.c?
>>>> All xilinx boards are kept in sync from user perspective that's why generic
>>>> pieces should be added to common location.
>>>
>>> I assumed the device tree node "arm,pl353-nand-r2p1" was specific to boards
>>> using xilinx/zynq/board.c since it seemed only those were the only ones to use
>>> that node. Have any idea if that assumption is accurate?
>>
>> Configuration around xilinx boards are quite generic. Normally nand controller
>> is by default connected on Zynq SOC. But because chips are highly configurable
>> you can connect it also from Microblaze or Risc-V but
>>
>> I think you can simply do changes in common location and put there proper ifs
>> and it should be fine.
>> Also keep in mind that you should avoid using #ifdef as much as possible and use
>> if (IS_ENABLED(...)) instead.
> 
> Is there a way to do that with the static const struct node_info nodes[] part?

Just like this:

int ft_board_setup(void *blob, struct bd_info *bd)
{
	static const struct node_info nodes[] = {
		{ "arm,pl353-nand-r2p1", MTD_DEV_TYPE_NAND, },
	};

	if (IS_ENABLED(FDT_FIXUP_PARTITIONS) && IS_ENABLED(NAND_ZYNQ))
		fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));

	return ft_common_board_setup(blob, bd);
}

M


More information about the U-Boot mailing list