[PATCH 2/4] board: add support for Milk-V Mars CM

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Tue Apr 30 09:17:57 CEST 2024


On 30.04.24 00:46, E Shattow wrote:
> On Sun, Apr 28, 2024 at 9:13 AM Emil Renner Berthing
> <emil.renner.berthing at canonical.com> wrote:
>>
>> Heinrich Schuchardt wrote:
>>> We already support the VisionFive 2 and the Milk-V Mars board by
>>> patching the VisionFive 2 device tree. With this patch the same
>>> is done for the Milk-V Mars CM.
>>
>> Hi Heinrich.
>>
>> Thanks for the patch. As far as I can tell the Milk-V documentation[1] is
>> pretty consistent in calling the version without eMMC "Milk-V Mars CM Lite"
>> and the version with eMMC just "Milk-V Mars CM". So I'd prefer the model,
>> compatible and filenames suggested below.
>>
>> [1]: https://milkv.io/docs/mars/compute-module/introduction#design-philosophy
>>
> 
> Are there any actual differences that need representation in the dtb
> file for downstream OS different from Milk-V Mars to Milk-V Mars CM
> (or CM Lite)?
> 
> I did find this vendor repo commit "kernel: dts reconfig sdio0 for
> SDCard version"
> https://github.com/milkv-mars/mars-buildroot-sdk/commit/042ea06598995db99ddbbbb252ee439c42b9c1a9
> but it does not seem necessary in mainline Linux, SD Card is working
> without changes.
> 
> It was necessary for U-Boot and the Mars CM Lite with SD Card to apply
> s/GPIO62/GPIO22/ as in the vendor commit "u-boot: configure sdio0 as
> mars-cm sdcard version"
> https://github.com/milkv-mars/mars-buildroot-sdk/commit/880a249518f72ecf1e2947dfeb2c66e5035fce90

This is what is patched in fdt_fixup_marc().

> 
> Then also there is some mention about PMIC and renamed i2c reference,
> already obsolete. That's all, is there more to it? Possibly a dtb for
> Mars is enough to also be used on Mars CM and Mars Lite?

Looking at the schematics the biggest difference between the Mars and 
the Mars CM (Lite) is on the USB side. The Mars board has USB 3.0 via a 
PCIe lane and a VIA VL805/806 while the Mars CM has USB directly via the 
SoC.

To add USB support for the Mars CM we will need an adapted device-tree.

Best regards

Heinrich
> 
>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>>> ---
>>>   board/starfive/visionfive2/spl.c              | 27 ++++++++++++++++++-
>>>   .../visionfive2/starfive_visionfive2.c        | 11 +++++++-
>>>   2 files changed, 36 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c
>>> index 45848db6d8b..bb0f28d7aad 100644
>>> --- a/board/starfive/visionfive2/spl.c
>>> +++ b/board/starfive/visionfive2/spl.c
>>> @@ -129,6 +129,29 @@ void spl_fdt_fixup_mars(void *fdt)
>>>        }
>>>   }
>>>
>>> +void spl_fdt_fixup_marc(void *fdt)
>>> +{
>>> +     const char *compat;
>>> +     const char *model;
>>> +
>>> +     spl_fdt_fixup_mars(fdt);
>>> +
>>> +     if (!get_mmc_size_from_eeprom()) {
>>> +             int offset;
>>> +
>>> +             model = "Milk-V Mars CM SDCard";
>>
>> "Milk-V Mars CM Lite"
>>
>>> +             compat = "milkv,mars-cm-sdcard\0starfive,jh7110";
>>
>> "milkv,mars-cm-lite\0starfive,jh7110"
>>
>>> +
>>> +             offset = fdt_path_offset(fdt, "/soc/pinctrl/mmc0-pins/mmc0-pins-rest");
>>> +             fdt_setprop_u32(fdt, offset, "pinmux", 0xff130016);
>>> +     } else {
>>> +             model = "Milk-V Mars CM eMMC";
>>
>> "Milk-V Mars CM"
>>
>>> +             compat = "milkv,mars-cm-emmc\0starfive,jh7110";
>>
>> "milkv,mars-cm\0starfive,jh7110"
>>
>>> +     }
>>> +     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)
>>>   {
>>>        static const char compat[] = "starfive,visionfive-2-v1.2a\0starfive,jh7110";
>>> @@ -236,7 +259,9 @@ void spl_perform_fixups(struct spl_image_info *spl_image)
>>>                pr_err("Can't read EEPROM\n");
>>>                return;
>>>        }
>>> -     if (!strncmp(product_id, "MARS", 4)) {
>>> +     if (!strncmp(product_id, "MARC", 4)) {
>>> +             spl_fdt_fixup_marc(spl_image->fdt_addr);
>>> +     } else if (!strncmp(product_id, "MARS", 4)) {
>>>                spl_fdt_fixup_mars(spl_image->fdt_addr);
>>>        } else if (!strncmp(product_id, "VF7110", 6)) {
>>>                version = get_pcb_revision_from_eeprom();
>>> diff --git a/board/starfive/visionfive2/starfive_visionfive2.c b/board/starfive/visionfive2/starfive_visionfive2.c
>>> index a86bca533b2..be6ca85b030 100644
>>> --- a/board/starfive/visionfive2/starfive_visionfive2.c
>>> +++ b/board/starfive/visionfive2/starfive_visionfive2.c
>>> @@ -17,6 +17,10 @@
>>>   DECLARE_GLOBAL_DATA_PTR;
>>>   #define JH7110_L2_PREFETCHER_BASE_ADDR               0x2030000
>>>   #define JH7110_L2_PREFETCHER_HART_OFFSET     0x2000
>>> +#define FDTFILE_MILK_V_MARC_SD \
>>> +     "starfive/jh7110-milkv-mars-cm-sdcard.dtb"
>>
>> "starfive/jh7110-milkv-mars-cm-lite.dtb"
>>
>>> +#define FDTFILE_MILK_V_MARC_MMC \
>>> +     "starfive/jh7110-milkv-mars-cm-emmc.dtb"
>>
>> "starfive/jh7110-milkv-mars-cm.dtb"
>>
>>>   #define FDTFILE_MILK_V_MARS \
>>>        "starfive/jh7110-milkv-mars.dtb"
>>>   #define FDTFILE_VISIONFIVE2_1_2A \
>>> @@ -61,7 +65,12 @@ static void set_fdtfile(void)
>>>                log_err("Can't read EEPROM\n");
>>>                return;
>>>        }
>>> -     if (!strncmp(product_id, "MARS", 4)) {
>>> +     if (!strncmp(product_id, "MARC", 4)) {
>>> +             if (get_mmc_size_from_eeprom())
>>> +                     fdtfile = FDTFILE_MILK_V_MARC_MMC;
>>> +             else
>>> +                     fdtfile = FDTFILE_MILK_V_MARC_SD;
>>> +     } else if (!strncmp(product_id, "MARS", 4)) {
>>>                fdtfile = FDTFILE_MILK_V_MARS;
>>>        } else if (!strncmp(product_id, "VF7110", 6)) {
>>>                version = get_pcb_revision_from_eeprom();
>>> --
>>> 2.43.0
>>>
>>>



More information about the U-Boot mailing list