Skip to content

Commit 5e7bd25

Browse files
committed
boards: arm: fix generation of DDR4 memory section
What is the change? Split and redefine the DDR4 device tree nodes, in their respective board variants so that linker scripts automatically generates a memory section for each node. Why do we need this change? According to the official memory map of Corstone-320 available here: https://developer.arm.com/documentation/109760/0000/SSE-320-FVP/SSE-320-FVP-memory-map the non-secure world alias of DDR4 starts at 0x6000_0000 and the secure world alias starts at 0x7000_0000. Previously, the shared DDR4 node in mps4_common.dtsi listed multiple regions, but Zephyr generated a linker memory region **only** for the first address (0x6000_0000). This broke samples like `tflm_ethosu`, on Corstone-320, which expect DDR4 memory region to start at 0x7000_0000 for secure variants of the MPS4 board. Moving DDR4 definitions to per-board dts files ensures Zephyr creates correct memory regions for each variant. This also makes all the DDR4 regions available for applications to use not just the first (applications would otherwise have to use some linker magic to make those regions available in linker script). Signed-off-by: Sudan Landge <sudan.landge@arm.com>
1 parent f6493e8 commit 5e7bd25

File tree

5 files changed

+164
-15
lines changed

5 files changed

+164
-15
lines changed

boards/arm/mps4/mps4_common.dtsi

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,6 @@
9797
zephyr,memory-region = "NULL_PTR_DETECT";
9898
zephyr,memory-attr = <( DT_MEM_ARM(ATTR_MPU_FLASH) )>;
9999
};
100-
101-
/* DDR4 - 2G, alternates non-secure/secure every 256M */
102-
ddr4: memory@60000000 {
103-
device_type = "memory";
104-
compatible = "zephyr,memory-region";
105-
reg = <0x60000000 DT_SIZE_M(256)
106-
0x70000000 DT_SIZE_M(256)
107-
0x80000000 DT_SIZE_M(256)
108-
0x90000000 DT_SIZE_M(256)
109-
0xa0000000 DT_SIZE_M(256)
110-
0xb0000000 DT_SIZE_M(256)
111-
0xc0000000 DT_SIZE_M(256)
112-
0xd0000000 DT_SIZE_M(256)>;
113-
zephyr,memory-region = "DDR4";
114-
};
115100
};
116101

117102
&nvic {

boards/arm/mps4/mps4_corstone315_fvp.dts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,59 @@
8383
zephyr,memory-region = "ISRAM";
8484
};
8585

86+
/* The DDR4 node and zephyr,memory-region follow the naming convention
87+
* ddr4_$IDAUID_$SECURITY_FLAG except for the default region of board
88+
* which is named as "DDR4" to be compatible with existing
89+
* samples/tests that expect DDR4 node and region to be of the same name.
90+
*/
91+
ddr4_6_ns: memory@60000000 {
92+
compatible = "zephyr,memory-region";
93+
reg = <0x60000000 DT_SIZE_M(256)>;
94+
zephyr,memory-region = "DDR4_6_NS";
95+
};
96+
97+
ddr4: memory@70000000 {
98+
compatible = "zephyr,memory-region";
99+
reg = <0x70000000 DT_SIZE_M(256)>;
100+
zephyr,memory-region = "DDR4";
101+
};
102+
103+
ddr4_8_ns: memory@80000000 {
104+
compatible = "zephyr,memory-region";
105+
reg = <0x80000000 DT_SIZE_M(256)>;
106+
zephyr,memory-region = "DDR4_8_NS";
107+
};
108+
109+
ddr4_9_s: memory@90000000 {
110+
compatible = "zephyr,memory-region";
111+
reg = <0x90000000 DT_SIZE_M(256)>;
112+
zephyr,memory-region = "DDR4_9_S";
113+
};
114+
115+
ddr4_a_ns: memory@a0000000 {
116+
compatible = "zephyr,memory-region";
117+
reg = <0xa0000000 DT_SIZE_M(256)>;
118+
zephyr,memory-region = "DDR4_A_NS";
119+
};
120+
121+
ddr4_b_s: memory@b0000000 {
122+
compatible = "zephyr,memory-region";
123+
reg = <0xb0000000 DT_SIZE_M(256)>;
124+
zephyr,memory-region = "DDR4_B_S";
125+
};
126+
127+
ddr4_c_ns: memory@c0000000 {
128+
compatible = "zephyr,memory-region";
129+
reg = <0xc0000000 DT_SIZE_M(256)>;
130+
zephyr,memory-region = "DDR4_C_NS";
131+
};
132+
133+
ddr4_d_s: memory@d0000000 {
134+
compatible = "zephyr,memory-region";
135+
reg = <0xd0000000 DT_SIZE_M(256)>;
136+
zephyr,memory-region = "DDR4_D_S";
137+
};
138+
86139
soc {
87140
peripheral@50000000 {
88141
#address-cells = <1>;

boards/arm/mps4/mps4_corstone315_fvp_ns.dts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,35 @@
6868
zephyr,memory-region = "ISRAM";
6969
};
7070

71+
/* The DDR4 node and zephyr,memory-region follow the naming convention
72+
* ddr4_$IDAUID_$SECURITY_FLAG except for the default region of board
73+
* which is named as "DDR4" to be compatible with existing
74+
* samples/tests that expect DDR4 node and region to be of the same name.
75+
*/
76+
ddr4: memory@60000000 {
77+
compatible = "zephyr,memory-region";
78+
reg = <0x60000000 DT_SIZE_M(256)>;
79+
zephyr,memory-region = "DDR4";
80+
};
81+
82+
ddr4_8_ns: memory@80000000 {
83+
compatible = "zephyr,memory-region";
84+
reg = <0x80000000 DT_SIZE_M(256)>;
85+
zephyr,memory-region = "DDR4_8_NS";
86+
};
87+
88+
ddr4_a_ns: memory@a0000000 {
89+
compatible = "zephyr,memory-region";
90+
reg = <0xa0000000 DT_SIZE_M(256)>;
91+
zephyr,memory-region = "DDR4_A_NS";
92+
};
93+
94+
ddr4_c_ns: memory@c0000000 {
95+
compatible = "zephyr,memory-region";
96+
reg = <0xc0000000 DT_SIZE_M(256)>;
97+
zephyr,memory-region = "DDR4_C_NS";
98+
};
99+
71100
reserved-memory {
72101
#address-cells = <1>;
73102
#size-cells = <1>;

boards/arm/mps4/mps4_corstone320_fvp.dts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,59 @@
8383
zephyr,memory-region = "ISRAM";
8484
};
8585

86+
/* The DDR4 node and zephyr,memory-region follow the naming convention
87+
* ddr4_$IDAUID_$SECURITY_FLAG except for the default region of board
88+
* which is named as "DDR4" to be compatible with existing
89+
* samples/tests that expect DDR4 node and region to be of the same name.
90+
*/
91+
ddr4_6_ns: memory@60000000 {
92+
compatible = "zephyr,memory-region";
93+
reg = <0x60000000 DT_SIZE_M(256)>;
94+
zephyr,memory-region = "DDR4_6_NS";
95+
};
96+
97+
ddr4: memory@70000000 {
98+
compatible = "zephyr,memory-region";
99+
reg = <0x70000000 DT_SIZE_M(256)>;
100+
zephyr,memory-region = "DDR4";
101+
};
102+
103+
ddr4_8_ns: memory@80000000 {
104+
compatible = "zephyr,memory-region";
105+
reg = <0x80000000 DT_SIZE_M(256)>;
106+
zephyr,memory-region = "DDR4_8_NS";
107+
};
108+
109+
ddr4_9_s: memory@90000000 {
110+
compatible = "zephyr,memory-region";
111+
reg = <0x90000000 DT_SIZE_M(256)>;
112+
zephyr,memory-region = "DDR4_9_S";
113+
};
114+
115+
ddr4_a_ns: memory@a0000000 {
116+
compatible = "zephyr,memory-region";
117+
reg = <0xa0000000 DT_SIZE_M(256)>;
118+
zephyr,memory-region = "DDR4_A_NS";
119+
};
120+
121+
ddr4_b_s: memory@b0000000 {
122+
compatible = "zephyr,memory-region";
123+
reg = <0xb0000000 DT_SIZE_M(256)>;
124+
zephyr,memory-region = "DDR4_B_S";
125+
};
126+
127+
ddr4_c_ns: memory@c0000000 {
128+
compatible = "zephyr,memory-region";
129+
reg = <0xc0000000 DT_SIZE_M(256)>;
130+
zephyr,memory-region = "DDR4_C_NS";
131+
};
132+
133+
ddr4_d_s: memory@d0000000 {
134+
compatible = "zephyr,memory-region";
135+
reg = <0xd0000000 DT_SIZE_M(256)>;
136+
zephyr,memory-region = "DDR4_D_S";
137+
};
138+
86139
soc {
87140
peripheral@50000000 {
88141
#address-cells = <1>;

boards/arm/mps4/mps4_corstone320_fvp_ns.dts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,35 @@
6868
zephyr,memory-region = "ISRAM";
6969
};
7070

71+
/* The DDR4 node and zephyr,memory-region follow the naming convention
72+
* ddr4_$IDAUID_$SECURITY_FLAG except for the default region of board
73+
* which is named as "DDR4" to be compatible with existing
74+
* samples/tests that expect DDR4 node and region to be of the same name.
75+
*/
76+
ddr4: memory@60000000 {
77+
compatible = "zephyr,memory-region";
78+
reg = <0x60000000 DT_SIZE_M(256)>;
79+
zephyr,memory-region = "DDR4";
80+
};
81+
82+
ddr4_8_ns: memory@80000000 {
83+
compatible = "zephyr,memory-region";
84+
reg = <0x80000000 DT_SIZE_M(256)>;
85+
zephyr,memory-region = "DDR4_8_NS";
86+
};
87+
88+
ddr4_a_ns: memory@a0000000 {
89+
compatible = "zephyr,memory-region";
90+
reg = <0xa0000000 DT_SIZE_M(256)>;
91+
zephyr,memory-region = "DDR4_A_NS";
92+
};
93+
94+
ddr4_c_ns: memory@c0000000 {
95+
compatible = "zephyr,memory-region";
96+
reg = <0xc0000000 DT_SIZE_M(256)>;
97+
zephyr,memory-region = "DDR4_C_NS";
98+
};
99+
71100
reserved-memory {
72101
#address-cells = <1>;
73102
#size-cells = <1>;

0 commit comments

Comments
 (0)