11881cdb1SYouMin Chen /* SPDX-License-Identifier: GPL-2.0+ */ 21881cdb1SYouMin Chen /* 31881cdb1SYouMin Chen * Copyright (C) 2018 Rockchip Electronics Co., Ltd 41881cdb1SYouMin Chen */ 51881cdb1SYouMin Chen 61881cdb1SYouMin Chen #ifndef _ASM_ARCH_SDRAM_PX30_H 71881cdb1SYouMin Chen #define _ASM_ARCH_SDRAM_PX30_H 85685f66aSYouMin Chen #include <asm/arch/sdram_common.h> 95e6e8f2dSYouMin Chen #include <asm/arch/sdram_msch.h> 1055c5751eSYouMin Chen #include <asm/arch/sdram_pctl_px30.h> 1155c5751eSYouMin Chen #include <asm/arch/sdram_phy_px30.h> 1255c5751eSYouMin Chen #include <asm/arch/sdram_phy_ron_rtt_px30.h> 131881cdb1SYouMin Chen 141881cdb1SYouMin Chen #define SR_IDLE 93 151881cdb1SYouMin Chen #define PD_IDLE 13 161881cdb1SYouMin Chen 171881cdb1SYouMin Chen /* PMUGRF */ 181881cdb1SYouMin Chen #define PMUGRF_OS_REG0 (0x200) 191881cdb1SYouMin Chen #define PMUGRF_OS_REG(n) (PMUGRF_OS_REG0 + (n) * 4) 201881cdb1SYouMin Chen 211881cdb1SYouMin Chen /* DDR GRF */ 221881cdb1SYouMin Chen #define DDR_GRF_CON(n) (0 + (n) * 4) 231881cdb1SYouMin Chen #define DDR_GRF_STATUS_BASE (0X100) 241881cdb1SYouMin Chen #define DDR_GRF_STATUS(n) (DDR_GRF_STATUS_BASE + (n) * 4) 251881cdb1SYouMin Chen #define DDR_GRF_LP_CON (0x20) 261881cdb1SYouMin Chen 271881cdb1SYouMin Chen #define SPLIT_MODE_32_L16_VALID (0) 281881cdb1SYouMin Chen #define SPLIT_MODE_32_H16_VALID (1) 291881cdb1SYouMin Chen #define SPLIT_MODE_16_L8_VALID (2) 301881cdb1SYouMin Chen #define SPLIT_MODE_16_H8_VALID (3) 311881cdb1SYouMin Chen 321881cdb1SYouMin Chen #define DDR_GRF_SPLIT_CON (0x8) 331881cdb1SYouMin Chen #define SPLIT_MODE_MASK (0x3) 341881cdb1SYouMin Chen #define SPLIT_MODE_OFFSET (9) 351881cdb1SYouMin Chen #define SPLIT_BYPASS_MASK (1) 361881cdb1SYouMin Chen #define SPLIT_BYPASS_OFFSET (8) 371881cdb1SYouMin Chen #define SPLIT_SIZE_MASK (0xff) 381881cdb1SYouMin Chen #define SPLIT_SIZE_OFFSET (0) 391881cdb1SYouMin Chen 401881cdb1SYouMin Chen /* CRU define */ 411881cdb1SYouMin Chen /* CRU_PLL_CON0 */ 421881cdb1SYouMin Chen #define PB(n) ((0x1 << (15 + 16)) | ((n) << 15)) 431881cdb1SYouMin Chen #define POSTDIV1(n) ((0x7 << (12 + 16)) | ((n) << 12)) 441881cdb1SYouMin Chen #define FBDIV(n) ((0xFFF << 16) | (n)) 451881cdb1SYouMin Chen 461881cdb1SYouMin Chen /* CRU_PLL_CON1 */ 471881cdb1SYouMin Chen #define RSTMODE(n) ((0x1 << (15 + 16)) | ((n) << 15)) 481881cdb1SYouMin Chen #define RST(n) ((0x1 << (14 + 16)) | ((n) << 14)) 491881cdb1SYouMin Chen #define PD(n) ((0x1 << (13 + 16)) | ((n) << 13)) 501881cdb1SYouMin Chen #define DSMPD(n) ((0x1 << (12 + 16)) | ((n) << 12)) 511881cdb1SYouMin Chen #define LOCK(n) (((n) >> 10) & 0x1) 521881cdb1SYouMin Chen #define POSTDIV2(n) ((0x7 << (6 + 16)) | ((n) << 6)) 531881cdb1SYouMin Chen #define REFDIV(n) ((0x3F << 16) | (n)) 541881cdb1SYouMin Chen 551881cdb1SYouMin Chen /* CRU_MODE */ 561881cdb1SYouMin Chen #define CLOCK_FROM_XIN_OSC (0) 571881cdb1SYouMin Chen #define CLOCK_FROM_PLL (1) 581881cdb1SYouMin Chen #define CLOCK_FROM_RTC_32K (2) 591881cdb1SYouMin Chen #define DPLL_MODE(n) ((0x3 << (4 + 16)) | ((n) << 4)) 601881cdb1SYouMin Chen 611881cdb1SYouMin Chen /* CRU_SOFTRESET_CON1 */ 621881cdb1SYouMin Chen #define upctl2_psrstn_req(n) (((0x1 << 6) << 16) | ((n) << 6)) 631881cdb1SYouMin Chen #define upctl2_asrstn_req(n) (((0x1 << 5) << 16) | ((n) << 5)) 641881cdb1SYouMin Chen #define upctl2_srstn_req(n) (((0x1 << 4) << 16) | ((n) << 4)) 651881cdb1SYouMin Chen 661881cdb1SYouMin Chen /* CRU_SOFTRESET_CON2 */ 671881cdb1SYouMin Chen #define ddrphy_psrstn_req(n) (((0x1 << 2) << 16) | ((n) << 2)) 681881cdb1SYouMin Chen #define ddrphy_srstn_req(n) (((0x1 << 0) << 16) | ((n) << 0)) 691881cdb1SYouMin Chen 701881cdb1SYouMin Chen /* CRU register */ 711881cdb1SYouMin Chen #define CRU_PLL_CON(pll_id, n) ((pll_id) * 0x20 + (n) * 4) 721881cdb1SYouMin Chen #define CRU_MODE (0xa0) 731881cdb1SYouMin Chen #define CRU_GLB_CNT_TH (0xb0) 741881cdb1SYouMin Chen #define CRU_CLKSEL_CON_BASE 0x100 751881cdb1SYouMin Chen #define CRU_CLKSELS_CON(i) (CRU_CLKSEL_CON_BASE + ((i) * 4)) 761881cdb1SYouMin Chen #define CRU_CLKGATE_CON_BASE 0x200 771881cdb1SYouMin Chen #define CRU_CLKGATE_CON(i) (CRU_CLKGATE_CON_BASE + ((i) * 4)) 781881cdb1SYouMin Chen #define CRU_CLKSFTRST_CON_BASE 0x300 791881cdb1SYouMin Chen #define CRU_CLKSFTRST_CON(i) (CRU_CLKSFTRST_CON_BASE + ((i) * 4)) 801881cdb1SYouMin Chen 811881cdb1SYouMin Chen u8 ddr_cfg_2_rbc[] = { 821881cdb1SYouMin Chen /* 831881cdb1SYouMin Chen * [6:4] max row: 13+n 841881cdb1SYouMin Chen * [3] bank(0:4bank,1:8bank) 851881cdb1SYouMin Chen * [2:0] col(10+n) 861881cdb1SYouMin Chen */ 871881cdb1SYouMin Chen ((5 << 4) | (1 << 3) | 0), /* 0 */ 881881cdb1SYouMin Chen ((5 << 4) | (1 << 3) | 1), /* 1 */ 891881cdb1SYouMin Chen ((4 << 4) | (1 << 3) | 2), /* 2 */ 901881cdb1SYouMin Chen ((3 << 4) | (1 << 3) | 3), /* 3 */ 911881cdb1SYouMin Chen ((2 << 4) | (1 << 3) | 4), /* 4 */ 921881cdb1SYouMin Chen ((5 << 4) | (0 << 3) | 2), /* 5 */ 931881cdb1SYouMin Chen ((4 << 4) | (1 << 3) | 2), /* 6 */ 941881cdb1SYouMin Chen /*((0<<3)|3),*/ /* 12 for ddr4 */ 951881cdb1SYouMin Chen /*((1<<3)|1),*/ /* 13 B,C exchange for rkvdec */ 961881cdb1SYouMin Chen }; 971881cdb1SYouMin Chen 981881cdb1SYouMin Chen /* 99*5d4a323cSTang Yun ping * for ddr4 if ddrconfig=7, DDRCTL should set 7 and noc should 1001881cdb1SYouMin Chen * set to 1 for more efficient. 101*5d4a323cSTang Yun ping * noc ddrconf, DDRCTL addrmap 1021881cdb1SYouMin Chen * 1 7 1031881cdb1SYouMin Chen * 2 8 1041881cdb1SYouMin Chen * 3 9 1051881cdb1SYouMin Chen * 12 10 1061881cdb1SYouMin Chen * 5 11 1071881cdb1SYouMin Chen */ 1081881cdb1SYouMin Chen u8 d4_rbc_2_d3_rbc[] = { 1091881cdb1SYouMin Chen 1, /* 7 */ 1101881cdb1SYouMin Chen 2, /* 8 */ 1111881cdb1SYouMin Chen 3, /* 9 */ 1121881cdb1SYouMin Chen 12, /* 10 */ 1131881cdb1SYouMin Chen 5, /* 11 */ 1141881cdb1SYouMin Chen }; 1151881cdb1SYouMin Chen 1161881cdb1SYouMin Chen /* 1171881cdb1SYouMin Chen * row higher than cs should be disabled by set to 0xf 1181881cdb1SYouMin Chen * rank addrmap calculate by real cap. 1191881cdb1SYouMin Chen */ 1201881cdb1SYouMin Chen u32 addrmap[][8] = { 1211881cdb1SYouMin Chen /* map0 map1, map2, map3, map4, map5 1221881cdb1SYouMin Chen * map6, map7, map8 1231881cdb1SYouMin Chen * ------------------------------------------------------- 1241881cdb1SYouMin Chen * bk2-0 col 5-2 col 9-6 col 11-10 row 11-0 1251881cdb1SYouMin Chen * row 15-12 row 17-16 bg1,0 1261881cdb1SYouMin Chen * ------------------------------------------------------- 1271881cdb1SYouMin Chen * 4,3,2 5-2 9-6 6 1281881cdb1SYouMin Chen * 3,2 1291881cdb1SYouMin Chen */ 1301881cdb1SYouMin Chen {0x00060606, 0x00000000, 0x1f1f0000, 0x00001f1f, 0x05050505, 1311881cdb1SYouMin Chen 0x05050505, 0x00000505, 0x3f3f}, /* 0 */ 1321881cdb1SYouMin Chen {0x00070707, 0x00000000, 0x1f000000, 0x00001f1f, 0x06060606, 1331881cdb1SYouMin Chen 0x06060606, 0x06060606, 0x3f3f}, /* 1 */ 1341881cdb1SYouMin Chen {0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x07070707, 1351881cdb1SYouMin Chen 0x07070707, 0x00000f07, 0x3f3f}, /* 2 */ 1361881cdb1SYouMin Chen {0x00090909, 0x00000000, 0x00000000, 0x00001f00, 0x08080808, 1371881cdb1SYouMin Chen 0x08080808, 0x00000f0f, 0x3f3f}, /* 3 */ 1381881cdb1SYouMin Chen {0x000a0a0a, 0x00000000, 0x00000000, 0x00000000, 0x09090909, 1391881cdb1SYouMin Chen 0x0f090909, 0x00000f0f, 0x3f3f}, /* 4 */ 1401881cdb1SYouMin Chen {0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x06060606, 1411881cdb1SYouMin Chen 0x06060606, 0x00000606, 0x3f3f}, /* 5 */ 1421881cdb1SYouMin Chen {0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x07070707, 1431881cdb1SYouMin Chen 0x07070707, 0x00000f0f, 0x3f3f}, /* 6 */ 1441881cdb1SYouMin Chen {0x003f0808, 0x00000006, 0x1f1f0000, 0x00001f1f, 0x06060606, 1451881cdb1SYouMin Chen 0x06060606, 0x00000606, 0x0600}, /* 7 */ 1461881cdb1SYouMin Chen {0x003f0909, 0x00000007, 0x1f000000, 0x00001f1f, 0x07070707, 1471881cdb1SYouMin Chen 0x07070707, 0x00000f07, 0x0700}, /* 8 */ 1481881cdb1SYouMin Chen {0x003f0a0a, 0x01010100, 0x01010101, 0x00001f1f, 0x08080808, 1491881cdb1SYouMin Chen 0x08080808, 0x00000f0f, 0x0801}, /* 9 */ 1501881cdb1SYouMin Chen {0x003f0909, 0x01010100, 0x01010101, 0x00001f1f, 0x07070707, 1511881cdb1SYouMin Chen 0x07070707, 0x00000f07, 0x3f01}, /* 10 */ 1521881cdb1SYouMin Chen {0x003f0808, 0x00000007, 0x1f000000, 0x00001f1f, 0x06060606, 1531881cdb1SYouMin Chen 0x06060606, 0x00000606, 0x3f00}, /* 11 */ 1541881cdb1SYouMin Chen /* when ddr4 12 map to 10, when ddr3 12 unused */ 1551881cdb1SYouMin Chen {0x003f0909, 0x01010100, 0x01010101, 0x00001f1f, 0x07070707, 1561881cdb1SYouMin Chen 0x07070707, 0x00000f07, 0x3f01}, /* 10 */ 1571881cdb1SYouMin Chen {0x00070706, 0x00000000, 0x1f010000, 0x00001f1f, 0x06060606, 1581881cdb1SYouMin Chen 0x06060606, 0x00000606, 0x3f3f}, /* 13 */ 1591881cdb1SYouMin Chen }; 1601881cdb1SYouMin Chen 1611881cdb1SYouMin Chen struct px30_ddr_grf_regs { 1621881cdb1SYouMin Chen u32 ddr_grf_con[4]; 1631881cdb1SYouMin Chen u32 reserved1[(0x20 - 0x10) / 4]; 1641881cdb1SYouMin Chen u32 ddr_grf_lp_con; 1651881cdb1SYouMin Chen u32 reserved2[(0x100 - 0x24) / 4]; 1661881cdb1SYouMin Chen u32 ddr_grf_status[11]; 1671881cdb1SYouMin Chen }; 1681881cdb1SYouMin Chen 1695e6e8f2dSYouMin Chen struct msch_regs { 1705e6e8f2dSYouMin Chen u32 coreid; 1715e6e8f2dSYouMin Chen u32 revisionid; 1725e6e8f2dSYouMin Chen u32 deviceconf; 1735e6e8f2dSYouMin Chen u32 devicesize; 1745e6e8f2dSYouMin Chen u32 ddrtiminga0; 1755e6e8f2dSYouMin Chen u32 ddrtimingb0; 1765e6e8f2dSYouMin Chen u32 ddrtimingc0; 1775e6e8f2dSYouMin Chen u32 devtodev0; 1785e6e8f2dSYouMin Chen u32 reserved1[(0x110 - 0x20) / 4]; 1795e6e8f2dSYouMin Chen u32 ddrmode; 1805e6e8f2dSYouMin Chen u32 ddr4timing; 1815e6e8f2dSYouMin Chen u32 reserved2[(0x1000 - 0x118) / 4]; 1825e6e8f2dSYouMin Chen u32 agingx0; 1835e6e8f2dSYouMin Chen u32 reserved3[(0x1040 - 0x1004) / 4]; 1845e6e8f2dSYouMin Chen u32 aging0; 1855e6e8f2dSYouMin Chen u32 aging1; 1865e6e8f2dSYouMin Chen u32 aging2; 1875e6e8f2dSYouMin Chen u32 aging3; 1885e6e8f2dSYouMin Chen }; 1895e6e8f2dSYouMin Chen 1905e6e8f2dSYouMin Chen struct sdram_msch_timings { 1915e6e8f2dSYouMin Chen union noc_ddrtiminga0 ddrtiminga0; 1925e6e8f2dSYouMin Chen union noc_ddrtimingb0 ddrtimingb0; 1935e6e8f2dSYouMin Chen union noc_ddrtimingc0 ddrtimingc0; 1945e6e8f2dSYouMin Chen union noc_devtodev0 devtodev0; 1955e6e8f2dSYouMin Chen union noc_ddrmode ddrmode; 1965e6e8f2dSYouMin Chen union noc_ddr4timing ddr4timing; 1975e6e8f2dSYouMin Chen u32 agingx0; 1985e6e8f2dSYouMin Chen }; 1995e6e8f2dSYouMin Chen 2001881cdb1SYouMin Chen struct px30_sdram_channel { 20155c5751eSYouMin Chen struct sdram_cap_info cap_info; 20255c5751eSYouMin Chen struct sdram_msch_timings noc_timings; 2031881cdb1SYouMin Chen }; 2041881cdb1SYouMin Chen 2051881cdb1SYouMin Chen struct px30_sdram_params { 2061881cdb1SYouMin Chen struct px30_sdram_channel ch; 20755c5751eSYouMin Chen struct sdram_base_params base; 20855c5751eSYouMin Chen struct ddr_pctl_regs pctl_regs; 20955c5751eSYouMin Chen struct ddr_phy_regs phy_regs; 21055c5751eSYouMin Chen struct ddr_phy_skew *skew; 2111881cdb1SYouMin Chen }; 2121881cdb1SYouMin Chen #endif 213