Unverified Commit 2a904839 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!11038 PCI: keystone: Fix NULL pointer dereference in case of DT error in...

!11038  PCI: keystone: Fix NULL pointer dereference in case of DT error in ks_pcie_setup_rc_app_regs()

Merge Pull Request from: @ci-robot 
 
PR sync from: Yang Yingliang <yangyingliang@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/OSKLL6SEPH67QLDOME5RIVTGLNSKZPW5/ 
 
https://gitee.com/src-openeuler/kernel/issues/IAKQ54 
 
Link:https://gitee.com/openeuler/kernel/pulls/11038

 

Reviewed-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
parents 47f16eba 7500d4c3
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -391,17 +391,22 @@ static void ks_pcie_clear_dbi_mode(struct keystone_pcie *ks_pcie)
	} while (val & DBI_CS2);
}

static void ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
static int ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
{
	u32 val;
	struct dw_pcie *pci = ks_pcie->pci;
	struct pcie_port *pp = &pci->pp;
	u32 num_viewport = pci->num_viewport;
	u64 start, end;
	struct resource_entry *entry;
	struct resource *mem;
	u64 start, end;
	int i;

	mem = resource_list_first_type(&pp->bridge->windows, IORESOURCE_MEM)->res;
	entry = resource_list_first_type(&pp->bridge->windows, IORESOURCE_MEM);
	if (!entry)
		return -ENODEV;

	mem = entry->res;
	start = mem->start;
	end = mem->end;

@@ -412,7 +417,7 @@ static void ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
	ks_pcie_clear_dbi_mode(ks_pcie);

	if (ks_pcie->is_am6)
		return;
		return 0;

	val = ilog2(OB_WIN_SIZE);
	ks_pcie_app_writel(ks_pcie, OB_SIZE, val);
@@ -429,6 +434,8 @@ static void ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
	val = ks_pcie_app_readl(ks_pcie, CMD_STATUS);
	val |= OB_XLAT_EN_VAL;
	ks_pcie_app_writel(ks_pcie, CMD_STATUS, val);

	return 0;
}

static void __iomem *ks_pcie_other_map_bus(struct pci_bus *bus,
@@ -825,7 +832,10 @@ static int __init ks_pcie_host_init(struct pcie_port *pp)
	dw_pcie_setup_rc(pp);

	ks_pcie_stop_link(pci);
	ks_pcie_setup_rc_app_regs(ks_pcie);
	ret = ks_pcie_setup_rc_app_regs(ks_pcie);
	if (ret)
		return ret;

	writew(PCI_IO_RANGE_TYPE_32 | (PCI_IO_RANGE_TYPE_32 << 8),
			pci->dbi_base + PCI_IO_BASE);