]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/parisc/kernel/drivers.c
Merge master.kernel.org:/home/rmk/linux-2.6-mmc
[linux-2.6-omap-h63xx.git] / arch / parisc / kernel / drivers.c
index 988844a169e615a764fe7e43460738c8b628f89b..1eaa0d37f677feffe7e2c8fd4f3439f3bbe6ce41 100644 (file)
@@ -39,7 +39,7 @@
 #include <asm/parisc-device.h>
 
 /* See comments in include/asm-parisc/pci.h */
-struct hppa_dma_ops *hppa_dma_ops;
+struct hppa_dma_ops *hppa_dma_ops __read_mostly;
 EXPORT_SYMBOL(hppa_dma_ops);
 
 static struct device root = {
@@ -499,8 +499,12 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
 
        dev = create_parisc_device(mod_path);
        if (dev->id.hw_type != HPHW_FAULTY) {
-               printk("Two devices have hardware path %s.  Please file a bug with HP.\n"
-                       "In the meantime, you could try rearranging your cards.\n", parisc_pathname(dev));
+               printk(KERN_ERR "Two devices have hardware path [%s].  "
+                               "IODC data for second device: "
+                               "%02x%02x%02x%02x%02x%02x\n"
+                               "Rearranging GSC cards sometimes helps\n",
+                       parisc_pathname(dev), iodc_data[0], iodc_data[1],
+                       iodc_data[3], iodc_data[4], iodc_data[5], iodc_data[6]);
                return NULL;
        }
 
@@ -511,8 +515,13 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
                        (iodc_data[5] << 8) | iodc_data[6];
        dev->hpa.name = parisc_pathname(dev);
        dev->hpa.start = hpa;
-       if (hpa == 0xf4000000 || hpa == 0xf6000000 ||
-           hpa == 0xf8000000 || hpa == 0xfa000000) {
+       /* This is awkward.  The STI spec says that gfx devices may occupy
+        * 32MB or 64MB.  Unfortunately, we don't know how to tell whether
+        * it's the former or the latter.  Assumptions either way can hurt us.
+        */
+       if (hpa == 0xf4000000 || hpa == 0xf8000000) {
+               dev->hpa.end = hpa + 0x03ffffff;
+       } else if (hpa == 0xf6000000 || hpa == 0xfa000000) {
                dev->hpa.end = hpa + 0x01ffffff;
        } else {
                dev->hpa.end = hpa + 0xfff;
@@ -830,7 +839,7 @@ static void print_parisc_device(struct parisc_device *dev)
 
        if (dev->num_addrs) {
                int k;
-               printk(",  additional addresses: ");
+               printk(", additional addresses: ");
                for (k = 0; k < dev->num_addrs; k++)
                        printk("0x%lx ", dev->addr[k]);
        }