From nobody Fri Sep 25 16:53:58 2026 Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (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 908363D1CB5 for ; Thu, 10 Sep 2026 10:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789035970; cv=none; b=SNiDBcibSW1znUExY5KY6ouexQgfkMbxn5cYAY4G3cZlOrS2VXFvhG3fHW6AZKbDvKDgbd07JgxvbLQwlvSxyKDoDWA65fBREmTpP+Z+C6zNPGTDmsZEoHs+139jh47nH79TPw2Ek/Ir9X8fhStDTVd5e2OZ5Iuvz9PrNneIoKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789035970; c=relaxed/simple; bh=dGwRU59pe0sF4kjsOhQWQNnHY2FCR9s7ump401KQyLE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KhB6zUahAXvylBqG5eKuXH/Qt10S6Hce7nVa8ksAVQWTDBWcKlrvDQuKnb33jyRicCf6j3qnt9K4GaGLHjZdgKKxrTA0spMLR2/yXuGvAXQb6SsPz8INIQdWEN6shKsDMa4aj5LYrAhxmGgHaVhvH6FJt+6u2O0mFlkxQaHmQVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=nbWGcsn0; arc=none smtp.client-ip=74.125.225.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="nbWGcsn0" Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49b912e64ccso8797145e9.0 for ; Thu, 10 Sep 2026 03:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789035940; x=1789640740; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=zolPHkX75MVfEQoqJHx0lnD2lNS7PbBbxJvARPQA/YM=; b=nbWGcsn045uo6XPq7tedjpucMH6Nj4Zlk5Rpz358RSHDntO5Ci8TAAtj6Zleds4JQm 0YuN34Oe9loRgKxYGMoEe1sDyeA/aLgjEKHXn73nZc7q5NaMlBBRBQ0sEbqe4ZvV47TF KSzhCwNFDecdFG6dgyMIWtDXD6DEL6+XmrJOrkEl8ps15O/H7MOD91ETRIE/fZG2xnjw OTrB3b9YX5DhQcAIZpHISAdxIsLTHVpBcWK3kEEVDKHR6ccQrLXDZaFUf5lIDXb4Kfee ouwNXUYkC2E1IQtDwnLfSKDvRIQ8Bl9mHH4OqRo3iyw3bxRWzmKNe1IGFc7yMENbb+a5 TPTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789035940; x=1789640740; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=zolPHkX75MVfEQoqJHx0lnD2lNS7PbBbxJvARPQA/YM=; b=Eq/AVirc6rC1d71iZKKCpjBqyFFe4ppWRnilXuV/TFT+mICj4+Yn0xqPlBeCRg2ykY zV+72+JFhzktpa8U+0UhTvjXRLMFlAjdBRu2PJfAU67WVTp03QUMzkEH4KOgnrnDDgmO z1nCFXp+9WHMle7qmusYLD5jFbHHyBTxPOUVeVC3WcecUNBe03vmqEBIjAev52QGKByn 3NqEd4cbxpHOrSlwsQmcT2MlfNUuDUeB5jxDKBE6EzYxyKK6Q6N/x0+ca5hj/DlKbGhf WvwlisZbDa1xZzQbfjKr6T+2oNpk799q/Ea2LKT151oL+OXo/VCimooEKOPfVmkrUkV1 EVvQ== X-Forwarded-Encrypted: i=1; AKwUvBxOPM6tnJun4322+D5oj3mMVrzlmU2aHuSwwxm8QgZ3UuQ6FuZV2On7XUb82b7B4sVO9pY+xxBk21wzhvU=@vger.kernel.org X-Gm-Message-State: AFuF++keiB1UquxsYGXfbTRtZ7bG0H/c8c5vWPXV0CNCoz3fn7TD2gy2 6GtDVkuX2yofy8o6gnvfKOJWTgJZ5QDzrAPvodeCFTiUkQigeNIIN1IZGT7mZ3YaHrY= X-Gm-Gg: AYBFou3jnQBgSkjQ0/966IOG6ys5jRwObLohybLNFF04VumlVcpr715+7bQ3aS5UV6c +0yl8PbR68sUiFw3TvE2M43AtvkhePlStg6QwJrqqhwypyjbmL08NZuFbN2/JfcvYkh2PQ5JYn9 IWUelk0SdDs2RTFjsX5eaAE3mdstaO6OZtxa2WUL60dEvG6esuualcjjWh4bKgH6vCijhihLYPi LI4tahbwB4iwJV0Y63znw6XBojEyKmFJO1Wx92KXUE+a8HBslMwP1XHp1xKN/XtGlRlS2YuA3sl +SMp4ZEI0Ubj+leVFMdgi6rO9Nfs6KKPQRZJ66cdASybK1B5YFym8dtJmekmCgfuea0HMX2K04T MOdLYVrYEt3AWRThL+k8Kr6RpBcBifRKmC/KZwYaqbsqIUPr5PA+jSPY6rQ41gu1Md0oeGxi7/X R3V9A9ptUgXMHv6L3n2WhLCQPkbdTL1lk/Eu7tBtWH0XpD32JwcLePUtiRN7ckT4qSg5QWEIQXH 6qk/wo0LYNRL3cRi8qHRO8hrFHL X-Received: by 2002:a05:600c:5647:b0:499:b65e:49c9 with SMTP id 5b1f17b1804b1-49d259138bamr96347135e9.10.1789035940023; Thu, 10 Sep 2026 03:25:40 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49d26c07c17sm80398975e9.14.2026.09.10.03.25.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:25:39 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:25:26 +0200 Subject: [PATCH net-next v2 1/2] dt-bindings: net: sun8i-emac: Add A733 GMAC210 compatible Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260910-allwinner-a733-gmac-support-v2-1-4f4a1e520c23@baylibre.com> References: <20260910-allwinner-a733-gmac-support-v2-0-4f4a1e520c23@baylibre.com> In-Reply-To: <20260910-allwinner-a733-gmac-support-v2-0-4f4a1e520c23@baylibre.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Richard Cochran , Maxime Ripard , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Maxime Chevallier Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, Andre Przywara , Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=6093; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=dGwRU59pe0sF4kjsOhQWQNnHY2FCR9s7ump401KQyLE=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqooWeZxMiwo0um19rhs5hPFUy/F70TN34N0ekt c3qzsdT2TaJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKFngAKCRDm/A8cN/La hZejEACg/bnxpg1KnlHEiJc1VDPDY/+8Ow0tT+fJQXkXgHPAU+MRARUHKSaHbj+FMtI5pbY64+b UkybYmYJ9kNkhCCZqTa3/mp9jzot/dvYXHo1H0FwBgLVmEa2h73TBHdkAjG5xD+OkyCXXU7GmXb HEzv8RGdsYOdTX/ixDdAEAnlwNs4yHRQmCGGXZtIwKDQPXbt1I+LT53o5ybGtdPsO92fx0Aalgo 9bNcYqKqYAOffOjVIekKYLXlND4noSrjNk7qTpOffkNxApJZceY/jPhVHnPa/A4UpAQ4npCdvw0 q90kfKOaPWDj2dmWKAtODernP/0mY+4Ahp1z6Rm4ytDnQ2z+nk6q6kjZh3iB1SjDF/CC0yueScx qXFJluTkuPAS/1mgYmwlhQhduO0oehARz+k6UUwJygDhgeQtdVR5pS3Jpb2dg7ECCxAqMoOZzJ7 BlCrQUuX30rB7xmkBRhBf1V4iF9lUOr3P0wftVWp3W3P8+845yd/7fwVelvJOkIST8hN94YZ2EB o2Zze9jYQDRlvmtiy745TjgdrCArVVZt/DuDe6unpPK27lLul9wAU3I8aHV0bW8n24c7kHADMzW x3PvX0rb7p5jFJntcdzqeBjvYoQYzb3Iodqa9A2Rbn29RPtMbAQB7rRfOjr7VWQofw3W/OAjcc/ UHMDa2b4r0x4qRQ== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 The A733 GMAC210 is a DesignWare MAC 5.20 close to the A523 GMAC200, with the following differences: * The glue configuration registers are a dedicated MMIO region of the controller instead of a syscon register, so a second reg entry replaces the syscon phandle. * The DMA channels and the LPI event have their own interrupt lines. * A PTP reference clock and an AHB reset are needed. * Unlike the A523, the controller does not appear to belong to a power domain. * The TX clock delay field is 5 bits wide, allowing up to 3100ps. Add the new compatible and describe those differences. Signed-off-by: Jerome Brunet Reviewed-by: Rob Herring (Arm) --- .../bindings/net/allwinner,sun8i-a83t-emac.yaml | 130 +++++++++++++++++= +--- 1 file changed, 115 insertions(+), 15 deletions(-) diff --git a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-ema= c.yaml b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.ya= ml index 323a669fa982..fec42f46378a 100644 --- a/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml +++ b/Documentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml @@ -22,6 +22,7 @@ select: - allwinner,sun8i-v3s-emac - allwinner,sun50i-a64-emac - allwinner,sun55i-a523-gmac200 + - allwinner,sun60i-a733-gmac210 required: - compatible =20 @@ -44,25 +45,38 @@ properties: - items: - const: allwinner,sun55i-a523-gmac200 - const: snps,dwmac-4.20a + - items: + - const: allwinner,sun60i-a733-gmac210 + - const: snps,dwmac-5.20 =20 reg: - maxItems: 1 + minItems: 1 + items: + - description: MAC controller registers + - description: Glue configuration registers =20 interrupts: - maxItems: 1 + minItems: 1 + maxItems: 4 =20 interrupt-names: - const: macirq + minItems: 1 + items: + - const: macirq + - const: eth_lpi + - const: tx-queue-0 + - const: rx-queue-0 =20 clocks: minItems: 1 - maxItems: 2 + maxItems: 3 =20 clock-names: minItems: 1 items: - const: stmmaceth - const: mbus + - const: ptp_ref =20 phy-supply: description: PHY regulator @@ -87,7 +101,6 @@ required: - reset-names - phy-handle - phy-mode - - syscon =20 allOf: - $ref: snps,dwmac.yaml# @@ -219,36 +232,94 @@ allOf: properties: compatible: contains: - const: allwinner,sun55i-a523-gmac200 + enum: + - allwinner,sun55i-a523-gmac200 + - allwinner,sun60i-a733-gmac210 then: properties: - clocks: - minItems: 2 - clock-names: - minItems: 2 tx-internal-delay-ps: default: 0 minimum: 0 - maximum: 700 multipleOf: 100 description: - External RGMII PHY TX clock delay chain value in ps. + Internal RGMII PHY TX clock delay chain value in ps. rx-internal-delay-ps: default: 0 minimum: 0 maximum: 3100 multipleOf: 100 description: - External RGMII PHY TX clock delay chain value in ps. - required: - - power-domains + Internal RGMII PHY RX clock delay chain value in ps. else: properties: + reg: + maxItems: 1 + interrupts: + maxItems: 1 + interrupt-names: + maxItems: 1 clocks: maxItems: 1 clock-names: maxItems: 1 power-domains: false + required: + - syscon + + - if: + properties: + compatible: + contains: + const: allwinner,sun55i-a523-gmac200 + then: + properties: + reg: + maxItems: 1 + interrupts: + maxItems: 1 + interrupt-names: + maxItems: 1 + clocks: + minItems: 2 + maxItems: 2 + clock-names: + minItems: 2 + maxItems: 2 + resets: + maxItems: 1 + reset-names: + maxItems: 1 + tx-internal-delay-ps: + maximum: 700 + required: + - power-domains + - syscon + + - if: + properties: + compatible: + contains: + const: allwinner,sun60i-a733-gmac210 + then: + properties: + reg: + minItems: 2 + interrupts: + minItems: 4 + interrupt-names: + minItems: 4 + clocks: + minItems: 3 + clock-names: + minItems: 3 + resets: + minItems: 2 + reset-names: + minItems: 2 + tx-internal-delay-ps: + maximum: 3100 + syscon: false + power-domains: false =20 unevaluatedProperties: false =20 @@ -412,4 +483,33 @@ examples: }; }; }; + + - | + ethernet@4510000 { + compatible =3D "allwinner,sun60i-a733-gmac210", + "snps,dwmac-5.20"; + reg =3D <0x04510000 0x8000>, + <0x04518000 0x1000>; + clocks =3D <&ccu 58>, <&ccu 59>, <&ccu 60>; + clock-names =3D "stmmaceth", "mbus", "ptp_ref"; + resets =3D <&ccu 30>, <&ccu 31>; + reset-names =3D "stmmaceth", "ahb"; + interrupts =3D <0 175 4>, <0 179 4>, <0 176 4>, <0 177 4>; + interrupt-names =3D "macirq", "eth_lpi", "tx-queue-0", "rx-queue-0= "; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&rgmii1_pins>; + phy-handle =3D <&ext_rgmii_phy_2>; + phy-mode =3D "rgmii-id"; + snps,fixed-burst; + + mdio { + compatible =3D "snps,dwmac-mdio"; + #address-cells =3D <1>; + #size-cells =3D <0>; + + ext_rgmii_phy_2: ethernet-phy@1 { + reg =3D <1>; + }; + }; + }; ... --=20 2.53.0 From nobody Fri Sep 25 16:53:58 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.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 920C03D75A0 for ; Thu, 10 Sep 2026 10:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789035966; cv=none; b=tITo+SHlPcwwfzqSJQEak8xXgYHVQ7ooBy0Nd7xglGfWAzJd7dtNtgunp9bpoJr5VX5ftDJTalqqSiOfCK5EnNCHsqCiN5ttXkY9MBOl9ghrFCLMOTNFC5/0EuRCiFbpx+M7LYvGi3ABUr/eGRiHK2ajlRDbzQRXggffJtfCxmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789035966; c=relaxed/simple; bh=iiviwEqL5gcgoRgKHDKcynyJRZSYhYM7KijUYtaKBco=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p3lNioh0suxMquDwetXDWX8W2i9Xqu8FJ/smKq+vWwmBn0jB8jPuhjnsZS6h7P21UIrXXr2+u/B09HFrINuy8A88HAB+v7c4MKs/UrBNh4Lum7jFGs+4h/lJwjc7PG57RhqwMRH9FowVaJD9mrQwgIUrCbbOO2VrRWvd+GFV3ww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=OKMfMqYM; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="OKMfMqYM" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-49d0da752ffso50099425e9.3 for ; Thu, 10 Sep 2026 03:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789035942; x=1789640742; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yhS/iPoMN1yZRTKWNj0A3kjmWq9kDJx/qF0c8CAbTAw=; b=OKMfMqYMNWL2p1Filyvbkw64DoUvkcIff3HsWr7JXgoLZhXSslk8DcTY3aVANHtILe bbJIvSAdRwEqu0PJdzN462KrF/ZQvPHLdR7F/ytLHqqhLjDF1Y3CwWqUqG/FH0DEVKeA ZCO6f7LYTnxfvP4m9cO+WBV3ZPI1bzp5gT7UM5oGZpCBl81pwAmWGJufyrGgXvJR1Vvu v/nndugDdpMWuPsM0eIgEfCjzWeQ1i/cwoT6X+35RMZmFJ5U9cAzwNb6CguqU9RJ6n16 d4T/5SG+TWh0Fyq4YuQsvBYE0AudiqyOa8UeDJAR1LUSi50odsf1KWJwVSBntny8Ng25 jc6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789035942; x=1789640742; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yhS/iPoMN1yZRTKWNj0A3kjmWq9kDJx/qF0c8CAbTAw=; b=IS+vOnCslgYGIkSzAkiTWWW0LHFsnU8vnUT3m1Omb/JPvcSE51Vshwuc9nowaw4PR2 xsK2cWwoAkt28oQzQ2Vs/P4npG1idQgxXCg6yKGVy5LGsBWfin9dfOMkr4zxCsWWBU9/ 9gwgec7SCJHJMNWQnZdpi4sGULXw53Ax1c9+JS+ysdA3s5wk6Il84mW5Dj6VY4iIiQpe yUk/6oK03QWcC5kTf+lO3HOuxNu1FXzlxofCMcfL6xUridbvWjazSfqP1CjiltbyhSCi ONqkDF++8+ClVEKNiEwjtMJIQrFkkvD8ZdOqh5hPYNGZX+VoV9zdt15JeYaG2yBEhYyh nIEA== X-Forwarded-Encrypted: i=1; AKwUvBzWVyca2YgPi8ua9rEZO5d/EfN4blviq6jxJF9fSOUW06vA3p+/k9dE1CzMk8uGv5U2vhWFPJnBN9fqMHM=@vger.kernel.org X-Gm-Message-State: AFuF++k6fj8QszXcq6Yw1ZrNLVpK8+V4KawgwhhU08FEu+pYNiwBy0+w ynliLNLBKLMo8/ihnlb6tlenFjrasrwronaWCtJrGvQGHMx/YhA72uXB7ouz60ItZug= X-Gm-Gg: AYBFou366c7QCBrUyslCuP5te1QwY9BIfHTmhjO2MyyiFO9ugUyHrakZ+nz7a/pIn2k q+iEdCor4GliWX/lY3rhoRmRGBiiUJSbtI76ZvDsByOvhHyIjvIue8PzURVoyTXdY/E9AUqm3u4 54DbU9gDu/37mOl3fb3zU+I7uOS0sizaqIHRf+sqajVJReTxJJGHluhwOnltHP5l3CRm7pn5EGr m9kkzFYPV0SSpiJUUWtZcw8pCehXBRoK9WK2A+tMPVlqmi0nUB0SBdoP61+oXllsBD4wGFCK7No 8AcjPsNcVpeJZ1sbCROOONHWThqo9X1rOXgZ6i4Lar24YdqzVLKEfgwWVIPphWZH85TSH3cmeST 0AhL7IdAjd1EGQiXxz6inaLY66PqY/cJKHGH5wmsb4zJfcmE3U5Rc94tGuCmiLkw/ANBVzhO/Gb eLyN0+muPF925l5gOJqDyunJcW0fxHxRygV/SMtJrExG9UiSbcw4RKbjQJjPwKtJxrS+bbhFCDd 9Ln8QCUEKtw5aslFg== X-Received: by 2002:a05:600c:3f0a:b0:49c:e27c:6b10 with SMTP id 5b1f17b1804b1-49cf81e4a10mr395443005e9.3.1789035942111; Thu, 10 Sep 2026 03:25:42 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49d26bdb789sm73960825e9.1.2026.09.10.03.25.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:25:41 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:25:27 +0200 Subject: [PATCH net-next v2 2/2] net: stmmac: Add support for Allwinner A733 GMAC210 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260910-allwinner-a733-gmac-support-v2-2-4f4a1e520c23@baylibre.com> References: <20260910-allwinner-a733-gmac-support-v2-0-4f4a1e520c23@baylibre.com> In-Reply-To: <20260910-allwinner-a733-gmac-support-v2-0-4f4a1e520c23@baylibre.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Richard Cochran , Maxime Ripard , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Maxime Chevallier Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, Andre Przywara , Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=8196; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=iiviwEqL5gcgoRgKHDKcynyJRZSYhYM7KijUYtaKBco=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqooWfZVqP4h/FmhnIkFcpRFeUK9vhz7B5BXAfH GVm2YN9pAqJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKFnwAKCRDm/A8cN/La hXUXD/9O9GcDsf6tEVteDWeDc13oqB3BEWwUiSNY8QkNQ/MlOz1JVGD1oJDrUYGAP7c/bT18jFM e+Zw8PmFy1XGty3EQPeh4vYiTiMyQoul16KwvltYnhl/1p4RaVg6RhZZJvRqss/qQOfVwgh5mK0 X/kbiq0l/7jcZ6ruy6sHPn/6o72QxBlVcIsb1YmsNCiRAvGiOQKnjEXaTKQ7k97kHrBNshJK3q6 dQG5nqbvdEd/jJoF9n2jBGWfrdF1fd11YAhSOkGszVCmMFoICkwKRn1Rz6m4eaJS3glbenr7hZ3 SMZ4004904VmgGCiQK/ZVr3BvOXSI9p3TKqtj9T0c2kEjH2NtXzWwWLfEOed39FnEZfm7d2ev46 TR3lv3liuy8kbKS7AOcIBkC8+6Yz/uohIC4/wbz/L7jGFNEWLzS2R1COwRaniFk4QBNU2di5/Ad SgW1a9PQDeapI/rfaUUDN9v9BMY0VzqAs50EDxl77FHE5iy8t2YhjQppsKA3pIW6y/dyu5w68T3 Om39+TGBVZGN844LxmxBPYdLvFNmxoeXysO0fVorTfoSmEVmlubOBk3tK1AirGbysrePoAjGwxB aV2ix5mQPwJZIZujAe3waLNn9jwZMIk48YoRv9h9YPds/P63JVXPy5jr92RSZeiGQzbbpW+DLvG JA+jaF8VZnTruFQ== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 The A733 GMAC210 is a DesignWare MAC 5.20 using an Allwinner glue close to the A523 GMAC200 already supported by this driver, with the following differences to handle: * The glue configuration registers are a dedicated MMIO region of the controller instead of a syscon register. This new register region appears to be in the reset domain of stmmac's main reset. This requires the glue driver to handle the reset rather than letting stmmac deal with it. * The TX clock delay value is 5 bits wide, split over 2 register fields, allowing delays up to 3100ps. * The DMA channels have their own interrupt lines, so the per-DMA-channel interrupt mode is enabled, as the vendor SDK does. * TX LPI clock gating is supported, as the vendor SDK indicates. Follow the PHY capability with STMMAC_FLAG_EN_TX_LPI_CLK_PHY_CAP rather than forcing it on with the deprecated 'snps,en-tx-lpi-clockgating' DT property. Unlike the A523, both GMAC instances are supported by the same driver. Signed-off-by: Jerome Brunet --- drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c | 145 +++++++++++++++++= +--- 1 file changed, 127 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c b/drivers/n= et/ethernet/stmicro/stmmac/dwmac-sun55i.c index 862df173d963..3d434a52fb02 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c @@ -10,21 +10,22 @@ */ =20 #include +#include #include #include #include #include #include #include +#include #include #include +#include #include =20 #include "stmmac.h" #include "stmmac_platform.h" =20 -#define SYSCON_REG 0x34 - /* RMII specific bits */ #define SYSCON_RMII_EN BIT(13) /* 1: enable RMII (overrides EPIT) */ /* Generic system control EMAC_CLK bits */ @@ -37,17 +38,99 @@ #define SYSCON_ETCS_EXT_GMII 0x1 #define SYSCON_ETCS_INT_GMII 0x2 =20 -static int sun55i_gmac200_set_syscon(struct device *dev, - struct plat_stmmacenet_data *plat) +struct sun55i_gmac_data { + struct regmap *(*get_regmap)(struct platform_device *pdev, + struct plat_stmmacenet_data *plat); + unsigned int flags; + u32 etxdc_ext_mask; + u32 offset; +}; + +static struct regmap *sun55i_gmac200_get_regmap(struct platform_device *pd= ev, + struct plat_stmmacenet_data *plat) +{ + struct regmap *map =3D + syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "syscon"); + + if (IS_ERR(map)) + dev_err_probe(&pdev->dev, PTR_ERR(map), "Unable to map syscon\n"); + + return map; +} + +static const struct regmap_config sun60i_a733_regmap_cfg =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, +}; + +static void sun60i_gmac210_reset_assert(void *data) { - struct device_node *node =3D dev->of_node; + struct reset_control *rst =3D data; + + reset_control_assert(rst); +} + +static struct regmap *sun60i_gmac210_get_regmap(struct platform_device *pd= ev, + struct plat_stmmacenet_data *plat) +{ + struct device *dev =3D &pdev->dev; + void __iomem *base; + int ret; + + base =3D devm_platform_ioremap_resource(pdev, 1); + if (IS_ERR(base)) { + dev_err_probe(dev, PTR_ERR(base), "unable to get glue memory region\n"); + return ERR_CAST(base); + } + + if (!plat->stmmac_rst || !plat->stmmac_ahb_rst) { + dev_err(dev, "missing required reset controls\n"); + return ERR_PTR(-EINVAL); + } + + /* + * The configuration registers are inside the controller + * reset domain, so the reset must happen before any write to them + * and should not be done again by stmmac or the configuration will + * be lost. + */ + ret =3D reset_control_assert(plat->stmmac_rst); + if (!ret) + ret =3D reset_control_deassert(plat->stmmac_rst); + + if (ret) { + dev_err_probe(dev, ret, "device reset failed\n"); + return ERR_PTR(ret); + } + + ret =3D devm_add_action_or_reset(dev, sun60i_gmac210_reset_assert, + plat->stmmac_rst); + if (ret) + return ERR_PTR(ret); + + plat->stmmac_rst =3D NULL; + + return devm_regmap_init_mmio(&pdev->dev, base, &sun60i_a733_regmap_cfg); +} + +static int sun55i_gmac200_setup(struct platform_device *pdev, + struct plat_stmmacenet_data *plat, + const struct sun55i_gmac_data *data) +{ + unsigned int lo_bits =3D hweight32(SYSCON_ETXDC_MASK); + struct device_node *node =3D pdev->dev.of_node; + struct device *dev =3D &pdev->dev; struct regmap *regmap; u32 val, reg =3D 0; + u32 max_delay; int ret; =20 - regmap =3D syscon_regmap_lookup_by_phandle(node, "syscon"); + max_delay =3D (1U << (lo_bits + hweight32(data->etxdc_ext_mask))) - 1; + + regmap =3D data->get_regmap(pdev, plat); if (IS_ERR(regmap)) - return dev_err_probe(dev, PTR_ERR(regmap), "Unable to map syscon\n"); + return PTR_ERR(regmap); =20 if (!of_property_read_u32(node, "tx-internal-delay-ps", &val)) { if (val % 100) @@ -55,12 +138,15 @@ static int sun55i_gmac200_set_syscon(struct device *de= v, "tx-delay must be a multiple of 100ps\n"); val /=3D 100; dev_dbg(dev, "set tx-delay to %x\n", val); - if (!FIELD_FIT(SYSCON_ETXDC_MASK, val)) + if (val > max_delay) return dev_err_probe(dev, -EINVAL, - "TX clock delay exceeds maximum (%u00ps > %lu00ps)\n", - val, FIELD_MAX(SYSCON_ETXDC_MASK)); + "TX clock delay exceeds maximum (%u00ps > %u00ps)\n", + val, max_delay); =20 - reg |=3D FIELD_PREP(SYSCON_ETXDC_MASK, val); + reg |=3D field_prep(SYSCON_ETXDC_MASK, val); + if (data->etxdc_ext_mask) + reg |=3D field_prep(data->etxdc_ext_mask, + val >> lo_bits); } =20 if (!of_property_read_u32(node, "rx-internal-delay-ps", &val)) { @@ -95,21 +181,29 @@ static int sun55i_gmac200_set_syscon(struct device *de= v, phy_modes(plat->phy_interface)); } =20 - ret =3D regmap_write(regmap, SYSCON_REG, reg); + ret =3D regmap_write(regmap, data->offset, reg); if (ret < 0) return dev_err_probe(dev, ret, "Failed to write to syscon\n"); =20 + plat->flags |=3D data->flags; + plat->host_dma_width =3D 32; + return 0; } =20 static int sun55i_gmac200_probe(struct platform_device *pdev) { struct plat_stmmacenet_data *plat_dat; + const struct sun55i_gmac_data *data; struct stmmac_resources stmmac_res; struct device *dev =3D &pdev->dev; struct clk *clk; int ret; =20 + data =3D device_get_match_data(dev); + if (!data) + return -EINVAL; + ret =3D stmmac_get_platform_resources(pdev, &stmmac_res); if (ret) return ret; @@ -118,11 +212,7 @@ static int sun55i_gmac200_probe(struct platform_device= *pdev) if (IS_ERR(plat_dat)) return PTR_ERR(plat_dat); =20 - /* BSP disables it */ - plat_dat->flags |=3D STMMAC_FLAG_SPH_DISABLE; - plat_dat->host_dma_width =3D 32; - - ret =3D sun55i_gmac200_set_syscon(dev, plat_dat); + ret =3D sun55i_gmac200_setup(pdev, plat_dat, data); if (ret) return ret; =20 @@ -138,8 +228,27 @@ static int sun55i_gmac200_probe(struct platform_device= *pdev) return devm_stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res); } =20 +static const struct sun55i_gmac_data sun55i_a523_gmac200_data =3D { + .get_regmap =3D sun55i_gmac200_get_regmap, + .flags =3D STMMAC_FLAG_SPH_DISABLE, + .offset =3D 0x34, + .etxdc_ext_mask =3D 0, +}; + +static const struct sun55i_gmac_data sun60i_a733_gmac210_data =3D { + .get_regmap =3D sun60i_gmac210_get_regmap, + .flags =3D (STMMAC_FLAG_SPH_DISABLE | + STMMAC_FLAG_MULTI_MSI_EN | + STMMAC_FLAG_EN_TX_LPI_CLK_PHY_CAP), + .offset =3D 0x0, + .etxdc_ext_mask =3D GENMASK(17, 16), +}; + static const struct of_device_id sun55i_gmac200_match[] =3D { - { .compatible =3D "allwinner,sun55i-a523-gmac200" }, + { .compatible =3D "allwinner,sun55i-a523-gmac200", + .data =3D &sun55i_a523_gmac200_data }, + { .compatible =3D "allwinner,sun60i-a733-gmac210", + .data =3D &sun60i_a733_gmac210_data }, { } }; MODULE_DEVICE_TABLE(of, sun55i_gmac200_match); --=20 2.53.0