diff options
author | Samin Guo <samin.guo@starfivetech.com> | 2023-07-19 06:06:27 +0300 |
---|---|---|
committer | Samin Guo <samin.guo@starfivetech.com> | 2023-07-19 13:13:48 +0300 |
commit | 1539d6e71eed3c2ad420ae4344ae7d37226b3ec5 (patch) | |
tree | 0de222865e60d7d57da582581856a47b53cb290d | |
parent | ee703a5e8cfb6a98090c6f3ecb1dba4670101213 (diff) | |
download | u-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.c | 8 | ||||
-rw-r--r-- | include/configs/starfive-evb.h | 38 |
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" \ |