diff options
Diffstat (limited to 'arch/powerpc/platforms/52xx/mpc52xx_common.c')
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_common.c | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_common.c b/arch/powerpc/platforms/52xx/mpc52xx_common.c index 2dd415ff55..3bc201e07e 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_common.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_common.c | |||
@@ -13,10 +13,9 @@ | |||
13 | #undef DEBUG | 13 | #undef DEBUG |
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | 16 | #include <linux/of_platform.h> | |
17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
18 | #include <asm/prom.h> | 18 | #include <asm/prom.h> |
19 | #include <asm/of_platform.h> | ||
20 | #include <asm/mpc52xx.h> | 19 | #include <asm/mpc52xx.h> |
21 | 20 | ||
22 | 21 | ||
@@ -76,44 +75,33 @@ mpc52xx_find_ipb_freq(struct device_node *node) | |||
76 | EXPORT_SYMBOL(mpc52xx_find_ipb_freq); | 75 | EXPORT_SYMBOL(mpc52xx_find_ipb_freq); |
77 | 76 | ||
78 | 77 | ||
78 | /* | ||
79 | * Configure the XLB arbiter settings to match what Linux expects. | ||
80 | */ | ||
79 | void __init | 81 | void __init |
80 | mpc52xx_setup_cpu(void) | 82 | mpc5200_setup_xlb_arbiter(void) |
81 | { | 83 | { |
82 | struct mpc52xx_cdm __iomem *cdm; | ||
83 | struct mpc52xx_xlb __iomem *xlb; | 84 | struct mpc52xx_xlb __iomem *xlb; |
84 | 85 | ||
85 | /* Map zones */ | ||
86 | cdm = mpc52xx_find_and_map("mpc5200-cdm"); | ||
87 | xlb = mpc52xx_find_and_map("mpc5200-xlb"); | 86 | xlb = mpc52xx_find_and_map("mpc5200-xlb"); |
88 | 87 | if (!xlb) { | |
89 | if (!cdm || !xlb) { | ||
90 | printk(KERN_ERR __FILE__ ": " | 88 | printk(KERN_ERR __FILE__ ": " |
91 | "Error while mapping CDM/XLB during mpc52xx_setup_cpu. " | 89 | "Error mapping XLB in mpc52xx_setup_cpu(). " |
92 | "Expect some abnormal behavior\n"); | 90 | "Expect some abnormal behavior\n"); |
93 | goto unmap_regs; | 91 | return; |
94 | } | 92 | } |
95 | 93 | ||
96 | /* Use internal 48 Mhz */ | ||
97 | out_8(&cdm->ext_48mhz_en, 0x00); | ||
98 | out_8(&cdm->fd_enable, 0x01); | ||
99 | if (in_be32(&cdm->rstcfg) & 0x40) /* Assumes 33Mhz clock */ | ||
100 | out_be16(&cdm->fd_counters, 0x0001); | ||
101 | else | ||
102 | out_be16(&cdm->fd_counters, 0x5555); | ||
103 | |||
104 | /* Configure the XLB Arbiter priorities */ | 94 | /* Configure the XLB Arbiter priorities */ |
105 | out_be32(&xlb->master_pri_enable, 0xff); | 95 | out_be32(&xlb->master_pri_enable, 0xff); |
106 | out_be32(&xlb->master_priority, 0x11111111); | 96 | out_be32(&xlb->master_priority, 0x11111111); |
107 | 97 | ||
108 | /* Disable XLB pipelining */ | 98 | /* Disable XLB pipelining |
109 | /* (cfr errate 292. We could do this only just before ATA PIO | 99 | * (cfr errate 292. We could do this only just before ATA PIO |
110 | transaction and re-enable it afterwards ...) */ | 100 | * transaction and re-enable it afterwards ...) |
101 | */ | ||
111 | out_be32(&xlb->config, in_be32(&xlb->config) | MPC52xx_XLB_CFG_PLDIS); | 102 | out_be32(&xlb->config, in_be32(&xlb->config) | MPC52xx_XLB_CFG_PLDIS); |
112 | 103 | ||
113 | /* Unmap zones */ | 104 | iounmap(xlb); |
114 | unmap_regs: | ||
115 | if (cdm) iounmap(cdm); | ||
116 | if (xlb) iounmap(xlb); | ||
117 | } | 105 | } |
118 | 106 | ||
119 | void __init | 107 | void __init |