Commit | Line | Data |
---|---|---|
830825d6 PM |
1 | /* |
2 | * Functions for setting up and using a MPC106 northbridge | |
3 | * Extracted from arch/powerpc/platforms/powermac/pci.c. | |
4 | * | |
5 | * Copyright (C) 2003 Benjamin Herrenschmuidt (benh@kernel.crashing.org) | |
6 | * Copyright (C) 1997 Paul Mackerras (paulus@samba.org) | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public License | |
10 | * as published by the Free Software Foundation; either version | |
11 | * 2 of the License, or (at your option) any later version. | |
12 | */ | |
13 | #include <linux/kernel.h> | |
14 | #include <linux/pci.h> | |
15 | #include <linux/init.h> | |
16 | ||
17 | #include <asm/io.h> | |
18 | #include <asm/prom.h> | |
19 | #include <asm/pci-bridge.h> | |
20 | #include <asm/grackle.h> | |
21 | ||
22 | #define GRACKLE_CFA(b, d, o) (0x80 | ((b) << 8) | ((d) << 16) \ | |
23 | | (((o) & ~3) << 24)) | |
24 | ||
25 | #define GRACKLE_PICR1_STG 0x00000040 | |
26 | #define GRACKLE_PICR1_LOOPSNOOP 0x00000010 | |
27 | ||
28 | /* N.B. this is called before bridges is initialized, so we can't | |
29 | use grackle_pcibios_{read,write}_config_dword. */ | |
30 | static inline void grackle_set_stg(struct pci_controller* bp, int enable) | |
31 | { | |
32 | unsigned int val; | |
33 | ||
34 | out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8)); | |
35 | val = in_le32(bp->cfg_data); | |
36 | val = enable? (val | GRACKLE_PICR1_STG) : | |
37 | (val & ~GRACKLE_PICR1_STG); | |
38 | out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8)); | |
39 | out_le32(bp->cfg_data, val); | |
40 | (void)in_le32(bp->cfg_data); | |
41 | } | |
42 | ||
43 | static inline void grackle_set_loop_snoop(struct pci_controller *bp, int enable) | |
44 | { | |
45 | unsigned int val; | |
46 | ||
47 | out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8)); | |
48 | val = in_le32(bp->cfg_data); | |
49 | val = enable? (val | GRACKLE_PICR1_LOOPSNOOP) : | |
50 | (val & ~GRACKLE_PICR1_LOOPSNOOP); | |
51 | out_be32(bp->cfg_addr, GRACKLE_CFA(0, 0, 0xa8)); | |
52 | out_le32(bp->cfg_data, val); | |
53 | (void)in_le32(bp->cfg_data); | |
54 | } | |
55 | ||
56 | void __init setup_grackle(struct pci_controller *hose) | |
57 | { | |
2e56ff20 | 58 | setup_indirect_pci(hose, 0xfec00000, 0xfee00000, 0); |
71a157e8 | 59 | if (of_machine_is_compatible("PowerMac1,1")) |
0e47ff1c | 60 | pci_add_flags(PCI_REASSIGN_ALL_BUS); |
71a157e8 | 61 | if (of_machine_is_compatible("AAPL,PowerBook1998")) |
830825d6 PM |
62 | grackle_set_loop_snoop(hose, 1); |
63 | #if 0 /* Disabled for now, HW problems ??? */ | |
64 | grackle_set_stg(hose, 1); | |
65 | #endif | |
66 | } |