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 @@ |
|||||||
|
# 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 @@ |
|||||||
|
/*
|
||||||
|
* 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 @@ |
|||||||
|
# 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 @@ |
|||||||
|
/*
|
||||||
|
* 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