summaryrefslogtreecommitdiffstats
path: root/drivers/sbus
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-11-28 03:58:46 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-11-28 03:58:46 +0000
commitb63ad0882a16a5d28003e57f2b0b81dee3fb322b (patch)
tree0a343ce219e2b8b38a5d702d66032c57b83d9720 /drivers/sbus
parenta9d7bff9a84dba79609a0002e5321b74c4d64c64 (diff)
Merge with 2.4.0-test11.
Diffstat (limited to 'drivers/sbus')
-rw-r--r--drivers/sbus/char/aurora.c19
-rw-r--r--drivers/sbus/char/bpp.c13
-rw-r--r--drivers/sbus/char/display7seg.c15
-rw-r--r--drivers/sbus/char/envctrl.c131
-rw-r--r--drivers/sbus/char/flash.c15
-rw-r--r--drivers/sbus/char/openprom.c13
-rw-r--r--drivers/sbus/char/sab82532.c5
-rw-r--r--drivers/sbus/char/su.c5
-rw-r--r--drivers/sbus/char/uctrl.c16
-rw-r--r--drivers/sbus/sbus.c29
10 files changed, 160 insertions, 101 deletions
diff --git a/drivers/sbus/char/aurora.c b/drivers/sbus/char/aurora.c
index 44566c0a9..f2ee5ccc3 100644
--- a/drivers/sbus/char/aurora.c
+++ b/drivers/sbus/char/aurora.c
@@ -1,4 +1,4 @@
-/* $Id: aurora.c,v 1.7 1999/09/21 14:37:46 davem Exp $
+/* $Id: aurora.c,v 1.9 2000/11/08 05:33:03 davem Exp $
* linux/drivers/sbus/char/aurora.c -- Aurora multiport driver
*
* Copyright (c) 1999 by Oliver Aldulea (oli@bv.ro)
@@ -2387,7 +2387,6 @@ static void aurora_release_drivers(void)
#endif
}
-#ifndef MODULE
/*
* Called at boot time.
*
@@ -2406,10 +2405,7 @@ void __init aurora_setup(char *str, int *ints)
}
}
-int __init aurora_init(void)
-#else
-int aurora_init(void)
-#endif
+static int __init aurora_real_init(void)
{
int found;
int i;
@@ -2439,7 +2435,6 @@ int aurora_init(void)
return 0;
}
-#ifdef MODULE
int irq = 0;
int irq1 = 0;
int irq2 = 0;
@@ -2449,16 +2444,16 @@ MODULE_PARM(irq1, "i");
MODULE_PARM(irq2, "i");
MODULE_PARM(irq3, "i");
-int init_module(void)
+static int __init aurora_init(void)
{
if (irq ) irqs[0]=irq ;
if (irq1) irqs[1]=irq1;
if (irq2) irqs[2]=irq2;
if (irq3) irqs[3]=irq3;
- return aurora_init();
+ return aurora_real_init();
}
-void cleanup_module(void)
+static void __exit aurora_cleanup(void)
{
int i;
@@ -2473,4 +2468,6 @@ printk("cleanup_module: aurora_release_drivers\n");
aurora_release_io_range(&aurora_board[i]);
}
}
-#endif /* MODULE */
+
+module_init(aurora_init);
+module_exit(aurora_cleanup);
diff --git a/drivers/sbus/char/bpp.c b/drivers/sbus/char/bpp.c
index 4579404e3..c96a141a5 100644
--- a/drivers/sbus/char/bpp.c
+++ b/drivers/sbus/char/bpp.c
@@ -1017,11 +1017,7 @@ static inline void freeLptPort(int idx)
static devfs_handle_t devfs_handle;
-#ifdef MODULE
-int init_module(void)
-#else
-int __init bpp_init(void)
-#endif
+static int __init bpp_init(void)
{
int rc;
unsigned idx;
@@ -1046,8 +1042,7 @@ int __init bpp_init(void)
return 0;
}
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit bpp_cleanup(void)
{
unsigned idx;
@@ -1059,4 +1054,6 @@ void cleanup_module(void)
freeLptPort(idx);
}
}
-#endif
+
+module_init(bpp_init);
+module_exit(bpp_cleanup);
diff --git a/drivers/sbus/char/display7seg.c b/drivers/sbus/char/display7seg.c
index 2ee0aee37..091152a1c 100644
--- a/drivers/sbus/char/display7seg.c
+++ b/drivers/sbus/char/display7seg.c
@@ -1,4 +1,4 @@
-/* $Id: display7seg.c,v 1.3 2000/08/29 07:01:55 davem Exp $
+/* $Id: display7seg.c,v 1.4 2000/11/08 05:08:23 davem Exp $
*
* display7seg - Driver implementation for the 7-segment display
* present on Sun Microsystems CP1400 and CP1500
@@ -172,11 +172,7 @@ static struct file_operations d7s_fops = {
static struct miscdevice d7s_miscdev = { D7S_MINOR, D7S_DEVNAME, &d7s_fops };
-#ifdef MODULE
-int init_module(void)
-#else
-int __init d7s_init(void)
-#endif
+static int __init d7s_init(void)
{
struct linux_ebus *ebus = NULL;
struct linux_ebus_device *edev = NULL;
@@ -222,8 +218,7 @@ ebus_done:
return 0;
}
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit d7s_cleanup(void)
{
int regs = readb(d7s_regs);
@@ -237,4 +232,6 @@ void cleanup_module(void)
misc_deregister(&d7s_miscdev);
d7s_free();
}
-#endif
+
+module_init(d7s_init);
+module_exit(d7s_cleanup);
diff --git a/drivers/sbus/char/envctrl.c b/drivers/sbus/char/envctrl.c
index 31c9de932..e1de7a680 100644
--- a/drivers/sbus/char/envctrl.c
+++ b/drivers/sbus/char/envctrl.c
@@ -1,4 +1,4 @@
-/* $Id: envctrl.c,v 1.18 2000/10/17 16:20:35 davem Exp $
+/* $Id: envctrl.c,v 1.19 2000/11/03 00:37:40 davem Exp $
* envctrl.c: Temperature and Fan monitoring on Machines providing it.
*
* Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
@@ -11,7 +11,9 @@
* http://www-eu2.semiconductors.com/pip/PCF8584P
* http://www-eu2.semiconductors.com/pip/PCF8574AP
* http://www-eu2.semiconductors.com/pip/PCF8591P
- *
+ *
+ * EB - Added support for CP1500 Global Address and PS/Voltage monitoring.
+ * Eric Brower <ebrower@usa.net>
*/
#include <linux/config.h>
@@ -72,15 +74,16 @@
* Firmware definitions.
*/
#define PCF8584_MAX_CHANNELS 8
+#define PCF8584_GLOBALADDR_TYPE 6 /* global address monitor */
#define PCF8584_FANSTAT_TYPE 3 /* fan status monitor */
#define PCF8584_VOLTAGE_TYPE 2 /* voltage monitor */
-#define PCF8584_TEMP_TYPE 1 /* temperature monitor*/
+#define PCF8584_TEMP_TYPE 1 /* temperature monitor*/
/* Monitor type of i2c child device.
* Driver definitions.
*/
-#define ENVCTRL_NOMON 0
-#define ENVCTRL_CPUTEMP_MON 1 /* cpu temperature monitor */
+#define ENVCTRL_NOMON 0
+#define ENVCTRL_CPUTEMP_MON 1 /* cpu temperature monitor */
#define ENVCTRL_CPUVOLTAGE_MON 2 /* voltage monitor */
#define ENVCTRL_FANSTAT_MON 3 /* fan status monitor */
#define ENVCTRL_ETHERTEMP_MON 4 /* ethernet temperarture */
@@ -88,6 +91,7 @@
#define ENVCTRL_VOLTAGESTAT_MON 5 /* voltage status monitor */
#define ENVCTRL_MTHRBDTEMP_MON 6 /* motherboard temperature */
#define ENVCTRL_SCSITEMP_MON 7 /* scsi temperarture */
+#define ENVCTRL_GLOBALADDR_MON 8 /* global address */
/* Child device type.
* Driver definitions.
@@ -109,6 +113,15 @@
#define ENVCTRL_MAX_CPU 4
#define CHANNEL_DESC_SZ 256
+/* Mask values for combined GlobalAddress/PowerStatus node */
+#define ENVCTRL_GLOBALADDR_ADDR_MASK 0x1F
+#define ENVCTRL_GLOBALADDR_PSTAT_MASK 0x60
+
+/* Node 0x70 ignored on CompactPCI CP1400/1500 platforms
+ * (see envctrl_init_i2c_child)
+ */
+#define ENVCTRL_CPCI_IGNORED_NODE 0x70
+
struct pcf8584_reg {
unsigned char data;
unsigned char csr;
@@ -317,7 +330,6 @@ static unsigned char envctrl_i2c_read_8574(unsigned char addr)
/* Do a single byte read and send stop. */
rd = envctrl_i2c_read_data();
envctrl_i2c_stop();
-
return rd;
}
@@ -462,7 +474,32 @@ static int envctrl_i2c_fan_status(struct i2c_child_t *pchild,
return 1;
}
-/* Function Description: Read voltage and power supply status.
+/* Function Description: Read global addressing line.
+ * Return : Always 1 byte. Status stored in bufdata.
+ */
+static int envctrl_i2c_globaladdr(struct i2c_child_t *pchild,
+ unsigned char data,
+ char *bufdata)
+{
+ /* Translatation table is not necessary, as global
+ * addr is the integer value of the GA# bits.
+ *
+ * NOTE: MSB is documented as zero, but I see it as '1' always....
+ *
+ * -----------------------------------------------
+ * | 0 | FAL | DEG | GA4 | GA3 | GA2 | GA1 | GA0 |
+ * -----------------------------------------------
+ * GA0 - GA4 integer value of Global Address (backplane slot#)
+ * DEG 0 = cPCI Power supply output is starting to degrade
+ * 1 = cPCI Power supply output is OK
+ * FAL 0 = cPCI Power supply has failed
+ * 1 = cPCI Power supply output is OK
+ */
+ bufdata[0] = (data & ENVCTRL_GLOBALADDR_ADDR_MASK);
+ return 1;
+}
+
+/* Function Description: Read standard voltage and power supply status.
* Return : Always 1 byte. Status stored in bufdata.
*/
static unsigned char envctrl_i2c_voltage_status(struct i2c_child_t *pchild,
@@ -587,10 +624,20 @@ envctrl_read(struct file *file, char *buf, size_t count, loff_t *ppos)
ret = envctrl_i2c_fan_status(pchild,data[0], data);
copy_to_user((unsigned char *)buf, data, ret);
break;
+
+ case ENVCTRL_RD_GLOBALADDRESS:
+ if (!(pchild = envctrl_get_i2c_child(ENVCTRL_GLOBALADDR_MON)))
+ return 0;
+ data[0] = envctrl_i2c_read_8574(pchild->addr);
+ ret = envctrl_i2c_globaladdr(pchild, data[0], data);
+ copy_to_user((unsigned char *)buf, data, ret);
+ break;
case ENVCTRL_RD_VOLTAGE_STATUS:
if (!(pchild = envctrl_get_i2c_child(ENVCTRL_VOLTAGESTAT_MON)))
- return 0;
+ /* If voltage monitor not present, check for CPCI equivalent */
+ if (!(pchild = envctrl_get_i2c_child(ENVCTRL_GLOBALADDR_MON)))
+ return 0;
data[0] = envctrl_i2c_read_8574(pchild->addr);
ret = envctrl_i2c_voltage_status(pchild, data[0], data);
copy_to_user((unsigned char *)buf, data, ret);
@@ -621,6 +668,7 @@ envctrl_ioctl(struct inode *inode, struct file *file,
case ENVCTRL_RD_VOLTAGE_STATUS:
case ENVCTRL_RD_ETHERNET_TEMPERATURE:
case ENVCTRL_RD_SCSI_TEMPERATURE:
+ case ENVCTRL_RD_GLOBALADDRESS:
file->private_data = (void *)(long)cmd;
break;
@@ -714,9 +762,6 @@ static void envctrl_set_mon(struct i2c_child_t *pchild,
if (!(strcmp(chnl_desc,"temp,ethernet")))
pchild->mon_type[chnl_no] = ENVCTRL_ETHERTEMP_MON;
-
- if (!(strcmp(chnl_desc,"temp,ethernet")))
- pchild->mon_type[chnl_no] = ENVCTRL_ETHERTEMP_MON;
}
/* Function Description: Initialize monitor channel with channel desc,
@@ -770,6 +815,39 @@ static void envctrl_init_fanstat(struct i2c_child_t *pchild)
pchild->mon_type[0] = ENVCTRL_FANSTAT_MON;
}
+/* Function Description: Initialize child device for global addressing line.
+ * Return: None.
+ */
+static void envctrl_init_globaladdr(struct i2c_child_t *pchild)
+{
+ int i;
+
+ /* Voltage/PowerSupply monitoring is piggybacked
+ * with Global Address on CompactPCI. See comments
+ * within envctrl_i2c_globaladdr for bit assignments.
+ *
+ * The mask is created here by assigning mask bits to each
+ * bit position that represents PCF8584_VOLTAGE_TYPE data.
+ * Channel numbers are not consecutive within the globaladdr
+ * node (why?), so we use the actual counter value as chnls_mask
+ * index instead of the chnl_array[x].chnl_no value.
+ *
+ * NOTE: This loop could be replaced with a constant representing
+ * a mask of bits 5&6 (ENVCTRL_GLOBALADDR_PSTAT_MASK).
+ */
+ for (i = 0; i < pchild->total_chnls; i++) {
+ if (PCF8584_VOLTAGE_TYPE == pchild->chnl_array[i].type) {
+ pchild->voltage_mask |= chnls_mask[i];
+ }
+ }
+
+ /* We only need to know if this child has global addressing
+ * line monitored. We dont care which channels since we know
+ * the mask already (ENVCTRL_GLOBALADDR_ADDR_MASK).
+ */
+ pchild->mon_type[0] = ENVCTRL_GLOBALADDR_MON;
+}
+
/* Initialize child device monitoring voltage status. */
static void envctrl_init_voltage_status(struct i2c_child_t *pchild)
{
@@ -822,6 +900,27 @@ static void envctrl_init_i2c_child(struct linux_ebus_child *edev_child,
}
}
+ /* SPARCengine ASM Reference Manual (ref. SMI doc 805-7581-04)
+ * sections 2.5, 3.5, 4.5 state node 0x70 for CP1400/1500 is
+ * "For Factory Use Only."
+ *
+ * We ignore the node on these platforms by assigning the
+ * 'NULL' monitor type.
+ */
+ if (ENVCTRL_CPCI_IGNORED_NODE == pchild->addr) {
+ int len;
+ char prop[56];
+
+ len = prom_getproperty(prom_root_node, "name", prop, sizeof(prop));
+ if (0 < len && (0 == strncmp(prop, "SUNW,UltraSPARC-IIi-cEngine", len)))
+ {
+ for (len = 0; len < PCF8584_MAX_CHANNELS; ++len) {
+ pchild->mon_type[len] = ENVCTRL_NOMON;
+ }
+ return;
+ }
+ }
+
/* Get the monitor channels. */
len = prom_getproperty(node, "channels-in-use",
(char *) pchild->chnl_array,
@@ -835,6 +934,11 @@ static void envctrl_init_i2c_child(struct linux_ebus_child *edev_child,
envctrl_init_adc(pchild, node);
break;
+ case PCF8584_GLOBALADDR_TYPE:
+ envctrl_init_globaladdr(pchild);
+ i = pchild->total_chnls;
+ break;
+
case PCF8584_FANSTAT_TYPE:
envctrl_init_fanstat(pchild);
i = pchild->total_chnls;
@@ -865,7 +969,7 @@ static struct i2c_child_t *envctrl_get_i2c_child(unsigned char mon_type)
for (i = 0; i < ENVCTRL_MAX_CPU*2; i++) {
for (j = 0; j < PCF8584_MAX_CHANNELS; j++) {
if (i2c_childlist[i].mon_type[j] == mon_type) {
- return (struct i2c_child_t*)(&(i2c_childlist[i]));
+ return (struct i2c_child_t *)(&(i2c_childlist[i]));
}
}
}
@@ -932,8 +1036,7 @@ done:
* child devices.
*/
printk("envctrl: initialized ");
- for(--i; i >= 0; --i)
- {
+ for (--i; i >= 0; --i) {
printk("[%s 0x%lx]%s",
(I2C_ADC == i2c_childlist[i].i2ctype) ? ("adc") :
((I2C_GPIO == i2c_childlist[i].i2ctype) ? ("gpio") : ("unknown")),
diff --git a/drivers/sbus/char/flash.c b/drivers/sbus/char/flash.c
index 8690638b3..71809b59d 100644
--- a/drivers/sbus/char/flash.c
+++ b/drivers/sbus/char/flash.c
@@ -1,4 +1,4 @@
-/* $Id: flash.c,v 1.19 2000/07/13 08:06:40 davem Exp $
+/* $Id: flash.c,v 1.20 2000/11/08 04:57:49 davem Exp $
* flash.c: Allow mmap access to the OBP Flash, for OBP updates.
*
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
@@ -149,11 +149,7 @@ static struct miscdevice flash_dev = { FLASH_MINOR, "flash", &flash_fops };
EXPORT_NO_SYMBOLS;
-#ifdef MODULE
-int init_module(void)
-#else
-int __init flash_init(void)
-#endif
+static int __init flash_init(void)
{
struct sbus_bus *sbus;
struct sbus_dev *sdev = 0;
@@ -236,9 +232,10 @@ int __init flash_init(void)
return 0;
}
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit flash_cleanup(void)
{
misc_deregister(&flash_dev);
}
-#endif
+
+module_init(flash_init);
+module_exit(flash_cleanup);
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c
index 26e5ae8d9..f565ef6d2 100644
--- a/drivers/sbus/char/openprom.c
+++ b/drivers/sbus/char/openprom.c
@@ -626,11 +626,7 @@ static struct miscdevice openprom_dev = {
EXPORT_NO_SYMBOLS;
-#ifdef MODULE
-int init_module(void)
-#else
-int __init openprom_init(void)
-#endif
+static int __init openprom_init(void)
{
unsigned long flags;
int error;
@@ -655,9 +651,10 @@ int __init openprom_init(void)
return 0;
}
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit openprom_cleanup(void)
{
misc_deregister(&openprom_dev);
}
-#endif
+
+module_init(openprom_init);
+module_exit(openprom_cleanup);
diff --git a/drivers/sbus/char/sab82532.c b/drivers/sbus/char/sab82532.c
index ae7ba7ac1..fa5f383c3 100644
--- a/drivers/sbus/char/sab82532.c
+++ b/drivers/sbus/char/sab82532.c
@@ -1,4 +1,4 @@
-/* $Id: sab82532.c,v 1.52 2000/10/14 10:09:04 davem Exp $
+/* $Id: sab82532.c,v 1.53 2000/11/15 07:28:09 davem Exp $
* sab82532.c: ASYNC Driver for the SIEMENS SAB82532 DUSCC.
*
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
@@ -1833,6 +1833,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
#endif
schedule();
}
+ current->state = TASK_RUNNING;
remove_wait_queue(&info->open_wait, &wait);
if (!tty_hung_up_p(filp))
info->count++;
@@ -2133,7 +2134,7 @@ static void __init sab82532_kgdb_hook(int line)
static inline void __init show_serial_version(void)
{
- char *revision = "$Revision: 1.52 $";
+ char *revision = "$Revision: 1.53 $";
char *version, *p;
version = strchr(revision, ' ');
diff --git a/drivers/sbus/char/su.c b/drivers/sbus/char/su.c
index 1fd2d6fbf..bb256e46e 100644
--- a/drivers/sbus/char/su.c
+++ b/drivers/sbus/char/su.c
@@ -1,4 +1,4 @@
-/* $Id: su.c,v 1.42 2000/10/14 10:09:04 davem Exp $
+/* $Id: su.c,v 1.43 2000/11/15 07:28:09 davem Exp $
* su.c: Small serial driver for keyboard/mouse interface on sparc32/PCI
*
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
@@ -2001,6 +2001,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
#endif
schedule();
}
+ current->state = TASK_RUNNING;
remove_wait_queue(&info->open_wait, &wait);
if (extra_count)
info->count++;
@@ -2219,7 +2220,7 @@ done:
*/
static __inline__ void __init show_su_version(void)
{
- char *revision = "$Revision: 1.42 $";
+ char *revision = "$Revision: 1.43 $";
char *version, *p;
version = strchr(revision, ' ');
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c
index 6294d0e37..2740c62f3 100644
--- a/drivers/sbus/char/uctrl.c
+++ b/drivers/sbus/char/uctrl.c
@@ -1,4 +1,4 @@
-/* $Id: uctrl.c,v 1.8 2000/06/19 06:24:47 davem Exp $
+/* $Id: uctrl.c,v 1.9 2000/11/08 05:04:06 davem Exp $
* uctrl.c: TS102 Microcontroller interface on Tadpole Sparcbook 3
*
* Copyright 1999 Derrick J Brashear (shadow@dementia.org)
@@ -363,11 +363,7 @@ void uctrl_get_external_status()
}
-#ifdef MODULE
-int init_module(void)
-#else
-int __init ts102_uctrl_init(void)
-#endif
+static int __init ts102_uctrl_init(void)
{
struct uctrl_driver *driver = &drv;
int len, i;
@@ -419,9 +415,7 @@ int __init ts102_uctrl_init(void)
return 0;
}
-
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit ts102_uctrl_cleanup(void)
{
struct uctrl_driver *driver = &drv;
@@ -433,4 +427,6 @@ void cleanup_module(void)
if (driver->regs)
driver->regs = 0;
}
-#endif
+
+module_init(ts102_uctrl_init);
+module_exit(ts102_uctrl_cleanup);
diff --git a/drivers/sbus/sbus.c b/drivers/sbus/sbus.c
index 35865dd70..942a6c59b 100644
--- a/drivers/sbus/sbus.c
+++ b/drivers/sbus/sbus.c
@@ -1,4 +1,4 @@
-/* $Id: sbus.c,v 1.86 2000/03/16 09:23:57 jj Exp $
+/* $Id: sbus.c,v 1.91 2000/11/08 05:04:06 davem Exp $
* sbus.c: SBus support routines.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -165,21 +165,9 @@ no_ranges:
extern void iommu_init(int iommu_node, struct sbus_bus *sbus);
extern void iounit_init(int sbi_node, int iounit_node, struct sbus_bus *sbus);
void sun4_init(void);
-#ifdef CONFIG_SUN_OPENPROMIO
-extern int openprom_init(void);
-#endif
#ifdef CONFIG_SUN_AUXIO
extern void auxio_probe(void);
#endif
-#ifdef CONFIG_OBP_FLASH
-extern int flash_init(void);
-#endif
-#ifdef CONFIG_SUN_AURORA
-extern int aurora_init(void);
-#endif
-#ifdef CONFIG_TADPOLE_TS102_UCTRL
-extern int ts102_uctrl_init(void);
-#endif
static void __init sbus_do_child_siblings(int start_node,
struct sbus_dev *child,
@@ -520,25 +508,10 @@ void __init sbus_init(void)
firetruck_init();
}
#endif
-#ifdef CONFIG_SUN_OPENPROMIO
- openprom_init();
-#endif
-#ifdef CONFIG_SUN_BPP
- bpp_init();
-#endif
#ifdef CONFIG_SUN_AUXIO
if (sparc_cpu_model == sun4u)
auxio_probe ();
#endif
-#ifdef CONFIG_OBP_FLASH
- flash_init();
-#endif
-#ifdef CONFIG_SUN_AURORA
- aurora_init();
-#endif
-#ifdef CONFIG_TADPOLE_TS102_UCTRL
- ts102_uctrl_init();
-#endif
#ifdef __sparc_v9__
if (sparc_cpu_model == sun4u) {
extern void clock_probe(void);