From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 83C9933DEED for ; Mon, 5 Jan 2026 17:34:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767634466; cv=none; b=PhSuhCzxGs3/fP7ynebEAs0HGCU+qQVJJqWBeTvQnp56a0+W5QWDNRP9saLbypsntyIXXLuztEkeftBIVm1HXu6BQYmgpjvCYka/6T81DS6A0G7taarkaq+/WIeUATQOokXkngtOpu+MDf894OQCNC9wzZhYThMrl+GqrsFrwrA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767634466; c=relaxed/simple; bh=rjS+Hg6J5sVCr/E5j5CHtHK/wiRrw2j/Zeq0KRS+p6k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ESWFtUj1rB8nikrx6tl3rPRwQKgCWazwuXu3jN+f2YKic9gl+mt8EdQEkNt4YNkGBseL9UxWXJ/MMYr64MZrp0GiEV9qSmyecL2HhdMDKxwT+p36Wu8ACbzP5eIhpi8mcjn5LAhoH+KpGROWnWu54nnQC+NyWl8Ha8KwaU200Tk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NM5XQP3O; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NM5XQP3O" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 77CAAC116D0; Mon, 5 Jan 2026 17:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1767634466; bh=rjS+Hg6J5sVCr/E5j5CHtHK/wiRrw2j/Zeq0KRS+p6k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NM5XQP3OyXcg1fyQ3tz+s5++U8AFXkJtXmpfv1VozU2d+sKIbq+AqmuSaNJJF9sdt vij/ym7JV02UbA0ZhDac1eX0k7qCzX1Azc763AwgVdL6sACli2wPPEsXiOoNMrEY7O XJtk0vt9SrNz5XVDAyAl4Jxfj0PVTgDYWVZbHhD8BjTNu1aN7MZSQtV2F/0aeMb6Lr aL8J/t/wf3CqsmuBzGIvPtctE8+qtL3DRpL5PMeAz0TNa0NS76BAWjZXXh7E5Y8spo RJCyPbaZ5JRYWSR8nsKQM2m9xqhoJIG70kJiX3LXvpvr+6MEJOb1zBxdtRtukvz81K oKFBJbZKbPFfQ== From: Sasha Levin To: stable@vger.kernel.org Cc: Jim Quinlan , Bjorn Helgaas , Manivannan Sadhasivam , Florian Fainelli , Sasha Levin Subject: [PATCH 6.12.y 3/3] PCI: brcmstb: Fix disabling L0s capability Date: Mon, 5 Jan 2026 12:34:20 -0500 Message-ID: <20260105173420.2692565-3-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260105173420.2692565-1-sashal@kernel.org> References: <2026010519-syndrome-eccentric-90f2@gregkh> <20260105173420.2692565-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Jim Quinlan [ Upstream commit 9583f9d22991d2cfb5cc59a2552040c4ae98d998 ] caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested") set PCI_EXP_LNKCAP_ASPM_L1 and (optionally) PCI_EXP_LNKCAP_ASPM_L0S in PCI_EXP_LNKCAP (aka PCIE_RC_CFG_PRIV1_LINK_CAPABILITY in brcmstb). But instead of using PCI_EXP_LNKCAP_ASPM_L1 and PCI_EXP_LNKCAP_ASPM_L0S directly, it used PCIE_LINK_STATE_L1 and PCIE_LINK_STATE_L0S, which are Linux-created values that only coincidentally matched the PCIe spec. b478e162f227 ("PCI/ASPM: Consolidate link state defines") later changed them so they no longer matched the PCIe spec, so the bits ended up in the wrong place in PCI_EXP_LNKCAP. Use PCI_EXP_LNKCAP_ASPM_L0S to clear L0s support when there's an 'aspm-no-l0s' property. Rely on brcmstb hardware to advertise L0s and/or L1 support otherwise. Fixes: caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested") Reported-by: Bjorn Helgaas Closes: https://lore.kernel.org/linux-pci/20250925194424.GA2197200@bhelgaas Signed-off-by: Jim Quinlan [mani: reworded subject and description, added closes tag and CCed stable] Signed-off-by: Manivannan Sadhasivam [bhelgaas: commit log] Signed-off-by: Bjorn Helgaas Reviewed-by: Florian Fainelli Cc: stable@vger.kernel.org Link: https://patch.msgid.link/20251003170436.1446030-1-james.quinlan@broadcom.com Signed-off-by: Sasha Levin --- drivers/pci/controller/pcie-brcmstb.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c index 29f0da00c729..3f9b1f7131bf 100644 --- a/drivers/pci/controller/pcie-brcmstb.c +++ b/drivers/pci/controller/pcie-brcmstb.c @@ -47,7 +47,6 @@ #define PCIE_RC_CFG_PRIV1_LINK_CAPABILITY 0x04dc #define PCIE_RC_CFG_PRIV1_LINK_CAPABILITY_MAX_LINK_WIDTH_MASK 0x1f0 -#define PCIE_RC_CFG_PRIV1_LINK_CAPABILITY_ASPM_SUPPORT_MASK 0xc00 #define PCIE_RC_CFG_PRIV1_ROOT_CAP 0x4f8 #define PCIE_RC_CFG_PRIV1_ROOT_CAP_L1SS_MODE_MASK 0xf8 @@ -1029,7 +1028,7 @@ static int brcm_pcie_setup(struct brcm_pcie *pcie) void __iomem *base = pcie->base; struct pci_host_bridge *bridge; struct resource_entry *entry; - u32 tmp, burst, aspm_support, num_lanes, num_lanes_cap; + u32 tmp, burst, num_lanes, num_lanes_cap; u8 num_out_wins = 0; int num_inbound_wins = 0; int memc, ret; @@ -1129,12 +1128,9 @@ static int brcm_pcie_setup(struct brcm_pcie *pcie) /* Don't advertise L0s capability if 'aspm-no-l0s' */ - aspm_support = PCIE_LINK_STATE_L1; - if (!of_property_read_bool(pcie->np, "aspm-no-l0s")) - aspm_support |= PCIE_LINK_STATE_L0S; tmp = readl(base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY); - u32p_replace_bits(&tmp, aspm_support, - PCIE_RC_CFG_PRIV1_LINK_CAPABILITY_ASPM_SUPPORT_MASK); + if (of_property_read_bool(pcie->np, "aspm-no-l0s")) + tmp &= ~PCI_EXP_LNKCAP_ASPM_L0S; writel(tmp, base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY); /* 'tmp' still holds the contents of PRIV1_LINK_CAPABILITY */ -- 2.51.0