On 30.04.24 11:59, E Shattow wrote:
On Tue, Apr 30, 2024 at 12:18 AM Heinrich Schuchardt
<heinrich.schucha...@canonical.com> wrote:

On 30.04.24 00:46, E Shattow wrote:
On Sun, Apr 28, 2024 at 9:13 AM Emil Renner Berthing
<emil.renner.berth...@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().

That's the Mars fixup with a conditional for the s/GPIO62/GPIO22/ of
CM Lite;  which Linux seems not to mind either way so long as this was
done at the U-Boot phase, it is functional for eMMC/SD mmc access with
unmodified visionfive2 1.3b dtb (GPIO62 pinmux) from Linux.

It is not clear to me why in vendor U-Boot this is s/GPIO62/GPIO22/
but in vendor Linux kernel this is s/GPIO62/GPIO24/ ? It seems not
needed (in Linux).

According to the schematics GPIO22 is connected to SD_PWR_ON on the the low speed connector both on the Mars CM and the Mars CM Lite. GPIO62 is connected to SDMMC_RST_N on the eMMC. Both the SD-card and the eMMC are connected to SDI0. This is why only one of them can be usable.

GPIO024 is used for the MIPI camera interface.

I guess unless you reset the SD-card or eMMC GPIO062 and GPI022 are not used and this is why Linux is working in both configurations.




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.

Mars also needs this direct-to-SoC USB support, as its USB ports are a
mix of VL805 and directly via the SoC. This can be the same for Mars
and Mars CM/Lite.

The schematics say:

"One USB Controller only, supports either USB 2.0 or USB 3.0."

This sounds to me like you cannot have both in functional state.

Maybe Minda or Hal know more?

Best regards

Heinrich


See this photo from
https://milkv.io/docs/mars/getting-started/bootloader what highlights
this direct SoC USB port of Milk-V Mars:
https://milkv.io/assets/images/mars-usb-port-a-b48fe1ff1003539d42bf5e1dde1725a3.jpg

The over-current errata
https://doc-en.rvspace.org/VisionFive2/DG_USB/JH7110_SDK/usb_overcurrent_debug.html
suggests "please modify the above settings during the U-Boot phase".

-E


Best regards

Heinrich

Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@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




Reply via email to