pci.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (C) 2007 Freescale Semiconductor, Inc.
  3. *
  4. * See file CREDITS for list of people who contributed to this
  5. * project.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation; either version 2 of
  10. * the License, or (at your option) any later version.
  11. */
  12. #include <asm/mmu.h>
  13. #include <asm/io.h>
  14. #include <common.h>
  15. #include <mpc83xx.h>
  16. #include <pci.h>
  17. #include <i2c.h>
  18. #include <asm/fsl_i2c.h>
  19. #if defined(CONFIG_PCI)
  20. static struct pci_region pci_regions[] = {
  21. {
  22. bus_start: CFG_PCI_MEM_BASE,
  23. phys_start: CFG_PCI_MEM_PHYS,
  24. size: CFG_PCI_MEM_SIZE,
  25. flags: PCI_REGION_MEM | PCI_REGION_PREFETCH
  26. },
  27. {
  28. bus_start: CFG_PCI_MMIO_BASE,
  29. phys_start: CFG_PCI_MMIO_PHYS,
  30. size: CFG_PCI_MMIO_SIZE,
  31. flags: PCI_REGION_MEM
  32. },
  33. {
  34. bus_start: CFG_PCI_IO_BASE,
  35. phys_start: CFG_PCI_IO_PHYS,
  36. size: CFG_PCI_IO_SIZE,
  37. flags: PCI_REGION_IO
  38. }
  39. };
  40. void pci_init_board(void)
  41. {
  42. volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
  43. volatile clk83xx_t *clk = (volatile clk83xx_t *)&immr->clk;
  44. volatile law83xx_t *pci_law = immr->sysconf.pcilaw;
  45. struct pci_region *reg[] = { pci_regions };
  46. /* Enable all 5 PCI_CLK_OUTPUTS */
  47. clk->occr |= 0xf8000000;
  48. udelay(2000);
  49. /* Configure PCI Local Access Windows */
  50. pci_law[0].bar = CFG_PCI_MEM_PHYS & LAWBAR_BAR;
  51. pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB;
  52. pci_law[1].bar = CFG_PCI_IO_PHYS & LAWBAR_BAR;
  53. pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB;
  54. udelay(2000);
  55. mpc83xx_pci_init(1, reg, 0);
  56. }
  57. #endif /* CONFIG_PCI */