On 09:25-20260212, Francesco Dolcini wrote: > Hello Suhaas, > > On Wed, Feb 11, 2026 at 04:43:28PM +0530, Suhaas Joshi wrote: > > `dram_init()` is called by R5 SPL and U-Boot, both. It starts by > > computing the size of the RAM. In verdin-am62(p), it does so by calling > > `get_ram_size()`. This function computes the size of the RAM by writing > > over the RAM. > > > > When R5 computes the size of the RAM, it does not update the DT with > > this size. As a result, when A53 invokes `dram_init()` again, it has to > > compute the size through `get_ram_size()` again. > > > > Commit 13c54cf588d82 and 0c3a6f748c9 add firewall over ATF's and OPTEE's > > regions. This firewall is added during the R5 SPL stage of boot. So when > > A53 attempts to write over RAM in `get_ram_size()`, it writes over the > > protected region. Since A53 is a non-secure core, this is blocked by the > > firewall. > > > > To fix this, do the following: > > * Implement `spl_perform_board_fixups()` function for verdin-am62 > > and verdin-am62p. Make this function call `fixup_memory_node()`, > > which updates the DT. > > * Add an if-block in `dram_init()`, to ensure that only R5 is able > > to call `get_ram_size()`, and that A53 reads this size from the > > DT. > > > > Signed-off-by: Suhaas Joshi <[email protected]> > > I was able to test it on a verdin am62, with 1GB of RAM, and it works as > expected. I also agree that get_ram_size() should be called only on the > R5 SPL. > > There is a small change that I would do however, please see the inline > comment in the code. > > Tested-by: Francesco Dolcini <[email protected]> # Verdin AM62 > > > > --- > > board/toradex/verdin-am62/verdin-am62.c | 10 ++++++++++ > > board/toradex/verdin-am62p/verdin-am62p.c | 11 +++++++++++ > > 2 files changed, 21 insertions(+) > > > > diff --git a/board/toradex/verdin-am62/verdin-am62.c > > b/board/toradex/verdin-am62/verdin-am62.c > > index 069aa6c7909..1aa106afbd9 100644 > > --- a/board/toradex/verdin-am62/verdin-am62.c > > +++ b/board/toradex/verdin-am62/verdin-am62.c > > @@ -24,6 +24,9 @@ DECLARE_GLOBAL_DATA_PTR; > > > > int dram_init(void) > > { > > + if (!IS_ENABLED(CONFIG_CPU_V7R)) > > + return fdtdec_setup_mem_size_base(); > > change this to > > if (!IS_ENABLED(CONFIG_TARGET_VERDIN_AM62_R5) || > !IS_ENABLED(CONFIG_SPL_BUILD)) > > this way is clear that we want the get_ram_size() only on R5 SPL. It > will make the code and the intention more clear, with no changes on the > generated code. > > > diff --git a/board/toradex/verdin-am62p/verdin-am62p.c > > b/board/toradex/verdin-am62p/verdin-am62p.c > > index 7c631f380ff..12693c1a46b 100644 > > --- a/board/toradex/verdin-am62p/verdin-am62p.c > > +++ b/board/toradex/verdin-am62p/verdin-am62p.c > > @@ -18,6 +18,7 @@ > > #include <k3-ddrss.h> > > #include <spl.h> > > #include <linux/sizes.h> > > +#include <mach/k3-ddr.h> > > > > #include "../common/tdx-cfg-block.h" > > > > @@ -57,6 +58,9 @@ static void read_hw_cfg(void) > > > > int dram_init(void) > > { > > + if (!IS_ENABLED(CONFIG_CPU_V7R)) > > + return fdtdec_setup_mem_size_base(); > > same comment here > > if (!IS_ENABLED(CONFIG_TARGET_VERDIN_AM62P_R5) || > !IS_ENABLED(CONFIG_SPL_BUILD)) > > with these 2 small changes also add > > Reviewed-by: Francesco Dolcini <[email protected]>
Done, I have sent the v2: https://lore.kernel.org/u-boot/[email protected]/T/#t Do let me know if there are any other issues in v2. Thanks for testing this out. Regards Suhaas > > Thanks for the support on solving this regression. > > Francesco >

