From 59a557f360a84f475fc10beabe14379322abf2ae Mon Sep 17 00:00:00 2001 From: Xiaowei Bao Date: Fri, 26 Oct 2018 09:56:26 +0800 Subject: [PATCH] pci: layerscape: Add the dts fixup for EP and RC Add the dts fixup when PCI controller work diffferent mode. Signed-off-by: Xiaowei Bao Reviewed-by: York Sun --- drivers/pci/pcie_layerscape_fixup.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pcie_layerscape_fixup.c b/drivers/pci/pcie_layerscape_fixup.c index 1a17bd98aa..089e031724 100644 --- a/drivers/pci/pcie_layerscape_fixup.c +++ b/drivers/pci/pcie_layerscape_fixup.c @@ -218,7 +218,7 @@ static void fdt_fixup_pcie(void *blob) } #endif -static void ft_pcie_ls_setup(void *blob, struct ls_pcie *pcie) +static void ft_pcie_rc_fix(void *blob, struct ls_pcie *pcie) { int off; uint svr; @@ -243,12 +243,33 @@ static void ft_pcie_ls_setup(void *blob, struct ls_pcie *pcie) return; } - if (pcie->enabled) + if (pcie->enabled && pcie->mode == PCI_HEADER_TYPE_BRIDGE) + fdt_set_node_status(blob, off, FDT_STATUS_OKAY, 0); + else + fdt_set_node_status(blob, off, FDT_STATUS_DISABLED, 0); +} + +static void ft_pcie_ep_fix(void *blob, struct ls_pcie *pcie) +{ + int off; + + off = fdt_node_offset_by_compat_reg(blob, "fsl,ls-pcie-ep", + pcie->dbi_res.start); + if (off < 0) + return; + + if (pcie->enabled && pcie->mode == PCI_HEADER_TYPE_NORMAL) fdt_set_node_status(blob, off, FDT_STATUS_OKAY, 0); else fdt_set_node_status(blob, off, FDT_STATUS_DISABLED, 0); } +static void ft_pcie_ls_setup(void *blob, struct ls_pcie *pcie) +{ + ft_pcie_ep_fix(blob, pcie); + ft_pcie_rc_fix(blob, pcie); +} + /* Fixup Kernel DT for PCIe */ void ft_pci_setup(void *blob, bd_t *bd) { -- 2.39.5