summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorSamin Guo <samin.guo@starfivetech.com>2023-07-18 07:29:41 +0300
committerSamin Guo <samin.guo@starfivetech.com>2023-07-19 13:13:22 +0300
commit5ee167786796b88f1d477d1c7e8882780e49cb79 (patch)
treecadc73f07c4ebcf7d255bf7087db1f712b8c834a /board
parent28908c780f6bbd9cd623a0f52544d9278633373e (diff)
downloadu-boot-5ee167786796b88f1d477d1c7e8882780e49cb79.tar.xz
board: starfive: evb: Add resize-ddr function
Add board-level resize-DDR function for evb Signed-off-by: Samin Guo <samin.guo@starfivetech.com>
Diffstat (limited to 'board')
-rw-r--r--board/starfive/evb/starfive_evb.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/board/starfive/evb/starfive_evb.c b/board/starfive/evb/starfive_evb.c
index 6e3fc641ba..493f4394ca 100644
--- a/board/starfive/evb/starfive_evb.c
+++ b/board/starfive/evb/starfive_evb.c
@@ -302,3 +302,50 @@ err:
}
+#ifdef CONFIG_ID_EEPROM
+
+#include <asm/arch/eeprom.h>
+#define STARFIVE_JH7110_EEPROM_DDRINFO_OFFSET 91
+
+static bool check_eeprom_dram_info(ulong size)
+{
+ switch (size) {
+ case 1:
+ case 2:
+ case 4:
+ case 8:
+ case 16:
+ return true;
+ default:
+ return false;
+ }
+}
+
+static int resize_ddr_from_eeprom(void)
+{
+ ulong size;
+ u32 len = 1;
+ u8 data = 0;
+ int ret;
+
+ /* read memory size info */
+ ret = get_data_from_eeprom(STARFIVE_JH7110_EEPROM_DDRINFO_OFFSET, len, &data);
+ if (ret == len) {
+ size = hextoul(&data, NULL);
+ if (check_eeprom_dram_info(size))
+ return size;
+ }
+ return 0;
+}
+#else
+static int resize_ddr_from_eeprom(void)
+{
+ return 0;
+}
+#endif /* CONFIG_ID_EEPROM */
+
+int board_ddr_size(void)
+{
+ return resize_ddr_from_eeprom();
+}
+