From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 EA93B38BF6A for ; Sat, 18 Jul 2026 13:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381926; cv=none; b=KXX2FZDmr+fh3BSpiPfxLmKWdkmhJ9yP0dRrk3f3nnJKL94iJbxQok8jg8dWPAq/frHxdKJWiPedLaHWoPuL7fgInux6V3Wa8rTqatGOZzDQjlODOzjK3uOLf08WD5zRq5GqejOquEnuUmGfPCIUgD6U3NNWxFMTIK9kCReERD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381926; c=relaxed/simple; bh=dH0EtEQbcw9lwaG6JbyHv5PcNhJi+Ra0PqO4aPAFLFs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PXAfm/Ay9OhW5f3THQ/vNUcTZgfeddBb7B5OobTEFWCpWa+kF19bH8s2bL1mxYD1qRrGTXGHhXS3EPbVUze735UFkius9AvfUzf5Uh2SlM7eVcLGVgFPT5W0GxvveVCkWZ/dOEUXbESctpQUondB4GUXLJqpnqQ6swRxPxEuaQk= 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=MrwHRN1X; arc=none smtp.client-ip=209.85.128.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="MrwHRN1X" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4954df200ddso5811865e9.0 for ; Sat, 18 Jul 2026 06:38:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381923; x=1784986723; 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:content-type; bh=8nmwlxy3EMklqPJNW5lqxF6m7cobxgRyLM42tEeN/MM=; b=MrwHRN1X5rQVz0SnODnVEz3mEaLVCEg9QkzQ4s2AB4Ttdr3krDXgCwvI4VISWUs7xD 65IeT2fel/nhe0bt51GYGkKaZXLIZUnED3ENjAm+gYeXNPvnC06J4g3GLqF8RkM4il4m iW6sCf3hI1/2YN22PDQt86iIBRfPJnG1prpYQX3akQM3v6p9bvqH0SR96Jx82Lm/JEzK LZPdsaxw0NfdnpDTZR+XZRW3TbIIF3ccEDz58nsLOjfK6RmaRM76OvBWl7yxiv4+c4pW M5HV08eKOGdxCPxRer0BpJCPG7VkbONcGcnljUAmUmmGTbDWoX4rtWLRDLYTg0uRuafB fpTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381923; x=1784986723; 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:content-type; bh=8nmwlxy3EMklqPJNW5lqxF6m7cobxgRyLM42tEeN/MM=; b=XcxGXQq1E8RoPEjZksL9npXc4PQcsff8ZyKRJYusz4KRmlXhCcCZBB8m88WHImxe6h VINPa7gaG5qAz9/uk97YZ0Wg08bn+gH4d3jYBu2viwYRSM12h5mXfl96ocEaDk5J34Rk ur6yKQ88OzqtqECIqu2mJ+WgjovIuTFRgWzR2+NpqrofLACQmawcgJs84Y2zJX+zoKME 0XvVo4B1BKkzwaGpvKPOq5j/566SFAQrBvcywK39q6+m7snEu5F6I8au62SD+e784mA9 b7SCl9wVXO6D3MbxdSGjH6kbh5YweqOqfdbqwDpXgEK/SXwTAq1hktfFnfAVMKgXwPZd Qr1Q== X-Forwarded-Encrypted: i=1; AHgh+RrC+CE3ytx2WUA2/JTa/2icEm0FH5wekshi/99MBEpDPdiAGy6Ah8WFHGcPkm6jjMB/1YuF3NCBSQ+hh9s=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+wkhyubWQkEAH3/QxX7O0weJ2SoTAoQczYEVNJAVYqyAf3eis flKalKYnjm7urVmCuuTcl6jXmOmG0MERN+08bEeBFwO79fP82KfgmTRB X-Gm-Gg: AfdE7cntp4xHyIRILlBxJ8GawgAOpNkERe8QgSTFr8PoXhHKsF9bP0SHUkOM7oxrdIl efkTsMTPa7xZ36Gk6iG4tI+/3ZrbxFqwXCWsIpNCXXjz1aLdzvxFOekaMKbCO4YnGOgx08iaAsT y7VJznaAYgg1n7oNb5r+IyYb9ICf201WpNFvnb+mwdiyr4Rmq8zQYOlwCTwTZYRzLWjGJRliaAx TeWFmIm/A+X9tXEG7BNcQ6x5f38qsD559xD5iNA8K09Pj7CtsDO8zhKmxq5l/CALNbcY7x7u+56 FA8w4ryjtmp68MKmnTmR66jaMLjOazkGaphlqmokzEE4mwaEqzdeJ23KMonNsk6RsFkZSGVvIhq 7FSl61RojyLpsdx3XIz8yXdVkKetTJIZQde4ASKbX7lh4EkMOVj9g8oM2mRlXa48LwjsxrgnzBL 4IFsx0JiAvBeb7M70CLvl17iKUc18= X-Received: by 2002:a05:600c:46ca:b0:493:e460:1f6 with SMTP id 5b1f17b1804b1-4954a396371mr74968085e9.0.1784381922953; Sat, 18 Jul 2026 06:38:42 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:42 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: Biju Das , Wolfram Sang , linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das , Conor Dooley Subject: [PATCH v21 01/12] dt-bindings: mmc: renesas,sdhi: Document RZ/G3L (r9a08g046) SoC Date: Sat, 18 Jul 2026 14:38:21 +0100 Message-ID: <20260718133838.152905-2-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das Document the RZ/G3L (r9a08g046) SDHI controller. The RZ/G3L SDHI controller is similar to RZ/G2L but has five clocks (core, clkh, cd, aclkm, aclks) and three resets (rst, axim, axis), so update the clocks/clock-names maximum to 5 and resets/reset-names maximum to 3. It has an internal divider for all modes except HS400, and a 2048-bit divider compared to 512 on others. Acked-by: Conor Dooley Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * No change. v18->v19: * Updated commit description * Updated clock and reset description with AXI master and AXI slave * Added else condition for reset and reset-names. * Renamed aclk->aclkm and reordered the axi clocks similar to resets. * Retained the tag as the changes are trivial. v17->v18: * No change. v1->v17: * Collected tag. --- .../devicetree/bindings/mmc/renesas,sdhi.yaml | 108 +++++++++++++----- 1 file changed, 81 insertions(+), 27 deletions(-) diff --git a/Documentation/devicetree/bindings/mmc/renesas,sdhi.yaml b/Docu= mentation/devicetree/bindings/mmc/renesas,sdhi.yaml index 4d66966ce290..6d229a41a4b5 100644 --- a/Documentation/devicetree/bindings/mmc/renesas,sdhi.yaml +++ b/Documentation/devicetree/bindings/mmc/renesas,sdhi.yaml @@ -18,6 +18,7 @@ properties: - renesas,sdhi-r7s9210 # SH-Mobile AG5 - renesas,sdhi-r8a73a4 # R-Mobile APE6 - renesas,sdhi-r8a7740 # R-Mobile A1 + - renesas,sdhi-r9a08g046 # RZ/G3L - renesas,sdhi-r9a09g057 # RZ/V2H(P) - renesas,sdhi-sh73a0 # R-Mobile APE6 - items: @@ -86,11 +87,11 @@ properties: =20 clocks: minItems: 1 - maxItems: 4 + maxItems: 5 =20 clock-names: minItems: 1 - maxItems: 4 + maxItems: 5 =20 dmas: minItems: 4 @@ -116,7 +117,12 @@ properties: maxItems: 1 =20 resets: - maxItems: 1 + minItems: 1 + maxItems: 3 + + reset-names: + minItems: 1 + maxItems: 3 =20 pinctrl-0: minItems: 1 @@ -155,60 +161,106 @@ allOf: properties: compatible: contains: - enum: - - renesas,sdhi-r9a09g057 - - renesas,rzg2l-sdhi + const: renesas,sdhi-r9a08g046 then: properties: clocks: items: - description: IMCLK, SDHI channel main clock1. - description: CLK_HS, SDHI channel High speed clock which o= perates - 4 times that of SDHI channel main clock1. + 2 times that of SDHI channel main clock1. - description: IMCLK2, SDHI channel main clock2. When this c= lock is turned off, external SD card detection cannot= be detected. - - description: ACLK, SDHI channel bus clock. + - description: IACLKM, SDHI channel AXI master bus clock. + - description: IACLKS, SDHI channel AXI slave bus clock. clock-names: items: - const: core - const: clkh - const: cd - - const: aclk + - const: aclkm + - const: aclks + resets: + items: + - description: rst, Core reset. + - description: axim, SDHI channel AXI master bus reset. + - description: axis, SDHI channel AXI slave bus reset. + reset-names: + items: + - const: rst + - const: axim + - const: axis required: - clock-names - resets + - reset-names else: + properties: + resets: + maxItems: 1 + reset-names: + maxItems: 1 if: properties: compatible: contains: enum: - - renesas,rcar-gen2-sdhi - - renesas,rcar-gen3-sdhi - - renesas,rcar-gen4-sdhi + - renesas,sdhi-r9a09g057 + - renesas,rzg2l-sdhi then: properties: clocks: - minItems: 1 - maxItems: 3 - clock-names: - minItems: 1 - uniqueItems: true items: - - const: core - - enum: [ clkh, cd ] - - const: cd - else: - properties: - clocks: - minItems: 1 - maxItems: 2 + - description: IMCLK, SDHI channel main clock1. + - description: CLK_HS, SDHI channel High speed clock which= operates + 4 times that of SDHI channel main clock1. + - description: IMCLK2, SDHI channel main clock2. When this= clock is + turned off, external SD card detection cann= ot be + detected. + - description: ACLK, SDHI channel bus clock. clock-names: - minItems: 1 items: - const: core + - const: clkh - const: cd + - const: aclk + resets: + maxItems: 1 + required: + - clock-names + - resets + else: + if: + properties: + compatible: + contains: + enum: + - renesas,rcar-gen2-sdhi + - renesas,rcar-gen3-sdhi + - renesas,rcar-gen4-sdhi + then: + properties: + clocks: + minItems: 1 + maxItems: 3 + clock-names: + minItems: 1 + uniqueItems: true + items: + - const: core + - enum: [ clkh, cd ] + - const: cd + else: + properties: + clocks: + minItems: 1 + maxItems: 2 + clock-names: + minItems: 1 + items: + - const: core + - const: cd =20 - if: properties: @@ -247,7 +299,9 @@ allOf: properties: compatible: contains: - const: renesas,sdhi-r9a09g057 + enum: + - renesas,sdhi-r9a08g046 + - renesas,sdhi-r9a09g057 then: properties: vqmmc-regulator: --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 ACACE38B124 for ; Sat, 18 Jul 2026 13:38:45 +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=1784381927; cv=none; b=OHu1VYcZr0r1vCWX1b50Ee1bIJOG73pJOn87lINAJULLLAzcDbGO0veRBXOpyxWeIIzSC6tFsDmsUW/cPFKSwb3lLt3p6/apNFOmWtyubNV4a60qh6qC4tqLXavNqgz6F/7yEwPdCFgvvzRMAgGxSugFvHBs1aefOoUhWNFHszg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381927; c=relaxed/simple; bh=J1/u34GM5LC7wA3GpljbTU/xfSADH1ECgFbCs2Kc3nc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SvA4zkGOrQ3mUP1o+/zI1i0wvBLVDCdk4TW80G/oLkNENDHtxwc7h0fotZExp0gyRiT2KN/Rmj5T4YWT9SYZrU5e/mVuMLdwMflt3SaaCQPDyfFUBIaHwrU8cPaKK3V7iUJE3SpfuLVmmfW0XZdWWj2yVKn+Nc8VaEqYr7QKzUc= 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=d71NKa9R; 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="d71NKa9R" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4921eed3fa2so67984805e9.0 for ; Sat, 18 Jul 2026 06:38:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381924; x=1784986724; 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:content-type; bh=tlw78nAgqwC5/DawVPOfXhXYF3n7wrSGdlFRZqXr7Bw=; b=d71NKa9RvbpSjKkh0l1miiGYyYxiuNnfkveUFKb5bfLw8yoKShgejV0LcvYE48m0sI /9ozP+gTbvMGkYOuVi8/AqZnsMKrmAnVrluRW8JNgCQcxTEtjwHfcNsCmjRxOgqR6kba Uy9/Dwo2ygQ38s6KxZtPGtGZwOiHmgZpwrhEg7OW0apQhQSj0PEw0dUKJ0kLeGyCIjEZ tmLvEC36shIwMPCDE0QxkA5hTacA371YCCSg3oUY4nWCmMsuS1NVrPdLwA9CN3u6wCHe PS1y55VldDoR9Cahidu9BcIPuOLR4JRdKzSxkdqvB5OjYyoPuqSxiUnht5SiuHnBjr1q uiGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381924; x=1784986724; 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:content-type; bh=tlw78nAgqwC5/DawVPOfXhXYF3n7wrSGdlFRZqXr7Bw=; b=R66iDbSzWWig5pwQYaEMoNGU4RIY9/eGC0So1im3y9o73LXwKe2VVOpsWSypst1YQO /WkoDYvkyRpS5z7We+AXFj9NT31DrQdhY2gWmZXuE8PVn9MIRpSHOBsLRnxjOojadRgj tsPxOzbXMJVoL6PwvuS1CjHy43B5cOJ1LuJ+JBAdNhWyQ3evGx+F3Y2XmbZkg4KxIJF5 DH4Ruejwt3yfjJjLVLjPsIHZoZtxaYFYl1UVqBE9ASPBxfF/GKAYS0IXgeqnazQgJGD8 y8ht5GeqILMDGeXDI39y9xzUNH5Zlbb6BPDYFmxkHGbQfRFvv822Q1iWM+1ceihnwadf zoMA== X-Forwarded-Encrypted: i=1; AHgh+Rpw43NDpB/RuaWnqFm6f6ZfTm/Au/xKSXyqzrqz253nb6LNlizZYJHkjYtvfMD1Do2Kkp7/0zcKH7PS4A0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyw1lT2XwzhyfUUR10AxGsrS/T98FYZu/Q/jgfkau5JZtMfJ7VF rt64BFbX9N1ms6XJ0GKp7io6ns/a4seRAwo5NIuqq2V6RSP11GrYgykl X-Gm-Gg: AfdE7cl79rA9q+jvpxsAUA3mKjLq6nFLiY3pbcU163I0VN8f0wQqrlmCvAXzbBb/acl Eqa9QziAhcTOnyDygTFoSCaV5fE1/rjFnjxLL9frjQ4CY5gtYLWvXbU9X5YTKRFFU2MWkT8sH8w NRrcIlifsTeWVFCOK/mMgW3N/fR4ljrHqGzIYkPHm3OdoUp3RM4rTukBNvEdtPFVJHNMYwwMtC1 amg0uOVYtecnt6dgFv+n9Qqtbg5T6txxVNbwadJORMK43fMz/EFRrRPkvGWKgLfE7XXE+GlL2Re mc+0oiGd1xVyN6M0eTSaDH0uDwSUKHuQWxo18ZIfPryzuXhHSTBXHkKwAGdrrrKSpqGeHjTwfX2 Fbaw6Z5sYQocbwpjjozyQo7ZFutgpc5ylvAkuzbrfYxdWJPyFa24OotNNHHUNAWgQqZF9TbywVi tsbxosb9O+bg6w+O4UQRrnrG8yfY8= X-Received: by 2002:a05:600c:c0c3:10b0:493:72d3:4a81 with SMTP id 5b1f17b1804b1-4954a3dc87bmr57740375e9.16.1784381923759; Sat, 18 Jul 2026 06:38:43 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:43 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 02/12] mmc: renesas_sdhi: Clean up whitespace and add OF table sentinels Date: Sat, 18 Jul 2026 14:38:22 +0100 Message-ID: <20260718133838.152905-3-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das Clean up coding style inconsistencies across the Renesas SDHI host driver files. Remove redundant internal spacing in the struct definitions and static initializers to enforce a single space separator or uniform tabs, aligning the code with standard kernel formatting guidelines. While at it, add a "Sentinel." comment block to the empty terminating entries of the Open Firmware (OF) device matching tables to improve code readability and explicitly mark the table boundaries. Reviewed-by: Wolfram Sang Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * No change. v18->v19: * Updated commit description. v17->v18: * Merged patch#4 and #5 * Updated commit description * Annotate the empty sentinel entries in the OF match tables with a "Sentinel." comment for clarity. * Retained the tag as it is trivial cleanups. v1->v17: * No change. --- drivers/mmc/host/renesas_sdhi.h | 2 +- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 6 +++--- drivers/mmc/host/renesas_sdhi_sys_dmac.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index afc36a407c2c..09bf9b24a8c3 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -25,7 +25,7 @@ struct renesas_sdhi_scc { =20 struct renesas_sdhi_of_data { unsigned long tmio_flags; - u32 tmio_ocr_mask; + u32 tmio_ocr_mask; unsigned long capabilities; unsigned long capabilities2; enum dma_slave_buswidth dma_buswidth; diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 0c3967f758c2..b3f4a5f8dec0 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -271,8 +271,8 @@ static const struct renesas_sdhi_of_data_with_quirks of= _rcar_gen3_nohs400_compat }; =20 static const struct renesas_sdhi_of_data_with_quirks of_rza2_compatible = =3D { - .of_data =3D &of_data_rza2, - .quirks =3D &sdhi_quirks_fixed_addr, + .of_data =3D &of_data_rza2, + .quirks =3D &sdhi_quirks_fixed_addr, }; =20 static const struct of_device_id renesas_sdhi_internal_dmac_of_match[] =3D= { @@ -293,7 +293,7 @@ static const struct of_device_id renesas_sdhi_internal_= dmac_of_match[] =3D { { .compatible =3D "renesas,rzg2l-sdhi", .data =3D &of_rzg2l_compatible, }, { .compatible =3D "renesas,rcar-gen3-sdhi", .data =3D &of_rcar_gen3_compa= tible, }, { .compatible =3D "renesas,rcar-gen4-sdhi", .data =3D &of_rcar_gen3_compa= tible, }, - {}, + { /* Sentinel. */ } }; MODULE_DEVICE_TABLE(of, renesas_sdhi_internal_dmac_of_match); =20 diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/re= nesas_sdhi_sys_dmac.c index 426308b73b49..7ae488e5c1e0 100644 --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c @@ -27,7 +27,7 @@ #define TMIO_MMC_MIN_DMA_LEN 8 =20 static const struct renesas_sdhi_of_data of_default_cfg =3D { - .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT, + .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT, }; =20 static const struct renesas_sdhi_of_data of_rz_compatible =3D { @@ -89,7 +89,7 @@ static const struct of_device_id renesas_sdhi_sys_dmac_of= _match[] =3D { { .compatible =3D "renesas,rcar-gen1-sdhi", .data =3D &of_rcar_gen1_compa= tible, }, { .compatible =3D "renesas,rcar-gen2-sdhi", .data =3D &of_rcar_gen2_compa= tible, }, { .compatible =3D "renesas,sdhi-shmobile" }, - {}, + { /* Sentinel. */ } }; MODULE_DEVICE_TABLE(of, renesas_sdhi_sys_dmac_of_match); =20 --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 9A5EE38D017 for ; Sat, 18 Jul 2026 13:38: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=1784381928; cv=none; b=NogREpOWjlP4O6ci/dCNix8oB5etM4jjYXC4I1e8wJ2kXEijkhxDX04lkTrSOXaDLq2e1lLy259AG1l/CsmsLhC22VOPryuyaDcA/5oScQr8D02srlzss6ZNx+EhUcsgXNVpoNH/N5cRhNsmA+fC8iLwlW5+CfcD2UpryLyzBJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381928; c=relaxed/simple; bh=/58s66Hw+RSYvuhPeQldbz0lE8tWSsAcLKXC388SKLc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JI8lW5OLIEDVdfhYGVqgEFIAEckc+O1BIt1SwfWDxXXgwghsbph02b3+WoOrBFc+CMTnHzhxoPtx4njWCpUAinIiH50qlC1Ie24OG1gsF9l0jW6Euopi0RA30yG4zy5bkypJAVsnbwyLZV/JLNLKbx4k8orLUAVb981K/+noWYU= 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=NqfBzWpb; 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="NqfBzWpb" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-49546c690ffso16045995e9.2 for ; Sat, 18 Jul 2026 06:38:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381925; x=1784986725; 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:content-type; bh=P1mtKz0ZutawesIcyPf54afeHGZzxu1mW/RFQ1Nt5ko=; b=NqfBzWpbhDK+qlKpTqlgtLoa9cDqNnsp0JPKXOFPOohaofr/OlMXj/XdLGUVDQ0xWd AuoBUfP6cK8tEbPT4PYhoqBb58ihWTcUoHzlSo3A232/jbUcbkGA/AKNM9slKVKwZIqJ F3tUhUh34oXBniGG8VhYk9v08b+O5EMAxxgegkPld+5IjTHCnVBHgri+93N+QXt5R5iY XcERy3bKGzfKAZedDyazn2sv5V8uY2FDIM2G1hizt1fSJg2nWpMbWWU4WxNDl7qDTV47 xdSX5fmtsn6SH8YnzP9+m4IV2mzBh+PvHlHf+z8bjHJEsrVq8WDAF+SnlGpkzQFhQ2/a QgUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381925; x=1784986725; 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:content-type; bh=P1mtKz0ZutawesIcyPf54afeHGZzxu1mW/RFQ1Nt5ko=; b=MitZ18iHVWn8lf1jCSqGP3WseKsr4tQ7v4cMkhn+vZmqbmoEQHUh7p6kXG/uEpkHGk NtwKWRuwUz1zXIOoYHWYLjU49jq2Kvm21+cVVgVeYgtUu3qKS/EEb5/KfSnbMc0rC5Ej doS5eTj7v8kbjU5FcUfqPm87bv0znRdRBG8TDi55EXP+B/MbXv+tsNqZ+Mk0evsKCN3K rE8ypJ7UFdWooqdnFsOy5aLNxFf4cGin/hxobtPmCnJfr5sKpyPulk6nh8jnLElacSzJ +Efb+MGyciuaNZIFGNnrgL6bT4p4fQp7zLZo8A75Mc/qAFh660vneucxGb6egZIZ+b8t aezA== X-Forwarded-Encrypted: i=1; AHgh+Rptw8zRolAsUkHFr/JKnJw230oUD/X383Z3ZoraN5UiKWWld7fQrjohpK3/jxvhk6Lto4BhAMd3aFvMEY0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy80Nn9FPR+213eWuW2kT5VYEFOa4cM8Q5OMLcjr9AkxhJ6hCKB /otoYrnTkxEn1vgHHJUVRSBk3ZK9ygMoIeHhBiNa1xNODK7coLX8PbiH1CLNzLrw X-Gm-Gg: AfdE7cmODfizDJLza7YQdiiCrTNSJmiCeHHfwsYDpPtGDg7QiIksmrxC3ohwKP124LM Adgr9fKD7ENx94YT9AjCtIo9c/uAM7HS/2j+DnujtL1L1IR10r3wALYRBMAFEv8PI7fe0saEn9r 7cxz/62G1vCyQtyz0kOE/U34bpE4MCS2KnWg6ORcW3JWL7pNkTBpwJ/m5AbTL9iiKZXVNdUKjbg PDwghjboTbkkbY14acGwWggdzvUs0LoIJO7xRmFuIRFkcRQN3YUf4CQCc9NZ4j74GtvAK2clmkK Tre9hcf0Ex3+sn2aF5pUNuQaS1YkcDOOYN7pXcAdyb6kOxZ8qdoXhbu7U+3FDm8ge9b3O8TK2MR SiuW1S/KwMqGjDevm2ZYVqILtUQiL7ZY6RC9uha6lM0PtEorVcNRbl3GW/SUdbeASqW10dJxoZf 8vltL0jWIuaGLUJnJmk2f67tdt6Z4= X-Received: by 2002:a05:600c:1f8e:b0:493:f639:9b2f with SMTP id 5b1f17b1804b1-4954a513f80mr75248675e9.39.1784381924521; Sat, 18 Jul 2026 06:38:44 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:44 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 03/12] mmc: renesas_sdhi: Add clk_mask field to support flexible clock divider widths Date: Sat, 18 Jul 2026 14:38:23 +0100 Message-ID: <20260718133838.152905-4-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The clock divider on the RZ/G3L SoC features an 11-bit width, requiring a wider clock mask (0x200000200) in renesas_sdhi_set_clock() than the historically hardcoded 32-bit value (0x80000080). To accommodate SoC variants with wider clock divider masks, expand the internal clock control variables (clk and clock) from u32 to u64. Introduce a clk_mask field to both struct renesas_sdhi_of_data and struct tmio_mmc_data to allow platform configuration data to supply SoC-specific mask properties. Update renesas_sdhi_set_clock() to read the dynamic mask from platform data. During the probe phase, assign a default mask fallback of SDHI_CLK_MASK_DEFAULT (0x80000080) if no specific mask is specified, ensuring backward compatibility with existing hardware variants. Finally, explicitly populate clk_mask with the default value across all current internal and system DMAC configuration profiles, in preparation for the upcoming RZ/G3L clock customization. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * Replaced the check mmd->clk_mask with mmc_data->clk_mask and moved the code after assignment of variable mmd, this ensures assigning the default values for non-DT platforms and DT platforms with no device data. v18->v19: * Fixed the clk_mask for non-DT platforms. v18: * New patch dropping struct renesas_sdhi_hw_info instead using renesas_sdhi_of_data and tmio_mmc_data. --- drivers/mmc/host/renesas_sdhi.h | 2 ++ drivers/mmc/host/renesas_sdhi_core.c | 8 ++++++-- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 +++ drivers/mmc/host/renesas_sdhi_sys_dmac.c | 4 ++++ include/linux/platform_data/tmio.h | 1 + 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index 09bf9b24a8c3..f926a36f213c 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -22,6 +22,7 @@ struct renesas_sdhi_scc { }; =20 #define SDHI_FLAG_NEED_CLKH_FALLBACK BIT(0) +#define SDHI_CLK_MASK_DEFAULT 0x80000080 =20 struct renesas_sdhi_of_data { unsigned long tmio_flags; @@ -37,6 +38,7 @@ struct renesas_sdhi_of_data { unsigned int max_blk_count; unsigned short max_segs; unsigned long sdhi_flags; + u64 clk_mask; }; =20 #define SDHI_CALIB_TABLE_MAX 32 diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index f9ec78d699f4..604d886e483c 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -194,7 +194,7 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host= *host, unsigned int new_clock) { unsigned int clk_margin; - u32 clk =3D 0, clock; + u64 clk =3D 0, clock; =20 sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN & sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); @@ -213,7 +213,7 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host= *host, * provided for actual_clock in renesas_sdhi_clk_update(). */ clk_margin =3D new_clock >> 10; - for (clk =3D 0x80000080; new_clock + clk_margin >=3D (clock << 1); clk >>= =3D 1) + for (clk =3D host->pdata->clk_mask; new_clock + clk_margin >=3D (clock <<= 1); clk >>=3D 1) clock <<=3D 1; =20 /* 1/1 clock is option */ @@ -1136,6 +1136,7 @@ int renesas_sdhi_probe(struct platform_device *pdev, mmc_data->dma_rx_offset =3D of_data->dma_rx_offset; mmc_data->max_blk_count =3D of_data->max_blk_count; mmc_data->max_segs =3D of_data->max_segs; + mmc_data->clk_mask =3D of_data->clk_mask; dma_priv->dma_buswidth =3D of_data->dma_buswidth; host->bus_shift =3D of_data->bus_shift; /* Fallback for old DTs */ @@ -1178,6 +1179,9 @@ int renesas_sdhi_probe(struct platform_device *pdev, if (mmd) *mmc_data =3D *mmd; =20 + if (!mmc_data->clk_mask) + mmc_data->clk_mask =3D SDHI_CLK_MASK_DEFAULT; + dma_priv->filter =3D shdma_chan_filter; dma_priv->enable =3D renesas_sdhi_enable_dma; =20 diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index b3f4a5f8dec0..c6db0418de15 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -101,6 +101,7 @@ static const struct renesas_sdhi_of_data of_data_rza2 = =3D { /* DMAC can handle 32bit blk count but only 1 segment */ .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .max_segs =3D 1, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3 =3D { @@ -118,6 +119,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3 =3D { .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .max_segs =3D 1, .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3_no_sdh_fallback= =3D { @@ -134,6 +136,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3_no_sdh_fallback =3D { /* DMAC can handle 32bit blk count but only 1 segment */ .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .max_segs =3D 1, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const u8 r8a7796_es13_calib_table[2][SDHI_CALIB_TABLE_MAX] =3D { diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/re= nesas_sdhi_sys_dmac.c index 7ae488e5c1e0..fcd2edfa69db 100644 --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c @@ -28,6 +28,7 @@ =20 static const struct renesas_sdhi_of_data of_default_cfg =3D { .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_rz_compatible =3D { @@ -36,6 +37,7 @@ static const struct renesas_sdhi_of_data of_rz_compatible= =3D { .tmio_ocr_mask =3D MMC_VDD_32_33, .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_WAIT_WHILE_BUSY, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_rcar_gen1_compatible =3D { @@ -43,6 +45,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen1_com= patible =3D { .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_WAIT_WHILE_BUSY, .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 /* Definitions for sampling clocks */ @@ -70,6 +73,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen2_com= patible =3D { .taps =3D rcar_gen2_scc_taps, .taps_num =3D ARRAY_SIZE(rcar_gen2_scc_taps), .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, }; =20 static const struct of_device_id renesas_sdhi_sys_dmac_of_match[] =3D { diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 426291713b83..76056d49f5e0 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -61,5 +61,6 @@ struct tmio_mmc_data { dma_addr_t dma_rx_offset; unsigned int max_blk_count; unsigned short max_segs; + u64 clk_mask; }; #endif --=20 2.43.0 From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 72ADF38D6B8 for ; Sat, 18 Jul 2026 13:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381930; cv=none; b=YwqddvM6XkYQORZeB3c6LB0B+ygCONYttD+4zLY7pmMA7OisPJ6hBXNXBabfLB8MC5HoPWZYB0/RZAFkRfVq+7HXxpF+yO9FJum+suXCc+WW+hGfqFreQaEaNAa0Fpg2btuGN417DvE+bE/h7PRnBLGfqY/gcMY3rUgt52jezjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381930; c=relaxed/simple; bh=4+mFIeMiqCuZludRelZZnuOQIM+D8LmiNGTiGd2GEpo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VlNH2gIFsLacBngSv63gmWBNTU7EP/+CrvxMDp+IvvVtttFnWsUesSKLsxMmnjf6L5fwRjEGtZqPZRGLfuaPcUBOPSYopWdfTek206euP1dpnG+0UE/hqB13DHD1NcJ+blBuJOUesRiIqn8+zd4ASyJjau8KDMAtYacjn1tmbo8= 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=qUv7SRKj; arc=none smtp.client-ip=209.85.128.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="qUv7SRKj" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-49554ebb87dso1862685e9.3 for ; Sat, 18 Jul 2026 06:38:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381925; x=1784986725; 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:content-type; bh=0VtCc6/aAHa/+DgyKH7JqZ+J4QTbJBiTSeGPH7G5Ylo=; b=qUv7SRKj9cTW4dFAuFSxmK3a3uydDz0Kmsdu2stnwFoZrNUNiPpB1kW2VyzX5Hd3Xo uLcyEYqtwcUZtG4m3CxvxAtbmgSfcqJfVQ98pCT4rc1CDnO5I5xieJS/ostdxiE7rdP+ 4lTbn5IbMCpSyPqfQagFPhx/4l9u7qLeia739t2DupnvTNQIk+JIoj3gJ3PmxvGAlAdR esU5xSbl4EY0Bafk43l2e1I1EKi52aCp8iJPsmZJ59s8pBM+tWp2ENTgbvkd0/eEzcT5 Xz6hqk5FrDn4ASijAnowHPbzUS4k3phF2zlzldOTRqhBvuNoZqbNHAcXwuutd2sWBSNq CF+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381925; x=1784986725; 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:content-type; bh=0VtCc6/aAHa/+DgyKH7JqZ+J4QTbJBiTSeGPH7G5Ylo=; b=d3fzocEI75J2ADLJKir4YUDzv8gi+6Jup2KX5rI+XB/Yn8rlunU6jYJ35eC4SAbTbp Ic6DVsGWK8iILB+NcwvxzbW2lC1DEylnnIrpcFelas3zLFRDAORX3ygNMFg/OrIdgvD4 tDlV7xSG2vGA5ayBU10ldmIlhAPQl3lKb4nqM3f6PkWJq8m/gs1vv2RXmGSqGETxKmX3 k2ggAWSAVSJynzvKoWoHj3/IS/KbqcKuYh4huTVXt17eoeko0rSEw3g4p1F5dIBWBi6O EsbEqf17HlBm5AUufkMvE49sQqOqTq9U3ouCs8q0JFhJd5McVnMMb/wlUScF+e0gv1Ne Czjg== X-Forwarded-Encrypted: i=1; AHgh+RoRPzZT3aUTEjEv4ToHi0Picfc0STc1uIK5FsT4iUfNECTm5w4w8UH/ZYtqP06KVk3cvG102qzYlFO3Xpo=@vger.kernel.org X-Gm-Message-State: AOJu0YxQZ5uvY5PLTkeFfgyrI5RDCX5DHl/XhlNKVXwEkXx7c56REoRv //aDREv+nxhvzVF2JEUtdMP1Cq9lY/gTQmJ1tr7pf4d4Oqi7dLGN1Pk7 X-Gm-Gg: AfdE7ck2GG3kEQ2//+VOUJR25aAg3qTP8dIX1xQLYqY+dbSgcqryRzpj4SBIzzB/dX6 XkXJJwEt9ze5h618lyqZPfTKmfX6M+0/5OVvO68woaYLhoKNIeFYflHlBa+Yv/nPs9KRynJK0fB ehxL6GbY3lGKEgxJSnOGL73n3K3urmEAolwfs6p2jCswOZePS4HtIKgjSFU6YtYq01v+IwUdEsx re2OFnx/JltROqFcSDTJ8HrqluzRM8oc/TXVqJDcQt7JuC0nPDe2UKSlxmAH8XIc5qaHpdSOZIC VYJ/aLd1uYdomls3wfAF4H8QMy0zV3U3IpO9Z3LrArRq3Q0dinrcNFqxe0AFWwu2ZF2j1b5kkzw cFIUOwtmRKYgxGP7EeBnb8Y/PCm/zhvnkrPzSdr9ahxw2VMM2sMVgfpE3jJIf5ubtfDl/0rD6JK PhRC8ULv9TGId8/syGleGsbrtdUVo= X-Received: by 2002:a05:600c:19cc:b0:493:cd3f:d051 with SMTP id 5b1f17b1804b1-4954a411404mr83367005e9.25.1784381925228; Sat, 18 Jul 2026 06:38:45 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:44 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 04/12] mmc: renesas_sdhi: Add max_divider field to support SoC-specific clock ranges Date: Sat, 18 Jul 2026 14:38:24 +0100 Message-ID: <20260718133838.152905-5-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The clock hardware on the RZ/G3L SoC supports a broader clock divider range extending beyond the historically hardcoded value of 512. This requires a flexible mechanism to pass SoC-specific divider boundaries down to the core clock management logic. Introduce a max_divider field to both struct renesas_sdhi_of_data and struct tmio_mmc_data. Replace the static 512 constants inside the core functions renesas_sdhi_clk_enable(), renesas_sdhi_clk_update(), and renesas_sdhi_set_clock() with the dynamically supplied field. To preserve backward compatibility with existing hardware variants, implement a probe-time fallback mechanism that defaults to SDHI_MAX_DIVIDER_DEFAULT (512) if no explicit constraint value is assigned by platform data. Finally, explicitly populate max_divider with the legacy default across all current internal and system DMAC configuration profiles, in preparation for the upcoming RZ/G3L extended divider support. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * Replaced the check mmd->max_divider with mmc_data->max_divider and moved the code after assignment of variable mmd, this ensures assigning the default values for non-DT platforms and DT platforms with no device data. v18->v19: * Fixed max-divider setting for non-DT platforms. * Replaced the magic number '9' with ilog2 function in renesas_sdhi_clk_enable(). v18: * New patch. --- drivers/mmc/host/renesas_sdhi.h | 2 ++ drivers/mmc/host/renesas_sdhi_core.c | 12 ++++++++---- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 +++ drivers/mmc/host/renesas_sdhi_sys_dmac.c | 4 ++++ include/linux/platform_data/tmio.h | 1 + 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index f926a36f213c..438b2a7afe76 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -23,6 +23,7 @@ struct renesas_sdhi_scc { =20 #define SDHI_FLAG_NEED_CLKH_FALLBACK BIT(0) #define SDHI_CLK_MASK_DEFAULT 0x80000080 +#define SDHI_MAX_DIVIDER_DEFAULT 512 =20 struct renesas_sdhi_of_data { unsigned long tmio_flags; @@ -39,6 +40,7 @@ struct renesas_sdhi_of_data { unsigned short max_segs; unsigned long sdhi_flags; u64 clk_mask; + unsigned int max_divider; }; =20 #define SDHI_CALIB_TABLE_MAX 32 diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 604d886e483c..d893a263e770 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -117,7 +117,7 @@ static int renesas_sdhi_clk_enable(struct tmio_mmc_host= *host) * Minimum frequency is the minimum input clock frequency * divided by our maximum divider. */ - mmc->f_min =3D max(clk_round_rate(priv->clk, 1) / 512, 1L); + mmc->f_min =3D max(clk_round_rate(priv->clk, 1) / host->pdata->max_divide= r, 1L); =20 /* enable 16bit data access on SDBUF as default */ renesas_sdhi_sdbuf_width(host, 16); @@ -156,7 +156,7 @@ static unsigned int renesas_sdhi_clk_update(struct tmio= _mmc_host *host, /* * We want the bus clock to be as close as possible to, but no * greater than, new_clock. As we can divide by 1 << i for - * any i in [0, 9] we want the input clock to be as close as + * any i in [0, {9,11}] we want the input clock to be as close as * possible, but no greater than, new_clock << i. * * Add an upper limit of 1/1024 rate higher to the clock rate to fix @@ -165,7 +165,7 @@ static unsigned int renesas_sdhi_clk_update(struct tmio= _mmc_host *host, * for 533.333333 MHz will selects a slower 400 MHz due to rounding * error (533333333 Hz / 4 * 4 =3D 533333332 Hz < 533333333 Hz)). */ - for (i =3D min(9, ilog2(UINT_MAX / new_clock)); i >=3D 0; i--) { + for (i =3D min(ilog2(host->pdata->max_divider), ilog2(UINT_MAX / new_cloc= k)); i >=3D 0; i--) { freq =3D clk_round_rate(ref_clk, new_clock << i); new_upper_limit =3D (new_clock << i) + ((new_clock << i) >> 10); if (freq > new_upper_limit) { @@ -205,7 +205,7 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host= *host, } =20 host->mmc->actual_clock =3D renesas_sdhi_clk_update(host, new_clock); - clock =3D host->mmc->actual_clock / 512; + clock =3D host->mmc->actual_clock / host->pdata->max_divider; =20 /* * Add a margin of 1/1024 rate higher to the clock rate in order @@ -1137,6 +1137,7 @@ int renesas_sdhi_probe(struct platform_device *pdev, mmc_data->max_blk_count =3D of_data->max_blk_count; mmc_data->max_segs =3D of_data->max_segs; mmc_data->clk_mask =3D of_data->clk_mask; + mmc_data->max_divider =3D of_data->max_divider; dma_priv->dma_buswidth =3D of_data->dma_buswidth; host->bus_shift =3D of_data->bus_shift; /* Fallback for old DTs */ @@ -1182,6 +1183,9 @@ int renesas_sdhi_probe(struct platform_device *pdev, if (!mmc_data->clk_mask) mmc_data->clk_mask =3D SDHI_CLK_MASK_DEFAULT; =20 + if (!mmc_data->max_divider) + mmc_data->max_divider =3D SDHI_MAX_DIVIDER_DEFAULT; + dma_priv->filter =3D shdma_chan_filter; dma_priv->enable =3D renesas_sdhi_enable_dma; =20 diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index c6db0418de15..2bf354331b2d 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -102,6 +102,7 @@ static const struct renesas_sdhi_of_data of_data_rza2 = =3D { .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .max_segs =3D 1, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3 =3D { @@ -120,6 +121,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3 =3D { .max_segs =3D 1, .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3_no_sdh_fallback= =3D { @@ -137,6 +139,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3_no_sdh_fallback =3D { .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .max_segs =3D 1, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const u8 r8a7796_es13_calib_table[2][SDHI_CALIB_TABLE_MAX] =3D { diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/re= nesas_sdhi_sys_dmac.c index fcd2edfa69db..bb66ff7de065 100644 --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c @@ -29,6 +29,7 @@ static const struct renesas_sdhi_of_data of_default_cfg =3D { .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_rz_compatible =3D { @@ -38,6 +39,7 @@ static const struct renesas_sdhi_of_data of_rz_compatible= =3D { .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_WAIT_WHILE_BUSY, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const struct renesas_sdhi_of_data of_rcar_gen1_compatible =3D { @@ -46,6 +48,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen1_com= patible =3D { MMC_CAP_WAIT_WHILE_BUSY, .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 /* Definitions for sampling clocks */ @@ -74,6 +77,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen2_com= patible =3D { .taps_num =3D ARRAY_SIZE(rcar_gen2_scc_taps), .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =20 static const struct of_device_id renesas_sdhi_sys_dmac_of_match[] =3D { diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 76056d49f5e0..27ea21c00419 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -62,5 +62,6 @@ struct tmio_mmc_data { unsigned int max_blk_count; unsigned short max_segs; u64 clk_mask; + unsigned int max_divider; }; #endif --=20 2.43.0 From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 965D038E12B for ; Sat, 18 Jul 2026 13:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381929; cv=none; b=TO+UiGvTH83CpdJ2jnjvQwA5r6wJOTZAmMt1Z//2EbPffIX1fl+TCnUze12qedAJvHj2AjhdEUice2jwahzOSlPYLNbTFgv1ZGvmi/9pTczm3/IIsWD7aW9Z95mC90NZkD4YMHipWAdmbdmP+pNkwv5rY6IFw1fK09k/ghoOybI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381929; c=relaxed/simple; bh=fes0AVYIDA0/SsWvj/07+N2C5Ll75WYuV1OSZCK94KA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L7IB8GiWIYI8cujyWDMh/IkHluzgcOw4wMAChl0iNE5SY7MQBhnmSY1BvZcVqoIi6dTY7xGAQ7Kt54Im5fNAAcnqZ5fHOd9dBDA78OVciFPvMKKpsWfaX1p94N/2kPXkXZ55gsYndT3Si/dubEh+KivRKO1Wn/Ndl3A2QZUbYgk= 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=jWdNAcYh; arc=none smtp.client-ip=209.85.128.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="jWdNAcYh" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-493c733f15aso75819505e9.0 for ; Sat, 18 Jul 2026 06:38:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381926; x=1784986726; 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:content-type; bh=JPE/82wb4qwuDCV8wuwNB3xLrog4AFWriczLUZKVt0Q=; b=jWdNAcYhGYZWZg63lOl/JA6LWoBLROPg4p/Hid/nJS9MZ1CsBkoEmcNX+qbTjk9OmH C94sZTQ68gsNPzy6QFSoiSxoGFwaQh58EDZs27kMPmvwI3+JZ+t/u22agvPTogzYa/Q0 hFxyBG7dOOQtvdaCLWusn2AVBxAmk3iwvSxiRMGBwpq6cfexwqoo5S0RA9+A7vQAZXpJ KDWLh1O/eKXFCPUQvDrQh272G5+j1SROUZlxf7wOEd4qwqa0vsIFH7aZW3c23J0IF8HR FoszNvPZR1K3O7b8R8F16qifwPJDI1BeMQgU9V9fWaak8BZkW+cN0fwGOS35a4HXsIDu JQnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381926; x=1784986726; 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:content-type; bh=JPE/82wb4qwuDCV8wuwNB3xLrog4AFWriczLUZKVt0Q=; b=UYJATDU8BvR71RZUPdtR1HXbmsfJ88KJGA+jyOc3BpwCzxLOkUL845lRd7SbbBHF9B qP2BnRg9tmi5j6YAdf6c0rBBFZbNwaUaKZ5YKWAf5bx+AJtv1hljmDw7AWwzeN7REPaN lTIvKw3/VZay4qAiEoAUrWdFBq2o8W7rR16fF33OfUSYK9DOrVsGlUT8lDR3EVF3fuEp oiDkjfV3WNKcwsC/aMyUjYwUoX8OLlVL3tGrYS/JhrWP0BmRMNecnuPZEiyS74IUS5nZ V+GZMazXFI9C7hBt1xjf3+KxuToF2fgmv2ZQrNrUSSGmL4kAs2dkGJy9zwd36ExJ8KOS WdLg== X-Forwarded-Encrypted: i=1; AHgh+RqioyKF45tuChN6fHPDsRK/fBN74jvYN3Q7uhYpCm/xaXB/Ca48w2Pg0AzNEaK7jVfWiTwkweHVGWe7978=@vger.kernel.org X-Gm-Message-State: AOJu0YzN7b0Ju//Rr8cTO/6U4457IgvX0B7Q3+e0BltdM11tFiLS2u/k IW+oZ8xn2KvrcUW2Jto/Nw2s7q+QSpf++KUgugv0vD9TOpgZm4CZWACA X-Gm-Gg: AfdE7cmVke1VglQ0eK0LCFiXB8rOX/6bkJu6/vXUKecyWjqAsNRbV2e63Bty/poLg7T 0CY8lUIU/eVr8vrKqUUugAJqTV7dZQzjonRhJtgvM8fiFzGCNJr+x3L/GlAVusgN/qYGU2u7APj HPC9aId8R26MeqbRgaTMZq2OUjfyXiUA5UWUq7gHQhvRt7QQ2Wms6dC/vWMJth590+EVWy7QQmh xIy/pm+y0zvc0RKeQR5UejyRxdKCzbz6CZV13n5loVEq3f1lInipKNhEwXB69w2bHJVqOQ+h0yk FDBfDNaDjptMBgZHHsMUVkzFa6zyFxrEvUag7pzP3+3uwEBfmsyMZPj60hpI6FauFcQUmebRbpS CE9eLXH0V3iW+mdI/JDZ2yyE73KVjHcVmE/tsyOsgTFEWJ0+rm/5c6Yesi7Xrv9oW5l8/FMlQj4 Y1GL0UxcO0DTQVuBhxoBvIXfNAEXI= X-Received: by 2002:a05:600c:3107:b0:493:d305:b8f3 with SMTP id 5b1f17b1804b1-4954a3d6462mr78543885e9.3.1784381925947; Sat, 18 Jul 2026 06:38:45 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:45 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 05/12] mmc: renesas_sdhi: Make clock divider mask configurable Date: Sat, 18 Jul 2026 14:38:25 +0100 Message-ID: <20260718133838.152905-6-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das Add a clk_div_mask field to struct renesas_sdhi_of_data and struct tmio_mmc_data so that each SoC variant can specify its own clock divider mask instead of always using the hardcoded CLK_CTL_DIV_MASK in renesas_sdhi_set_clock(). Default clk_div_mask to GENMASK(7, 0) in renesas_sdhi_probe() when unset, and explicitly set it to GENMASK(7, 0) for all existing of_data instances in the internal DMAC and sys DMAC drivers to preserve current behaviour. This is a preparatory change to allow RZ/G3L SoCs with a wider clock divider field to reuse the same clock-setting code. Signed-off-by: Biju Das --- v21: * New patch. --- drivers/mmc/host/renesas_sdhi.h | 1 + drivers/mmc/host/renesas_sdhi_core.c | 5 ++++- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 +++ drivers/mmc/host/renesas_sdhi_sys_dmac.c | 2 ++ include/linux/platform_data/tmio.h | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index 438b2a7afe76..db147af9068c 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -41,6 +41,7 @@ struct renesas_sdhi_of_data { unsigned long sdhi_flags; u64 clk_mask; unsigned int max_divider; + u16 clk_div_mask; }; =20 #define SDHI_CALIB_TABLE_MAX 32 diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index d893a263e770..44d9f5da0b4b 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -224,7 +224,7 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host= *host, clk &=3D ~0xff; } =20 - clock =3D clk & CLK_CTL_DIV_MASK; + clock =3D clk & host->pdata->clk_div_mask; if (clock !=3D CLK_CTL_DIV_MASK) host->mmc->actual_clock /=3D (1 << (ffs(clock) + 1)); =20 @@ -1186,6 +1186,9 @@ int renesas_sdhi_probe(struct platform_device *pdev, if (!mmc_data->max_divider) mmc_data->max_divider =3D SDHI_MAX_DIVIDER_DEFAULT; =20 + if (!mmc_data->clk_div_mask) + mmc_data->clk_div_mask =3D GENMASK(7, 0); + dma_priv->filter =3D shdma_chan_filter; dma_priv->enable =3D renesas_sdhi_enable_dma; =20 diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 2bf354331b2d..9bf7aa9bd867 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -103,6 +103,7 @@ static const struct renesas_sdhi_of_data of_data_rza2 = =3D { .max_segs =3D 1, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3 =3D { @@ -122,6 +123,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3 =3D { .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3_no_sdh_fallback= =3D { @@ -140,6 +142,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3_no_sdh_fallback =3D { .max_segs =3D 1, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), }; =20 static const u8 r8a7796_es13_calib_table[2][SDHI_CALIB_TABLE_MAX] =3D { diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/re= nesas_sdhi_sys_dmac.c index bb66ff7de065..12a1cf6e769d 100644 --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c @@ -40,6 +40,7 @@ static const struct renesas_sdhi_of_data of_rz_compatible= =3D { MMC_CAP_WAIT_WHILE_BUSY, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), }; =20 static const struct renesas_sdhi_of_data of_rcar_gen1_compatible =3D { @@ -49,6 +50,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen1_com= patible =3D { .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), }; =20 /* Definitions for sampling clocks */ diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 27ea21c00419..f684f4087a8f 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -63,5 +63,6 @@ struct tmio_mmc_data { unsigned short max_segs; u64 clk_mask; unsigned int max_divider; + u16 clk_div_mask; }; #endif --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 A13E138B149 for ; Sat, 18 Jul 2026 13:38:48 +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=1784381931; cv=none; b=K+irPNfR0AwS/RNAFoaA7u2kuZZf9iX7tVKfVBb8kiGdnnIUh6OX5qulVNBYUqDDWlAPgYhVCrF7/vrTbl0uC8XBSE4DfmoMs32zgI6WjuZjdJ8O/iI/7T+n3nVxAWK16VkAgdTAlM+Rh1JHbxK/7BJkl0I8Suu6ldf12L0br+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381931; c=relaxed/simple; bh=8xGHb0Ae9W5W3t5QiuHlPIojsE3cZMBpqwRnF4f+cQY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fwnkqbh1xaafCw8vvVmMb7jzKbJ+uR/JMxaQLNUy3azLl/+YcEPLvadycgPHIZSK9ErRW6b3NCpVHL/U5MvCOR/bPct/36nHX816eVvs9FSAYxboQCE8xXgHhG9oVo40nAATZ9occn3BbKZwWql5V3n9+IGdHt6lkHWhLiMXqwo= 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=jIxkkh3F; 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="jIxkkh3F" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4954f5e8020so3416595e9.2 for ; Sat, 18 Jul 2026 06:38:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381927; x=1784986727; 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:content-type; bh=a6un3uXbdKdPm708xmFzIZl4dMYgPdArKzNLAin2azs=; b=jIxkkh3FLNSjcwtnag1RPaau6H2cBvdJQK2C9B1F7N7+DhblNabmFpst8bEzmPLPou oW7SXBcUMjDUvGtv7KIWVvP81MdLDaU8YgbmBzQ6pYj6Hs/dG29BT4emvWeSWY2NpHKj XmGEKgTVAAYWmTNJf3P21qrah9MmFeVK/sCEtxj9vB759npMl5jhra8fsVSw+Hc5Tv4b sxjz9urtTBYJfxnEI0VPEPA0KqN8K1B0sMJ7TUgozrFvj36qvdhddtcdOx3VH0X8yyWX YTzzsTB3pWr0/vlGhnAgE/jeFoT62VM1gTrInTAC3M+u6tYNZI81V/8QQTh/4+APfOZz Upgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381927; x=1784986727; 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:content-type; bh=a6un3uXbdKdPm708xmFzIZl4dMYgPdArKzNLAin2azs=; b=QMPT1gdq2k56A9or74Fxac7UZT6QS0mlV8W1yxvuF1DRXRpftX0KpzRLEIlX5PmuUh afYbLACqwZ5+j+U7EWl0yvh+r0DdMu5VofxJkvYB6KNDLnCujAoJjU49pBXbPNhNHReO n+CBKrhr9SrexLsrg++voGOuvL51KRqDOTI15fwHZN4hC2PD3X4AMEIomXR20RVD1wUp pziLZtLaEo74K088JBUePIMeKN33cbKuBQyNnrUZpHlYyG72tXeFnt2J+zktjbfez2O3 YsY4XBAYbAQik0VbUcGd19J3rvI+dFUgi/hCg38bs2bts7fXlT/Q080ktTniYxGQBd43 O3cg== X-Forwarded-Encrypted: i=1; AHgh+RqR2NbkoqpMqpsxYjEawTLulVfmixp2LFJP08yhUo+vAPyqJ6Xc9+f0BIJInNQQyJt12m5/IM4pe5bxE7M=@vger.kernel.org X-Gm-Message-State: AOJu0YyR/UKw8pPErsAKKrXxRFvwFQEq88ozhdpIP7zjhldm6i5amuOI xv13+86sZNxLD7LspaytzwL4snIuTsk5881nK8LGMCzVZsytHJ8R2xzk X-Gm-Gg: AfdE7clplM09bAYf0ZmmKvPk3q9ls5q48RdcdHLGCkG1Q73Coda9vG16S6z7L8m3duD MzZTRGZYjjFWVWa9FNpf7flZVDUlY+JpnaVzkJnqrX3CyPHcF7xndpfpq8jMnmvHdfYL7w3u3ku wLAbJQioDaDuBy9GUkq8Wwss2r0OCeh7gz60/8Yf96gMOOl2zQSFzo8FqxS9gXRjzaYJX0vTeEr bIEgHe5o7XsZYeQhgftfDaxnCgV/hx+Sgfcqhojmkriwrvo5EC6KEQIUAvZxw7s8JZ+6xwxh3VN vk0HuKStuupcEu7q3Q7MLHAcUsODJ56vi27WMi8VskP2xVexxcZcixrYKjipcqtVI29MIAGhgrd LXwilAep2aHN6Ngm0VUF3eboiGkQngaxDiZv+AZleiOnmPcCFmrxNI8rvzuXrRC1A8gIuBOkcf5 OlZ928Z+8WXYaeyWWoMY6RpEPrjjNXFkaJnMMunQ== X-Received: by 2002:a7b:c383:0:b0:495:48d7:7eaf with SMTP id 5b1f17b1804b1-4954a40bbd3mr46953545e9.28.1784381926721; Sat, 18 Jul 2026 06:38:46 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:46 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 06/12] mmc: renesas_sdhi: Add tuning delay support for RZ/G2L Date: Sat, 18 Jul 2026 14:38:26 +0100 Message-ID: <20260718133838.152905-7-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das Some SoCs, starting with RZ/G2L, require a hardware adjustment delay to be written to SCC_TMPPORT2 when switching signal voltage during tuning. The register value differs by voltage: 0x1 for 1.8 V and 0x0 for 3.3 V. Introduce TMIO_MMC_TUNING_DELAY flag (bit 13) in tmio.h to identify controllers that need this behaviour. Add renesas_sdhi_set_hw_adjustment_delay(), which writes the appropriate value to SCC_TMPPORT2 when the flag is set, and call it from renesas_sdhi_start_signal_voltage_switch() after the regulator is configured. Additionally, reset SCC_TMPPORT2 to 0 at the start of renesas_sdhi_execute_tuning() when the flag is set and tap_num is 8. Introduce a dedicated of_data_rz_g2l descriptor carrying the new flag alongside RZ/G2L-specific capabilities, and wire of_rzg2l_compatible to it instead of the generic R-Car Gen3 descriptor. Signed-off-by: Biju Das --- v20->v21: * Added clk_div_mask to RZ/G2L of_data. v19->v20: * No change. v18->v19: * No change. v18: * New patch. --- drivers/mmc/host/renesas_sdhi_core.c | 86 +++++++++++-------- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 22 ++++- include/linux/platform_data/tmio.h | 3 + 3 files changed, 76 insertions(+), 35 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 44d9f5da0b4b..9c0062865866 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -256,40 +256,6 @@ static int renesas_sdhi_card_busy(struct mmc_host *mmc) TMIO_STAT_DAT0); } =20 -static int renesas_sdhi_start_signal_voltage_switch(struct mmc_host *mmc, - struct mmc_ios *ios) -{ - struct tmio_mmc_host *host =3D mmc_priv(mmc); - struct renesas_sdhi *priv =3D host_to_priv(host); - struct pinctrl_state *pin_state; - int ret; - - switch (ios->signal_voltage) { - case MMC_SIGNAL_VOLTAGE_330: - pin_state =3D priv->pins_default; - break; - case MMC_SIGNAL_VOLTAGE_180: - pin_state =3D priv->pins_uhs; - break; - default: - return -EINVAL; - } - - /* - * If anything is missing, assume signal voltage is fixed at - * 3.3V and succeed/fail accordingly. - */ - if (IS_ERR(priv->pinctrl) || IS_ERR(pin_state)) - return ios->signal_voltage =3D=3D - MMC_SIGNAL_VOLTAGE_330 ? 0 : -EINVAL; - - ret =3D mmc_regulator_set_vqmmc(host->mmc, ios); - if (ret < 0) - return ret; - - return pinctrl_select_state(priv->pinctrl, pin_state); -} - /* SCC registers */ #define SH_MOBILE_SDHI_SCC_DTCNTL 0x000 #define SH_MOBILE_SDHI_SCC_TAPSET 0x002 @@ -350,6 +316,55 @@ static inline void sd_scc_write32(struct tmio_mmc_host= *host, writel(val, priv->scc_ctl + (addr << host->bus_shift)); } =20 +static void renesas_sdhi_set_hw_adjustment_delay(struct tmio_mmc_host *hos= t) +{ + struct renesas_sdhi *priv =3D host_to_priv(host); + + if (!(host->pdata->flags & TMIO_MMC_TUNING_DELAY)) + return; + + if (host->mmc->ios.signal_voltage =3D=3D MMC_SIGNAL_VOLTAGE_330) + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0x0); + else + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0x1); +} + +static int renesas_sdhi_start_signal_voltage_switch(struct mmc_host *mmc, + struct mmc_ios *ios) +{ + struct tmio_mmc_host *host =3D mmc_priv(mmc); + struct renesas_sdhi *priv =3D host_to_priv(host); + struct pinctrl_state *pin_state; + int ret; + + switch (ios->signal_voltage) { + case MMC_SIGNAL_VOLTAGE_330: + pin_state =3D priv->pins_default; + break; + case MMC_SIGNAL_VOLTAGE_180: + pin_state =3D priv->pins_uhs; + break; + default: + return -EINVAL; + } + + /* + * If anything is missing, assume signal voltage is fixed at + * 3.3V and succeed/fail accordingly. + */ + if (IS_ERR(priv->pinctrl) || IS_ERR(pin_state)) + return ios->signal_voltage =3D=3D + MMC_SIGNAL_VOLTAGE_330 ? 0 : -EINVAL; + + ret =3D mmc_regulator_set_vqmmc(host->mmc, ios); + if (ret < 0) + return ret; + + renesas_sdhi_set_hw_adjustment_delay(host); + + return pinctrl_select_state(priv->pinctrl, pin_state); +} + static unsigned int renesas_sdhi_init_tuning(struct tmio_mmc_host *host) { struct renesas_sdhi *priv; @@ -709,6 +724,9 @@ static int renesas_sdhi_execute_tuning(struct mmc_host = *mmc, u32 opcode) if (!priv->tap_num) return 0; /* Tuning is not supported */ =20 + if ((host->pdata->flags & TMIO_MMC_TUNING_DELAY) && priv->tap_num =3D=3D = 8) + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0); + if (priv->tap_num * 2 >=3D sizeof(priv->taps) * BITS_PER_BYTE) { dev_err(&host->pdev->dev, "Too many taps, please update 'taps' in tmio_mmc_host!\n"); diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 9bf7aa9bd867..1799c6106102 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -145,6 +145,26 @@ static const struct renesas_sdhi_of_data of_data_rcar_= gen3_no_sdh_fallback =3D { .clk_div_mask =3D GENMASK(7, 0), }; =20 +static const struct renesas_sdhi_of_data of_data_rz_g2l =3D { + .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL | + TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2 | + TMIO_MMC_64BIT_DATA_PORT | TMIO_MMC_TUNING_DELAY, + .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | + MMC_CAP_CMD23 | MMC_CAP_WAIT_WHILE_BUSY, + .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT | MMC_CAP2_MERGE_CAPABLE, + .bus_shift =3D 2, + .scc_offset =3D 0x1000, + .taps =3D rcar_gen3_scc_taps, + .taps_num =3D ARRAY_SIZE(rcar_gen3_scc_taps), + /* DMAC can handle 32bit blk count but only 1 segment */ + .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, + .max_segs =3D 1, + .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, + .clk_mask =3D SDHI_CLK_MASK_DEFAULT, + .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .clk_div_mask =3D GENMASK(7, 0), +}; + static const u8 r8a7796_es13_calib_table[2][SDHI_CALIB_TABLE_MAX] =3D { { 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 15, 16, 16, 16, 16, 16, 16, 17, 18, 18, 19, 20, 21, 22, 23, 24, 25 }, @@ -266,7 +286,7 @@ static const struct renesas_sdhi_of_data_with_quirks of= _r8a77990_compatible =3D { }; =20 static const struct renesas_sdhi_of_data_with_quirks of_rzg2l_compatible = =3D { - .of_data =3D &of_data_rcar_gen3, + .of_data =3D &of_data_rz_g2l, .quirks =3D &sdhi_quirks_rzg2l, }; =20 diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index f684f4087a8f..77d3dc91c828 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -50,6 +50,9 @@ /* Some controllers have a 64-bit wide data port register */ #define TMIO_MMC_64BIT_DATA_PORT BIT(12) =20 +/* Some controllers have tuning delay */ +#define TMIO_MMC_TUNING_DELAY BIT(13) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 BAB953911AF for ; Sat, 18 Jul 2026 13:38:50 +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=1784381933; cv=none; b=UWCOna5R5TuxczCoph9ZcbjddRCJe/M92KV8UfDWeEfWMZzvcn5bgipSMXQz7BYlfc3W7tNXsdHRT36sFHAZ2F16cwoSNsfQB/VjT2BcZir2u7lq0a6OSbeWwe2lRwP+16lbsG4WIBOKIXxdLS01BbmCpYncK2zT2YVFbGdLrzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381933; c=relaxed/simple; bh=dYo9FKDRCB4K7n5y+rKmgO7EDTJp/lIMUaRHj8sTZRU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F6dnhxHRTm7d0LX1p8c2L57PLn/B58qZIAY/Rn/wkD+SMQZu5VUDfLxzdm2p48CBB7CZskxI7Qz1y03mqaunsGSiMCd+Fmr7QBJvv807iQNO7vks9U9HTdaKXjlsbWKjA04+sZ5PVEzqEldhvdaLvNy8rPh3rXMNNr1UCU2J3M8= 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=R7A0aRN1; 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="R7A0aRN1" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-47df6a5202bso5982378f8f.0 for ; Sat, 18 Jul 2026 06:38:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381929; x=1784986729; 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:content-type; bh=kHNZzuYPNrUsKIj/JY3ysvghN9YMlJCSYF0jtF0u5bY=; b=R7A0aRN1tx5KwMnPi0YsBnfewZUC7CHSCh8Oc+VpSQOVwRDa7aSO3rmpfubhP038Ne bvqHn3Bo5oVUxGD0oBIEhpavuBC64zQ4MB61tJEuC1RynHtvNtaIGoGMXmfWRWfaPPDD 3ChE8IvluS/qds4jBG1STgw74X2kZs+XN7tCEbZemlq3c2elNvTe4Bytwoc+LgnNGyHK 03eKtohLJQkgBxpcy+z0Kh89QJ8Hy3Yu13cWuQlBKIeZbPRabFnW5BY7D2bggMzrnK+h ByfHrDcc3x3Diei50JkPKcSvd00M1xTRCo1NndYYOf4ghhBPh6Ix7EKzWkPyZqZL/VBQ OmxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381929; x=1784986729; 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:content-type; bh=kHNZzuYPNrUsKIj/JY3ysvghN9YMlJCSYF0jtF0u5bY=; b=f3UDd7dBi70rmbXydxQw3IDCkB7Lu6ylDd1nw2kKe0WiN4wyvlE6j9RdzCq1AV0NtV mPXlBv2mvRTxIXFlLs/MKI3BofZOAS8pCQ+pDf/HrtQwDJDV6S9P3XvZpveeGvI9tZ4O U1N3IoQh1kPi7l1oXdfIMb6PYjFyRD5qMvcxRi+Erv2ze285H5GXpyRSF3ysYxdFj64N /CeQtHhpkl+prezpv3KNd7oyWLVhzJ5sEjwY9OrB2+TXQ6bXp6xZRl6qFHdUVB6MdC32 7hzKPRUnPlycxBQROJjeQKsYp4/SnBe0NCG5MUc56lhDGev/UF9Yrskhl4y2CEK1WESm 0VtA== X-Forwarded-Encrypted: i=1; AHgh+Rp8njC+3PWGXjNAOaoV+/kVf6X3oJduU8hS3hhgn6p/vLWXQm/BAFPjBjp50ZtBCLCo/pumqngKKsmaRHE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0YQxtxT6RSh8di4OPPE8fiAEye1xrRAOc1kibbfOyEDrPylS2 G7tQbWkjL41ihyjCQRG8mU/tN5MKQQqE5Rx2V/5udXKJUI+qd1xjVmwu X-Gm-Gg: AfdE7cmlvQOLRmT7Aflxkd4ZgzwReNDg36G9lbx7vo05LfssyBCacDE8v4E91OQ5hb5 dm5rVLKQSWcGPgGBSNak2MhnXt16CmGUZjPg/0+R+qm70/Aup4mqK1rQrrc8jzNpD0Syd73ZYVj +2JA4MpxjjT1bu1L/kCrgJxE6TiBLpQEYeU4ZWTym9SeR/FLKkt0H/qXp3pJQ+CdPtruAA9KVwb otnxrLLVrsMqWCaQW2WaJ/Y79nYLvgEYhAvJ6/8xJNW+GSSH64byfd70+sV6n6cTDR/oUM2lXxD /W9p2Va04bMywrLaGhoM8mneK2kW6tWOFmw4cmVvVhw3BBc2JXQU3BsI4DCpQAxDEuvfcGuo1kA LdRi7Z4MRlgZAaCupdSizJnfZ7CDRF2FbWQns8SIGAnEq1RdMLFCbMV7ST7inQXzuuiWY+wHQvP xyR4zzsqZMxsyDfGTu2ZUiA7o37aM= X-Received: by 2002:a05:600c:45d3:b0:495:503f:cf9a with SMTP id 5b1f17b1804b1-495503fd2a0mr29744115e9.9.1784381928604; Sat, 18 Jul 2026 06:38:48 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:47 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 07/12] mmc: renesas_sdhi: Add TMIO_MMC_INTERNAL_DIVIDER flag Date: Sat, 18 Jul 2026 14:38:27 +0100 Message-ID: <20260718133838.152905-8-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The RZ/G3L SoC integrates a fixed internal /2 clock divider that is active across all bus timing modes except for HS400. Introduce a new feature flag, TMIO_MMC_INTERNAL_DIVIDER (bit 14), inside the TMIO platform headers to mark hardware profiles carrying this integrated divider scheme. Modify renesas_sdhi_clk_update() to inspect this flag when setting and reporting clock rates. When the flag is set, the function bypasses the standard base division logic via a modified clkh_shift adjustment, then factors the physical /2 division step directly into the final calculated frequency value, provided the current bus timing is not MMC_TIMING_MMC_HS400. As no existing platforms configure this newly introduced bitmask flag, this patch delivers the underlying operational infrastructure with zero functional impact on existing supported chip variants. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * No change. v18->v19: * Updated commit description. * Dropped divider variable from struct renesas_sdhi. * Updated renesas_sdhi_clk_update() to return rate for HS400mode and nonHS400mode(uses 1/2 internal divider). v18: * New patch using flag. --- drivers/mmc/host/renesas_sdhi_core.c | 13 +++++++++++-- include/linux/platform_data/tmio.h | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 9c0062865866..456d52f5fbe9 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -184,10 +184,19 @@ static unsigned int renesas_sdhi_clk_update(struct tm= io_mmc_host *host, =20 clk_set_rate(ref_clk, best_freq); =20 - if (priv->clkh) + if (priv->clkh) { + if (host->pdata->flags & TMIO_MMC_INTERNAL_DIVIDER) + clkh_shift =3D 1; + clk_set_rate(priv->clk, best_freq >> clkh_shift); + } + + freq =3D clk_get_rate(priv->clk); + if ((host->pdata->flags & TMIO_MMC_INTERNAL_DIVIDER) && + host->mmc->ios.timing !=3D MMC_TIMING_MMC_HS400) + freq /=3D 2; =20 - return clk_get_rate(priv->clk); + return freq; } =20 static void renesas_sdhi_set_clock(struct tmio_mmc_host *host, diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 77d3dc91c828..09b3411a59c9 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -53,6 +53,9 @@ /* Some controllers have tuning delay */ #define TMIO_MMC_TUNING_DELAY BIT(13) =20 +/* Some controllers have internal divider */ +#define TMIO_MMC_INTERNAL_DIVIDER BIT(14) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 43A083914EB for ; Sat, 18 Jul 2026 13:38: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=1784381933; cv=none; b=SEtftIvqgh4yknI9m0UppzFOfFmPd/QzwH8WyilWsVhPiLfxnoqtBc3mJH/iMrUJIxdTPTYvQBJPy50nRF/lUD6oVFwAzqcXRsYCVw9mE26oRlP/MRbb0hnuMudcrDmCbV90THo9sAR7lgIj9o7t1zqxROyXVCznW+emO52GAM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381933; c=relaxed/simple; bh=rXfYovdzg21NGSMp8KtrTDJa2I8psWek+CBsRKmdLJg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iae9doSlXnnTVarPj5cl0/EjMI+d+Y0lCy637WUnDyEO1xmqbt6nucanHTRC+cWRHyxAFieW7dnLfVP7JslxgL2R0L34wo++b9VclXq/J1vd3zTjTkuWo02AZ8r03NNTjgki+xjxrcOP0hJH1ADXLk4RJ/GN2IVPvfMhLszzAgs= 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=cCEeK9FY; 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="cCEeK9FY" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4954df200ddso5812115e9.0 for ; Sat, 18 Jul 2026 06:38:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381929; x=1784986729; 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:content-type; bh=9cBwHO4qAougX6DtoREZzxzE017dKl/Ks+heWhVmI14=; b=cCEeK9FYIkA4Q/pcng71UpChl9+0G0lFT/eqKL+pRil9w/JGboRzv+8l3mdHZGTeRB z4WYjdvlAuru+xz8EYGHR1bDMW5ikqB9wRu0zpynh9dqFPBMcT6NUoCG9wdwJqNejLIy ibqyWVhKIUm4BKN+zmM9Llc8o9Qzubvp6KlCFizLZCzH8GEhQQ9kjdkmUj0/E5vI7szp CoTI70jbVe3jDWin6GcdfqPBm61307eCciIwXoA9A82uVfPcXpb2XXs1X3/Uj46D9yus 5t1ZQn7/Wsxy9ErO52rz5P8n7UTgFqNVs+s0OulQtUJn0h6bFhYdy4fTXggJFI2uGxyH mqGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381929; x=1784986729; 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:content-type; bh=9cBwHO4qAougX6DtoREZzxzE017dKl/Ks+heWhVmI14=; b=llu2M1IXwzKVYcbM++2nkKoPqNszs3wXp9pGIt9b4HYIsZAVJPDnMHt79n3rfjBZqC asF41BEq9z+XdoWAExXbQLVREtm8PQ+KA29S7sDjovbPCs86KkpvqqYe0f5vzJFVURxs dby/HFavA7/JtzQWvjDioO7DSUt09BJB/lniiUY6Uu71wbchxOw4YPc4x8CQxJEqF66O 2ewqLWHbtV9KMbePBlsBhH68OkPHNFM0WbOdOrH73GwQ6YKYS/tFH9FBYE+8lGwaXd5T 9nUW44p7QgigQyZVdYC30IAtlK3xkpoCf0LaGCTfCE0gWYWJtJahO056Swf2rMWm00s/ IBqg== X-Forwarded-Encrypted: i=1; AHgh+RqzB1W6yBlFBTJJKPLD9n3spSFs+oEpe7wwiRl+WBTm8H6ld19bNJoo1xmkFsxHout2w1+8LGx6xZ3hZe4=@vger.kernel.org X-Gm-Message-State: AOJu0Yyv0gvI2eZ8wlhG1ex7KjrQ685E7dSSCV4pLuwhQSJMe9E39O4n SdXfYLVAnwBkzzUz8neZZWI1GmVa8utYdK6d7ru6oawBDrMtSyOvKGu4 X-Gm-Gg: AfdE7clVvEzYqWIzQJCFIxf6wv8lz+a1Etpr8oHLwdX7AtGmpG1fFZGC5IxKKLk2nIj 85AbzAsayzLZRoj/nl4wOk1Lkf0l7Fq6V3SY5bKv25dK/DaKAq657mKz88XP1ZO0TBQHDpMJotD 7w3fHSQvoQ2RtSP6+ARlHDkQn6K8n6Fx4XuFix1oCtumprgT2Za4eIYyfOuBNANmjlr2XL1yq33 ImUbnwWad+BhaPkzzG3iUccNfMro0z6u3qUVitjS5Go8N8RDX5fLg+k/33to68n7FHr0OI6uP33 m/lDuusirkE6h3UiPuP59SqvGCbSaeEkskdI889fhFWvN4PPj6vWVj0JzMhZ80sGxuSGTnXRFFg C1zb+yHB4tPutc68cDGySceBSmxSd6VpAnb8ctu5+Bd9rI+9Yz+aAuSQh5ShZO9r4UGV3Us3JP2 8sOtDtGydWlkW/WJn0LcBXzzIILo4= X-Received: by 2002:a05:600c:4ec9:b0:495:4589:707 with SMTP id 5b1f17b1804b1-4954a3ec5ecmr84020695e9.5.1784381929335; Sat, 18 Jul 2026 06:38:49 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:49 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson , Philipp Zabel Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 08/12] mmc: renesas_sdhi: Add optional axis/axim reset controls Date: Sat, 18 Jul 2026 14:38:28 +0100 Message-ID: <20260718133838.152905-9-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The RZ/G3L SoC has axis/axim resets compared to other SoCs. Add two optional reset controls, rstc_axis and rstc_axim, to the renesas_sdhi struct. Both are acquired at probe time using devm_reset_control_get_optional_exclusive_deasserted() with the "axis" and "axim" reset names respectively. Include them alongside the existing rstc in bulk reset/assert/deassert operations: triggered together in renesas_sdhi_reset(), and managed via reset_control_bulk_assert/deassert() in the suspend and resume paths, replacing the previous single-control calls. Being optional, these resets are a no-op on platforms that do not provide them, so existing behaviour is preserved. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * Fixed the ordering of resets in suspend/resume paths. V18->v19: * No change. v17->v18: * Fixed ordering of reset in renesas_sdhi_reset(). v1->v17: * No change. --- drivers/mmc/host/renesas_sdhi.h | 2 ++ drivers/mmc/host/renesas_sdhi_core.c | 26 +++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index db147af9068c..a085a4cb2e38 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -101,6 +101,8 @@ struct renesas_sdhi { unsigned int tap_set; =20 struct reset_control *rstc; + struct reset_control *rstc_axis; + struct reset_control *rstc_axim; struct tmio_mmc_host *host; struct regulator_dev *rdev; }; diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 456d52f5fbe9..4c977198070e 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -623,6 +623,8 @@ static void renesas_sdhi_reset(struct tmio_mmc_host *ho= st, bool preserve) sd_status =3D sd_ctrl_read32(host, CTL_SD_STATUS); =20 reset_control_reset(priv->rstc); + reset_control_reset(priv->rstc_axim); + reset_control_reset(priv->rstc_axis); /* Unknown why but without polling reset status, it will hang */ read_poll_timeout(reset_control_status, ret, ret =3D=3D 0, 1, 100, false, priv->rstc); @@ -1137,6 +1139,14 @@ int renesas_sdhi_probe(struct platform_device *pdev, if (IS_ERR(priv->rstc)) return PTR_ERR(priv->rstc); =20 + priv->rstc_axim =3D devm_reset_control_get_optional_exclusive_deasserted(= &pdev->dev, "axim"); + if (IS_ERR(priv->rstc_axim)) + return PTR_ERR(priv->rstc_axim); + + priv->rstc_axis =3D devm_reset_control_get_optional_exclusive_deasserted(= &pdev->dev, "axis"); + if (IS_ERR(priv->rstc_axis)) + return PTR_ERR(priv->rstc_axis); + priv->pinctrl =3D devm_pinctrl_get(&pdev->dev); if (!IS_ERR(priv->pinctrl)) { priv->pins_default =3D pinctrl_lookup_state(priv->pinctrl, @@ -1366,13 +1376,18 @@ int renesas_sdhi_suspend(struct device *dev) { struct tmio_mmc_host *host =3D dev_get_drvdata(dev); struct renesas_sdhi *priv =3D host_to_priv(host); + struct reset_control_bulk_data resets[] =3D { + { .rstc =3D priv->rstc_axis }, + { .rstc =3D priv->rstc_axim }, + { .rstc =3D priv->rstc }, + }; int ret; =20 ret =3D pm_runtime_force_suspend(dev); if (ret) return ret; =20 - ret =3D reset_control_assert(priv->rstc); + ret =3D reset_control_bulk_assert(ARRAY_SIZE(resets), resets); if (ret) pm_runtime_force_resume(dev); =20 @@ -1384,15 +1399,20 @@ int renesas_sdhi_resume(struct device *dev) { struct tmio_mmc_host *host =3D dev_get_drvdata(dev); struct renesas_sdhi *priv =3D host_to_priv(host); + struct reset_control_bulk_data resets[] =3D { + { .rstc =3D priv->rstc_axis }, + { .rstc =3D priv->rstc_axim }, + { .rstc =3D priv->rstc }, + }; int ret; =20 - ret =3D reset_control_deassert(priv->rstc); + ret =3D reset_control_bulk_deassert(ARRAY_SIZE(resets), resets); if (ret) return ret; =20 ret =3D pm_runtime_force_resume(dev); if (ret) - reset_control_assert(priv->rstc); + reset_control_bulk_assert(ARRAY_SIZE(resets), resets); =20 return ret; } --=20 2.43.0 From nobody Sat Jul 25 04:31:11 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 0B753391836 for ; Sat, 18 Jul 2026 13:38:51 +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=1784381934; cv=none; b=Vaews5lcUih9Rw2oUzkQRsXHZC6vncgCqqgqvmm9buKQtQG+/wP3UGqb6+z2PRBegIP0zVxyLnlUGxhFAA8i5GXhNjEccA/kT0A77J2xshRuCtBONqNGYvt5DAsXMKhg+B87KDfMpIVm8oQQCorJhnmshee4OQhTPXFv/nLxUFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381934; c=relaxed/simple; bh=/mwuAoKyHkuHg2M/L2dDHQ8Ikg4HfGl5NrKErXO8qJE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZZQyGba5/ikQrEXYIg8DKRf2FnjNfHc6JVYegueRDdN2w4AGryN0PRqQUtPzAdezDjkUeJ1vuR9uQj4nQm4N/uYt9D7ei0xOhpK6jLNfZg/QcHc/Yppd8vYzn1HruOvzMzt2rn74XhbzJYwZKIyPjF1+cuBA/diepFGlC8Y52AM= 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=o8DGnfcB; 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="o8DGnfcB" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-493f6de72faso17000525e9.0 for ; Sat, 18 Jul 2026 06:38:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381930; x=1784986730; 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:content-type; bh=fWE1zUTqIFKzVNHeDmXw5TaZwuH9dufexFqu0S8Sbm8=; b=o8DGnfcBbcfVHRvZj/23k7cG30qBpwPxgC879lVA+G07GeHWPSc+ocsIwvUyFk5/kK iiSfRdrL6BOJDY02breBIixqZKRAkHYnhwzZ6CUDwVyh5Oy0jKLIfGbsCFki4ymetH2/ wS4kA+8Pf8aLek5dJYQ3iJmT04Y0hpOoDdk8URRnZ+P2jw8jySJ3hTBbgTxsbUyJOnrj qGlCnXywOXACEB6tl5rFatuhdpuMqM/26RZAtp7i+LfuO7GVtzoIxCNaGttAln9ZAPxz 02VEc76tBZMrCusogdKP8H5Db9prHQwx9RC7YlZTByOJDSWZgS22wVDEX47uEgMlH2p1 TfPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381930; x=1784986730; 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:content-type; bh=fWE1zUTqIFKzVNHeDmXw5TaZwuH9dufexFqu0S8Sbm8=; b=DM/JBseserO6WJvv/EwyCIOHsLb+Nx84xMc2haMNMwoqVIsUji0dlJDEEpKlwhauYQ GwGcteECstUAJoGjGi/5wB8p4eUAvvbml0a/9euELayNlB1jV98IWEI3Gf/A3lUkfknm klNfj0I5wcdtlNtYK4yYZ9XG2JIO1tY6HFb+m8ach+DmmU8vADtfVX0WmAit4WGKXckJ zFE3xV/e3tGKD5DUTo23GaOYa50wiJb1/4V04rgRUQLv7eAgYinIKFDXUix2wggblFeh H7TyKeOAeBY6HsW9tnwvP0JHVdoGNfrmp+pdiS7nFOeWfYt7GYycRKDebvq2Cgrn9Tif V54g== X-Forwarded-Encrypted: i=1; AHgh+RrskAdAIPlzVAnQBgqSrx4bL2LPk3xsbhFJDRi7zf9LB8cXeDRgC40YJpSgNlD4KR2xvpxjiUkoPBHgi2A=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9oUg3mQFcl24cThfCJCw4FYVZEX2RhVe6OaWKtH44tfIxPNXt J5qD3LaCQ8n0KvBwNh75kVACJKaBUj0otuYVpBNHM5KUygDrmAMX2BGi X-Gm-Gg: AfdE7cm32hRqaYtpc1m+siinKwxk3a2Sp9oYGYYH1skoy5L/7FdotuX2CUq3C2HRpEC 5k7fmn/mOVfmkoCZjBSpEDWawsB08KhlE4rLUHQdrWbZ6vCTHpz3QLUUYmr6saz/cchL2RrQDuj k70YyF4pT6gVPP+W7/H59JGS/Wd9aYEWgHV2nUIp9tlATsso3iArb+kTjSxOE2k3pCy5Xng/ci9 c+NSSQmz4oUbYYmuWzrrTHjuZ7ZsBvbgGN7Y/Lk1jkr84wRm0mYIGQ9CobahlpmiPSQGJ5rfu05 o36sGCzEUr8craFVGu0FxNeswWmlZAe5PLsR3CCjUaPS8yrn4SWN0/8NWOEYzcOITwFr8EAkOvO T4DwpKT26IIFrnmtpOc/ItqNqyxNRXZeF82S/9CDAaerpadicUf97unax0cMiE+NvDUVasLOVI1 uyV43JxLTzzg8Yf3qqKAXplkEUyCY= X-Received: by 2002:a05:600c:35d1:b0:495:3a52:71b1 with SMTP id 5b1f17b1804b1-4954aa1a34fmr64196355e9.5.1784381930111; Sat, 18 Jul 2026 06:38:50 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:49 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 09/12] mmc: renesas_sdhi: Add RZ/G3L SDHI support Date: Sat, 18 Jul 2026 14:38:29 +0100 Message-ID: <20260718133838.152905-10-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The RZ/G3L SoC (r9a08g046) has an SDHI controller with several differences from existing platforms, requiring dedicated handling. Utilise the TMIO_MMC_HWADJ flag to identify controllers that carry a second hardware adjustment register (SDm_SCC_HWADJ2 at offset 0x010). When both TMIO_MMC_TUNING_DELAY and TMIO_MMC_HWADJ are set, renesas_sdhi_set_hw_adjustment_delay() additionally programs HWADJ2 with 0x3FFF at 3.3 V and 0xFF at 1.8 V. A new RZG3L_SDHI_SCC_HWADJ4 register (offset 0x022) is also cleared at the start of tuning when TMIO_MMC_INTERNAL_DIVIDER is set. Add a new version constant SDHI_VER_RZ_G3L_SDMMC (0xce10) and extend renesas_sdhi_sdbuf_width() to handle it alongside the existing Gen3 variants. Introduce of_data_rzg3l with RZ/G3L-specific parameters: a wider clk_mask of 0x200000200, a max_divider of 2048 (reflecting the 11-bit divider), a dedicated rzg3l_scc_taps table, and all relevant tmio_flags, including TMIO_MMC_INTERNAL_DIVIDER and TMIO_MMC_HWADJ. Wire it to a new of_rzg3l_compatible entry using sdhi_quirks_rzg3l (which sets fixed_addr_mode), and register the "renesas,sdhi-r9a08g046" compatible string in the OF match table. Signed-off-by: Biju Das --- v20->v21: * Added clk_div_mask to RZ/G3L of_data. * Restored actual_clk calculation in renesas_sdhi_set_clock(). v19->v20: * Added bitfield.h header file. * Reworked on renesas_sdhi_set_clock() to handle the 11-bit divider case and the 32-bit register write. v18->v19: * Update commit description. * Updated handling for clk divider. * Renamed TMIO_MMC_HWADJ2->TMIO_MMC_HWADJ to make it generic for hardware tuning delays * Dropped duplicate SH_MOBILE_SDHI_SCC_TMPPORT2 macro v18: * New patch. --- drivers/mmc/host/renesas_sdhi_core.c | 31 +++++++++++++-- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 38 +++++++++++++++++++ include/linux/platform_data/tmio.h | 3 ++ 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 4c977198070e..e3ffe790cb21 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -18,6 +18,7 @@ * */ =20 +#include #include #include #include @@ -59,6 +60,7 @@ #define SDHI_VER_GEN2_SDR104 0xcb0d #define SDHI_VER_GEN3_SD 0xcc10 #define SDHI_VER_GEN3_SDMMC 0xcd10 +#define SDHI_VER_RZ_G3L_SDMMC 0xce10 =20 #define SDHI_GEN3_MMC0_ADDR 0xee140000 =20 @@ -79,6 +81,7 @@ static void renesas_sdhi_sdbuf_width(struct tmio_mmc_host= *host, int width) break; case SDHI_VER_GEN3_SD: case SDHI_VER_GEN3_SDMMC: + case SDHI_VER_RZ_G3L_SDMMC: if (width =3D=3D 64) val =3D HOST_MODE_GEN3_64BIT; else if (width =3D=3D 32) @@ -237,7 +240,16 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_hos= t *host, if (clock !=3D CLK_CTL_DIV_MASK) host->mmc->actual_clock /=3D (1 << (ffs(clock) + 1)); =20 - sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, clock); + if (host->pdata->max_divider !=3D SDHI_MAX_DIVIDER_DEFAULT) { + u64 tmp; + + tmp =3D FIELD_GET(GENMASK(9, 8), clk); + clock |=3D FIELD_PREP(GENMASK(17, 16), tmp); + sd_ctrl_write32(host, CTL_SD_CARD_CLK_CTL, clock); + } else { + sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, clock); + } + if (!(host->pdata->flags & TMIO_MMC_MIN_RCAR2)) usleep_range(10000, 11000); =20 @@ -273,12 +285,14 @@ static int renesas_sdhi_card_busy(struct mmc_host *mm= c) #define SH_MOBILE_SDHI_SCC_RVSCNTL 0x008 #define SH_MOBILE_SDHI_SCC_RVSREQ 0x00A #define SH_MOBILE_SDHI_SCC_SMPCMP 0x00C -#define SH_MOBILE_SDHI_SCC_TMPPORT2 0x00E +#define SH_MOBILE_SDHI_SCC_TMPPORT2 0x00E /* G3L: SDm_SCC_HS400MODE1 */ +#define RZG3L_SDHI_SCC_HWADJ2 0x010 #define SH_MOBILE_SDHI_SCC_TMPPORT3 0x014 #define SH_MOBILE_SDHI_SCC_TMPPORT4 0x016 #define SH_MOBILE_SDHI_SCC_TMPPORT5 0x018 #define SH_MOBILE_SDHI_SCC_TMPPORT6 0x01A #define SH_MOBILE_SDHI_SCC_TMPPORT7 0x01C +#define RZG3L_SDHI_SCC_HWADJ4 0x022 =20 #define SH_MOBILE_SDHI_SCC_DTCNTL_TAPEN BIT(0) #define SH_MOBILE_SDHI_SCC_DTCNTL_TAPNUM_SHIFT 16 @@ -328,14 +342,20 @@ static inline void sd_scc_write32(struct tmio_mmc_hos= t *host, static void renesas_sdhi_set_hw_adjustment_delay(struct tmio_mmc_host *hos= t) { struct renesas_sdhi *priv =3D host_to_priv(host); + bool hwadj2 =3D host->pdata->flags & TMIO_MMC_HWADJ; =20 if (!(host->pdata->flags & TMIO_MMC_TUNING_DELAY)) return; =20 - if (host->mmc->ios.signal_voltage =3D=3D MMC_SIGNAL_VOLTAGE_330) + if (host->mmc->ios.signal_voltage =3D=3D MMC_SIGNAL_VOLTAGE_330) { sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0x0); - else + if (hwadj2) + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HWADJ2, 0x3FFF); + } else { sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0x1); + if (hwadj2) + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HWADJ2, 0xFF); + } } =20 static int renesas_sdhi_start_signal_voltage_switch(struct mmc_host *mmc, @@ -401,6 +421,9 @@ static unsigned int renesas_sdhi_init_tuning(struct tmi= o_mmc_host *host) =20 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DT2FF, priv->scc_tappos); =20 + if (host->pdata->flags & TMIO_MMC_HWADJ) + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HWADJ4, 0x0); + sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN | sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); =20 diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 1799c6106102..893d9395e9d6 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -88,6 +88,13 @@ static struct renesas_sdhi_scc rcar_gen3_scc_taps[] =3D { }, }; =20 +static struct renesas_sdhi_scc rzg3l_scc_taps[] =3D { + { + .clk_rate =3D 0, + .tap =3D 0x00000300, + }, +}; + static const struct renesas_sdhi_of_data of_data_rza2 =3D { .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL | TMIO_MMC_HAVE_CBSY, @@ -165,6 +172,27 @@ static const struct renesas_sdhi_of_data of_data_rz_g2= l =3D { .clk_div_mask =3D GENMASK(7, 0), }; =20 +static const struct renesas_sdhi_of_data of_data_rzg3l =3D { + .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL | + TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2 | + TMIO_MMC_64BIT_DATA_PORT | TMIO_MMC_TUNING_DELAY | + TMIO_MMC_INTERNAL_DIVIDER | TMIO_MMC_HWADJ, + .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | + MMC_CAP_CMD23 | MMC_CAP_WAIT_WHILE_BUSY, + .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT | MMC_CAP2_MERGE_CAPABLE, + .bus_shift =3D 2, + .scc_offset =3D 0x1000, + .taps =3D rzg3l_scc_taps, + .taps_num =3D ARRAY_SIZE(rzg3l_scc_taps), + /* DMAC can handle 32bit blk count but only 1 segment */ + .max_blk_count =3D UINT_MAX / TMIO_MAX_BLK_SIZE, + .max_segs =3D 1, + .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, + .clk_mask =3D 0x200000200, + .max_divider =3D 2048, + .clk_div_mask =3D GENMASK(9, 0), +}; + static const u8 r8a7796_es13_calib_table[2][SDHI_CALIB_TABLE_MAX] =3D { { 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 15, 16, 16, 16, 16, 16, 16, 17, 18, 18, 19, 20, 21, 22, 23, 24, 25 }, @@ -245,6 +273,10 @@ static const struct renesas_sdhi_quirks sdhi_quirks_rz= g2l =3D { .hs400_disabled =3D true, }; =20 +static const struct renesas_sdhi_quirks sdhi_quirks_rzg3l =3D { + .fixed_addr_mode =3D true, +}; + /* * Note for r8a7796 / r8a774a1: we can't distinguish ES1.1 and 1.2 as of n= ow. * So, we want to treat them equally and only have a match for ES1.2 to en= force @@ -304,6 +336,11 @@ static const struct renesas_sdhi_of_data_with_quirks o= f_rza2_compatible =3D { .quirks =3D &sdhi_quirks_fixed_addr, }; =20 +static const struct renesas_sdhi_of_data_with_quirks of_rzg3l_compatible = =3D { + .of_data =3D &of_data_rzg3l, + .quirks =3D &sdhi_quirks_rzg3l, +}; + static const struct of_device_id renesas_sdhi_internal_dmac_of_match[] =3D= { { .compatible =3D "renesas,sdhi-r7s9210", .data =3D &of_rza2_compatible, = }, { .compatible =3D "renesas,sdhi-mmc-r8a77470", .data =3D &of_rcar_gen3_co= mpatible, }, @@ -317,6 +354,7 @@ static const struct of_device_id renesas_sdhi_internal_= dmac_of_match[] =3D { { .compatible =3D "renesas,sdhi-r8a77990", .data =3D &of_r8a77990_compati= ble, }, { .compatible =3D "renesas,sdhi-r8a77995", .data =3D &of_rcar_gen3_nohs40= 0_compatible, }, { .compatible =3D "renesas,sdhi-r8a779md", .data =3D &of_rcar_gen3_nohs40= 0_compatible, }, + { .compatible =3D "renesas,sdhi-r9a08g046", .data =3D &of_rzg3l_compatibl= e, }, { .compatible =3D "renesas,sdhi-r9a09g011", .data =3D &of_rzg2l_compatibl= e, }, { .compatible =3D "renesas,sdhi-r9a09g057", .data =3D &of_rzg2l_compatibl= e, }, { .compatible =3D "renesas,rzg2l-sdhi", .data =3D &of_rzg2l_compatible, }, diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 09b3411a59c9..99b05c8c840a 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -56,6 +56,9 @@ /* Some controllers have internal divider */ #define TMIO_MMC_INTERNAL_DIVIDER BIT(14) =20 +/* Some controllers have hw adjustment delay */ +#define TMIO_MMC_HWADJ BIT(15) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; --=20 2.43.0 From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 EA6AB391E74 for ; Sat, 18 Jul 2026 13:38:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381934; cv=none; b=b9LTMagwoR/ZreQCCyfIlA70tIj7iNy8mp7bYaEqorvHWRRfQDucqRD2RK39aXsBdn3JaRziLnqd7EvPj8U0nUOYKg/FSZoGwt4oCWYmeveR6AEFqxB5uY4eCV1SsACA7xy9kr/DEF/ZWbFoKxiLKL7SrcPMsQlvjUAGCyt6Xx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381934; c=relaxed/simple; bh=5exsGCY/QAdntBzZb1PGM5ydMEHgf9wYpWxkIufUqqk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PIuE242Ib+YYnJ9+gjL66lUNLcga74qEUfTE29Rq2xkuUvytKyu5/BTIrwjAuWdUqRRn+nhwFchgvlLRyMroP6npRTRoqCUTe5qb2Unw4WOoFMnBGgKpY7l0yFPeT/W8eT8wo/FDPgjKkO6vAOUqQkJYfZXjKdGyi6fMXYXM8zc= 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=RymZQgTg; arc=none smtp.client-ip=209.85.128.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="RymZQgTg" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-493d92b7db3so40511495e9.2 for ; Sat, 18 Jul 2026 06:38:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381931; x=1784986731; 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:content-type; bh=GwVBgYO9MGpUqIKGammrpigKOhLlm2sYqP19awJGrm0=; b=RymZQgTgRFyAl4KcfAW3ChrkCDbPQSurbpkgtb5ybiENJ+n6o3o0m6JweSL04ED2DP AeOU10h/lyRQfVMZ+gMBhaSZLLtLp3RUYNFra0CNPTzy88KD33jazV/psquBbkiTzHfE 2kc2jVcaHC5cunwakP5wM/b+s+glDdwr0CCEbPEUZFNGBvIA+PhUOjXMnf6Ob2FHivOb GMfqhrAZYQgoCFfAuwPb0IcfOADDLp/xZXRtUEdonGH8nq97ox6COJWyq+gT/KwrNoOB XIe7roJ7goLsC/akKng11u3dTwJyJFnCMSuOIw9T+WZgsyiPzNbMRShH2p/letrOzAxm Jq2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381931; x=1784986731; 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:content-type; bh=GwVBgYO9MGpUqIKGammrpigKOhLlm2sYqP19awJGrm0=; b=Ea1p1HnBY9LilxK6DNfYOY24YdADoIUGwPXqNa5cUQwwRinMvBTIWZ8M2EgsFKLClM NJVjF4xy6vgAGS4mE58Vx/3MDpGGzIGKWdlQ4okLB7V21n5xo7fIQGoiR17RpGFulRMV WFYYBSWsSs5m5uEnu2BTjLxsCn6S8QEqgnNS6x5wCIVMwfnSqyMhWA5Ghkydiz5Z8dWd 3YpNEUhpG5F1ngOEFXJlQNcPI4V4qyme+dSm8PaG5tL7l3JKEpUibUE1QpbUJHL/iNPl OjnWiQW3zU80YRhsBR0NW6lRlHsQIMFvabp82WLjiOhIL7OB8HhjroHJlbfhY4aLo4fl uV3g== X-Forwarded-Encrypted: i=1; AHgh+RpfLXiYls4rSpJMp+jeBhpDbqP4j4w+pLvCzMYXya+TSB1WFG363Lf49GKc/OjOTFpqKhNuzbfsUz6leEY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxaw6mUU0blW4iU2ei5/aoW7FgJS6zpgcLlr1xYdvT6lJTYLPkf IrPU/EXgClpZzDt8F4vndyfAX3PGXKcaJsuBWaAEsDlX9iznZbIVseQd X-Gm-Gg: AfdE7cmDzxlANiZEsJVISU3wZ4ZBpwjJnRmHP3Z/WWdNwjz3zeUyYKKRF9yiV7d/0hC HPUihJKaphTL1ASkYllrXMn5nuQyW7p5Rw+MJsccvr0U79b4P11+oz6WDKaXujBeaXbJhTtSdrQ lwzdQG2Yj00qkYB5J542O5+vvjsetBoqJqAUyLh7A2FtRjIBJ0/qMb12nyxseKVGqk1Kw71KOyy DUMSO75nUwHvHwiZluHY7rm7Pp+bSo+AD1jzbE9WmUAjifoIuC6eaq6SJinQA5MO9kffS8Kjtib A/KfIFnA1jkO2yrsTIbINXGKmqWjRdD0eyUQHLCuDvJQYAsbqzFSNtMTQPy//ZGe3kwtWbzJZZ9 NNv57MV/DLMTqul2fMxYSkKRKwdc1C0O3R70mj4r996cpYBZxuigaGk1/EIXpw0eRu9jWYBnMLw x69QzrJgglySgphSNF0vWnsVioO9g= X-Received: by 2002:a05:600c:154e:b0:495:49eb:1ccc with SMTP id 5b1f17b1804b1-4954a3eff56mr80040385e9.13.1784381930911; Sat, 18 Jul 2026 06:38:50 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:50 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 10/12] mmc: renesas_sdhi: Save and restore IOVS across suspend/resume Date: Sat, 18 Jul 2026 14:38:30 +0100 Message-ID: <20260718133838.152905-11-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das The SD_STATUS register, specifically the IOVS (I/O Voltage Switch) bit, is not automatically restored after a suspend/resume cycle, causing the regulator to report an incorrect voltage on resume. Fix this by caching the CTL_SD_STATUS register value in the renesas_sdhi private struct at suspend time and writing it back during resume. The save/restore is only performed when a regulator device (rdev) is present, as the IOVS bit is only relevant in that context. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * Updated resume() with scoped PM runtime call. v18->v19: * Updated suspend/resume with scoped runtime calls in suspend. v17->v18: * No change. v1->v17: * No change. --- drivers/mmc/host/renesas_sdhi.h | 2 ++ drivers/mmc/host/renesas_sdhi_core.c | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index a085a4cb2e38..e2c26917b884 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -105,6 +105,8 @@ struct renesas_sdhi { struct reset_control *rstc_axim; struct tmio_mmc_host *host; struct regulator_dev *rdev; + + u32 cache_sd_status; }; =20 #define host_to_priv(host) \ diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index e3ffe790cb21..d5d8afde9bfc 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -1406,6 +1406,15 @@ int renesas_sdhi_suspend(struct device *dev) }; int ret; =20 + if (priv->rdev) { + PM_RUNTIME_ACQUIRE_IF_ENABLED(dev, pm); + ret =3D PM_RUNTIME_ACQUIRE_ERR(&pm); + if (ret < 0) + return ret; + + priv->cache_sd_status =3D sd_ctrl_read32(host, CTL_SD_STATUS); + } + ret =3D pm_runtime_force_suspend(dev); if (ret) return ret; @@ -1435,8 +1444,23 @@ int renesas_sdhi_resume(struct device *dev) =20 ret =3D pm_runtime_force_resume(dev); if (ret) - reset_control_bulk_assert(ARRAY_SIZE(resets), resets); + goto err_assert; + + if (priv->rdev) { + PM_RUNTIME_ACQUIRE_IF_ENABLED(dev, pm); + ret =3D PM_RUNTIME_ACQUIRE_ERR(&pm); + if (ret < 0) + goto err_pm; + + sd_ctrl_write32(host, CTL_SD_STATUS, priv->cache_sd_status); + } + + return 0; =20 +err_pm: + pm_runtime_force_suspend(dev); +err_assert: + reset_control_bulk_assert(ARRAY_SIZE(resets), resets); return ret; } EXPORT_SYMBOL_GPL(renesas_sdhi_resume); --=20 2.43.0 From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 B0DF83921D8 for ; Sat, 18 Jul 2026 13:38:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381935; cv=none; b=mDqZJkJbvDwqiX4nkfi9PLoOXnAfbjZkr+DkQCsaSgwYRIsX72g94V8rAFGAMMxezu/jusfcLjb48IwVLB4BrrH2STYMDb5VuHPNAMxEMy5paGMadIW3iF3bumrhPE9TpIg4GcMBKe9PxgNnPaVzygbadkgscwkfO7C0mcWr5BI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381935; c=relaxed/simple; bh=y/WSoV7nvfcrB1W0zj2/Mvh6cJfEPxCK9CUupbrr45k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NX0IaUaTcXyYllwIu32ukAs2V++WVC+bg2KuPZMeYJs27Wu/8dqT9lw+e60SeYQMQRdyyQPa4/plIHVza6X8ZyLj7pp079YPreKB04BYe9ZNpFYvWr7DXV/2L4md2SqFwLXEKRRItjtePw05guP212eBKWSyCyVs+2Q28KxTigs= 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=GTmmqvr8; arc=none smtp.client-ip=209.85.128.51 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="GTmmqvr8" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-49545ba3d4eso11948715e9.3 for ; Sat, 18 Jul 2026 06:38:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381932; x=1784986732; 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:content-type; bh=uvx0jbtDdMHoGdK+DqsZ7JHopU84dkAONUnfD/8T1D8=; b=GTmmqvr8OPHpPYnUns/5IWnjwKO65zZrac0l9cdydpe53ybN2YrJbFrXWhGrQwd7nF 4PMFW8wGxTVE8hNowbnuYBDx7wMZLz4W2FaxP4voKxcD/m4a+zxLzjKXtPKim/R4oFZ0 pWW2RK63/2JBQMh+tdEKJtHRenCn8+rBAvP3Vp9Wu9f5DTFRgkd0A+ccUREyBpYI98JN oFmUhzJ4Z8LPTVQ5MdNFVMv5K5jU0h9BaX+D2dGRy9OCVZdbdA8RGBMR7fiJgd/TswK1 Lyw1ICkbmAL9D07HMLSuFuhvzUkrLDeIokgHeWtijSN440RWPLTEGzhh0bUWlYtsErp4 aFxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381932; x=1784986732; 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:content-type; bh=uvx0jbtDdMHoGdK+DqsZ7JHopU84dkAONUnfD/8T1D8=; b=LmD4nimKKhlkRkT6PamWwJwLSGg/DdJxFK8UaqlDdGkSwnL+oP3luzq402A7lPruOU MI5DA4n/5DANlm4cQFGJCRlX6BsWVW29+yQrNGwhgsMF9C2d+dg1eiqejGKQURE9vFZ1 d9uqP6Md2P2+P7bubW9aRExrlMS0m+Z2ByRKprx6f5CtyB9XSb1BRVhdGaCzMg1SkqBr amKf9bu6SzQ3Omm1knjWi8In9lfCKtqDdUAWZzywDk6ODaRWu3KlkbT6KnqeH+w0XVvw XrjkEjko5c+T0tQh8cR4RIK67fGP4f4G5eEolahELsbRt1R/hJRFL1cdm25LKS8vgWY5 tnLw== X-Forwarded-Encrypted: i=1; AHgh+RoSYyrVcVWZhANc2zK5llmwRh5cj3pgzytFwhw62uk/7U3d3nNOBK07XLU5u9p3yI0uaVrAnXiE2ysaCoY=@vger.kernel.org X-Gm-Message-State: AOJu0YzBNV+jFtiVf1+eTPsiZGATxpeSXEI7C/HrjOyNInIAGg6zKtEJ ws1+iwboSkGyEB3D+A7pI4ktdfPeTBYsXVD7Y21iNB8bBofa+YHbVm8q X-Gm-Gg: AfdE7cnJjVktvwkY78yUEqWvSbxIVgKrmPo8n8Iq7qaB/rEcB8nLSv6v9W6KJSnA8hb pR3RDaXOIcamgj6qIJKJPxhqYdnOI7ETusPNI1642+fjM5KPxWZAuIAlWqPRDtrkGOFqd/P0LyR 3MxZKXBazlLUTy6rxSjYzogk5i9F1LKsjv3Q97YgQJ5sVMTiHaekBA9bKjrs8wSDvgSotnyAx+r 04SxUFeprX9ST2om4M3Hcg8ibuXVb1vz1LQPruRbupQouplSawUeVZKuNhLY2SMoUh5VCZI+dbg a0jFW9MrXdaCZPYwP9k4cUBe+24BFzG9u3N9+vAfJioWpm02rLTDVxjr7zPcDgrQcziZAhRT2DI o1znKFSJyylz5hDbTzgVEwSXi5LRfySe11fTevvFL9HeUzbsf2cmNsdxdA85HPCYXhbwt53bgLS OH0jwhlO6YN9rJnMBy/pSwob6YkO0= X-Received: by 2002:a05:600c:4ec6:b0:495:4d5c:903e with SMTP id 5b1f17b1804b1-4954d5c913dmr59504785e9.7.1784381931810; Sat, 18 Jul 2026 06:38:51 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:51 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 11/12] mmc: renesas_sdhi: Make HS400 OSEL bit configurable per SoC Date: Sat, 18 Jul 2026 14:38:31 +0100 Message-ID: <20260718133838.152905-12-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das RZ/G3L and R-Car both use SH_MOBILE_SDHI_SCC_TMPPORT2 but interpret its bitfields differently. R-Car uses BIT(4) (HS400OSEL) to control HS400 data output timing, while RZ/G3L uses the lower 16 bits for tuning delay and does not require the OSEL bit. Remove the hardcoded SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL constant and replace it with a per-platform osel_tmpout field in both renesas_sdhi_of_data and tmio_mmc_data. The field is propagated during probe and consumed in renesas_sdhi_hs400_complete() and renesas_sdhi_reset_hs400_mode() when setting or clearing the HS400EN bit in TMPPORT2. Set osel_tmpout =3D BIT(4) explicitly on of_data_rcar_gen3 and of_data_rcar_gen3_no_sdh_fallback; platforms that omit it (such as RZ/G2L and RZ/G3L) default to zero, leaving the OSEL bit untouched during HS400 mode transitions. Signed-off-by: Biju Das --- v20->v21: * No change. v19->v20: * No change. v18->v19: * No change. v18: * New patch. --- drivers/mmc/host/renesas_sdhi.h | 1 + drivers/mmc/host/renesas_sdhi_core.c | 6 +++--- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 2 ++ include/linux/platform_data/tmio.h | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdh= i.h index e2c26917b884..7ed92229e937 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -41,6 +41,7 @@ struct renesas_sdhi_of_data { unsigned long sdhi_flags; u64 clk_mask; unsigned int max_divider; + u32 osel_tmpout; u16 clk_div_mask; }; =20 diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index d5d8afde9bfc..e44751647982 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -310,7 +310,6 @@ static int renesas_sdhi_card_busy(struct mmc_host *mmc) #define SH_MOBILE_SDHI_SCC_SMPCMP_CMD_REQUP BIT(24) #define SH_MOBILE_SDHI_SCC_SMPCMP_CMD_ERR (BIT(8) | BIT(24)) =20 -#define SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL BIT(4) #define SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN BIT(31) =20 /* Definitions for values the SH_MOBILE_SDHI_SCC_TMPPORT4 register */ @@ -457,7 +456,7 @@ static void renesas_sdhi_hs400_complete(struct mmc_host= *mmc) =20 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, (SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN | - SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL) | + host->pdata->osel_tmpout) | sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2)); =20 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DTCNTL, @@ -598,7 +597,7 @@ static void renesas_sdhi_reset_hs400_mode(struct tmio_m= mc_host *host, =20 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, ~(SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN | - SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL) & + host->pdata->osel_tmpout) & sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2)); =20 if (sdhi_has_quirk(priv, hs400_calib_table) || sdhi_has_quirk(priv, hs400= _bad_taps)) @@ -1198,6 +1197,7 @@ int renesas_sdhi_probe(struct platform_device *pdev, mmc_data->max_segs =3D of_data->max_segs; mmc_data->clk_mask =3D of_data->clk_mask; mmc_data->max_divider =3D of_data->max_divider; + mmc_data->osel_tmpout =3D of_data->osel_tmpout; dma_priv->dma_buswidth =3D of_data->dma_buswidth; host->bus_shift =3D of_data->bus_shift; /* Fallback for old DTs */ diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 893d9395e9d6..b1146dca94ca 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -130,6 +130,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3 =3D { .sdhi_flags =3D SDHI_FLAG_NEED_CLKH_FALLBACK, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .osel_tmpout =3D BIT(4), .clk_div_mask =3D GENMASK(7, 0), }; =20 @@ -149,6 +150,7 @@ static const struct renesas_sdhi_of_data of_data_rcar_g= en3_no_sdh_fallback =3D { .max_segs =3D 1, .clk_mask =3D SDHI_CLK_MASK_DEFAULT, .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, + .osel_tmpout =3D BIT(4), .clk_div_mask =3D GENMASK(7, 0), }; =20 diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 99b05c8c840a..501ca4355c34 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -72,6 +72,7 @@ struct tmio_mmc_data { unsigned short max_segs; u64 clk_mask; unsigned int max_divider; + u32 osel_tmpout; u16 clk_div_mask; }; #endif --=20 2.43.0 From nobody Sat Jul 25 04:31:11 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 55D6338B14D for ; Sat, 18 Jul 2026 13:38:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381936; cv=none; b=Wdv0PSiUYwWfGQU9Hle30wFPO/wZf6KiMZjL2zdK+r1Izr2avno5hznUKaejh0YKfJKdAP+xT9SjYqs4m8b3ARP5ptgvtXYD9U7TWcNaU1dduGGAEGPa+XHlPjHyl5slKAJzNdJfosAddsaD7PRgauX8GTXHXm7qySeIBTx5QXE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784381936; c=relaxed/simple; bh=r4OwAIC4pwtuAWoujK6KGRQbHrxuQ4AOKYTwXfLTIKs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XqBPBsPmG1Vi7eV1VVjgGNtAMYqp6bMr65CAwN5+AsAWJ4M/fOG6/y+e7maPnO5D5QgP8T6pD6u5/N0uVH/Ab8TQKQyVCbi8+g3uFzyOErgr/LQMy8Zasol40qWU51KTobHpHRWw/EJiNwZxwwr+VU0n6S5//XZn8zDxKtVdDNc= 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=hy2KXPbW; arc=none smtp.client-ip=209.85.128.43 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="hy2KXPbW" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4955484387cso1294065e9.1 for ; Sat, 18 Jul 2026 06:38:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784381933; x=1784986733; 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:content-type; bh=boJC/mFBlFSXo/jLmZqFUYkmGNz8ETJlTQzeYbwz3N0=; b=hy2KXPbWCeaPmD5+/UbX6tPcYrULwyvTEBQ2q/x4ormhw20A78llqBmfkWLyPTQPKL mhRTUKq2FCFk3JvaHgxnJB0nr/t56uHxK7r62xnOvu8S/Pj1Tb1WtnWGT5h1lK/MFfV7 SA2OR5KQiPhfEGlDXyDK5nFLw3qi7W4hZ8Vh9OAJc2i5r6DksqxSej2dkcjm6bQc5E9I 1DNPtVg7m/0vA0gq7XyFESVUZ+fKaCPtG2Dr8pEQQ7vYNVjQDobWW4prmtZblnE/jJM4 uBuwBDcZgYTKv3jBVIZuBW7eeAvYg94HBipUaoMmAfrbuBTUJxClYUjhrytzIFMzdZ/c LQxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784381933; x=1784986733; 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:content-type; bh=boJC/mFBlFSXo/jLmZqFUYkmGNz8ETJlTQzeYbwz3N0=; b=GwSXmXZ3ymiUYkVpddNy4YTJyOhfhs1+T4V71N4p1maqmocOAaqI4YDrFwyy+EIkL2 Ks0vyC0k9NV9Q6kSOzYLVWiz6/zFe+c/JeqfjCYwYhJ+IsLkD+w+ARuaQ2G/2Rj08UNt M9GJg7B2UcbgLGRreMuhBHfcQs2opTMZ+F6x4XTMz2k+Ewd/vl97t7h/so8NsLQ3OIFz +xD7BjV6zP6ZabUs6Qxij5uRk6uW/QBXhQ/WXuc4maHQaAfmzllit5znBKMBuLD709Fd P62b5J+Qd2YMqRqcwpCZXTe9WXc5G5biYb9kGoXvicRaTXA8sVmb7MSPFtlX/KiDYDuR bMBQ== X-Forwarded-Encrypted: i=1; AHgh+RrE/7EmQCU2yf8EAViBsyclpVA4ijouH0UPTI4/R26cLGswbLVo60JL0QWvJwoFE/lyHgZz5hrVkId9efk=@vger.kernel.org X-Gm-Message-State: AOJu0Ywogs0jbEkMXOxvQvbLWYF8YMCeiDatiPgABu+NEx/1CEDQ6gC8 Adyw0hTW1/tLTIUeAFjm1i7I6MR1bt4Bjj7wgdaWdN6DUrGeO7n9DaJW X-Gm-Gg: AfdE7cnK1dZwG88Kknj2RNa4WMSmEBrFdmX3eDfsAAP24tVGZBiWH15BQxBMMh/gNzz CB8wI6ZMltxHrZ8sy9MF3+QIqHOxAOIQYMF0JjPwBvyRYb/RCzIRE/kLd8Uez2tlegV8Bclvt/b 6+bqpHa2MYylX8oATuZARwQ4uC5PUiUogsm4r1OxSenljNwaN6v0r6diVR9LquaBsEuCdmHFkAJ +XD2/iwIiKOIhxNgFfpLiCwhLdmOYMYjnsCKhfYBZrQCvSbXqhSJYECzpvmedV1FethrtbMr6qv gNF7BtuchyHWhuRTCQ0mGg0Devf73z5OBFZJ+hN9U17Kk0NqyWhQoJp/ZbKFYz97uk13UX+WK9I XzeAZexdBEtP900gcRp8YkW5utGWrjdAFHdpYHbnvZFP3Fd2cweCvOaptVluwMNx8m0zg85H5U/ iHSrQpSrGWsJhRbh23bn8F9vEjhJE= X-Received: by 2002:a05:600c:63d4:b0:493:d21f:8f98 with SMTP id 5b1f17b1804b1-4954a4136bcmr54059975e9.36.1784381932593; Sat, 18 Jul 2026 06:38:52 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c53f:e1cf:6009:4c03]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549c96ff7sm121717845e9.10.2026.07.18.06.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jul 2026 06:38:52 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Wolfram Sang , Ulf Hansson Cc: Biju Das , linux-mmc@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven , Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v21 12/12] mmc: renesas_sdhi: Add RZ/G3L HS400 support Date: Sat, 18 Jul 2026 14:38:32 +0100 Message-ID: <20260718133838.152905-13-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260718133838.152905-1-biju.das.jz@bp.renesas.com> References: <20260718133838.152905-1-biju.das.jz@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" From: Biju Das Add HS400 support for the RZ/G3L SoC. The RZ/G3L requires a dedicated HS400 enable register (SDm_SCC_HS400MODE2 at offset 0x020) in addition to the existing TMPPORT2 path used by R-Car. Introduce a TMIO_MMC_HS400MODE2 flag (bit 16) to identify controllers that require this second register. When this flag is set, renesas_sdhi_hs400_complete() additionally sets HS400EN2 in HS400MODE2, and renesas_sdhi_reset_hs400_mode() clears it on exit. During tuning, when both TMIO_MMC_TUNING_DELAY and TMIO_MMC_HS400MODE2 are set, the lower 16 bits of TMPPORT2 (TMPOUT) are masked off while preserving the upper bits, replacing the previous unconditional write of zero. Enable the TMIO_MMC_HS400MODE2 flag in of_data_rzg3l to complete HS400 support for the RZ/G3L SoC. The RZ/G3L SoC also supports only a single clock divider value in HS400 mode; all other divider values are prohibited. Update renesas_sdhi_set_clock() so that, for controllers using a non-default max_divider, the divider is forced to this single allowed value whenever the current timing mode is HS400. Signed-off-by: Biju Das --- v20->v21: * Updated renesas_sdhi_set_clock() for RZ/G3L HS400 clock handling as it supports only single clk divider value and other values are prohibited. * Updated commit description. v19->v20: * No change. v18->v19: * Updated commit description. * Fixed extra space in HS400MODE2 comment block. * Updated the comment HS400mode2->HS400MODE2. * Dropped the updation of clk handling as it is taken care in previous patches. v18: * New patch. --- drivers/mmc/host/renesas_sdhi_core.c | 29 +++++++++++++++++-- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 +- include/linux/platform_data/tmio.h | 3 ++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index e44751647982..ec42f490d6cf 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -236,6 +236,14 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_hos= t *host, clk &=3D ~0xff; } =20 + /* + * RZ/G3L SoC HS400 mode has only 1 divider value. + * Other divider values are prohibited + */ + if (host->pdata->max_divider !=3D SDHI_MAX_DIVIDER_DEFAULT && + host->mmc->ios.timing =3D=3D MMC_TIMING_MMC_HS400) + clk =3D 0; + clock =3D clk & host->pdata->clk_div_mask; if (clock !=3D CLK_CTL_DIV_MASK) host->mmc->actual_clock /=3D (1 << (ffs(clock) + 1)); @@ -292,6 +300,7 @@ static int renesas_sdhi_card_busy(struct mmc_host *mmc) #define SH_MOBILE_SDHI_SCC_TMPPORT5 0x018 #define SH_MOBILE_SDHI_SCC_TMPPORT6 0x01A #define SH_MOBILE_SDHI_SCC_TMPPORT7 0x01C +#define RZG3L_SDHI_SCC_HS400MODE2 0x020 #define RZG3L_SDHI_SCC_HWADJ4 0x022 =20 #define SH_MOBILE_SDHI_SCC_DTCNTL_TAPEN BIT(0) @@ -324,6 +333,7 @@ static int renesas_sdhi_card_busy(struct mmc_host *mmc) #define SH_MOBILE_SDHI_SCC_TMPPORT_DISABLE_WP_CODE 0xa5000000 #define SH_MOBILE_SDHI_SCC_TMPPORT_CALIB_CODE_MASK 0x1f #define SH_MOBILE_SDHI_SCC_TMPPORT_MANUAL_MODE BIT(7) +#define RZG3L_SDHI_SCC_HS400MODE2_HS400EN2 BIT(0) =20 static inline u32 sd_scc_read32(struct tmio_mmc_host *host, struct renesas_sdhi *priv, int addr) @@ -459,6 +469,10 @@ static void renesas_sdhi_hs400_complete(struct mmc_hos= t *mmc) host->pdata->osel_tmpout) | sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2)); =20 + if (host->pdata->flags & TMIO_MMC_HS400MODE2) + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HS400MODE2, + RZG3L_SDHI_SCC_HS400MODE2_HS400EN2); + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DTCNTL, SH_MOBILE_SDHI_SCC_DTCNTL_TAPEN | sd_scc_read32(host, priv, @@ -600,6 +614,9 @@ static void renesas_sdhi_reset_hs400_mode(struct tmio_m= mc_host *host, host->pdata->osel_tmpout) & sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2)); =20 + if (host->pdata->flags & TMIO_MMC_HS400MODE2) + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HS400MODE2, 0x0); + if (sdhi_has_quirk(priv, hs400_calib_table) || sdhi_has_quirk(priv, hs400= _bad_taps)) renesas_sdhi_adjust_hs400_mode_disable(host); =20 @@ -757,8 +774,16 @@ static int renesas_sdhi_execute_tuning(struct mmc_host= *mmc, u32 opcode) if (!priv->tap_num) return 0; /* Tuning is not supported */ =20 - if ((host->pdata->flags & TMIO_MMC_TUNING_DELAY) && priv->tap_num =3D=3D = 8) - sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, 0); + if ((host->pdata->flags & TMIO_MMC_TUNING_DELAY) && priv->tap_num =3D=3D = 8) { + u32 val =3D 0; + + if (host->pdata->flags & TMIO_MMC_HS400MODE2) { + val =3D sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2); + val &=3D ~GENMASK(15, 0); /* TMPOUT MASK */ + } + + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, val); + } =20 if (priv->tap_num * 2 >=3D sizeof(priv->taps) * BITS_PER_BYTE) { dev_err(&host->pdev->dev, diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index b1146dca94ca..8cd3ced88b81 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -178,7 +178,8 @@ static const struct renesas_sdhi_of_data of_data_rzg3l = =3D { .tmio_flags =3D TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL | TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2 | TMIO_MMC_64BIT_DATA_PORT | TMIO_MMC_TUNING_DELAY | - TMIO_MMC_INTERNAL_DIVIDER | TMIO_MMC_HWADJ, + TMIO_MMC_INTERNAL_DIVIDER | TMIO_MMC_HWADJ | + TMIO_MMC_HS400MODE2, .capabilities =3D MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_CMD23 | MMC_CAP_WAIT_WHILE_BUSY, .capabilities2 =3D MMC_CAP2_NO_WRITE_PROTECT | MMC_CAP2_MERGE_CAPABLE, diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index 501ca4355c34..81a37d6baefc 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -59,6 +59,9 @@ /* Some controllers have hw adjustment delay */ #define TMIO_MMC_HWADJ BIT(15) =20 +/* Some controllers have HS400MODE2 */ +#define TMIO_MMC_HS400MODE2 BIT(16) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; --=20 2.43.0