[PATCH v5 08/10] board: schneider: add RZN1 board support

Ralph Siemsen ralph.siemsen at linaro.org
Mon May 8 20:23:25 CEST 2023

On Sun, May 07, 2023 at 06:06:40PM +0200, Marek Vasut wrote:
>On 4/24/23 03:15, Ralph Siemsen wrote:
>>Add support for Schneider Electronics RZ/N1D and RZ/N1S boards, which
>>are based on the Reneasas RZ/N1 SoC devices.
>>The intention is to support both boards using a single defconfig, and to
>>handle the differences at runtime.
>The DT comes from Linux kernel, right ? Please include commit ID from 
>which the DT is imported in the commit message, I suspect that would 
>be Linux 6.3 commit ID.

Yes, the DT is copied verbatim from Linux. I have updated the commit 
message to mention 6.3 and include the hash. (There have been no changes 

>>diff --git a/board/schneider/rzn1-snarc/ddr_async.c b/board/schneider/rzn1-snarc/ddr_async.c
>>new file mode 100644
>>index 0000000000..4b4c280e45
>>--- /dev/null
>>+++ b/board/schneider/rzn1-snarc/ddr_async.c
>Please correct me if I'm wrong, but shouldn't this be in drivers/ram/ ?

I had it there originally, but moved it in v5 of the patch series. There 
is a lot of board-specific (or at least architecture-specific) logic in 
this file. For example the sequence of steps to setup the clocks and 
interconnect, prior to bringing the DDR controller out of reset. This 
depends on choices made by the RZ/N1 designers, rather than the CDNS IP 
that drivers/ram/cadence is aiming to cover.

Likewise for some board-specific PHY settings, and choices such as 
operating in async mode.

I moved it to board-specific directory as an interim step. Hopefully we 
can do some consolidation of the multiple CDNS DDR controller 
implementations, and then figure out the right way to split things up.

For now this seemed like the less-bad option.

>>+	/* Step 15 Wait for 200us or more, or wait for DFIINITCOMPLETE to be "1" */
>>+	while (!(phy_readl(DLLCTRL) & DLLCTRL_ASDLLOCK))
>>+		;
>Please avoid endless loops, use readl_poll_timeout() or 
>wait_for_bit*() where possible.

Will do.

>>+int board_init(void)
>>+	/*
>>+	 * Initial values for gd->ram_base and gd->ram_size
>>+	 * are obtained from the "/memory" node in devicetree.
>>+	 * The size will be updated in later when probing DDR.
>>+	 */
>>+	fdtdec_setup_mem_size_base();
>Are you absolutely sure this call ^ is needed at all ?

I was sure at the time when I wrote it, however I just tried removing it 
now and it seems to work fine.

>You can just do this here:
>err = uclass...();
>if (err)
>  debug(...);
>return err;


>>+#ifndef __RZN1_H
>Better use __RZN1_SNARC_H , so that when other boards get added, there 
>won't be trouble.

Good catch, done.


More information about the U-Boot mailing list