xref: /rk3399_ARM-atf/include/drivers/st/stm32mp1_ddr.h (revision 06e55dc8424277f7d6325949c4cd6ebe7fabb173)
110a511ceSYann Gautier /*
226cf5cf6SPatrick Delaunay  * Copyright (C) 2018-2022, STMicroelectronics - All Rights Reserved
310a511ceSYann Gautier  *
410a511ceSYann Gautier  * SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
510a511ceSYann Gautier  */
610a511ceSYann Gautier 
7c3cf06f1SAntonio Nino Diaz #ifndef STM32MP1_DDR_H
8c3cf06f1SAntonio Nino Diaz #define STM32MP1_DDR_H
910a511ceSYann Gautier 
1010a511ceSYann Gautier #include <stdbool.h>
11c3cf06f1SAntonio Nino Diaz #include <stdint.h>
1210a511ceSYann Gautier 
13*06e55dc8SNicolas Le Bayon #include <drivers/st/stm32mp_ddr.h>
1410a511ceSYann Gautier 
1510a511ceSYann Gautier struct stm32mp1_ddrctrl_reg {
1610a511ceSYann Gautier 	uint32_t mstr;
1710a511ceSYann Gautier 	uint32_t mrctrl0;
1810a511ceSYann Gautier 	uint32_t mrctrl1;
1910a511ceSYann Gautier 	uint32_t derateen;
2010a511ceSYann Gautier 	uint32_t derateint;
2110a511ceSYann Gautier 	uint32_t pwrctl;
2210a511ceSYann Gautier 	uint32_t pwrtmg;
2310a511ceSYann Gautier 	uint32_t hwlpctl;
2410a511ceSYann Gautier 	uint32_t rfshctl0;
2510a511ceSYann Gautier 	uint32_t rfshctl3;
2610a511ceSYann Gautier 	uint32_t crcparctl0;
2710a511ceSYann Gautier 	uint32_t zqctl0;
2810a511ceSYann Gautier 	uint32_t dfitmg0;
2910a511ceSYann Gautier 	uint32_t dfitmg1;
3010a511ceSYann Gautier 	uint32_t dfilpcfg0;
3110a511ceSYann Gautier 	uint32_t dfiupd0;
3210a511ceSYann Gautier 	uint32_t dfiupd1;
3310a511ceSYann Gautier 	uint32_t dfiupd2;
3410a511ceSYann Gautier 	uint32_t dfiphymstr;
3510a511ceSYann Gautier 	uint32_t odtmap;
3610a511ceSYann Gautier 	uint32_t dbg0;
3710a511ceSYann Gautier 	uint32_t dbg1;
3810a511ceSYann Gautier 	uint32_t dbgcmd;
3910a511ceSYann Gautier 	uint32_t poisoncfg;
4010a511ceSYann Gautier 	uint32_t pccfg;
4110a511ceSYann Gautier };
4210a511ceSYann Gautier 
4310a511ceSYann Gautier struct stm32mp1_ddrctrl_timing {
4410a511ceSYann Gautier 	uint32_t rfshtmg;
4510a511ceSYann Gautier 	uint32_t dramtmg0;
4610a511ceSYann Gautier 	uint32_t dramtmg1;
4710a511ceSYann Gautier 	uint32_t dramtmg2;
4810a511ceSYann Gautier 	uint32_t dramtmg3;
4910a511ceSYann Gautier 	uint32_t dramtmg4;
5010a511ceSYann Gautier 	uint32_t dramtmg5;
5110a511ceSYann Gautier 	uint32_t dramtmg6;
5210a511ceSYann Gautier 	uint32_t dramtmg7;
5310a511ceSYann Gautier 	uint32_t dramtmg8;
5410a511ceSYann Gautier 	uint32_t dramtmg14;
5510a511ceSYann Gautier 	uint32_t odtcfg;
5610a511ceSYann Gautier };
5710a511ceSYann Gautier 
5810a511ceSYann Gautier struct stm32mp1_ddrctrl_map {
5910a511ceSYann Gautier 	uint32_t addrmap1;
6010a511ceSYann Gautier 	uint32_t addrmap2;
6110a511ceSYann Gautier 	uint32_t addrmap3;
6210a511ceSYann Gautier 	uint32_t addrmap4;
6310a511ceSYann Gautier 	uint32_t addrmap5;
6410a511ceSYann Gautier 	uint32_t addrmap6;
6510a511ceSYann Gautier 	uint32_t addrmap9;
6610a511ceSYann Gautier 	uint32_t addrmap10;
6710a511ceSYann Gautier 	uint32_t addrmap11;
6810a511ceSYann Gautier };
6910a511ceSYann Gautier 
7010a511ceSYann Gautier struct stm32mp1_ddrctrl_perf {
7110a511ceSYann Gautier 	uint32_t sched;
7210a511ceSYann Gautier 	uint32_t sched1;
7310a511ceSYann Gautier 	uint32_t perfhpr1;
7410a511ceSYann Gautier 	uint32_t perflpr1;
7510a511ceSYann Gautier 	uint32_t perfwr1;
7610a511ceSYann Gautier 	uint32_t pcfgr_0;
7710a511ceSYann Gautier 	uint32_t pcfgw_0;
7810a511ceSYann Gautier 	uint32_t pcfgqos0_0;
7910a511ceSYann Gautier 	uint32_t pcfgqos1_0;
8010a511ceSYann Gautier 	uint32_t pcfgwqos0_0;
8110a511ceSYann Gautier 	uint32_t pcfgwqos1_0;
8288f4fb8fSYann Gautier #if STM32MP_DDR_DUAL_AXI_PORT
8310a511ceSYann Gautier 	uint32_t pcfgr_1;
8410a511ceSYann Gautier 	uint32_t pcfgw_1;
8510a511ceSYann Gautier 	uint32_t pcfgqos0_1;
8610a511ceSYann Gautier 	uint32_t pcfgqos1_1;
8710a511ceSYann Gautier 	uint32_t pcfgwqos0_1;
8810a511ceSYann Gautier 	uint32_t pcfgwqos1_1;
8988f4fb8fSYann Gautier #endif
9010a511ceSYann Gautier };
9110a511ceSYann Gautier 
9210a511ceSYann Gautier struct stm32mp1_ddrphy_reg {
9310a511ceSYann Gautier 	uint32_t pgcr;
9410a511ceSYann Gautier 	uint32_t aciocr;
9510a511ceSYann Gautier 	uint32_t dxccr;
9610a511ceSYann Gautier 	uint32_t dsgcr;
9710a511ceSYann Gautier 	uint32_t dcr;
9810a511ceSYann Gautier 	uint32_t odtcr;
9910a511ceSYann Gautier 	uint32_t zq0cr1;
10010a511ceSYann Gautier 	uint32_t dx0gcr;
10110a511ceSYann Gautier 	uint32_t dx1gcr;
10288f4fb8fSYann Gautier #if STM32MP_DDR_32BIT_INTERFACE
10310a511ceSYann Gautier 	uint32_t dx2gcr;
10410a511ceSYann Gautier 	uint32_t dx3gcr;
10588f4fb8fSYann Gautier #endif
10610a511ceSYann Gautier };
10710a511ceSYann Gautier 
10810a511ceSYann Gautier struct stm32mp1_ddrphy_timing {
10910a511ceSYann Gautier 	uint32_t ptr0;
11010a511ceSYann Gautier 	uint32_t ptr1;
11110a511ceSYann Gautier 	uint32_t ptr2;
11210a511ceSYann Gautier 	uint32_t dtpr0;
11310a511ceSYann Gautier 	uint32_t dtpr1;
11410a511ceSYann Gautier 	uint32_t dtpr2;
11510a511ceSYann Gautier 	uint32_t mr0;
11610a511ceSYann Gautier 	uint32_t mr1;
11710a511ceSYann Gautier 	uint32_t mr2;
11810a511ceSYann Gautier 	uint32_t mr3;
11910a511ceSYann Gautier };
12010a511ceSYann Gautier 
121*06e55dc8SNicolas Le Bayon struct stm32mp_ddr_config {
122*06e55dc8SNicolas Le Bayon 	struct stm32mp_ddr_info info;
12310a511ceSYann Gautier 	struct stm32mp1_ddrctrl_reg c_reg;
12410a511ceSYann Gautier 	struct stm32mp1_ddrctrl_timing c_timing;
12510a511ceSYann Gautier 	struct stm32mp1_ddrctrl_map c_map;
12610a511ceSYann Gautier 	struct stm32mp1_ddrctrl_perf c_perf;
12710a511ceSYann Gautier 	struct stm32mp1_ddrphy_reg p_reg;
12810a511ceSYann Gautier 	struct stm32mp1_ddrphy_timing p_timing;
12910a511ceSYann Gautier };
13010a511ceSYann Gautier 
131*06e55dc8SNicolas Le Bayon int stm32mp1_ddr_clk_enable(struct stm32mp_ddr_priv *priv, uint32_t mem_speed);
132*06e55dc8SNicolas Le Bayon void stm32mp1_ddr_init(struct stm32mp_ddr_priv *priv, struct stm32mp_ddr_config *config);
133*06e55dc8SNicolas Le Bayon 
134c3cf06f1SAntonio Nino Diaz #endif /* STM32MP1_DDR_H */
135