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