Path: blob/master/arch/sh/drivers/pci/fixups-rts7751r2d.c
10819 views
/*1* arch/sh/drivers/pci/fixups-rts7751r2d.c2*3* RTS7751R2D / LBOXRE2 PCI fixups4*5* Copyright (C) 2003 Lineo uSolutions, Inc.6* Copyright (C) 2004 Paul Mundt7* Copyright (C) 2007 Nobuhiro Iwamatsu8*9* This file is subject to the terms and conditions of the GNU General Public10* License. See the file "COPYING" in the main directory of this archive11* for more details.12*/13#include <linux/pci.h>14#include <mach/lboxre2.h>15#include <mach/r2d.h>16#include "pci-sh4.h"17#include <generated/machtypes.h>1819#define PCIMCR_MRSET_OFF 0xBFFFFFFF20#define PCIMCR_RFSH_OFF 0xFFFFFFFB2122static u8 rts7751r2d_irq_tab[] __initdata = {23IRQ_PCI_INTA,24IRQ_PCI_INTB,25IRQ_PCI_INTC,26IRQ_PCI_INTD,27};2829static char lboxre2_irq_tab[] __initdata = {30IRQ_ETH0, IRQ_ETH1, IRQ_INTA, IRQ_INTD,31};3233int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)34{35if (mach_is_lboxre2())36return lboxre2_irq_tab[slot];37else38return rts7751r2d_irq_tab[slot];39}4041int pci_fixup_pcic(struct pci_channel *chan)42{43unsigned long bcr1, mcr;4445bcr1 = __raw_readl(SH7751_BCR1);46bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */47pci_write_reg(chan, bcr1, SH4_PCIBCR1);4849/* Enable all interrupts, so we known what to fix */50pci_write_reg(chan, 0x0000c3ff, SH4_PCIINTM);51pci_write_reg(chan, 0x0000380f, SH4_PCIAINTM);5253pci_write_reg(chan, 0xfb900047, SH7751_PCICONF1);54pci_write_reg(chan, 0xab000001, SH7751_PCICONF4);5556mcr = __raw_readl(SH7751_MCR);57mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;58pci_write_reg(chan, mcr, SH4_PCIMCR);5960pci_write_reg(chan, 0x0c000000, SH7751_PCICONF5);61pci_write_reg(chan, 0xd0000000, SH7751_PCICONF6);62pci_write_reg(chan, 0x0c000000, SH4_PCILAR0);63pci_write_reg(chan, 0x00000000, SH4_PCILAR1);6465return 0;66}676869