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

E Shattow lucent at gmail.com
Sun Jul 21 23:27:08 CEST 2024


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


More information about the U-Boot mailing list