pcie_fsl_fixup.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-License-Identifier: GPL-2.0+ OR X11
  2. /*
  3. * Copyright 2019 NXP
  4. *
  5. * PCIe Kernel DT fixup of DM U-Boot driver for Freescale PowerPC SoCs
  6. * Author: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
  7. */
  8. #include <common.h>
  9. #ifdef CONFIG_OF_BOARD_SETUP
  10. #include <dm.h>
  11. #include <fdt_support.h>
  12. #include <asm/fsl_pci.h>
  13. #include <linux/libfdt.h>
  14. #include "pcie_fsl.h"
  15. static void ft_fsl_pcie_setup(void *blob, struct fsl_pcie *pcie)
  16. {
  17. struct pci_controller *hose = dev_get_uclass_priv(pcie->bus);
  18. fdt_addr_t regs_addr;
  19. int off;
  20. regs_addr = dev_read_addr(pcie->bus);
  21. off = fdt_node_offset_by_compat_reg(blob, FSL_PCIE_COMPAT, regs_addr);
  22. if (off < 0) {
  23. printf("%s: Fail to find PCIe node@0x%pa\n",
  24. FSL_PCIE_COMPAT, &regs_addr);
  25. return;
  26. }
  27. if (!hose || !pcie->enabled)
  28. fdt_del_node(blob, off);
  29. else
  30. fdt_pci_dma_ranges(blob, off, hose);
  31. }
  32. /* Fixup Kernel DT for PCIe */
  33. void pci_of_setup(void *blob, struct bd_info *bd)
  34. {
  35. struct fsl_pcie *pcie;
  36. list_for_each_entry(pcie, &fsl_pcie_list, list)
  37. ft_fsl_pcie_setup(blob, pcie);
  38. }
  39. #else
  40. void pci_of_setup(void *blob, struct bd_info *bd)
  41. {
  42. }
  43. #endif