• Thomas Petazzoni's avatar
    ARM: mvebu: mvebu-soc-id: keep clock enabled if PCIe unit is enabled · b25bcf1b
    Thomas Petazzoni authored
    Since the mvebu-soc-id code in mach-mvebu/ was introduced, several
    users have noticed a regression: the PCIe card connected in the first
    PCIe interface is not detected properly.
    
    This is due to the fact that the mvebu-soc-id code enables the PCIe
    clock of the first PCIe interface, reads the SoC device ID and
    revision number (yes this information is made available as part of
    PCIe registers), and then disables the clock. However, by doing this,
    we gate the clock and therefore loose the complex PCIe configuration
    that was done by the bootloader.
    
    Unfortunately, as of today, the kernel is not capable of doing this
    complex configuration by itself, so we really need to keep the PCIe
    clock enabled. However, we don't want to keep it enabled
    unconditionally: if the PCIe interface is not enabled or PCI support
    is not compiled into the kernel, there is no reason to keep the PCIe
    clock running.
    
    This issue was discussed with Kevin Hilman, and the suggested solution
    was to make the mvebu-soc-id code keep the clock enabled in case it
    will be needed for PCIe. This is therefore the solution implemented in
    this patch.
    
    Long term, we hope to make the kernel more capable in terms of PCIe
    configuration for this platform, which will anyway be needed to
    support the compilation of the PCIe host controller driver as a
    module. In the mean time however, we don't have much other choice than
    to implement the currently proposed solution.
    Reported-by: default avatarNeil Greatorex <neil@fatboyfat.co.uk>
    Cc: Neil Greatorex <neil@fatboyfat.co.uk>
    Cc: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
    Cc: Kevin Hilman <khilman@linaro.org>
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Link: https://lkml.kernel.org/r/1399903900-29977-3-git-send-email-thomas.petazzoni@free-electrons.com
    Fixes: af8d1c63 ("ARM: mvebu: Add support to get the ID and the revision of a SoC")
    Cc: <stable@vger.kernel.org> # 3.14+: 42a18d1c: ARM: mvebu: mvebu-soc-id: add missing clk_put() call
    Cc: <stable@vger.kernel.org> # 3.14+
    Acked-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    Tested-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Tested-by: default avatarWilly Tarreau <w@1wt.eu>
    Signed-off-by: default avatarJason Cooper <jason@lakedaemon.net>
    b25bcf1b
mvebu-soc-id.c 2.97 KB