summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuEe-GUI <[email protected]>2025-08-20 16:38:24 +0800
committerR b b666 <[email protected]>2025-08-25 11:12:02 +0800
commit7d96990effb625e3ee1b7e6766495e4e8abbb9fc (patch)
treed8452a222a513374e8d22c90fddf6bbf93269f06
parent77e845e018a83a757f67ee0a05b090fef7aebcac (diff)
[DM/PCI] Fixup the DWC PCI resource release
Signed-off-by: GuEe-GUI <[email protected]>
-rw-r--r--components/drivers/pci/host/dw/pcie-dw_host.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/components/drivers/pci/host/dw/pcie-dw_host.c b/components/drivers/pci/host/dw/pcie-dw_host.c
index 05a3dc7779..6b483318f2 100644
--- a/components/drivers/pci/host/dw/pcie-dw_host.c
+++ b/components/drivers/pci/host/dw/pcie-dw_host.c
@@ -204,6 +204,7 @@ void dw_pcie_free_msi(struct dw_pcie_port *port)
rt_dma_free_coherent(pci->dev, sizeof(rt_uint64_t), port->msi_data,
port->msi_data_phy);
+ port->msi_data = RT_NULL;
}
}
@@ -331,7 +332,8 @@ rt_err_t dw_pcie_host_init(struct dw_pcie_port *port)
{
LOG_E("Invalid count of irq = %d", port->irq_count);
- return -RT_EINVAL;
+ err = -RT_EINVAL;
+ goto _err_free_cfg;
}
}
@@ -341,7 +343,8 @@ rt_err_t dw_pcie_host_init(struct dw_pcie_port *port)
if (!port->msi_pic)
{
- return -RT_ENOMEM;
+ err = -RT_ENOMEM;
+ goto _err_free_cfg;
}
port->msi_pic->priv_data = port;
@@ -404,6 +407,13 @@ _err_free_bridge:
rt_pci_host_bridge_free(bridge);
port->bridge = RT_NULL;
+_err_free_cfg:
+ if (port->cfg0_base)
+ {
+ rt_iounmap(port->cfg0_base);
+ port->cfg0_base = RT_NULL;
+ }
+
return err;
}