From nobody Fri Oct 3 12:25:34 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE286296BC0; Mon, 1 Sep 2025 22:43:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756766636; cv=none; b=MhFmuF5uYAAySdjVVIv8ebVvNkA98/0Lo3rmZjFPOdbpM9lINn97z6B1cqtZ5IgA4mJNWwwJQHOsI6p/COboBLZoPq1Q70FqrECKfnfex7DcF9wauP2oLkpzjjz2S4qPdo3KSRsP6DQn/K6DAfsaDPorJFqyXXKyaMp/Dx8jkcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756766636; c=relaxed/simple; bh=SCLkrsEWnzB9eKvqG0q6Ea4G1QTnBOSaX79K7x+a/dw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LPiHyn6JAXjxQu+6ItxOJ7Wz8ovGTC3a9u8i0v+NMw2x52Vr3rVCZRgcfCrggBZaL4lDBH/kMp4j6DDYvvmt0invK/xcyGp8LMpmcGM/rQ40cNY5UrxDHNeIIOnRXQj91zNIzXLcTcUzrTuCcYzmi5TfkbCiQOHCHte0sbWLlPE= 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=TLQ5+tiH; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TLQ5+tiH" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-45b83ae1734so18965855e9.0; Mon, 01 Sep 2025 15:43:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756766633; x=1757371433; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=E4Gu7IGtrz35Fo4f6Ngu2+JRiwq4NSt4HvcJP5xmKD4=; b=TLQ5+tiHr4R8c5uqH1hWAgZ0R+ZRd559GszlfrUUnw0s57aWZcqNTpw0xhc+BhtALX 3q98WsKtAJIzq3NcOXvnVjJrszjX3vs2RIx1vyj7nY8nOR/i9jwL4cFhp4iIy2MVcyf9 PrOptt4GLodDGp+/sZy0ZbDBP+mBzw5256mspOWQoIZLB8CmwuiayUUsq943N/NaKxX/ R1TaAwomM3h202AEg3IvJXdOVrMr7VXxsVVIUU/8aND/kl6RJ3h+fUQNs/tEoxTurizL IgY05PKLiyzlvzirRT1VfSDIFiBm1wmcB4+sW1CviHJOa/wE4/sHuLtxSjvLCFBj9dJY dbRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756766633; x=1757371433; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E4Gu7IGtrz35Fo4f6Ngu2+JRiwq4NSt4HvcJP5xmKD4=; b=EtAgtnQbLKp8B1tKZ75IA84KRHf9OV9U2+tjHBleK2DCYntzYwyFchHmJuGA3ml2JT 8ruDVfCxO3rC5YNyD6Tlwuh6H1jHgFSgcLFJU5ALtTgPFu+YgyEcqx92KI7LX5/UgL2Z VrY6V6RUbTw6fwmi+/Hv6SOOkOCUZq1dCOK29kWUTGNc8Wunx//q9TY5BnMq3QykTknb sH0ckxOzdWJmlD/0EBzaq0EhwIHErWPTaz9xAmeKv8MnX6LvZP+xhsn6/HfGzkGmw1wJ cK3q7XlAXETtRenOYemlugVcYxBLHdb+GNArWIWZHPKso5i9Bq0mgEbDlx9GISzura7S F0Dg== X-Forwarded-Encrypted: i=1; AJvYcCUHkuEM8g2GGSQv2AjCFNHn06W4nGhKUgNG6B3xkfIMJBR30x0FVM1HVjUZUX2w1ehFd18Ej+P+@vger.kernel.org, AJvYcCUW40gJV77FaeVM0c+W0IZ6/HHk6YZci9Tw9zMKO/ID30OkG0+3UsB/p0X4xPXOIpi/4QN2pI5IZ2QR@vger.kernel.org, AJvYcCWsH6axmX3hSeKp8QGwfAdxkgA/j9+DikQqIp6hr/kyC9k7z5YMsveLl0MwoPqfqwMHWM3uwC55cDHXnirR@vger.kernel.org X-Gm-Message-State: AOJu0YzLBAPd5hIgQjmViC8ryICF02cj9D7oj24rYT3eFdCHKOL/KBEj en3+UGZFev8XyUfBOgaUitjNZkweUbfEyhvsteyQCraqqN0iPjAICUd1 X-Gm-Gg: ASbGncujlWaA756xZdlFdWY4WmtVUF0eLxrsWdUhOVvO2ci5KwlkDcpd57ecXxAHh7t 383VnN/S1Wg13i4Pd+Qt7oj1Wl9E2jxc+OKpZWjTypXEA9h5xFXHenX0By8JDEdxG+C4ACQC5qI f8n8rjnBEHB48y2d7G7xugsDrAoUWh4lyDoPCNjjtYwSgVszB4y+dE5IVylKaITHbnK9r0HE5SY jB6JFKd8oxL7ujydmQ1lP26pRg6xzWzdVgeICvYqR+czdmaxsa9B/Aq4Kycpu+aQvocauDP4zre 0ao7OlhVZumwlNQ6ov16qdIZPlUZWW7LEBmLiMyiNjQvmCA83LXuHy0irwGWJ7+9wFIkEpBM5hG 8H0zH7mTmwOv63EysD4Q5NnF225SqOQ2Z0A1f2wK+kgROhqXglvCY35Om X-Google-Smtp-Source: AGHT+IHp0y726g+Zzu2IZQPOjiBXQwp8bRxiUnH9+BmM9YDF9R54b31Y68vJBceZtELyEzGsEv2jQA== X-Received: by 2002:a5d:64c4:0:b0:3d6:3af4:7cdb with SMTP id ffacd0b85a97d-3d63af4814bmr4946588f8f.24.1756766632695; Mon, 01 Sep 2025 15:43:52 -0700 (PDT) Received: from iku.Home ([2a06:5906:61b:2d00:ca6c:86b2:c8f:84d6]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3d2250115fdsm11532607f8f.40.2025.09.01.15.43.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 15:43:51 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiner Kallweit , Russell King , Philipp Zabel , Geert Uytterhoeven , Magnus Damm , Wolfram Sang Cc: linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar , Biju Das , Fabrizio Castro , Lad Prabhakar Subject: [PATCH net-next 09/10] net: pcs: rzn1-miic: Add RZ/T2H MIIC support Date: Mon, 1 Sep 2025 23:43:22 +0100 Message-ID: <20250901224327.3429099-10-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901224327.3429099-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250901224327.3429099-1-prabhakar.mahadev-lad.rj@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: Lad Prabhakar Add support for the Renesas RZ/T2H MIIC by defining SoC-specific modctrl match tables, register map, and string representations for converters and ports. Signed-off-by: Lad Prabhakar --- drivers/net/pcs/Kconfig | 11 +++-- drivers/net/pcs/pcs-rzn1-miic.c | 82 +++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/drivers/net/pcs/Kconfig b/drivers/net/pcs/Kconfig index f6aa437473de..9e19692985d7 100644 --- a/drivers/net/pcs/Kconfig +++ b/drivers/net/pcs/Kconfig @@ -26,11 +26,12 @@ config PCS_MTK_LYNXI which is part of MediaTek's SoC and Ethernet switch ICs. =20 config PCS_RZN1_MIIC - tristate "Renesas RZ/N1 MII converter" - depends on OF && (ARCH_RZN1 || COMPILE_TEST) + tristate "Renesas RZ/{N1, T2H, N2H} MII converter" + depends on OF + depends on ARCH_RZN1 || ARCH_R9A09G077 || ARCH_R9A09G087 || COMPILE_TEST help - This module provides a driver for the MII converter that is available - on RZ/N1 SoCs. This PCS converts MII to RMII/RGMII or can be set in - pass-through mode for MII. + This module provides a driver for the MII converter available on + Renesas RZ/N1, RZ/T2H, and RZ/N2H SoCs. This PCS converts MII to + RMII/RGMII, or can be set in pass-through mode for MII. =20 endmenu diff --git a/drivers/net/pcs/pcs-rzn1-miic.c b/drivers/net/pcs/pcs-rzn1-mii= c.c index 86d4dccd694e..024562204d7c 100644 --- a/drivers/net/pcs/pcs-rzn1-miic.c +++ b/drivers/net/pcs/pcs-rzn1-miic.c @@ -21,6 +21,7 @@ #include #include #include +#include =20 #define MIIC_PRCMD 0x0 #define MIIC_ESID_CODE 0x4 @@ -125,6 +126,57 @@ static const char * const index_to_string[] =3D { "CONV5", }; =20 +static struct modctrl_match rzt2h_modctrl_match_table[] =3D { + {0x0, {ETHSS_GMAC0_PORT, ETHSS_SWITCH_PORT0, ETHSS_SWITCH_PORT1, + ETHSS_SWITCH_PORT2, ETHSS_GMAC1_PORT}}, + + {0x1, {MIIC_MODCTRL_CONF_NONE, ETHSS_ETHERCAT_PORT0, ETHSS_ETHERCAT_PORT1, + ETHSS_GMAC2_PORT, ETHSS_GMAC1_PORT}}, + + {0x2, {ETHSS_GMAC0_PORT, ETHSS_ETHERCAT_PORT0, ETHSS_ETHERCAT_PORT1, + ETHSS_SWITCH_PORT2, ETHSS_GMAC1_PORT}}, + + {0x3, {MIIC_MODCTRL_CONF_NONE, ETHSS_ETHERCAT_PORT0, ETHSS_ETHERCAT_PORT1, + ETHSS_ETHERCAT_PORT2, ETHSS_GMAC1_PORT}}, + + {0x4, {ETHSS_GMAC0_PORT, ETHSS_SWITCH_PORT0, ETHSS_ETHERCAT_PORT1, + ETHSS_ETHERCAT_PORT2, ETHSS_GMAC1_PORT}}, + + {0x5, {ETHSS_GMAC0_PORT, ETHSS_SWITCH_PORT0, ETHSS_ETHERCAT_PORT1, + ETHSS_SWITCH_PORT2, ETHSS_GMAC1_PORT}}, + + {0x6, {ETHSS_GMAC0_PORT, ETHSS_SWITCH_PORT0, ETHSS_SWITCH_PORT1, + ETHSS_GMAC2_PORT, ETHSS_GMAC1_PORT}}, + + {0x7, {MIIC_MODCTRL_CONF_NONE, ETHSS_GMAC0_PORT, ETHSS_GMAC1_PORT, + ETHSS_GMAC2_PORT, MIIC_MODCTRL_CONF_NONE}} +}; + +static const char * const rzt2h_conf_to_string[] =3D { + [ETHSS_GMAC0_PORT] =3D "GMAC0_PORT", + [ETHSS_GMAC1_PORT] =3D "GMAC1_PORT", + [ETHSS_GMAC2_PORT] =3D "GMAC2_PORT", + [ETHSS_ETHERCAT_PORT0] =3D "ETHERCAT_PORT0", + [ETHSS_ETHERCAT_PORT1] =3D "ETHERCAT_PORT1", + [ETHSS_ETHERCAT_PORT2] =3D "ETHERCAT_PORT2", + [ETHSS_SWITCH_PORT0] =3D "SWITCH_PORT0", + [ETHSS_SWITCH_PORT1] =3D "SWITCH_PORT1", + [ETHSS_SWITCH_PORT2] =3D "SWITCH_PORT2", +}; + +static const char * const rzt2h_index_to_string[] =3D { + "SWITCH_PORTIN", + "CONV0", + "CONV1", + "CONV2", + "CONV3", +}; + +static const char * const rzt2h_reset_ids[] =3D { + "rst", + "crst", +}; + /** * struct miic - MII converter structure * @base: base address of the MII converter @@ -203,11 +255,24 @@ static inline void miic_unlock_regs(struct miic *miic) writel(0x0001, miic->base + MIIC_PRCMD); } =20 +static inline void miic_lock_regs(struct miic *miic) +{ + /* Protect register writes */ + writel(0x0000, miic->base + MIIC_PRCMD); +} + static void miic_reg_writel_unlocked(struct miic *miic, int offset, u32 va= lue) { writel(value, miic->base + offset); } =20 +static void miic_reg_writel_locked(struct miic *miic, int offset, u32 valu= e) +{ + miic_unlock_regs(miic); + writel(value, miic->base + offset); + miic_lock_regs(miic); +} + static void miic_reg_writel(struct miic *miic, int offset, u32 value) { miic->of_data->miic_write(miic, offset, value); @@ -645,8 +710,25 @@ static struct miic_of_data rzn1_miic_of_data =3D { .miic_write =3D miic_reg_writel_unlocked, }; =20 +static struct miic_of_data rzt2h_miic_of_data =3D { + .match_table =3D rzt2h_modctrl_match_table, + .match_table_count =3D ARRAY_SIZE(rzt2h_modctrl_match_table), + .conf_conv_count =3D 5, + .conf_to_string =3D rzt2h_conf_to_string, + .conf_to_string_count =3D ARRAY_SIZE(rzt2h_conf_to_string), + .index_to_string =3D rzt2h_index_to_string, + .index_to_string_count =3D ARRAY_SIZE(rzt2h_index_to_string), + .miic_port_start =3D 0, + .miic_port_max =3D 4, + .sw_mode_mask =3D GENMASK(2, 0), + .reset_ids =3D rzt2h_reset_ids, + .reset_count =3D ARRAY_SIZE(rzt2h_reset_ids), + .miic_write =3D miic_reg_writel_locked, +}; + static const struct of_device_id miic_of_mtable[] =3D { { .compatible =3D "renesas,rzn1-miic", .data =3D &rzn1_miic_of_data }, + { .compatible =3D "renesas,rzt2h-miic", .data =3D &rzt2h_miic_of_data }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, miic_of_mtable); --=20 2.51.0