From nobody Sat Jul 25 20:49:13 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 5EF6B33C182 for ; Mon, 13 Jul 2026 17:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965127; cv=none; b=AzAS8lnO3T3LHehGcqBov/MpeZ7Mh6eH4k+5SJixUtxojuSB+TEGQbXWp0rqJmQjY6OYgkgJ9B29BqPr7ICt89e9UZ7pMc3s+HyfI1SniAvfZMEqIFW76VsN9ueINUFbuiJxMVEFBpJ2Fh+9MPz+sobMoEMaglUa9FpUVC0l63I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965127; c=relaxed/simple; bh=JAiqAxkcwnnqDSaNuZpYNFoN5e4I5rBW7k+/R1zI/wU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NgoGnhLWkEtObdb2GS3BjtKmpkS3K8M3P6r83D+4W3wtieTkil6hcZQfUdFupWLzsFXemVrReDGEYGQ3VKv5LC7um5e7+Z6Xa9NG8hAiJo2rldjhvGWgmS7xvoL3Y0EPaUJIV9BVqkhMfQwlzzxiVgivj1kiUHm1nnuG8OXYrcA= 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=RhZso2GH; arc=none smtp.client-ip=209.85.221.53 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="RhZso2GH" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-47f365afc5aso901763f8f.0 for ; Mon, 13 Jul 2026 10:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965124; x=1784569924; 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=6XgOLzsrb24W2iBPumJJf1NiQ0JSKLBfdmOgsqRSs9Q=; b=RhZso2GHYAPDR/Q+xb33d3g5y8PA6X8iH5CoDlVHjya6INtaytMZnuB5Ma5DJqNaoa RiVnznZo3t8uSB8bZBBV0fgiZJ/7iHmML0R6mpYjCkcsNOhg58FjCxcrRnlwKa1SM7zs yxtdNRf0cUxj6ufWfxpJJD/Kj3NrZfdcHTHctg/7z07mBraBkNx1SRs5haIhILDvfRGf d8XFyNz1vE+P0HdVez+aauMPh0dk1coS8LfPnxDuVwBZyr2f40GHesAy+leGOEKBLYli JFrBNvo3MPMtgmnhEVvUvWXUSqAmB5/epJ2sKptgwQYpX4OV75VvoGrC5ZNGWknjvZXJ CaMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965124; x=1784569924; 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=6XgOLzsrb24W2iBPumJJf1NiQ0JSKLBfdmOgsqRSs9Q=; b=oO2knUOR0r0gpohABUJLK4LMMeSH0cmWk3WAAdvDOFsb57LZ2QKeC5cfHWk2Wo0ySC 17UU3CtfxYtSvbHcLviH+U0GBDNbs0sU1G1MqCI59ciJpwGOhVrV1sl3Q49GZjdvfieH 9LXBqKHCAvHwkTzHwNv3txDlqMTa+AhJo+dBMsczdSABmVA1x6IMZ9WWQm/4oGaq8A9K OQLqKCnCZeXGTYG106sq3Q/oDFSTa6w1x1mcmV8ymy9IRksq+Bi17qIBUWziH5Y+TYi3 Aw/jK6TRRNuH+AL16l8NRCSj5k8des6SyLG7uOqebX6BQuljZihrFH5ntAmCpMAFzv2l 16Lg== X-Forwarded-Encrypted: i=1; AHgh+RruudEwtPONse3fuKxEQI9Uu6AqCmjR4YNpaQozkbBeDMl2v6LV7eOW7YNPzQQGwu8XsUZId5+/dONr1QA=@vger.kernel.org X-Gm-Message-State: AOJu0YxIyLkfBcc9IwgH6eXmpK4JImbOb8U83Pkt57PI08KBWhT728I+ bn6bz/GDeLJgNDylGPFqNt4YLDUgax9zWY2ozEDsncU0rdHq+amM2KsS X-Gm-Gg: AfdE7cl4bfXYKRHN36uGraLhfbrFI/bklBRAZGLHhDuTiYnnt30bqgxsf6Ku2t/j76/ 6ga03NQUtZM2QHONmkfutP6yrl7W6pvhuT6kTww6OpHi0I5fs4bl9yCfPC+SP5YWrggsTI3L9bS vLqGKrKzZiomXBOD8PM00CxqkAiOiEuuXbNRGEEFs02pz07UPoCYveUPOu0hOXU7lMqp0BDsT1y LGoh3IIzDPtFnZXXPgzmn4UndEumOztCt4uBRLy9T7Kph7hsP/2V7fdH1IKuNFgZWDZucFf0qGo EzzJ/t/vQ0rfFqTwFTI699xuVLX58cKrBcHzWE7ZUuxLOCOLKoR1A0JWapmigwbcUcQIJpiTcgE n3YLFV1ZKKO5kQfMfqyVzkui7ixH3ecbwzfk80HkAa40K26iVanyHDNizcJD3mk9nAwlC9yAuVJ 8nxGcrLW739CklgReCab/LsLc/yQNqYveVCyX0Yw== X-Received: by 2002:a5d:5f83:0:b0:475:cb71:a344 with SMTP id ffacd0b85a97d-47f2dcc63aamr10574540f8f.37.1783965123536; Mon, 13 Jul 2026 10:52:03 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:03 -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 v20 01/12] dt-bindings: mmc: renesas,sdhi: Document RZ/G3L (r9a08g046) SoC Date: Mon, 13 Jul 2026 18:51:42 +0100 Message-ID: <20260713175159.138334-2-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 20:49:13 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 0FE7234CFDD for ; Mon, 13 Jul 2026 17:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965127; cv=none; b=HCGEI7tNKT88N5eFgnJp6cWn5CkL6skiBW2jpLPjwctltuyQJKrBPYDYC6tHabwvr6Z9CHRXGU7/+ZvEZ4I8t8aBgAGCH18jqrSVjnRkFzxZQz3VWgy9m/1H8PToL1e+6Bi+V5skI07y7uAsXZKRQn9zS0uFiG1o1K7xuYqIWWE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965127; c=relaxed/simple; bh=/FGwBoak+K1dZ3DgCaKeto6pzKCz+zzDgtJUpzrYq3I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qCMEI4J0GkRuRK8Syc5EdZ5KLnCVrFyk2XIWMeKgXA/pqTEM6VCIHS8ziZqUUDfHXK413A2v63cxf1MDuENuBJ/IIE56kGV2Yl8QjldFpYWCj2v2WnGI/WzgF8IthgnRFDPoFkbpsh8EKtxe3WJLEEXiKGL8WKrKQUiVK/DbLH0= 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=fKHSLgPF; arc=none smtp.client-ip=209.85.221.41 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="fKHSLgPF" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-4720d22c94aso93869f8f.1 for ; Mon, 13 Jul 2026 10:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965124; x=1784569924; 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=iyfVj+1fDts4apxcCqosk3edydtohs7g/ZwBDxQKGmY=; b=fKHSLgPF+C4FAkP7zFEJNT4LfRo/pSZE5V0RsdpEFUNl8oVF6FVs//SrTweBAn4CvW ltbotEN6JO3gFSmuL9eKmfjDs5aNLsnKH+m418GpJqVB4l7mEseSdnd8BT0S9vJC1RCG aZZWDqkBo06nkVrPsZ4qTJNWWhI4512KFjGxGaJZ4uoW+5OTF6dUzOPUzOAjpC7/K1xm dSy4dhhjvOVnd2ErwJGGOhB+atHES5WkICkLv9ighOskAujutbaK9l57vbs0kvDqaSFl jYBPtOM9koPnYRbZXH/SYWR/eYxW5WDqfVk80+3KTqf9TW0aY86wK7xNNpVMGbJF12Ta 5WQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965124; x=1784569924; 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=iyfVj+1fDts4apxcCqosk3edydtohs7g/ZwBDxQKGmY=; b=dKYVFm7279GSIfMeGAliHAS4+PCJyhSFxmMiXdgPkKypDpGaGrtrW4vtBQuHE6F87c yhC3pAv5GGkmn2kKK0RzjOZIGoXt9RPYB5mTZY1BjVQNtB704j9lrvRwDXsUza0g8aAo crfK8IBNwQBLoAqibxQDts941oIcF9+Q5Z02iIuuNjaIqcmUCHiLLVP0H3p2QTzUs7dz XpAcEUwizddSFO8HniL+rxsBfVqiPnmd09H+UHTuIZCw6YORrepHIc8hrWtBAeRRLh+n KiYNOIqUVr+mtob4WU4e4SySrfklsBjw/Ne5Xmkib2FXnI9hhruWQMOzHsikLBM5Yeim hakw== X-Forwarded-Encrypted: i=1; AHgh+RpJJAnNoP2VjCJDotr/a6QernVuec7jR5fb0BTulPKJfhotJ7knW0fA1x/7fhDiImAoZeXNjEVerScWGl8=@vger.kernel.org X-Gm-Message-State: AOJu0YwXztGBXAtDuddPJ2N4UhxfMr4v035HPPM6gBkq35U6+6qWe7Fk PlmvravSdWz28LNJmWLpNgqFrVywTeJCVXnMaYxESTav3HJR+fuXGNqT X-Gm-Gg: AfdE7cnBUvoVhzNwbtzPMxdKISsep8qR8N0cg3vWLuQqNTpSbLGaQXl4mGMcICEwmmY KkH/fSXDDDeDinpd2tsSdL20q0vjbjnIMC5OBZH38gDNRXbDlmOqi/Q3ZBsd3JZeTTtXN1d9VkL uOxcztMxc/kb4aWdqezJmonWPAhR78ER+cbwiTFgnvuz7oY+Bz6AhvEUN9VSlgBPyW4s9P0iZ+B fwDArbT9iYPTxiOqSylGeK1IgmCJrdGh8vNPTG6+55ksB0jROTbXW5WynKSsngqLsyYFmMNyiFO REwgsJg0SL8n3kisRswSsP9h++zR/85IKzVL047g9361fIdwJ8rpA3WN/YYlGbhWL5cHfX6U034 YwrFbBlEMbehPMU0UEr1vly/wQrQg3/HL3P0MseKOLobeYaOmXLhm44teruaVipm+4C/qs9EPOd Vpj7XeEhN5pwgZl+sdo3xf91fkPWL/rZFoxMxkpQ== X-Received: by 2002:a05:6000:1a88:b0:47e:81aa:def0 with SMTP id ffacd0b85a97d-47f2dd215c1mr11680288f8f.61.1783965124369; Mon, 13 Jul 2026 10:52:04 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:04 -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 v20 02/12] mmc: renesas_sdhi: Clean up whitespace and add OF table sentinels Date: Mon, 13 Jul 2026 18:51:43 +0100 Message-ID: <20260713175159.138334-3-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 20:49:13 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D939F34D915 for ; Mon, 13 Jul 2026 17:52:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965129; cv=none; b=EwaoQNkhjZZMX9MoPlhhSnrMK5qk1ZNvH+i5xX3irRRdxTJI6qyRoKF+4P1T4iNZk/QVt+FRsQv7WLa4dSn9uDLknxlSKzCLS04V60UBtYKe/8TAXeMLRGP06RdoK8U4HUMi5Y7p6TmnDnHr8TGV4drbh7dwxbGbMCKJ3bRoz8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965129; c=relaxed/simple; bh=IgEed8k9ronp3Klw3j7YOg3QES44u75S/E47qAgzqkQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I6DvzgosYx613VRMh4rTxbn1NsPROfg2TN3D96TKqDDY+mIajOq8gQSMvUJHSdN3WGnIVjcD1tS36TMdizX1IINJWlE069G5HgXp7j4/QksgoAIs82X2OA3EjGZ+LcU/CkBEeNrg8wUr7VBpytlor/QfB1fKaIa/ES58/q1c7aI= 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=Kwx9Yltr; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Kwx9Yltr" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-4758bd3731bso116289f8f.0 for ; Mon, 13 Jul 2026 10:52:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965125; x=1784569925; 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=qY102a+IXjvnQY14+rM/cHb2EnSKmNDamCsdOqjRw5I=; b=Kwx9YltrHwTm1Q9F4IDzWTUXwztJepbMH9ICTSpEk0RD9j53IHB4lNJkCES+kwKre9 Isc5z9/SrRDtXX7eLqzYT0B1b6nM/HFm9vrY/gowYpkglahbE+ORL+tspjZCiaXi8MUH 7shul6PWDSZUvIzDeR8pfxflllY6bjxfdBtY8imRdmL6lidMh6bxumRdsmLe/QYK34kU XmXM1b5vtXwuT2BbBPmFesEdtyKssk9Kp14xJb8bk2SnYNbkhBLQ61fiPeYBHrnevU8l PD21BVtvxfBAOpZSjzPDq8JsBtAAd92HFEMh1W37n2EUKe3gWFmTgIiJDX+0aBYsWJbb U+fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965125; x=1784569925; 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=qY102a+IXjvnQY14+rM/cHb2EnSKmNDamCsdOqjRw5I=; b=FQ5cPEEQH+PdUa5Q+NdFGnenTNbvINpcC7H/uIffzTn7wvuO35H1tgkaxDUjQO5X/D XyAIpALEaDMoVZGusYJcRCsb4p+mROdFbBKvUXMllxpxK3lsOxb2cm39q24DK/Q8gh0P PDHACY4FA5chX7fV4r6BDVDLDlk3pin+gYhUuFuoX7VQuHHwrKABa5Om8sSqFld6lcs1 xnB8KpYBW4hunHKrRk/IlBUwizVxUXOEEqQNglT1/Ruj+Sw7AvSAvCv0IeWBwM0hO6IR 3O+3kx26luPVTegFIVkdhccTTqxVjcjsp/R9/2NTg329rz01qIOkgiXYJvllltWZnEYF /rVQ== X-Forwarded-Encrypted: i=1; AHgh+RpUVq3ETNeqpwQO2b+gwqvclo5GO85JwU8WRtDxZIfeshmOoc881ufzhfzSRkNPn77cMSvuXMcy495003Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yymd894pZBsrQneW3iF47KtCiCWID6tXI94pviZ7IM8W1hnt6K+ iRvSsupZlk3SQTm2R8C1Ny64zXKeQL1izVYwc0jcY3SanEgyw+/WZCv8 X-Gm-Gg: AfdE7ck6DZQLkYANIYKSb70/klLTGFh/EKRtiXvDnfdYW5FKCJYhJ5IBPl9qHK1Okul 040OeaoG7AF23j/SbLUBhR+9xl/94crK1lKB5vSX9aTTfXCug3qg+2oIyAicFeN0Ll4btiJdPFR so+4UkmpN4sAaoyCpu+0Ub5chTN+on6tFLVgXVU11jT90+/8yY4zFcvFpFIFgdAcEKzL/gu5ORL HqjgSuYXglWzRAg1AAVIS3c+V2MPJP5LlzzMyM+ab5tDsfk93wGQdgQvORQyjYGroLVdqTxBepk wbe+iEC3NCEouErk4siW41dcy1bmW2Trw7THqP1YBo7rUdx8fOXF4FKPjnZEjjglUbh11aHTLw0 jZm1gfYKJ7C5mh68H5BRznlaE8kubNTmQaytnvZBCs9lqXD4EYk6QzlFwZn5x25dtR2nWvGd9ru auoPjU7uTrGvQ5am8YlG7atpTaxJwjHB2J4vDVpygDf70n8QgC X-Received: by 2002:a05:6000:26c7:b0:47d:edc7:4c44 with SMTP id ffacd0b85a97d-47f2dcc2fdfmr10701682f8f.19.1783965125196; Mon, 13 Jul 2026 10:52:05 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:04 -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 v20 03/12] mmc: renesas_sdhi: Add clk_mask field to support flexible clock divider widths Date: Mon, 13 Jul 2026 18:51:44 +0100 Message-ID: <20260713175159.138334-4-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 20:49:13 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 C47F534D4FE for ; Mon, 13 Jul 2026 17:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965130; cv=none; b=fAHX0sD5L6Isf+TvlB3ArnG+sStOQ4J5HbZwNYqzkAY5IzR80NMe51/L3thCAwM1ce3E3kP8ehO2yqCfW7VsgFkpSiCGeWaNJ4PSwyiiniE3YRnIHUTyVtscnkx49NWoTjfdztsnFaWpe2ODPvDLT40n41aSxH5XP2FmPFDMf98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965130; c=relaxed/simple; bh=sGl2NnbY05IvzVX6jJgdX3/HmVBvIodFkNp4haqr1tY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=as571MfWcH+o8pr1iPRVbw642ZX5nJ4WS5modpar621mCzPy0U9Y6z4qPn01MQIPevjQ5VfwQUsVmTenuXBQc893CaM0UpB3KkUJNYad5C5EGt9kcuwj++hjvFLqKemlpqKCLczLynJcX2HYYQQpJsW8CC874+ZLGU3i0vUZkNY= 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=PcxNFDzn; arc=none smtp.client-ip=209.85.221.41 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="PcxNFDzn" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-47c6e9a694bso1937478f8f.1 for ; Mon, 13 Jul 2026 10:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965126; x=1784569926; 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=OzfNMOVZX0qXrXstMrns1/4B8fF0IvJ3fbJ7JiKv+2I=; b=PcxNFDznVbXKys9mKZcKVBoYosBVYpU6dFlcV6f2sNkmWtUqQGM3v2GNJgnmlDIsFL 05LNkwBXb3V8E9GuTkKIyDxaIYDVmIGvXoLcInyy3jylDs0TupiqKuUAX1y88A+g2NRr yWstW7P6uSqkoNGBFBJnVVlT3vMqAv6KbczJ4W/akq4sM59TNcwCwBVGGErJtDkQeLrW r0pqzgjqGcwxN0cFSBSwg3n3A4gvoNFI/sbsyjYFy5EWrNLFZkqySuoGFeKFxYFsbe7o 755rjRQUG0T7KMIJix6/TlNcmuyRNxR3oq7Fb9J+AsPCiYzGB3qBCU1sFiEcwdtTnzST XMVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965126; x=1784569926; 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=OzfNMOVZX0qXrXstMrns1/4B8fF0IvJ3fbJ7JiKv+2I=; b=el+20+revJI0igr4LovlcN4NeYv1reCzQ1q2Y3aogQqYNSDlh2RxKYvoqGQZ1zf9ae mmcvc88oBLZlRujhf0MuWaEWnnzqMiQYqfZccBHnPiAM3mXQYLfGHE8dYeagqhbhfoPN INXaUrRdpRbXy9wKzQUbTauM+kIBzmol3JN5+EbKcwkts+rw2g1bDnhDVcpY43jr9uPK Vvo4VSREkCUc8in/XP13WqqcX43IIa3Sg5lT7xZqFkx599aZ3fA4MyrDuEMpuBQryvHN BJ85LmDHOPNOxs6mbGnG6DdMnfQMLGVugX/t6kG7+6MGTtVGpBxPIH1U1nKRoG9gqBRn We9A== X-Forwarded-Encrypted: i=1; AHgh+Rqgi7oAwQCbisxaikYfAqrTm25YYqP2j+fNOk+FIJjg0yvNZ4zpWgRiNDr2WWJ8rXhV3q74Tz8mPIIY6Vg=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+1DcmjPvLLc3a+EmO0s0ZMPFk8VhvQ/cDX+qjhL8jvvbxv904 VvXi3aWtaKiE+ASHxwaYgdV2MfLpbAkatSzKDFbw+V2McEfpvvqgU7gkAmce8Jcw X-Gm-Gg: AfdE7cmYDfJbwePW5nAzSPXt7H0WGK017pFZn+RACyvpLGrUq9E2HjQpQ8u5k4xATzd Y4s0IISDUdRj4ufXH6+eZiJHpJRIU/NvGn7CXQXefc3s4QbSFynJpuYLNr9mtTxSeJzQhAO/8/0 rJAXGOUEkojeKp/XCdQ6Ax3ABA83kx/oBQ8wCQDEJNb0x5YF6UyqodCvlIz+UVEcHMEVmEe8J15 1CnVb9V08seDt4JcBQTYJNVH50L8vnjr78XVWAb/m7CIetlq3MBj2b1E9IHe2fmLNOqGGmy6Jo1 gPhA32hDA9cVWYuXhK6JxTtAG1jldp1UeqeYyfAq0OCVjUVJ0GE4GNtEgxrG/8vTJFNuJYoraV8 tVJnR6LLOHBtgolWe8d3s3I4zjlYiJNH7gSz6VLPkbubea5bCn9lKb6TEBMJhsV6rnKEH7P9EGB MqclCUkRYl5DfKgwO69p/7UTxr3xkwOUg4e7Iing== X-Received: by 2002:a05:6000:400a:b0:46f:7d90:8114 with SMTP id ffacd0b85a97d-47f2dcb50e7mr11645539f8f.14.1783965125949; Mon, 13 Jul 2026 10:52:05 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:05 -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 v20 04/12] mmc: renesas_sdhi: Add max_divider field to support SoC-specific clock ranges Date: Mon, 13 Jul 2026 18:51:45 +0100 Message-ID: <20260713175159.138334-5-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 20:49:13 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 781C534D929 for ; Mon, 13 Jul 2026 17:52:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965131; cv=none; b=lGvFH40uSuTQz2Ho88CDUQBUHzvQj+iaEApjBxu1SiOwCJMok6UAqI6gj6SWTdA4BQ9r4R3fEemUaA87pbk0v+PKfhhzFWlBQ5+itjNovStYHSMuV6XzwXMJOosAuXz05mbFp0CunQtUifQWKVZuUIMgE0nv++Hf7bRX1ofP8Ag= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965131; c=relaxed/simple; bh=f9e9HPrW7pHb6AYMxKN2MlBh66ucqSDBHuVtG7CpLsM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=drNv3NQXrDi1QFKDZdCvAd19jUnX3D4MJUKNY4IK0Cn45kU6RWHrXGzPoY+gvgnj6357zccdPMOo9OyNmLu0OEI1CcX7ngWjERc8G2KHZPr91e22FT1N1UVwxKG9FDJNGZvZQ1bC92NnREOO5NmTnZJ9fVQzPu3GdhoqpWXpLiY= 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=L8DeeU5O; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L8DeeU5O" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-476a130c138so136067f8f.0 for ; Mon, 13 Jul 2026 10:52:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965127; x=1784569927; 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=l+2CeqTBNfKqaWlWURz8uTEPGzp6HEOE0wrsSm7u0j0=; b=L8DeeU5Oal/JuaapMuKlMuDAejFKpCFARwDR+qPZPBXQlqpciPFyllTYQ1LrEag5kg x6MBTswn8iFXjylsnUiM/13IfzwCQ8LDxSoj2VdAL3HUxzlW5LQzkFI2NiVvx5EpOqOG vX5S+NifqY/OKTZA7Z3+TJkMdRD8Wey/ZHmJ7+hqLAx12IVtOuZuTLIn78bNPOqwIgnI UwpYDgd2BzbssxPURbGf7SoD5vk7KhUacR3If6j2b4xrZR76EkhKvkTpPkUMILc7uI2D lMnBZcUXQZlWgxAGv5J7E7JJ933SjULZ7F51FaagT0taQ8PtCcUf1W/NgBm2yOXFxN2a BYfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965127; x=1784569927; 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=l+2CeqTBNfKqaWlWURz8uTEPGzp6HEOE0wrsSm7u0j0=; b=L+6cXHwe7F8VKYXPBLDhcUSYnmM4a53JN6UQgT+MaombfCS9/bcj3mJkimDSs9x2LB iIOuugDiJp8cG097IhIPvmh1P4+4gmiF9FgCGDj47/4fFrQ5eH8SgZjPKVsefBohyo3x +t0ZYCoJy5cxPCT9ekRp7UkBBlQhpfjJXvlWatL8T5lL1tKgKxP3ROnNDV06Y9BLcMm/ 6AZ8KFZsU9Xc2904h22we0uxguNzw3D0nspXcBfeOxKtQA139AK+gEUjBIi4iq31Ro8V Q7eLr/XjricuYEQLoYLOFEv493j/LXUHoyvPYqZ1jRsrZzkBDjqjP/ga8qQouRaK1Obj UdKQ== X-Forwarded-Encrypted: i=1; AHgh+RotKa5qXyT3OsL5DOJPN4g+r8nku7Vut09/PMYwUM70FIkvu6DpyNOgAVrykRstmOiPQi8RFrRqJJW39pY=@vger.kernel.org X-Gm-Message-State: AOJu0YyHtUM7Bi95TuY+9nRnkJ5hT+NwUHdeyUYEch64lkgPAYmRm7sP Lxvqg5MShR67n389zvZi+OUwZoAhZOUeXNQ9V9PnHphe40mej0OEYlbq X-Gm-Gg: AfdE7cnule7otdZDTXOp0DAhma35HPDNQqAVjTyXoYtDRfCbI53wYRq/cfOEXiAAZcV wSGYhFcPRJhnBBgr48Hb16ObYE6XI3TzwLqnEWTVkKfnZmy2DxrXeD/eT+SkUNlslAAa6OIu1YN fcvUz1RJKIzsC2wizhMfr6PLyquzes8Tgw3RsRmc7j9pEDIIs5kciJSJmB/H5Mde+0hs8iLLRxU gIWQ7+JLKEOuFvisSWQO3RH+BvgRSfK9gk9VpVWAQXOpae2BHVe+TeIxCgSb3NgY0y5DzZxxOaC HreHdRz+5mTo0cnUfdHx2ezcffK5NzTK+zmX+MZZxvN1m7GGi9oolyUF2o7dLx1nqqRsOVVR0OS sYusDB1x65B0+YowKccM6/dAS7IN5IZQ68FYb62qcBnoUu5NXnOBAWiFacrkDZ16VI2SBwnYvDR d+VK79J6ZNrlC2bzZ5in+tPty7TssX/SZavE1TFQ== X-Received: by 2002:a05:6000:612:b0:47f:2c3a:83e2 with SMTP id ffacd0b85a97d-47f2dcd1a1amr10583994f8f.3.1783965126721; Mon, 13 Jul 2026 10:52:06 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:06 -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 v20 05/12] mmc: renesas_sdhi: Add tuning delay support for RZ/G2L Date: Mon, 13 Jul 2026 18:51:46 +0100 Message-ID: <20260713175159.138334-6-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 | 21 ++++- include/linux/platform_data/tmio.h | 3 + 3 files changed, 75 insertions(+), 35 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index d893a263e770..569009ff4c52 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 2bf354331b2d..8476678d47a6 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -142,6 +142,25 @@ static const struct renesas_sdhi_of_data of_data_rcar_= gen3_no_sdh_fallback =3D { .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =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, +}; + 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 }, @@ -263,7 +282,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 27ea21c00419..868a21842fa5 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 20:49:13 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 B56B434CFCA for ; Mon, 13 Jul 2026 17:52:09 +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=1783965132; cv=none; b=DtJdZNhvhVmYOR/lo9YkPKgFRS7sJhTfSKzCtSVqLtY4whHtg2yCA3ZoaS2kKeEqkmHmNNhIYy7oe/h8VmzdNCrU4GojrkTcNkYd/bQ5UzQbqz3Y46vpbJx9pb5oM2M5y9YYT178eaSoX1eGG8vQS5lGlnSTIpkFU4VDv+o5k4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965132; c=relaxed/simple; bh=/awFqf0/GhJNh2fHJY3cZfOES8ETe7vN5ppkmGvE60I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=THLHpHLhYGVcwRhxp5cFSONaTFGd9lrOn83TwI2XOzF0WcqcEeOPvcMPRtiQ+LhKarpNQxDdvsgosDZ0nCMXGsdIwuD4tYmjC4U41tnAPSOPcUNHaybxkx4v/L6kVB80MVLXqokyKXLObIGeMdtr4tLk99zLHFFB6CDOAyoZTrg= 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=gCu4Q6zn; 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="gCu4Q6zn" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-47ddf7b09e5so123874f8f.1 for ; Mon, 13 Jul 2026 10:52:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965128; x=1784569928; 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=iBQmmGq/6npSHATny7uStpNW8aUMkBy9m+M7haOuQhM=; b=gCu4Q6zntf/BCNiFztyxUWXKVzEhXsA+ib+CdXieV5KbOO0XtnWkEPYZZv4zSooqvP k3yFwNj72HRxztnjgEQVuqpadCGhcH048fASoMBrUM4yVYArFT/4Hs0Ch7pKt18AHcKx qNeOZEQrXoOIJYsTnGOPOslRNTK9qlFEy8UqGRkyza4SIHUEPLJ7d9EIBVjQ28AjRGW1 /kJ6NKpZN8NjzdjwtbsFsi15VPCJhi6YLwOQNBrA85X+Xe9IckYQxrkK1QVNfxNpPpib pqg449V0ivDIdXYA4WmD6oETj7n8RNUi7uVmwNOJO9zMBhC0ekiWrKwrj5o/QQRyx2dn q+jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965128; x=1784569928; 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=iBQmmGq/6npSHATny7uStpNW8aUMkBy9m+M7haOuQhM=; b=nVUrIXwSTr5mJpjb7kb33eGbORymIo/LqMrP3tk7Zv0cM3Mm9K72O9pdzE+N2j8yMO 1TTmNczaJOfnlwoN2iDmY9VIpfN+vq3AzccL0RSvBgPLaFGuIEJqLinsxKzHjFezlslJ 0I99/IwgCAgK78I05U6bR7g2d8gQMqi5G87ZAviECloEO8mXaKdOt6dHdQxRRS5Bku15 VnQuAmu68Phj5ToOBkxpmi5a3WeKZ3pKoA/6RtHcvNu06YAHzs/oIa2FVMfYpQ13eezE z3V4IC3dwP/abiFw5Zq6BEuHTu0mx99s3zaLjZN/FnEiDVhLeVMmZnHsX/Q8OKA6/S09 Yn+Q== X-Forwarded-Encrypted: i=1; AHgh+Rq+A9SXPxBr6Dfl94hPqA1n08zYTslbpf9rggh7+T6fRkqK3ceVDamISje/h8vE2Mj8+f6AcsmJNC4Wm3Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0lin+/BvHloXswR2iTKleCXlPwQKShLmwdp11h7X2yO1kC8MQ TTqZj8kTjbjMpNXbxtRb/zv2OprEyenqoFQv8YwSUIbjAdHs4jWC503+ X-Gm-Gg: AfdE7ckOF5/hw/AqKgwNf5vRN2XLEKxREW3Xazj/O81gx5AyNLi03mmTL4t4Bgt8e99 r+p5c7fBCVAfhsCIcDvEqskWdhmA+zEpAVkV6EcPBXVgSGWhg7ingMkluOVmazC//Eo20sI5qP/ t89c9+NdSRTEJaXcbTbDEP/udPH+z3bwf1BRghrDAFkLWLYRxmNZ0w6KthTAen/HvvWJfTD0gJB 3hmF2pROj6+gZvIpEzlnpfrqaDALNo7ZRvuNltuqNpJgGtZOos9zaRWPGAOJiThUeU4JVM3ptDN EP8eOBJ0peK+FK7EFIdQo29KOuTnGpQTFRyJjNd3uGLhLFzlFGKzjDsMs7qgK0wC8lm7i6p7St4 ycfQB3j7NShaqHOa41VP+zTYUbSG2phS306wieI1mQIPVC1Zjh+Bun7yAUhd5Ww8+Wnzi8BGzu4 70yIxdspgHJ3pOfR8iSgs7kuksj0ip3ce2SfBtFOY/1fZAbxVg X-Received: by 2002:a05:6000:290f:b0:479:e2ea:3d51 with SMTP id ffacd0b85a97d-47f2dce228amr11979954f8f.17.1783965127920; Mon, 13 Jul 2026 10:52:07 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:07 -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 v20 06/12] mmc: renesas_sdhi: Add TMIO_MMC_INTERNAL_DIVIDER flag Date: Mon, 13 Jul 2026 18:51:47 +0100 Message-ID: <20260713175159.138334-7-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 569009ff4c52..d3f6d459fdc7 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 868a21842fa5..6c512e96e192 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 20:49:13 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.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 9276D34CFD0 for ; Mon, 13 Jul 2026 17:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965133; cv=none; b=DFlomfwlee+PvjJpZyyGBQPY5pMO2awAVfODgU0GLTAFtRKfs4sibdsE5GzcER93t5b4GYL5nmfHSzjeGlvKbCKuVR00HEAYR+3xWr6tOFgSjj9Ti/jY4Xymyh0Ml3MoRgvK8Cr4gfS+6cjyVc4NUZwuYh7TpoUh18R944gvhhs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965133; c=relaxed/simple; bh=W77L0VNCoY7Tvzw4PzFSS4Ekd35/93E+qrb/dKg4lzA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jEA1rXM9OaPp2YlJClSRBVTf5mP4fttIVhT1VbRRReqsQrqIijTc+dTJROFH9ujf8or7m/IsET2pMywd5iryBqfdfHybmuwqJ3JW1vcjaB9cAHJjz3H6Tlo0OuON7n2WSCYM7YcITt+J233ABuh20cWIgZ9qiViyijKKtkSjROQ= 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=nQQsV0S4; arc=none smtp.client-ip=209.85.221.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="nQQsV0S4" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-47f36a122fdso83847f8f.2 for ; Mon, 13 Jul 2026 10:52:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965129; x=1784569929; 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=nz4lXMnM+3qHjXu6Jdn8WbXR2CI+PL9asho50kScHBI=; b=nQQsV0S4yUBJb8pllmY63rXs6m3/WwviqZehzg1alQFt7CWvhosYHY5iuPVBSVjFBz qVk702jyjG0Mhx/wyrrypKCqRukaPS5JS0W82zRRUVPS2woq4mP96MBeay1LlCWk4FQq FWqg/gbdS0HI9tW4nQkVP9+a2f5Fxi63sLdTO/OKHr9Gh5h/BROIfBqACJ2KDkj9gmU5 pH9SK4X1+sMs4uc/OlGO+E23lsIOXxbDZpTAlOACsyDSomyRlSpl1zd/EHCN/OdAsaVw Ba8CZ8g1sd1Aqm4dAT+KEfz5acIhn/1MyJSHKmeoP6QmeHtZkxP9NK0l6IzKICfAVdz7 AzCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965129; x=1784569929; 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=nz4lXMnM+3qHjXu6Jdn8WbXR2CI+PL9asho50kScHBI=; b=jiRzN1CuHpyyYon8Zyrdq9DvLoIh6vN4Q5pl7Pe6FmAE8bbImIDNFHHqBGrfDf65OA 0V6Kbf8i63Gzp/3l+EMsOwgC99bTPGgY7vTOF08w9UDkIEN07uKL/jBY9Y3KZvv472NY nKt89LccYrizVXU9OZZPkzFUn5Wa8Aem2g8m0lFQiYi5oMJG1xOjyQ86uZRGe9ZQLDA4 thb19f/vqc7OpcZ/++qmOqoxWTZdtCGWmzoM9MzH11nPAUuaeRrN3ws6mrdsOgkM4gyd rob7iLtWrvgv514f35O2z1+pFoooyawWNtXzTiflWGBdFBFFOmFUTYUDrKlHp07HUxrI Jvkg== X-Forwarded-Encrypted: i=1; AHgh+RrVuowKrVJl30EIhvdspTTGHM0ot3TZkQq3kIXUCqG4VpP3YadI+0lAof10onVDI2QL5T/y2AKj2TA5s3k=@vger.kernel.org X-Gm-Message-State: AOJu0YzHRnRS4m82FPWHE8YHqZx9i2e2DDOxjjEnbVDOh7IYqQBUHvlI 1gJD32abmObTT+kHzyRX8Soer2UjaqFXTniNYQ1Pz1nU3mdB7cvTv1ht X-Gm-Gg: AfdE7cn2ULwxka2xp0eC28xWHYZW03GOxTzMN7WEZ5E0JImUZ3Y9m2RJUNVs8rhyaTJ zzc4ckQi3MgyfRPpCFZ1XdV+78k/wKv4n/c/+3FFpkoYFgyL+8OlpNjERowAGckh8GzvHGVKzT9 di+IoypU0H1/cei56S1figRQoPddkW969yYJDE8cjOqipGkm6q88rpKFCh+51zuHW4J5A+WmUQN 2e72TzkA51xKB2KIwmTpeOqFuQnv6xlzUiDpf+13acHKWfhXHS8r5Lta82G/rw5vfdGqIqLZujp PqEO7TjSqqs6ITakj9fu4ftubhr0IM9qg0z7AQduGRXSDp2aC3Aaum2/4U7e96OYX45MZb85y7q 1C/oOJmMFueYnq+HFlH8U63kJ1LPHQLq90UVOPm/g0qummUUqxT8PvqtxnnhRu1rP6r+UDk+U3H kfZu6VeKRiPg+P5T9UBCPp1s51iiW0ljAPYnQzqs5iJt8vtYM6 X-Received: by 2002:a05:6000:612:b0:478:65a8:262d with SMTP id ffacd0b85a97d-47f2dcd1a6cmr11891993f8f.9.1783965128698; Mon, 13 Jul 2026 10:52:08 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:08 -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 v20 07/12] mmc: renesas_sdhi: Add optional axis/axim reset controls Date: Mon, 13 Jul 2026 18:51:48 +0100 Message-ID: <20260713175159.138334-8-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 438b2a7afe76..d46598190004 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -100,6 +100,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 d3f6d459fdc7..a4e822f141e8 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, @@ -1363,13 +1373,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 @@ -1381,15 +1396,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 20:49:13 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75F2335201E for ; Mon, 13 Jul 2026 17:52:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965134; cv=none; b=dDgqAkhAgmdSPFpoQgm+biuFdvUTs/SxHzZnvIAUfVIU0Bo7GTr/iNOZ26LJXTTkPdO+11NUuaUcGczSsWzOcGcj1XMfwtwB+r90vdkbZouEVT6wAMmcO883haP2JH6wCaTVOuixjwG37SF75hvsC7QoBd+bNhsF5yYckDxe2+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965134; c=relaxed/simple; bh=htdrSJftSkmMNibLYGV0Bicscode4YlmWbF5QiTo+ic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r+Sm5dIhN6G/Il6WfrBMGS3oUgNEUbSuIXp2F5VV9XpzA6MIis7DkzEyisEaOmB33IxcU8f6D02wcjc7bcWSXZQh2F49tt7Dsp+FEE28obxk0BYKeoJn9K4qg8lYoYgSXmhmY8Q4bShPnN8c8+pChcNl8wSdeCQ74sD9kHeze9o= 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=PDnScFO/; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PDnScFO/" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-47df6a5202bso2041597f8f.0 for ; Mon, 13 Jul 2026 10:52:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965130; x=1784569930; 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=PVTWFeljHSjxUtnRnkZ30TyfY3T5+xBesFGu0z4Pd/k=; b=PDnScFO/fyAvyJP1TAbuJa+EnHbyOY36gpj4qIO2yzJirrRIt20/O22qaXzGw2wXCE Ib459hFke6vg861DzdLkd9n7HCs2Rtk457Wp3PE4XR7T2D14mQ1GyW7btVGBKsDpbnVk Xkly2WPgjfSkJc9X6JUkvf33AJ6sv1ppRfgfnBz0UCUmvcOAM3CUE/b1uTa2bTz3yvvy Q5RUxzfQsg5v89xKIuNZsZYZRZyZKsSajfZQ+ml7xHmZ3htOtWrCeRz3XDXFdtloY4pK URgfkQzz9u91efGHzO3CJVYu/2kdZjOSgzJxmhphD62WgCfS4qpU+GFqmkQs5oM7TPHn /dEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965130; x=1784569930; 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=PVTWFeljHSjxUtnRnkZ30TyfY3T5+xBesFGu0z4Pd/k=; b=o8Sj8yWIhxAO069DmWlgSIAYpvLte1J23KIYIHRL+Bk6eHcUUd7YS5tZMmFbfMSdPT LwfaOnKhhB8QuH1Qx8NyG/2WGdTHofT8ZtKJ6EE+Kqg0aTy6A6JL6H3ZosI/JFc7AO/3 c7hv3lIHcH57GqLQUc6Au6ADOnDDoJ1NcqGZO9q32PFOk82O4zznqRQD/GcGTU7HOc33 +kJEb7fPqbtS0aq7LebBoCOXx7rfmW9u0EfLAH9Frs4X6yh2m8P+djQiIOOfLbUPjcWf ig+zPCunCPAboMU9Dn2f2Cu9f2oh+fVHfSrVxcUfDmFx5ANv2trY9ASRi+PPlhrJDtPy xBIA== X-Forwarded-Encrypted: i=1; AHgh+RoC0ioCFYwekKEQoDRb8tSR96BkjurkXQafadQuqTUVllzU39aw7hKPynFBAPWmo+NOlG9hQDV1SAh4Zq0=@vger.kernel.org X-Gm-Message-State: AOJu0YwQHHnlqJnN7pZMMaklwNIIP9FTQwr8kCB88TcRUPcQ/qEk+xNW s6LyJ54dkN+FOxUp0449w+hZKkd5OEH9oKD78e2AGg+q6V2avSUmQ2L6E9bMm9QF X-Gm-Gg: AfdE7cmSWP98ydTvTnDS8jee9JUz+ORi3iUCgoZViA+usVZ0jyzh1x4Ukuv7pvodlGW riYNNtCyH4jlwHNHjiCR4nkASto9HXf391I62bXT+Kbfa7nvmWJ5B0cCcuLGwA+npvPQtp9B0au 1qkbFW21Hoq38O+tPxz1FGuU5LRtKmvi/LY7JnPXLW8ZFxFaIp1uBFYMp3VliGj61yEnXE8hBQB EdyY48GUudI97taEDtZmEMQ/ZkUSKJEAo+hnUZ5EpuQna2BY7tZ6KpjK0ggQ9fIsbvEsapgdG02 h5UgB9YESbagM+8zaB9b36oazra5uqkoK3Jhm9++N4v30nTjcM1o8GfdU63TmSGSNuBcQW/jZe+ kk3e+cX6HtcOq7oFyffpIKD7O8l9ontrYKEpZpPnpgz/KN9JT7xsOjC14HAu9BTDCAjZRJRqeIH Zbm+vLu5ze2CGVeqle449nZtRT7l/ds0/WTMYJHQ== X-Received: by 2002:a05:6000:184d:b0:475:f100:3609 with SMTP id ffacd0b85a97d-47f2dd09355mr11469171f8f.56.1783965129499; Mon, 13 Jul 2026 10:52:09 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:09 -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 v20 08/12] mmc: renesas_sdhi: Add RZ/G3L SDHI support Date: Mon, 13 Jul 2026 18:51:49 +0100 Message-ID: <20260713175159.138334-9-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 | 33 ++++++++++++++--- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 37 +++++++++++++++++++ include/linux/platform_data/tmio.h | 3 ++ 3 files changed, 68 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index a4e822f141e8..42548f5fa2f4 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) @@ -235,9 +238,18 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_hos= t *host, =20 clock =3D clk & CLK_CTL_DIV_MASK; if (clock !=3D CLK_CTL_DIV_MASK) - host->mmc->actual_clock /=3D (1 << (ffs(clock) + 1)); + host->mmc->actual_clock /=3D (1 << (ffs(clk) + 1)); + + 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); + } =20 - 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 8476678d47a6..e78dbcb6c887 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, @@ -161,6 +168,26 @@ static const struct renesas_sdhi_of_data of_data_rz_g2= l =3D { .max_divider =3D SDHI_MAX_DIVIDER_DEFAULT, }; =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, +}; + 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 }, @@ -241,6 +268,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 @@ -300,6 +331,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, }, @@ -313,6 +349,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 6c512e96e192..e6663cc736be 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 20:49:13 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 960943537C7 for ; Mon, 13 Jul 2026 17:52:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965136; cv=none; b=rGIQBSChEbaZXQAmCc2Mnfg/ptqNK6qwLQAA9biJlrSy+KFadZGW3arn33OYINS5kSeYvJYUXWUfiVzEyuvPcPP/n0czfCVogHvzpc3iFUxmzJp0CMGUFmOlioccXvWjTlH4mzlV3Ymb9yNTzT0fXhqXNQo4O6CDanq3GUCYzF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965136; c=relaxed/simple; bh=HbW5N3phPFJJMjdweeAACfoi+lvBLPALP5Jt5/2V3eg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=furxzPl6miMq9X8FXJ3VtRRh599epuBGreYTR2JdercYikF6Tp5DcumM+c88soywGP7MN9G+2fse988blpT9AObN+ytEvOlY68LeTens4SYKo14esP7dLaMAfARaQEw8Kx8FcKpQU3/ik/DzAgR6gudqTLFzHDgJY92wor1xsiI= 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=A5VKFW1r; arc=none smtp.client-ip=209.85.128.41 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="A5VKFW1r" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-493f431e317so1748495e9.0 for ; Mon, 13 Jul 2026 10:52:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965130; x=1784569930; 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=CMabxijrPdjD148L5yvur0WhCfh5+SdQvtGwbs6Bgv0=; b=A5VKFW1r0JlBKKKSoeBGgriV5RRByQMUsGOvuT+cy+0mSrDnAB3mT3an73xXs5lU6i BtdpGW+nhzmbPOa1Sw9HRi1a5rOWsI0BArD+ZU4ClWUYJN/6tjQoJqePNvwwAcicOohN uKoJJrUrOwkvJb80RpfFOz/pyn0Oxv0HOZc39n7Oj6t+IDixbclh/Eu2NIyKW+tUvYYR 4/kxAAiW8gPCXXRQQje25ziAI7CPK6qCqqVP5pJCQHXwa16dciw/cTHhvGziK87L62mD 9zoWEaigvvqdF24u+59Lck/KjeQsySbVATk7DfvmnyPPe0Yjq8rCMSDOvlWd+0EpeQZt zEoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965130; x=1784569930; 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=CMabxijrPdjD148L5yvur0WhCfh5+SdQvtGwbs6Bgv0=; b=Q1q4fjs+6tcf7rYLeKvJleMTIscw9IJW2BmEVwsuUrkVmp01+qrw/qPS2PwrCxhJ5Z tQ1QbKYczFiXWZh48wddiS4j441PWT3GOqHKkZx01AdFxT+2Zy9HbHwl1CYQUNVYrdTc pCaAR+++TwW0QuEL1n42HcSu4XdeMf4DoOLNWB45TLTbDYaiMvur1r4PB5TgwFbM/Lrg B5Qst/hmWYFAoAuaDshM3N7FkTpQniV9z7JHSiXw7RxJyHYr2F4zr8s/9CQIqAW9PoVH cOpngFYFq4eDledDhSkfAysUst+tVZafH7+3nuLI9jyeMmTeEyjbPGdkfIy45Mu8Xo0m eaJw== X-Forwarded-Encrypted: i=1; AHgh+Rr3HoKoOi0I+Dqp2WLENmMltPXTTA53kcmfUHEkLTJXZZ+yAeFq/eqMx81vxhFPlkDo/sdzbp8XmvPyWz8=@vger.kernel.org X-Gm-Message-State: AOJu0YyFRjMC3RLhONDdMRpaeP5FGQO45eSkDsHCtcgKOPt7ERL9zHYN 3tDy37DnlGQ5JvFmlm0ID551HXobOiZ2OUrm13LYm1Ev6yKXkQN7hZUv X-Gm-Gg: AfdE7cksnWJ2VQeXuO10r2Lr8EucU/E7QlBDoDA+YjI6eYksP5hMzWOMwOsB4HVTJWj oO+NPbAfhuux5+ylMgxr/+qkcwuOuZByLQH5P1odDUr1g1aLel8m4R6xoWm4fl4pNeAqnBZZOXx BRRD26mvfgJL0yfiAM+kWfKsPNIgelaaPf5hoJDEKjigb8AgzuS8CovnZO4EPx8kfiLZTi2GYrl nsQ4u9/gXgcB5FIACBr+sjESxguQGz0hOY6DqL4AkyEW6OC72nFJGhb6zGdS5KbHamWUOFjT5dZ Mu2qeMFLWLcaDMBiuDUmpj36acPlCts2/T9lclhK2LommwIXKq9l0XBjhCROQAo56p7WpKY9ziO 7CRWszdZshQj27OyXS39bUh3KvGwasguI4L5NJFX6q07XpochHA+GrLhHxkH6dmAsZ+04599HjU F6FoDYETLQT19A4XukyBxNnMR7j5QhQynn+zRjnA== X-Received: by 2002:a05:600c:8011:b0:493:c0ec:9a5f with SMTP id 5b1f17b1804b1-493f8818045mr110615525e9.19.1783965130307; Mon, 13 Jul 2026 10:52:10 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:10 -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 v20 09/12] mmc: renesas_sdhi: Save and restore IOVS across suspend/resume Date: Mon, 13 Jul 2026 18:51:50 +0100 Message-ID: <20260713175159.138334-10-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 d46598190004..39d915da6f38 100644 --- a/drivers/mmc/host/renesas_sdhi.h +++ b/drivers/mmc/host/renesas_sdhi.h @@ -104,6 +104,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 42548f5fa2f4..861fa83b9980 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -1403,6 +1403,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; @@ -1432,8 +1441,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 20:49:13 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A192353A65 for ; Mon, 13 Jul 2026 17:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965136; cv=none; b=tb5TV5A9kGpAeOPQTFeIxuHSGgKnxEo5JG8U93x/WKUJpwqEaS794Fb9reMspRZUTwuOVLkwL/Vhg3K0nNrwgNdhxfX3YAxueA0SQQANnSlepUXZ6kWQ3Z06Z0CaEKOIg+XGewNrZVt1gj5vUsakHs70RdcFTUb1ysWNyu4fKcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965136; c=relaxed/simple; bh=H0BB1+tLP5mVMxBZfWM1v8VRfW+JC6ZOjupeFTMVzMw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NRT7tEmJH/8Br7CzEkYllzv/QO8AX2pxbuKh7N/EOq5650c1J+1vbwwO8KoMRXvyq/+EbswGio9xdkdzZMO/JGJK6q2QqWuKDIvxTzfWyE2Xo/up0REhqQ26DTTUhKSkR0J9gLFIMXcBuze7zO549EP8fDWKfkRIKGMENg6nens= 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=CP3aiYPv; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CP3aiYPv" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47df43bfb07so758246f8f.1 for ; Mon, 13 Jul 2026 10:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965131; x=1784569931; 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=+kVGQv1zLjxdqd3BJIRF46fls+zqS0NgMjE7tGJsJ9M=; b=CP3aiYPv5z+m+hSm41bM5C2jPWhgEjhVmAGtR0TFdIPG0ChQiiqA5kwCSIX2k9/Nut i8oufButodZtXI7gIhOSSKj2L+X7/WipGFXVyEeWOY4aT6nFJc76vk0ef/l49p1C0QWB yUo5hLa3QrIUP9OVBK+9CuLnZRNtiRhfBLBluytVRaBTnG8zy9wspQeu7qWNVdFeuDIm WLIiODkYqclSyoqtQusD65EUXs3hA4GBUIORmGHvabG+/qhgy2wyU1lPqCL7kHznvg1q Gm2mhgy6WhcqEid/gYN0Xt3MmDgdSQSie6lVTi0VpPRs8VaMVQIc4D9tYzSUdhD8Yybi cUFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965131; x=1784569931; 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=+kVGQv1zLjxdqd3BJIRF46fls+zqS0NgMjE7tGJsJ9M=; b=D4eyjitMlnw2mY4KwmhU5AJvd3MyS7wppylIIpLzPmMFp/W1XmcIbHvhVCY5cJsJQg +t/rTqU/SeELhmTcdWoB7L0nCoFP+3m/pVBsqDWl4LqxPbcIOJ4N7d06lcxX1t0dg1+g edK3k5UprB/E4lG0LedBdntMUb1EFLsc2jSv3WSl2CvfRt40+/m1+20CcvxCFISkc5XR aJ7TI+T+S0Eunf4h7NsIQgoNB8YKSLbXrJ9Cw5wc+5Liym4LhWHN7LIwebZWiEiZkwd1 tCE9t9pNUnzZhbOjPWiG3jJPm/Rg2N24nS+HN7Tm/rlzWNQtd7OCRGi6/vnzyjLd2+94 LwAg== X-Forwarded-Encrypted: i=1; AHgh+RqyI/FezaUHZD4kin6wsYVZetJQL+qYxLCHVAJZseMW+ysYGhcSOJlOt0zR1CHwqtaQHiMy5iAarJ8C5bE=@vger.kernel.org X-Gm-Message-State: AOJu0Yyc+urpfsXlUmcNiCxxmreC2G/75SH+fAwfzy71MOieOXqHJmh1 uoBf8HLAgt57FZavvO9aqU0fqPn5hrkBOEsagoMKu9n5jupiv+dXJCE2 X-Gm-Gg: AfdE7cmT1nZc6bEDKpXniQ3FBt7i8CwOdtNiTSEvukbg2ZWD2RYyfPLu3wXG7FvgVEC bnUP8ri0h0bYzHUsZ9z/3FvQspjbsrwRjXflSDhIYra66fXbldB7c3nKWoq9ixRu9X7gOajj38A d6ShCrIRzC/COpnZD/Ss49Cjmymv5eIPmK0smdPA0v3whb6t/ndXyD6igAhuVU/mVGtGhjJQYAD wDWZpluuTJoy0fy+aTcnJRxonGnFokw3mquQpgnlHwWX86Mv+p88HW+nXRoLOgxUcAlTAJ43SmP XOVedqhiVPPWrq5Xjp2cUhcn0r8AiJuyk1OmxBdfJvlXQTFffvgMSR/VAN4MJQq6tzb9NZvhAyj YCqH7BkTbZdGi3lTGuYb4MiVVqQ7f+jsLW9fu763ZG0Lnw0SYsbEMl3lA1bb1g0nXBx0AgtnnV0 Pv16I7K+MZMcsV3lan9XFprJ7YfoYcsAXAlBJCDjzk2yHQYaSg X-Received: by 2002:a05:6000:120c:b0:478:2698:72f4 with SMTP id ffacd0b85a97d-47f46391de5mr606462f8f.45.1783965131085; Mon, 13 Jul 2026 10:52:11 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:10 -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 v20 10/12] mmc: renesas_sdhi: Make HS400 OSEL bit configurable per SoC Date: Mon, 13 Jul 2026 18:51:51 +0100 Message-ID: <20260713175159.138334-11-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 --- 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 39d915da6f38..30eaa501664d 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; }; =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 861fa83b9980..57c7ec5424b5 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 e78dbcb6c887..6a1b59d2e837 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -129,6 +129,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), }; =20 static const struct renesas_sdhi_of_data of_data_rcar_gen3_no_sdh_fallback= =3D { @@ -147,6 +148,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), }; =20 static const struct renesas_sdhi_of_data of_data_rz_g2l =3D { diff --git a/include/linux/platform_data/tmio.h b/include/linux/platform_da= ta/tmio.h index e6663cc736be..6443ba01c723 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -72,5 +72,6 @@ struct tmio_mmc_data { unsigned short max_segs; u64 clk_mask; unsigned int max_divider; + u32 osel_tmpout; }; #endif --=20 2.43.0 From nobody Sat Jul 25 20:49:13 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 7B178353A68 for ; Mon, 13 Jul 2026 17:52:13 +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=1783965138; cv=none; b=IQLE1Kp0kUL0SEOCnAdQB8+q+/3Y2dlwHp7uqBPL82T5OeJLUcN/m29v61Y1jxGluhDR4Ho0CoROl6/VfVT9pXldF4yQqEJ9ut4yca36UL0Ln0ilLUFr9QMDlDOlZjAcmqDvNSmqEl6SsFf+iOBjLK5UNjhOBClM8Wxq7C0Xd1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965138; c=relaxed/simple; bh=F53C1iqXRlAlwJORWbbo5ELuNRayWLZ/7gJR9Tgg2wM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XEJsk/hO53CJk+tN6fmg8RUVk82Jp90NzxldwoOGNZo/319WEwdkqNxArUzhpZMtRhwnM7u5/7ncsXj0B3IlbN9/X9MjxKPifihbna9Ih6LfjHTfFnSF+MByX+JiODlLsJMunhEZwFyJgIZb6aOlM1SLuqSD6+8s9IBZhVj1lbA= 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=M8x+REp1; 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="M8x+REp1" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-471eeac43bfso3381514f8f.3 for ; Mon, 13 Jul 2026 10:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965132; x=1784569932; 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=r8hQtV9FPcGQLOAT5ebUGqKZF7X40ZDKPlKwg5vLNog=; b=M8x+REp1+4vmBxJSpgY4JKdSxcYUDGtINh2IVxShgmFKfrpx6w5uLxr8VpdpTsUW4M 9+VLpNTs8S78bnljLbfxoWZfDsv40tV7EwkDD0NnHp7dPXSs1clrhA1AbtLkQ5yw9Nyc 09//tn7+7Rx25rbDAbLp9Ihk7TbKS+WrC1zm7uLACpijE6xMtpeSTUExm3dJPcOT/U51 K4kTZyykHefOgoAkncHybHXmDmaworQDt9XI72UakQEV2d4y6I1ttil9+rzGOWKi3gQm ubKMG4XdN+2O9ZkYcJ+S8+APO4GG9fobHHtKjE2Hs/hW4Qu4dvXMgBPiusynqRpCcwaf SwDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965132; x=1784569932; 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=r8hQtV9FPcGQLOAT5ebUGqKZF7X40ZDKPlKwg5vLNog=; b=jYJYbbSNd3IKeYYgptO2vsGYuwhZn+gOwSO6ZmAQ9yqoq9EQjZ6efKtA9If0XoFgnk jQplCz7ySGATHUqde7I6kphs2KgG2+35bsng0+FFdxHNwmEEFzbCJhP/zSRr74q90imu Lypa/mmXW0bipUrGx3fNsUWSnpayvvyo6zYPVNBikD5bdR1ZtYfqm3vzfpPaREK57/5x ohI4j0xT1h8Ljab135vi374VrD7Rl9Y7yHAh9dZlOFSC6C/zigrJhQGulDAPYV7Rx/ps 1cTHB0fPJ8qsxr4iRxrfIPvt7CiNPkDijBxzEV4haBASXLRkZ7C/eaMq9itWQ0sRaDcg Hsaw== X-Forwarded-Encrypted: i=1; AHgh+Rp9uaZTmj2/0yc03UhsaVM1M9GMf8/+odZxdvdKjjdZ3Q8urK7Q42OHZRX6wde2zk01gXnbAWt+e7eVXdQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxft0lyeqXBPXRBZ5zOO3DHw0UJKAXAisgVJJ7jt3HJo3o8VHWi w3F3b2drLxANX+k2oOKpLsCgdH3Bd9QaVWSZJCOICARagWyiSAid04Lg X-Gm-Gg: AfdE7ckIY3G8lkNfQIVcPuc8mErOKAdK5PaDvmgqVehEdymZBm3Lv4xQHXPpEAqArD5 LsETkBobj9Q3GKfbmE+zaxhF3PjM5ELLkNW5gIY3uGceaZ6R+D/ymf3xfOoSGAQzCugR5GIhQga yEUGjLHlR0HKxODgmDukPHMLkoNCglMHwSDnbVw/sxZYFucUWInhSs/wpPvCqNs/7T3SMYnPU+Y vmGbYF9dR9bOrxYPPVFwNpfYsosAlv1iqZtKCHdai/lDRMN9X1Hlp5oiZ0Rl5z23ZAc5N9xBa6/ llpDAizSw7Uk5TLvtPEH6CRhjCNKAKPzwas7U94yid6nTyhjV06y7UszIp+8jBbAL7oyC7cioxe VPPChP9OVrGzITTx7qYeS91qnCk3t0gHUSSGGqHJSOqptSzyt1ydEqYNAEhb+LJvrL8jmfWUF21 poc1g+SZPCnVBJqwoo9M2eBbsCKmzVmo1+Ul/+WdYMGDvxAgIBchaoqCiZoYs= X-Received: by 2002:a05:6000:2310:b0:47d:ef38:260 with SMTP id ffacd0b85a97d-47f2dcbf3b7mr11365717f8f.27.1783965131808; Mon, 13 Jul 2026 10:52:11 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:11 -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 v20 11/12] mmc: renesas_sdhi: Add RZ/G3L HS400 support Date: Mon, 13 Jul 2026 18:51:52 +0100 Message-ID: <20260713175159.138334-12-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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. Signed-off-by: Biju Das --- 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 | 21 +++++++++++++++++-- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 3 ++- include/linux/platform_data/tmio.h | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 57c7ec5424b5..4cab7a85d517 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -292,6 +292,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 +325,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 +461,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 +606,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 +766,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 6a1b59d2e837..4000673ed7f8 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -174,7 +174,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 6443ba01c723..8a5dc18d43da 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 From nobody Sat Jul 25 20:49:13 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A55FB352018 for ; Mon, 13 Jul 2026 17:52:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965138; cv=none; b=li1o53mRI++iCMfXbJ9JEoaT/i2VleCC6Oje5+kSgxnohtZcU6/FcZAAWDc1xH2NUA/a99HXpG0fpSsVX4ueycER+axJDh7wRWLtBnLe8TaL1udbNUEIyTbvItI9Z+t5w9AJAI1Jwl7wG3sJkHZ0T7sGKlasaQmztL+QeUGeoeg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783965138; c=relaxed/simple; bh=WfePVuMcyWwUoa/S8B4Za1awov3gH3tCx2h6SypzY/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bALHfPtz7Uq2hn0J0VVjj5T6sdGDnn0NBsQ5t437c/vApJbhXWmi5Y1p1Dt1qWePHJH/sKMCmzSItI4mA8FYlcaJSkeS0jeP5iz/2cbRYEMTFjPOi7/hVIwtlZ24Pb3IFVPXxQZWG+aXvkrJs6W7qYsQnX04hoQftr4CWQb0mWo= 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=iV7jbOus; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iV7jbOus" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-476a130c138so136167f8f.0 for ; Mon, 13 Jul 2026 10:52:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783965133; x=1784569933; 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=JCNvx4H5sDk7dEgNHijSOPephvBQqGBDLMkUessOnek=; b=iV7jbOuszBCyfzKhVDEapM12C9BDSv2tDuD4qHPn+AUeSNRCPZ3C06ygXScBSeJqe4 6/pDyW74/z+6PN6Tm6TdfiG/OJ4zyYS/IPw+89bdVUnXyDq4Itpzv9WhMqKn3H1oasLR Nv/R6irdRJOUFGduewP8g4EJ+JRxBewk7K00mzjPJVH3rBRbnjwvQQLuXrujXQyOilkD VR8xuFiwpfZdTF0vyjX07sIkew19tvpZtxrK695G7eN66H8fPoU8WHeG3i8J+uSoz5jl 4w63Q2YePSTmWKyyhNvBoRc9JQ+5M5aWtqcBClCuPn2QrcsUt/03Fv+jIphok1T44sFT y8tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783965133; x=1784569933; 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=JCNvx4H5sDk7dEgNHijSOPephvBQqGBDLMkUessOnek=; b=N/SAcF0ixABZyui+jgaBm8W1vNtATz8/qF9QEA/uZXDupUqSiYEtj/UQHa9tQuQQ56 5GuPrY3mxVpoi3mwOSsnwDm9HXYCsIcvHmKHIvzexboHZsoa15j116KI8E34oS7BszIM 6s6rYXVYtzcBouLHwqL60Sx8xqG6MQjMMr5wShVX8mwrV8ZUG72UCEagdejDIXeXm6ed uqDFQSMIw4UB7idiEZyul/2iCRB/scJiKgHj2+lGqIvFcHky72Hdl9iidR+zeDWc0/+N B5JDozuaIZjQW8SdZUVqieXl7DQSe1UsUrDYzilY5wMS0GaKYhSnzDScVq/JS1ylLY6B Y05g== X-Forwarded-Encrypted: i=1; AHgh+Rqk6DQ7vV2VoRo3gdRuL3SH8fNKv08NGL3aNosfbGzYV5NHoiTMKnCsBTG4yY+E8h5Z0yPY/PefBRu88fg=@vger.kernel.org X-Gm-Message-State: AOJu0YyhzuUHT6ikI3V8zwvgZ8DJW8Z9BLj1M2wQW139WLH0RMaqLklf fftOTw1CCVC0eAww8YOi9WhZ/FLFUmVm3xKaSn4SmYKD2a5ZayLC9U2I X-Gm-Gg: AfdE7cmkWu/Fc0u9AtxUw53mztncNIGFQFv4UDzE3siDjlBvEyvQcjSouF7is7bA7Gm iK4EcTw92Ds1/LIKhYXtmykdGtNe9DWtkxoMkY1XGsLWellXO6bzgzY+9GVySwc8A7X03GZSo48 1X6z89V20bjS+19SxdcHScogbwJnJq9iGL2PgNrZ7vifn/vocS864sOdotrG17uFkdEMaZq8MgV uxLILo/1UZ4ZYWtTWh9Ybv3cE0skIVLMPJzzXfLGCq9/Uj5OlLj0Hgi8PYeldSQv2AXMVd9fB8W IoL5KPuUi1Od3CMGfI6H5g3LKxKQG/8SK8SvmQMf8jD94/n8sT5hBGt38B5CdFKi9VULN2uBNCr QIQ8/Y6RccWRK9ppGJDeleci+lHjc0HQlT610PoJvpkyJ3jHEeFYhnZMRUzNAk1NnP6c2iYa/q3 8jDi5JtW/msVfb6qns+3poxcrc7XcqhLxlJET71Q== X-Received: by 2002:a05:6000:240a:b0:46e:483c:2262 with SMTP id ffacd0b85a97d-47f2dcdecc8mr12444575f8f.14.1783965132596; Mon, 13 Jul 2026 10:52:12 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a702:d301:c899:4fec:2bdb:b719]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f464d6fa7sm1011037f8f.37.2026.07.13.10.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 10:52:12 -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 v20 12/12] mmc: renesas_sdhi: Add HS400 enhanced strobe support for RZ/G3L Date: Mon, 13 Jul 2026 18:51:53 +0100 Message-ID: <20260713175159.138334-13-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713175159.138334-1-biju.das.jz@bp.renesas.com> References: <20260713175159.138334-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 supports HS400 enhanced strobe mode, which requires additional SCC register programming beyond the standard HS400 path. Introduce a TMIO_MMC_HS400ES flag (bit 17) to identify controllers that support enhanced strobe. Add renesas_sdhi_hs400_enhanced_strobe(), which, when ios->enhanced_strobe is set, disables DTSEL in SCC_CKSEL, clears TAPEN in SCC_DTCNTL, programs SCC_TMPPORT3, sets HWADJ2 to 0xFF, enables the HS400 interface mode bit in CTL_SDIF_MODE, sets HS400EN2 in HS400MODE2, and sets both HS400EN and the new HS400MODE1_ENHANCED_STROBE bit (BIT(30)) in TMPPORT2. On exit from enhanced strobe, only the enhanced strobe bit is cleared. Register this callback as host->ops.hs400_enhanced_strobe for controllers carrying the TMIO_MMC_HS400ES flag. Update renesas_sdhi_reset_hs400_mode() to also mask off HS400MODE1_ENHANCED_STROBE from TMPPORT2 when TMIO_MMC_HS400ES is set, ensuring a clean reset on mode exit. Enable the TMIO_MMC_HS400ES flag in of_data_rzg3l to finalize support. Signed-off-by: Biju Das --- v19->v20: * SD_CLK_CTRL clk enable turned off before updating SCC_CKSEL_DTSEL register. v18->v19: * Updated commit description. * HS400ES support is enabled based on of_data. * Fixed the space in HS400ES comment block. v18: * New patch. --- drivers/mmc/host/renesas_sdhi_core.c | 55 +++++++++++++++++-- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 2 +- include/linux/platform_data/tmio.h | 3 + 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesa= s_sdhi_core.c index 4cab7a85d517..5d9a3dc814c7 100644 --- a/drivers/mmc/host/renesas_sdhi_core.c +++ b/drivers/mmc/host/renesas_sdhi_core.c @@ -311,7 +311,8 @@ 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_HS400EN BIT(31) +#define SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN BIT(31) +#define SH_MOBILE_SDHI_SCC_HS400MODE1_ENHANCED_STROBE BIT(30) =20 /* Definitions for values the SH_MOBILE_SDHI_SCC_TMPPORT4 register */ #define SH_MOBILE_SDHI_SCC_TMPPORT4_DLL_ACC_START BIT(0) @@ -592,6 +593,8 @@ static void renesas_sdhi_adjust_hs400_mode_disable(stru= ct tmio_mmc_host *host) static void renesas_sdhi_reset_hs400_mode(struct tmio_mmc_host *host, struct renesas_sdhi *priv) { + u32 val =3D ~(SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN | host->pdata->osel_tmp= out); + sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN & sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); =20 @@ -601,10 +604,11 @@ static void renesas_sdhi_reset_hs400_mode(struct tmio= _mmc_host *host, =20 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DT2FF, priv->scc_tappos); =20 + if (host->pdata->flags & TMIO_MMC_HS400ES) + val &=3D ~SH_MOBILE_SDHI_SCC_HS400MODE1_ENHANCED_STROBE; + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, - ~(SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN | - host->pdata->osel_tmpout) & - sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2)); + val & 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); @@ -809,6 +813,47 @@ static int renesas_sdhi_execute_tuning(struct mmc_host= *mmc, u32 opcode) return ret; } =20 +static void renesas_sdhi_hs400_enhanced_strobe(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); + u32 val =3D sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2); + + if (!(host->pdata->flags & TMIO_MMC_HS400ES)) + return; + + if (ios->enhanced_strobe) { + sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN & + sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); + + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_CKSEL, + ~SH_MOBILE_SDHI_SCC_CKSEL_DTSEL & + sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_CKSEL)); + + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DTCNTL, + ~SH_MOBILE_SDHI_SCC_DTCNTL_TAPEN & + sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_DTCNTL)); + + sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN | + sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); + + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT3, BIT(8) | BIT(9)); + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HWADJ2, 0xFF); + sd_ctrl_write16(host, CTL_SDIF_MODE, SDIF_MODE_HS400 | + sd_ctrl_read16(host, CTL_SDIF_MODE)); + sd_scc_write32(host, priv, RZG3L_SDHI_SCC_HS400MODE2, + RZG3L_SDHI_SCC_HS400MODE2_HS400EN2); + + val |=3D SH_MOBILE_SDHI_SCC_TMPPORT2_HS400EN | + SH_MOBILE_SDHI_SCC_HS400MODE1_ENHANCED_STROBE; + } else { + val &=3D ~SH_MOBILE_SDHI_SCC_HS400MODE1_ENHANCED_STROBE; + } + + sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2, val); +} + static bool renesas_sdhi_manual_correction(struct tmio_mmc_host *host, boo= l use_4tap) { struct renesas_sdhi *priv =3D host_to_priv(host); @@ -1361,6 +1406,8 @@ int renesas_sdhi_probe(struct platform_device *pdev, host->ops.prepare_hs400_tuning =3D renesas_sdhi_prepare_hs400_tuning; host->ops.hs400_downgrade =3D renesas_sdhi_disable_scc; host->ops.hs400_complete =3D renesas_sdhi_hs400_complete; + if (host->pdata->flags & TMIO_MMC_HS400ES) + host->ops.hs400_enhanced_strobe =3D renesas_sdhi_hs400_enhanced_strobe; } =20 sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask_al= l); diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/ho= st/renesas_sdhi_internal_dmac.c index 4000673ed7f8..ea993197aff2 100644 --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c @@ -175,7 +175,7 @@ static const struct renesas_sdhi_of_data of_data_rzg3l = =3D { 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_HS400MODE2, + TMIO_MMC_HS400MODE2 | TMIO_MMC_HS400ES, .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 8a5dc18d43da..75d32c8ee57a 100644 --- a/include/linux/platform_data/tmio.h +++ b/include/linux/platform_data/tmio.h @@ -62,6 +62,9 @@ /* Some controllers have HS400MODE2 */ #define TMIO_MMC_HS400MODE2 BIT(16) =20 +/* Some controllers have HS400ES */ +#define TMIO_MMC_HS400ES BIT(17) + struct tmio_mmc_data { void *chan_priv_tx; void *chan_priv_rx; --=20 2.43.0