Maciej W. Rozycki | bec0204 | 2005-02-01 12:02:37 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2003, 2004 Ralf Baechle (ralf@linux-mips.org) |
| 3 | * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved. |
| 4 | * Author: Maciej W. Rozycki <macro@mips.com> |
| 5 | * |
| 6 | * This program is free software; you can distribute it and/or modify it |
| 7 | * under the terms of the GNU General Public License (Version 2) as |
| 8 | * published by the Free Software Foundation. |
| 9 | * |
| 10 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 13 | * for more details. |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License along |
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., |
| 17 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. |
| 18 | */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 19 | #include <linux/init.h> |
| 20 | #include <linux/pci.h> |
Maciej W. Rozycki | bec0204 | 2005-02-01 12:02:37 +0000 | [diff] [blame] | 21 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 22 | #include <asm/mips-boards/atlasint.h> |
| 23 | |
Maciej W. Rozycki | fc095a9 | 2006-09-12 19:12:18 +0100 | [diff] [blame] | 24 | #define PCIA ATLAS_INT_PCIA |
| 25 | #define PCIB ATLAS_INT_PCIB |
| 26 | #define PCIC ATLAS_INT_PCIC |
| 27 | #define PCID ATLAS_INT_PCID |
| 28 | #define INTA ATLAS_INT_INTA |
| 29 | #define INTB ATLAS_INT_INTB |
| 30 | #define ETH ATLAS_INT_ETH |
| 31 | #define INTC ATLAS_INT_INTC |
| 32 | #define SCSI ATLAS_INT_SCSI |
| 33 | #define INTD ATLAS_INT_INTD |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | |
| 35 | static char irq_tab[][5] __initdata = { |
| 36 | /* INTA INTB INTC INTD */ |
| 37 | {0, 0, 0, 0, 0 }, /* 0: Unused */ |
| 38 | {0, 0, 0, 0, 0 }, /* 1: Unused */ |
| 39 | {0, 0, 0, 0, 0 }, /* 2: Unused */ |
| 40 | {0, 0, 0, 0, 0 }, /* 3: Unused */ |
| 41 | {0, 0, 0, 0, 0 }, /* 4: Unused */ |
| 42 | {0, 0, 0, 0, 0 }, /* 5: Unused */ |
| 43 | {0, 0, 0, 0, 0 }, /* 6: Unused */ |
| 44 | {0, 0, 0, 0, 0 }, /* 7: Unused */ |
| 45 | {0, 0, 0, 0, 0 }, /* 8: Unused */ |
| 46 | {0, 0, 0, 0, 0 }, /* 9: Unused */ |
| 47 | {0, 0, 0, 0, 0 }, /* 10: Unused */ |
| 48 | {0, 0, 0, 0, 0 }, /* 11: Unused */ |
| 49 | {0, 0, 0, 0, 0 }, /* 12: Unused */ |
| 50 | {0, 0, 0, 0, 0 }, /* 13: Unused */ |
| 51 | {0, 0, 0, 0, 0 }, /* 14: Unused */ |
Maciej W. Rozycki | bec0204 | 2005-02-01 12:02:37 +0000 | [diff] [blame] | 52 | {0, PCIA, PCIB, PCIC, PCID }, /* 15: cPCI (behind 21150) */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | {0, SCSI, 0, 0, 0 }, /* 16: SYM53C810A SCSI */ |
| 54 | {0, 0, 0, 0, 0 }, /* 17: Core */ |
Maciej W. Rozycki | bec0204 | 2005-02-01 12:02:37 +0000 | [diff] [blame] | 55 | {0, INTA, INTB, INTC, INTD }, /* 18: PCI Slot */ |
| 56 | {0, ETH, 0, 0, 0 }, /* 19: SAA9730 Eth. et al. */ |
| 57 | {0, 0, 0, 0, 0 }, /* 20: Unused */ |
| 58 | {0, 0, 0, 0, 0 } /* 21: Unused */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 59 | }; |
| 60 | |
Ralf Baechle | 19df0d1 | 2007-07-10 17:33:00 +0100 | [diff] [blame] | 61 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 62 | { |
| 63 | return irq_tab[slot][pin]; |
| 64 | } |
| 65 | |
| 66 | /* Do platform specific device initialization at pci_enable_device() time */ |
| 67 | int pcibios_plat_dev_init(struct pci_dev *dev) |
| 68 | { |
| 69 | return 0; |
| 70 | } |
| 71 | |
| 72 | #ifdef CONFIG_KGDB |
| 73 | /* |
| 74 | * The PCI scan may have moved the saa9730 I/O address, so reread |
| 75 | * the address here. |
| 76 | * This does mean that it's not possible to debug the PCI bus configuration |
| 77 | * code, but it is better than nothing... |
| 78 | */ |
| 79 | |
Ralf Baechle | 49a89ef | 2007-10-11 23:46:15 +0100 | [diff] [blame] | 80 | static void atlas_saa9730_base_fixup(struct pci_dev *pdev) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 81 | { |
| 82 | extern void *saa9730_base; |
| 83 | if (pdev->bus == 0 && PCI_SLOT(pdev->devfn) == 19) |
Ralf Baechle | 49a89ef | 2007-10-11 23:46:15 +0100 | [diff] [blame] | 84 | (void) pci_read_config_dword(pdev, 0x14, (u32 *)&saa9730_base); |
| 85 | printk("saa9730_base = %x\n", saa9730_base); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA9730, |
| 89 | atlas_saa9730_base_fixup); |
| 90 | |
| 91 | #endif |