xref: /rk3399_ARM-atf/plat/intel/soc/agilex/include/agilex_memory_controller.h (revision 8de2ae5f165fc67df197547a5a93710623a03073)
12f11d548SHadi Asyrafi /*
22f11d548SHadi Asyrafi  * Copyright (c) 2019, Intel Corporation. All rights reserved.
3*21a01dacSSieu Mun Tang  * Copyright (c) 2024, Altera Corporation. All rights reserved.
42f11d548SHadi Asyrafi  *
52f11d548SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
62f11d548SHadi Asyrafi  */
72f11d548SHadi Asyrafi 
82f11d548SHadi Asyrafi #ifndef AGX_MEMORYCONTROLLER_H
92f11d548SHadi Asyrafi #define AGX_MEMORYCONTROLLER_H
102f11d548SHadi Asyrafi 
112f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_REG_DRAMADDRW			0xf80100a8
122f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CTRLCFG0				0xf8010028
132f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CTRLCFG1				0xf801002c
14b266d821SHadi Asyrafi #define AGX_MPFE_IOHMC_CTRLCFG2				0xf8010030
15b266d821SHadi Asyrafi #define AGX_MPFE_IOHMC_CTRLCFG3				0xf8010034
162f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_DRAMADDRW			0xf80100a8
172f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_DRAMTIMING0			0xf8010050
182f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING0			0xf801007c
192f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING1			0xf8010080
202f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING2			0xf8010084
212f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING3			0xf8010088
222f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING4			0xf801008c
232f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING9			0xf80100a0
242f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CALTIMING9_ACT_TO_ACT(x) (((x) & 0x000000ff) >> 0)
252f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_CTRLCFG1_CFG_ADDR_ORDER(value)	\
262f11d548SHadi Asyrafi 						(((value) & 0x00000060) >> 5)
272f11d548SHadi Asyrafi 
282f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL1			0xf8011100
292f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL2			0xf8011104
302f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_RSTHANDSHAKESTAT		0xf8011218
31*21a01dacSSieu Mun Tang #define AGX_MPFE_HMC_ADP_RSTHANDSHAKESTAT_SEQ2CORE	0x0000000f
322f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_RSTHANDSHAKECTRL		0xf8011214
332f11d548SHadi Asyrafi 
342f11d548SHadi Asyrafi 
352f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_REG_CTRLCFG1			0xf801002c
362f11d548SHadi Asyrafi 
372f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_REG_NIOSRESERVE0_OFST		0xf8010110
382f11d548SHadi Asyrafi 
392f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_COL_ADDR_WIDTH(x)	(((x) & 0x0000001f) >> 0)
402f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_ROW_ADDR_WIDTH(x)	(((x) & 0x000003e0) >> 5)
412f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CS_ADDR_WIDTH(x)	(((x) & 0x00070000) >> 16)
422f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_BANK_GRP_ADDR_WIDTH(x)	(((x) & 0x0000c000) >> 14)
432f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_BANK_ADDR_WIDTH(x)	(((x) & 0x00003c00) >> 10)
442f11d548SHadi Asyrafi 
452f11d548SHadi Asyrafi #define AGX_MPFE_DDR(x)					(0xf8000000 + x)
462f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRCALSTAT			0xf801100c
472f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED				0xf8000400
482f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF			0xf8000408
492f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DDRTIMING		0xf800040c
502f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF_SET_MSK		0x0000001f
512f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DDRMODE			0xf8000410
522f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV		0xf800043c
532f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_READLATENCY		0xf8000414
542f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE		0xf8000438
552f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_FAWBANK_OFST	10
562f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_FAW_OFST	4
572f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_ACTIVATE_RRD_OFST	0
582f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DDRCONF_SET(x)	(((x) << 0) & 0x0000001f)
592f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTORD_OFST	0
602f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTORD_MSK	(BIT(0) | BIT(1))
612f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTOWR_OFST	2
622f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSRDTOWR_MSK	(BIT(2) | BIT(3))
632f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSWRTORD_OFST	4
642f11d548SHadi Asyrafi #define AGX_MPFE_DDR_MAIN_SCHED_DEVTODEV_BUSWRTORD_MSK	(BIT(4) | BIT(5))
652f11d548SHadi Asyrafi 
662f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP(x)				(0xf8011000 + (x))
672f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_HPSINTFCSEL			0xf8011210
682f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRIOCTRL			0xf8011008
692f11d548SHadi Asyrafi #define HMC_ADP_DDRIOCTRL				0x8
702f11d548SHadi Asyrafi #define HMC_ADP_DDRIOCTRL_IO_SIZE(x)		(((x) & 0x00000003) >> 0)
712f11d548SHadi Asyrafi #define HMC_ADP_DDRIOCTRL_CTRL_BURST_LENGTH(x)	(((x) & 0x00003e00) >> 9)
722f11d548SHadi Asyrafi #define ADP_DRAMADDRWIDTH				0xe0
732f11d548SHadi Asyrafi 
742f11d548SHadi Asyrafi #define ACT_TO_ACT_DIFF_BANK(value)		(((value) & 0x00fc0000) >> 18)
752f11d548SHadi Asyrafi #define ACT_TO_ACT(value)			(((value) & 0x0003f000) >> 12)
762f11d548SHadi Asyrafi #define ACT_TO_RDWR(value)			(((value) & 0x0000003f) >> 0)
772f11d548SHadi Asyrafi #define ACT_TO_ACT(value)			(((value) & 0x0003f000) >> 12)
782f11d548SHadi Asyrafi 
792f11d548SHadi Asyrafi /* timing 2 */
802f11d548SHadi Asyrafi #define RD_TO_RD_DIFF_CHIP(value)		(((value) & 0x00000fc0) >> 6)
812f11d548SHadi Asyrafi #define RD_TO_WR_DIFF_CHIP(value)		(((value) & 0x3f000000) >> 24)
822f11d548SHadi Asyrafi #define RD_TO_WR(value)				(((value) & 0x00fc0000) >> 18)
832f11d548SHadi Asyrafi #define RD_TO_PCH(value)			(((value) & 0x00000fc0) >> 6)
842f11d548SHadi Asyrafi 
852f11d548SHadi Asyrafi /* timing 3 */
862f11d548SHadi Asyrafi #define CALTIMING3_WR_TO_RD_DIFF_CHIP(value)	(((value) & 0x0003f000) >> 12)
872f11d548SHadi Asyrafi #define CALTIMING3_WR_TO_RD(value)		(((value) & 0x00000fc0) >> 6)
882f11d548SHadi Asyrafi 
892f11d548SHadi Asyrafi /* timing 4 */
902f11d548SHadi Asyrafi #define PCH_TO_VALID(value)			(((value) & 0x00000fc0) >> 6)
912f11d548SHadi Asyrafi 
922f11d548SHadi Asyrafi #define DDRTIMING_BWRATIO_OFST				31
932f11d548SHadi Asyrafi #define DDRTIMING_WRTORD_OFST				26
942f11d548SHadi Asyrafi #define DDRTIMING_RDTOWR_OFST				21
952f11d548SHadi Asyrafi #define DDRTIMING_BURSTLEN_OFST				18
962f11d548SHadi Asyrafi #define DDRTIMING_WRTOMISS_OFST				12
972f11d548SHadi Asyrafi #define DDRTIMING_RDTOMISS_OFST				6
982f11d548SHadi Asyrafi #define DDRTIMING_ACTTOACT_OFST				0
992f11d548SHadi Asyrafi 
1002f11d548SHadi Asyrafi #define ADP_DDRIOCTRL_IO_SIZE(x)			(((x) & 0x3) >> 0)
1012f11d548SHadi Asyrafi 
1022f11d548SHadi Asyrafi #define DDRMODE_AUTOPRECHARGE_OFST			1
1032f11d548SHadi Asyrafi #define DDRMODE_BWRATIOEXTENDED_OFST			0
1042f11d548SHadi Asyrafi 
1052f11d548SHadi Asyrafi 
1062f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_REG_DRAMTIMING0_CFG_TCL(x)	(((x) & 0x7f) >> 0)
1072f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_REG_CTRLCFG0_CFG_MEM_TYPE(x)	(((x) & 0x0f) >> 0)
1082f11d548SHadi Asyrafi 
1092f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_DDR				0xf7004400
1102f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM0				0xf70045c0
1112f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM1A				0xf70045e0
1122f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM1B				0xf7004600
1132f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM1C				0xf7004620
1142f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM1D				0xf7004640
1152f11d548SHadi Asyrafi #define AGX_CCU_CPU0_MPRT_MEM1E				0xf7004660
1162f11d548SHadi Asyrafi #define AGX_CCU_IOM_MPRT_MEM0				0xf7018560
1172f11d548SHadi Asyrafi #define AGX_CCU_IOM_MPRT_MEM1A				0xf7018580
1182f11d548SHadi Asyrafi #define	AGX_CCU_IOM_MPRT_MEM1B				0xf70185a0
1192f11d548SHadi Asyrafi #define	AGX_CCU_IOM_MPRT_MEM1C				0xf70185c0
1202f11d548SHadi Asyrafi #define	AGX_CCU_IOM_MPRT_MEM1D				0xf70185e0
1212f11d548SHadi Asyrafi #define	AGX_CCU_IOM_MPRT_MEM1E				0xf7018600
1222f11d548SHadi Asyrafi 
1232f11d548SHadi Asyrafi #define AGX_NOC_FW_DDR_SCR				0xf8020200
1242f11d548SHadi Asyrafi #define AGX_NOC_FW_DDR_SCR_MPUREGION0ADDR_LIMITEXT	0xf802021c
1252f11d548SHadi Asyrafi #define AGX_NOC_FW_DDR_SCR_MPUREGION0ADDR_LIMIT		0xf8020218
1262f11d548SHadi Asyrafi #define AGX_NOC_FW_DDR_SCR_NONMPUREGION0ADDR_LIMITEXT	0xf802029c
1272f11d548SHadi Asyrafi #define AGX_NOC_FW_DDR_SCR_NONMPUREGION0ADDR_LIMIT	0xf8020298
1282f11d548SHadi Asyrafi 
1292f11d548SHadi Asyrafi #define AGX_SOC_NOC_FW_DDR_SCR_ENABLE			0xf8020200
130b266d821SHadi Asyrafi #define AGX_SOC_NOC_FW_DDR_SCR_ENABLESET		0xf8020204
1312f11d548SHadi Asyrafi #define AGX_CCU_NOC_DI_SET_MSK				0x10
1322f11d548SHadi Asyrafi 
1332f11d548SHadi Asyrafi #define AGX_SYSMGR_CORE_HMC_CLK				0xffd120b4
1342f11d548SHadi Asyrafi #define AGX_SYSMGR_CORE_HMC_CLK_STATUS			0x00000001
1352f11d548SHadi Asyrafi 
1362f11d548SHadi Asyrafi #define AGX_MPFE_IOHMC_NIOSRESERVE0_NIOS_RESERVE0(x)	(((x) & 0xffff) >> 0)
1372f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE_MSK		0x00000003
1382f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE_OFST		0
1392f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_HPSINTFCSEL_ENABLE		0x001f1f1f
1402f11d548SHadi Asyrafi #define AGX_IOHMC_CTRLCFG1_ENABLE_ECC_OFST		7
1412f11d548SHadi Asyrafi 
1422f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL1_AUTOWB_CNT_RST_SET_MSK	0x00010000
1432f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL1_CNT_RST_SET_MSK		0x00000100
1442f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL1_ECC_EN_SET_MSK		0x00000001
1452f11d548SHadi Asyrafi 
1462f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL2_AUTOWB_EN_SET_MSK		0x00000001
1472f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL2_OVRW_RB_ECC_EN_SET_MSK	0x00010000
1482f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_ECCCTRL2_RMW_EN_SET_MSK		0x00000100
1492f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRCALSTAT_CAL(value)		(((value) & 0x1) >> 0)
1502f11d548SHadi Asyrafi 
1512f11d548SHadi Asyrafi 
1522f11d548SHadi Asyrafi #define AGX_MPFE_HMC_ADP_DDRIOCTRL_IO_SIZE(x)		(((x) & 0x00003) >> 0)
1532f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CFG_BANK_ADDR_WIDTH(x)		(((x) & 0x03c00) >> 10)
1542f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CFG_BANK_GROUP_ADDR_WIDTH(x)	(((x) & 0x0c000) >> 14)
1552f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CFG_COL_ADDR_WIDTH(x)		(((x) & 0x0001f) >> 0)
1562f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CFG_CS_ADDR_WIDTH(x)		(((x) & 0x70000) >> 16)
1572f11d548SHadi Asyrafi #define IOHMC_DRAMADDRW_CFG_ROW_ADDR_WIDTH(x)		(((x) & 0x003e0) >> 5)
1582f11d548SHadi Asyrafi 
1592f11d548SHadi Asyrafi #define AGX_SDRAM_0_LB_ADDR				0x0
160b266d821SHadi Asyrafi #define AGX_DDR_SIZE					0x40000000
1612f11d548SHadi Asyrafi 
1626197dc98SJit Loon Lim /* Macros */
1636197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_ECCCTRL1					0x008
1646197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_ERRINTEN					0x010
1656197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_ERRINTENS					0x014
1666197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_ERRINTENR					0x018
1676197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_INTMODE					0x01C
1686197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_INTSTAT					0x020
1696197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_DIAGINTTEST					0x024
1706197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL_DERRADDRA					0x02C
1716197dc98SJit Loon Lim 
1726197dc98SJit Loon Lim #define SOCFPGA_MEMCTRL(_reg)		(SOCFPGA_MEMCTRL_REG_BASE \
1736197dc98SJit Loon Lim 						+ (SOCFPGA_MEMCTRL_##_reg))
1746197dc98SJit Loon Lim 
1752f11d548SHadi Asyrafi int init_hard_memory_controller(void);
1762f11d548SHadi Asyrafi 
1772f11d548SHadi Asyrafi #endif
178