diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-07 21:17:40 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-07 21:17:40 +0200 |
commit | 5b6b54982258c330247957a8d877b9851ac69d53 (patch) | |
tree | 567e4b3391e0c6689cf511789fb512ef7385c16f /arch/sh/drivers/pci/fixups-se7780.c | |
parent | spi_s3c24xx.c: Fix build (diff) | |
parent | sh: R7785RP board updates. (diff) | |
download | linux-5b6b54982258c330247957a8d877b9851ac69d53.tar.xz linux-5b6b54982258c330247957a8d877b9851ac69d53.zip |
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6: (38 commits)
sh: R7785RP board updates.
sh: Update r7780rp defconfig.
sh: Add die chain notifiers.
sh: Fix APM emulation on hp6xx.
sh: Wire up more IRQs for SH7709.
sh: Solution Engine 7722 board support.
sh: Fix r7780rp build.
sh: kdump support.
sh: Move clock reporting to its own proc entry.
sh: Solution Engine SH7705 board and CPU updates.
serial: sh-sci: Fix module clock refcount for serial console.
serial: sh-sci: Fix module clock refcounting.
sh: SH7722 clock framework support.
sh: hp6xx pata_platform support.
sh: Obey CONFIG_HZ for HZ definition.
sh: Fix fstatat64() syscall.
sh: se7780 PCI support.
sh: SH7780 Solution Engine board support.
sh: Add a dummy SH-4 PCIC fixup.
sh: Tidy up L-BOX area5 addresses.
...
Diffstat (limited to 'arch/sh/drivers/pci/fixups-se7780.c')
-rw-r--r-- | arch/sh/drivers/pci/fixups-se7780.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/arch/sh/drivers/pci/fixups-se7780.c b/arch/sh/drivers/pci/fixups-se7780.c new file mode 100644 index 000000000000..880cea1c0d89 --- /dev/null +++ b/arch/sh/drivers/pci/fixups-se7780.c @@ -0,0 +1,60 @@ +/* + * arch/sh/drivers/pci/fixups-se7780.c + * + * HITACHI UL Solution Engine 7780 PCI fixups + * + * Copyright (C) 2003 Lineo uSolutions, Inc. + * Copyright (C) 2004 - 2006 Paul Mundt + * Copyright (C) 2006 Nobuhiro Iwamatsu + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include <linux/pci.h> +#include "pci-sh4.h" +#include <asm/io.h> + +int pci_fixup_pcic(void) +{ + ctrl_outl(0x00000001, SH7780_PCI_VCR2); + + /* Enable all interrupts, so we know what to fix */ + pci_write_reg(0x0000C3FF, SH7780_PCIIMR); + pci_write_reg(0x0000380F, SH7780_PCIAINTM); + + /* Set up standard PCI config registers */ + ctrl_outw(0xFB00, PCI_REG(SH7780_PCISTATUS)); + ctrl_outw(0x0047, PCI_REG(SH7780_PCICMD)); + ctrl_outb( 0x00, PCI_REG(SH7780_PCIPIF)); + ctrl_outb( 0x00, PCI_REG(SH7780_PCISUB)); + ctrl_outb( 0x06, PCI_REG(SH7780_PCIBCC)); + ctrl_outw(0x1912, PCI_REG(SH7780_PCISVID)); + ctrl_outw(0x0001, PCI_REG(SH7780_PCISID)); + + pci_write_reg(0x08000000, SH7780_PCIMBAR0); /* PCI */ + pci_write_reg(0x08000000, SH7780_PCILAR0); /* SHwy */ + pci_write_reg(0x07F00001, SH7780_PCILSR); /* size 128M w/ MBAR */ + + pci_write_reg(0x00000000, SH7780_PCIMBAR1); + pci_write_reg(0x00000000, SH7780_PCILAR1); + pci_write_reg(0x00000000, SH7780_PCILSR1); + + pci_write_reg(0xAB000801, SH7780_PCIIBAR); + + /* + * Set the MBR so PCI address is one-to-one with window, + * meaning all calls go straight through... use ifdef to + * catch erroneous assumption. + */ + pci_write_reg(0xFD000000 , SH7780_PCIMBR0); + pci_write_reg(0x00FC0000 , SH7780_PCIMBMR0); /* 16M */ + + /* Set IOBR for window containing area specified in pci.h */ + pci_write_reg(PCIBIOS_MIN_IO & ~(SH7780_PCI_IO_SIZE-1), SH7780_PCIIOBR); + pci_write_reg((SH7780_PCI_IO_SIZE-1) & (7 << 18), SH7780_PCIIOBMR); + + pci_write_reg(0xA5000C01, SH7780_PCICR); + + return 0; +} |