summaryrefslogtreecommitdiff
path: root/drivers/ram/starfive/ddrphy_start.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ram/starfive/ddrphy_start.c')
-rw-r--r--drivers/ram/starfive/ddrphy_start.c130
1 files changed, 127 insertions, 3 deletions
diff --git a/drivers/ram/starfive/ddrphy_start.c b/drivers/ram/starfive/ddrphy_start.c
index 3ec587276d..5a6e523534 100644
--- a/drivers/ram/starfive/ddrphy_start.c
+++ b/drivers/ram/starfive/ddrphy_start.c
@@ -9,7 +9,116 @@
#include "starfive_ddr.h"
-static struct ddr_reg_cfg ddr_start_cfg[] = {
+static struct ddr_reg_cfg ddr4_start_cfg[] = {
+ {67, 0xffe0ffff, 0x00010000, REGCLRSETALL},
+ {67, 0xe0ffffff, 0x01000000, REGCLRSETALL},
+ {179, 0xff80ffff, 0x001c0000, REGCLRSETALL},
+ {179, 0x80ffffff, 0x1c000000, REGCLRSETALL},
+ {182, 0xff80ffff, 0x001c0000, REGCLRSETALL},
+ {182, 0x80ffffff, 0x1c000000, REGCLRSETALL},
+ {185, 0xff80ffff, 0x001c0000, REGCLRSETALL},
+ {185, 0x80ffffff, 0x1c000000, REGCLRSETALL},
+ {0, 0xffffffff, 0x01, REGCLRSETALL},
+ {11, 0xfffffff0, 0x1, REGCLRSETALL},
+ {96, 0x0, 0x300, (OFFSET_SEL | REGADDSETALL)},
+ {352, 0x0, 0x300, (OFFSET_SEL | REGADDSETALL)},
+ {608, 0x0, 0x300, (OFFSET_SEL | REGADDSETALL)},
+ {864, 0x0, 0x300, (OFFSET_SEL | REGADDSETALL)},
+ {96, 0xff00ffff, 0x00120000, (OFFSET_SEL | REGCLRSETALL)},
+ {352, 0xff00ffff, 0x00120000, (OFFSET_SEL | REGCLRSETALL)},
+ {608, 0xff00ffff, 0x00120000, (OFFSET_SEL | REGCLRSETALL)},
+ {864, 0xff00ffff, 0x00120000, (OFFSET_SEL | REGCLRSETALL)},
+ {33, 0xffffff00, 0x0040, (OFFSET_SEL | REGCLRSETALL)},
+ {289, 0xffffff00, 0x0040, (OFFSET_SEL | REGCLRSETALL)},
+ {545, 0xffffff00, 0x0040, (OFFSET_SEL | REGCLRSETALL)},
+ {801, 0xffffff00, 0x0040, (OFFSET_SEL | REGCLRSETALL)},
+ {180, 0xffffffff, 0x0100, REGCLRSETALL},
+ {183, 0xffffffff, 0x0100, REGCLRSETALL},
+ {186, 0xffffffff, 0x0100, REGCLRSETALL},
+ {83, 0xffc0ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {339, 0xffc0ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {595, 0xffc0ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {851, 0xffc0ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {1062, 0xf800ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {1318, 0xf800ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {1574, 0xf800ffff, 0x70000, (OFFSET_SEL | REGCLRSETALL)},
+ {1892, 0xfffc0000, 0x0a287, (OFFSET_SEL | REGCLRSETALL)},
+ {1864, 0xffffff00, 0x34, (OFFSET_SEL | REGCLRSETALL)},
+ {1893, 0xfffc0000, 0x7, (OFFSET_SEL | REGCLRSETALL)},
+ {1852, 0xffffe000, 0x058, (OFFSET_SEL | REGCLRSETALL)},
+ {1822, 0xffffffff, 0xFF, (OFFSET_SEL | REGCLRSETALL)},
+ {1896, 0xfffffc00, 0x02ca, (OFFSET_SEL | REGCLRSETALL)},
+ {91, 0xfc00ffff, 0x02ed0000, (OFFSET_SEL | REGCLRSETALL)},
+ {347, 0xfc00ffff, 0x02ed0000, (OFFSET_SEL | REGCLRSETALL)},
+ {603, 0xfc00ffff, 0x02ed0000, (OFFSET_SEL | REGCLRSETALL)},
+ {859, 0xfc00ffff, 0x02ed0000, (OFFSET_SEL | REGCLRSETALL)},
+ {1912, 0x0, 0xcc2bfc7, (OFFSET_SEL | REGSETALL)},
+ {1913, 0x0, 0xff8f, (OFFSET_SEL | REGSETALL)},
+ {1914, 0x0, 0x33f077f, (OFFSET_SEL | REGSETALL)},
+ {1915, 0x0, 0xc3c377f, (OFFSET_SEL | REGSETALL)},
+ {1916, 0x0, 0x1fff7f30, (OFFSET_SEL | REGSETALL)},
+ {1917, 0x0, 0x2ec010, (OFFSET_SEL | REGSETALL)},
+ {1918, 0x0, 0x3fc77ffb, (OFFSET_SEL | REGSETALL)},
+ {1919, 0x0, 0xe10, (OFFSET_SEL | REGSETALL)},
+ {1920, 0x0, 0x1fff7fff, (OFFSET_SEL | REGSETALL)},
+ {1921, 0x0, 0x188411, (OFFSET_SEL | REGSETALL)},
+ {1922, 0x0, 0x1fff7fff, (OFFSET_SEL | REGSETALL)},
+ {1923, 0x0, 0x180400, (OFFSET_SEL | REGSETALL)},
+ {1924, 0x0, 0x1fff7fff, (OFFSET_SEL | REGSETALL)},
+ {1925, 0x0, 0x180400, (OFFSET_SEL | REGSETALL)},
+ {1926, 0x0, 0x07ff7ffb, (OFFSET_SEL | REGSETALL)},
+ {1927, 0x0, 0x188400, (OFFSET_SEL | REGSETALL)},
+ {1928, 0x0, 0x1fff7fff, (OFFSET_SEL | REGSETALL)},
+ {1929, 0x0, 0x4188411, (OFFSET_SEL | REGSETALL)},
+ {1837, 0x0, 0x24410, (OFFSET_SEL | REGSETALL)},
+ {1840, 0x0, 0x24410, (OFFSET_SEL | REGSETALL)},
+ {1842, 0x0, 0x2ffff, (OFFSET_SEL | REGSETALL)},
+ {76, 0xff0000f8, 0x00f7ff07, (OFFSET_SEL | REGCLRSETALL)},
+ {332, 0xff0000f8, 0x00f7ff07, (OFFSET_SEL | REGCLRSETALL)},
+ {588, 0xff0000f8, 0x00f7ff07, (OFFSET_SEL | REGCLRSETALL)},
+ {844, 0xff0000f8, 0x00f7ff07, (OFFSET_SEL | REGCLRSETALL)},
+ {77, 0xffff0000, 0xfcff, (OFFSET_SEL | REGCLRSETALL)},
+ {333, 0xffff0000, 0xfcff, (OFFSET_SEL | REGCLRSETALL)},
+ {589, 0xffff0000, 0xfcff, (OFFSET_SEL | REGCLRSETALL)},
+ {845, 0xffff0000, 0xfcff, (OFFSET_SEL | REGCLRSETALL)},
+ {1062, 0xffffff00, 0xbb, (OFFSET_SEL | REGCLRSETALL)},
+ {1318, 0xffffff00, 0xbb, (OFFSET_SEL | REGCLRSETALL)},
+ {1574, 0xffffff00, 0xbb, (OFFSET_SEL | REGCLRSETALL)},
+ {1028, 0xffffffff, 0x1000000, (OFFSET_SEL | REGCLRSETALL)},
+ {1284, 0xffffffff, 0x1000000, (OFFSET_SEL | REGCLRSETALL)},
+ {1540, 0xffffffff, 0x1000000, (OFFSET_SEL | REGCLRSETALL)},
+ {1848, 0x0, 0x3cf07f8, (OFFSET_SEL | REGSETALL)},
+ {1849, 0x0, 0x3f, (OFFSET_SEL | REGSETALL)},
+ {1850, 0x0, 0x1dffff, (OFFSET_SEL | REGSETALL)},
+ {1851, 0x0, 0x190000, (OFFSET_SEL | REGSETALL)},
+ {130, 0x0000ffff, 0xffff0000, (OFFSET_SEL | REGCLRSETALL)},
+ {386, 0x0000ffff, 0xffff0000, (OFFSET_SEL | REGCLRSETALL)},
+ {642, 0x0000ffff, 0xffff0000, (OFFSET_SEL | REGCLRSETALL)},
+ {898, 0x0000ffff, 0xffff0000, (OFFSET_SEL | REGCLRSETALL)},
+ {131, 0xfffffff0, 0xf, (OFFSET_SEL | REGCLRSETALL)},
+ {387, 0xfffffff0, 0xf, (OFFSET_SEL | REGCLRSETALL)},
+ {643, 0xfffffff0, 0xf, (OFFSET_SEL | REGCLRSETALL)},
+ {899, 0xfffffff0, 0xf, (OFFSET_SEL | REGCLRSETALL)},
+ {29, 0xc0ffffff, 0x10000000, (OFFSET_SEL | REGCLRSETALL)},
+ {285, 0xc0ffffff, 0x10000000, (OFFSET_SEL | REGCLRSETALL)},
+ {541, 0xc0ffffff, 0x10000000, (OFFSET_SEL | REGCLRSETALL)},
+ {797, 0xc0ffffff, 0x10000000, (OFFSET_SEL | REGCLRSETALL)},
+ {30, 0xffffffff, 0x00080000, (OFFSET_SEL | REGCLRSETALL)},
+ {286, 0xffffffff, 0x00080000, (OFFSET_SEL | REGCLRSETALL)},
+ {542, 0xffffffff, 0x00080000, (OFFSET_SEL | REGCLRSETALL)},
+ {798, 0xffffffff, 0x00080000, (OFFSET_SEL | REGCLRSETALL)},
+ {31, 0xffffffc0, 0x00000010, (OFFSET_SEL | REGCLRSETALL)},
+ {287, 0xffffffc0, 0x00000010, (OFFSET_SEL | REGCLRSETALL)},
+ {543, 0xffffffc0, 0x00000010, (OFFSET_SEL | REGCLRSETALL)},
+ {799, 0xffffffc0, 0x00000010, (OFFSET_SEL | REGCLRSETALL)},
+ {1071, 0xfffffff0, 0x00000008, (OFFSET_SEL | REGCLRSETALL)},
+ {1327, 0xfffffff0, 0x00000008, (OFFSET_SEL | REGCLRSETALL)},
+ {1583, 0xfffffff0, 0x00000008, (OFFSET_SEL | REGCLRSETALL)},
+ {1808, 0xfffffff0, 0x00000008, (OFFSET_SEL | REGCLRSETALL)},
+ {1896, 0xfff0ffff, 0x00080000, (OFFSET_SEL | REGCLRSETALL)},
+};
+
+static struct ddr_reg_cfg lpddr4_start_cfg[] = {
{89, 0xffffff00, 0x00000051, (OFFSET_SEL | REGCLRSETALL)},
{78, 0xfffffcff, 0x0, (OFFSET_SEL | REGCLRSETALL)},
{345, 0xffffff00, 0x00000051, (OFFSET_SEL | REGCLRSETALL)},
@@ -254,6 +363,7 @@ void ddr_phy_start(u32 *phyreg, enum ddr_size_t size)
{
u32 len;
u32 mask;
+ struct ddr_reg_cfg *data;
switch (size) {
case DDR_SIZE_1G:
@@ -277,7 +387,21 @@ void ddr_phy_start(u32 *phyreg, enum ddr_size_t size)
return;
};
- len = sizeof(ddr_start_cfg) / sizeof(struct ddr_reg_cfg);
- ddr_reg_set(phyreg, ddr_start_cfg, len, mask);
+ switch (starfive_ddr_type) {
+ case DDR_TYPE_DDR4:
+ len = sizeof(ddr4_start_cfg) / sizeof(struct ddr_reg_cfg);
+ data = ddr4_start_cfg;
+ break;
+ case DDR_TYPE_LPDDR4:
+ len = sizeof(lpddr4_start_cfg) / sizeof(struct ddr_reg_cfg);
+ data = lpddr4_start_cfg;
+ break;
+ case DDR_TYPE_LPDDR3:
+ case DDR_TYPE_DDR3:
+ default:
+ return;
+ }
+
+ ddr_reg_set(phyreg, data, len, mask);
out_le32(phyreg, 0x01);
}