Browse Source
First commit to add support for SDRAM controller on Renesas RA SoC Signed-off-by: The Nguyen <the.nguyen.yf@renesas.com>pull/83293/head
7 changed files with 290 additions and 0 deletions
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
# Renesas RA Family |
||||
|
||||
# Copyright (c) 2024 Renesas Electronics Corporation |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
config MEMC_RENESAS_RA_SDRAM |
||||
bool "Renesas RA sdram controller" |
||||
default y |
||||
depends on DT_HAS_RENESAS_RA_SDRAM_ENABLED |
||||
select USE_RA_FSP_SDRAM |
||||
help |
||||
Enable Renesas RA sdram controller |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2024 Renesas Electronics Corporation |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
#define DT_DRV_COMPAT renesas_ra_sdram |
||||
|
||||
#include <zephyr/device.h> |
||||
#include <zephyr/drivers/pinctrl.h> |
||||
#include <zephyr/logging/log.h> |
||||
|
||||
LOG_MODULE_REGISTER(memc_renesas_ra_sdram, CONFIG_MEMC_LOG_LEVEL); |
||||
|
||||
struct memc_renesas_ra_sdram_config { |
||||
const struct pinctrl_dev_config *pincfg; |
||||
}; |
||||
|
||||
static int renesas_ra_sdram_init(const struct device *dev) |
||||
{ |
||||
const struct memc_renesas_ra_sdram_config *config = dev->config; |
||||
int err; |
||||
|
||||
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); |
||||
if (err) { |
||||
LOG_ERR("pin function initial failed"); |
||||
return err; |
||||
} |
||||
|
||||
R_BSP_SdramInit(true); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
PINCTRL_DT_INST_DEFINE(0); |
||||
static const struct memc_renesas_ra_sdram_config config = { |
||||
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(0), |
||||
}; |
||||
|
||||
DEVICE_DT_INST_DEFINE(0, renesas_ra_sdram_init, NULL, NULL, &config, POST_KERNEL, |
||||
CONFIG_MEMC_INIT_PRIORITY, NULL); |
@ -0,0 +1,130 @@
@@ -0,0 +1,130 @@
|
||||
# Copyright (c) 2024 Renesas Electronics Corporation |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
description: | |
||||
Renesas RA SDRAM controller. |
||||
sdram { |
||||
pinctrl-0 = <&sdram_default>; |
||||
pinctrl-names = "default"; |
||||
status = "okay"; |
||||
auto-refresh-interval = <10>; |
||||
auto-refresh-count = <8>; |
||||
precharge-cycle-count = <3>; |
||||
multiplex-addr-shift = "10-bit"; |
||||
edian-mode = "little-endian"; |
||||
continuous-access; |
||||
bus-width = "16-bit"; |
||||
bank@0 { |
||||
reg = <0>; |
||||
renesas,ra-sdram-timing = <RENESAS_RA_SDRAM_TRAS_6CYCLES |
||||
RENESAS_RA_SDRAM_TRCD_3CYCLES |
||||
RENESAS_RA_SDRAM_TRP_3CYCLES |
||||
RENESAS_RA_SDRAM_TWR_2CYCLES |
||||
RENESAS_RA_SDRAM_TCL_3CYCLES |
||||
937 |
||||
RENESAS_RA_SDRAM_TREFW_8CYCLES>; |
||||
}; |
||||
|
||||
Note that you will find definitions for the renesas,ra-sdram-control field at |
||||
dt-bindings/memory-controller/renesas,ra-sdram.h. This file is already included |
||||
in the SoC DeviceTree files. |
||||
|
||||
Finally, in order to make the memory available you will need to define new |
||||
memory device/s in DeviceTree: |
||||
|
||||
sdram1: sdram@68000000 { |
||||
compatible = "zephyr,memory-region", "mmio-sram"; |
||||
device_type = "memory"; |
||||
reg = <0x68000000 DT_SIZE_M(X)>; |
||||
zephyr,memory-region = "SDRAM"; |
||||
}; |
||||
|
||||
compatible: "renesas,ra-sdram" |
||||
|
||||
include: [base.yaml, pinctrl-device.yaml] |
||||
|
||||
properties: |
||||
"#address-cells": |
||||
required: true |
||||
const: 1 |
||||
|
||||
"#size-cells": |
||||
required: true |
||||
const: 0 |
||||
|
||||
pinctrl-0: |
||||
required: true |
||||
|
||||
pinctrl-names: |
||||
required: true |
||||
|
||||
auto-refresh-interval: |
||||
type: int |
||||
default: 10 |
||||
description: Number of auto-refresh-interval. |
||||
|
||||
auto-refresh-count: |
||||
type: int |
||||
default: 8 |
||||
description: Number of auto-refresh-count. |
||||
|
||||
precharge-cycle-count: |
||||
type: int |
||||
default: 3 |
||||
description: Number of precharge-cycle-count. |
||||
|
||||
multiplex-addr-shift: |
||||
type: string |
||||
default: "10-bit" |
||||
enum: |
||||
- "8-bit" |
||||
- "9-bit" |
||||
- "10-bit" |
||||
- "11-bit" |
||||
description: | |
||||
Select the size of the shift towards the lower half of the row address in row address/column |
||||
address multiplexing. |
||||
|
||||
edian-mode: |
||||
type: string |
||||
default: "little-endian" |
||||
enum: |
||||
- "little-endian" |
||||
- "big-endian" |
||||
description: Specifies the endianness for the SDRAM address space. |
||||
|
||||
continuous-access: |
||||
type: boolean |
||||
description: Enables or disables continuous access to the SDRAM access space. |
||||
|
||||
bus-width: |
||||
type: string |
||||
default: "16-bit" |
||||
enum: |
||||
- "16-bit" |
||||
- "32-bit" |
||||
- "8-bit" |
||||
description: Specify the data bus width for SDRAM |
||||
|
||||
child-binding: |
||||
description: SDRAM bank. |
||||
|
||||
properties: |
||||
reg: |
||||
type: int |
||||
required: true |
||||
|
||||
renesas,ra-sdram-timing: |
||||
type: array |
||||
required: true |
||||
description: | |
||||
SDRAM timing configuration. Expected fields, in order, are, |
||||
|
||||
- TRAS: Row active interval. The effective value from 1 to 7 cycles |
||||
- TRCD: Row column latency. The effective value from 1 to 4 cycles |
||||
- TRP: Row precharge interval. The effective value from 1 to 8 cycles |
||||
- TWR: Write recovery interval. The effective value from 1 to 2 cycles |
||||
- TCL: Column latency. The effective value from 1 to 3 cycles |
||||
- TRFC: Auto-Refresh Request Interval Setting. |
||||
- TREFW: Auto-Refresh Cycle/Self-Refresh Clearing Cycle Count Setting. |
||||
The effective value from 1 to 16 cycles |
@ -0,0 +1,99 @@
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2024 Renesas Electronics Corporation |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_MEMORY_CONTROLLER_RENESAS_RA_SDRAM_H_ |
||||
#define ZEPHYR_INCLUDE_DT_BINDINGS_MEMORY_CONTROLLER_RENESAS_RA_SDRAM_H_ |
||||
|
||||
#define SDRAM_TRAS_1CYCLES (1) |
||||
#define SDRAM_TRAS_2CYCLES (2) |
||||
#define SDRAM_TRAS_3CYCLES (3) |
||||
#define SDRAM_TRAS_4CYCLES (4) |
||||
#define SDRAM_TRAS_5CYCLES (5) |
||||
#define SDRAM_TRAS_6CYCLES (6) |
||||
#define SDRAM_TRAS_7CYCLES (7) |
||||
|
||||
#define SDRAM_TRCD_1CYCLES (1) |
||||
#define SDRAM_TRCD_2CYCLES (2) |
||||
#define SDRAM_TRCD_3CYCLES (3) |
||||
#define SDRAM_TRCD_4CYCLES (4) |
||||
|
||||
#define SDRAM_TRP_1CYCLES (1) |
||||
#define SDRAM_TRP_2CYCLES (2) |
||||
#define SDRAM_TRP_3CYCLES (3) |
||||
#define SDRAM_TRP_4CYCLES (4) |
||||
#define SDRAM_TRP_5CYCLES (5) |
||||
#define SDRAM_TRP_6CYCLES (6) |
||||
#define SDRAM_TRP_7CYCLES (7) |
||||
#define SDRAM_TRP_8CYCLES (8) |
||||
|
||||
#define SDRAM_TWR_1CYCLES (1) |
||||
#define SDRAM_TWR_2CYCLES (2) |
||||
|
||||
#define SDRAM_TCL_1CYCLES (1) |
||||
#define SDRAM_TCL_2CYCLES (2) |
||||
#define SDRAM_TCL_3CYCLES (3) |
||||
|
||||
#define SDRAM_TREFW_1CYCLES (1) |
||||
#define SDRAM_TREFW_2CYCLES (2) |
||||
#define SDRAM_TREFW_3CYCLES (3) |
||||
#define SDRAM_TREFW_4CYCLES (4) |
||||
#define SDRAM_TREFW_5CYCLES (5) |
||||
#define SDRAM_TREFW_6CYCLES (6) |
||||
#define SDRAM_TREFW_7CYCLES (7) |
||||
#define SDRAM_TREFW_8CYCLES (8) |
||||
#define SDRAM_TREFW_9CYCLES (9) |
||||
#define SDRAM_TREFW_10CYCLES (10) |
||||
#define SDRAM_TREFW_11CYCLES (11) |
||||
#define SDRAM_TREFW_12CYCLES (12) |
||||
#define SDRAM_TREFW_13CYCLES (13) |
||||
#define SDRAM_TREFW_14CYCLES (14) |
||||
#define SDRAM_TREFW_15CYCLES (15) |
||||
#define SDRAM_TREFW_16CYCLES (16) |
||||
|
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_3CYCLES (3) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_4CYCLES (4) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_5CYCLES (5) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_6CYCLES (6) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_7CYCLES (7) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_8CYCLES (8) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_9CYCLES (9) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_10CYCLES (10) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_11CYCLES (11) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_12CYCLES (12) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_13CYCLES (13) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_14CYCLES (14) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_15CYCLES (15) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_16CYCLES (16) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_17CYCLES (17) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_18CYCLES (18) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_19CYCLES (19) |
||||
#define SDRAM_AUTO_REFREDSH_INTERVEL_20CYCLES (20) |
||||
|
||||
#define SDRAM_AUTO_REFREDSH_COUNT_1TIMES (1) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_2TIMES (2) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_3TIMES (3) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_4TIMES (4) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_5TIMES (5) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_6TIMES (6) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_7TIMES (7) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_8TIMES (8) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_9TIMES (9) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_10TIMES (10) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_11TIMES (11) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_12TIMES (12) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_13TIMES (13) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_14TIMES (14) |
||||
#define SDRAM_AUTO_REFREDSH_COUNT_15TIMES (15) |
||||
|
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_3CYCLES (3) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_4CYCLES (4) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_5CYCLES (5) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_6CYCLES (6) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_7CYCLES (7) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_8CYCLES (8) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_9CYCLES (9) |
||||
#define SDRAM_AUTO_PRECHARGE_CYCLE_10CYCLES (10) |
||||
|
||||
#endif |
Loading…
Reference in new issue