2005-10-26 11:16:38 +04:00
/*
* Functions for setting up and using a MPC106 northbridge
* Extracted from arch / powerpc / platforms / powermac / pci . c .
*
* Copyright ( C ) 2003 Benjamin Herrenschmuidt ( benh @ kernel . crashing . org )
* Copyright ( C ) 1997 Paul Mackerras ( paulus @ samba . org )
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# include <linux/kernel.h>
# include <linux/pci.h>
# include <linux/init.h>
# include <asm/io.h>
# include <asm/prom.h>
# include <asm/pci-bridge.h>
# include <asm/grackle.h>
# define GRACKLE_CFA(b, d, o) (0x80 | ((b) << 8) | ((d) << 16) \
| ( ( ( o ) & ~ 3 ) < < 24 ) )
# define GRACKLE_PICR1_STG 0x00000040
# define GRACKLE_PICR1_LOOPSNOOP 0x00000010
/* N.B. this is called before bridges is initialized, so we can't
use grackle_pcibios_ { read , write } _config_dword . */
static inline void grackle_set_stg ( struct pci_controller * bp , int enable )
{
unsigned int val ;
out_be32 ( bp - > cfg_addr , GRACKLE_CFA ( 0 , 0 , 0xa8 ) ) ;
val = in_le32 ( bp - > cfg_data ) ;
val = enable ? ( val | GRACKLE_PICR1_STG ) :
( val & ~ GRACKLE_PICR1_STG ) ;
out_be32 ( bp - > cfg_addr , GRACKLE_CFA ( 0 , 0 , 0xa8 ) ) ;
out_le32 ( bp - > cfg_data , val ) ;
( void ) in_le32 ( bp - > cfg_data ) ;
}
static inline void grackle_set_loop_snoop ( struct pci_controller * bp , int enable )
{
unsigned int val ;
out_be32 ( bp - > cfg_addr , GRACKLE_CFA ( 0 , 0 , 0xa8 ) ) ;
val = in_le32 ( bp - > cfg_data ) ;
val = enable ? ( val | GRACKLE_PICR1_LOOPSNOOP ) :
( val & ~ GRACKLE_PICR1_LOOPSNOOP ) ;
out_be32 ( bp - > cfg_addr , GRACKLE_CFA ( 0 , 0 , 0xa8 ) ) ;
out_le32 ( bp - > cfg_data , val ) ;
( void ) in_le32 ( bp - > cfg_data ) ;
}
void __init setup_grackle ( struct pci_controller * hose )
{
2007-07-20 01:07:35 +04:00
setup_indirect_pci ( hose , 0xfec00000 , 0xfee00000 , 0 ) ;
2010-02-02 07:34:14 +03:00
if ( of_machine_is_compatible ( " PowerMac1,1 " ) )
2011-07-12 18:25:51 +04:00
pci_add_flags ( PCI_REASSIGN_ALL_BUS ) ;
2010-02-02 07:34:14 +03:00
if ( of_machine_is_compatible ( " AAPL,PowerBook1998 " ) )
2005-10-26 11:16:38 +04:00
grackle_set_loop_snoop ( hose , 1 ) ;
#if 0 /* Disabled for now, HW problems ??? */
grackle_set_stg ( hose , 1 ) ;
# endif
}