From patchwork Thu Apr 25 22:27:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 13644003 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.51]) (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 D80B414D71D; Thu, 25 Apr 2024 22:27:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084064; cv=none; b=Oly3uPeUjCruzSUh2+RGepF12z7fiuS+CZGaJVAsp3bKKK9v4unEzGhtlPDkdWV/C/X8NJSDEQxvJPLTVGqLSFQAGJjsh9aDV15D3FZjx8nYLMEPbu6HKtulKDaJgn4ZvYMxUjEhU9QsI5eXA8c5b40dN6t5Q7f7zGLpVl7Cz/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084064; c=relaxed/simple; bh=1SF70NTHCTRYZByoZHjPlVMIlx5+KlolbViI5fbMAFc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hrF9FObiGeDMEdD65VDVu4D3Tv0qUGiGBEkqnbazEYnTdo8+bx42QGoRJDEGPEl/MLxgcaZ+SH0/YJ86HPl7hIjRQhZxEvlSGtprqxjSXukac4h+61IBX40b84TxEuqjSZ9ERq2fLlIawWHzYpCPVrKL+nUXjoDwK8NxqnPHuGA= 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=ExmlrgZa; arc=none smtp.client-ip=209.85.161.51 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="ExmlrgZa" Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-5ad2a15374eso964590eaf.3; Thu, 25 Apr 2024 15:27:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714084062; x=1714688862; 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=o13Arm3Rvf2gFBkSt1a4X4Ztws3UYrTbZey0ecJRfQk=; b=ExmlrgZaqLUex8UJ5qLXEOMvb+ESMuOVE+D5hClr9ut894NeYsOHDyahiYXzRZYHF1 mdecKfwqmvduKzxf2lCM+bP20SnES9PhJKfB1dHP/bV//gHD3bzHupkVqidDJ+w/torz WMiCrIDfWIS5hVToPKT3sHePwNpt79QnyCcn2ixyKtVvUIgmzUVO7u9kqVegqFaaIPId +YprjhQE9LNC0moW9G11nYmAb1pixIMzFkTaSmNvrRP4iOhgXcr4LlBiwLuC2Bjg2Ilx mEyHYlXuG1va2XlTnrdLsqtTXBSAcbGA3YTUmM/6hzGQue7AD0Ah10xoeVKY5nkc5trz 1IVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714084062; x=1714688862; 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=o13Arm3Rvf2gFBkSt1a4X4Ztws3UYrTbZey0ecJRfQk=; b=Ckw11fzZihZdj596oSvilDbhuRwxIr7yWVqbt+ZN7u7gFwBd4Ps+JdlCx8FeUYilff wWlEuLi2zH7zrqQohvM68qwaJswsUCdXSlIY10Zxf6K1N62Hr6ZaGW+uvNUQ9spZFmTa VrC3ihQmSWxbhU3FB7oRIGfmrFncNDxuWadPEUoR3KZ3ihRMYJvEHi2Xab+GGP+/vJRb Aurj2RJEjq3g/xiU5ZpQOJvP8JWQN3y0i27qEVljBN7f89QFiMFELdivmj4QexBocG8z B5TBnmmDLva46Lv55ZkOxU0WUvGVhuZUpsiRum38VZH1/KDNUIg3RmkpB8p+3dNJMwO8 Kp2g== X-Forwarded-Encrypted: i=1; AJvYcCUmmxGStjdyO0Fa8eL7TmnNukop7EuwE22IagqL0yaPV+97xWYg5n0ZaMIyrz2DU0MerrzoT2xY4ODk08u7sQ/IBe0JZxPNnIDQIh7oi4Z80JzEVVkVc3iP59oewX6/5OMjMGIHo3tMrKaYLICblWTRh2D/lPEpxoXyN5V1 X-Gm-Message-State: AOJu0YwYfBXP4G/XH7n6pziJ+KbYreY+xp2nG8NGaVI3TUK4+p+ZUxAW Z9IcCpY6Ok9+3hlGEBVjUEXZ4icb1PLfIYQq7hoZmzD3y9YiJmnD X-Google-Smtp-Source: AGHT+IGlq59lF+/gx5a6kAGQzJHbB8V/nHLNXKwd0uO8DwdWe7w21FRrv3KKpn1mffLOhlplDRFYqg== X-Received: by 2002:a05:6358:2744:b0:18d:7ba5:ccaf with SMTP id p4-20020a056358274400b0018d7ba5ccafmr627086rwd.26.1714084061904; Thu, 25 Apr 2024 15:27:41 -0700 (PDT) Received: from stbirv-lnx-1.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id t4-20020a05622a180400b004371724f711sm7341928qtc.80.2024.04.25.15.27.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Apr 2024 15:27:41 -0700 (PDT) From: Doug Berger To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Berger , stable@vger.kernel.org Subject: [PATCH net v2 1/3] net: bcmgenet: synchronize EXT_RGMII_OOB_CTRL access Date: Thu, 25 Apr 2024 15:27:19 -0700 Message-Id: <20240425222721.2148899-2-opendmb@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240425222721.2148899-1-opendmb@gmail.com> References: <20240425222721.2148899-1-opendmb@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The EXT_RGMII_OOB_CTRL register can be written from different contexts. It is predominantly written from the adjust_link handler which is synchronized by the phydev->lock, but can also be written from a different context when configuring the mii in bcmgenet_mii_config(). The chances of contention are quite low, but it is conceivable that adjust_link could occur during resume when WoL is enabled so use the phydev->lock synchronizer in bcmgenet_mii_config() to be sure. Fixes: afe3f907d20f ("net: bcmgenet: power on MII block for all MII modes") Cc: stable@vger.kernel.org Signed-off-by: Doug Berger Acked-by: Florian Fainelli --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 9ada89355747..86a4aa72b3d4 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -2,7 +2,7 @@ /* * Broadcom GENET MDIO routines * - * Copyright (c) 2014-2017 Broadcom + * Copyright (c) 2014-2024 Broadcom */ #include @@ -275,6 +275,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) * block for the interface to work, unconditionally clear the * Out-of-band disable since we do not need it. */ + mutex_lock(&phydev->lock); reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); reg &= ~OOB_DISABLE; if (priv->ext_phy) { @@ -286,6 +287,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) reg |= RGMII_MODE_EN; } bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); + mutex_unlock(&phydev->lock); if (init) dev_info(kdev, "configuring instance for %s\n", phy_name); From patchwork Thu Apr 25 22:27:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 13644004 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com [209.85.219.174]) (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 AC70D156658; Thu, 25 Apr 2024 22:27:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084066; cv=none; b=tCxFhCrPte2DAfmo/E6fqEMnbiPdyPbyygfQjrAse4d6Zv/PwZ4u7SNJTzgO6ONghfp4Yub/77rWyN7NkjxBb6hnNgkR6rUTHTaekZJvtPy0V1E/kjJW6nhlWnWiAkBHgBkPgB+L+mY3b1Y9n9C1H8ZsQF5/Le0KHhx6QFmM9+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084066; c=relaxed/simple; bh=gK3IDBMN0QPgUq6nFSZArygjbcNekpXpG97aut6lPG8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=o324jLOl8NfEhAU30+zgnpwTBOp+S1s3jLIKFdNv/6WNJL8nvZyqRRvKX9xo5ywQSAHTB0JtJIeEYpJA4dKHVkzYAAzMMmMtgSObVdd89eyspnNayL8nxq/EkH+ir17tcrg+X0EirotQWyKeSeUkFOgv8Uk/NL3k7L/2Sted9CA= 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=eJLC5U/l; arc=none smtp.client-ip=209.85.219.174 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="eJLC5U/l" Received: by mail-yb1-f174.google.com with SMTP id 3f1490d57ef6-dc6dcd9124bso1558497276.1; Thu, 25 Apr 2024 15:27:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714084064; x=1714688864; 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=qoVri07CqNZY64mEc3hs+qcgGhmd3HVXaDxx+6B0MGI=; b=eJLC5U/lf0YGxLdQbtqMS9oRumMIJr3EphcQOhIMiE9IkmZzk3I4LoJ1/ZdaHORPQs n23/4SwGxoCauRJgbsCfeXw8lFMB8vbViNEopcXQIVieTgLlEClr48BMwuvn792Os5LI 2k00n4l3TKcyj4VQcztFgSlgVdslVfYEkLkKqsSNb/Ghqw/kGE97Wm5zTyPdeVEoL1bm +0/I+YCXzrAp17Hs4DnQt8wLXtl1qv9aDzB+/UkcAfub+w3KNWHXxAgU3Yx8LjdAeDMg hu8daBjhFh+6HqNhm3GZPXz4C4V/aVXhsNa8ZvMkt6lghflfbMms7gb5fL6vrXzZuME8 6MKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714084064; x=1714688864; 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=qoVri07CqNZY64mEc3hs+qcgGhmd3HVXaDxx+6B0MGI=; b=v4R6eTapbOfrxXBaA7QIbk95SZKTmBVHpL+a0KOwQb68zmgC7sOk1NZZEXq3Wqss2B WayBmGqpC7GGaUhSL+iRSXJYQoslERicmz6HAIoGUJHKIhdiatM56Wr36piELiMTqFEH qBrmKRnTKpTIcjpgwOi0JkvbxQ3IClgdw0+NwjsRhnq6Aovd8W4fzBNF9XLRfaz3HZBn R92NA8PqRjGjkfa8YYjg6S53G9ODml6CZ59EF3MXmpyD2LvDrawK/1G6CoXIHXp5JUAR 2BtXd+EcZQRnql18elJtA1ldMCkl0M+VR04XSEE2EDZUd0KrNuMktwKpMYe8B69MKyZH wU3A== X-Forwarded-Encrypted: i=1; AJvYcCW2VKLpxgsU1q/4ANM5AZ//XGWfowJznl6Qw0tNP1TnP5LURZGn/IoOr3xMBp1IegdzyaP5Oy+ny/tD+2HgblhibVNqYE5UgtjHWLTQXltHTM72oB52y04G+ya/noRUack8JdZrdLU70RboSPuwW5skFWjfz+PDhuPbcA8h X-Gm-Message-State: AOJu0YyNIGgKn6Nmnmfr1ZKAmnTyMa/dfXulkCazyp8DVL9ytSE+hukm 1G30cCNgXJl85jSkB0fb6aalTVGFzfF/How5EDfIq7TYKJie0vuh X-Google-Smtp-Source: AGHT+IESMuDGkoaNG9vzCw/0iUCruRbWVeEiVuftls4E/HAtJJKvtxtx6D4CCeuAZFkVQJhKei1H3Q== X-Received: by 2002:a25:accd:0:b0:dc6:bcb3:5d8e with SMTP id x13-20020a25accd000000b00dc6bcb35d8emr1198547ybd.20.1714084063710; Thu, 25 Apr 2024 15:27:43 -0700 (PDT) Received: from stbirv-lnx-1.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id t4-20020a05622a180400b004371724f711sm7341928qtc.80.2024.04.25.15.27.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Apr 2024 15:27:43 -0700 (PDT) From: Doug Berger To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Berger , stable@vger.kernel.org Subject: [PATCH net v2 2/3] net: bcmgenet: synchronize use of bcmgenet_set_rx_mode() Date: Thu, 25 Apr 2024 15:27:20 -0700 Message-Id: <20240425222721.2148899-3-opendmb@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240425222721.2148899-1-opendmb@gmail.com> References: <20240425222721.2148899-1-opendmb@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The ndo_set_rx_mode function is synchronized with the netif_addr_lock spinlock and BHs disabled. Since this function is also invoked directly from the driver the same synchronization should be applied. Fixes: 72f96347628e ("net: bcmgenet: set Rx mode before starting netif") Cc: stable@vger.kernel.org Signed-off-by: Doug Berger Acked-by: Florian Fainelli --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index b1f84b37032a..5452b7dc6e6a 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2,7 +2,7 @@ /* * Broadcom GENET (Gigabit Ethernet) controller driver * - * Copyright (c) 2014-2020 Broadcom + * Copyright (c) 2014-2024 Broadcom */ #define pr_fmt(fmt) "bcmgenet: " fmt @@ -3334,7 +3334,9 @@ static void bcmgenet_netif_start(struct net_device *dev) struct bcmgenet_priv *priv = netdev_priv(dev); /* Start the network engine */ + netif_addr_lock_bh(dev); bcmgenet_set_rx_mode(dev); + netif_addr_unlock_bh(dev); bcmgenet_enable_rx_napi(priv); umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, true); From patchwork Thu Apr 25 22:27:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 13644005 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) (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 A811D157492; Thu, 25 Apr 2024 22:27:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084068; cv=none; b=ETFvRU21WNzLYO2wFaB4/ZFLhhFuK3Ibt43orI0S6NauyF98/o1r1MIeE6U3x9X68F2AXVHC6GKm+BbWco0uxhkKTR6Eq5kZ+sxeA2gCQkW104Wra/jqkMw1xvcpzu6dPnbLRnpT4T9DlO2eeGAThBnzT3Qnh8EwXeIAulZsrSA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714084068; c=relaxed/simple; bh=TIHi716ql6W7JkAg87hK+/NlxNNTNr3j5+ozLhVFT40=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Atc245ZJhjiM6HOuePBS5LMtH59BXhIUbprh12R/99TQrg66PuyCNATzYDrYX5j9t5JAcLJcjIHQWv8/A0wgtdS43Fkzj02NwrqGFR+BAs3ZTYC3qsL+aOPqev3M/WcYRNeFzJ1FwYkz6bvbaLD77HjkpyhSlK243ucv2VJrIXI= 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=MSLoNH/j; arc=none smtp.client-ip=209.85.160.173 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="MSLoNH/j" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-437274f3bd4so14856211cf.1; Thu, 25 Apr 2024 15:27:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714084065; x=1714688865; 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=0OvkLf2eq0KdJa5mTu/U97lc17pEWUvnY93iweSl7Ps=; b=MSLoNH/j9jJqS9KhNtXVpZCWEkim81Ofeb48/cPQeHrnJ/DAtxryu9scsQuc1mn3wD 5VEhn11ck0Akeuf5epch3ZI1OL1+vO9JRznKRUAZRaqaFqqB6ycyDGI4IEboPBJUe+Xr ZFFbbarSD7d8aFE30dxC570El4qrGsfH42WMtovI8HkrYeLHlZ9S4eGazVYwHcj4NyvF R02b5xTtin9aDeZKH896eyFoL0/rXwfV6asr4pkHRe5zp3CfPCHBv0O27gIG8OKVkJ5p StTXhWW8zOciKnrZBgAh22pmPXadySt5sr5GQ1NmDAYXKfoeaHIHA5ZyhwNOi4V8OMPG zqfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714084065; x=1714688865; 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=0OvkLf2eq0KdJa5mTu/U97lc17pEWUvnY93iweSl7Ps=; b=VkIY9yzWsWmTBnJnuqCmhI97RgqHLjVVBPLFXjBy9NUICF09fJHomoJ78NGscPNjit wOVNkcc/yPuvP9Mjr4HW6McQ4vphnY4TTOp6vtg9liMK2B0ASugqOPTxgBGnPukcTCWx jZTnyhS16l2z1ssedJH2fxKe93mv/u4cIavYMHgsz6d+4ZOsXl65YyMtUdpS2R66BfPC ECJIex1D5anbJL2eLEofferhLT9hC0IpiWBUf5JJIEmgjw3W3wAdnWXah+HBawJesT9p gGEySP+9+m2ESytV8pgYaCGJ7AtWfTnKfcrA15pUbD1aL65mB6verDFxa31LhXKkS/ob xOlg== X-Forwarded-Encrypted: i=1; AJvYcCVssdsckpAkWfYGJ0cX4vEiISbFIo894fN5rdG8Tm0kzvtvvtlJSHB2jtRkW2FYmV65Ks/J/D1ZWCrY7kKXL8wZsVdjQhrmxEs4ZGgzTgHTj54pkvtH4Pwpbw9g7umjerfRHIHhy6pD28DryqRbnqdW9rAUv9/RYGGUBJoV X-Gm-Message-State: AOJu0YygdEYMYEFET/gvAZC4Weh2bKHCbiqumr4+wB7CrWHZ2PveEic0 YFgDfd/eBFoQAdzDZBCgnPpBGujP8o1xzUa4l1if9TW/IA3ASLwS X-Google-Smtp-Source: AGHT+IEvYIrJDD4VlmLOC/re5SMBDT1fVdq1LMdJYKJtl+4L1DmRdQolO07gBLUWkLZ10McV2jdRMg== X-Received: by 2002:ac8:7d89:0:b0:439:ec1e:327d with SMTP id c9-20020ac87d89000000b00439ec1e327dmr2054796qtd.10.1714084065494; Thu, 25 Apr 2024 15:27:45 -0700 (PDT) Received: from stbirv-lnx-1.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id t4-20020a05622a180400b004371724f711sm7341928qtc.80.2024.04.25.15.27.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Apr 2024 15:27:45 -0700 (PDT) From: Doug Berger To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Florian Fainelli , bcm-kernel-feedback-list@broadcom.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Berger , stable@vger.kernel.org Subject: [PATCH net v2 3/3] net: bcmgenet: synchronize UMAC_CMD access Date: Thu, 25 Apr 2024 15:27:21 -0700 Message-Id: <20240425222721.2148899-4-opendmb@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240425222721.2148899-1-opendmb@gmail.com> References: <20240425222721.2148899-1-opendmb@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The UMAC_CMD register is written from different execution contexts and has insufficient synchronization protections to prevent possible corruption. Of particular concern are the acceses from the phy_device delayed work context used by the adjust_link call and the BH context that may be used by the ndo_set_rx_mode call. A spinlock is added to the driver to protect contended register accesses (i.e. reg_lock) and it is used to synchronize accesses to UMAC_CMD. Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file") Cc: stable@vger.kernel.org Signed-off-by: Doug Berger Acked-by: Florian Fainelli --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 12 +++++++++++- drivers/net/ethernet/broadcom/genet/bcmgenet.h | 4 +++- drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 8 +++++++- drivers/net/ethernet/broadcom/genet/bcmmii.c | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 5452b7dc6e6a..c7e7dac057a3 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2467,14 +2467,18 @@ static void umac_enable_set(struct bcmgenet_priv *priv, u32 mask, bool enable) { u32 reg; + spin_lock_bh(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); - if (reg & CMD_SW_RESET) + if (reg & CMD_SW_RESET) { + spin_unlock_bh(&priv->reg_lock); return; + } if (enable) reg |= mask; else reg &= ~mask; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock_bh(&priv->reg_lock); /* UniMAC stops on a packet boundary, wait for a full-size packet * to be processed @@ -2490,8 +2494,10 @@ static void reset_umac(struct bcmgenet_priv *priv) udelay(10); /* issue soft reset and disable MAC while updating its registers */ + spin_lock_bh(&priv->reg_lock); bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD); udelay(2); + spin_unlock_bh(&priv->reg_lock); } static void bcmgenet_intr_disable(struct bcmgenet_priv *priv) @@ -3597,16 +3603,19 @@ static void bcmgenet_set_rx_mode(struct net_device *dev) * 3. The number of filters needed exceeds the number filters * supported by the hardware. */ + spin_lock(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); if ((dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) || (nfilter > MAX_MDF_FILTER)) { reg |= CMD_PROMISC; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock(&priv->reg_lock); bcmgenet_umac_writel(priv, 0, UMAC_MDF_CTRL); return; } else { reg &= ~CMD_PROMISC; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock(&priv->reg_lock); } /* update MDF filter */ @@ -4005,6 +4014,7 @@ static int bcmgenet_probe(struct platform_device *pdev) goto err; } + spin_lock_init(&priv->reg_lock); spin_lock_init(&priv->lock); /* Set default pause parameters */ diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 7523b60b3c1c..43b923c48b14 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2014-2020 Broadcom + * Copyright (c) 2014-2024 Broadcom */ #ifndef __BCMGENET_H__ @@ -573,6 +573,8 @@ struct bcmgenet_rxnfc_rule { /* device context */ struct bcmgenet_priv { void __iomem *base; + /* reg_lock: lock to serialize access to shared registers */ + spinlock_t reg_lock; enum bcmgenet_version version; struct net_device *dev; diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c index 7a41cad5788f..1248792d7fd4 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c @@ -2,7 +2,7 @@ /* * Broadcom GENET (Gigabit Ethernet) Wake-on-LAN support * - * Copyright (c) 2014-2020 Broadcom + * Copyright (c) 2014-2024 Broadcom */ #define pr_fmt(fmt) "bcmgenet_wol: " fmt @@ -151,6 +151,7 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv, } /* Can't suspend with WoL if MAC is still in reset */ + spin_lock_bh(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); if (reg & CMD_SW_RESET) reg &= ~CMD_SW_RESET; @@ -158,6 +159,7 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv, /* disable RX */ reg &= ~CMD_RX_EN; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock_bh(&priv->reg_lock); mdelay(10); if (priv->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE)) { @@ -203,6 +205,7 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv, } /* Enable CRC forward */ + spin_lock_bh(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); priv->crc_fwd_en = 1; reg |= CMD_CRC_FWD; @@ -210,6 +213,7 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv, /* Receiver must be enabled for WOL MP detection */ reg |= CMD_RX_EN; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock_bh(&priv->reg_lock); reg = UMAC_IRQ_MPD_R; if (hfb_enable) @@ -256,7 +260,9 @@ void bcmgenet_wol_power_up_cfg(struct bcmgenet_priv *priv, } /* Disable CRC Forward */ + spin_lock_bh(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); reg &= ~CMD_CRC_FWD; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock_bh(&priv->reg_lock); } diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 86a4aa72b3d4..c4a3698cef66 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -76,6 +76,7 @@ static void bcmgenet_mac_config(struct net_device *dev) reg |= RGMII_LINK; bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); + spin_lock_bh(&priv->reg_lock); reg = bcmgenet_umac_readl(priv, UMAC_CMD); reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | CMD_HD_EN | @@ -88,6 +89,7 @@ static void bcmgenet_mac_config(struct net_device *dev) reg |= CMD_TX_EN | CMD_RX_EN; } bcmgenet_umac_writel(priv, reg, UMAC_CMD); + spin_unlock_bh(&priv->reg_lock); active = phy_init_eee(phydev, 0) >= 0; bcmgenet_eee_enable_set(dev,