blob: 8b0941515b0f8e16eb47a693ef6dde3806b50a6e [file] [log] [blame]
Nobuhiro Iwamatsub7aee512007-03-30 14:49:21 +09001/*
2 * linux/arch/sh/drivers/pci/ops-se7780.c
3 *
4 * Copyright (C) 2006 Nobuhiro Iwamatsu
5 *
6 * PCI initialization for the Hitachi UL Solution Engine 7780SE03
7 *
8 * May be copied or modified under the terms of the GNU General Public
9 * License. See linux/COPYING for more information.
10 */
11#include <linux/kernel.h>
12#include <linux/types.h>
13#include <linux/init.h>
14#include <linux/delay.h>
15#include <linux/pci.h>
Paul Mundt939a24a2008-07-29 21:41:37 +090016#include <mach-se/mach/se7780.h>
Nobuhiro Iwamatsub7aee512007-03-30 14:49:21 +090017#include <asm/io.h>
18#include "pci-sh4.h"
19
20/*
21 * IDSEL = AD16 PCI slot
22 * IDSEL = AD17 PCI slot
23 * IDSEL = AD18 Serial ATA Controller (Silicon Image SiL3512A)
24 * IDSEL = AD19 USB Host Controller (NEC uPD7210100A)
25 */
26
27/* IDSEL [16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31] */
28static char se7780_irq_tab[4][16] __initdata = {
29 /* INTA */
30 { 65, 68, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
31 /* INTB */
32 { 66, 65, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
33 /* INTC */
34 { 67, 66, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
35 /* INTD */
36 { 68, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
37};
38
39int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
40{
41 return se7780_irq_tab[pin-1][slot];
42}
43
Nobuhiro Iwamatsub7aee512007-03-30 14:49:21 +090044static struct sh4_pci_address_map se7780_pci_map = {
45 .window0 = {
46 .base = SH7780_CS2_BASE_ADDR,
47 .size = 0x04000000,
48 },
Nobuhiro Iwamatsub7aee512007-03-30 14:49:21 +090049};
50
51int __init pcibios_init_platform(void)
52{
53 printk("SH7780 PCI: Finished initialization of the PCI controller\n");
54
55 /*
56 * FPGA PCISEL register initialize
57 *
58 * CPU || SLOT1 | SLOT2 | S-ATA | USB
59 * -------------------------------------
60 * INTA || INTA | INTD | -- | INTB
61 * -------------------------------------
62 * INTB || INTB | INTA | -- | INTC
63 * -------------------------------------
64 * INTC || INTC | INTB | INTA | --
65 * -------------------------------------
66 * INTD || INTD | INTC | -- | INTA
67 * -------------------------------------
68 */
69 ctrl_outw(0x0013, FPGA_PCI_INTSEL1);
70 ctrl_outw(0xE402, FPGA_PCI_INTSEL2);
71
Paul Mundtab1363a2009-04-17 17:07:47 +090072 return sh7780_pcic_init(&se7780_pci_map);
Nobuhiro Iwamatsub7aee512007-03-30 14:49:21 +090073}