[PATCH] ioc4: Enable build on non-SN2
Brent Casavant [Tue, 17 Oct 2006 07:09:25 +0000 (00:09 -0700)]
The SGI PCI-RT card, based on the SGI IOC4 chip, will be made available on
Altix XE (x86_64) platforms in the near future.  As such it is now a
misnomer for the IOC4 base device driver to live under drivers/sn, and
would complicate builds for non-SN2.

This patch moves the IOC4 base driver code from drivers/sn to drivers/misc,
and updates the associated Makefiles and Kconfig files to allow building on
non-SN2 configs.  Due to the resulting change in link order, it is now
necessary to use late_initcall() for IOC4 subdriver initialization.

[akpm@osdl.org: __udivdi3 fix]
[akpm@osdl.org: fix default in Kconfig]
Acked-by: Pat Gefre <pfg@sgi.com>
Acked-by: Jeremy Higdon <jeremy@sgi.com>
Signed-off-by: Brent Casavant <bcasavan@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

drivers/Kconfig
drivers/ide/pci/sgiioc4.c
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/misc/ioc4.c [moved from drivers/sn/ioc4.c with 98% similarity]
drivers/serial/ioc4_serial.c
drivers/sn/Kconfig
drivers/sn/Makefile

index 263e86d..f394634 100644 (file)
@@ -14,6 +14,10 @@ source "drivers/pnp/Kconfig"
 
 source "drivers/block/Kconfig"
 
+# misc before ide - BLK_DEV_SGIIOC4 depends on SGI_IOC4
+
+source "drivers/misc/Kconfig"
+
 source "drivers/ide/Kconfig"
 
 source "drivers/scsi/Kconfig"
@@ -52,8 +56,6 @@ source "drivers/w1/Kconfig"
 
 source "drivers/hwmon/Kconfig"
 
-source "drivers/misc/Kconfig"
-
 source "drivers/mfd/Kconfig"
 
 source "drivers/media/Kconfig"
index f3fe287..244f7eb 100644 (file)
@@ -774,7 +774,7 @@ ioc4_ide_exit(void)
        ioc4_unregister_submodule(&ioc4_ide_submodule);
 }
 
-module_init(ioc4_ide_init);
+late_initcall(ioc4_ide_init); /* Call only after IDE init is done */
 module_exit(ioc4_ide_exit);
 
 MODULE_AUTHOR("Aniket Malatpure/Jeremy Higdon");
index fa7acc2..b6c045d 100644 (file)
@@ -28,6 +28,17 @@ config IBM_ASM
 
          If unsure, say N.
 
+config SGI_IOC4
+       tristate "SGI IOC4 Base IO support"
+       ---help---
+         This option enables basic support for the IOC4 chip on certain
+         SGI IO controller cards (IO9, IO10, and PCI-RT).  This option
+         does not enable any specific functions on such a card, but provides
+         necessary infrastructure for other drivers to utilize.
+
+         If you have an SGI Altix with an IOC4-based card say Y.
+         Otherwise say N.
+
 config TIFM_CORE
        tristate "TI Flash Media interface support (EXPERIMENTAL)"
        depends on EXPERIMENTAL
index 9a91c1e..c9e98ab 100644 (file)
@@ -9,3 +9,4 @@ obj-$(CONFIG_MSI_LAPTOP)     += msi-laptop.o
 obj-$(CONFIG_LKDTM)            += lkdtm.o
 obj-$(CONFIG_TIFM_CORE)        += tifm_core.o
 obj-$(CONFIG_TIFM_7XX1)        += tifm_7xx1.o
+obj-$(CONFIG_SGI_IOC4)         += ioc4.o
similarity index 98%
rename from drivers/sn/ioc4.c
rename to drivers/misc/ioc4.c
index 83d2e90..1c3c14a 100644 (file)
@@ -32,9 +32,6 @@
 #include <linux/ktime.h>
 #include <linux/mutex.h>
 #include <linux/time.h>
-#include <asm/sn/addrs.h>
-#include <asm/sn/clksupport.h>
-#include <asm/sn/shub_mmr.h>
 
 /***************
  * Definitions *
@@ -208,10 +205,12 @@ ioc4_clock_calibrate(struct ioc4_driver_data *idd)
                       IOC4_CALIBRATE_DEFAULT / IOC4_EXTINT_COUNT_DIVISOR);
                period = IOC4_CALIBRATE_DEFAULT;
        } else {
+               u64 ns = period;
+
+               do_div(ns, IOC4_EXTINT_COUNT_DIVISOR);
                printk(KERN_DEBUG
-                      "IOC4 %s: PCI clock is %ld ns.\n",
-                      pci_name(idd->idd_pdev),
-                      period / IOC4_EXTINT_COUNT_DIVISOR);
+                      "IOC4 %s: PCI clock is %lld ns.\n",
+                      pci_name(idd->idd_pdev), ns);
        }
 
        /* Remember results.  We store the extint clock period rather
index 98ce88d..ff4fa25 100644 (file)
@@ -2935,7 +2935,7 @@ static void __devexit ioc4_serial_exit(void)
        uart_unregister_driver(&ioc4_uart_rs422);
 }
 
-module_init(ioc4_serial_init);
+late_initcall(ioc4_serial_init); /* Call only after tty init is done */
 module_exit(ioc4_serial_exit);
 
 MODULE_AUTHOR("Pat Gefre - Silicon Graphics Inc. (SGI) <pfg@sgi.com>");
index 34d4fde..c66ba9a 100644 (file)
@@ -5,18 +5,6 @@
 menu "SN Devices"
        depends on SGI_SN
 
-config SGI_IOC4
-       tristate "SGI IOC4 Base IO support"
-       default m
-       ---help---
-       This option enables basic support for the IOC4 chip on certain
-       SGI IO controller cards (IO9, IO10, and PCI-RT).  This option
-       does not enable any specific functions on such a card, but provides
-       necessary infrastructure for other drivers to utilize.
-
-       If you have an SGI Altix with an IOC4-based card say Y.
-       Otherwise say N.
-
 config SGI_IOC3
        tristate "SGI IOC3 Base IO support"
        default m
index 2cda011..693db8b 100644 (file)
@@ -3,5 +3,4 @@
 #
 #
 
-obj-$(CONFIG_SGI_IOC4) += ioc4.o
 obj-$(CONFIG_SGI_IOC3) += ioc3.o