From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D3A2275B15 for ; Wed, 15 Apr 2026 12:47:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257261; cv=none; b=qYtsQo1MVVyQHd8oOQJwPZv9bL2OPSJpoGDIiDdz/NOBpPerT8XRYlf5j1RPjsF4lL10WB9xPYz9NOSJ/IzALIbXDdUaTfK2sYE6JNwrF0Bgjr8rwHbRnkBXnEXivVfPTpkW86gzmJBpcPkyaFDTCVo/kNixxV1zud1iHx/oTzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257261; c=relaxed/simple; bh=u99Ba/jfyWxfXzOVagVNrWOkCLQIkW/ZMylkvPL7NaA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=URAA+HWQJikIfQonc/YGMCHgroXLQAeW8xxugJYPUkIcuU58M7o14RafsmvcK6Kz2GqIWk9ROWFw+ks1sIxclKRxJOLktid+IDN8M3HKahKkjfXpSlsdTAY2ha04i7M0qm0cKAJ/8VEZiCTIs6LoZUAt4dOhHEldxu4baZZ5Ya0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=tEJ5AWLj; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tEJ5AWLj" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43d6fbd0954so2888278f8f.1 for ; Wed, 15 Apr 2026 05:47:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257256; x=1776862056; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xKgDJWomLvf9lU2SYAd3bGigAESYIyH8ynZXMmseh3A=; b=tEJ5AWLjAz+CZKhnF4K3HzQXdE7eWt+GepHqfBgx20z44yNly04Q8eNHir88g3tn5o fnQcGWMniUtiENlJ/dpJW3H6Hm/2KgHPuK4o8Lu/+5il4UUxSffyFH1PDb1ZWVfurGPv bMqSUhXLllAeSv78zCVJEbkjrBt2gT48+Ej6AnsySKeQbCt712JTk6wYEAann5zzRT4I XOXrq8OoszHXyJJC4NjF7st6xzd2nbHFksoWIo0azNHlONFiDa0bLoY241TlTw2ZqjfH LSrx+lMhwpsZ6ggt5OFLONbBtxLVNR7eVueOaHmW/IU4o6SKO/vzHMFP2i2HJDjMz5Sc S7NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257256; x=1776862056; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=xKgDJWomLvf9lU2SYAd3bGigAESYIyH8ynZXMmseh3A=; b=mKkFoC+DRNNU30p6y0G7bV3RTvcJ8bAQuTRA/6+CblLI5JlI0J9yC/qnAyS2YaFe1i +1O7RgMBn3TxqGup6nG89nS2Rtw/559jZar9ZIASIIhOOFZDCIOv7j+xV/Eeo0cD+0Fo 0rYqaw2Tlj5F/D+d3jJkKP8LN6ioczqrGEUckhPSeqYS3hIJsTRl4BsMmfv+tj4eGtSF K6EU+gvWbNLktgdtzCZJ4dhHNhkQvU0BcmNz/ZbOaPtFULRMG4uqHX4O21X7gnl89SXf jjezozRJ00iw9ncK9vgLOJy+gZywfbhYOtby3xGpSFj2+nKPjCrn4hlugVCbjeZOC1mI Wumw== X-Forwarded-Encrypted: i=1; AFNElJ+p9dtBXTw4OXut9Qe1oVVZdliQ9UYV2QVP5SBOUS0x6leJZrn5giHlIF+IszFnbTO+9iM9mTZ/cE1GbvE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1ugkcVFLF/FHywEEpJIFZzfLIC7AjAFTPzFadv/TRustR8n4k 8pu9jYJa1YeA55/4trQBPNhhqUqQncG/0OgIfocu9kerLb0AS14VZ9V0 X-Gm-Gg: AeBDietnarIpHBTX720n7y2yUvWh1bbAyp3+RNe/SHMu30bN3GFwqeLdufvL+jgtFx3 xOPPyNe0ElDBNfPb6MseN+YQEIB3aiDqVDTORrfM5RtYY63yPCyZ3Io9wBAN4FE9dR+uTpEgKaO YIgvz8iLGFr85afKOtpZ+cK1YFjJWybKOHtrXPYAA3+L1FERyVRZWjakKhH+G6s0LdLnadzRA1p Q3rrmYDYXxnpM2DNGXEPS9kZBtXy5J4Q2+DZeUULL8Re6plI1KFO/83rEVcfPJXeTa0gsN45Wdb RreBiJ9S322QSsVqdkPc9RnBwj1VgxqEE1W2IpyB+F8ksC254MAjsNxavgI30X5eSLN5r1yAbC+ 9UcGr7vdTOgMT0Y4eyjCwuUnPk1oq2lY6BmjNy1EtT02NZcWGiLOg2a/PnfO5/RYd8uA2KHDFSd W12vIgRTNd6Uc42tT7XxFwHyjDsTPeG+RFRFLyug== X-Received: by 2002:a05:6000:220b:b0:43d:30b4:1859 with SMTP id ffacd0b85a97d-43d64235cf5mr31995415f8f.7.1776257256294; Wed, 15 Apr 2026 05:47:36 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:35 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 01/14] ASoC: dt-bindings: sound: Add DT binding for RZ/G3E sound Date: Wed, 15 Apr 2026 12:47:18 +0000 Message-Id: <20260415124731.3684773-2-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a standalone device tree binding for the Renesas RZ/G3E (R9A09G047) sound controller. The RZ/G3E sound IP is based on R-Car Sound but differs in several ways: - Uses unprefixed sub-node names (ssi, ssiu, src, dvc, mix, ctu) instead of R-Car's rcar_sound,xxx prefixed names. - Supports up to 5 DMA controllers per direction, allowing multiple DMA entries with repeated channel names in SSIU, SRC and DVC sub-nodes. - Has 47 clocks including per-SSI ADG clocks (adg.ssi.0-9), SCU clocks (scu, scu_x2, scu_supply), SSIF supply clock, AUDMAC peri-peri clock, and ADG clock. - Has 14 reset lines including SCU, ADG and AUDMAC peri-peri resets. - SSI operates exclusively in BUSIF mode. These differences make the RZ/G3E binding incompatible with the existing renesas,rsnd.yaml, so it is added as a separate standalone binding with its own $ref to dai-common.yaml. Signed-off-by: John Madieu --- Changes: =20 v5: - Drop the two-patch rsnd.yaml split approach from v4. Replace with a single self-contained standalone binding that does not touch renesas,rsnd.yaml at all. - Remove select: false, redundant blanket properties (compatible: true, reg: true, etc.) and pointless patternProperties per Krzystof's review - Add missing #clock-cells and #sound-dai-cells constraints - Add hardware description text instead of "Binding for ..." phrasing - Move G3E-specific DMA comment into the binding itself rather than relying on a shared schema - Use unprefixed sub-node names (ssi, ssiu, src, dvc, mix, ctu) to reflect the actual RZ/G3E DT binding v4: No changes v3: No changes v2: - Introduce RZ/G3E sound binding as a standalone schema .../sound/renesas,r9a09g047-sound.yaml | 770 ++++++++++++++++++ 1 file changed, 770 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/renesas,r9a09g0= 47-sound.yaml diff --git a/Documentation/devicetree/bindings/sound/renesas,r9a09g047-soun= d.yaml b/Documentation/devicetree/bindings/sound/renesas,r9a09g047-sound.ya= ml new file mode 100644 index 000000000000..b7e5348636bb --- /dev/null +++ b/Documentation/devicetree/bindings/sound/renesas,r9a09g047-sound.yaml @@ -0,0 +1,770 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/renesas,r9a09g047-sound.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas RZ/G3E Sound Controller + +maintainers: + - Kuninori Morimoto + - John Madieu + +description: + The RZ/G3E (R9A09G047) sound controller is based on R-Car Sound IP + with extended DMA channel support (up to 5 DMACs per direction), + additional clock domains (47 clocks including per-SSI ADG clocks), + and additional reset lines (14 including SCU, ADG and Audio DMAC + peri-peri resets). SSI operates exclusively in BUSIF mode with + 2-4 BUSIF channels per SSI. + +allOf: + - $ref: dai-common.yaml# + +properties: + compatible: + const: renesas,r9a09g047-sound + + reg: + maxItems: 5 + + reg-names: + items: + - const: scu + - const: adg + - const: ssiu + - const: ssi + - const: audmapp + + "#sound-dai-cells": + enum: [0, 1] + + "#clock-cells": + const: 0 + + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + + clocks: + maxItems: 47 + + clock-names: + items: + - const: ssi-all + - const: ssi.9 + - const: ssi.8 + - const: ssi.7 + - const: ssi.6 + - const: ssi.5 + - const: ssi.4 + - const: ssi.3 + - const: ssi.2 + - const: ssi.1 + - const: ssi.0 + - const: src.9 + - const: src.8 + - const: src.7 + - const: src.6 + - const: src.5 + - const: src.4 + - const: src.3 + - const: src.2 + - const: src.1 + - const: src.0 + - const: mix.1 + - const: mix.0 + - const: ctu.1 + - const: ctu.0 + - const: dvc.0 + - const: dvc.1 + - const: clk_a + - const: clk_b + - const: clk_c + - const: clk_i + - const: ssif_supply + - const: scu + - const: scu_x2 + - const: scu_supply + - const: adg.ssi.9 + - const: adg.ssi.8 + - const: adg.ssi.7 + - const: adg.ssi.6 + - const: adg.ssi.5 + - const: adg.ssi.4 + - const: adg.ssi.3 + - const: adg.ssi.2 + - const: adg.ssi.1 + - const: adg.ssi.0 + - const: audmapp + - const: adg + + power-domains: + maxItems: 1 + + resets: + maxItems: 14 + + reset-names: + items: + - const: ssi-all + - const: ssi.9 + - const: ssi.8 + - const: ssi.7 + - const: ssi.6 + - const: ssi.5 + - const: ssi.4 + - const: ssi.3 + - const: ssi.2 + - const: ssi.1 + - const: ssi.0 + - const: scu + - const: adg + - const: audmapp + + clock-frequency: + description: Audio clock output frequency. + + clkout-lr-asynchronous: + description: audio_clkoutn is asynchronous with lr-clock. + $ref: /schemas/types.yaml#/definitions/flag + + dvc: + type: object + patternProperties: + "^dvc-[0-1]$": + type: object + additionalProperties: false + properties: + dmas: + maxItems: 5 + dma-names: + maxItems: 5 + allOf: + - items: + enum: + - tx + required: + - dmas + - dma-names + additionalProperties: false + + mix: + type: object + patternProperties: + "^mix-[0-1]$": + type: object + additionalProperties: false + additionalProperties: false + + ctu: + type: object + patternProperties: + "^ctu-[0-7]$": + type: object + additionalProperties: false + additionalProperties: false + + src: + type: object + patternProperties: + "^src-[0-9]$": + type: object + additionalProperties: false + properties: + interrupts: + maxItems: 1 + dmas: + maxItems: 10 + dma-names: + maxItems: 10 + allOf: + - items: + enum: + - tx + - rx + additionalProperties: false + + ssiu: + type: object + patternProperties: + "^ssiu-[0-9]+$": + type: object + additionalProperties: false + properties: + dmas: + maxItems: 10 + dma-names: + maxItems: 10 + allOf: + - items: + enum: + - tx + - rx + required: + - dmas + - dma-names + additionalProperties: false + + ssi: + type: object + patternProperties: + "^ssi-[0-9]$": + type: object + additionalProperties: false + properties: + interrupts: + maxItems: 1 + dmas: true + dma-names: true + shared-pin: + description: Shared clock pin. + $ref: /schemas/types.yaml#/definitions/flag + required: + - interrupts + additionalProperties: false + + port: + $ref: audio-graph-port.yaml#/definitions/port-base + unevaluatedProperties: false + patternProperties: + "^endpoint(@[0-9a-f]+)?$": + $ref: audio-graph-port.yaml#/definitions/endpoint-base + properties: + playback: + $ref: /schemas/types.yaml#/definitions/phandle-array + capture: + $ref: /schemas/types.yaml#/definitions/phandle-array + unevaluatedProperties: false + +patternProperties: + '^dai(@[0-9a-f]+)?$': + type: object + patternProperties: + "^dai([0-9]+)?$": + type: object + additionalProperties: false + properties: + playback: + $ref: /schemas/types.yaml#/definitions/phandle-array + capture: + $ref: /schemas/types.yaml#/definitions/phandle-array + anyOf: + - required: + - playback + - required: + - capture + additionalProperties: false + + 'ports(@[0-9a-f]+)?$': + $ref: audio-graph-port.yaml#/definitions/port-base + unevaluatedProperties: false + patternProperties: + '^port(@[0-9a-f]+)?$': + $ref: "#/properties/port" + +required: + - compatible + - reg + - reg-names + - clocks + - clock-names + - resets + - reset-names + +unevaluatedProperties: false + +examples: + - | + #include + + sound@13c00000 { + #sound-dai-cells =3D <1>; + #clock-cells =3D <0>; + compatible =3D "renesas,r9a09g047-sound"; + reg =3D <0x13c00000 0x10000>, + <0x13c20000 0x10000>, + <0x13c30000 0x1000>, + <0x13c31000 0x1f000>, + <0x13c50000 0x10000>; + reg-names =3D "scu", "adg", "ssiu", "ssi", "audmapp"; + clocks =3D <&cpg 245>, + <&cpg 394>, <&cpg 393>, + <&cpg 392>, <&cpg 391>, + <&cpg 390>, <&cpg 389>, + <&cpg 388>, <&cpg 387>, + <&cpg 386>, <&cpg 385>, + <&cpg 381>, <&cpg 380>, + <&cpg 379>, <&cpg 378>, + <&cpg 377>, <&cpg 376>, + <&cpg 375>, <&cpg 374>, + <&cpg 373>, <&cpg 372>, + <&cpg 371>, <&cpg 370>, + <&cpg 371>, <&cpg 370>, + <&cpg 368>, <&cpg 369>, + <&cpg 251>, <&cpg 252>, + <&cpg 253>, <&cpg 250>, + <&cpg 384>, + <&cpg 246>, <&cpg 247>, + <&cpg 382>, + <&cpg 361>, <&cpg 360>, + <&cpg 359>, <&cpg 358>, + <&cpg 357>, <&cpg 356>, + <&cpg 355>, <&cpg 354>, + <&cpg 353>, <&cpg 352>, + <&cpg 248>, <&cpg 249>; + clock-names =3D "ssi-all", + "ssi.9", "ssi.8", + "ssi.7", "ssi.6", + "ssi.5", "ssi.4", + "ssi.3", "ssi.2", + "ssi.1", "ssi.0", + "src.9", "src.8", + "src.7", "src.6", + "src.5", "src.4", + "src.3", "src.2", + "src.1", "src.0", + "mix.1", "mix.0", + "ctu.1", "ctu.0", + "dvc.0", "dvc.1", + "clk_a", "clk_b", + "clk_c", "clk_i", + "ssif_supply", + "scu", "scu_x2", + "scu_supply", + "adg.ssi.9", "adg.ssi.8", + "adg.ssi.7", "adg.ssi.6", + "adg.ssi.5", "adg.ssi.4", + "adg.ssi.3", "adg.ssi.2", + "adg.ssi.1", "adg.ssi.0", + "audmapp", "adg"; + power-domains =3D <&cpg>; + resets =3D <&cpg 225>, + <&cpg 235>, <&cpg 234>, + <&cpg 233>, <&cpg 232>, + <&cpg 231>, <&cpg 230>, + <&cpg 229>, <&cpg 228>, + <&cpg 227>, <&cpg 226>, + <&cpg 236>, <&cpg 238>, <&cpg 237>; + reset-names =3D "ssi-all", + "ssi.9", "ssi.8", + "ssi.7", "ssi.6", + "ssi.5", "ssi.4", + "ssi.3", "ssi.2", + "ssi.1", "ssi.0", + "scu", "adg", + "audmapp"; + + ctu { + ctu-0 { }; + ctu-1 { }; + ctu-2 { }; + ctu-3 { }; + ctu-4 { }; + ctu-5 { }; + ctu-6 { }; + ctu-7 { }; + }; + + dvc { + dvc-0 { + dmas =3D <&dmac0 0x1db3>, <&dmac1 0x1db3>, + <&dmac2 0x1db3>, <&dmac3 0x1db3>, + <&dmac4 0x1db3>; + dma-names =3D "tx", "tx", "tx", "tx", "tx"; + }; + dvc-1 { + dmas =3D <&dmac0 0x1db4>, <&dmac1 0x1db4>, + <&dmac2 0x1db4>, <&dmac3 0x1db4>, + <&dmac4 0x1db4>; + dma-names =3D "tx", "tx", "tx", "tx", "tx"; + }; + }; + + mix { + mix-0 { }; + mix-1 { }; + }; + + src { + src-0 { + interrupts =3D ; + dmas =3D <&dmac0 0x1d9f>, <&dmac0 0x1da9>, + <&dmac1 0x1d9f>, <&dmac1 0x1da9>, + <&dmac2 0x1d9f>, <&dmac2 0x1da9>, + <&dmac3 0x1d9f>, <&dmac3 0x1da9>, + <&dmac4 0x1d9f>, <&dmac4 0x1da9>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-1 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da0>, <&dmac0 0x1daa>, + <&dmac1 0x1da0>, <&dmac1 0x1daa>, + <&dmac2 0x1da0>, <&dmac2 0x1daa>, + <&dmac3 0x1da0>, <&dmac3 0x1daa>, + <&dmac4 0x1da0>, <&dmac4 0x1daa>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-2 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da1>, <&dmac0 0x1dab>, + <&dmac1 0x1da1>, <&dmac1 0x1dab>, + <&dmac2 0x1da1>, <&dmac2 0x1dab>, + <&dmac3 0x1da1>, <&dmac3 0x1dab>, + <&dmac4 0x1da1>, <&dmac4 0x1dab>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-3 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da2>, <&dmac0 0x1dac>, + <&dmac1 0x1da2>, <&dmac1 0x1dac>, + <&dmac2 0x1da2>, <&dmac2 0x1dac>, + <&dmac3 0x1da2>, <&dmac3 0x1dac>, + <&dmac4 0x1da2>, <&dmac4 0x1dac>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-4 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da3>, <&dmac0 0x1dad>, + <&dmac1 0x1da3>, <&dmac1 0x1dad>, + <&dmac2 0x1da3>, <&dmac2 0x1dad>, + <&dmac3 0x1da3>, <&dmac3 0x1dad>, + <&dmac4 0x1da3>, <&dmac4 0x1dad>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-5 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da4>, <&dmac0 0x1dae>, + <&dmac1 0x1da4>, <&dmac1 0x1dae>, + <&dmac2 0x1da4>, <&dmac2 0x1dae>, + <&dmac3 0x1da4>, <&dmac3 0x1dae>, + <&dmac4 0x1da4>, <&dmac4 0x1dae>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-6 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da5>, <&dmac0 0x1daf>, + <&dmac1 0x1da5>, <&dmac1 0x1daf>, + <&dmac2 0x1da5>, <&dmac2 0x1daf>, + <&dmac3 0x1da5>, <&dmac3 0x1daf>, + <&dmac4 0x1da5>, <&dmac4 0x1daf>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-7 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da6>, <&dmac0 0x1db0>, + <&dmac1 0x1da6>, <&dmac1 0x1db0>, + <&dmac2 0x1da6>, <&dmac2 0x1db0>, + <&dmac3 0x1da6>, <&dmac3 0x1db0>, + <&dmac4 0x1da6>, <&dmac4 0x1db0>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-8 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da7>, <&dmac0 0x1db1>, + <&dmac1 0x1da7>, <&dmac1 0x1db1>, + <&dmac2 0x1da7>, <&dmac2 0x1db1>, + <&dmac3 0x1da7>, <&dmac3 0x1db1>, + <&dmac4 0x1da7>, <&dmac4 0x1db1>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + src-9 { + interrupts =3D ; + dmas =3D <&dmac0 0x1da8>, <&dmac0 0x1db2>, + <&dmac1 0x1da8>, <&dmac1 0x1db2>, + <&dmac2 0x1da8>, <&dmac2 0x1db2>, + <&dmac3 0x1da8>, <&dmac3 0x1db2>, + <&dmac4 0x1da8>, <&dmac4 0x1db2>; + dma-names =3D "rx", "tx", "rx", "tx", "rx", "tx", + "rx", "tx", "rx", "tx"; + }; + }; + + ssi { + ssi-0 { + interrupts =3D ; + }; + ssi-1 { + interrupts =3D ; + }; + ssi-2 { + interrupts =3D ; + }; + ssi-3 { + interrupts =3D ; + }; + ssi-4 { + interrupts =3D ; + shared-pin; + }; + ssi-5 { + interrupts =3D ; + }; + ssi-6 { + interrupts =3D ; + }; + ssi-7 { + interrupts =3D ; + }; + ssi-8 { + interrupts =3D ; + }; + ssi-9 { + interrupts =3D ; + }; + }; + + ssiu { + ssiu-0 { + dmas =3D <&dmac0 0x1d61>, <&dmac0 0x1d62>, + <&dmac1 0x1d61>, <&dmac1 0x1d62>, + <&dmac2 0x1d61>, <&dmac2 0x1d62>, + <&dmac3 0x1d61>, <&dmac3 0x1d62>, + <&dmac4 0x1d61>, <&dmac4 0x1d62>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-1 { + dmas =3D <&dmac0 0x1d63>, <&dmac0 0x1d64>, + <&dmac1 0x1d63>, <&dmac1 0x1d64>, + <&dmac2 0x1d63>, <&dmac2 0x1d64>, + <&dmac3 0x1d63>, <&dmac3 0x1d64>, + <&dmac4 0x1d63>, <&dmac4 0x1d64>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-2 { + dmas =3D <&dmac0 0x1d65>, <&dmac0 0x1d66>, + <&dmac1 0x1d65>, <&dmac1 0x1d66>, + <&dmac2 0x1d65>, <&dmac2 0x1d66>, + <&dmac3 0x1d65>, <&dmac3 0x1d66>, + <&dmac4 0x1d65>, <&dmac4 0x1d66>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-3 { + dmas =3D <&dmac0 0x1d67>, <&dmac0 0x1d68>, + <&dmac1 0x1d67>, <&dmac1 0x1d68>, + <&dmac2 0x1d67>, <&dmac2 0x1d68>, + <&dmac3 0x1d67>, <&dmac3 0x1d68>, + <&dmac4 0x1d67>, <&dmac4 0x1d68>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-4 { + dmas =3D <&dmac0 0x1d69>, <&dmac0 0x1d6a>, + <&dmac1 0x1d69>, <&dmac1 0x1d6a>, + <&dmac2 0x1d69>, <&dmac2 0x1d6a>, + <&dmac3 0x1d69>, <&dmac3 0x1d6a>, + <&dmac4 0x1d69>, <&dmac4 0x1d6a>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-5 { + dmas =3D <&dmac0 0x1d6b>, <&dmac0 0x1d6c>, + <&dmac1 0x1d6b>, <&dmac1 0x1d6c>, + <&dmac2 0x1d6b>, <&dmac2 0x1d6c>, + <&dmac3 0x1d6b>, <&dmac3 0x1d6c>, + <&dmac4 0x1d6b>, <&dmac4 0x1d6c>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-6 { + dmas =3D <&dmac0 0x1d6d>, <&dmac0 0x1d6e>, + <&dmac1 0x1d6d>, <&dmac1 0x1d6e>, + <&dmac2 0x1d6d>, <&dmac2 0x1d6e>, + <&dmac3 0x1d6d>, <&dmac3 0x1d6e>, + <&dmac4 0x1d6d>, <&dmac4 0x1d6e>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-7 { + dmas =3D <&dmac0 0x1d6f>, <&dmac0 0x1d70>, + <&dmac1 0x1d6f>, <&dmac1 0x1d70>, + <&dmac2 0x1d6f>, <&dmac2 0x1d70>, + <&dmac3 0x1d6f>, <&dmac3 0x1d70>, + <&dmac4 0x1d6f>, <&dmac4 0x1d70>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-8 { + dmas =3D <&dmac0 0x1d71>, <&dmac0 0x1d72>, + <&dmac1 0x1d71>, <&dmac1 0x1d72>, + <&dmac2 0x1d71>, <&dmac2 0x1d72>, + <&dmac3 0x1d71>, <&dmac3 0x1d72>, + <&dmac4 0x1d71>, <&dmac4 0x1d72>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-9 { + dmas =3D <&dmac0 0x1d73>, <&dmac0 0x1d74>, + <&dmac1 0x1d73>, <&dmac1 0x1d74>, + <&dmac2 0x1d73>, <&dmac2 0x1d74>, + <&dmac3 0x1d73>, <&dmac3 0x1d74>, + <&dmac4 0x1d73>, <&dmac4 0x1d74>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-10 { + dmas =3D <&dmac0 0x1d75>, <&dmac0 0x1d76>, + <&dmac1 0x1d75>, <&dmac1 0x1d76>, + <&dmac2 0x1d75>, <&dmac2 0x1d76>, + <&dmac3 0x1d75>, <&dmac3 0x1d76>, + <&dmac4 0x1d75>, <&dmac4 0x1d76>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-11 { + dmas =3D <&dmac0 0x1d77>, <&dmac0 0x1d78>, + <&dmac1 0x1d77>, <&dmac1 0x1d78>, + <&dmac2 0x1d77>, <&dmac2 0x1d78>, + <&dmac3 0x1d77>, <&dmac3 0x1d78>, + <&dmac4 0x1d77>, <&dmac4 0x1d78>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-12 { + dmas =3D <&dmac0 0x1d79>, <&dmac0 0x1d7a>, + <&dmac1 0x1d79>, <&dmac1 0x1d7a>, + <&dmac2 0x1d79>, <&dmac2 0x1d7a>, + <&dmac3 0x1d79>, <&dmac3 0x1d7a>, + <&dmac4 0x1d79>, <&dmac4 0x1d7a>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-13 { + dmas =3D <&dmac0 0x1d7b>, <&dmac0 0x1d7c>, + <&dmac1 0x1d7b>, <&dmac1 0x1d7c>, + <&dmac2 0x1d7b>, <&dmac2 0x1d7c>, + <&dmac3 0x1d7b>, <&dmac3 0x1d7c>, + <&dmac4 0x1d7b>, <&dmac4 0x1d7c>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-14 { + dmas =3D <&dmac0 0x1d7d>, <&dmac0 0x1d7e>, + <&dmac1 0x1d7d>, <&dmac1 0x1d7e>, + <&dmac2 0x1d7d>, <&dmac2 0x1d7e>, + <&dmac3 0x1d7d>, <&dmac3 0x1d7e>, + <&dmac4 0x1d7d>, <&dmac4 0x1d7e>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-15 { + dmas =3D <&dmac0 0x1d7f>, <&dmac0 0x1d80>, + <&dmac1 0x1d7f>, <&dmac1 0x1d80>, + <&dmac2 0x1d7f>, <&dmac2 0x1d80>, + <&dmac3 0x1d7f>, <&dmac3 0x1d80>, + <&dmac4 0x1d7f>, <&dmac4 0x1d80>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-16 { + dmas =3D <&dmac0 0x1d81>, <&dmac0 0x1d82>, + <&dmac1 0x1d81>, <&dmac1 0x1d82>, + <&dmac2 0x1d81>, <&dmac2 0x1d82>, + <&dmac3 0x1d81>, <&dmac3 0x1d82>, + <&dmac4 0x1d81>, <&dmac4 0x1d82>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-17 { + dmas =3D <&dmac0 0x1d83>, <&dmac0 0x1d84>, + <&dmac1 0x1d83>, <&dmac1 0x1d84>, + <&dmac2 0x1d83>, <&dmac2 0x1d84>, + <&dmac3 0x1d83>, <&dmac3 0x1d84>, + <&dmac4 0x1d83>, <&dmac4 0x1d84>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-18 { + dmas =3D <&dmac0 0x1d85>, <&dmac0 0x1d86>, + <&dmac1 0x1d85>, <&dmac1 0x1d86>, + <&dmac2 0x1d85>, <&dmac2 0x1d86>, + <&dmac3 0x1d85>, <&dmac3 0x1d86>, + <&dmac4 0x1d85>, <&dmac4 0x1d86>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-19 { + dmas =3D <&dmac0 0x1d87>, <&dmac0 0x1d88>, + <&dmac1 0x1d87>, <&dmac1 0x1d88>, + <&dmac2 0x1d87>, <&dmac2 0x1d88>, + <&dmac3 0x1d87>, <&dmac3 0x1d88>, + <&dmac4 0x1d87>, <&dmac4 0x1d88>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-20 { + dmas =3D <&dmac0 0x1d89>, <&dmac0 0x1d8a>, + <&dmac1 0x1d89>, <&dmac1 0x1d8a>, + <&dmac2 0x1d89>, <&dmac2 0x1d8a>, + <&dmac3 0x1d89>, <&dmac3 0x1d8a>, + <&dmac4 0x1d89>, <&dmac4 0x1d8a>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-21 { + dmas =3D <&dmac0 0x1d8b>, <&dmac0 0x1d8c>, + <&dmac1 0x1d8b>, <&dmac1 0x1d8c>, + <&dmac2 0x1d8b>, <&dmac2 0x1d8c>, + <&dmac3 0x1d8b>, <&dmac3 0x1d8c>, + <&dmac4 0x1d8b>, <&dmac4 0x1d8c>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-22 { + dmas =3D <&dmac0 0x1d8d>, <&dmac0 0x1d8e>, + <&dmac1 0x1d8d>, <&dmac1 0x1d8e>, + <&dmac2 0x1d8d>, <&dmac2 0x1d8e>, + <&dmac3 0x1d8d>, <&dmac3 0x1d8e>, + <&dmac4 0x1d8d>, <&dmac4 0x1d8e>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-23 { + dmas =3D <&dmac0 0x1d8f>, <&dmac0 0x1d90>, + <&dmac1 0x1d8f>, <&dmac1 0x1d90>, + <&dmac2 0x1d8f>, <&dmac2 0x1d90>, + <&dmac3 0x1d8f>, <&dmac3 0x1d90>, + <&dmac4 0x1d8f>, <&dmac4 0x1d90>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-24 { + dmas =3D <&dmac0 0x1d91>, <&dmac0 0x1d92>, + <&dmac1 0x1d91>, <&dmac1 0x1d92>, + <&dmac2 0x1d91>, <&dmac2 0x1d92>, + <&dmac3 0x1d91>, <&dmac3 0x1d92>, + <&dmac4 0x1d91>, <&dmac4 0x1d92>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-25 { + dmas =3D <&dmac0 0x1d93>, <&dmac0 0x1d94>, + <&dmac1 0x1d93>, <&dmac1 0x1d94>, + <&dmac2 0x1d93>, <&dmac2 0x1d94>, + <&dmac3 0x1d93>, <&dmac3 0x1d94>, + <&dmac4 0x1d93>, <&dmac4 0x1d94>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-26 { + dmas =3D <&dmac0 0x1d95>, <&dmac0 0x1d96>, + <&dmac1 0x1d95>, <&dmac1 0x1d96>, + <&dmac2 0x1d95>, <&dmac2 0x1d96>, + <&dmac3 0x1d95>, <&dmac3 0x1d96>, + <&dmac4 0x1d95>, <&dmac4 0x1d96>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + ssiu-27 { + dmas =3D <&dmac0 0x1d97>, <&dmac0 0x1d98>, + <&dmac1 0x1d97>, <&dmac1 0x1d98>, + <&dmac2 0x1d97>, <&dmac2 0x1d98>, + <&dmac3 0x1d97>, <&dmac3 0x1d98>, + <&dmac4 0x1d97>, <&dmac4 0x1d98>; + dma-names =3D "tx", "rx", "tx", "rx", "tx", "rx", "tx", "rx", "t= x", "rx"; + }; + }; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + port@0 { + reg =3D <0>; + rsnd_endpoint0: endpoint { + remote-endpoint =3D <&codec_endpoint>; + dai-format =3D "i2s"; + bitclock-master =3D <&rsnd_endpoint0>; + frame-master =3D <&rsnd_endpoint0>; + playback =3D <&ssi3>, <&src1>, <&dvc1>; + capture =3D <&ssi4>, <&src0>, <&dvc0>; + }; + }; + }; + }; --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECBE832548B for ; Wed, 15 Apr 2026 12:47:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257260; cv=none; b=pk0C8DpQKVPICjDWceuw9pg1pzCsRJ38PLPJcljS214g70CSNQTP+fKHwcoDnYadwGIUrC5w0Uk2JWXQyrQTtvzJAgd6NFp3Cj+dSKdk8Y3izlsaNugwrJqc2V5tL6awiRDmw57rVThHIPDmL+uYRJdPrCrU8pvV2HoMxcAtRXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257260; c=relaxed/simple; bh=v2J167Kc+xj+F1x7h/z4+g6abS0dMZHD0H2l9g42OPw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=f0lHPM8SSWSKKK7q0hWtfUZJ2tMSkfhf6oGJCI4E+9yAiRTYpaaDPH/uOEtENNcj6YBWltF6te6TzzBQr2OzCEKlMNbhsQZHEZlgaN2VEih74VqXe3GTF7zHb8x5RFWomLUd5Ld6JH/66AkBHjtX8+9rcDoJ7RuSsounPH4PEWU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=H/jItQsr; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H/jItQsr" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43d03db7f87so4226659f8f.3 for ; Wed, 15 Apr 2026 05:47:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257257; x=1776862057; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5dBl/BdaawfmZOHNCX+Y8+cGAmr1wgVLSp+xT2/nrk0=; b=H/jItQsrOtLvlZYAx0pjpYLsNzjfMMBwH5LDpJdcW2R1LfVik2smzIro3RDlVKZXx2 Sw0el3dpbo6syk/CVzvoLlcvqnZSmyUESe+iq+J+PoBdF7MQ2vp4gKddWHtjdp5qKRhK yJm65VOu3kV1i+9SbLQNO5id/tnCsEDkxQwLdqXiG66NQDtKYO5xWuISUKNbBJ0c8+r3 mU8DObU+/NItbFQ/NcXz4GR/DTzn5eUskqOAp4mPreGCSiVFCVWo6d+6dU7ML+rHCeJG jLlC8JFGeY+WuPp8GCzeoGu51gGSir8N9hb0K5FlD+clPSIh1o4ZC8D85E0defmeD3ko RgHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257257; x=1776862057; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5dBl/BdaawfmZOHNCX+Y8+cGAmr1wgVLSp+xT2/nrk0=; b=R6ApguDYaQWdVZRA/XmA2U6um1gV8e9oRqWwyNzU24qWcvlYT26jj9wi60RXdYoNpK TD70FtCcDz9HeG0naBpy0FuUu4t/pHDEPXUqMXWQmExJWmhFj4hXJgP1aPFyrJ6smZXl mSvDhQX0kGobp9K+BSCKFpSHCmX5ZgoAmm7i1cRm2vDPqUgIi0ELDS0C/fvU2qFzAiaF UW3kI2tbk1OWplJgZpe+Lwgrq4hftSC+zuGieSmkknAi8v+/cgUPmQNad+uuv2tfoAQ5 GHPyxF8gak7GLEwq5Qr0HPmKe0Aj995H5b97IdiHFGV6/lDiWtlX+T5elSDFrD5AmJcY o2QA== X-Forwarded-Encrypted: i=1; AFNElJ+0dfESHCGMw3VzQiKHub7Qebhht3dV6QykPjoTEjlb3TNYlMspEobM5MTWkkPkWtUazrWRLHp/mS1qzKc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2dq0uq4WDqGpAscav+d+7BC/pFtin1+/Rc1cIE+E96R96pvvp c8/XeaI8uBWY2P4iStZRPqJaQk7H/eCXYPsudlF86EPTX+UVgS2gmoa4 X-Gm-Gg: AeBDietQ3ppCz5tRvQ+YIsSRWk5iKG/8d8IuXNKy/mAVT3lckFSYeyW1d9wNUM0XfFZ nZzhkJR9HC47eeFrCKwPrEgtSWDyPJTCQRrE4WMSmylDt07Gt8HcGwDmmU430VPJT9kdPnnjTkc q9WdLiUhANy+A6qUnEzxYxonqvevk47erj3fjy4bZGoyofsrfy+nKSE13O54iSW4Pne9daghdHV R2/KCQjOZaj9JWi0lbIYqCylV/VCU2+kUyntDhfn2XWWOJIkUe4hw85yZJHcd8l3afG0xhjXmh1 Ijsz2pq8s6txioI6zfWKi0tBgksbrLDLtuCIT/s2egDFACzxDbtR6a3PotyVDUf40el7YSfNdyb Nrlu/RDMuKHZMTU3O14b/ftgG2znWxf67l8hifuoRSm/i4tc51PecoaWkvYIXCN6jX7MZNaxWRY swdGoH4dlx2/nV/XlSlQXHS0HnxL3NqrjvkEb+sQ== X-Received: by 2002:a05:6000:144d:b0:43e:a69b:d805 with SMTP id ffacd0b85a97d-43ea69bdab4mr9541704f8f.27.1776257257303; Wed, 15 Apr 2026 05:47:37 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:36 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 02/14] ASoC: rsnd: Fix RSND_SOC_MASK width to single nibble Date: Wed, 15 Apr 2026 12:47:19 +0000 Message-Id: <20260415124731.3684773-3-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RSND_SOC_MASK was defined as (0xFF << 4), spanning bits 4-11. This is wider than needed since only nibble B (bits 7:4) is used for SoC identifiers. Narrow it to (0xF << 4) to match the intended single-nibble allocation and prevent overlap with bits 8-11 which will be used by upcoming RZ series flags. No functional change, since the only current user (RSND_SOC_E) fits within a single nibble. Fixes: ba164a49f8f7 ("ASoC: rsnd: src: Avoid a potential deadlock") Signed-off-by: John Madieu --- Changes: v5: - New patch - Extracted as a standalone bug-fix patch per Kuninori's request Previously embedded in patch 04/12. - Add Fixes: tag referencing the commit that introduced the mask. sound/soc/renesas/rcar/rsnd.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 04c70690f7a2..3e666125959b 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -624,7 +624,7 @@ struct rsnd_priv { #define RSND_GEN2 (2 << 0) #define RSND_GEN3 (3 << 0) #define RSND_GEN4 (4 << 0) -#define RSND_SOC_MASK (0xFF << 4) +#define RSND_SOC_MASK (0xF << 4) #define RSND_SOC_E (1 << 4) /* E1/E2/E3 */ =20 /* --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59F303242B1 for ; Wed, 15 Apr 2026 12:47:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257262; cv=none; b=ABmKUNQUwyUjqA4vRuNPXjEhpaOy7jdseNxblzwi0DCjYPTBR3PtHjDMzT89ELxP2mvBb2X28cquvdFJRudOgiHk1S5dgVMjc9TlvFQ9DTM70iVqBvDoc8wxqXEyYYSUgQkrdaevJjrlwWVEqoSV5Dfb3VP4+nxbiFdk4jJf2P4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257262; c=relaxed/simple; bh=ckJt9CA3Ip+Nr/sG9pWs92MvFhFGs423bXz1O9uCz18=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qw7wNWq4Qdfmsu7ySC6n5RVj6Nvqc8ApOVLb6CIq4oObKexohk/F99/7HmG18vUmR4i+Ww/atCLyQEKF4FPyAMpr0STOJvfcpplnx07kJ7mcf2T6WP9EiFYt/1DDTDVjQc+qYsGmZV3SwHP62kJkDSQaf47Ex9r/j8vwZudrc7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=muAF0qxk; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="muAF0qxk" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-43cfbd17589so4768893f8f.0 for ; Wed, 15 Apr 2026 05:47:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257259; x=1776862059; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=muF5Fgr3euVIwq3LckXBbYSe5tnWfPAvxpBr8ofKVq4=; b=muAF0qxkA5czICOMHz7qfe87hOQoGaIINqtNghNCFp9JaDLMvI8IEDb88+fQMFScf/ s6KyGcaCUZvap/Qkx1yP6IMsMmbEL3pRdJRWmWpmKGukw2oJbYRpEOhHKjZz9BW/blWL bz/rF5/cfov4qx/RhFJJzBgr1/4jO/8wfI5ZBWmqthjlK6HjAXSLMiHwmlgmZNqgw3Js e8a+vY7RhHrYc50FnN9dIDhLHUkREWL0Aaca1Ns4+/E+eIoxFsjQbBD88hz5HDXtJxg3 uIXS/kK/9dSdKTP7f6nbZQfjH0OkocjzJnTUfIGu7Ry576U6aYjM/epqJRVD+a2n8wNa AF3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257259; x=1776862059; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=muF5Fgr3euVIwq3LckXBbYSe5tnWfPAvxpBr8ofKVq4=; b=RI6oDPJ07dNOvYtG3OWr4y08MYHwwvilzFrNceC8SvTvRymJVZWJx55G++OuAigd16 wA1NKPRMTSk0imAu28KJT+9RSM15hUWv8AS1UMnCKzEWdN6c2or7ZOU3IjH69xTHl+yw GCsl+JgV0mD1DkE10gZb+cPuyk9R6+v+7dAe4USR45n4VoKSZsLOQ0qRyRaZ3AkHnxBj uta5KoniB/s43295fLAVpIrzPwKi/1pajRGZfwn1N9lh6vHavD26uljL9i82Bt3Jfz3H +BQWMdYQh6jeSiK+Kl4hjkeEHLOGE0odFWC+Lp1XNTUOJMVAGoTY8dodh+NUwVWX4f5z L6uw== X-Forwarded-Encrypted: i=1; AFNElJ+pyOWDRTXvEQJonpEv7ahV7b1C8y8PNNGJh7x8ZnZlHRZcsdDXDI+u0MQ+TF65Y9OfGKQOFK3tdzsd5Iw=@vger.kernel.org X-Gm-Message-State: AOJu0Yyh7TxXsiNEJcmY1qYAPRxiQsJSivq4bBm+z5YtFtraClJvfGLs ZvHuOk5a5HVaj2IPjEiTzme2lKlmQ3gqBiIJt6VJGduvXL0En2lbd/CE X-Gm-Gg: AeBDieuAtCI5Yy28ekEuKt549lmnoQPyTdvI19QpyBZQx7mkhrMTenh1KJ1PPVOQCkr kf89hp+lAu8f8zrBHFlOkk44bnYYqPFxh5cj0f+77s45/pwIcS3d3twp/BBi1zdScZnVizmxpLc VUtiwqYViekSKZGNM+lHfNys7WIMGIB64Kapsg+EB67uswd/jK+ZuDPV/fq4PvHuJT0rEzIDuV2 o5DwBpxY0f21URpxyy2kSAyA0Oh0jNCMwk4TeELSpjg7FtHBnZShQoBauRtk+HVB1f6L3SU0n99 GJUzXsbdpgC0ozwjAbVF3N9ACYESFSz34vH1FAXlCC20rEm/aBPjo4afgpD+tABV13WJCayJawm 9mfYFFcodTO/Kr0EXWp3yBNnHT+ahv7V/0b34iC5ilPCXUjRqj8EC97dknA/H5h597vcJg6bZTy XyuB3cvkiAOXVheGazuk3FEz/sjGRe/neURasl8A== X-Received: by 2002:a05:6000:4201:b0:43d:7403:4b63 with SMTP id ffacd0b85a97d-43d74034bd6mr20491386f8f.44.1776257258456; Wed, 15 Apr 2026 05:47:38 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:37 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 03/14] ASoC: rsnd: Add reset controller support to rsnd_mod Date: Wed, 15 Apr 2026 12:47:20 +0000 Message-Id: <20260415124731.3684773-4-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RZ/G3E SoC requires per-module reset control for the audio subsystem. Add reset controller support to struct rsnd_mod and update rsnd_mod_init() to accept and handle a reset_control parameter and mirror it in rsnd_mod_quit(). Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Add reset_control_assert() in rsnd_mod_quit() for symmetry with deassert in rsnd_mod_init() v3: No changes v2: No changes sound/soc/renesas/rcar/adg.c | 2 +- sound/soc/renesas/rcar/cmd.c | 2 +- sound/soc/renesas/rcar/core.c | 16 +++++++++++++++- sound/soc/renesas/rcar/ctu.c | 2 +- sound/soc/renesas/rcar/dma.c | 4 ++-- sound/soc/renesas/rcar/dvc.c | 2 +- sound/soc/renesas/rcar/mix.c | 2 +- sound/soc/renesas/rcar/rsnd.h | 3 +++ sound/soc/renesas/rcar/src.c | 2 +- sound/soc/renesas/rcar/ssi.c | 2 +- sound/soc/renesas/rcar/ssiu.c | 2 +- 11 files changed, 28 insertions(+), 11 deletions(-) diff --git a/sound/soc/renesas/rcar/adg.c b/sound/soc/renesas/rcar/adg.c index 8641b73d1f77..0105c60a144e 100644 --- a/sound/soc/renesas/rcar/adg.c +++ b/sound/soc/renesas/rcar/adg.c @@ -780,7 +780,7 @@ int rsnd_adg_probe(struct rsnd_priv *priv) return -ENOMEM; =20 ret =3D rsnd_mod_init(priv, &adg->mod, &adg_ops, - NULL, 0, 0); + NULL, NULL, 0, 0); if (ret) return ret; =20 diff --git a/sound/soc/renesas/rcar/cmd.c b/sound/soc/renesas/rcar/cmd.c index 8d9a1e345a22..13beef389797 100644 --- a/sound/soc/renesas/rcar/cmd.c +++ b/sound/soc/renesas/rcar/cmd.c @@ -171,7 +171,7 @@ int rsnd_cmd_probe(struct rsnd_priv *priv) =20 for_each_rsnd_cmd(cmd, priv, i) { int ret =3D rsnd_mod_init(priv, rsnd_mod_get(cmd), - &rsnd_cmd_ops, NULL, + &rsnd_cmd_ops, NULL, NULL, RSND_MOD_CMD, i); if (ret) return ret; diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c index 69fb19964a71..28467e45acab 100644 --- a/sound/soc/renesas/rcar/core.c +++ b/sound/soc/renesas/rcar/core.c @@ -90,6 +90,7 @@ * */ =20 +#include #include #include #include "rsnd.h" @@ -196,18 +197,29 @@ int rsnd_mod_init(struct rsnd_priv *priv, struct rsnd_mod *mod, struct rsnd_mod_ops *ops, struct clk *clk, + struct reset_control *rstc, enum rsnd_mod_type type, int id) { - int ret =3D clk_prepare(clk); + int ret; =20 + ret =3D clk_prepare_enable(clk); if (ret) return ret; =20 + ret =3D reset_control_deassert(rstc); + if (ret) { + clk_disable_unprepare(clk); + return ret; + } + + clk_disable(clk); + mod->id =3D id; mod->ops =3D ops; mod->type =3D type; mod->clk =3D clk; + mod->rstc =3D rstc; mod->priv =3D priv; =20 return 0; @@ -217,6 +229,8 @@ void rsnd_mod_quit(struct rsnd_mod *mod) { clk_unprepare(mod->clk); mod->clk =3D NULL; + reset_control_assert(mod->rstc); + mod->rstc =3D NULL; } =20 void rsnd_mod_interrupt(struct rsnd_mod *mod, diff --git a/sound/soc/renesas/rcar/ctu.c b/sound/soc/renesas/rcar/ctu.c index bd4c61f9fb3c..81bba6a1af6e 100644 --- a/sound/soc/renesas/rcar/ctu.c +++ b/sound/soc/renesas/rcar/ctu.c @@ -360,7 +360,7 @@ int rsnd_ctu_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(ctu), &rsnd_ctu_ops, - clk, RSND_MOD_CTU, i); + clk, NULL, RSND_MOD_CTU, i); if (ret) goto rsnd_ctu_probe_done; =20 diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index 2035ce06fe4c..68c859897e68 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -803,7 +803,7 @@ static int rsnd_dma_alloc(struct rsnd_dai_stream *io, s= truct rsnd_mod *mod, =20 *dma_mod =3D rsnd_mod_get(dma); =20 - ret =3D rsnd_mod_init(priv, *dma_mod, ops, NULL, + ret =3D rsnd_mod_init(priv, *dma_mod, ops, NULL, NULL, type, dma_id); if (ret < 0) return ret; @@ -879,5 +879,5 @@ int rsnd_dma_probe(struct rsnd_priv *priv) priv->dma =3D dmac; =20 /* dummy mem mod for debug */ - return rsnd_mod_init(NULL, &mem, &mem_ops, NULL, 0, 0); + return rsnd_mod_init(NULL, &mem, &mem_ops, NULL, NULL, 0, 0); } diff --git a/sound/soc/renesas/rcar/dvc.c b/sound/soc/renesas/rcar/dvc.c index 988cbddbc611..bf7146ceb5f6 100644 --- a/sound/soc/renesas/rcar/dvc.c +++ b/sound/soc/renesas/rcar/dvc.c @@ -364,7 +364,7 @@ int rsnd_dvc_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(dvc), &rsnd_dvc_ops, - clk, RSND_MOD_DVC, i); + clk, NULL, RSND_MOD_DVC, i); if (ret) goto rsnd_dvc_probe_done; =20 diff --git a/sound/soc/renesas/rcar/mix.c b/sound/soc/renesas/rcar/mix.c index aea74e703305..566e9b2a488c 100644 --- a/sound/soc/renesas/rcar/mix.c +++ b/sound/soc/renesas/rcar/mix.c @@ -328,7 +328,7 @@ int rsnd_mix_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(mix), &rsnd_mix_ops, - clk, RSND_MOD_MIX, i); + clk, NULL, RSND_MOD_MIX, i); if (ret) goto rsnd_mix_probe_done; =20 diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 3e666125959b..3d419b31cf40 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -353,6 +354,7 @@ struct rsnd_mod { struct rsnd_mod_ops *ops; struct rsnd_priv *priv; struct clk *clk; + struct reset_control *rstc; u32 status; }; /* @@ -420,6 +422,7 @@ int rsnd_mod_init(struct rsnd_priv *priv, struct rsnd_mod *mod, struct rsnd_mod_ops *ops, struct clk *clk, + struct reset_control *rstc, enum rsnd_mod_type type, int id); void rsnd_mod_quit(struct rsnd_mod *mod); diff --git a/sound/soc/renesas/rcar/src.c b/sound/soc/renesas/rcar/src.c index 6a3dbc84f474..8b58cc20e7a8 100644 --- a/sound/soc/renesas/rcar/src.c +++ b/sound/soc/renesas/rcar/src.c @@ -766,7 +766,7 @@ int rsnd_src_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(src), - &rsnd_src_ops, clk, RSND_MOD_SRC, i); + &rsnd_src_ops, clk, NULL, RSND_MOD_SRC, i); if (ret) goto rsnd_src_probe_done; =20 diff --git a/sound/soc/renesas/rcar/ssi.c b/sound/soc/renesas/rcar/ssi.c index 0420041e282c..c06cebb36170 100644 --- a/sound/soc/renesas/rcar/ssi.c +++ b/sound/soc/renesas/rcar/ssi.c @@ -1225,7 +1225,7 @@ int rsnd_ssi_probe(struct rsnd_priv *priv) ops =3D &rsnd_ssi_dma_ops; =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk, - RSND_MOD_SSI, i); + NULL, RSND_MOD_SSI, i); if (ret) goto rsnd_ssi_probe_done; =20 diff --git a/sound/soc/renesas/rcar/ssiu.c b/sound/soc/renesas/rcar/ssiu.c index 244fb833292a..0cfa84fe5ea8 100644 --- a/sound/soc/renesas/rcar/ssiu.c +++ b/sound/soc/renesas/rcar/ssiu.c @@ -586,7 +586,7 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(ssiu), - ops, NULL, RSND_MOD_SSIU, i); + ops, NULL, NULL, RSND_MOD_SSIU, i); if (ret) return ret; } --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91CFE3321A3 for ; Wed, 15 Apr 2026 12:47:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257264; cv=none; b=Xxcb/ARnhVdS3AiX2BIbuYS+6uU/EhrpKScmy/PTB/A9n26C+SXfzKW8VNd9qJJrCvhuNwvMrdSwh45mL0qeEzo7G9oPK+MO0Dmj9Fr0oWBgXmimJ2sV568eb45EhxNAFMIwHePPoPpT4Zjx9R3CaHDedPX1pTboX1UKvfvWg8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257264; c=relaxed/simple; bh=xDT8MmTCqfb4fabvJyfgo3B8m1QWaEboDw31Z4T8kO4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jOtw9WNl9o/PqZXMW+JXsdee0EFvEkscfowclDmDJezJi+akbVIm4JUnPcU2Nnx/RZxQ0+NqMGJ5x2Jhpd16XRZTS+hJdZ+V453U+O37I+lzuszh8e6bG8FlML+/+QzvinI525qAks6ML7xoIt2C05d9L8dVsM10mKHbHGOF1Dc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G51IAzEU; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G51IAzEU" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-43d70c30767so2207997f8f.0 for ; Wed, 15 Apr 2026 05:47:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257260; x=1776862060; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MiKh6hXlgngZFeSLLnc8/Z2J3N8UGPehpM7gS84z/Lo=; b=G51IAzEUId8lT41bjnjf5K80Qrm8fr0b39+EQun8vgL2LLQz0T70R/p6+FizRd6EKA I/T3M4ocb665JLvWht5ygYDMOG1B901bEgTvCEIEFBsN5aBRqs+gN90V96jmJyi8xg24 yL2o00PVRsvypUd5FOd3uQnNc01JGuNtBdkOErNk17uPQBnHTviYwFR4Bem9/ypas4fz 04BjHOoH0wp1dteu0Ubai5igp5YVGhwG4DBtetfLgaBcV3qwKOCQ7blW4NxD+5r9Rpz5 aHmPQSO4/Ixz/wIGiWDR2hM6eDN+R9IVOxSsKq3gfA2FqUeq18ib4H0qjlQZQPC0Pf6Y 9YRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257260; x=1776862060; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=MiKh6hXlgngZFeSLLnc8/Z2J3N8UGPehpM7gS84z/Lo=; b=Qa7IpeIeHqrVxTl0g6cr9VUM/Ek2SNmUIRn4PGb8CZuhoyy9iBXyKXU7oHmERoGI/I LQpkMluDYcExXIWAgF8mMbWJdJcIEjGB6JluTyrn6pt7fPUVqixUbexzbWPeghP/Rp4b mrE31DsSlZkzHy0UeCQttCJKbhwvRuZ/21dYZ2XaUVDs494HjKxLTqCF6NrOmfVbGIbl yue4bArWP68XMvorwm6xBbYuTkR9p//SKhS4X87L1tocE1NUajztTKLA/DYYKm6TSCb7 0tEgmYQFX5ODaI3MzMOXbGjcouFv8cEAiBYtJf9Z0jMet+oefMIJj8WjDfPE4c+wRXxn uNCw== X-Forwarded-Encrypted: i=1; AFNElJ/2mn4c0EafnJeUYWy51VNTQZkReuNZOOgX613r8ubWhidtGAAAJ+3AM8xpF0aTb9KjvqSY//xeUXWQn5g=@vger.kernel.org X-Gm-Message-State: AOJu0YzNlxhlfsqd7rjOMoos2g+1s9Uc+saql8v2WCekaI/gaxfsQrdh 1KNi8ZROqtMCMAR151gwNsT0vmn1mqCIziJLQQdchVOvTbyf4A+5QVB1 X-Gm-Gg: AeBDieuiukoVK6pRwIFCDzBu8rFRR17O0yM3u3jDyO+KtkULrm1Xu/PB5m1FXDJgjLV E5uFikYSUMadlG0EP4yiy9Oi8NXqyJdGWtJtxLlsteEaMXKhiZNWK4VQBoQhk1IIoH+p7LgQHpG 16ioBvxWRnyATcqk2Fr40PZJkCRwciSxSbBuJv26jDz3tiIPvkZKlhLfW4R69WK7fFshWuIM+AD wxvTHfpPo62zI89yjILg7CMWwD14he6uMz2NOOnzLhEGLZJfdOmcdl6lS1ibLhHSQh9tBEkQI1C //e0n1HKiHyugmZM7uCOWw9TxCX7lwX6BkL2/qXZy8Eplv2MFhXnGeaGXpna3BL3tYzGLaJvzgk X8CTAGZ1BITxkTv/iujQsbB77JM/sDacRBXGGlIS5YEH/lDhqxQhrhY9rCXYiEuGfEtUcKblD3G p0CH614oOiXJm+t0uZCf1XI9Q4s7QL6R3d2x3hqw== X-Received: by 2002:a05:6000:144d:b0:43d:7c0f:b310 with SMTP id ffacd0b85a97d-43d7c0fb426mr15652967f8f.10.1776257259695; Wed, 15 Apr 2026 05:47:39 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:39 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 04/14] ASoC: rsnd: Add RZ/G3E SoC probing and register map Date: Wed, 15 Apr 2026 12:47:21 +0000 Message-Id: <20260415124731.3684773-5-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RZ/G3E audio subsystem has a different register layout compared to R-Car Gen2/Gen3/Gen4, as described below: - Different base address organization (SCU, ADG, SSIU, SSI as separate regions accessed by name) - Additional registers: AUDIO_CLK_SEL3, SSI_MODE3, SSI_CONTROL2 - Different register offsets within each region Add RZ/G3E SoC's audio subsystem register layouts and probe support. Signed-off-by: John Madieu --- Changes: v5: - Simplify flags layout comment per Kuninori's feedback - RSND_SOC_MASK fix moved to dedicated patch 02/14 v4: - Fix RSND_SOC_MASK to (0xF << 4) to avoid overlap with RSND_RZ_MASK - Add comment documenting flag nibble layout v3: No changes v2: No changes sound/soc/renesas/rcar/core.c | 1 + sound/soc/renesas/rcar/gen.c | 180 ++++++++++++++++++++++++++++++++++ sound/soc/renesas/rcar/rsnd.h | 26 ++++- 3 files changed, 204 insertions(+), 3 deletions(-) diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c index 28467e45acab..4544791f3883 100644 --- a/sound/soc/renesas/rcar/core.c +++ b/sound/soc/renesas/rcar/core.c @@ -107,6 +107,7 @@ static const struct of_device_id rsnd_of_match[] =3D { { .compatible =3D "renesas,rcar_sound-gen4", .data =3D (void *)RSND_GEN4 = }, /* Special Handling */ { .compatible =3D "renesas,rcar_sound-r8a77990", .data =3D (void *)(RSND_= GEN3 | RSND_SOC_E) }, + { .compatible =3D "renesas,r9a09g047-sound", .data =3D (void *)(RSND_RZ3 = | RSND_RZG3E) }, {}, }; MODULE_DEVICE_TABLE(of, rsnd_of_match); diff --git a/sound/soc/renesas/rcar/gen.c b/sound/soc/renesas/rcar/gen.c index d1f20cde66be..05d5f656fb01 100644 --- a/sound/soc/renesas/rcar/gen.c +++ b/sound/soc/renesas/rcar/gen.c @@ -464,6 +464,184 @@ static int rsnd_gen1_probe(struct rsnd_priv *priv) return ret_adg | ret_ssi; } =20 +/* + * RZ/G3E Generation + */ +static int rsnd_rzg3e_probe(struct rsnd_priv *priv) +{ + static const struct rsnd_regmap_field_conf conf_ssiu[] =3D { + RSND_GEN_S_REG(SSI_MODE1, 0x804), + RSND_GEN_S_REG(SSI_MODE2, 0x808), + RSND_GEN_S_REG(SSI_MODE3, 0x80c), + RSND_GEN_S_REG(SSI_CONTROL, 0x810), + RSND_GEN_S_REG(SSI_CONTROL2, 0x814), + RSND_GEN_S_REG(SSI_SYS_STATUS0, 0x840), + RSND_GEN_S_REG(SSI_SYS_STATUS1, 0x844), + RSND_GEN_S_REG(SSI_SYS_STATUS2, 0x848), + RSND_GEN_S_REG(SSI_SYS_STATUS3, 0x84c), + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE0, 0x850), + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE1, 0x854), + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE2, 0x858), + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE3, 0x85c), + RSND_GEN_M_REG(SSI_BUSIF0_MODE, 0x0, 0x80), + RSND_GEN_M_REG(SSI_BUSIF0_ADINR, 0x4, 0x80), + RSND_GEN_M_REG(SSI_BUSIF0_DALIGN, 0x8, 0x80), + RSND_GEN_M_REG(SSI_BUSIF1_MODE, 0x20, 0x80), + RSND_GEN_M_REG(SSI_BUSIF1_ADINR, 0x24, 0x80), + RSND_GEN_M_REG(SSI_BUSIF1_DALIGN, 0x28, 0x80), + RSND_GEN_M_REG(SSI_BUSIF2_MODE, 0x40, 0x80), + RSND_GEN_M_REG(SSI_BUSIF2_ADINR, 0x44, 0x80), + RSND_GEN_M_REG(SSI_BUSIF2_DALIGN, 0x48, 0x80), + RSND_GEN_M_REG(SSI_BUSIF3_MODE, 0x60, 0x80), + RSND_GEN_M_REG(SSI_BUSIF3_ADINR, 0x64, 0x80), + RSND_GEN_M_REG(SSI_BUSIF3_DALIGN, 0x68, 0x80), + RSND_GEN_M_REG(SSI_MODE, 0xc, 0x80), + RSND_GEN_M_REG(SSI_CTRL, 0x10, 0x80), + RSND_GEN_M_REG(SSI_INT_ENABLE, 0x18, 0x80), + RSND_GEN_S_REG(SSI9_BUSIF0_MODE, 0x480), + RSND_GEN_S_REG(SSI9_BUSIF0_ADINR, 0x484), + RSND_GEN_S_REG(SSI9_BUSIF0_DALIGN, 0x488), + RSND_GEN_S_REG(SSI9_BUSIF1_MODE, 0x4a0), + RSND_GEN_S_REG(SSI9_BUSIF1_ADINR, 0x4a4), + RSND_GEN_S_REG(SSI9_BUSIF1_DALIGN, 0x4a8), + RSND_GEN_S_REG(SSI9_BUSIF2_MODE, 0x4c0), + RSND_GEN_S_REG(SSI9_BUSIF2_ADINR, 0x4c4), + RSND_GEN_S_REG(SSI9_BUSIF2_DALIGN, 0x4c8), + RSND_GEN_S_REG(SSI9_BUSIF3_MODE, 0x4e0), + RSND_GEN_S_REG(SSI9_BUSIF3_ADINR, 0x4e4), + RSND_GEN_S_REG(SSI9_BUSIF3_DALIGN, 0x4e8), + }; + static const struct rsnd_regmap_field_conf conf_scu[] =3D { + RSND_GEN_M_REG(SRC_I_BUSIF_MODE, 0x0, 0x20), + RSND_GEN_M_REG(SRC_O_BUSIF_MODE, 0x4, 0x20), + RSND_GEN_M_REG(SRC_BUSIF_DALIGN, 0x8, 0x20), + RSND_GEN_M_REG(SRC_ROUTE_MODE0, 0xc, 0x20), + RSND_GEN_M_REG(SRC_CTRL, 0x10, 0x20), + RSND_GEN_M_REG(SRC_INT_ENABLE0, 0x18, 0x20), + RSND_GEN_M_REG(CMD_BUSIF_MODE, 0x184, 0x20), + RSND_GEN_M_REG(CMD_BUSIF_DALIGN, 0x188, 0x20), + RSND_GEN_M_REG(CMD_ROUTE_SLCT, 0x18c, 0x20), + RSND_GEN_M_REG(CMD_CTRL, 0x190, 0x20), + RSND_GEN_S_REG(SCU_SYS_STATUS0, 0x1c8), + RSND_GEN_S_REG(SCU_SYS_INT_EN0, 0x1cc), + RSND_GEN_S_REG(SCU_SYS_STATUS1, 0x1d0), + RSND_GEN_S_REG(SCU_SYS_INT_EN1, 0x1d4), + RSND_GEN_M_REG(SRC_SWRSR, 0x200, 0x40), + RSND_GEN_M_REG(SRC_SRCIR, 0x204, 0x40), + RSND_GEN_M_REG(SRC_ADINR, 0x214, 0x40), + RSND_GEN_M_REG(SRC_IFSCR, 0x21c, 0x40), + RSND_GEN_M_REG(SRC_IFSVR, 0x220, 0x40), + RSND_GEN_M_REG(SRC_SRCCR, 0x224, 0x40), + RSND_GEN_M_REG(SRC_BSDSR, 0x22c, 0x40), + RSND_GEN_M_REG(SRC_BSISR, 0x238, 0x40), + RSND_GEN_M_REG(CTU_SWRSR, 0x500, 0x100), + RSND_GEN_M_REG(CTU_CTUIR, 0x504, 0x100), + RSND_GEN_M_REG(CTU_ADINR, 0x508, 0x100), + RSND_GEN_M_REG(CTU_CPMDR, 0x510, 0x100), + RSND_GEN_M_REG(CTU_SCMDR, 0x514, 0x100), + RSND_GEN_M_REG(CTU_SV00R, 0x518, 0x100), + RSND_GEN_M_REG(CTU_SV01R, 0x51c, 0x100), + RSND_GEN_M_REG(CTU_SV02R, 0x520, 0x100), + RSND_GEN_M_REG(CTU_SV03R, 0x524, 0x100), + RSND_GEN_M_REG(CTU_SV04R, 0x528, 0x100), + RSND_GEN_M_REG(CTU_SV05R, 0x52c, 0x100), + RSND_GEN_M_REG(CTU_SV06R, 0x530, 0x100), + RSND_GEN_M_REG(CTU_SV07R, 0x534, 0x100), + RSND_GEN_M_REG(CTU_SV10R, 0x538, 0x100), + RSND_GEN_M_REG(CTU_SV11R, 0x53c, 0x100), + RSND_GEN_M_REG(CTU_SV12R, 0x540, 0x100), + RSND_GEN_M_REG(CTU_SV13R, 0x544, 0x100), + RSND_GEN_M_REG(CTU_SV14R, 0x548, 0x100), + RSND_GEN_M_REG(CTU_SV15R, 0x54c, 0x100), + RSND_GEN_M_REG(CTU_SV16R, 0x550, 0x100), + RSND_GEN_M_REG(CTU_SV17R, 0x554, 0x100), + RSND_GEN_M_REG(CTU_SV20R, 0x558, 0x100), + RSND_GEN_M_REG(CTU_SV21R, 0x55c, 0x100), + RSND_GEN_M_REG(CTU_SV22R, 0x560, 0x100), + RSND_GEN_M_REG(CTU_SV23R, 0x564, 0x100), + RSND_GEN_M_REG(CTU_SV24R, 0x568, 0x100), + RSND_GEN_M_REG(CTU_SV25R, 0x56c, 0x100), + RSND_GEN_M_REG(CTU_SV26R, 0x570, 0x100), + RSND_GEN_M_REG(CTU_SV27R, 0x574, 0x100), + RSND_GEN_M_REG(CTU_SV30R, 0x578, 0x100), + RSND_GEN_M_REG(CTU_SV31R, 0x57c, 0x100), + RSND_GEN_M_REG(CTU_SV32R, 0x580, 0x100), + RSND_GEN_M_REG(CTU_SV33R, 0x584, 0x100), + RSND_GEN_M_REG(CTU_SV34R, 0x588, 0x100), + RSND_GEN_M_REG(CTU_SV35R, 0x58c, 0x100), + RSND_GEN_M_REG(CTU_SV36R, 0x590, 0x100), + RSND_GEN_M_REG(CTU_SV37R, 0x594, 0x100), + RSND_GEN_M_REG(MIX_SWRSR, 0xd00, 0x40), + RSND_GEN_M_REG(MIX_MIXIR, 0xd04, 0x40), + RSND_GEN_M_REG(MIX_ADINR, 0xd08, 0x40), + RSND_GEN_M_REG(MIX_MIXMR, 0xd10, 0x40), + RSND_GEN_M_REG(MIX_MVPDR, 0xd14, 0x40), + RSND_GEN_M_REG(MIX_MDBAR, 0xd18, 0x40), + RSND_GEN_M_REG(MIX_MDBBR, 0xd1c, 0x40), + RSND_GEN_M_REG(MIX_MDBCR, 0xd20, 0x40), + RSND_GEN_M_REG(MIX_MDBDR, 0xd24, 0x40), + RSND_GEN_M_REG(MIX_MDBER, 0xd28, 0x40), + RSND_GEN_M_REG(DVC_SWRSR, 0xe00, 0x100), + RSND_GEN_M_REG(DVC_DVUIR, 0xe04, 0x100), + RSND_GEN_M_REG(DVC_ADINR, 0xe08, 0x100), + RSND_GEN_M_REG(DVC_DVUCR, 0xe10, 0x100), + RSND_GEN_M_REG(DVC_ZCMCR, 0xe14, 0x100), + RSND_GEN_M_REG(DVC_VRCTR, 0xe18, 0x100), + RSND_GEN_M_REG(DVC_VRPDR, 0xe1c, 0x100), + RSND_GEN_M_REG(DVC_VRDBR, 0xe20, 0x100), + RSND_GEN_M_REG(DVC_VOL0R, 0xe28, 0x100), + RSND_GEN_M_REG(DVC_VOL1R, 0xe2c, 0x100), + RSND_GEN_M_REG(DVC_VOL2R, 0xe30, 0x100), + RSND_GEN_M_REG(DVC_VOL3R, 0xe34, 0x100), + RSND_GEN_M_REG(DVC_VOL4R, 0xe38, 0x100), + RSND_GEN_M_REG(DVC_VOL5R, 0xe3c, 0x100), + RSND_GEN_M_REG(DVC_VOL6R, 0xe40, 0x100), + RSND_GEN_M_REG(DVC_VOL7R, 0xe44, 0x100), + RSND_GEN_M_REG(DVC_DVUER, 0xe48, 0x100), + }; + static const struct rsnd_regmap_field_conf conf_adg[] =3D { + RSND_GEN_S_REG(BRRA, 0x00), + RSND_GEN_S_REG(BRRB, 0x04), + RSND_GEN_S_REG(BRGCKR, 0x08), + RSND_GEN_S_REG(AUDIO_CLK_SEL0, 0x0c), + RSND_GEN_S_REG(AUDIO_CLK_SEL1, 0x10), + RSND_GEN_S_REG(AUDIO_CLK_SEL2, 0x14), + RSND_GEN_S_REG(AUDIO_CLK_SEL3, 0x18), + RSND_GEN_S_REG(DIV_EN, 0x30), + RSND_GEN_S_REG(SRCIN_TIMSEL0, 0x34), + RSND_GEN_S_REG(SRCIN_TIMSEL1, 0x38), + RSND_GEN_S_REG(SRCIN_TIMSEL2, 0x3c), + RSND_GEN_S_REG(SRCIN_TIMSEL3, 0x40), + RSND_GEN_S_REG(SRCIN_TIMSEL4, 0x44), + RSND_GEN_S_REG(SRCOUT_TIMSEL0, 0x48), + RSND_GEN_S_REG(SRCOUT_TIMSEL1, 0x4c), + RSND_GEN_S_REG(SRCOUT_TIMSEL2, 0x50), + RSND_GEN_S_REG(SRCOUT_TIMSEL3, 0x54), + RSND_GEN_S_REG(SRCOUT_TIMSEL4, 0x58), + RSND_GEN_S_REG(CMDOUT_TIMSEL, 0x5c), + }; + static const struct rsnd_regmap_field_conf conf_ssi[] =3D { + RSND_GEN_M_REG(SSICR, 0x00, 0x40), + RSND_GEN_M_REG(SSISR, 0x04, 0x40), + RSND_GEN_M_REG(SSIWSR, 0x20, 0x40), + }; + int ret; + + ret =3D rsnd_gen_regmap_init(priv, 10, RSND_BASE_SCU, "scu", conf_scu); + if (ret < 0) + return ret; + + ret =3D rsnd_gen_regmap_init(priv, 1, RSND_BASE_ADG, "adg", conf_adg); + if (ret < 0) + return ret; + + ret =3D rsnd_gen_regmap_init(priv, 10, RSND_BASE_SSIU, "ssiu", conf_ssiu); + if (ret < 0) + return ret; + + return rsnd_gen_regmap_init(priv, 10, RSND_BASE_SSI, "ssi", conf_ssi); +} + /* * Gen */ @@ -487,6 +665,8 @@ int rsnd_gen_probe(struct rsnd_priv *priv) ret =3D rsnd_gen2_probe(priv); else if (rsnd_is_gen4(priv)) ret =3D rsnd_gen4_probe(priv); + else if (rsnd_is_rzg3e(priv)) + ret =3D rsnd_rzg3e_probe(priv); =20 if (ret < 0) dev_err(dev, "unknown generation R-Car sound device\n"); diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 3d419b31cf40..16d7eafedae1 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -143,13 +143,16 @@ enum rsnd_reg { AUDIO_CLK_SEL0, AUDIO_CLK_SEL1, AUDIO_CLK_SEL2, + AUDIO_CLK_SEL3, =20 /* SSIU */ SSI_MODE, SSI_MODE0, SSI_MODE1, SSI_MODE2, + SSI_MODE3, SSI_CONTROL, + SSI_CONTROL2, SSI_CTRL, SSI_BUSIF0_MODE, SSI_BUSIF1_MODE, @@ -622,14 +625,28 @@ struct rsnd_priv { struct platform_device *pdev; spinlock_t lock; unsigned long flags; + + /* + * Flags layout: 0xDCBA + * + * A: R-Car generation (Gen1/Gen2/Gen3/Gen4) + * B: R-Car SoC variant (e.g. SOC_E for E1/E2/E3) + * C: RZ series generation + * D: RZ series SoC identifier (e.g. RZG3E) + * + * Bits 16+ are used for capability flags. + */ #define RSND_GEN_MASK (0xF << 0) #define RSND_GEN1 (1 << 0) #define RSND_GEN2 (2 << 0) #define RSND_GEN3 (3 << 0) #define RSND_GEN4 (4 << 0) -#define RSND_SOC_MASK (0xF << 4) -#define RSND_SOC_E (1 << 4) /* E1/E2/E3 */ - +#define RSND_SOC_MASK (0xF << 4) /* nibble B */ +#define RSND_SOC_E (1 << 4) /* E1/E2/E3 */ +#define RSND_RZ_MASK (0xF << 8) /* nibble C */ +#define RSND_RZ3 (3 << 8) +#define RSND_RZ_ID_MASK (0xF << 12) /* nibble D */ +#define RSND_RZG3E (1 << 12) /* * below value will be filled on rsnd_gen_probe() */ @@ -708,6 +725,9 @@ struct rsnd_priv { #define rsnd_is_gen3_e3(priv) (((priv)->flags & \ (RSND_GEN_MASK | RSND_SOC_MASK)) =3D=3D \ (RSND_GEN3 | RSND_SOC_E)) +#define rsnd_is_rzg3e(priv) (((priv)->flags & \ + (RSND_RZ_MASK | RSND_RZ_ID_MASK)) =3D=3D \ + (RSND_RZ3 | RSND_RZG3E)) =20 #define rsnd_flags_has(p, f) ((p)->flags & (f)) #define rsnd_flags_set(p, f) ((p)->flags |=3D (f)) --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 691BD32695F for ; Wed, 15 Apr 2026 12:47:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257264; cv=none; b=Q99NSNHBdJpXUm/l9Q27QMD5pniFcsQVN/D7bVwQ5nnYcDySwb4tNKWFYJhE457/WXpzteXZt4fY4kEl6ZEEqv7dP0MnoH7HhNdGOTvCa0Fq1ZWApU7rtC8+ik8YaWMbHTaYfosb9pErjzdj3jEe/VeKs7I0+sJVKGboVxbyq4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257264; c=relaxed/simple; bh=1i4vtlL/MuJz61IDw0/C+/bm5U9XK4wosBXKE8p2dsI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sBAw0EtK46Ca0LHMQa0jWKeRMNE6uSm8RUeTNzXRdpKAmP2gl8jCZguUwt+5SSaUDzKPoh6YO1f1fxxbc0PF2mo75Z9ErWZK1B45+CW+V6bsTm//8eYhrZlKCuZ138AqzDY6W2UQMAOIhLezEbIi7xH6oAGuCgIX3hYKCZhFfdA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fg+QJ1jd; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fg+QJ1jd" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-43d72875729so2427623f8f.3 for ; Wed, 15 Apr 2026 05:47:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257261; x=1776862061; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UnajQ8XOv4b8ZHbW7mJFy+SmDdF5Y0rpVZJX4dT/uKs=; b=fg+QJ1jdM1U+9JYftr9loCH3r5mAtsgqj0+5v+OOWqvHHH3rhGeOqAvteX++tUIBrL E21eC5OHDssiSOnOAvitUfnfP/+nexA26iYnanGNYrzibO0Yzx2flRqaYDiogsXh/4lJ fShN2ML2ge7ihW5VbCw04DhVuaCUNPxZ5rP6CFWmM9KIynB0TKMiPu85dJEzmIOTra6q xYaFuVjLO1FJT/Op927wqSfVWNHYffWlHj1L+53Z8UG7Ogi3vMpXIHeapTR81qHSSJ0h p09B6+z+zdgl7B9ZMf23WMwHesq32Xagb/CmBxi+6W4iopZdxbh/6u1STe0lhttTbKYE +JEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257261; x=1776862061; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=UnajQ8XOv4b8ZHbW7mJFy+SmDdF5Y0rpVZJX4dT/uKs=; b=Mv525AjFMknjN+NOXotkGeiGA3qk2QJyfaA7FrEHprL7+EnE9dmH2h89KHKdhj+u5t KBtQTcvLr1z+/kAV+LstnTloMq7wdnYkBlvc38lPAm1KWUbWBqHgHJj1WIGdqoyTVrPW vv69aM3Cr6i5zFY1fuHfs88ITl9YA+uzSgVXEO+4ANNRnM3v8wZlJDSHcoZ9oqJpu1bf cTsqaX9pNNUwBZ8neCJDsjFk06CHVux0CxjLecWWrXANZgwP8qf6ZdsBMDWD0a1G6VCg BEWSgZZy8r0+Xm+XRjjicWNonN6+JLkggjo0T+2LCZWSIueE1lKxZJK3PqbidalXG2ca rycQ== X-Forwarded-Encrypted: i=1; AFNElJ/KyBNNXQ3CUMsYoT3hzGUp1XrQXgKiW/avquBqfVLsAtkAKUWjk0E0XlBVbTCzpwq786snqG63Qm6bVuE=@vger.kernel.org X-Gm-Message-State: AOJu0YxCVuiMo9riR5bMlxUv1BdEen7OqpYprbbuji8VAA20xXR4ea/+ 91l5Yd2k1zu2dvOOL9l4kqWI5yR7LJaxc8EmPUhn4QUNiqgaDgJmGfZI X-Gm-Gg: AeBDietgSAoMO56e2UGufkiSITs+6AxnLJXkVWwBc8Cz2RYtagDairppRy4cY+JrtOL fxH3Br44CGYvejHcPAnjZpuIzbF+1x7CG1/Bk0KNX7Lof3azhbUiY5cL5M0Ngnbtaq7hKgxTxY5 WMKugoiVO55ThPjODfXCTMKERKEstOLYCx/7pKgDYiknHmAb9nw2PST0b46hA4+tbxdBVz14NLe 62SOogG9aHF+mVrb6jLfeBnSu+lo0Bdo/9By1gptz+JQamegzFYDvqfrgMdoPfXmniYxMhCzfDJ qs5auMdIYQ/pnXZTEYhQiKLX8FIGG3yOIqCSbPL594anQjVkiOW1Bv+jwFggtuOJFRXx+Eeuf3O DDyq2LWAneocKO+nIi3nZSIFNrOyPu20bjXToLnu4bSFsj8LYmPJUkDkoUjF6Yox3gehH1LOu0A IHBjq11IQoUduZ3TeGr9ROkoavzRdrbhkpnaXlq6qNlZEFL3cL X-Received: by 2002:a05:6000:40cb:b0:43c:ef4f:79e4 with SMTP id ffacd0b85a97d-43d642b461cmr31372573f8f.37.1776257260716; Wed, 15 Apr 2026 05:47:40 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:40 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 05/14] ASoC: rsnd: Add audmacpp clock and reset support for RZ/G3E Date: Wed, 15 Apr 2026 12:47:22 +0000 Message-Id: <20260415124731.3684773-6-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RZ/G3E requires additional audmapp clock and reset lines for Audio DMA-PP operation. Add global audmacpp clock/reset management in rsnd_dma_probe() using optional APIs to remain transparent to other platforms. Signed-off-by: John Madieu --- Changes: v5: - Add comment on audmapp clock/reset acquisition clarifying these are optional and transparent to platforms that don't have them in DT, per Kuninori's request - Drop spurious blank line added to struct rsnd_priv in rsnd.h v4: - Move audmapp_clk and audmapp_rstc from struct rsnd_priv into struct rsnd_dma_ctrl v3: No changes v2: No changes sound/soc/renesas/rcar/dma.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index 68c859897e68..ab9694589052 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -47,6 +47,9 @@ struct rsnd_dma_ctrl { phys_addr_t ppres; int dmaen_num; int dmapp_num; + /* RZ/G3E: Audio DMAC peri-peri clock and reset */ + struct clk *audmapp_clk; + struct reset_control *audmapp_rstc; }; =20 #define rsnd_priv_to_dmac(p) ((struct rsnd_dma_ctrl *)(p)->dma) @@ -864,6 +867,24 @@ int rsnd_dma_probe(struct rsnd_priv *priv) if (rsnd_is_gen4(priv)) goto audmapp_end; =20 + /* + * Audio DMAC peri-peri clock and reset for RZ/G3E. + * These use optional APIs, so they gracefully return NULL + * (no error) on platforms whose DT does not provide them. + */ + dmac->audmapp_rstc =3D + devm_reset_control_get_optional_exclusive_deasserted(dev, "audmapp"); + if (IS_ERR(dmac->audmapp_rstc)) { + return dev_err_probe(dev, PTR_ERR(dmac->audmapp_rstc), + "failed to get audmapp reset\n"); + } + + dmac->audmapp_clk =3D devm_clk_get_optional_enabled(dev, "audmapp"); + if (IS_ERR(dmac->audmapp_clk)) { + return dev_err_probe(dev, PTR_ERR(dmac->audmapp_clk), + "failed to get audmapp clock\n"); + } + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "audmapp"); if (!res) { dev_err(dev, "lack of audmapp in DT\n"); --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1D4533EAF9 for ; Wed, 15 Apr 2026 12:47:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257266; cv=none; b=GTeDb3k5WNVl7M5gfm0MkhJdl/BQlq6+SF5ZP0JJKTiwTlNVOliQpdHUQagworDAJ+JYT+sB3k/lwKXjSgybSu0WE6L0JdjiActaQfL/IydIwgH7iEV7tPhnxdBoaePBTcobylP+dtYorFL/x7f5uz+aekriDe9JdzSRdBd24Ns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257266; c=relaxed/simple; bh=4tYxfcZaOQgAqpQgivOn9HYNKKlERBSPufAHePGaTmo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mj9/z/ITFP503pmYJwiLGGCWf7akSrnxg7SkjVkEIFz6415+O3wPRPZfo2YNfFPl1YCcp4NtnyBuzfqQlMp8IB9gPJQqin1DiGiE+srmFIG0sQFX1xb76dBZxGqrWOBiICQtWPlBQWLLFp+r1evOkLLT/AP7wnepl5SY+A5/MyQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZKU9jR6g; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZKU9jR6g" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-48374014a77so90334005e9.3 for ; Wed, 15 Apr 2026 05:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257262; x=1776862062; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8AuYxNcOpJ7xKuxZlqVlteeY0wdXOkWrTHrG8+sRId0=; b=ZKU9jR6geZnaf69eC4iTMajM3//OFBq9ORBFyEc5NgOShuMCCDbmXqovHsHLjnl4aF y/Ar9VZG9hdFjCEaohj6iT80dBwe458CMqGdhA4toXCtCfNoI0FlNeWYm/HuWYs5GJA5 8uGGQc3NfTchT4j6AORW+TO/cSyF6HB9AjkbZ9a4Jjdxc1zYR3cdPj9rcYabKp1Ainqx 5e1xy49jw/TbgZuUZeXAgOiq39zEhvvbLGZPGeLtodDC/P/uzuGw1ksI3uLjoVcRE7lw ZZPzxOTc3LW15NtMrJsHdIMpo8zZM5G/wMjWisiXGT5Sx6Q3Vh2wDMByILLkSnIgY3du 1DYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257262; x=1776862062; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=8AuYxNcOpJ7xKuxZlqVlteeY0wdXOkWrTHrG8+sRId0=; b=QoeT4BaSxNbeqzIq8LjtYYakpp4ZTVFBRjDY6Jv/YmIA9G7fyCUfTrVarWfKUDvLru cUAJU4GynoVz/AoeXhm+vID5Yr5D3SbPSy+Jt9MxXgBW7f24FZj7JtvY5BES0rOHh+3g 0LxAQbz0gIZafEQweHUeQz55/ZNyrAM3+gFEm11GMlnhMhWmU+OhAHuWoJa0s52zvr1n UBf90DeIazK5ak+vKFt0MtZ858z8sDjo06H61TMJTxXKBPtk1+XUD3oiaiN7MsacgGPZ FGCd+F6XtUr60ZIwG6gZ/cGQdcsfn10HpAxw9L4KC4VNmEpXGX1Ypy/n7kpj1qNNuCyr UcJw== X-Forwarded-Encrypted: i=1; AFNElJ9IpAOfCmCk3Eawwyo/Dou4Mu6CTiFECga6udH82Pe0TUTb+2c6NlTROuyDntHyeri4H3tKVWvKMOtysxM=@vger.kernel.org X-Gm-Message-State: AOJu0YxiK7dIWoLk+ACxNA4hJ+GI1Cg9NPdI9bAjelaMnyXdwHLvAtVv i45QQmZBnfoaXF2hVSJFphZ+3MuVsoKm88A1yH1LCtY4cTbhIp/Jv8dr X-Gm-Gg: AeBDievpvJ90P5AOVjiW4jxVNuSBSmmNLaOR6aNkWQk1UWII5PSr/NIvcD0MFyEWT35 67/CF8+KBXsIVC5UcTjj6LEP/vBCeP+HAyWfCBzyVqbEtYd2k5iHP3mPqe1L/2JF8e/CAxEyxNB aXwo9cwo5pYHNdrC3SM0jeGLw7Btoju8xOzst+4necCQDwnk8fYi1svucE1SeeMYd/tAXuK7YwN azKBKhyeX0qFm/EFVYckg+Loa6mHMoQlVxfyT2iGP6aK0RHFxIXbEc7n8C8K4SNDQQDdjxmRwWW ChIVHVPxTBfra0UJaBKC1sUHXMwuJYIID+OeotlfH+i11uICnEVLNn0J4yO1VAGQLZBepLxVozF TsJ4WVcaWsMWDXIUhYVNdaxElQ4MI4DQa+WdMtNBVOUvPwUglLwR2NV4YJiIrzkPtVtLxAfwwel lSxU0IdBNLjGbkyeIOPb9FVf0xI6ubLIRXUSnmgA== X-Received: by 2002:a05:600c:a105:b0:486:d76c:fa57 with SMTP id 5b1f17b1804b1-488d685b75emr209800885e9.17.1776257261922; Wed, 15 Apr 2026 05:47:41 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:41 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 06/14] ASoC: rsnd: Refactor DMA address tables with named structs Date: Wed, 15 Apr 2026 12:47:23 +0000 Message-Id: <20260415124731.3684773-7-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the raw multi-dimensional array used for DMA address lookup in rsnd_gen2_dma_addr() with properly named structs: rsnd_dma_addr (in/out pair), rsnd_dma_addr_dir (capture/playback arrays), and rsnd_dma_addr_map (src/ssi/ssiu module sets). While at it, extract the common lookup logic (is_ssi / use_src / use_cmd evaluation and table indexing) into a shared rsnd_dma_addr_lookup() function. No functional change. This is a preparatory refactor for upcoming RZ/G3E support which will add its own DMA address map using the same struct and lookup function. Signed-off-by: John Madieu --- Changes: =20 v5: - New patch, extracted from v4 patch 06/12 as a standalone preparatory refactor per Kuninori's request - No RZ/G3E content; purely the struct introduction and rsnd_gen2 conversion sound/soc/renesas/rcar/dma.c | 147 +++++++++++++++++++++++------------ 1 file changed, 99 insertions(+), 48 deletions(-) diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index ab9694589052..bd50f18fac26 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -481,6 +481,69 @@ static struct rsnd_mod_ops rsnd_dmapp_ops =3D { DEBUG_INFO }; =20 +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 playback[3]; +}; + +struct rsnd_dma_addr_map { + struct rsnd_dma_addr_dir src; + struct rsnd_dma_addr_dir ssi; + struct rsnd_dma_addr_dir ssiu; +}; + +static dma_addr_t +rsnd_dma_addr_lookup(struct rsnd_dai_stream *io, + struct rsnd_mod *mod, + struct rsnd_priv *priv, + const struct rsnd_dma_addr_map *map, + int is_play, int is_from) +{ + struct device *dev =3D rsnd_priv_to_dev(priv); + int is_ssi =3D !!(rsnd_io_to_mod_ssi(io) =3D=3D mod) || + !!(rsnd_io_to_mod_ssiu(io) =3D=3D mod); + int use_src =3D !!rsnd_io_to_mod_src(io); + int use_cmd =3D !!rsnd_io_to_mod_dvc(io) || + !!rsnd_io_to_mod_mix(io) || + !!rsnd_io_to_mod_ctu(io); + int id =3D rsnd_mod_id(mod); + const struct rsnd_dma_addr_dir *dir; + const struct rsnd_dma_addr *addr; + + /* it shouldn't happen */ + if (use_cmd && !use_src) + dev_err(dev, "DVC is selected without SRC\n"); + + /* use SSIU or SSI? */ + if (is_ssi && rsnd_ssi_use_busif(io)) + is_ssi++; + + dev_dbg(dev, "dma%d addr : is_ssi=3D%d use_src=3D%d use_cmd=3D%d\n", + id, is_ssi, use_src, use_cmd); + + switch (is_ssi) { + case 2: + dir =3D &map->ssiu; + break; + case 1: + dir =3D &map->ssi; + break; + default: + dir =3D &map->src; + break; + } + + addr =3D is_play ? &dir->playback[use_src + use_cmd] + : &dir->capture[use_src + use_cmd]; + + return is_from ? addr->out_addr : addr->in_addr; +} + /* * Common DMAC Interface */ @@ -527,47 +590,45 @@ rsnd_gen2_dma_addr(struct rsnd_dai_stream *io, struct device *dev =3D rsnd_priv_to_dev(priv); phys_addr_t ssi_reg =3D rsnd_gen_get_phy_addr(priv, RSND_BASE_SSI); phys_addr_t src_reg =3D rsnd_gen_get_phy_addr(priv, RSND_BASE_SCU); - int is_ssi =3D !!(rsnd_io_to_mod_ssi(io) =3D=3D mod) || - !!(rsnd_io_to_mod_ssiu(io) =3D=3D mod); - int use_src =3D !!rsnd_io_to_mod_src(io); - int use_cmd =3D !!rsnd_io_to_mod_dvc(io) || - !!rsnd_io_to_mod_mix(io) || - !!rsnd_io_to_mod_ctu(io); int id =3D rsnd_mod_id(mod); int busif =3D rsnd_mod_id_sub(rsnd_io_to_mod_ssiu(io)); - struct dma_addr { - dma_addr_t out_addr; - dma_addr_t in_addr; - } dma_addrs[3][2][3] =3D { - /* SRC */ - /* Capture */ - {{{ 0, 0 }, - { RDMA_SRC_O_N(src, id), RDMA_SRC_I_P(src, id) }, - { RDMA_CMD_O_N(src, id), RDMA_SRC_I_P(src, id) } }, - /* Playback */ - {{ 0, 0, }, - { RDMA_SRC_O_P(src, id), RDMA_SRC_I_N(src, id) }, - { RDMA_CMD_O_P(src, id), RDMA_SRC_I_N(src, id) } } + const struct rsnd_dma_addr_map map =3D { + .src =3D { + .capture =3D { + { 0, 0 }, + { RDMA_SRC_O_N(src, id), RDMA_SRC_I_P(src, id) }, + { RDMA_CMD_O_N(src, id), RDMA_SRC_I_P(src, id) }, + }, + .playback =3D { + { 0, 0 }, + { RDMA_SRC_O_P(src, id), RDMA_SRC_I_N(src, id) }, + { RDMA_CMD_O_P(src, id), RDMA_SRC_I_N(src, id) }, + }, + }, + .ssi =3D { + .capture =3D { + { RDMA_SSI_O_N(ssi, id), 0 }, + { RDMA_SSIU_O_P(ssi, id, busif), 0 }, + { RDMA_SSIU_O_P(ssi, id, busif), 0 }, + }, + .playback =3D { + { 0, RDMA_SSI_I_N(ssi, id) }, + { 0, RDMA_SSIU_I_P(ssi, id, busif) }, + { 0, RDMA_SSIU_I_P(ssi, id, busif) }, + }, }, - /* SSI */ - /* Capture */ - {{{ RDMA_SSI_O_N(ssi, id), 0 }, - { RDMA_SSIU_O_P(ssi, id, busif), 0 }, - { RDMA_SSIU_O_P(ssi, id, busif), 0 } }, - /* Playback */ - {{ 0, RDMA_SSI_I_N(ssi, id) }, - { 0, RDMA_SSIU_I_P(ssi, id, busif) }, - { 0, RDMA_SSIU_I_P(ssi, id, busif) } } + .ssiu =3D { + .capture =3D { + { RDMA_SSIU_O_N(ssi, id, busif), 0 }, + { RDMA_SSIU_O_P(ssi, id, busif), 0 }, + { RDMA_SSIU_O_P(ssi, id, busif), 0 }, + }, + .playback =3D { + { 0, RDMA_SSIU_I_N(ssi, id, busif) }, + { 0, RDMA_SSIU_I_P(ssi, id, busif) }, + { 0, RDMA_SSIU_I_P(ssi, id, busif) }, + }, }, - /* SSIU */ - /* Capture */ - {{{ RDMA_SSIU_O_N(ssi, id, busif), 0 }, - { RDMA_SSIU_O_P(ssi, id, busif), 0 }, - { RDMA_SSIU_O_P(ssi, id, busif), 0 } }, - /* Playback */ - {{ 0, RDMA_SSIU_I_N(ssi, id, busif) }, - { 0, RDMA_SSIU_I_P(ssi, id, busif) }, - { 0, RDMA_SSIU_I_P(ssi, id, busif) } } }, }; =20 /* @@ -580,17 +641,7 @@ rsnd_gen2_dma_addr(struct rsnd_dai_stream *io, dev_err(dev, "This driver doesn't support SSI%d-%d, so far", id, busif); =20 - /* it shouldn't happen */ - if (use_cmd && !use_src) - dev_err(dev, "DVC is selected without SRC\n"); - - /* use SSIU or SSI ? */ - if (is_ssi && rsnd_ssi_use_busif(io)) - is_ssi++; - - return (is_from) ? - dma_addrs[is_ssi][is_play][use_src + use_cmd].out_addr : - dma_addrs[is_ssi][is_play][use_src + use_cmd].in_addr; + return rsnd_dma_addr_lookup(io, mod, priv, &map, is_play, is_from); } =20 /* --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAE6E344D8C for ; Wed, 15 Apr 2026 12:47:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257267; cv=none; b=uU2nl9qeoTHjprt443SpQeDb62KsVHl43p4DYViDDmy4TDoDqvjSf1ahqswyTUczE68k7bcS6lnYzZ0xNMfDKY+CQ/ekHUItp5YXk7GA69dE03kTPDK8yvdOr3rCJtYX6euofzRykBpsozEyWzv6UeoL63QoIdP9KRn9T2KISBY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257267; c=relaxed/simple; bh=ykOx6nmdO7N46uYg7E6z76pv7h/Zr3uqqafyG6jh9qs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BXxug43k/+vT3zepT5Wl5wFcef02r3GG2diaqgrPbv6GymbGsIdlztElwMC0C3pSwMdE5YT6yVC5Ir5zAgKoVT5pgyNuMxLbtMzwgnr3+8e3ZOOBk9mWl9wvAdJLc0qLyV0RHO0JOaL6j1RKTCwRhVMgJuhYIThooamPDalkzFc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Tw6BbXUZ; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tw6BbXUZ" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-43cf8d550bdso6237352f8f.0 for ; Wed, 15 Apr 2026 05:47:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257263; x=1776862063; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+16q0XMj0UzMs2F4JTG9M8USrbjAiD8yBYbSUTaTrTw=; b=Tw6BbXUZHNZQ6r+QEY24VWasrdIBrHpKEzoncg57rtdD6kNndOMTmJzwwQ5RnJprQq aDnTwlGk3ckWCQ22g3kwxFgJcWAxTwiOTBhUzyQLJ2jpiJN8nfsFag5cnjTfMBumHj/9 Gt2J288SiXUY90jAGulwJg8Vk4MGO/DnHeWZVsWWPxWHT9XxjSXdScqYvwLqX1iBbqdt aJkJuyNu38RBpfrMUpjwMQyA1/kmlsrPuU9mwFLYxuOfnAM3xI27CNg7rOr7Qr+RP0RK 0sq7rrOEQaNWwHCxAnZZbANljiDnT36U1GHHoUwxOEkOZtvLuYwjRUzFHyJsecwB/jHP BPlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257263; x=1776862063; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+16q0XMj0UzMs2F4JTG9M8USrbjAiD8yBYbSUTaTrTw=; b=IFnCQCH7Wt8Gxmu5PphPJ2x04jxTRRUmALwbvldWgD0r2JmcHEAcHeti0BHV+JYAHk 02ecsA2GnBSdddlvdV5ZMaT++Fcrh06FZtIi5DcOBaA3gpkVZWOYDuAGDZEZSZ07pfq2 gRTvrjCli7mXtjYJilsuN7mHhp35Qqk21PfEMhnKDxKU3t/Bprr66QCo7Jq8dWraCIxM o2alVseE/5utk39I9hia07/7Fut1wtOrVTovyl0w40qi5flOF9e6ESj+MdNkI9r+cMiQ zUO9y82lHRPT+krJgMJQc/H0pFI0xu3UWLnJCwSzMf2JdDAVh4qC7jPv4uBW7p57j3y+ +tbQ== X-Forwarded-Encrypted: i=1; AFNElJ8V440ww+FmZCGobBVdPz8otDTlcLvK+h4ElvzIvczZh+NxnjSzJ1Ug5OB5s8Z1rHIqHHBLXoE8WvtVQiA=@vger.kernel.org X-Gm-Message-State: AOJu0YyUpbHFurrqQKuPQzwttIMoNEhWxLB2kJt7o0o9pDXAGDuqIDSH AGXe00TVeBLrL2zfwJ+KYnxfTfyxOOHnXvlRkSRXJFqK9nEhKFeVRVbS X-Gm-Gg: AeBDievHr0I2zG300S7F81TJd2HK3/Gb84LR6un44QXVBPt6aJYsY4xarwe5dRIZnFC 6TFRXnVTtFFXxlQN1u8pXckFLjPSE9KsJTR1CUc8CZau7rOe5q/bwtXccc0RUpHNPmpdA6iPItx viFU1jK7IewXK+gAUU4+siWbPK7UDbtV45fzDefvMXktvdGE3hJezpHODyQrbxz89H1qc949pc2 5MATi4zhbhgu8Kx4ptViYW6RP5mg9DCsijr/EQFHn8z/9O3LvI+z6stlCSktqBWPbITxKzEnzNS nS4BsKW2QW7veI5b8o7j2VUWY+8t7680GoKaW7OsOdPS6rDbuLHICSRXsXVH9FD1eZrXGyGejLn kjOz1VFsM+tC8aklQGIQJreZHkFngt2gGbwlw31n9zax+Fenx9Z2zj8fDaoCPsR/sWAHLT9BVsv a7PIQ3mS2fXr3koLuBBYt4lngnK7gq795sNpCB43YpayKzUBVC X-Received: by 2002:a05:6000:2403:b0:43d:4e65:303d with SMTP id ffacd0b85a97d-43d642d3582mr31936727f8f.37.1776257263091; Wed, 15 Apr 2026 05:47:43 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:42 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 07/14] ASoC: rsnd: Add RZ/G3E DMA address calculation support Date: Wed, 15 Apr 2026 12:47:24 +0000 Message-Id: <20260415124731.3684773-8-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. The function reuses rsnd_dma_addr_lookup() and rsnd_dma_addr_map. Signed-off-by: John Madieu --- Changes: v5: - Split from v4 patch 06/12 per Kuninori's request - Move G3E DMA address comment block into rsnd_rzg3e_dma_addr() per Kuninori's request v4: - Replace raw [3][2][3] DMA address array with named structs rsnd_dma_addr_dir and rsnd_dma_addr_map. Use designated initializers in both rsnd_gen2_dma_addr() and rsnd_rzg3e_dma_addr() v3: No changes v2: No changes sound/soc/renesas/rcar/dma.c | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index bd50f18fac26..71dfa23018a5 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -644,6 +644,85 @@ rsnd_gen2_dma_addr(struct rsnd_dai_stream *io, return rsnd_dma_addr_lookup(io, mod, priv, &map, is_play, is_from); } =20 +/* + * ex) G3E case + * mod / DMAC in / DMAC out / DMAC PP in / DMAC pp out + * SSI : 0x13C31000 / 0x13C40000 / 0x13C40000 + * SSIU: 0x13C31000 / 0x13C40000 / 0x13C40000 / 0xEC400000 / 0xEC400000 + * SCU : 0x13C00000 / 0x13C10000 / 0x13C14000 / 0xEC300000 / 0xEC304000 + * CMD : 0x13C00000 / / 0x13C18000 0xEC308000 + */ + +/* RZ/G3E DMA address macros */ +#define RDMA_SSI_I_N_G3E(addr, i) (addr ##_reg + 0x0000F000 + (0x1000 * i)) +#define RDMA_SSI_O_N_G3E(addr, i) (addr ##_reg + 0x0000F000 + (0x1000 * i)) + +#define RDMA_SSIU_I_N_G3E(addr, i, j) (addr ##_reg + 0x0000F000 + (0x1000 = * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) *= ((j) / 4))) +#define RDMA_SSIU_O_N_G3E(addr, i, j) RDMA_SSIU_I_N_G3E(addr, i, j) + +#define RDMA_SSIU_I_P_G3E(addr, i, j) (addr ##_reg + 0xD87CF000 + (0x1000 = * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) *= ((j) / 4))) +#define RDMA_SSIU_O_P_G3E(addr, i, j) RDMA_SSIU_I_P_G3E(addr, i, j) + +#define RDMA_SRC_I_N_G3E(addr, i) (addr ##_reg + 0x00010000 + (0x400 * i)) +#define RDMA_SRC_O_N_G3E(addr, i) (addr ##_reg + 0x00014000 + (0x400 * i)) + +#define RDMA_SRC_I_P_G3E(addr, i) (addr ##_reg + 0xD8700000 + (0x400 * i)) +#define RDMA_SRC_O_P_G3E(addr, i) (addr ##_reg + 0xD8704000 + (0x400 * i)) + +#define RDMA_CMD_O_N_G3E(addr, i) (addr ##_reg + 0x00018000 + (0x400 * i)) +#define RDMA_CMD_O_P_G3E(addr, i) (addr ##_reg + 0xD8708000 + (0x400 * i)) + +static dma_addr_t +rsnd_rzg3e_dma_addr(struct rsnd_dai_stream *io, + struct rsnd_mod *mod, int is_play, int is_from) +{ + struct rsnd_priv *priv =3D rsnd_io_to_priv(io); + phys_addr_t ssi_reg =3D rsnd_gen_get_phy_addr(priv, RSND_BASE_SSI); + phys_addr_t src_reg =3D rsnd_gen_get_phy_addr(priv, RSND_BASE_SCU); + int id =3D rsnd_mod_id(mod); + int busif =3D rsnd_mod_id_sub(rsnd_io_to_mod_ssiu(io)); + const struct rsnd_dma_addr_map map =3D { + .src =3D { + .capture =3D { + { 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 =3D { + { 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 =3D { + .capture =3D { + { 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 =3D { + { 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 =3D { + .capture =3D { + { 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 =3D { + { 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) }, + }, + }, + }; + + return rsnd_dma_addr_lookup(io, mod, priv, &map, is_play, is_from); +} + /* * Gen4 DMA read/write register offset * @@ -690,6 +769,8 @@ static dma_addr_t rsnd_dma_addr(struct rsnd_dai_stream = *io, return 0; else if (rsnd_is_gen4(priv)) return rsnd_gen4_dma_addr(io, mod, is_play, is_from); + else if (rsnd_is_rzg3e(priv)) + return rsnd_rzg3e_dma_addr(io, mod, is_play, is_from); else return rsnd_gen2_dma_addr(io, mod, is_play, is_from); } --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 265C734A796 for ; Wed, 15 Apr 2026 12:47:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257270; cv=none; b=oGddmVRliCpCjU2DpZGR8/mYmOxIMaTr98TWYR9Yhpvqn+VJ06QY966SkTb04ohyp5XQQWdDqA/5QniiPBdQ2jPT4wkgeljs593Gzk+rIw56W16zpEWrfY71uzYYvxo8iY4LSBCmP7p9+lNnOKIreVRR+twMfHhPOZhatSPvenc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257270; c=relaxed/simple; bh=zrguUJkTsmHxfkkJjR7jXzsxLZJp3bbWa1ZIg2o+Q6Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=M1h0I+ZwOQKJMS0Y0Uuiu+rFk35lIrWuV5MW7HsdNNdZy1dZAVmVVi3bPhQsn0xOISxSJbZh1EQDfu9I3kdKFX9jWPHMwZhcggESexkJ2AO6q0g/HWykZqB/MwMKAmAz3ijFYwEW30kXUjZQbm5dsJrgFo1Lda3QFS7Mx62YB3U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Dro3whAF; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Dro3whAF" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4852a9c6309so63643775e9.0 for ; Wed, 15 Apr 2026 05:47:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257264; x=1776862064; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P6/tsH6v4egNQ8ZnSYLZFTG/36tQkFlhJNe8EuPwEFU=; b=Dro3whAFbPddWereJ1Upe98VTS1ltu8Iqk4Gnoj7RX89g2ngNBj+4B5bHdKUy9MTQ0 qvmOnQt/PREMPyWDz2sePTZk6dV88ZnySO3sI40sOCV5eGFr5BuqNqEZigcr4tw4zg/Y 5cYjXHfo2r/VsOs06hhHyLUl6MLDiBaDXTWXCdL50VL7oVVvIN+Ux0MO2ycx8nEZAAub /9quzKhpDV2jBIz4kaQ7Fe1sqDZisXeVNecLvlUeNaQtG/1pchX72qw1tlUFlVduf/AJ 8zUQ8SYBrvzloZRwVZh0hmWU9FwciDdJlwc1IBfjmYbB9v1eLmGwJcaXDrDBdqxYtFlo AiQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257264; x=1776862064; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=P6/tsH6v4egNQ8ZnSYLZFTG/36tQkFlhJNe8EuPwEFU=; b=PsVM2ADw3sLtarjmOZGt3EidawTZ9TsfzQRIPwBTTJl31u5Jd81kR2MRTYvg8dln1y gj/Q3CBWiPb6JM1og2nhfjsBW7H+Gaj1JSHWDeuxMBRm7cYbF7cmAI1DtEzIWePP6f7a NmCf/0L2W/x+g/El4UMffPWGftjqN5sZqhcALYXLhefUiDhSmBBswmkvnHW2RQCpwiuH jOa/lqLqyOjpcUt95bAwGdfZU71e87XFlz/0g6zHaq38uuwEnM2oa8L9BmwQYwHfDMqi /onSQ+mFr2ItDQ+cPoTUECdUySsmm4QF/KNeSD1waNnTcvIdoQD4bio2Rs1t0u8dybwp td1g== X-Forwarded-Encrypted: i=1; AFNElJ+zVYz8MArNLx2pXZnFbbET+LoBcltrmTc4gs4y5w/9KybRoIVH+/TfWvunSlF79FSUBq2QNndF5OP9fmw=@vger.kernel.org X-Gm-Message-State: AOJu0YxNyk4XO2huXcsDbqai/3EHn7Bp0eqgrWRRTdcGnUsAJqdqwHYy NECBsxW0VbtQwp5MnTe7a93RZY049aeXnsatXH6IBokzTxXw90KyjHBs X-Gm-Gg: AeBDietXi2N9NnmtNKI4xnKduNvF921Mgd3Z+1oDZTWGuRFjwfhjxvtLMPXpvYYTRAw ZuHtsjmVhNR2c0oRIq8zD3HJwc40IzMXXRJuJxfQXsSMvo6chq+/dfnccIxoxuZ+/L4mi1OIIRS 89OIHc62vErso95AZzdYaPEg8ZvXPRVYUMNy3pDZkDHOW2jHOmfTqXCLgs9NZI1j9mAXMnQvP8p lJDuTRq6hc74vyli5d+amF5zNIS2BbQaP0i+YoYHMuNFrULLtQa/2QfDLvpsJbL45ytL0qpDWLs VgB/+QlYEqoR5JW8THEG8w5RhdviQWV25vlDTA19OVOdj44XpH+t+ZiYChW/5+FdI7Qo95IQrdu puD1Gh7dRDfzrVoaVyfwGLvp6bweZy3Yaw/cq8fvOjHVbwO67IhFHbTlYaOUXR+jJtvohdh6d31 q5k7Mf2nvWPRyQFWjEVLivYl3jsO8rVJQl604/nw== X-Received: by 2002:a05:600c:c091:b0:488:a977:8d6 with SMTP id 5b1f17b1804b1-488d683662cmr215199215e9.19.1776257264281; Wed, 15 Apr 2026 05:47:44 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:43 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 08/14] ASoC: rsnd: ssui: Add RZ/G3E SSIU BUSIF support Date: Wed, 15 Apr 2026 12:47:25 +0000 Message-Id: <20260415124731.3684773-9-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add support for the SSIU found on the Renesas RZ/G3E SoC, which provides a different BUSIF layout compared to earlier generations: - SSI0-SSI4: 4 BUSIF instances each (BUSIF0-3) - SSI5-SSI8: 1 BUSIF instance each (BUSIF0 only) - SSI9: 4 BUSIF instances (BUSIF0-3) - Total: 28 BUSIFs RZ/G3E also differs from Gen2/Gen3 implementations in that only two pairs of BUSIF error-status registers are available instead of four, and the SSI always operates in BUSIF mode with no PIO fallback. Rather than scattering SoC-specific checks across functional code, introduce an extra capability flags in the match data: - RSND_SSIU_BUSIF_STATUS_COUNT_2: only two BUSIF error-status register pairs are present. Used in rsnd_ssiu_busif_err_irq_ctrl() and rsnd_ssiu_busif_err_status_clear() to limit register iteration. Future SoCs sharing these constraints can set the flags without requiring code changes. Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Move busif_status_count from rsnd_priv into new struct rsnd_ssiu_ctrl, following the rsnd_dma_ctrl pattern for shared non-per-instance module resources - Properly propagate reset control errors via dev_err_probe() instead of silencing them - Update changelog to accurately describe rsnd_is_rzg3e() usage for SoC-specific register handling v3: No changes v2: No changes sound/soc/renesas/rcar/core.c | 3 +- sound/soc/renesas/rcar/rsnd.h | 2 ++ sound/soc/renesas/rcar/ssiu.c | 63 +++++++++++++++++++++++++---------- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c index 4544791f3883..cb31af8a34d4 100644 --- a/sound/soc/renesas/rcar/core.c +++ b/sound/soc/renesas/rcar/core.c @@ -107,7 +107,8 @@ static const struct of_device_id rsnd_of_match[] =3D { { .compatible =3D "renesas,rcar_sound-gen4", .data =3D (void *)RSND_GEN4 = }, /* Special Handling */ { .compatible =3D "renesas,rcar_sound-r8a77990", .data =3D (void *)(RSND_= GEN3 | RSND_SOC_E) }, - { .compatible =3D "renesas,r9a09g047-sound", .data =3D (void *)(RSND_RZ3 = | RSND_RZG3E) }, + { .compatible =3D "renesas,r9a09g047-sound", .data =3D (void *)(RSND_RZ3 = | RSND_RZG3E | + RSND_SSIU_BUSIF_STATUS_COUNT_2) }, {}, }; MODULE_DEVICE_TABLE(of, rsnd_of_match); diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 16d7eafedae1..953a2d998a03 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -647,6 +647,7 @@ struct rsnd_priv { #define RSND_RZ3 (3 << 8) #define RSND_RZ_ID_MASK (0xF << 12) /* nibble D */ #define RSND_RZG3E (1 << 12) +#define RSND_SSIU_BUSIF_STATUS_COUNT_2 BIT(16) /* Only 2 BUSIF error-statu= s register pairs */ /* * below value will be filled on rsnd_gen_probe() */ @@ -665,6 +666,7 @@ struct rsnd_priv { /* * below value will be filled on rsnd_ssi_probe() */ + void *ssiu_ctrl; void *ssi; int ssi_nr; =20 diff --git a/sound/soc/renesas/rcar/ssiu.c b/sound/soc/renesas/rcar/ssiu.c index 0cfa84fe5ea8..f483389868d2 100644 --- a/sound/soc/renesas/rcar/ssiu.c +++ b/sound/soc/renesas/rcar/ssiu.c @@ -29,31 +29,39 @@ struct rsnd_ssiu { i++) =20 /* - * SSI Gen2 Gen3 Gen4 - * 0 BUSIF0-3 BUSIF0-7 BUSIF0-7 - * 1 BUSIF0-3 BUSIF0-7 - * 2 BUSIF0-3 BUSIF0-7 - * 3 BUSIF0 BUSIF0-7 - * 4 BUSIF0 BUSIF0-7 - * 5 BUSIF0 BUSIF0 - * 6 BUSIF0 BUSIF0 - * 7 BUSIF0 BUSIF0 - * 8 BUSIF0 BUSIF0 - * 9 BUSIF0-3 BUSIF0-7 - * total 22 52 8 + * SSI Gen2 Gen3 Gen4 RZ/G3E + * 0 BUSIF0-3 BUSIF0-7 BUSIF0-7 BUSIF0-3 + * 1 BUSIF0-3 BUSIF0-7 BUSIF0-3 + * 2 BUSIF0-3 BUSIF0-7 BUSIF0-3 + * 3 BUSIF0 BUSIF0-7 BUSIF0-3 + * 4 BUSIF0 BUSIF0-7 BUSIF0-3 + * 5 BUSIF0 BUSIF0 BUSIF0 + * 6 BUSIF0 BUSIF0 BUSIF0 + * 7 BUSIF0 BUSIF0 BUSIF0 + * 8 BUSIF0 BUSIF0 BUSIF0 + * 9 BUSIF0-3 BUSIF0-7 BUSIF0-3 + * total 22 52 8 28 */ static const int gen2_id[] =3D { 0, 4, 8, 12, 13, 14, 15, 16, 17, 18 }; static const int gen3_id[] =3D { 0, 8, 16, 24, 32, 40, 41, 42, 43, 44 }; static const int gen4_id[] =3D { 0 }; +static const int rzg3e_id[] =3D { 0, 4, 8, 12, 16, 20, 21, 22, 23, 24 }; + +struct rsnd_ssiu_ctrl { + unsigned int busif_status_count; +}; + +#define rsnd_priv_to_ssiu_ctrl(priv) \ + ((struct rsnd_ssiu_ctrl *)(priv)->ssiu_ctrl) =20 /* enable busif buffer over/under run interrupt. */ #define rsnd_ssiu_busif_err_irq_enable(mod) rsnd_ssiu_busif_err_irq_ctrl(= mod, 1) #define rsnd_ssiu_busif_err_irq_disable(mod) rsnd_ssiu_busif_err_irq_ctrl(= mod, 0) static void rsnd_ssiu_busif_err_irq_ctrl(struct rsnd_mod *mod, int enable) { + struct rsnd_priv *priv =3D rsnd_mod_to_priv(mod); int id =3D rsnd_mod_id(mod); int shift, offset; - int i; =20 switch (id) { case 0: @@ -72,7 +80,7 @@ static void rsnd_ssiu_busif_err_irq_ctrl(struct rsnd_mod = *mod, int enable) return; } =20 - for (i =3D 0; i < 4; i++) { + for (unsigned int i =3D 0; i < rsnd_priv_to_ssiu_ctrl(priv)->busif_status= _count; i++) { enum rsnd_reg reg =3D SSI_SYS_INT_ENABLE((i * 2) + offset); u32 val =3D 0xf << (shift * 4); u32 sys_int_enable =3D rsnd_mod_read(mod, reg); @@ -87,10 +95,10 @@ static void rsnd_ssiu_busif_err_irq_ctrl(struct rsnd_mo= d *mod, int enable) =20 bool rsnd_ssiu_busif_err_status_clear(struct rsnd_mod *mod) { + struct rsnd_priv *priv =3D rsnd_mod_to_priv(mod); bool error =3D false; int id =3D rsnd_mod_id(mod); int shift, offset; - int i; =20 switch (id) { case 0: @@ -109,7 +117,7 @@ bool rsnd_ssiu_busif_err_status_clear(struct rsnd_mod *= mod) goto out; } =20 - for (i =3D 0; i < 4; i++) { + for (unsigned int i =3D 0; i < rsnd_priv_to_ssiu_ctrl(priv)->busif_status= _count; i++) { u32 reg =3D SSI_SYS_STATUS(i * 2) + offset; u32 status =3D rsnd_mod_read(mod, reg); u32 val =3D 0xf << (shift * 4); @@ -160,7 +168,8 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod, /* * SSI_MODE0 */ - rsnd_mod_bset(mod, SSI_MODE0, (1 << id), !use_busif << id); + if (!rsnd_is_rzg3e(priv)) + rsnd_mod_bset(mod, SSI_MODE0, (1 << id), !use_busif << id); =20 /* * SSI_MODE1 / SSI_MODE2 @@ -510,6 +519,8 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) { struct device *dev =3D rsnd_priv_to_dev(priv); struct device_node *node __free(device_node) =3D rsnd_ssiu_of_node(priv); + struct reset_control *rstc; + struct rsnd_ssiu_ctrl *ctrl; struct rsnd_ssiu *ssiu; struct rsnd_mod_ops *ops; const int *list =3D NULL; @@ -534,8 +545,15 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) if (!ssiu) return -ENOMEM; =20 + ctrl =3D devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); + if (!ctrl) + return -ENOMEM; + + ctrl->busif_status_count =3D rsnd_flags_has(priv, RSND_SSIU_BUSIF_STATUS_= COUNT_2) ? 2 : 4; + priv->ssiu =3D ssiu; priv->ssiu_nr =3D nr; + priv->ssiu_ctrl =3D ctrl; =20 if (rsnd_is_gen1(priv)) ops =3D &rsnd_ssiu_ops_gen1; @@ -558,12 +576,21 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) } else if (rsnd_is_gen4(priv)) { list =3D gen4_id; nr =3D ARRAY_SIZE(gen4_id); + } else if (rsnd_is_rzg3e(priv)) { + list =3D rzg3e_id; + nr =3D ARRAY_SIZE(rzg3e_id); } else { dev_err(dev, "unknown SSIU\n"); return -ENODEV; } } =20 + /* Acquire shared reset once for all SSIU modules */ + rstc =3D devm_reset_control_get_optional_shared(dev, "ssi-all"); + if (IS_ERR(rstc)) + return dev_err_probe(dev, PTR_ERR(rstc), + "failed to get ssi-all reset\n"); + for_each_rsnd_ssiu(ssiu, priv, i) { int ret; =20 @@ -586,7 +613,7 @@ int rsnd_ssiu_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(ssiu), - ops, NULL, NULL, RSND_MOD_SSIU, i); + ops, NULL, rstc, RSND_MOD_SSIU, i); if (ret) return ret; } --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8491F3537E6 for ; Wed, 15 Apr 2026 12:47:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257269; cv=none; b=AA0M38IRcgOJVTvY05pxVElBo2rOgjfA9/C+XpJMHNw+5SgPFvvS+3rFfnvEX+xQ91DTtHAIp+Tabvxe1ZNb5/dsaTf7nKlbhihBcy7NQaau1TUlXrVWy3fEHZs0715TdqFAP7IxvMPe7sfhTphXu5uDrTJJO0A456ZpSqf5fxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257269; c=relaxed/simple; bh=+pFXbL5AUesXszbyYGLL+MT4o6mCBIo3EDz/8Nk1tsc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nifekuMprDZhufScOuquwlJhspxJqHcqQgYWS0uWYm3KykTz5ZUeWJNOEPlMavjHX60PSl4pbOJ4Xp1hq/luq3RwMP/fEWkKk/kOQTCk5m84oPrFPuoryO8RwhvVQGoxs66fcidr1lYZ6Bzd+GgSGbMRT26wNNKiRCVXpV7ZYqM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bkRo6ALi; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bkRo6ALi" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-43d70b3e159so1636763f8f.0 for ; Wed, 15 Apr 2026 05:47:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257266; x=1776862066; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Jk3PxfqcVUsp/jCD7Gx4pQpsBhAEOkB0+K5c3K014GE=; b=bkRo6ALi6W1W93K6is9Ju3AxZjJsSpwcqoBB7avtdHweihydmokzLL4Zc/82BWzhLQ PWveHscKFnBFOBi4GYuDwmNZ6cLvyz2vMIh0U1oJgHFX8VVHAGa+NB0JQ26LiTRgVBlL 12CgOFOrlPjm22bwzjGAfWiKwnQTXNZumlXC+zbkZ0QAJySBcBLNdcUXjKx4eTO+X55w HpagweuAS+aKINBcn3Pk7YXrfClavdnsEJlBLghuBjhOD5fUqG9RzWoWZ7xCBeKge+Iu 94Q3i4ZnGtK6ZIgWEVwy28CwPEa3fusy3jncp87lARxqwKgivg+z+0MG+5Ipgal53EUB BjLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257266; x=1776862066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Jk3PxfqcVUsp/jCD7Gx4pQpsBhAEOkB0+K5c3K014GE=; b=f0ztwtNlk2aj7Q3UE8fNeqO2AFzQkRoQTn8CdShW719FSKbGvP325Uv7jNIY+JHG4Q V7K7mtwI0sbMiBVnI9bl2m9hqhDA29Hdr+tIy4HGOe9LW1PgbonCTTvgebS/KlLf7om3 yDp4pXFPYZE83WcbsnZ/fzqZb0bYJmieR2OF2P4pWVQMNgbZZ/T1ozwBeyxCnGrbqzKo rW3pZqg86fLm+URu3Tz1RWxO+yqNdQKwJTqObyUK+65c2Om3SOoYq57YcYVOKLU7vw2m 6DpdHgQbGmzchLAn7R0aYWnQTXS78D2Fnpm6E6VDkD3Tn9Xj8oz34Rm7to3HJ7Okz1Ze VSCA== X-Forwarded-Encrypted: i=1; AFNElJ9ZTh7uY5oeQCiyxkjzANCPDATGxgx1u38q6d+E9ikKfVwZJoD18O/gtVrz/8P7uGYjg61t3mHTirM1k24=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5aL/pA0UHPbN/XzGl0g3te6zaESIz8nmlktPKF1Angcq/AmuS IGOitrQTcpl9WwjF0Q0vtRXKwly0thXJERvMuGZWUzHXvwB/HlGPyTVl X-Gm-Gg: AeBDievKl9zYZkpRzTtOUkbVlskuAgnqokv8GA8wr5oK6bxe0OCcUAlRxIJCB7v40EO N94RnnZRMkcAchMT3BoRoHkw81ImTqk77bSaBb7E52QbmwmP4nLvB7+yK+g2k2g9d5EqE0g5Aue WSlUSrqOzDn6hrVrjYk4B/7JwWzEeD/V5b+6+e8LLi0oA8bkleoMGBCYfxCQUSZ146GiBvuCBHO bxIMTtzM7TqaieH952WiNeNLspUFxv3dAPvnxn/5WEt58VarhWg7KCmsvJHEbk9cLYAaYYKSdDU L8RVmmAnOWN4Kh2H7sXtl+f3jRtJlw8Xgt6XnO5EUl9x0xvaTVY0NZnFd2e0LOymXPl5KEHLE1k sllobbvdAaI8MSt96WHuJ4FZqIJ7DIKjkExMrgBoYo+Vq932ZWp+U0KjRr0QaBFKU92OAXrpbQB Ag1zvoZfkVp1eWv/JZla7R6a1pK5Qkt7ToBmvTAw== X-Received: by 2002:a5d:5d83:0:b0:43b:40ef:5d1a with SMTP id ffacd0b85a97d-43d642552e7mr31331940f8f.5.1776257265506; Wed, 15 Apr 2026 05:47:45 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:44 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 09/14] ASoC: rsnd: Add SSI reset support for RZ/G3E platforms Date: Wed, 15 Apr 2026 12:47:26 +0000 Message-Id: <20260415124731.3684773-10-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add SSI reset support for the Renesas RZ/G3E SoC, which differs from earlier generations in several ways: - The SSI block always operates in BUSIF mode; RZ/G3E does not implement the SSITDR/SSIRDR registers used by R-Car Gen2/Gen3/Gen4 for direct SSI DMA. Consequently, for the RZ/G3E, all audio data must pass through BUSIF. PIO mode remains available for R-Car Gen2/Gen3/Gen4 platforms. - Each SSI instance has its own reset line, exposed using per-SSI names such as "ssi0", "ssi1", etc., rather than a single shared reset. To support these differences, rsnd_ssi_use_busif() always return 1 on RZ/G3E, ensuring that the driver consistently selects the BUSIF DMA path. While at it, update the reset acquisition logic to request the appropriate per-SSI reset controller based on the SSI instance name. Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Clarify in commit message that PIO mode remains available on R-Car Gen2/Gen3/Gen4 platforms v3: No changes v2: No changes sound/soc/renesas/rcar/ssi.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sound/soc/renesas/rcar/ssi.c b/sound/soc/renesas/rcar/ssi.c index c06cebb36170..c65435551283 100644 --- a/sound/soc/renesas/rcar/ssi.c +++ b/sound/soc/renesas/rcar/ssi.c @@ -1158,6 +1158,7 @@ int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod) =20 int rsnd_ssi_probe(struct rsnd_priv *priv) { + struct reset_control *rstc; struct device_node *node; struct device *dev =3D rsnd_priv_to_dev(priv); struct rsnd_mod_ops *ops; @@ -1207,6 +1208,16 @@ int rsnd_ssi_probe(struct rsnd_priv *priv) goto rsnd_ssi_probe_done; } =20 + /* + * RZ/G3E uses per-SSI reset controllers. + * R-Car platforms typically don't have SSI reset controls. + */ + rstc =3D devm_reset_control_get_optional(dev, name); + if (IS_ERR(rstc)) { + ret =3D PTR_ERR(rstc); + goto rsnd_ssi_probe_done; + } + if (of_property_read_bool(np, "shared-pin")) rsnd_flags_set(ssi, RSND_SSI_CLK_PIN_SHARE); =20 @@ -1225,7 +1236,7 @@ int rsnd_ssi_probe(struct rsnd_priv *priv) ops =3D &rsnd_ssi_dma_ops; =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk, - NULL, RSND_MOD_SSI, i); + rstc, RSND_MOD_SSI, i); if (ret) goto rsnd_ssi_probe_done; =20 --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5297135CB7C for ; Wed, 15 Apr 2026 12:47:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257270; cv=none; b=onwUbhH9urJr4n1LQAUOn3eJOaXbnhAVKg5HLfhygRKQISYSgPc4TZI0JuSEg47NEu7CgB3ScoT/E22MkH66ESn+HbDREbEnPmMgnXqVj9ixFg8xPn4DZkyd9gihivdl4exrM/uyMMQfnWHf7oZHKQ9Y/StdI/+Fx2PX4aNzlJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257270; c=relaxed/simple; bh=jEQUdAtH8yE5mBvf4ytaTJJnGJ58WWs9SMxtTW7gBUg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W7IodxB3wqD1vvaPxtyFXoHjoqKXzl8DbdSiV51Rux2PZ8esJLkJyl9ky21FXGY0JXDffBnfqTku5LGI/uJWeXzncqOwFHDtdFLZs1BVuajEMicwNiyFcQRZWNHGmyHl1TNsvag/sSAgaDbJ6B2Us0AuY0Poh+ZRI38lnNQT4FI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=pOT800eY; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pOT800eY" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-43d72875729so2427752f8f.3 for ; Wed, 15 Apr 2026 05:47:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257267; x=1776862067; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bzcOCyQLNmU8cBIifwv6HJp2UvPykwfLFilqam8mArk=; b=pOT800eYk1HANo1s6Jv49cU/Aj3dWRzvCsbG099gjq75vYWtjkC5uzR2/FYYqb5yiI sXWGfI0HMaQ4CtP7Ah06ftVkap+YvMDq2TuEpN8riwTPE0l3joQJwUl0uJF9XQl1eiyJ b0DhiN6O5zrmZVk0NqyxJHuk+O6UJ4bgS+nCa76bmUHjUTju4Sv3wrmDtpRuRb6xC/HP y3B+XtANE1MFDyT5NYEljd49rLst9rNUaTk1mZSJ2VkvPAVXDViakJmqQzU6+bW7u9Nr WogIEhstTcN/OTZidJ28nRiQGLffEd7P1LJbAFwHFbb5eBCtFvStP6/Zq/kSbo6jcSoF qaAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257267; x=1776862067; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bzcOCyQLNmU8cBIifwv6HJp2UvPykwfLFilqam8mArk=; b=Xe9ax4XxFd9wYrnOs6GUgoGQ66E1wysiNYd02wZvipzIMHtwfTnE6A0c9YLH5JwTBU 7eJ0E9yyfjbNUdgI+MAzJ9WkestLryzJAr/8xLtyiAcAYQGScA0UFXiWuefvzLmaEmcq SeqYGA/9CW7WvCTB7BT31jUNUXzLp9l7TB8ZAPM/ZzwlIJrsWnMIjABQVNdyB2u/pcJn QiFcOJI+mPqSnx6EI/W6rJ38BXNPnmzO2BD+YvkONNJJZc5g4j4lyngCeRKmJDq/YKPN SWlvAjGyCfQVaIxJ4qRfAoPIwbF3dmj4ZRpVgPZm20loja64gnK4sYxFBJU4UWnqJ3ug w5nw== X-Forwarded-Encrypted: i=1; AFNElJ/MoiS4um09NFRShwsvvV1yseakW3jnWKAq+HNFKHeQYgSpAWuzLOp9A1SuUUCK8GiEScjBS7o4fr9XdgQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwDceUapk8ZA0oZF1F32okmhUxyUY2TtE6sjbHTJDDoO/rOq7f8 Dxgx56/BMCKw8G/JGpJgE/8VM7+j0fIZFxIQkkUu9QQXI8TgoyEQMS5+ X-Gm-Gg: AeBDiesquQkkFjHOHYxKe4r00YEqGb3goGpmCtwddcvnIWXWCBhaQGxskmnBRbFdApQ oinGAwYYpLFAFISrfxGkS4BactmSq7gLkdj6qQvGXl+8mQzvqYZkYogUcyhmIVI8CkyX7U9l6ir xA6TyrZRNvwddWCsKw7CWBaCByDaZK9WSFk5mnqy5OkN0ojIWPqJT0hrJDNvdr1xPDfsCT3Tn35 +FIV+eRnl3zD7uRdOOcriQsPRYou7rvlZItmQIx/wE3ptKEAQ9YAYnmwH22oIuSNxZ+w/E03dVS u2tjCPy7LbSidWkdVKDC6MUiut/l6XrxoXvrlBtzywcuOTZD8d6nsv3CoaUGDY7+1l2vIcBMAPg 1+lRfpoH+47cAcQl/z2VW9n89BT90oBEOU6OkJTwFgabP3jx/8x1NLUxgPAsMBuenNVhQwEKx+h qKRvTAxOGWIBS3Oo164liqJgOtWMn1g4lN5+P2fQ== X-Received: by 2002:a05:6000:2081:b0:43d:6ff5:3a2d with SMTP id ffacd0b85a97d-43d6ff53ad1mr19853081f8f.10.1776257266466; Wed, 15 Apr 2026 05:47:46 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:46 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 10/14] ASoC: rsnd: Add ADG reset support for RZ/G3E Date: Wed, 15 Apr 2026 12:47:27 +0000 Message-Id: <20260415124731.3684773-11-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RZ/G3E requires the ADG reset line to be deasserted for the audio subsystem to operate. The ADG module clock is already managed via rsnd_adg_clk_enable/disable() through adg->adg, so no additional clock handling is needed. Add support for the optional "adg" reset control on Renesas RZ/G3E SoC. Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Collapse dev_err_probe() and rsnd_mod_init() calls to single lines v3: No changes v2: No changes sound/soc/renesas/rcar/adg.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sound/soc/renesas/rcar/adg.c b/sound/soc/renesas/rcar/adg.c index 0105c60a144e..813ad5eabba6 100644 --- a/sound/soc/renesas/rcar/adg.c +++ b/sound/soc/renesas/rcar/adg.c @@ -771,6 +771,7 @@ void rsnd_adg_clk_dbg_info(struct rsnd_priv *priv, stru= ct seq_file *m) =20 int rsnd_adg_probe(struct rsnd_priv *priv) { + struct reset_control *rstc; struct rsnd_adg *adg; struct device *dev =3D rsnd_priv_to_dev(priv); int ret; @@ -779,8 +780,11 @@ int rsnd_adg_probe(struct rsnd_priv *priv) if (!adg) return -ENOMEM; =20 - ret =3D rsnd_mod_init(priv, &adg->mod, &adg_ops, - NULL, NULL, 0, 0); + rstc =3D devm_reset_control_get_optional_exclusive(dev, "adg"); + if (IS_ERR(rstc)) + return dev_err_probe(dev, PTR_ERR(rstc), "failed to get adg reset\n"); + + ret =3D rsnd_mod_init(priv, &adg->mod, &adg_ops, NULL, rstc, 0, 0); if (ret) return ret; =20 --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78CD5378D89 for ; Wed, 15 Apr 2026 12:47:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257271; cv=none; b=BkI+I6O01HeElcC9SbeXeUVsoq9lx8WMF/TkXssylUEysXZNfMcKjxtUBm3/x6VsEWJ7iRnt2JvlWzgL9bwXIv0HFUMH7GDQG9YCmKYO1Xt2kU7xjLHnv3DZu91m/k0p3oBisK4SKopW9p10HmTtPjKxe6hfyoqL6muiDbi93cc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257271; c=relaxed/simple; bh=cHIp6KuufZJKj+9QDEYAC41FG9t4fNq15lb/6RK1zSE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=i4YHC1sZ5lliK0MEVsc+hFQ87SGL5MOoEJvSmQbzcN4HggHM77Eyj529s77wiQ+49fU1OACUpyeD3g+/BvAXNxEOudm6HJju0SEKtp7oBPii7G0rRuM/ALAuwV873zdLs3IAEPoOWYirltAfHsBw11Nx/6yMpuZ/6Kxi8TTzpJQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kGosha4A; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kGosha4A" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-43cfd96354aso4138382f8f.1 for ; Wed, 15 Apr 2026 05:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257268; x=1776862068; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UBHWbtUtlzPl+OxM8QOAujP59U80OqIWeXAKTEjo1lo=; b=kGosha4A2ROn4iFWCGDtiYyyRFAprmG2r7M8vq09yHHyY4e051cs54O+qcLnvApfwq R+dPnohsjojcxXEnBEulwSyjU1je8xcwRImqVj4il25xRA0te4TKv4YyF5h6C7GtJzEh /8UJSmIt1HmabOFV/FWIs/tP9AisNA3dG2096ed95UwOdgAVnC95zXlp28Nh92Oiqa+R jGFZ2pPWKhx4lQozbOtJ/zCdPZTQomGASrcD+ylKkcvArfSEjEcFIjSEOnCT+wLb8BkG wD+2UnwntTWQvH0lRWhARz+GBbcW4+YB9Izd4FgUlJpSpDqYiDYuZFW/CRQkQNc6LEp5 X7qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257268; x=1776862068; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=UBHWbtUtlzPl+OxM8QOAujP59U80OqIWeXAKTEjo1lo=; b=qvnFaXJ+AoAAwINxmTWxV+Umh3zv1Of0ZFbFHLtvHxNPsuky2nZRdnNlwK99PRhxRY fA7l7GWPRRQM2kF+hhhb/QnnylJUoVbeaUav9itlkIVS6sEZou8w8NkuzotP3Rx4F15g hAAeq4TMtAjJ0nQXgF2n9lp8k3ui10TCdhz7tsm0CfCvHYiGaci6k1H5eQi6Dm8UdhHF fY1MrQGZbY6/TwfYZbqxY/otKbiarHICuRchgFCi0RM8S6y3DpIoRyCC3Ov3qikFKMtn tchcdqmBZr14O/FNGL5AZzGeYSmiZm4xPGu9+YMF93sebwrNfcAeWDdCrpt/9x+4nUMA M6LA== X-Forwarded-Encrypted: i=1; AFNElJ/6q05k0LAQ1ddvjWakapJcOKt2FO7a2XCjcdaev9iXsaI1uIJzj2XeskSF7t0zpZGOfIpySV5Dv0TXwwo=@vger.kernel.org X-Gm-Message-State: AOJu0YxEGZnXa1VvKo97zJWs9lbSp1jShYIdzsHlveiXmUSRusB+DLhb wpZjpyrvm9ca13U7MEhuIrZAc86EnR0qpU/gdlZSPmOUL8X7a74lj5Um X-Gm-Gg: AeBDietrGkUK6GzgAFigt6/rPRpe0Pai8yxb+TztZxFLT3gOXwdNDs84JGb4zPx87LH KrpgpGAnCiyxVeotPZ+xnbusbsfS4hy7sgefqz9ujfTvl0g5mIkl6Pb4DLyOIyQhuOignLEGb5u kR4Pkht4qc+x7T6si9msafjoK8pPUdqZ5+rF7cmk9TmOm7/hvh7Vrd6YLK9SwX0mKz81Xw3h7wW DjNlTKEI6m8q+4N+yG4kwhLBRbH4sI3IMf5EYGLq4ydJB1cJ5pz+VWXZB2nWk619tOxnjLzrC6m WjY6sxtd168cFww+MJ//iZH6ILQPYknCjulH3y4ItcUEuZuNCW7tlFvF2tdlL3Ye28pIgfifFu0 ssKAxOHs+syjSoOc64mqhgTgA4hKIFmGgOzWZdpzd9uhSqYolMGYL5C0LJl/h4GF3keF1z7cfAE h4yn1yLneV3LtQTknPOWTlEW0KRSGT9fA48DeuvA== X-Received: by 2002:a05:6000:4010:b0:43b:5095:d101 with SMTP id ffacd0b85a97d-43d642b8e12mr33503201f8f.27.1776257267636; Wed, 15 Apr 2026 05:47:47 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:47 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 11/14] ASoC: rsnd: adg: Add per-SSI ADG and SSIF supply clock management Date: Wed, 15 Apr 2026 12:47:28 +0000 Message-Id: <20260415124731.3684773-12-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RZ/G3E's ADG module requires explicit clock management for SSI audio interfaces that differs from R-Car Gen2/Gen3/Gen4: - Per-SSI ADG clocks (adg.ssi.N) for each SSI module - A shared SSIF supply clock for the SSI subsystem These clocks are acquired using optional APIs, making them transparent to platforms that do not require them. Clock prepare/unprepare is handled in rsnd_adg_clk_control(), which is called from probe, remove, suspend and resume (all sleepable contexts). The trigger path (atomic context) only calls clk_enable/clk_disable, which is atomic-safe and requires no additional splitting. Signed-off-by: John Madieu --- Changes: =20 v5: No changes v4: - Move clk_prepare/unprepare for per-SSI ADG and SSIF supply clocks into rsnd_adg_clk_control() instead of separate prepare/unprepare functions, centralizing clock lifecycle management - Return proper errors on clk_enable() failure instead of dev_warn() - Eliminates hw_params prepare leak concern since prepare now happens once at probe/resume v3: No changes v2: - Split clock handling into prepare/enable phases for atomic context safety sound/soc/renesas/rcar/adg.c | 91 +++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/sound/soc/renesas/rcar/adg.c b/sound/soc/renesas/rcar/adg.c index 813ad5eabba6..9cae3bbefa55 100644 --- a/sound/soc/renesas/rcar/adg.c +++ b/sound/soc/renesas/rcar/adg.c @@ -19,6 +19,9 @@ #define CLKOUT3 3 #define CLKOUTMAX 4 =20 +/* Maximum SSI count for per-SSI clocks */ +#define ADG_SSI_MAX 10 + #define BRGCKR_31 (1 << 31) #define BRRx_MASK(x) (0x3FF & x) =20 @@ -34,6 +37,9 @@ struct rsnd_adg { struct clk *adg; struct clk *clkin[CLKINMAX]; struct clk *clkout[CLKOUTMAX]; + /* RZ/G3E: per-SSI ADG clocks (adg.ssi.0 through adg.ssi.9) */ + struct clk *clk_adg_ssi[ADG_SSI_MAX]; + struct clk *clk_ssif_supply; struct clk *null_clk; struct clk_onecell_data onecell; struct rsnd_mod mod; @@ -343,8 +349,16 @@ int rsnd_adg_clk_query(struct rsnd_priv *priv, unsigne= d int rate) =20 int rsnd_adg_ssi_clk_stop(struct rsnd_mod *ssi_mod) { + struct rsnd_priv *priv =3D rsnd_mod_to_priv(ssi_mod); + struct rsnd_adg *adg =3D rsnd_priv_to_adg(priv); + int id =3D rsnd_mod_id(ssi_mod); + rsnd_adg_set_ssi_clk(ssi_mod, 0); =20 + /* RZ/G3E: only disable here, unprepare is done in hw_free */ + clk_disable(adg->clk_adg_ssi[id]); + clk_disable(adg->clk_ssif_supply); + return 0; } =20 @@ -354,7 +368,8 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod= , unsigned int rate) struct rsnd_adg *adg =3D rsnd_priv_to_adg(priv); struct device *dev =3D rsnd_priv_to_dev(priv); struct rsnd_mod *adg_mod =3D rsnd_mod_get(adg); - int data; + int id =3D rsnd_mod_id(ssi_mod); + int ret, data; u32 ckr =3D 0; =20 data =3D rsnd_adg_clk_query(priv, rate); @@ -376,6 +391,22 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mo= d, unsigned int rate) (ckr) ? adg->brg_rate[ADG_HZ_48] : adg->brg_rate[ADG_HZ_441]); =20 + /* + * RZ/G3E: enable per-SSI and supply clocks + */ + ret =3D clk_enable(adg->clk_adg_ssi[id]); + if (ret) { + dev_err(dev, "Cannot enable adg.ssi.%d ADG clock\n", id); + return ret; + } + + ret =3D clk_enable(adg->clk_ssif_supply); + if (ret) { + dev_err(dev, "Cannot enable SSIF supply clock\n"); + clk_disable(adg->clk_adg_ssi[id]); + return ret; + } + return 0; } =20 @@ -424,9 +455,35 @@ int rsnd_adg_clk_control(struct rsnd_priv *priv, int e= nable) if (ret < 0) rsnd_adg_clk_disable(priv); =20 + /* RZ/G3E: per-SSI ADG and SSIF supply clocks */ + if (enable) { + for (i =3D 0; i < ADG_SSI_MAX; i++) { + ret =3D clk_prepare(adg->clk_adg_ssi[i]); + if (ret < 0) { + while (--i >=3D 0) + clk_unprepare(adg->clk_adg_ssi[i]); + rsnd_adg_clk_disable(priv); + return ret; + } + } + ret =3D clk_prepare(adg->clk_ssif_supply); + if (ret < 0) { + for (i =3D 0; i < ADG_SSI_MAX; i++) + clk_unprepare(adg->clk_adg_ssi[i]); + rsnd_adg_clk_disable(priv); + return ret; + } + } + /* disable adg */ - if (!enable) + if (!enable) { + /* RZ/G3E: unprepare per-SSI and supply clocks */ + clk_unprepare(adg->clk_ssif_supply); + for (i =3D 0; i < ADG_SSI_MAX; i++) + clk_unprepare(adg->clk_adg_ssi[i]); + clk_disable_unprepare(adg->adg); + } =20 return ret; } @@ -769,6 +826,31 @@ void rsnd_adg_clk_dbg_info(struct rsnd_priv *priv, str= uct seq_file *m) #define rsnd_adg_clk_dbg_info(priv, m) #endif =20 +static int rsnd_adg_get_ssi_clks(struct rsnd_priv *priv) +{ + struct rsnd_adg *adg =3D rsnd_priv_to_adg(priv); + struct device *dev =3D rsnd_priv_to_dev(priv); + char name[16]; + int i; + + /* SSIF supply clock */ + adg->clk_ssif_supply =3D devm_clk_get_optional(dev, "ssif_supply"); + if (IS_ERR(adg->clk_ssif_supply)) + return dev_err_probe(dev, PTR_ERR(adg->clk_ssif_supply), + "failed to get ssif_supply clock\n"); + + /* Per-SSI ADG clocks */ + for (i =3D 0; i < ADG_SSI_MAX; i++) { + snprintf(name, sizeof(name), "adg.ssi.%d", i); + adg->clk_adg_ssi[i] =3D devm_clk_get_optional(dev, name); + if (IS_ERR(adg->clk_adg_ssi[i])) + return dev_err_probe(dev, PTR_ERR(adg->clk_adg_ssi[i]), + "failed to get %s clock\n", name); + } + + return 0; +} + int rsnd_adg_probe(struct rsnd_priv *priv) { struct reset_control *rstc; @@ -798,6 +880,11 @@ int rsnd_adg_probe(struct rsnd_priv *priv) if (ret) return ret; =20 + /* RZ/G3E-specific: per-SSI ADG and SSIF supply clocks */ + ret =3D rsnd_adg_get_ssi_clks(priv); + if (ret) + return ret; + ret =3D rsnd_adg_clk_enable(priv); if (ret) return ret; --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D52837B03B for ; Wed, 15 Apr 2026 12:47:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257273; cv=none; b=iNiYAh74wGZ3UYL9v781xoODoJHcCjiGvwxUa6xtug2ql4cgTSiCqOskRJnDVv75W2Kye77QScPncmh3CSizOMIIyDTrPZx088vE0MJzgRW9h9WW8M9RjVhWpJe4vhpPpm8HFnR3X7wGMA3CayB+H+6iaR+MFq6e+ufG3PUWrzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257273; c=relaxed/simple; bh=o7cX6xYLyuos94ZpDZbf8yhOnasEgZX1AkNvoBGmzKg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aRFSNtz5Cvq4Lg/GQwVwt7T5oNZWfgaUPiay8JASEcov8mLvmrH5u5tb+DrQpZOVMdHwBB9WrdZV1TuDGdLM4A+EfjN1nJ/IEidz3b60NVz4BtSChK5DmaoudnTAxOJfDH1M++UtnI9gCt/Rxh4Bl9WWEYqZ+UtZ4mrlkcfzAJY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mAFGxp2/; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mAFGxp2/" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-488b3f8fa2bso68628005e9.1 for ; Wed, 15 Apr 2026 05:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257269; x=1776862069; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c9HiyLdpQmGO7ARO5mYvJF04K3eGYiJQbh378YAjq5M=; b=mAFGxp2/a8iG/tmvifpQW35BASlyMVMoZpVFABz07/on262/GKHAbEw5ar1MJ0AFQ/ toiOqFXWbzeRjgmLgTFC4DMuWC51Yk2kHdawEzbBnVKUBlNdYz+qG4FtlHASXK9N+V5f U35XR9WgLy8cPXYVOF+nbr5yQFn15fRreosHXnI4Ab8VhhCupKJfo+y5AgAHulf1WTPt FfHz+NBHAOfnTNm+u6xruMD7DWLWOC9wrzJeJp86XLtEZw/KcaA61iyvJ0XA4BoOx6BK CX0PeGt0BLWXCixeOZJQRmLcu3xOB0UwCa4hUoke7oRuGPI+Ye43eaMFOciOmmpAkJn6 FOAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257269; x=1776862069; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=c9HiyLdpQmGO7ARO5mYvJF04K3eGYiJQbh378YAjq5M=; b=dqQCF2TN6BzEHPg34wQH4RWFyCMSw6X3k0mWZOlWBbbobNEiXJ4HxoxsELu3ZHx326 S5sb3dDAvlnsMZjOqV5rZYzwSDiz4PwCOKoCZsHRgBpJ/JPC3WRTxkdKQ7j36eDpje+k hYSESIcj8dE/+YQywUixfYu5wRBmnDMvq5Tg8LU3augrIt5WDw4wrRW8BvWPaPSUrsAm lRyageAUyUTSi1PsBRAbphVJRI0r0TrNc4puPZ9ZxHYPe1jfRZoU+pdrZnoX3ZvZinG0 /TUMut0UnhvBGaQOZlyrhHM/tSCgOLSkt3lXSWqUx7gmMU2hT3Oc6wYrKlj6EqRJbzH+ UQ1g== X-Forwarded-Encrypted: i=1; AFNElJ/N0Ofx5MzetHsKURyb9ZrMimkhjWZAh/96aCW/UIQa+Ds/1J0zkBAQpomUN1XnHNOI8GdCdhFvekPThTQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxgiaG5Udq0NAI/YLSTdeKfcSjEcctbJFwLc/yTNpM2AtS70tDk dCgJqDN/TB8tSKmtJWgQwEEf7Cjt2t5KrQ/khVkQCYzGki66uvn6CSJV X-Gm-Gg: AeBDiet+B8682YHT4UAfXgP8xREKkZVbW3tc5TvjrWmHaa+watSMkg+mS7RgXXPGqVj 16z8NGCM/ZRuRv9oCrkFRsVvs/mStQvN2wJH9o7xLJ6FUo4b9ygMIXGzjceBiDUrgs34PA9z/BE JkS3j2I63Ncg3d1z7XSz567pB7l3qfYdO7w7d9LLeMwvVKCnoGvyLIa/0DMascaBrTOG6PuqeHo 2ngLrM3gFTPg7Rez8bfmKAXfZ9cfQPzvStWA4yxi9oXONaGEz1UYwt+CnV70x7RpI2Xc4IUX4Ag CqWl61hAUyumMVsHmCUOkBanODtHWYGevqUZJHzSPzqoTbiJ4kjVe2sK1D8ZGjv+zhrU1o+Bdjl EeiCzGVrNA9Kic3UpqSoQD1qx/WtTlDoSZiaVEEI6c8hYA7hbvQom2HasUjRRaby41cIf9Nji3U oPkYmhyekTyriCWVVvyrJ0zZMDQyZMBzhHB+Pmog== X-Received: by 2002:a05:600c:c08b:b0:485:3c2e:60d5 with SMTP id 5b1f17b1804b1-488d6816f66mr207396055e9.2.1776257268742; Wed, 15 Apr 2026 05:47:48 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:48 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 12/14] ASoC: rsnd: src: Add SRC reset and clock support for RZ/G3E Date: Wed, 15 Apr 2026 12:47:29 +0000 Message-Id: <20260415124731.3684773-13-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RZ/G3E SoC requires explicit SCU (Sampling Rate Converter Unit) reset and clock management unlike previous R-Car generations: - scu_clk: SCU module clock - scu_clkx2: SCU double-rate clock - scu_supply_clk: SCU supply clock Without these clocks enabled, the SRC module cannot operate on RZ/G3E. Add support for the shared SCU reset controller used by the SRC modules on the Renesas RZ/G3E SoC. All SRC instances are gated by the same "scu" reset line. Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Move shared SCU clocks (scu, scu_x2, scu_supply) from rsnd_priv variables into new struct rsnd_src_ctrl, following the rsnd_dma_ctrl pattern for shared non-per-instance module resources - Keep original declaration order for struct device_node *node v3: No changes v2: No changes sound/soc/renesas/rcar/rsnd.h | 1 + sound/soc/renesas/rcar/src.c | 59 ++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 953a2d998a03..70e395d3c6ef 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -679,6 +679,7 @@ struct rsnd_priv { /* * below value will be filled on rsnd_src_probe() */ + void *src_ctrl; void *src; int src_nr; =20 diff --git a/sound/soc/renesas/rcar/src.c b/sound/soc/renesas/rcar/src.c index 8b58cc20e7a8..651ed378c4f7 100644 --- a/sound/soc/renesas/rcar/src.c +++ b/sound/soc/renesas/rcar/src.c @@ -54,6 +54,14 @@ struct rsnd_src { ((pos) =3D (struct rsnd_src *)(priv)->src + i); \ i++) =20 +struct rsnd_src_ctrl { + struct clk *scu; + struct clk *scu_x2; + struct clk *scu_supply; +}; + +#define rsnd_priv_to_src_ctrl(priv) \ + ((struct rsnd_src_ctrl *)(priv)->src_ctrl) =20 /* * image of SRC (Sampling Rate Converter) @@ -516,6 +524,7 @@ static int rsnd_src_init(struct rsnd_mod *mod, struct rsnd_priv *priv) { struct rsnd_src *src =3D rsnd_mod_to_src(mod); + struct device *dev =3D rsnd_priv_to_dev(priv); int ret; =20 /* reset sync convert_rate */ @@ -526,6 +535,12 @@ static int rsnd_src_init(struct rsnd_mod *mod, if (ret < 0) return ret; =20 + ret =3D clk_prepare_enable(rsnd_priv_to_src_ctrl(priv)->scu_supply); + if (ret) { + dev_err(dev, "Cannot enable scu_supply_clk\n"); + return ret; + } + rsnd_src_activation(mod); =20 rsnd_src_init_convert_rate(io, mod); @@ -549,6 +564,8 @@ static int rsnd_src_quit(struct rsnd_mod *mod, src->sync.val =3D src->current_sync_rate =3D 0; =20 + clk_disable_unprepare(rsnd_priv_to_src_ctrl(priv)->scu_supply); + return 0; } =20 @@ -713,6 +730,8 @@ int rsnd_src_probe(struct rsnd_priv *priv) { struct device_node *node; struct device *dev =3D rsnd_priv_to_dev(priv); + struct reset_control *rstc; + struct rsnd_src_ctrl *src_ctrl; struct rsnd_src *src; struct clk *clk; char name[RSND_SRC_NAME_SIZE]; @@ -728,6 +747,12 @@ int rsnd_src_probe(struct rsnd_priv *priv) goto rsnd_src_probe_done; } =20 + src_ctrl =3D devm_kzalloc(dev, sizeof(*src_ctrl), GFP_KERNEL); + if (!src_ctrl) { + ret =3D -ENOMEM; + goto rsnd_src_probe_done; + } + src =3D devm_kcalloc(dev, nr, sizeof(*src), GFP_KERNEL); if (!src) { ret =3D -ENOMEM; @@ -736,6 +761,28 @@ int rsnd_src_probe(struct rsnd_priv *priv) =20 priv->src_nr =3D nr; priv->src =3D src; + priv->src_ctrl =3D src_ctrl; + + src_ctrl->scu =3D devm_clk_get_optional_enabled(dev, "scu"); + if (IS_ERR(src_ctrl->scu)) { + ret =3D dev_err_probe(dev, PTR_ERR(src_ctrl->scu), + "failed to get scu clock\n"); + goto rsnd_src_probe_done; + } + + src_ctrl->scu_x2 =3D devm_clk_get_optional_enabled(dev, "scu_x2"); + if (IS_ERR(src_ctrl->scu_x2)) { + ret =3D dev_err_probe(dev, PTR_ERR(src_ctrl->scu_x2), + "failed to get scu_x2 clock\n"); + goto rsnd_src_probe_done; + } + + src_ctrl->scu_supply =3D devm_clk_get_optional(dev, "scu_supply"); + if (IS_ERR(src_ctrl->scu_supply)) { + ret =3D dev_err_probe(dev, PTR_ERR(src_ctrl->scu_supply), + "failed to get scu_supply clock\n"); + goto rsnd_src_probe_done; + } =20 i =3D 0; for_each_child_of_node_scoped(node, np) { @@ -759,6 +806,16 @@ int rsnd_src_probe(struct rsnd_priv *priv) goto rsnd_src_probe_done; } =20 + /* + * RZ/G3E uses a shared SCU reset controller for all SRC modules. + * R-Car platforms typically don't have SRC reset controls. + */ + rstc =3D devm_reset_control_get_optional_shared(dev, "scu"); + if (IS_ERR(rstc)) { + ret =3D PTR_ERR(rstc); + goto rsnd_src_probe_done; + } + clk =3D devm_clk_get(dev, name); if (IS_ERR(clk)) { ret =3D PTR_ERR(clk); @@ -766,7 +823,7 @@ int rsnd_src_probe(struct rsnd_priv *priv) } =20 ret =3D rsnd_mod_init(priv, rsnd_mod_get(src), - &rsnd_src_ops, clk, NULL, RSND_MOD_SRC, i); + &rsnd_src_ops, clk, rstc, RSND_MOD_SRC, i); if (ret) goto rsnd_src_probe_done; =20 --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E60A837D10F for ; Wed, 15 Apr 2026 12:47:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257274; cv=none; b=P0RnzP7Hv2yCYzIjdszHqo6m0ax/A0zd61C11CREw6+e9RWqxY5ZE/U5zk8fab6JwDikJI2xIB5rPUzFWet9XMnn35/thk81inpXMUbQ0QjCKx8ZzNpO6FrFwmakxPEW7/yD9iZcSaDCwO57ijI8cluEV00GEgpMivUPLbpksDM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257274; c=relaxed/simple; bh=VrxoqvGX10M5GqXKNwdjsk+j6NY1VCHWKELaVq71FgE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=m2oYFrZ/52eUEKbUwvO4S30BNvxQ3bd9/cjhr9Htc7RDkFOewPbaKdxfmccxmjp3S6PVSggvmw0CoaeggXPtBXqSjkne1rR0+YXAIV+Kp3fnEgD4+f+r2AZFOwXeBafnVn1wlTpQPHl5YNKdZpQvaef9azpeW0JIxXfm+KBfON0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=H8JP4Crh; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H8JP4Crh" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-488b0046078so66486805e9.1 for ; Wed, 15 Apr 2026 05:47:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257270; x=1776862070; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GUAknHQ/4HWX3+aWhalXddRaQ+nerMHWsE1Hn2z0ZCs=; b=H8JP4Crh47kdWEkINTS/yTfgV5lj5sPjiXjeSr+rkONi0JD+zLtbadPDNDM1clbwIs f8x2/Wjgc0IlTh+cc7xUtmS3Or+3Ev1acfz76WbLLLw3SQtL5aX7OCCe04gfVvqYEEQ3 5tdkzuI6OwE5Go9jmgUm95x/gY2ouizoIS621h65amcIw1NMmHEOlli9weTpBns82JLf oZ5g4hUpiYsQP0kyliUor9Y9MxWPkgfb1zQFRyv6hjpWZWfjInndEdOLPiK0jKhMOoyU o1UFR5s8drFQU5EtyQnsTlOHc3z+d0Z2PPDrkuxi3y93q2bOLtaadhqpy02ia+Q3pm2D G1Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257270; x=1776862070; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=GUAknHQ/4HWX3+aWhalXddRaQ+nerMHWsE1Hn2z0ZCs=; b=qrInVPY7xMjwipZM1FvkSdgRKEl06gK7xUYgW9SF9oItxwg84NUdRCclSrKQyIZUmv NrFQWmjT2Dzj3eJpevLx12+CQFS/2xDqCZmgGNuFjiHndJQrCaPd/PGBEoSD/5FtWaIN F5hVHJGEyICtL2i0g+7t78gvaUhIOckP3h0PKu7M+iNt+/pxuLPJO5S2Ry6NYGaE6gjB 9oo5R3WteyNwI9bcpXP43817AvPzoPOltfNHewGC6E7QA53GHYVuQt4wgV8vnV99O/dX nvOheYI5aPbOpfVx05FBVOkkXrU2bjZke17+H8CWp4pm2a4jPyhTOqntHdnd0WRIOALl BwxA== X-Forwarded-Encrypted: i=1; AFNElJ+jrwES+5jR/RyGhTP0jMqTK1CgFbpdZRzmElc60NZuWuS+ieWWwG19jPxr9pHQqwvplVSWH3jUoMpvLCo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4/Mt0b5SUpdAZJ24vBhRStuy9CdZBVFHFn/22t5rYhAEyOIjB fjjrPAw2k1cmaduCIG+4616+7AN8kwcvxGf2gA8dCv8jI8OU0AAQdkLx X-Gm-Gg: AeBDieugedZcAdGFHiOxnM0Nkdj39th8Wk91sAobRv9MXIYX+JYYG5tnN4r0mRGl9AK elaqMwoD/crHRfD2VwLvtPKNyWsjZm37U/Ck95HsgkVccrt/IDwUWM/RXnzpSkXfSEltcMWOX6L ugcMRrFLNrPjBX9OU+pSCb0ZPFSvnVuPX0JQpDuz+rESlLaSyxjYvigfeNWVjQlGbckKaJpsSEz bzmDVGum/IhajdMPtZI6LGfahPflvCEfUNbFfXt352ct7nMmnSHpD20q031fq4wzk4yTN3mG4f6 MZgPWrnIafvnxqufONgG1z/2rm1SPMag5BWzHaaj5Nwy2Xr9TRXb+fTpTIdykdI9MEFuwc5ojnf USTF8dvIhSsKEe6v1bZuVKvKo62JWzSrZj6urqz7un0HRPpgP0ZNblAZntMZ6rRtdYzYyFsxwNn e+ARIoUWiPVC+8l0KLJgJZWPBUJK/8B+C2fOpRHw== X-Received: by 2002:a05:600c:5303:b0:488:b196:d249 with SMTP id 5b1f17b1804b1-488d67bf74fmr291654215e9.5.1776257269879; Wed, 15 Apr 2026 05:47:49 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:49 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 13/14] ASoC: rsnd: Support unprefixed DT node names for RZ/G3E Date: Wed, 15 Apr 2026 12:47:30 +0000 Message-Id: <20260415124731.3684773-14-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RZ/G3E device tree binding uses standard unprefixed node names ('ssi', 'ssiu', 'src', 'dvc', 'mix', 'ctu', 'dai') instead of the legacy 'rcar_sound,' prefixed names used by R-Car bindings. Convert rsnd_parse_of_node() from a macro into a function that tries the legacy prefixed name first, then falls back to the unprefixed name by stripping the "rcar_sound," prefix. This makes the driver work transparently with both old and new bindings. While at it, update the of_node_name_eq() calls in core.c which compare against RSND_NODE_DAI directly (bypassing rsnd_parse_of_node()), and fix the related comments in ssiu.c, ssi.c, and dma.c that reference hardcoded "rcar_sound,ssiu" / "rcar_sound,ssi" names. Signed-off-by: John Madieu --- Changes: v5: New patch. sound/soc/renesas/rcar/core.c | 27 +++++++++++++++++++++++++-- sound/soc/renesas/rcar/dma.c | 8 ++++---- sound/soc/renesas/rcar/rsnd.h | 4 ++-- sound/soc/renesas/rcar/ssi.c | 8 ++++---- sound/soc/renesas/rcar/ssiu.c | 8 ++++---- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c index cb31af8a34d4..93cacac1c98a 100644 --- a/sound/soc/renesas/rcar/core.c +++ b/sound/soc/renesas/rcar/core.c @@ -1235,6 +1235,27 @@ int rsnd_node_count(struct rsnd_priv *priv, struct d= evice_node *node, char *name return i; } =20 +struct device_node *rsnd_parse_of_node(struct rsnd_priv *priv, const char = *name) +{ + struct device_node *np =3D rsnd_priv_to_dev(priv)->of_node; + struct device_node *node; + const char *unprefixed; + + node =3D of_get_child_by_name(np, name); + if (node) + return node; + + /* + * RZ/G3E binding uses unprefixed node names (e.g. "ssi" instead + * of "rcar_sound,ssi"). Try stripping the "rcar_sound," prefix. + */ + unprefixed =3D strchr(name, ','); + if (unprefixed) + node =3D of_get_child_by_name(np, unprefixed + 1); + + return node; +} + static struct device_node* rsnd_pick_endpoint_node_for_ports(struct device_node *e_ports, struct device_node *e_port) @@ -1273,7 +1294,8 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, i= nt *is_graph) of_node_put(node); =20 for_each_child_of_node_scoped(np, node) { - if (!of_node_name_eq(node, RSND_NODE_DAI)) + if (!of_node_name_eq(node, RSND_NODE_DAI) && + !of_node_name_eq(node, "dai")) continue; =20 priv->component_dais[i] =3D of_get_child_count(node); @@ -1525,7 +1547,8 @@ static int rsnd_dai_probe(struct rsnd_priv *priv) } } else { for_each_child_of_node_scoped(np, node) { - if (!of_node_name_eq(node, RSND_NODE_DAI)) + if (!of_node_name_eq(node, RSND_NODE_DAI) && + !of_node_name_eq(node, "dai")) continue; =20 for_each_child_of_node_scoped(node, dai_np) { diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index 71dfa23018a5..39f43e935cde 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -794,11 +794,11 @@ static void rsnd_dma_of_path(struct rsnd_mod *this, int nr, i, idx; =20 /* - * It should use "rcar_sound,ssiu" on DT. - * But, we need to keep compatibility for old version. + * It should use "rcar_sound,ssiu" (R-Car) or "ssiu" (RZ/G3E) on DT. + * We need to keep compatibility for old version. * - * If it has "rcar_sound.ssiu", it will be used. - * If not, "rcar_sound.ssi" will be used. + * If it has "rcar_sound.ssiu" or "ssiu", it will be used. + * If not, "rcar_sound.ssi" or "ssi" will be used. * see * rsnd_ssiu_dma_req() * rsnd_ssi_dma_req() diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 70e395d3c6ef..0d2436beb718 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -482,8 +482,8 @@ int rsnd_runtime_is_tdm_split(struct rsnd_dai_stream *i= o); /* * DT */ -#define rsnd_parse_of_node(priv, node) \ - of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, node) +struct device_node *rsnd_parse_of_node(struct rsnd_priv *priv, const char = *name); + #define RSND_NODE_DAI "rcar_sound,dai" #define RSND_NODE_SSI "rcar_sound,ssi" #define RSND_NODE_SSIU "rcar_sound,ssiu" diff --git a/sound/soc/renesas/rcar/ssi.c b/sound/soc/renesas/rcar/ssi.c index c65435551283..c00c6f9f5c9d 100644 --- a/sound/soc/renesas/rcar/ssi.c +++ b/sound/soc/renesas/rcar/ssi.c @@ -1010,11 +1010,11 @@ static struct dma_chan *rsnd_ssi_dma_req(struct rsn= d_dai_stream *io, char *name; =20 /* - * It should use "rcar_sound,ssiu" on DT. - * But, we need to keep compatibility for old version. + * It should use "rcar_sound,ssiu" (R-Car) or "ssiu" (RZ/G3E) on DT. + * We need to keep compatibility for old version. * - * If it has "rcar_sound.ssiu", it will be used. - * If not, "rcar_sound.ssi" will be used. + * If it has "rcar_sound.ssiu" or "ssiu", it will be used. + * If not, "rcar_sound.ssi" or "ssi" will be used. * see * rsnd_ssiu_dma_req() * rsnd_dma_of_path() diff --git a/sound/soc/renesas/rcar/ssiu.c b/sound/soc/renesas/rcar/ssiu.c index f483389868d2..8fb0ec5dc791 100644 --- a/sound/soc/renesas/rcar/ssiu.c +++ b/sound/soc/renesas/rcar/ssiu.c @@ -401,11 +401,11 @@ static struct dma_chan *rsnd_ssiu_dma_req(struct rsnd= _dai_stream *io, char *name; =20 /* - * It should use "rcar_sound,ssiu" on DT. - * But, we need to keep compatibility for old version. + * It should use "rcar_sound,ssiu" (R-Car) or "ssiu" (RZ/G3E) on DT. + * We need to keep compatibility for old versions. * - * If it has "rcar_sound.ssiu", it will be used. - * If not, "rcar_sound.ssi" will be used. + * If it has "rcar_sound.ssiu" or "ssiu", it will be used. + * If not, "rcar_sound.ssi" or "ssi" will be used. * see * rsnd_ssi_dma_req() * rsnd_dma_of_path() --=20 2.25.1 From nobody Tue Jun 16 02:36:59 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBCAA37EFFA for ; Wed, 15 Apr 2026 12:47:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257276; cv=none; b=DLxJ2irq+LjpTylFkEFqaWyijt2K5RQFnLOKB8r7KF171NtSjlEALk6lD9XLUPwE/Z56smIeRVI0zaxiH5asjOceXr0wuekWQmmISW6WK57IpWWfs7gcwsCboe8WgLksQ1YfCJmghRnY00vyh9HEJgRNSvGBdfonidUNMsNDQ8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776257276; c=relaxed/simple; bh=3AUjaTuUAMOIoNbGwrNrTFB3KowfH8gyLJvGIZwmpq0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=X8u7vvOtdcK3ozGCYKsjId1cE92iLePTSxWpfVfzmn+R0Z5GI3O0yZckZWq60qlb9uw3C4h6YoXJxz8DLS81Y16pvH76RP7sIKi1+GDPpacjeDminMrudPFWgCoYoTkLxPXG5MNozzAP3otZxBtq8+1YZmEidvk1z67FT13blig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OsNhjAUf; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OsNhjAUf" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-43d01d6b50cso6845333f8f.1 for ; Wed, 15 Apr 2026 05:47:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776257271; x=1776862071; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zhkpJX525o0ma2rk+OGoGOKbbyNMDBMuVYVKcuyB9Mo=; b=OsNhjAUfKJRjl5kpMUXmiLMgneo8/ch7XSspk7QUvT0x9atP1eABdnm6DPCrBZC9hn 4igj3MWoD9rUwLtcFoJr7+0cYOtKv3lpywRksxNqdTI/rVn4dD+UK8xb2T6UsC6Wl74R FJ0W5d1MNt5qRlix3sbLzr3A8VYMcOSiwXTyl/Z+TK6iKI8X3v2oYP6FSmTzzQ4n0hOa IlGbanLvXaTLJyJeiuEc13tQ5ZVHRrQ+KtpED0eZrQeZPFhG6lGdnBc4ara1tqWgJefm HaYR+sYOKsBYrgha1B05LmU2LYpTgM1TIhiVHCZ8lBrg7vNBfhM/RPM1y8RBmvuuv2A2 Vj/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776257271; x=1776862071; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zhkpJX525o0ma2rk+OGoGOKbbyNMDBMuVYVKcuyB9Mo=; b=byGLSsb69PQC4QIcWUpyW7Spwo4rxit7NNe2spAPtbvpHz73VT0/EH8C0BzjNjSChW C+whzeLLBeZhMyozPdN2V8pVGPBV7YEgCEDi1HH5qCziVsjXkcwSa2Esvbnr+RVDZRsQ kxBJsyxbT8AkrcrgRpC33b7qtEEIC5Xz3Y3wNnW+T8hNXB+e2VmQK7z8Mi64TyXn8qen OTRrYJzlExZVgCk9OYe0t44BbSnhBMX6+VC+rdZp1vQpkEbA/6F4kmLQOw7vTnxY8cts YzIYbM+gsSKVKPNytfF7xTxKxkbjWQRWlmjOlor980vrapTLONRen032b3AV+qqbja2v 1c0g== X-Forwarded-Encrypted: i=1; AFNElJ8hqKSbUOgQAF01FXGyGYQFbEZkDyxeXebZwmTlfVZTPAXsD/tzdT8vreBTtG+B2Hd6pYdVq5T3sK6euyQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9KH/Eupqw1rdaohPnoaYkXXesiBP/GJzgbNEbyR1MPEFD8HaO 2lj1DMlHpaSblIacyjjWxvLWnnqanTCIF9gkttdPnrDMl3qJlpFZGG2B X-Gm-Gg: AeBDies2SL/bUSj0A7oGIrUZ6McqpzqoHafv42xiDR06wCpiaYYPx/eF/ov6hu+GZz/ hIEqi72X1fPEFo2CVQvCmeHSWMILHhca0wuCoExs1Mb2C3+6gG/exj8rpICP5K8AhFEJ/4TwXU1 yCLMxNMO5FmC1E9GlMx73GB4O5vCHP37ywR8YOBop6EG7NMyx+uAXUWNrDLLdv5wxiWtroPAoob FZXa72rSLiUxYPYYrF9YLKNT68/mIKtYEy84Mciy0RLnSRDpZiKNdFWrAPhqmnj4ntYTV0ME1lT eKbLtZ+DC08baoTKAxFJlPLR0oD6rye8EAbk07wVFzb/WB152sle2k68NbMLXnU64/4FTiqw4fO 8AsnLTMmIl3MyQFgiL+UQ8O/NEGg7MwEpq7Pq8GRQQHKd9et/Unm2vSXvCnubaHVmu7mn0LQhag pV9fSt3y7Zf8sV30idEuGg0L1uCQR5V2zjDbJtbg== X-Received: by 2002:a5d:5d12:0:b0:43d:613:33de with SMTP id ffacd0b85a97d-43d642a63d1mr32016431f8f.20.1776257270855; Wed, 15 Apr 2026 05:47:50 -0700 (PDT) Received: from localhost.localdomain ([2001:41d0:406:c100::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43ead356616sm5123319f8f.13.2026.04.15.05.47.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 05:47:50 -0700 (PDT) From: John Madieu X-Google-Original-From: John Madieu To: Kuninori Morimoto , Mark Brown , Liam Girdwood Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Geert Uytterhoeven , Magnus Damm , Philipp Zabel , Claudiu Beznea , Biju Das , john.madieu@gmail.com, linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, John Madieu Subject: [PATCH v5 14/14] ASoC: rsnd: Add system suspend/resume support Date: Wed, 15 Apr 2026 12:47:31 +0000 Message-Id: <20260415124731.3684773-15-john.madieu.xa@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> References: <20260415124731.3684773-1-john.madieu.xa@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add per-module suspend/resume functions following the existing driver architecture where each module manages its own resources in its own file. core.c provides common clock/reset helpers and orchestrates the calls in the correct order (reverse probe for suspend, probe order for resume). Infrastructure clocks (ADG, audmacpp, SCU) are managed globally using optional APIs to remain transparent to platforms that don't specify these clocks/resets. Signed-off-by: John Madieu --- Changes: v5: No changes v4: - Absorb rsnd_adg_mod_get() helper directly instead of a separate preparatory patch - Distribute suspend/resume declarations into their respective IP sections in rsnd.h v3: No changes v2: - Distribute suspend/resume into per-module files (ssi.c, ssiu.c, src.c, ctu.c, mix.c, dvc.c, adg.c, dma.c) instead of monolithic loops in core.c, following Morimoto-san's architecture suggestion sound/soc/renesas/rcar/adg.c | 26 +++++++++++++++++++++ sound/soc/renesas/rcar/core.c | 43 +++++++++++++++++++++++++++++++++-- sound/soc/renesas/rcar/ctu.c | 20 ++++++++++++++++ sound/soc/renesas/rcar/dma.c | 20 ++++++++++++++++ sound/soc/renesas/rcar/dvc.c | 20 ++++++++++++++++ sound/soc/renesas/rcar/mix.c | 20 ++++++++++++++++ sound/soc/renesas/rcar/rsnd.h | 18 +++++++++++++++ sound/soc/renesas/rcar/src.c | 26 +++++++++++++++++++++ sound/soc/renesas/rcar/ssi.c | 20 ++++++++++++++++ sound/soc/renesas/rcar/ssiu.c | 20 ++++++++++++++++ 10 files changed, 231 insertions(+), 2 deletions(-) diff --git a/sound/soc/renesas/rcar/adg.c b/sound/soc/renesas/rcar/adg.c index 9cae3bbefa55..8c0c8bc92ab3 100644 --- a/sound/soc/renesas/rcar/adg.c +++ b/sound/soc/renesas/rcar/adg.c @@ -908,3 +908,29 @@ void rsnd_adg_remove(struct rsnd_priv *priv) /* It should be called after rsnd_adg_clk_disable() */ rsnd_adg_null_clk_clean(priv); } + +static struct rsnd_mod *rsnd_adg_mod_get(struct rsnd_priv *priv) +{ + struct rsnd_adg *adg =3D rsnd_priv_to_adg(priv); + + if (!adg) + return NULL; + + return rsnd_mod_get(adg); +} + +void rsnd_adg_suspend(struct rsnd_priv *priv) +{ + struct rsnd_mod *mod =3D rsnd_adg_mod_get(priv); + + if (mod) + rsnd_suspend_clk_reset(mod->clk, mod->rstc); +} + +void rsnd_adg_resume(struct rsnd_priv *priv) +{ + struct rsnd_mod *mod =3D rsnd_adg_mod_get(priv); + + if (mod) + rsnd_resume_clk_reset(mod->clk, mod->rstc); +} diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c index 93cacac1c98a..19d1f301cee9 100644 --- a/sound/soc/renesas/rcar/core.c +++ b/sound/soc/renesas/rcar/core.c @@ -963,7 +963,8 @@ static int rsnd_soc_hw_rule_channels(struct snd_pcm_hw_= params *params, static const struct snd_pcm_hardware rsnd_pcm_hardware =3D { .info =3D SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP | - SNDRV_PCM_INFO_MMAP_VALID, + SNDRV_PCM_INFO_MMAP_VALID | + SNDRV_PCM_INFO_RESUME, .buffer_bytes_max =3D 64 * 1024, .period_bytes_min =3D 32, .period_bytes_max =3D 8192, @@ -2082,11 +2083,35 @@ static void rsnd_remove(struct platform_device *pde= v) remove_func[i](priv); } =20 +void rsnd_suspend_clk_reset(struct clk *clk, struct reset_control *rstc) +{ + clk_unprepare(clk); + reset_control_assert(rstc); +} + +void rsnd_resume_clk_reset(struct clk *clk, struct reset_control *rstc) +{ + reset_control_deassert(rstc); + clk_prepare(clk); +} + static int rsnd_suspend(struct device *dev) { struct rsnd_priv *priv =3D dev_get_drvdata(dev); =20 + /* + * Reverse order of probe: + * ADG -> DVC -> MIX -> CTU -> SRC -> SSIU -> SSI -> DMA + */ rsnd_adg_clk_disable(priv); + rsnd_adg_suspend(priv); + rsnd_dvc_suspend(priv); + rsnd_mix_suspend(priv); + rsnd_ctu_suspend(priv); + rsnd_src_suspend(priv); + rsnd_ssiu_suspend(priv); + rsnd_ssi_suspend(priv); + rsnd_dma_suspend(priv); =20 return 0; } @@ -2095,7 +2120,21 @@ static int rsnd_resume(struct device *dev) { struct rsnd_priv *priv =3D dev_get_drvdata(dev); =20 - return rsnd_adg_clk_enable(priv); + /* + * Same order as probe: + * DMA -> SSI -> SSIU -> SRC -> CTU -> MIX -> DVC -> ADG + */ + rsnd_dma_resume(priv); + rsnd_ssi_resume(priv); + rsnd_ssiu_resume(priv); + rsnd_src_resume(priv); + rsnd_ctu_resume(priv); + rsnd_mix_resume(priv); + rsnd_dvc_resume(priv); + rsnd_adg_resume(priv); + rsnd_adg_clk_enable(priv); + + return 0; } =20 static const struct dev_pm_ops rsnd_pm_ops =3D { diff --git a/sound/soc/renesas/rcar/ctu.c b/sound/soc/renesas/rcar/ctu.c index 81bba6a1af6e..73795d5b2817 100644 --- a/sound/soc/renesas/rcar/ctu.c +++ b/sound/soc/renesas/rcar/ctu.c @@ -383,3 +383,23 @@ void rsnd_ctu_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(ctu)); } } + +void rsnd_ctu_suspend(struct rsnd_priv *priv) +{ + struct rsnd_ctu *ctu; + int i; + + for_each_rsnd_ctu(ctu, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(ctu)->clk, + rsnd_mod_get(ctu)->rstc); +} + +void rsnd_ctu_resume(struct rsnd_priv *priv) +{ + struct rsnd_ctu *ctu; + int i; + + for_each_rsnd_ctu(ctu, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(ctu)->clk, + rsnd_mod_get(ctu)->rstc); +} diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c index 39f43e935cde..fbec7369d8b6 100644 --- a/sound/soc/renesas/rcar/dma.c +++ b/sound/soc/renesas/rcar/dma.c @@ -1034,3 +1034,23 @@ int rsnd_dma_probe(struct rsnd_priv *priv) /* dummy mem mod for debug */ return rsnd_mod_init(NULL, &mem, &mem_ops, NULL, NULL, 0, 0); } + +void rsnd_dma_suspend(struct rsnd_priv *priv) +{ + struct rsnd_dma_ctrl *dmac =3D rsnd_priv_to_dmac(priv); + + if (dmac) { + clk_disable_unprepare(dmac->audmapp_clk); + rsnd_suspend_clk_reset(NULL, dmac->audmapp_rstc); + } +} + +void rsnd_dma_resume(struct rsnd_priv *priv) +{ + struct rsnd_dma_ctrl *dmac =3D rsnd_priv_to_dmac(priv); + + if (dmac) { + rsnd_resume_clk_reset(NULL, dmac->audmapp_rstc); + clk_prepare_enable(dmac->audmapp_clk); + } +} diff --git a/sound/soc/renesas/rcar/dvc.c b/sound/soc/renesas/rcar/dvc.c index bf7146ceb5f6..0e81fdf0e97b 100644 --- a/sound/soc/renesas/rcar/dvc.c +++ b/sound/soc/renesas/rcar/dvc.c @@ -386,3 +386,23 @@ void rsnd_dvc_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(dvc)); } } + +void rsnd_dvc_suspend(struct rsnd_priv *priv) +{ + struct rsnd_dvc *dvc; + int i; + + for_each_rsnd_dvc(dvc, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(dvc)->clk, + rsnd_mod_get(dvc)->rstc); +} + +void rsnd_dvc_resume(struct rsnd_priv *priv) +{ + struct rsnd_dvc *dvc; + int i; + + for_each_rsnd_dvc(dvc, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(dvc)->clk, + rsnd_mod_get(dvc)->rstc); +} diff --git a/sound/soc/renesas/rcar/mix.c b/sound/soc/renesas/rcar/mix.c index 566e9b2a488c..42bb07ade3c8 100644 --- a/sound/soc/renesas/rcar/mix.c +++ b/sound/soc/renesas/rcar/mix.c @@ -350,3 +350,23 @@ void rsnd_mix_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(mix)); } } + +void rsnd_mix_suspend(struct rsnd_priv *priv) +{ + struct rsnd_mix *mix; + int i; + + for_each_rsnd_mix(mix, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(mix)->clk, + rsnd_mod_get(mix)->rstc); +} + +void rsnd_mix_resume(struct rsnd_priv *priv) +{ + struct rsnd_mix *mix; + int i; + + for_each_rsnd_mix(mix, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(mix)->clk, + rsnd_mod_get(mix)->rstc); +} diff --git a/sound/soc/renesas/rcar/rsnd.h b/sound/soc/renesas/rcar/rsnd.h index 0d2436beb718..44a804f216ea 100644 --- a/sound/soc/renesas/rcar/rsnd.h +++ b/sound/soc/renesas/rcar/rsnd.h @@ -267,6 +267,8 @@ u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, st= ruct rsnd_mod *mod); int rsnd_dma_attach(struct rsnd_dai_stream *io, struct rsnd_mod *mod, struct rsnd_mod **dma_mod); int rsnd_dma_probe(struct rsnd_priv *priv); +void rsnd_dma_suspend(struct rsnd_priv *priv); +void rsnd_dma_resume(struct rsnd_priv *priv); struct dma_chan *rsnd_dma_request_channel(struct device_node *of_node, cha= r *name, struct rsnd_mod *mod, char *x); =20 @@ -429,6 +431,8 @@ int rsnd_mod_init(struct rsnd_priv *priv, enum rsnd_mod_type type, int id); void rsnd_mod_quit(struct rsnd_mod *mod); +void rsnd_suspend_clk_reset(struct clk *clk, struct reset_control *rstc); +void rsnd_resume_clk_reset(struct clk *clk, struct reset_control *rstc); struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, struct rsnd_mod *mod); void rsnd_mod_interrupt(struct rsnd_mod *mod, @@ -606,6 +610,8 @@ int rsnd_adg_ssi_clk_stop(struct rsnd_mod *ssi_mod); int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod, unsigned int rate= ); int rsnd_adg_probe(struct rsnd_priv *priv); void rsnd_adg_remove(struct rsnd_priv *priv); +void rsnd_adg_suspend(struct rsnd_priv *priv); +void rsnd_adg_resume(struct rsnd_priv *priv); int rsnd_adg_set_src_timesel_gen2(struct rsnd_mod *src_mod, struct rsnd_dai_stream *io, unsigned int in_rate, @@ -803,6 +809,8 @@ extern const char * const volume_ramp_rate[]; */ int rsnd_ssi_probe(struct rsnd_priv *priv); void rsnd_ssi_remove(struct rsnd_priv *priv); +void rsnd_ssi_suspend(struct rsnd_priv *priv); +void rsnd_ssi_resume(struct rsnd_priv *priv); struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id); int rsnd_ssi_use_busif(struct rsnd_dai_stream *io); u32 rsnd_ssi_multi_secondaries_runtime(struct rsnd_dai_stream *io); @@ -826,6 +834,8 @@ int rsnd_ssiu_attach(struct rsnd_dai_stream *io, struct rsnd_mod *mod); int rsnd_ssiu_probe(struct rsnd_priv *priv); void rsnd_ssiu_remove(struct rsnd_priv *priv); +void rsnd_ssiu_suspend(struct rsnd_priv *priv); +void rsnd_ssiu_resume(struct rsnd_priv *priv); void rsnd_parse_connect_ssiu(struct rsnd_dai *rdai, struct device_node *playback, struct device_node *capture); @@ -837,6 +847,8 @@ bool rsnd_ssiu_busif_err_status_clear(struct rsnd_mod *= mod); */ int rsnd_src_probe(struct rsnd_priv *priv); void rsnd_src_remove(struct rsnd_priv *priv); +void rsnd_src_suspend(struct rsnd_priv *priv); +void rsnd_src_resume(struct rsnd_priv *priv); struct rsnd_mod *rsnd_src_mod_get(struct rsnd_priv *priv, int id); =20 #define rsnd_src_get_in_rate(priv, io) rsnd_src_get_rate(priv, io, 1) @@ -856,6 +868,8 @@ unsigned int rsnd_src_get_rate(struct rsnd_priv *priv, */ int rsnd_ctu_probe(struct rsnd_priv *priv); void rsnd_ctu_remove(struct rsnd_priv *priv); +void rsnd_ctu_suspend(struct rsnd_priv *priv); +void rsnd_ctu_resume(struct rsnd_priv *priv); struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, int id); #define rsnd_ctu_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_CTU) #define rsnd_parse_connect_ctu(rdai, playback, capture) \ @@ -868,6 +882,8 @@ struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *pri= v, int id); */ int rsnd_mix_probe(struct rsnd_priv *priv); void rsnd_mix_remove(struct rsnd_priv *priv); +void rsnd_mix_suspend(struct rsnd_priv *priv); +void rsnd_mix_resume(struct rsnd_priv *priv); struct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *priv, int id); #define rsnd_mix_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_MIX) #define rsnd_parse_connect_mix(rdai, playback, capture) \ @@ -880,6 +896,8 @@ struct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *pri= v, int id); */ int rsnd_dvc_probe(struct rsnd_priv *priv); void rsnd_dvc_remove(struct rsnd_priv *priv); +void rsnd_dvc_suspend(struct rsnd_priv *priv); +void rsnd_dvc_resume(struct rsnd_priv *priv); struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id); #define rsnd_dvc_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_DVC) #define rsnd_parse_connect_dvc(rdai, playback, capture) \ diff --git a/sound/soc/renesas/rcar/src.c b/sound/soc/renesas/rcar/src.c index 651ed378c4f7..aac749f917bf 100644 --- a/sound/soc/renesas/rcar/src.c +++ b/sound/soc/renesas/rcar/src.c @@ -848,3 +848,29 @@ void rsnd_src_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(src)); } } + +void rsnd_src_suspend(struct rsnd_priv *priv) +{ + struct rsnd_src *src; + int i; + + for_each_rsnd_src(src, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(src)->clk, + rsnd_mod_get(src)->rstc); + + clk_disable_unprepare(rsnd_priv_to_src_ctrl(priv)->scu_x2); + clk_disable_unprepare(rsnd_priv_to_src_ctrl(priv)->scu); +} + +void rsnd_src_resume(struct rsnd_priv *priv) +{ + struct rsnd_src *src; + int i; + + clk_prepare_enable(rsnd_priv_to_src_ctrl(priv)->scu); + clk_prepare_enable(rsnd_priv_to_src_ctrl(priv)->scu_x2); + + for_each_rsnd_src(src, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(src)->clk, + rsnd_mod_get(src)->rstc); +} diff --git a/sound/soc/renesas/rcar/ssi.c b/sound/soc/renesas/rcar/ssi.c index c00c6f9f5c9d..6dc76839ef0a 100644 --- a/sound/soc/renesas/rcar/ssi.c +++ b/sound/soc/renesas/rcar/ssi.c @@ -1261,3 +1261,23 @@ void rsnd_ssi_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(ssi)); } } + +void rsnd_ssi_suspend(struct rsnd_priv *priv) +{ + struct rsnd_ssi *ssi; + int i; + + for_each_rsnd_ssi(ssi, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(ssi)->clk, + rsnd_mod_get(ssi)->rstc); +} + +void rsnd_ssi_resume(struct rsnd_priv *priv) +{ + struct rsnd_ssi *ssi; + int i; + + for_each_rsnd_ssi(ssi, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(ssi)->clk, + rsnd_mod_get(ssi)->rstc); +} diff --git a/sound/soc/renesas/rcar/ssiu.c b/sound/soc/renesas/rcar/ssiu.c index 8fb0ec5dc791..60b58096531d 100644 --- a/sound/soc/renesas/rcar/ssiu.c +++ b/sound/soc/renesas/rcar/ssiu.c @@ -630,3 +630,23 @@ void rsnd_ssiu_remove(struct rsnd_priv *priv) rsnd_mod_quit(rsnd_mod_get(ssiu)); } } + +void rsnd_ssiu_suspend(struct rsnd_priv *priv) +{ + struct rsnd_ssiu *ssiu; + int i; + + for_each_rsnd_ssiu(ssiu, priv, i) + rsnd_suspend_clk_reset(rsnd_mod_get(ssiu)->clk, + rsnd_mod_get(ssiu)->rstc); +} + +void rsnd_ssiu_resume(struct rsnd_priv *priv) +{ + struct rsnd_ssiu *ssiu; + int i; + + for_each_rsnd_ssiu(ssiu, priv, i) + rsnd_resume_clk_reset(rsnd_mod_get(ssiu)->clk, + rsnd_mod_get(ssiu)->rstc); +} --=20 2.25.1