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