From nobody Mon Feb 28 06:55:42 2022 X-Original-To: dev-commits-src-all@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 124F519D28AB; Mon, 28 Feb 2022 06:55:44 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4K6WNt6lppz4RfD; Mon, 28 Feb 2022 06:55:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646031344; 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=VRvB8sGt8hwZS6PH6aI4qGHHOarcEV9ELOni3MYiFO8=; b=t5CpidM4R9IQpUiIm0YLdWQLmXEzYq2lv8tQqz6wlbthmPLyCyYfaHs6Yaunyr2fQtHCN0 aehco7BhCwJqzn35PBP0GfElzO1C82dQENWLFMQDmeH1ab5AxoSh7T2IFqx/b7igqQdwIp tT2Cyve6jwMZrD2ybA3tNmKdCM89SN8gwTw0lmrXCR7xYU0Rs/gxnvFuPoIMWWju3BxHV1 74F4/HSyFiHZgswBj+jjBSsKmzrOnQ/xTFq2nZJnS/N4Eqrcx6+/sT4yBHHYbbbWXMrOaA cIQ/ROpW+wL8GJwWkFYSs11tbYhQZiml9KCBMt11wwZ1PIXEA5ZfJ2H+m6RSQg== 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 359AD16F65; Mon, 28 Feb 2022 06:55:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21S6tgrt077765; Mon, 28 Feb 2022 06:55:42 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21S6tgSG077764; Mon, 28 Feb 2022 06:55:42 GMT (envelope-from git) Date: Mon, 28 Feb 2022 06:55:42 GMT Message-Id: <202202280655.21S6tgSG077764@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Navdeep Parhar Subject: git: e804d75c13b1 - stable/13 - cxgbe(4): Change the way t4_shutdown_adapter brings the link(s) down. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: np X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: e804d75c13b14f98ff7443b1637d24bbdb9ed9e1 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646031344; 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=VRvB8sGt8hwZS6PH6aI4qGHHOarcEV9ELOni3MYiFO8=; b=IzUcUhZdYOifzEfaZ7ochXkUgLv4it4DTG2uZLTdGeEB8lmYqGxOtDQl9WOxNdpx6XiokS bzBHR05VOflxka0nZ0/a71qcbR0628xgbmpEciylIl5VlspC4gzzvIQlos3aT4XjlfoCyB MZWqGI51C4w7dY10ZHPR3L3KSLwqv5UcydLS9lkWT212ZicNWBSNedsiJ0VJdJwS6DKLkC s2pFBsY8bGg1dKxVQaQk2Jky+R+3N7T7DEwOr6SRyZ4kTU3qDqf82UMKBSu3/CSS3Tq487 iOpJkpgY8E6sp00T5VTEfNvZGvPKjuHASKI0oY1jc6QdMaXpwtEzf0PMATqUAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646031344; a=rsa-sha256; cv=none; b=EwJrCt8rQZvJY6Tm9qHUtD2+rar3eqceJf64Swbef2Yji8h0xuH3opwGD0r0p4v0Ya882i CAfZD2jRIDmf6exOEUatYynAQkwzpN1Yekp1/prnrbp18PnFY4HmKxLT9rOR0LmfjLHfhx fUPThR6nxF2VO/iDS1p459kRHvPt8Xivwt1aklGM6GhnxqcVKHwoaNiZLGGcPxT9NMpwdc FhIe/przTn09XYg2uKmCXyebFWjj2yJL+7boYsQyzYyU93lNGEivQ1V1mf2swSjhQ6PSca On5H1F0CuUEfxVdP25pu5fZ+ZsPEE7K0mjVRZaPww2lhWOvZm/gG4JZkx2cBtw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by np: URL: https://cgit.FreeBSD.org/src/commit/?id=e804d75c13b14f98ff7443b1637d24bbdb9ed9e1 commit e804d75c13b14f98ff7443b1637d24bbdb9ed9e1 Author: Navdeep Parhar AuthorDate: 2021-11-15 18:55:04 +0000 Commit: Navdeep Parhar CommitDate: 2022-02-28 06:45:48 +0000 cxgbe(4): Change the way t4_shutdown_adapter brings the link(s) down. Modify the GPIO pins only on the Base-T cards and even there drive all of them low instead of putting them in hi-z state. For the rest (this is the common case), directly power off the PLLs of the high speed serdes. This is the simplest method that does not involve or conflict with the firmware but still works with all T4-T6 cards regardless of what's plugged into the port. This fixes a problem where the peer wouldn't always see a link down if it is connected to the device using a -CR4 copper cable. Sponsored by: Chelsio Communications (cherry picked from commit a8eacf9329e2984f9c950fb5ef6447be4676007a) --- sys/dev/cxgbe/adapter.h | 3 ++- sys/dev/cxgbe/common/t4_hw.c | 24 +++++++++++++----------- sys/dev/cxgbe/firmware/t4fw_interface.h | 8 ++++++++ sys/dev/cxgbe/t4_main.c | 5 +++++ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/sys/dev/cxgbe/adapter.h b/sys/dev/cxgbe/adapter.h index 5c87a1ac5e31..2626150858e0 100644 --- a/sys/dev/cxgbe/adapter.h +++ b/sys/dev/cxgbe/adapter.h @@ -930,7 +930,8 @@ struct adapter { struct tls_tunables tlst; uint8_t doorbells; - int offload_map; /* ports with IFCAP_TOE enabled */ + int offload_map; /* port_id's with IFCAP_TOE enabled */ + int bt_map; /* tx_chan's with BASE-T */ int active_ulds; /* ULDs activated on this adapter */ int flags; int debug_flags; diff --git a/sys/dev/cxgbe/common/t4_hw.c b/sys/dev/cxgbe/common/t4_hw.c index e2b55dc71eba..26ffddaa98f4 100644 --- a/sys/dev/cxgbe/common/t4_hw.c +++ b/sys/dev/cxgbe/common/t4_hw.c @@ -3827,15 +3827,6 @@ static uint16_t fwcaps32_to_caps16(uint32_t caps32) return caps16; } -static bool -is_bt(struct port_info *pi) -{ - - return (pi->port_type == FW_PORT_TYPE_BT_SGMII || - pi->port_type == FW_PORT_TYPE_BT_XFI || - pi->port_type == FW_PORT_TYPE_BT_XAUI); -} - static int8_t fwcap_to_fec(uint32_t caps, bool unset_means_none) { int8_t fec = 0; @@ -3970,7 +3961,7 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port, } /* Force AN on for BT cards. */ - if (is_bt(adap->port[adap->chan_map[port]])) + if (isset(&adap->bt_map, port)) aneg = lc->pcaps & FW_PORT_CAP32_ANEG; rcap = aneg | speed | fc | fec; @@ -9414,9 +9405,11 @@ int t4_prep_adapter(struct adapter *adapter, u32 *buf) int t4_shutdown_adapter(struct adapter *adapter) { int port; + const bool bt = adapter->bt_map != 0; t4_intr_disable(adapter); - t4_write_reg(adapter, A_DBG_GPIO_EN, 0); + if (bt) + t4_write_reg(adapter, A_DBG_GPIO_EN, 0xffff0000); for_each_port(adapter, port) { u32 a_port_cfg = is_t4(adapter) ? PORT_REG(port, A_XGMAC_PORT_CFG) : @@ -9425,6 +9418,15 @@ int t4_shutdown_adapter(struct adapter *adapter) t4_write_reg(adapter, a_port_cfg, t4_read_reg(adapter, a_port_cfg) & ~V_SIGNAL_DET(1)); + if (!bt) { + u32 hss_cfg0 = is_t4(adapter) ? + PORT_REG(port, A_XGMAC_PORT_HSS_CFG0) : + T5_PORT_REG(port, A_MAC_PORT_HSS_CFG0); + t4_set_reg_field(adapter, hss_cfg0, F_HSSPDWNPLLB | + F_HSSPDWNPLLA | F_HSSPLLBYPB | F_HSSPLLBYPA, + F_HSSPDWNPLLB | F_HSSPDWNPLLA | F_HSSPLLBYPB | + F_HSSPLLBYPA); + } } t4_set_reg_field(adapter, A_SGE_CONTROL, F_GLOBALENABLE, 0); diff --git a/sys/dev/cxgbe/firmware/t4fw_interface.h b/sys/dev/cxgbe/firmware/t4fw_interface.h index 876fd61b4b21..93e5f2207411 100644 --- a/sys/dev/cxgbe/firmware/t4fw_interface.h +++ b/sys/dev/cxgbe/firmware/t4fw_interface.h @@ -7804,6 +7804,14 @@ enum fw_port_type { FW_PORT_TYPE_NONE = M_FW_PORT_CMD_PTYPE }; +static inline bool +is_bt(enum fw_port_type port_type) +{ + return (port_type == FW_PORT_TYPE_BT_SGMII || + port_type == FW_PORT_TYPE_BT_XFI || + port_type == FW_PORT_TYPE_BT_XAUI); +} + /* These are read from module's EEPROM and determined once the module is inserted. */ enum fw_port_module_type { diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index 0ccca0469a8a..2a026d3c90c9 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -1318,6 +1318,11 @@ t4_attach(device_t dev) goto done; } + if (is_bt(pi->port_type)) + setbit(&sc->bt_map, pi->tx_chan); + else + MPASS(!isset(&sc->bt_map, pi->tx_chan)); + snprintf(pi->lockname, sizeof(pi->lockname), "%sp%d", device_get_nameunit(dev), i); mtx_init(&pi->pi_lock, pi->lockname, 0, MTX_DEF);