summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamin Guo <samin.guo@starfivetech.com>2023-07-19 06:06:27 +0300
committerSamin Guo <samin.guo@starfivetech.com>2023-07-19 13:13:48 +0300
commit1539d6e71eed3c2ad420ae4344ae7d37226b3ec5 (patch)
tree0de222865e60d7d57da582581856a47b53cb290d
parentee703a5e8cfb6a98090c6f3ecb1dba4670101213 (diff)
downloadu-boot-1539d6e71eed3c2ad420ae4344ae7d37226b3ec5.tar.xz
board: starfive: evb: Add dynamic CMA adjustment scheme
Synchronize from vf2 to the dynamic CMA scheme Signed-off-by: Samin Guo <samin.guo@starfivetech.com>
-rw-r--r--board/starfive/evb/starfive_evb.c8
-rw-r--r--include/configs/starfive-evb.h38
2 files changed, 46 insertions, 0 deletions
diff --git a/board/starfive/evb/starfive_evb.c b/board/starfive/evb/starfive_evb.c
index 493f4394ca..3fdbb29b6c 100644
--- a/board/starfive/evb/starfive_evb.c
+++ b/board/starfive/evb/starfive_evb.c
@@ -289,6 +289,14 @@ int board_late_init(void)
struct udevice *dev;
int ret;
+ /*
+ * save the memory info by environment variable in u-boot,
+ * It will used to update the memory configuration in dts,
+ * which passed to kernel lately.
+ */
+ env_set_hex("memory_addr", gd->ram_base);
+ env_set_hex("memory_size", gd->ram_size);
+
ret = uclass_get_device(UCLASS_VIDEO, 0, &dev);
if (ret)
return ret;
diff --git a/include/configs/starfive-evb.h b/include/configs/starfive-evb.h
index c183e0599a..70eafe5bf9 100644
--- a/include/configs/starfive-evb.h
+++ b/include/configs/starfive-evb.h
@@ -156,6 +156,41 @@
"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_inverted_100 <0x1>;" \
"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_inverted_1000 <0x1>;\0"
+#define CMA_SIZE_SET \
+ "cma_start=70000000\0" \
+ "cma_1g=b000000\0" \
+ "cma_2g=20000000\0" \
+ "cma_4g=40000000\0" \
+ "cma_8g=60000000\0" \
+ "cma_node=/reserved-memory/linux,cma\0" \
+ "cma_ddr1g_set=" \
+ "fdt set ${cma_node} size <0x0 0x${cma_1g}>;" \
+ "fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_1g}>;\0" \
+ "cma_ddr2g_set=" \
+ "fdt set ${cma_node} size <0x0 0x${cma_2g}>;" \
+ "fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_2g}>;\0" \
+ "cma_ddr4g_set=" \
+ "fdt set ${cma_node} size <0x0 0x${cma_4g}>;" \
+ "fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_4g}>;\0" \
+ "cma_ddr8g_set=" \
+ "fdt set ${cma_node} size <0x0 0x${cma_8g}>;" \
+ "fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_8g}>;\0" \
+ "cma_resize=" \
+ "if test ${memory_size} -eq 40000000; then " \
+ "run cma_ddr1g_set;" \
+ "elif test ${memory_size} -eq 80000000; then " \
+ "run cma_ddr2g_set;" \
+ "elif test ${memory_size} -eq 100000000; then " \
+ "run cma_ddr4g_set;" \
+ "elif test ${memory_size} -ge 200000000; then " \
+ "run cma_ddr8g_set;" \
+ "fi; \0 "
+
+#define EVB_MEM_SET \
+ "evb_mem_set=" \
+ "fdt memory ${memory_addr} ${memory_size};" \
+ "run cma_resize; \0"
+
#define CHIPA_SET \
"chipa_set=" \
"if test ${chip_vision} = B; then " \
@@ -166,6 +201,7 @@
"run chipa_set;\0" \
"chipa_set_linux=" \
"fdt addr ${fdt_addr_r};" \
+ "run evb_mem_set;" \
"run chipa_set;\0"
#define PARTS_DEFAULT \
@@ -196,6 +232,8 @@
CPU_SPEED_1250_SET \
CPU_SPEED_1500_SET \
CPU_FREQ_VOL_SET \
+ EVB_MEM_SET \
+ CMA_SIZE_SET \
"type_guid_gpt_loader1=" TYPE_GUID_LOADER1 "\0" \
"type_guid_gpt_loader2=" TYPE_GUID_LOADER2 "\0" \
"type_guid_gpt_system=" TYPE_GUID_SYSTEM "\0" \