lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0799/1039] PCI: mvebu: Check for errors from pci_bridge_emul_init() call
    Date
    From: Pali Rohár <pali@kernel.org>

    [ Upstream commit 5d18d702e5c9309f4195653475c7a7fdde4ca71f ]

    Function pci_bridge_emul_init() may fail so correctly check for errors.

    Link: https://lore.kernel.org/r/20211125124605.25915-3-pali@kernel.org
    Fixes: 1f08673eef12 ("PCI: mvebu: Convert to PCI emulated bridge config space")
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pci/controller/pci-mvebu.c | 15 ++++++++++++---
    1 file changed, 12 insertions(+), 3 deletions(-)

    diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
    index ed13e81cd691d..e6d63ad4d23b8 100644
    --- a/drivers/pci/controller/pci-mvebu.c
    +++ b/drivers/pci/controller/pci-mvebu.c
    @@ -570,7 +570,7 @@ static struct pci_bridge_emul_ops mvebu_pci_bridge_emul_ops = {
    * Initialize the configuration space of the PCI-to-PCI bridge
    * associated with the given PCIe interface.
    */
    -static void mvebu_pci_bridge_emul_init(struct mvebu_pcie_port *port)
    +static int mvebu_pci_bridge_emul_init(struct mvebu_pcie_port *port)
    {
    struct pci_bridge_emul *bridge = &port->bridge;

    @@ -589,7 +589,7 @@ static void mvebu_pci_bridge_emul_init(struct mvebu_pcie_port *port)
    bridge->data = port;
    bridge->ops = &mvebu_pci_bridge_emul_ops;

    - pci_bridge_emul_init(bridge, PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR);
    + return pci_bridge_emul_init(bridge, PCI_BRIDGE_EMUL_NO_PREFETCHABLE_BAR);
    }

    static inline struct mvebu_pcie *sys_to_pcie(struct pci_sys_data *sys)
    @@ -1112,9 +1112,18 @@ static int mvebu_pcie_probe(struct platform_device *pdev)
    continue;
    }

    + ret = mvebu_pci_bridge_emul_init(port);
    + if (ret < 0) {
    + dev_err(dev, "%s: cannot init emulated bridge\n",
    + port->name);
    + devm_iounmap(dev, port->base);
    + port->base = NULL;
    + mvebu_pcie_powerdown(port);
    + continue;
    + }
    +
    mvebu_pcie_setup_hw(port);
    mvebu_pcie_set_local_dev_nr(port, 1);
    - mvebu_pci_bridge_emul_init(port);
    }

    pcie->nports = i;
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-09-17 16:14    [W:5.089 / U:1.232 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site