Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 2 | Pete Popov, ppopov@pacbell.net |
| 3 | 07/11/2001 |
| 4 | |
| 5 | This README briefly explains how to use the pci and pci_auto |
| 6 | code in arch/mips/kernel. The code was ported from PowerPC and |
| 7 | modified slightly. It has been tested pretty well on PPC on some |
| 8 | rather complex systems with multiple bridges and devices behind |
| 9 | each bridge. However, at the time this README was written, the |
| 10 | mips port was tested only on boards with a single pci bus and |
| 11 | no P2P bridges. It's very possible that on boards with P2P |
| 12 | bridges some modifications have to be made. The code will |
| 13 | evolve, no doubt, but currently every single mips board |
| 14 | is doing its own pcibios thing and it has become a big |
| 15 | mess. This generic pci code is meant to clean up the mips |
| 16 | pci mess and make it easier to add pci support to new boards. |
| 17 | |
| 18 | inside the define for your board in arch/mips/config.in. |
| 19 | For example, the Galileo EV96100 board looks like this: |
| 20 | |
| 21 | if [ "$CONFIG_MIPS_EV96100" = "y" ]; then |
| 22 | define_bool CONFIG_PCI y |
| 23 | define_bool CONFIG_MIPS_GT96100 y |
| 24 | define_bool CONFIG_NEW_PCI y |
| 25 | define_bool CONFIG_SWAP_IO_SPACE y |
| 26 | fi |
| 27 | |
| 28 | |
| 29 | Next, if you want to use the arch/mips/kernel/pci code, which has the |
| 30 | pcibios_init() function, add |
| 31 | |
| 32 | define_bool CONFIG_NEW_PCI y |
| 33 | |
| 34 | inside the define for your board. Again, the EV96100 example above |
| 35 | show NEW_PCI turned on. |
| 36 | |
| 37 | |
| 38 | Now you need to add your files to hook in your pci configuration |
| 39 | cycles. Usually you'll need only a couple of files named something |
| 40 | like pci_fixups.c and pci_ops.c. You can copy the templates |
| 41 | provided and fill in the code. |
| 42 | |
| 43 | The file pci_ops.c should contain the pci configuration cycles routines. |
| 44 | It also has the mips_pci_channels[] array which contains the descriptors |
| 45 | of each pci controller. |
| 46 | |
| 47 | The file pci_fixups.c contains a few routines to do interrupt fixups, |
| 48 | resources fixups, and, if needed, pci bios fixups. |
| 49 | |
| 50 | Usually you'll put your pci_fixups.c file in your board specific directory, |
| 51 | since the functions in that file are board specific. The functions in |
| 52 | pci_ops.c, on the other hand, are usually pci controller specific so that |
| 53 | file could be shared among a few different boards using the same |
| 54 | pci controller. |