fsl_8xxx_pci.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2008 Extreme Engineering Solutions, Inc.
  4. * Copyright 2007-2008 Freescale Semiconductor, Inc.
  5. */
  6. #include <common.h>
  7. #include <pci.h>
  8. #include <asm/fsl_pci.h>
  9. #include <asm/fsl_serdes.h>
  10. #include <asm/io.h>
  11. #include <linux/compiler.h>
  12. #include <linux/libfdt.h>
  13. #include <fdt_support.h>
  14. #ifdef CONFIG_PCI1
  15. static struct pci_controller pci1_hose;
  16. #endif
  17. void pci_init_board(void)
  18. {
  19. int first_free_busno = 0;
  20. #ifdef CONFIG_PCI1
  21. int pcie_ep;
  22. struct fsl_pci_info pci_info;
  23. volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
  24. u32 devdisr = in_be32(&gur->devdisr);
  25. uint pci_spd_norm = in_be32(&gur->pordevsr) & MPC85xx_PORDEVSR_PCI1_SPD;
  26. uint pci_32 = in_be32(&gur->pordevsr) & MPC85xx_PORDEVSR_PCI1_PCI32;
  27. uint pci_arb = in_be32(&gur->pordevsr) & MPC85xx_PORDEVSR_PCI1_ARB;
  28. uint pcix = in_be32(&gur->pordevsr) & MPC85xx_PORDEVSR_PCI1;
  29. uint freq = CONFIG_SYS_CLK_FREQ / 1000 / 1000;
  30. if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
  31. SET_STD_PCI_INFO(pci_info, 1);
  32. set_next_law(pci_info.mem_phys,
  33. law_size_bits(pci_info.mem_size), pci_info.law);
  34. set_next_law(pci_info.io_phys,
  35. law_size_bits(pci_info.io_size), pci_info.law);
  36. pcie_ep = fsl_setup_hose(&pci1_hose, pci_info.regs);
  37. printf("PCI1: %d bit %s, %s %d MHz, %s, %s\n",
  38. pci_32 ? 32 : 64,
  39. pcix ? "PCIX" : "PCI",
  40. pci_spd_norm ? ">=" : "<=",
  41. pcix ? freq * 2 : freq,
  42. pcie_ep ? "agent" : "host",
  43. pci_arb ? "arbiter" : "external-arbiter");
  44. first_free_busno = fsl_pci_init_port(&pci_info,
  45. &pci1_hose, first_free_busno);
  46. } else {
  47. printf("PCI1: disabled\n");
  48. }
  49. #elif defined CONFIG_ARCH_MPC8548
  50. volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
  51. /* PCI1 not present on MPC8572 */
  52. setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1);
  53. #endif
  54. fsl_pcie_init_board(first_free_busno);
  55. }
  56. #if defined(CONFIG_OF_BOARD_SETUP)
  57. void ft_board_pci_setup(void *blob, bd_t *bd)
  58. {
  59. FT_FSL_PCI_SETUP;
  60. }
  61. #endif /* CONFIG_OF_BOARD_SETUP */