From 7d96990effb625e3ee1b7e6766495e4e8abbb9fc Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 20 Aug 2025 16:38:24 +0800 Subject: [PATCH] [DM/PCI] Fixup the DWC PCI resource release Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pci/host/dw/pcie-dw_host.c | 14 ++++++++++++-- 1 file 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; }