diff options
| -rw-r--r-- | arch/powerpc/platforms/chrp/pci.c | 27 | ||||
| -rw-r--r-- | arch/powerpc/platforms/chrp/setup.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/platforms/chrp/time.c | 7 |
3 files changed, 26 insertions, 15 deletions
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c index 82c429d487f3..00c52f27ef4f 100644 --- a/arch/powerpc/platforms/chrp/pci.c +++ b/arch/powerpc/platforms/chrp/pci.c | |||
| @@ -135,12 +135,13 @@ int __init | |||
| 135 | hydra_init(void) | 135 | hydra_init(void) |
| 136 | { | 136 | { |
| 137 | struct device_node *np; | 137 | struct device_node *np; |
| 138 | struct resource r; | ||
| 138 | 139 | ||
| 139 | np = find_devices("mac-io"); | 140 | np = find_devices("mac-io"); |
| 140 | if (np == NULL || np->n_addrs == 0) | 141 | if (np == NULL || of_address_to_resource(np, 0, &r)) |
| 141 | return 0; | 142 | return 0; |
| 142 | Hydra = ioremap(np->addrs[0].address, np->addrs[0].size); | 143 | Hydra = ioremap(r.start, r.end-r.start); |
| 143 | printk("Hydra Mac I/O at %lx\n", np->addrs[0].address); | 144 | printk("Hydra Mac I/O at %lx\n", r.start); |
| 144 | printk("Hydra Feature_Control was %x", | 145 | printk("Hydra Feature_Control was %x", |
| 145 | in_le32(&Hydra->Feature_Control)); | 146 | in_le32(&Hydra->Feature_Control)); |
| 146 | out_le32(&Hydra->Feature_Control, (HYDRA_FC_SCC_CELL_EN | | 147 | out_le32(&Hydra->Feature_Control, (HYDRA_FC_SCC_CELL_EN | |
| @@ -177,18 +178,24 @@ setup_python(struct pci_controller *hose, struct device_node *dev) | |||
| 177 | { | 178 | { |
| 178 | u32 __iomem *reg; | 179 | u32 __iomem *reg; |
| 179 | u32 val; | 180 | u32 val; |
| 180 | unsigned long addr = dev->addrs[0].address; | 181 | struct resource r; |
| 181 | 182 | ||
| 182 | setup_indirect_pci(hose, addr + 0xf8000, addr + 0xf8010); | 183 | if (of_address_to_resource(dev, 0, &r)) { |
| 184 | printk(KERN_ERR "No address for Python PCI controller\n"); | ||
| 185 | return; | ||
| 186 | } | ||
| 183 | 187 | ||
| 184 | /* Clear the magic go-slow bit */ | 188 | /* Clear the magic go-slow bit */ |
| 185 | reg = ioremap(dev->addrs[0].address + 0xf6000, 0x40); | 189 | reg = ioremap(r.start + 0xf6000, 0x40); |
| 190 | BUG_ON(!reg); | ||
| 186 | val = in_be32(®[12]); | 191 | val = in_be32(®[12]); |
| 187 | if (val & PRG_CL_RESET_VALID) { | 192 | if (val & PRG_CL_RESET_VALID) { |
| 188 | out_be32(®[12], val & ~PRG_CL_RESET_VALID); | 193 | out_be32(®[12], val & ~PRG_CL_RESET_VALID); |
| 189 | in_be32(®[12]); | 194 | in_be32(®[12]); |
| 190 | } | 195 | } |
| 191 | iounmap(reg); | 196 | iounmap(reg); |
| 197 | |||
| 198 | setup_indirect_pci(hose, r.start + 0xf8000, r.start + 0xf8010); | ||
| 192 | } | 199 | } |
| 193 | 200 | ||
| 194 | /* Marvell Discovery II based Pegasos 2 */ | 201 | /* Marvell Discovery II based Pegasos 2 */ |
| @@ -218,7 +225,7 @@ chrp_find_bridges(void) | |||
| 218 | char *model, *machine; | 225 | char *model, *machine; |
| 219 | int is_longtrail = 0, is_mot = 0, is_pegasos = 0; | 226 | int is_longtrail = 0, is_mot = 0, is_pegasos = 0; |
| 220 | struct device_node *root = find_path_device("/"); | 227 | struct device_node *root = find_path_device("/"); |
| 221 | 228 | struct resource r; | |
| 222 | /* | 229 | /* |
| 223 | * The PCI host bridge nodes on some machines don't have | 230 | * The PCI host bridge nodes on some machines don't have |
| 224 | * properties to adequately identify them, so we have to | 231 | * properties to adequately identify them, so we have to |
| @@ -238,7 +245,7 @@ chrp_find_bridges(void) | |||
| 238 | continue; | 245 | continue; |
| 239 | ++index; | 246 | ++index; |
| 240 | /* The GG2 bridge on the LongTrail doesn't have an address */ | 247 | /* The GG2 bridge on the LongTrail doesn't have an address */ |
| 241 | if (dev->n_addrs < 1 && !is_longtrail) { | 248 | if (of_address_to_resource(dev, 0, &r) && !is_longtrail) { |
| 242 | printk(KERN_WARNING "Can't use %s: no address\n", | 249 | printk(KERN_WARNING "Can't use %s: no address\n", |
| 243 | dev->full_name); | 250 | dev->full_name); |
| 244 | continue; | 251 | continue; |
| @@ -255,8 +262,8 @@ chrp_find_bridges(void) | |||
| 255 | printk(KERN_INFO "PCI buses %d..%d", | 262 | printk(KERN_INFO "PCI buses %d..%d", |
| 256 | bus_range[0], bus_range[1]); | 263 | bus_range[0], bus_range[1]); |
| 257 | printk(" controlled by %s", dev->type); | 264 | printk(" controlled by %s", dev->type); |
| 258 | if (dev->n_addrs > 0) | 265 | if (!is_longtrail) |
| 259 | printk(" at %lx", dev->addrs[0].address); | 266 | printk(" at %lx", r.start); |
| 260 | printk("\n"); | 267 | printk("\n"); |
| 261 | 268 | ||
| 262 | hose = pcibios_alloc_controller(); | 269 | hose = pcibios_alloc_controller(); |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 4ec8ba737e7d..2dc87aa5962f 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
| @@ -352,9 +352,10 @@ static void __init chrp_find_openpic(void) | |||
| 352 | opaddr = opprop[na-1]; /* assume 32-bit */ | 352 | opaddr = opprop[na-1]; /* assume 32-bit */ |
| 353 | oplen /= na * sizeof(unsigned int); | 353 | oplen /= na * sizeof(unsigned int); |
| 354 | } else { | 354 | } else { |
| 355 | if (np->n_addrs == 0) | 355 | struct resource r; |
| 356 | if (of_address_to_resource(np, 0, &r)) | ||
| 356 | return; | 357 | return; |
| 357 | opaddr = np->addrs[0].address; | 358 | opaddr = r.start; |
| 358 | oplen = 0; | 359 | oplen = 0; |
| 359 | } | 360 | } |
| 360 | 361 | ||
| @@ -377,7 +378,7 @@ static void __init chrp_find_openpic(void) | |||
| 377 | */ | 378 | */ |
| 378 | if (oplen < len) { | 379 | if (oplen < len) { |
| 379 | printk(KERN_ERR "Insufficient addresses for distributed" | 380 | printk(KERN_ERR "Insufficient addresses for distributed" |
| 380 | " OpenPIC (%d < %d)\n", np->n_addrs, len); | 381 | " OpenPIC (%d < %d)\n", oplen, len); |
| 381 | len = oplen; | 382 | len = oplen; |
| 382 | } | 383 | } |
| 383 | 384 | ||
diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c index 737ee5d9f0aa..36a0f97bb7b1 100644 --- a/arch/powerpc/platforms/chrp/time.c +++ b/arch/powerpc/platforms/chrp/time.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/mc146818rtc.h> | 21 | #include <linux/mc146818rtc.h> |
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | #include <linux/bcd.h> | 23 | #include <linux/bcd.h> |
| 24 | #include <linux/ioport.h> | ||
| 24 | 25 | ||
| 25 | #include <asm/io.h> | 26 | #include <asm/io.h> |
| 26 | #include <asm/nvram.h> | 27 | #include <asm/nvram.h> |
| @@ -37,14 +38,16 @@ static int nvram_data = NVRAM_DATA; | |||
| 37 | long __init chrp_time_init(void) | 38 | long __init chrp_time_init(void) |
| 38 | { | 39 | { |
| 39 | struct device_node *rtcs; | 40 | struct device_node *rtcs; |
| 41 | struct resource r; | ||
| 40 | int base; | 42 | int base; |
| 41 | 43 | ||
| 42 | rtcs = find_compatible_devices("rtc", "pnpPNP,b00"); | 44 | rtcs = find_compatible_devices("rtc", "pnpPNP,b00"); |
| 43 | if (rtcs == NULL) | 45 | if (rtcs == NULL) |
| 44 | rtcs = find_compatible_devices("rtc", "ds1385-rtc"); | 46 | rtcs = find_compatible_devices("rtc", "ds1385-rtc"); |
| 45 | if (rtcs == NULL || rtcs->addrs == NULL) | 47 | if (rtcs == NULL || of_address_to_resource(rtcs, 0, &r)) |
| 46 | return 0; | 48 | return 0; |
| 47 | base = rtcs->addrs[0].address; | 49 | |
| 50 | base = r.start; | ||
| 48 | nvram_as1 = 0; | 51 | nvram_as1 = 0; |
| 49 | nvram_as0 = base; | 52 | nvram_as0 = base; |
| 50 | nvram_data = base + 1; | 53 | nvram_data = base + 1; |
