]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: starfive: support Pine64 Star64 board
authorH Bell <dmoo_dv@protonmail.com>
Wed, 22 May 2024 19:12:48 +0000 (19:12 +0000)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Thu, 30 May 2024 08:01:00 +0000 (16:01 +0800)
Similar to the Milk-V Mars, The Star64 board contains few differences to the
VisionFive 2 boards, so can be part of the same U-boot build.

Signed-off-by: Henry Bell <dmoo_dv@protonmail.com>
Cc: ycliang@andestech.com
Cc: heinrich.schuchardt@canonical.com
Reviewed-by: E Shattow <lucent@gmail.com>
board/starfive/visionfive2/spl.c
board/starfive/visionfive2/starfive_visionfive2.c

index b555189556a6e2b6b27e192ee00b8731012b16d9..b794b73b6bd7969f5fd0816397c903ced9c31776 100644 (file)
@@ -86,6 +86,43 @@ static const struct starfive_vf2_pro starfive_verb[] = {
                "tx-internal-delay-ps", "0"},
 };
 
+static const struct starfive_vf2_pro star64_pine64[] = {
+       {"/soc/ethernet@16030000", "starfive,tx-use-rgmii-clk", NULL},
+       {"/soc/ethernet@16040000", "starfive,tx-use-rgmii-clk", NULL},
+
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,tx-clk-adj-enabled", NULL},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,tx-clk-10-inverted", NULL},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,tx-clk-100-inverted", NULL},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,tx-clk-1000-inverted", NULL},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,rx-clk-drv-microamp", "2910"},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "motorcomm,rx-data-drv-microamp", "2910"},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "rx-internal-delay-ps", "1900"},
+       {"/soc/ethernet@16030000/mdio/ethernet-phy@0",
+               "tx-internal-delay-ps", "1500"},
+
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "motorcomm,tx-clk-adj-enabled", NULL},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "motorcomm,tx-clk-10-inverted", NULL},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "motorcomm,tx-clk-100-inverted", NULL},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "motorcomm,rx-clk-drv-microamp", "2910"},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "motorcomm,rx-data-drv-microamp", "2910"},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "rx-internal-delay-ps", "0"},
+       {"/soc/ethernet@16040000/mdio/ethernet-phy@1",
+               "tx-internal-delay-ps", "300"},
+};
+
 void spl_fdt_fixup_mars(void *fdt)
 {
        static const char compat[] = "milkv,mars\0starfive,jh7110";
@@ -250,6 +287,56 @@ void spl_fdt_fixup_version_b(void *fdt)
        }
 }
 
+void spl_fdt_fixup_star64(void *fdt)
+{
+       static const char compat[] = "pine64,star64\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",
+                          "Pine64 Star64");
+
+       /* gmac0 */
+       offset = fdt_path_offset(fdt, "/soc/clock-controller@17000000");
+       phandle = fdt_get_phandle(fdt, offset);
+       offset = fdt_path_offset(fdt, "/soc/ethernet@16030000");
+
+       fdt_setprop_u32(fdt, offset, "assigned-clocks", phandle);
+       fdt_appendprop_u32(fdt, offset, "assigned-clocks", JH7110_AONCLK_GMAC0_TX);
+       fdt_setprop_u32(fdt, offset,  "assigned-clock-parents", phandle);
+       fdt_appendprop_u32(fdt, offset,  "assigned-clock-parents",
+                          JH7110_AONCLK_GMAC0_RMII_RTX);
+
+       /* gmac1 */
+       offset = fdt_path_offset(fdt, "/soc/clock-controller@13020000");
+       phandle = fdt_get_phandle(fdt, offset);
+       offset = fdt_path_offset(fdt, "/soc/ethernet@16040000");
+
+       fdt_setprop_u32(fdt, offset, "assigned-clocks", phandle);
+       fdt_appendprop_u32(fdt, offset, "assigned-clocks", JH7110_SYSCLK_GMAC1_TX);
+       fdt_setprop_u32(fdt, offset,  "assigned-clock-parents", phandle);
+       fdt_appendprop_u32(fdt, offset,  "assigned-clock-parents",
+                          JH7110_SYSCLK_GMAC1_RMII_RTX);
+
+       for (i = 0; i < ARRAY_SIZE(star64_pine64); i++) {
+               offset = fdt_path_offset(fdt, star64_pine64[i].path);
+
+               if (star64_pine64[i].value)
+                       ret = fdt_setprop_u32(fdt, offset,  star64_pine64[i].name,
+                                             dectoul(star64_pine64[i].value, NULL));
+               else
+                       ret = fdt_setprop_empty(fdt, offset, star64_pine64[i].name);
+
+               if (ret) {
+                       pr_err("%s set prop %s fail.\n", __func__, star64_pine64[i].name);
+                               break;
+               }
+       }
+}
+
 void spl_perform_fixups(struct spl_image_info *spl_image)
 {
        u8 version;
@@ -278,6 +365,8 @@ void spl_perform_fixups(struct spl_image_info *spl_image)
                        spl_fdt_fixup_version_b(spl_image->fdt_addr);
                break;
                };
+       } else if (!strncmp(product_id, "STAR64", 6)) {
+               spl_fdt_fixup_star64(spl_image->fdt_addr);
        } else {
                pr_err("Unknown product %s\n", product_id);
        };
index 6be534896260d318219648b12e64b01fda0cb474..f6114602f88008ba9519d9413ee7f04a831df88f 100644 (file)
@@ -27,6 +27,8 @@ DECLARE_GLOBAL_DATA_PTR;
        "starfive/jh7110-starfive-visionfive-2-v1.2a.dtb"
 #define FDTFILE_VISIONFIVE2_1_3B \
        "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"
+#define FDTFILE_PINE64_STAR64 \
+       "starfive/jh7110-pine64-star64.dtb"
 
 /* enable U74-mc hart1~hart4 prefetcher */
 static void enable_prefetcher(void)
@@ -87,6 +89,8 @@ static void set_fdtfile(void)
                        fdtfile = FDTFILE_VISIONFIVE2_1_3B;
                        break;
                }
+       } else if (!strncmp(product_id, "STAR64", 6)) {
+               fdtfile = FDTFILE_PINE64_STAR64;
        } else {
                log_err("Unknown product\n");
                return;