2005-04-16 15:20:36 -07:00
/*
* arch / sh / drivers / pci / fixups - rts7751r2d . c
*
2009-04-20 21:27:15 +09:00
* RTS7751R2D / LBOXRE2 PCI fixups
2005-04-16 15:20:36 -07:00
*
* Copyright ( C ) 2003 Lineo uSolutions , Inc .
* Copyright ( C ) 2004 Paul Mundt
2009-04-20 21:27:15 +09:00
* Copyright ( C ) 2007 Nobuhiro Iwamatsu
2005-04-16 15:20:36 -07:00
*
* 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 .
*/
2009-03-11 15:41:51 +09:00
# include <linux/pci.h>
2009-04-20 21:27:15 +09:00
# include <mach/lboxre2.h>
# include <mach/r2d.h>
2006-09-27 16:43:28 +09:00
# include "pci-sh4.h"
2009-10-17 22:20:22 +02:00
# include <generated/machtypes.h>
2005-04-16 15:20:36 -07:00
# define PCIMCR_MRSET_OFF 0xBFFFFFFF
# define PCIMCR_RFSH_OFF 0xFFFFFFFB
2009-04-20 21:27:15 +09:00
static u8 rts7751r2d_irq_tab [ ] __initdata = {
IRQ_PCI_INTA ,
IRQ_PCI_INTB ,
IRQ_PCI_INTC ,
IRQ_PCI_INTD ,
} ;
static char lboxre2_irq_tab [ ] __initdata = {
IRQ_ETH0 , IRQ_ETH1 , IRQ_INTA , IRQ_INTD ,
} ;
2011-06-10 15:30:21 +01:00
int __init pcibios_map_platform_irq ( const struct pci_dev * pdev , u8 slot , u8 pin )
2009-04-20 21:27:15 +09:00
{
if ( mach_is_lboxre2 ( ) )
return lboxre2_irq_tab [ slot ] ;
else
return rts7751r2d_irq_tab [ slot ] ;
}
2009-03-11 15:41:51 +09:00
int pci_fixup_pcic ( struct pci_channel * chan )
2005-04-16 15:20:36 -07:00
{
unsigned long bcr1 , mcr ;
2010-01-26 12:58:40 +09:00
bcr1 = __raw_readl ( SH7751_BCR1 ) ;
2005-04-16 15:20:36 -07:00
bcr1 | = 0x40080000 ; /* Enable Bit 19 BREQEN, set PCIC to slave */
2009-03-11 15:41:51 +09:00
pci_write_reg ( chan , bcr1 , SH4_PCIBCR1 ) ;
2005-04-16 15:20:36 -07:00
/* Enable all interrupts, so we known what to fix */
2009-03-11 15:41:51 +09:00
pci_write_reg ( chan , 0x0000c3ff , SH4_PCIINTM ) ;
pci_write_reg ( chan , 0x0000380f , SH4_PCIAINTM ) ;
2005-04-16 15:20:36 -07:00
2009-03-11 15:41:51 +09:00
pci_write_reg ( chan , 0xfb900047 , SH7751_PCICONF1 ) ;
pci_write_reg ( chan , 0xab000001 , SH7751_PCICONF4 ) ;
2005-04-16 15:20:36 -07:00
2010-01-26 12:58:40 +09:00
mcr = __raw_readl ( SH7751_MCR ) ;
2005-04-16 15:20:36 -07:00
mcr = ( mcr & PCIMCR_MRSET_OFF ) & PCIMCR_RFSH_OFF ;
2009-03-11 15:41:51 +09:00
pci_write_reg ( chan , mcr , SH4_PCIMCR ) ;
2006-09-27 16:43:28 +09:00
2009-03-11 15:41:51 +09:00
pci_write_reg ( chan , 0x0c000000 , SH7751_PCICONF5 ) ;
pci_write_reg ( chan , 0xd0000000 , SH7751_PCICONF6 ) ;
pci_write_reg ( chan , 0x0c000000 , SH4_PCILAR0 ) ;
pci_write_reg ( chan , 0x00000000 , SH4_PCILAR1 ) ;
2005-04-16 15:20:36 -07:00
return 0 ;
}