diff options
| -rw-r--r-- | arch/powerpc/Kconfig | 5 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powermac/pci.c | 45 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/Makefile | 1 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/grackle.c | 64 | ||||
| -rw-r--r-- | include/asm-powerpc/grackle.h | 7 | 
5 files changed, 78 insertions, 44 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index ce5100cadd3..964ded4a757 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -286,6 +286,7 @@ config PPC_CHRP  	select PPC_I8259  	select PPC_INDIRECT_PCI  	select PPC_RTAS +	select PPC_MPC106  	default y  config PPC_PMAC @@ -366,6 +367,10 @@ config IBMVIO  	bool  	default y +config PPC_MPC106 +	bool +	default n +  source "drivers/cpufreq/Kconfig"  config CPU_FREQ_PMAC diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c index ebe22a2267d..8f818d092e2 100644 --- a/arch/powerpc/platforms/powermac/pci.c +++ b/arch/powerpc/platforms/powermac/pci.c @@ -23,6 +23,7 @@  #include <asm/pci-bridge.h>  #include <asm/machdep.h>  #include <asm/pmac_feature.h> +#include <asm/grackle.h>  #ifdef CONFIG_PPC64  #include <asm/iommu.h>  #include <asm/ppc-pci.h> @@ -584,50 +585,6 @@ static void __init fixup_nec_usb2(void)  	}  } -#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) -{ -	setup_indirect_pci(hose, 0xfec00000, 0xfee00000); -	if (machine_is_compatible("AAPL,PowerBook1998")) -		grackle_set_loop_snoop(hose, 1); -#if 0	/* Disabled for now, HW problems ??? */ -	grackle_set_stg(hose, 1); -#endif -} -  static void __init setup_bandit(struct pci_controller *hose,  				struct reg_property *addr)  { diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile index f3c9e61c391..97119c0ffc7 100644 --- a/arch/powerpc/sysdev/Makefile +++ b/arch/powerpc/sysdev/Makefile @@ -1,3 +1,4 @@  obj-$(CONFIG_MPIC)		+= mpic.o  obj-$(CONFIG_PPC_INDIRECT_PCI)	+= indirect_pci.o  obj-$(CONFIG_PPC_I8259)		+= i8259.o +obj-$(CONFIG_PPC_MPC106)	+= grackle.o diff --git a/arch/powerpc/sysdev/grackle.c b/arch/powerpc/sysdev/grackle.c new file mode 100644 index 00000000000..b6ec793a23b --- /dev/null +++ b/arch/powerpc/sysdev/grackle.c @@ -0,0 +1,64 @@ +/* + * 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) +{ +	setup_indirect_pci(hose, 0xfec00000, 0xfee00000); +	if (machine_is_compatible("AAPL,PowerBook1998")) +		grackle_set_loop_snoop(hose, 1); +#if 0	/* Disabled for now, HW problems ??? */ +	grackle_set_stg(hose, 1); +#endif +} diff --git a/include/asm-powerpc/grackle.h b/include/asm-powerpc/grackle.h new file mode 100644 index 00000000000..563c7a5e64c --- /dev/null +++ b/include/asm-powerpc/grackle.h @@ -0,0 +1,7 @@ +/* + * Functions for setting up and using a MPC106 northbridge + */ + +#include <asm/pci-bridge.h> + +extern void setup_grackle(struct pci_controller *hose);  |