From nobody Sun Apr 27 18:38:12 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZlwLt11Twz5vBP8; Sun, 27 Apr 2025 18:38:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZlwLs0JX7z3GWP; Sun, 27 Apr 2025 18:38:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745779093; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2/BopWM77PyE2Bo8LARACNVHStu4Q4wR4S45cQ3Rt2Q=; b=sB3M3VWuvAzVNybjnp29gk1uusdaiLCcT745kAtsyX1XeoosEi5MdheHVtQ14+s/ZEX+vd nluxakys1ckLj9yf2r0m8s66yMM9fOKUOoRGNmk4lBslQQPC2kJvVvhyQRepR+mSNhH1No kZw+enABXqdIgrkiboXydhnvAVORiPDJ/nEY9cgSHM81ZlLMqRo0ft/lSEFgCuX9TJP1g7 nA/GCVd7f/dKRh8QD3o3ZRnkk8FRJuhlw6lNB5o1Mph32ZxogWYghDyJnJ7U4VSyVzeLod HFawUJo2IYzoh4Pk95h/1CGW1yRNx2+2EwkdLpsBbDMCzYlY7jevrnXIBISVxQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745779093; a=rsa-sha256; cv=none; b=WHmBEh5uNRtzFOaq3qBM1QPm/H92hU36QcDYzHqa2aXGvd7fs5PHy9/rkHGLEJhHMqFqmw ie68fO9KFojmrrQ/5IDpKaLMPRnzHqKrYOLbPazVEiCEGhsZcdJi+QqNxkiXBnZVjcdPbx 0mxPgGNSXHyeY9dJNK8PIoFumnlZWCMd4mpuwvLFQODxTuv/zW2qC1u7NRexVWQDhcsgfR m9lY6BdpMB8fwpGLCbRrzWawVwwf3eiNfbG+e6yMs9EUOigXYz6OZm13B+xBMRZWTIw8Xh lcM67+nkd5qT13kjZqm5dtXOg3osnHuIbFf/KuW4oQMq4xmN9Iltvtjg7bz+iQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745779093; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2/BopWM77PyE2Bo8LARACNVHStu4Q4wR4S45cQ3Rt2Q=; b=YKlzbEHm9Tdwe5Lrh6xtQgzTd65STsqbEgCGkYsOpZVownzoVcTOFEDs+VyGzQi33E7d3f 9Vrpmhnxd5cSv/Jx8kGA5swBxEXqpyeR9ZB84xrw3e2fzyDy7t2dgz4YXFuGkUnOrhA2f2 g6HatI8sCdMwi0ldCIho6npB5u5P2ycGIxlnVWzZy7dR6FJra557TIuZUPVqK7tSlIk1OA fqZjOi2q7xdfzB6Wt0DoYLLW/nW6Pi0mnSTPyT6FDLkPvwmPdykZVhd42AwZRd1wEBwshO ktXqjN9KXi0TyPohEoUIDA5aoe54TsQVuT4ocLpzm/gsZUd/9OCCA+jroSNlXQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZlwLr6qJCz1G7c; Sun, 27 Apr 2025 18:38:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 53RIcCCs020677; Sun, 27 Apr 2025 18:38:12 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53RIcCYV020674; Sun, 27 Apr 2025 18:38:12 GMT (envelope-from git) Date: Sun, 27 Apr 2025 18:38:12 GMT Message-Id: <202504271838.53RIcCYV020674@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: 9b2a503a1179 - main - e6000sw: add support for 88E6190X List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9b2a503a1179e026a4efc0b2e0a910168bc806ed Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=9b2a503a1179e026a4efc0b2e0a910168bc806ed commit 9b2a503a1179e026a4efc0b2e0a910168bc806ed Author: Adrian Chadd AuthorDate: 2025-04-24 17:32:15 +0000 Commit: Adrian Chadd CommitDate: 2025-04-27 18:11:26 +0000 e6000sw: add support for 88E6190X This adds the minimum support required to probe/attach the 88E6190X. I've tested this against an AT&T ATT-150 OCP device (Silicom i3000) with local changes to export MDIO via ixge(4). Hints are required to probe/attach/configure the switch on amd64, but with the mentioned diffs, it does work. Thanks to Stas Alekseev for the pull request and Stas / Jason Hensler for chasing down information about the chipset, linux stuff and AT&T OCP hardware information. PR: kern/281211 Pull Request: https://github.com/freebsd/freebsd-src/pull/1408 Differential Revision: https://reviews.freebsd.org/D50044 Reviewed by: imp --- sys/dev/etherswitch/e6000sw/e6000sw.c | 33 +++++++++++++++++++++++++------- sys/dev/etherswitch/e6000sw/e6000swreg.h | 9 +++++---- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/sys/dev/etherswitch/e6000sw/e6000sw.c b/sys/dev/etherswitch/e6000sw/e6000sw.c index 19d8e85decf6..0041119ca300 100644 --- a/sys/dev/etherswitch/e6000sw/e6000sw.c +++ b/sys/dev/etherswitch/e6000sw/e6000sw.c @@ -217,7 +217,8 @@ e6000sw_probe(device_t dev) #ifdef FDT phandle_t switch_node; #else - int is_6190; + int is_6190 = 0; + int is_6190x = 0; #endif sc = device_get_softc(dev); @@ -253,15 +254,25 @@ e6000sw_probe(device_t dev) device_get_unit(sc->dev), "addr", &sc->sw_addr) != 0) return (ENXIO); if (resource_int_value(device_get_name(sc->dev), - device_get_unit(sc->dev), "is6190", &is_6190) != 0) + device_get_unit(sc->dev), "is6190", &is_6190) != 0) { /* * Check "is8190" to keep backward compatibility with * older setups. */ resource_int_value(device_get_name(sc->dev), device_get_unit(sc->dev), "is8190", &is_6190); + } + resource_int_value(device_get_name(sc->dev), + device_get_unit(sc->dev), "is6190x", &is_6190x); + if (is_6190 != 0 && is_6190x != 0) { + device_printf(dev, + "Cannot configure conflicting variants (6190 / 6190x)\n"); + return (ENXIO); + } if (is_6190 != 0) sc->swid = MV88E6190; + else if (is_6190x != 0) + sc->swid = MV88E6190X; #endif if (sc->sw_addr < 0 || sc->sw_addr > 32) return (ENXIO); @@ -303,6 +314,10 @@ e6000sw_probe(device_t dev) description = "Marvell 88E6190"; sc->num_ports = 11; break; + case MV88E6190X: + description = "Marvell 88E6190X"; + sc->num_ports = 11; + break; default: device_printf(dev, "Unrecognized device, id 0x%x.\n", sc->swid); return (ENXIO); @@ -333,7 +348,7 @@ e6000sw_parse_fixed_link(e6000sw_softc_t *sc, phandle_t node, uint32_t port) return (ENXIO); } if (speed == 2500 && (MVSWITCH(sc, MV88E6141) || - MVSWITCH(sc, MV88E6341) || MVSWITCH(sc, MV88E6190))) + MVSWITCH(sc, MV88E6341) || MVSWITCH(sc, MV88E6190) || MVSWITCH(sc, MV88E6190X))) sc->fixed25_mask |= (1 << port); } @@ -597,22 +612,26 @@ e6000sw_attach(device_t dev) reg |= PSC_CONTROL_SPD2500; else reg |= PSC_CONTROL_SPD1000; - if (MVSWITCH(sc, MV88E6190) && + if ((MVSWITCH(sc, MV88E6190) || + MVSWITCH(sc, MV88E6190X)) && e6000sw_is_fixed25port(sc, port)) reg |= PSC_CONTROL_ALT_SPD; reg |= PSC_CONTROL_FORCED_DPX | PSC_CONTROL_FULLDPX | PSC_CONTROL_FORCED_LINK | PSC_CONTROL_LINK_UP | PSC_CONTROL_FORCED_SPD; - if (!MVSWITCH(sc, MV88E6190)) + if (!MVSWITCH(sc, MV88E6190) && + !MVSWITCH(sc, MV88E6190X)) reg |= PSC_CONTROL_FORCED_FC | PSC_CONTROL_FC_ON; if (MVSWITCH(sc, MV88E6141) || MVSWITCH(sc, MV88E6341) || - MVSWITCH(sc, MV88E6190)) + MVSWITCH(sc, MV88E6190) || + MVSWITCH(sc, MV88E6190X)) reg |= PSC_CONTROL_FORCED_EEE; e6000sw_writereg(sc, REG_PORT(sc, port), PSC_CONTROL, reg); /* Power on the SERDES interfaces. */ - if (MVSWITCH(sc, MV88E6190) && + if ((MVSWITCH(sc, MV88E6190) || + MVSWITCH(sc, MV88E6190X)) && (port == 9 || port == 10)) { if (e6000sw_is_fixed25port(sc, port)) sgmii = false; diff --git a/sys/dev/etherswitch/e6000sw/e6000swreg.h b/sys/dev/etherswitch/e6000sw/e6000swreg.h index 7c952052a401..ec4503faeec5 100644 --- a/sys/dev/etherswitch/e6000sw/e6000swreg.h +++ b/sys/dev/etherswitch/e6000sw/e6000swreg.h @@ -47,6 +47,7 @@ struct atu_opt { #define MV88E6172 0x1720 #define MV88E6176 0x1760 #define MV88E6190 0x1900 +#define MV88E6190X 0x0a00 #define MVSWITCH(_sc, id) ((_sc)->swid == (id)) #define MVSWITCH_MULTICHIP(_sc) ((_sc)->sw_addr != 0) @@ -56,7 +57,7 @@ struct atu_opt { */ #define REG_GLOBAL 0x1b #define REG_GLOBAL2 0x1c -#define REG_PORT(_sc, p) ((MVSWITCH((_sc), MV88E6190) ? 0 : 0x10) + (p)) +#define REG_PORT(_sc, p) (((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0 : 0x10) + (p)) #define REG_NUM_MAX 31 @@ -138,13 +139,13 @@ struct atu_opt { #define VTU_DATA 7 #define VTU_DATA2 8 -#define VTU_FID_MASK(_sc) (MVSWITCH((_sc), MV88E6190) ? 0xfff : 0xff) +#define VTU_FID_MASK(_sc) ((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0xfff : 0xff) #define VTU_FID_POLICY (1 << 12) #define VTU_PORT_UNMODIFIED 0 #define VTU_PORT_UNTAGGED 1 #define VTU_PORT_TAGGED 2 #define VTU_PORT_DISCARD 3 -#define VTU_PPREG(_sc) (MVSWITCH((_sc), MV88E6190) ? 8 : 4) +#define VTU_PPREG(_sc) ((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 8 : 4) #define VTU_PORT(_sc, p) (((p) % VTU_PPREG(_sc)) * (16 / VTU_PPREG(_sc))) #define VTU_PORT_MASK 3 #define VTU_BUSY (1 << 15) @@ -174,7 +175,7 @@ struct atu_opt { #define ATU_MAC_ADDR45 15 #define ATU_DATA_LAG (1 << 15) -#define ATU_PORT_MASK(_sc) (MVSWITCH((_sc), MV88E6190) ? 0xfff0 : 0xff0) +#define ATU_PORT_MASK(_sc) ((MVSWITCH((_sc), MV88E6190) || MVSWITCH((_sc), MV88E6190X)) ? 0xfff0 : 0xff0) #define ATU_PORT_SHIFT 4 #define ATU_LAG_MASK 0xf0 #define ATU_LAG_SHIFT 4