1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 
7 #ifndef __BSP_DDR_H__
8 #define __BSP_DDR_H__
9 
10 /*******************************************************************************************************************//**
11  * @addtogroup BSP_MCU
12  * @{
13  **********************************************************************************************************************/
14 
15 /** @} (end addtogroup BSP_MCU) */
16 
17 /***********************************************************************************************************************
18  * Includes
19  **********************************************************************************************************************/
20 
21 /***********************************************************************************************************************
22  * Macro definitions
23  **********************************************************************************************************************/
24 #define BSP_DDR_PHY_BASE                     ((uintptr_t) 0x88000000)
25 
26 #define BPS_DDR_BASE_ADDR                    (0x200000000)
27 
28 #define BSP_DDR_RETENTION_1D_SIZE            (283)
29 #define BSP_DDR_RETENTION_2D_SIZE            (52)
30 #define BSP_DDR_RETENTION_CONTROLLER_SIZE    (4)
31 
32 #define BSP_DDR_INIT_ENABLE                  (1)
33 #define BSP_DDR_INIT_DISABLE                 (0)
34 
35 /***********************************************************************************************************************
36  * Exported global variables
37  **********************************************************************************************************************/
38 
39 /***********************************************************************************************************************
40  * Exported global functions (to be accessed by other files)
41  **********************************************************************************************************************/
42 extern void bsp_ddr_init(void);
43 
44 /*******************************************************************************************************************//**
45  * Executes bsp_mmio_write_32
46  *
47  * @param[in] addr          First argument
48  * @param[in] value         Second argument
49  **********************************************************************************************************************/
bsp_mmio_write_32(uintptr_t addr,uint32_t value)50 __STATIC_INLINE void bsp_mmio_write_32 (uintptr_t addr, uint32_t value)
51 {
52     *(volatile uint32_t *) addr = value;
53 }
54 
55 /*******************************************************************************************************************//**
56  * Executes bsp_mmio_read_32
57  *
58  * @param[in] addr          First argument
59  **********************************************************************************************************************/
bsp_mmio_read_32(uintptr_t addr)60 __STATIC_INLINE uint32_t bsp_mmio_read_32 (uintptr_t addr)
61 {
62     return *(volatile uint32_t *) addr;
63 }
64 
65 /*******************************************************************************************************************//**
66  * Executes bsp_ddrtop_mc_apb_wr
67  *
68  * @param[in] addr          First argument
69  * @param[in] data          Second argument
70  **********************************************************************************************************************/
bsp_ddrtop_mc_apb_wr(uint32_t addr,uint32_t data)71 __STATIC_INLINE void bsp_ddrtop_mc_apb_wr (uint32_t addr, uint32_t data)
72 {
73     bsp_mmio_write_32(R_DDRSS_BASE + (addr << 2), data);
74 }
75 
76 /*******************************************************************************************************************//**
77  * Executes bsp_dwc_ddrphy_apb_wr
78  *
79  * @param[in] addr          First argument
80  * @param[in] data          Second argument
81  **********************************************************************************************************************/
bsp_dwc_ddrphy_apb_wr(uint32_t addr,uint32_t data)82 __STATIC_INLINE void bsp_dwc_ddrphy_apb_wr (uint32_t addr, uint32_t data)
83 {
84     bsp_mmio_write_32(BSP_DDR_PHY_BASE + (addr << 2), data);
85 }
86 
87 /*******************************************************************************************************************//**
88  * Executes bsp_dwc_ddrphy_apb_rd
89  *
90  * @param[in] addr          First argument
91  **********************************************************************************************************************/
bsp_dwc_ddrphy_apb_rd(uint32_t addr)92 __STATIC_INLINE uint32_t bsp_dwc_ddrphy_apb_rd (uint32_t addr)
93 {
94     return bsp_mmio_read_32(BSP_DDR_PHY_BASE + (addr << 2));
95 }
96 
97 /***********************************************************************************************************************
98  * Typedef definitions
99  **********************************************************************************************************************/
100 
101 #if ((BSP_CLOCKS_PLL2_NORMAL != BSP_CFG_PLL2) && (1 == BSP_CFG_DDR_INIT_ENABLE))
102  #error "When using DDR, please set to 'PLL2 is released from standby state'"
103 #endif
104 
105 #endif                                 /*__BSP_DDR_H__*/
106