Skip to content

Commit ee04db8

Browse files
thenguyenyfjhedberg
authored andcommitted
drivers: memc: enable support for SDRAM controller on Renesas RA family
First commit to add support for SDRAM controller on Renesas RA SoC Signed-off-by: The Nguyen <[email protected]>
1 parent 427a9a5 commit ee04db8

File tree

7 files changed

+290
-0
lines changed

7 files changed

+290
-0
lines changed

drivers/memc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ zephyr_library_sources_ifdef(CONFIG_MEMC_MCUX_FLEXSPI_APS6408L memc_mcux_flexspi
1414
zephyr_library_sources_ifdef(CONFIG_MEMC_MCUX_FLEXSPI_APS6404L memc_mcux_flexspi_aps6404l.c)
1515
zephyr_library_sources_ifdef(CONFIG_MEMC_MCUX_FLEXSPI_IS66WVQ8M4 memc_mcux_flexspi_is66wvq8m4.c)
1616
zephyr_library_sources_ifdef(CONFIG_MEMC_NXP_FLEXRAM memc_nxp_flexram.c)
17+
zephyr_library_sources_ifdef(CONFIG_MEMC_RENESAS_RA_SDRAM memc_renesas_ra_sdram.c)
1718

1819
zephyr_library_sources_ifdef(CONFIG_MEMC_SAM_SMC memc_sam_smc.c)
1920

drivers/memc/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ source "drivers/memc/Kconfig.smartbond"
3232

3333
source "drivers/memc/Kconfig.mspi"
3434

35+
source "drivers/memc/Kconfig.renesas_ra"
36+
3537
module = MEMC
3638
module-str = memc
3739
source "subsys/logging/Kconfig.template.log_config"

drivers/memc/Kconfig.renesas_ra

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Renesas RA Family
2+
3+
# Copyright (c) 2024 Renesas Electronics Corporation
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
config MEMC_RENESAS_RA_SDRAM
7+
bool "Renesas RA sdram controller"
8+
default y
9+
depends on DT_HAS_RENESAS_RA_SDRAM_ENABLED
10+
select USE_RA_FSP_SDRAM
11+
help
12+
Enable Renesas RA sdram controller

drivers/memc/memc_renesas_ra_sdram.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (c) 2024 Renesas Electronics Corporation
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#define DT_DRV_COMPAT renesas_ra_sdram
8+
9+
#include <zephyr/device.h>
10+
#include <zephyr/drivers/pinctrl.h>
11+
#include <zephyr/logging/log.h>
12+
13+
LOG_MODULE_REGISTER(memc_renesas_ra_sdram, CONFIG_MEMC_LOG_LEVEL);
14+
15+
struct memc_renesas_ra_sdram_config {
16+
const struct pinctrl_dev_config *pincfg;
17+
};
18+
19+
static int renesas_ra_sdram_init(const struct device *dev)
20+
{
21+
const struct memc_renesas_ra_sdram_config *config = dev->config;
22+
int err;
23+
24+
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
25+
if (err) {
26+
LOG_ERR("pin function initial failed");
27+
return err;
28+
}
29+
30+
R_BSP_SdramInit(true);
31+
32+
return 0;
33+
}
34+
35+
PINCTRL_DT_INST_DEFINE(0);
36+
static const struct memc_renesas_ra_sdram_config config = {
37+
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(0),
38+
};
39+
40+
DEVICE_DT_INST_DEFINE(0, renesas_ra_sdram_init, NULL, NULL, &config, POST_KERNEL,
41+
CONFIG_MEMC_INIT_PRIORITY, NULL);
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# Copyright (c) 2024 Renesas Electronics Corporation
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: |
5+
Renesas RA SDRAM controller.
6+
sdram {
7+
pinctrl-0 = <&sdram_default>;
8+
pinctrl-names = "default";
9+
status = "okay";
10+
auto-refresh-interval = <10>;
11+
auto-refresh-count = <8>;
12+
precharge-cycle-count = <3>;
13+
multiplex-addr-shift = "10-bit";
14+
edian-mode = "little-endian";
15+
continuous-access;
16+
bus-width = "16-bit";
17+
bank@0 {
18+
reg = <0>;
19+
renesas,ra-sdram-timing = <RENESAS_RA_SDRAM_TRAS_6CYCLES
20+
RENESAS_RA_SDRAM_TRCD_3CYCLES
21+
RENESAS_RA_SDRAM_TRP_3CYCLES
22+
RENESAS_RA_SDRAM_TWR_2CYCLES
23+
RENESAS_RA_SDRAM_TCL_3CYCLES
24+
937
25+
RENESAS_RA_SDRAM_TREFW_8CYCLES>;
26+
};
27+
28+
Note that you will find definitions for the renesas,ra-sdram-control field at
29+
dt-bindings/memory-controller/renesas,ra-sdram.h. This file is already included
30+
in the SoC DeviceTree files.
31+
32+
Finally, in order to make the memory available you will need to define new
33+
memory device/s in DeviceTree:
34+
35+
sdram1: sdram@68000000 {
36+
compatible = "zephyr,memory-region", "mmio-sram";
37+
device_type = "memory";
38+
reg = <0x68000000 DT_SIZE_M(X)>;
39+
zephyr,memory-region = "SDRAM";
40+
};
41+
42+
compatible: "renesas,ra-sdram"
43+
44+
include: [base.yaml, pinctrl-device.yaml]
45+
46+
properties:
47+
"#address-cells":
48+
required: true
49+
const: 1
50+
51+
"#size-cells":
52+
required: true
53+
const: 0
54+
55+
pinctrl-0:
56+
required: true
57+
58+
pinctrl-names:
59+
required: true
60+
61+
auto-refresh-interval:
62+
type: int
63+
default: 10
64+
description: Number of auto-refresh-interval.
65+
66+
auto-refresh-count:
67+
type: int
68+
default: 8
69+
description: Number of auto-refresh-count.
70+
71+
precharge-cycle-count:
72+
type: int
73+
default: 3
74+
description: Number of precharge-cycle-count.
75+
76+
multiplex-addr-shift:
77+
type: string
78+
default: "10-bit"
79+
enum:
80+
- "8-bit"
81+
- "9-bit"
82+
- "10-bit"
83+
- "11-bit"
84+
description: |
85+
Select the size of the shift towards the lower half of the row address in row address/column
86+
address multiplexing.
87+
88+
edian-mode:
89+
type: string
90+
default: "little-endian"
91+
enum:
92+
- "little-endian"
93+
- "big-endian"
94+
description: Specifies the endianness for the SDRAM address space.
95+
96+
continuous-access:
97+
type: boolean
98+
description: Enables or disables continuous access to the SDRAM access space.
99+
100+
bus-width:
101+
type: string
102+
default: "16-bit"
103+
enum:
104+
- "16-bit"
105+
- "32-bit"
106+
- "8-bit"
107+
description: Specify the data bus width for SDRAM
108+
109+
child-binding:
110+
description: SDRAM bank.
111+
112+
properties:
113+
reg:
114+
type: int
115+
required: true
116+
117+
renesas,ra-sdram-timing:
118+
type: array
119+
required: true
120+
description: |
121+
SDRAM timing configuration. Expected fields, in order, are,
122+
123+
- TRAS: Row active interval. The effective value from 1 to 7 cycles
124+
- TRCD: Row column latency. The effective value from 1 to 4 cycles
125+
- TRP: Row precharge interval. The effective value from 1 to 8 cycles
126+
- TWR: Write recovery interval. The effective value from 1 to 2 cycles
127+
- TCL: Column latency. The effective value from 1 to 3 cycles
128+
- TRFC: Auto-Refresh Request Interval Setting.
129+
- TREFW: Auto-Refresh Cycle/Self-Refresh Clearing Cycle Count Setting.
130+
The effective value from 1 to 16 cycles
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright (c) 2024 Renesas Electronics Corporation
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_MEMORY_CONTROLLER_RENESAS_RA_SDRAM_H_
7+
#define ZEPHYR_INCLUDE_DT_BINDINGS_MEMORY_CONTROLLER_RENESAS_RA_SDRAM_H_
8+
9+
#define SDRAM_TRAS_1CYCLES (1)
10+
#define SDRAM_TRAS_2CYCLES (2)
11+
#define SDRAM_TRAS_3CYCLES (3)
12+
#define SDRAM_TRAS_4CYCLES (4)
13+
#define SDRAM_TRAS_5CYCLES (5)
14+
#define SDRAM_TRAS_6CYCLES (6)
15+
#define SDRAM_TRAS_7CYCLES (7)
16+
17+
#define SDRAM_TRCD_1CYCLES (1)
18+
#define SDRAM_TRCD_2CYCLES (2)
19+
#define SDRAM_TRCD_3CYCLES (3)
20+
#define SDRAM_TRCD_4CYCLES (4)
21+
22+
#define SDRAM_TRP_1CYCLES (1)
23+
#define SDRAM_TRP_2CYCLES (2)
24+
#define SDRAM_TRP_3CYCLES (3)
25+
#define SDRAM_TRP_4CYCLES (4)
26+
#define SDRAM_TRP_5CYCLES (5)
27+
#define SDRAM_TRP_6CYCLES (6)
28+
#define SDRAM_TRP_7CYCLES (7)
29+
#define SDRAM_TRP_8CYCLES (8)
30+
31+
#define SDRAM_TWR_1CYCLES (1)
32+
#define SDRAM_TWR_2CYCLES (2)
33+
34+
#define SDRAM_TCL_1CYCLES (1)
35+
#define SDRAM_TCL_2CYCLES (2)
36+
#define SDRAM_TCL_3CYCLES (3)
37+
38+
#define SDRAM_TREFW_1CYCLES (1)
39+
#define SDRAM_TREFW_2CYCLES (2)
40+
#define SDRAM_TREFW_3CYCLES (3)
41+
#define SDRAM_TREFW_4CYCLES (4)
42+
#define SDRAM_TREFW_5CYCLES (5)
43+
#define SDRAM_TREFW_6CYCLES (6)
44+
#define SDRAM_TREFW_7CYCLES (7)
45+
#define SDRAM_TREFW_8CYCLES (8)
46+
#define SDRAM_TREFW_9CYCLES (9)
47+
#define SDRAM_TREFW_10CYCLES (10)
48+
#define SDRAM_TREFW_11CYCLES (11)
49+
#define SDRAM_TREFW_12CYCLES (12)
50+
#define SDRAM_TREFW_13CYCLES (13)
51+
#define SDRAM_TREFW_14CYCLES (14)
52+
#define SDRAM_TREFW_15CYCLES (15)
53+
#define SDRAM_TREFW_16CYCLES (16)
54+
55+
#define SDRAM_AUTO_REFREDSH_INTERVEL_3CYCLES (3)
56+
#define SDRAM_AUTO_REFREDSH_INTERVEL_4CYCLES (4)
57+
#define SDRAM_AUTO_REFREDSH_INTERVEL_5CYCLES (5)
58+
#define SDRAM_AUTO_REFREDSH_INTERVEL_6CYCLES (6)
59+
#define SDRAM_AUTO_REFREDSH_INTERVEL_7CYCLES (7)
60+
#define SDRAM_AUTO_REFREDSH_INTERVEL_8CYCLES (8)
61+
#define SDRAM_AUTO_REFREDSH_INTERVEL_9CYCLES (9)
62+
#define SDRAM_AUTO_REFREDSH_INTERVEL_10CYCLES (10)
63+
#define SDRAM_AUTO_REFREDSH_INTERVEL_11CYCLES (11)
64+
#define SDRAM_AUTO_REFREDSH_INTERVEL_12CYCLES (12)
65+
#define SDRAM_AUTO_REFREDSH_INTERVEL_13CYCLES (13)
66+
#define SDRAM_AUTO_REFREDSH_INTERVEL_14CYCLES (14)
67+
#define SDRAM_AUTO_REFREDSH_INTERVEL_15CYCLES (15)
68+
#define SDRAM_AUTO_REFREDSH_INTERVEL_16CYCLES (16)
69+
#define SDRAM_AUTO_REFREDSH_INTERVEL_17CYCLES (17)
70+
#define SDRAM_AUTO_REFREDSH_INTERVEL_18CYCLES (18)
71+
#define SDRAM_AUTO_REFREDSH_INTERVEL_19CYCLES (19)
72+
#define SDRAM_AUTO_REFREDSH_INTERVEL_20CYCLES (20)
73+
74+
#define SDRAM_AUTO_REFREDSH_COUNT_1TIMES (1)
75+
#define SDRAM_AUTO_REFREDSH_COUNT_2TIMES (2)
76+
#define SDRAM_AUTO_REFREDSH_COUNT_3TIMES (3)
77+
#define SDRAM_AUTO_REFREDSH_COUNT_4TIMES (4)
78+
#define SDRAM_AUTO_REFREDSH_COUNT_5TIMES (5)
79+
#define SDRAM_AUTO_REFREDSH_COUNT_6TIMES (6)
80+
#define SDRAM_AUTO_REFREDSH_COUNT_7TIMES (7)
81+
#define SDRAM_AUTO_REFREDSH_COUNT_8TIMES (8)
82+
#define SDRAM_AUTO_REFREDSH_COUNT_9TIMES (9)
83+
#define SDRAM_AUTO_REFREDSH_COUNT_10TIMES (10)
84+
#define SDRAM_AUTO_REFREDSH_COUNT_11TIMES (11)
85+
#define SDRAM_AUTO_REFREDSH_COUNT_12TIMES (12)
86+
#define SDRAM_AUTO_REFREDSH_COUNT_13TIMES (13)
87+
#define SDRAM_AUTO_REFREDSH_COUNT_14TIMES (14)
88+
#define SDRAM_AUTO_REFREDSH_COUNT_15TIMES (15)
89+
90+
#define SDRAM_AUTO_PRECHARGE_CYCLE_3CYCLES (3)
91+
#define SDRAM_AUTO_PRECHARGE_CYCLE_4CYCLES (4)
92+
#define SDRAM_AUTO_PRECHARGE_CYCLE_5CYCLES (5)
93+
#define SDRAM_AUTO_PRECHARGE_CYCLE_6CYCLES (6)
94+
#define SDRAM_AUTO_PRECHARGE_CYCLE_7CYCLES (7)
95+
#define SDRAM_AUTO_PRECHARGE_CYCLE_8CYCLES (8)
96+
#define SDRAM_AUTO_PRECHARGE_CYCLE_9CYCLES (9)
97+
#define SDRAM_AUTO_PRECHARGE_CYCLE_10CYCLES (10)
98+
99+
#endif

modules/Kconfig.renesas_fsp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ config USE_RA_FSP_USB_DEVICE
115115
help
116116
Enable RA FSP USB Device Controller driver
117117

118+
config USE_RA_FSP_SDRAM
119+
bool
120+
help
121+
Enable RA FSP SDRAM support
122+
118123
endif # HAS_RENESAS_RA_FSP
119124

120125
if HAS_RENESAS_RZ_FSP

0 commit comments

Comments
 (0)