[PATCH 1/1] board: fix compatible property Milk-V Mars CM

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sun Jul 21 23:42:48 CEST 2024


On 7/21/24 23:27, E Shattow wrote:
> P.S. my suggestion below
> 
> On Fri, Jul 19, 2024 at 5:06 PM E Shattow <lucent at gmail.com> wrote:
>>
>> On Fri, Jul 19, 2024 at 4:12 PM Heinrich Schuchardt
>> <heinrich.schuchardt at canonical.com> wrote:
>>>
>>> For the Milk-V Mars CM (lite) we have only been copying sizeof(void *)
>>> bytes to the compatible property instead of the whole string list.
>>
>> This const char array must be so that we may get an accurate data
>> length with sizeof() but it highlights there are helper functions for
>> get of fdt stringlist and not for set of fdt stringlist.
>>
>>>
>>> Fixes: de3229599d4f ("board: add support for Milk-V Mars CM")
>>> Reported-by: E Shattow <lucent at gmail.com>
>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>>> ---
>>>   board/starfive/visionfive2/spl.c | 15 ++++++++++++---
>>>   1 file changed, 12 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c
>>> index b794b73b6bd..f55c6b5d34c 100644
>>> --- a/board/starfive/visionfive2/spl.c
>>> +++ b/board/starfive/visionfive2/spl.c
>>> @@ -170,23 +170,32 @@ void spl_fdt_fixup_mars_cm(void *fdt)
>>>   {
>>>          const char *compat;
>>>          const char *model;
>>> +       int compat_size;
>>>
>>>          spl_fdt_fixup_mars(fdt);
>>>
>>>          if (!get_mmc_size_from_eeprom()) {
>>>                  int offset;
>>> +               static const char
>>> +               compat_cm_lite[] = "milkv,mars-cm-lite\0starfive,jh7110";
>>>
>>>                  model = "Milk-V Mars CM Lite";
>>> -               compat = "milkv,mars-cm-lite\0starfive,jh7110";
>>> +               compat = compat_cm_lite;
>>> +               compat_size = sizeof(compat_cm_lite);
>>>
>>>                  offset = fdt_path_offset(fdt, "/soc/pinctrl/mmc0-pins/mmc0-pins-rest");
>>>                  /* GPIOMUX(22, GPOUT_SYS_SDIO0_RST, GPOEN_ENABLE, GPI_NONE) */
>>>                  fdt_setprop_u32(fdt, offset, "pinmux", 0xff130016);
>>>          } else {
>>> +               static const char
>>> +               compat_cm[] = "milkv,mars-cm\0starfive,jh7110";
>>> +
>>>                  model = "Milk-V Mars CM";
>>> -               compat = "milkv,mars-cm\0starfive,jh7110";
>>> +               compat = compat_cm;
>>> +               compat_size = sizeof(compat_cm);
>>>          }
>>> -       fdt_setprop(fdt, fdt_path_offset(fdt, "/"), "compatible", compat, sizeof(compat));
>>> +       fdt_setprop(fdt, fdt_path_offset(fdt, "/"),
>>> +                   "compatible", compat, compat_size);
>>>          fdt_setprop_string(fdt, fdt_path_offset(fdt, "/"), "model", model);
>>>   }
>>>
>>> --
>>> 2.45.2
>>>
>>
>> -E
> 
> What about something like as follows?
> 
>   void spl_fdt_fixup_mars(void *fdt)
>   {
> -       static const char compat[] = "milkv,mars\0starfive,jh7110";
>          u32 phandle;
>          u8 i;
>          int offset;
>          int ret;
> 
> -       fdt_setprop(fdt, fdt_path_offset(fdt, "/"), "compatible",
> compat, sizeof(compat));
> -       fdt_setprop_string(fdt, fdt_path_offset(fdt, "/"), "model",
> -                          "Milk-V Mars");
> +       offset = fdt_path_offset(fdt, "/");
> +       fdt_setprop_string(fdt,    offset, "compatible", "milkv,mars");
> +       fdt_appendprop_string(fdt, offset, "compatible", "starfive,jh7110");
> +       fdt_setprop_string(fdt,    offset, "model",      "Milk-V Mars");
> 
>          /* gmac0 */
>          offset = fdt_path_offset(fdt, "/soc/clock-controller at 17000000");
> @@ -164,30 +226,31 @@ void spl_fdt_fixup_mars(void *fdt)
>                                  break;
>                  }
>          }
>   }
> 
>   void spl_fdt_fixup_mars_cm(void *fdt)
>   {
> -       const char *compat;
> -       const char *model;
> +       int offset;
> 
>          spl_fdt_fixup_mars(fdt);
> 
>          if (!get_mmc_size_from_eeprom()) {
> -               int offset;
> -
> -               model = "Milk-V Mars CM Lite";
> -               compat = "milkv,mars-cm-lite\0starfive,jh7110";
> +               offset = fdt_path_offset(fdt, "/");
> +               fdt_setprop_string(fdt, offset, "compatible",
> "milkv,mars-cm-lite");
> +               fdt_appendprop_string(fdt, offset, "compatible",
> "starfive,jh7110");
> +               fdt_setprop_string(fdt, offset, "model", "Milk-V Mars CM Lite");
> 
>                  offset = fdt_path_offset(fdt,
> "/soc/pinctrl/mmc0-pins/mmc0-pins-rest");
>                  /* GPIOMUX(22, GPOUT_SYS_SDIO0_RST, GPOEN_ENABLE, GPI_NONE) */
>                  fdt_setprop_u32(fdt, offset, "pinmux", 0xff130016);
>          } else {
> -               model = "Milk-V Mars CM";
> -               compat = "milkv,mars-cm\0starfive,jh7110";
> +               offset = fdt_path_offset(fdt, "/");
> +               fdt_setprop_string(fdt, offset, "compatible", "milkv,mars-cm");
> +               fdt_appendprop_string(fdt, offset, "compatible",
> "starfive,jh7110");
> +               fdt_setprop_string(fdt, offset, "model", "Milk-V Mars CM");
>          }
> -       fdt_setprop(fdt, fdt_path_offset(fdt, "/"), "compatible",
> compat, sizeof(compat));
> -       fdt_setprop_string(fdt, fdt_path_offset(fdt, "/"), "model", model);
>   }
> 
>   void spl_fdt_fixup_version_a(void *fdt)
> @@ -235,6 +298,7 @@ void spl_fdt_fixup_version_a(void *fdt)
>                                  break;
>                  }
>          }
> +
>   }
> 
> 
> And similar changes to the other "string1\0string2" settings in the
> same source file.
> 
> -E

You did not mention why you would prefer three function calls (including 
strlen()) instead of one.

Your code should work too but results in a larger code size.

Probably the shortest code would use a common function with parameters 
'model' and 'compatible_1st' for each of the boards and then use 
fdt_appendprop_string() to append the common 2nd compatible string.

Best regards

Heinrich


More information about the U-Boot mailing list