Re: [PATCh v3 06/14] ASoC: rsnd: Add RZ/G3E DMA address calculation support

From: Kuninori Morimoto

Date: Mon Apr 06 2026 - 20:44:40 EST



Hi John, again

> RZ/G3E has different DMA register base addresses and offset
> calculations compared to R-Car platforms.
>
> Add dedicated rsnd_rzg3e_dma_addr() function with dispatch from
> rsnd_dma_addr(), following the existing per-generation pattern.
>
> Signed-off-by: John Madieu <john.madieu.xa@xxxxxxxxxxxxxx>
> ---
(snip)
> +struct rsnd_dma_addr {
> + dma_addr_t out_addr;
> + dma_addr_t in_addr;
> +};
> +
> static dma_addr_t
> -rsnd_gen2_dma_addr(struct rsnd_dai_stream *io,
> - struct rsnd_mod *mod,
> - int is_play, int is_from)
> +rsnd_dma_addr_lookup(struct rsnd_dai_stream *io,
> + struct rsnd_mod *mod,
> + const struct rsnd_dma_addr tbl[3][2][3],
> + int is_play, int is_from)

Here, it is using raw [3][2][3] array as param.
I think it is good timing to create new struct for it, and use its pointer ?
Something like...

struct rsnd_dma_addr {
dma_addr_t out_addr;
dma_addr_t in_addr;
};

struct rsnd_dma_addr_dir {
struct rsnd_dma_addr capture[3];
struct rsnd_dma_addr platback[3];
};

struct rsnd_dma_addr_map {
struct rsnd_dma_addr_dir src;
struct rsnd_dma_addr_dri ssi;
struct rsnd_dma_addr_dir ssui;
};

> - } dma_addrs[3][2][3] = {
> + const struct rsnd_dma_addr tbl[3][2][3] = {
> + /* SRC */
> + /* Capture */
> + {{{ 0, 0, },
> + { RDMA_SRC_O_N_G3E(src, id), RDMA_SRC_I_P_G3E(src, id) },
> + { RDMA_CMD_O_N_G3E(src, id), RDMA_SRC_I_P_G3E(src, id) } },
> + /* Playback */
> + {{ 0, 0 },
> + { RDMA_SRC_O_P_G3E(src, id), RDMA_SRC_I_N_G3E(src, id) },
> + { RDMA_CMD_O_P_G3E(src, id), RDMA_SRC_I_N_G3E(src, id) } }
> + },
> + /* SSI */
> + /* Capture */
> + {{{ RDMA_SSI_O_N_G3E(ssi, id), 0 },
> + { RDMA_SSIU_O_P_G3E(ssi, id, busif), 0 },
> + { RDMA_SSIU_O_P_G3E(ssi, id, busif), 0 } },
> + /* Playback */
> + {{ 0, RDMA_SSI_I_N_G3E(ssi, id) },
> + { 0, RDMA_SSIU_I_P_G3E(ssi, id, busif) },
> + { 0, RDMA_SSIU_I_P_G3E(ssi, id, busif) } }
> + },
> + /* SSIU */
> + /* Capture */
> + {{{ RDMA_SSIU_O_N_G3E(ssi, id, busif), 0 },
> + { RDMA_SSIU_O_P_G3E(ssi, id, busif), 0 },
> + { RDMA_SSIU_O_P_G3E(ssi, id, busif), 0 } },
> + /* Playback */
> + {{ 0, RDMA_SSIU_I_N_G3E(ssi, id, busif) },
> + { 0, RDMA_SSIU_I_P_G3E(ssi, id, busif) },
> + { 0, RDMA_SSIU_I_P_G3E(ssi, id, busif) } } },
> + };

Thank you for your help !!

Best regards
---
Kuninori Morimoto