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