lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 042/314] PCI: aardvark: Dont blindly enable ASPM L0s and dont write to read-only register
    Date
    From: Pali Rohár <pali@kernel.org>

    [ Upstream commit 90c6cb4a355e7befcb557d217d1d8b8bd5875a05 ]

    Trying to change Link Status register does not have any effect as this
    is a read-only register. Trying to overwrite bits for Negotiated Link
    Width does not make sense.

    In future proper change of link width can be done via Lane Count Select
    bits in PCIe Control 0 register.

    Trying to unconditionally enable ASPM L0s via ASPM Control bits in Link
    Control register is wrong. There should be at least some detection if
    endpoint supports L0s as isn't mandatory.

    Moreover ASPM Control bits in Link Control register are controlled by
    pcie/aspm.c code which sets it according to system ASPM settings,
    immediately after aardvark driver probes. So setting these bits by
    aardvark driver has no long running effect.

    Remove code which touches ASPM L0s bits from this driver and let
    kernel's ASPM implementation to set ASPM state properly.

    Some users are reporting issues that this code is problematic for some
    Intel wifi cards and removing it fixes them, see e.g.:
    https://bugzilla.kernel.org/show_bug.cgi?id=196339

    If problems with Intel wifi cards occur even after this commit, then
    pcie/aspm.c code could be modified / hooked to not enable ASPM L0s state
    for affected problematic cards.

    Link: https://lore.kernel.org/r/20200430080625.26070-3-pali@kernel.org
    Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: Rob Herring <robh@kernel.org>
    Acked-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pci/controller/pci-aardvark.c | 4 ----
    1 file changed, 4 deletions(-)

    diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
    index 97245e0765483..f2481e80e2723 100644
    --- a/drivers/pci/controller/pci-aardvark.c
    +++ b/drivers/pci/controller/pci-aardvark.c
    @@ -344,10 +344,6 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)

    advk_pcie_wait_for_link(pcie);

    - reg = PCIE_CORE_LINK_L0S_ENTRY |
    - (1 << PCIE_CORE_LINK_WIDTH_SHIFT);
    - advk_writel(pcie, reg, PCIE_CORE_LINK_CTRL_STAT_REG);
    -
    reg = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG);
    reg |= PCIE_CORE_CMD_MEM_ACCESS_EN |
    PCIE_CORE_CMD_IO_ACCESS_EN |
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:22    [W:4.018 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site