From 36c009a42814598703dd77cdd25d2fde93156ca2 Mon Sep 17 00:00:00 2001 From: Thomas Moestl Date: Thu, 4 Apr 2002 23:58:50 +0000 Subject: [PATCH] Add MD frontents for the mk48txx driver, ported from NetBSD, and remove stub implementations of inittodr() and resettodr(), now that the MI ones are used. --- sys/sparc64/sparc64/clock.c | 13 --- sys/sparc64/sparc64/eeprom.c | 122 +++++++++++++++++++++++++ sys/sparc64/sparc64/eeprom_ebus.c | 144 ++++++++++++++++++++++++++++++ sys/sparc64/sparc64/eeprom_sbus.c | 140 +++++++++++++++++++++++++++++ 4 files changed, 406 insertions(+), 13 deletions(-) create mode 100644 sys/sparc64/sparc64/eeprom.c create mode 100644 sys/sparc64/sparc64/eeprom_ebus.c create mode 100644 sys/sparc64/sparc64/eeprom_sbus.c diff --git a/sys/sparc64/sparc64/clock.c b/sys/sparc64/sparc64/clock.c index 8b646a06a397..1204e88d09b5 100644 --- a/sys/sparc64/sparc64/clock.c +++ b/sys/sparc64/sparc64/clock.c @@ -37,7 +37,6 @@ u_long tick_MHz; void cpu_initclocks(void) { - /* XXX */ } void @@ -53,18 +52,6 @@ DELAY(int n) ; } -void -inittodr(time_t base) -{ - /* XXX */ -} - -void -resettodr(void) -{ - TODO; -} - void setstatclockrate(int newhz) { diff --git a/sys/sparc64/sparc64/eeprom.c b/sys/sparc64/sparc64/eeprom.c new file mode 100644 index 000000000000..523dfbd81829 --- /dev/null +++ b/sys/sparc64/sparc64/eeprom.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 1994 Gordon W. Ross + * Copyright (c) 1993 Adam Glass + * Copyright (c) 1996 Paul Kranenburg + * Copyright (c) 1996 + * The President and Fellows of Harvard College. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Harvard University. + * This product includes software developed by the University of + * California, Lawrence Berkeley Laboratory. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * This product includes software developed by Paul Kranenburg. + * This product includes software developed by Harvard University. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)clock.c 8.1 (Berkeley) 6/11/93 + * from: NetBSD: clock.c,v 1.41 2001/07/24 19:29:25 eeh Exp + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include + +#include + +#include + +#include "clock_if.h" + +devclass_t eeprom_devclass; + + +#define IDPROM_OFFSET (8 * 1024 - 40) /* XXX - get nvram size from driver */ + +int +eeprom_attach(device_t dev, phandle_t node, bus_space_tag_t bt, + bus_space_handle_t bh) +{ + struct timespec ts; + struct idprom *idp; + char *model; + int error, i; + u_int32_t h; + + if (OF_getprop_alloc(node, "model", 1, (void **)&model) == -1) + panic("eeprom_attach: no model property"); + + /* Our TOD clock year 0 is 1968 */ + if ((error = mk48txx_attach(dev, bt, bh, model, 1968)) != 0) { + device_printf(dev, "Can't attach %s tod clock", model); + free(model, M_OFWPROP); + return (error); + } + /* XXX: register clock device */ + + /* Get the host ID from the prom. */ + idp = (struct idprom *)((u_long)bh + IDPROM_OFFSET); + h = bus_space_read_1(bt, bh, IDPROM_OFFSET + + offsetof(struct idprom, id_machine)) << 24; + for (i = 0; i < 3; i++) { + h |= bus_space_read_1(bt, bh, IDPROM_OFFSET + + offsetof(struct idprom, id_hostid[i])) << ((2 - i) * 8); + } + /* XXX: register host id */ + device_printf(dev, "hostid %x\n", (u_int)h); + if (bootverbose) { + mk48txx_gettime(dev, &ts); + device_printf(dev, "current time: %ld.%09ld\n", (long)ts.tv_sec, + ts.tv_nsec); + } + + return (0); +} + diff --git a/sys/sparc64/sparc64/eeprom_ebus.c b/sys/sparc64/sparc64/eeprom_ebus.c new file mode 100644 index 000000000000..237cf2f27165 --- /dev/null +++ b/sys/sparc64/sparc64/eeprom_ebus.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 1994 Gordon W. Ross + * Copyright (c) 1993 Adam Glass + * Copyright (c) 1996 Paul Kranenburg + * Copyright (c) 1996 + * The President and Fellows of Harvard College. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Harvard University. + * This product includes software developed by the University of + * California, Lawrence Berkeley Laboratory. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * This product includes software developed by Paul Kranenburg. + * This product includes software developed by Harvard University. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)clock.c 8.1 (Berkeley) 6/11/93 + * from: NetBSD: clock.c,v 1.41 2001/07/24 19:29:25 eeh Exp + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include + +#include + +#include + +#include + +#include "clock_if.h" + +/* + * clock (eeprom) attaches at the sbus or the ebus + */ + +static int eeprom_ebus_probe(device_t); +static int eeprom_ebus_attach(device_t); + +static device_method_t eeprom_ebus_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, eeprom_ebus_probe), + DEVMETHOD(device_attach, eeprom_ebus_attach), + + /* clock interface */ + DEVMETHOD(clock_gettime, mk48txx_gettime), + DEVMETHOD(clock_settime, mk48txx_settime), + + { 0, 0 } +}; + +static driver_t eeprom_ebus_driver = { + "eeprom", + eeprom_ebus_methods, + 0, +}; + +DRIVER_MODULE(eeprom, ebus, eeprom_ebus_driver, eeprom_devclass, 0, 0); + + +static int +eeprom_ebus_probe(device_t dev) +{ + + if (strcmp("eeprom", ebus_get_name(dev)) == 0) { + device_set_desc(dev, "EBus EEPROM/clock"); + return (0); + } + return (ENXIO); +} + +/* + * Attach a clock (really `eeprom') to the ebus. + * + * This is mapped read-only on NetBSD for safety, but this is not possible + * with the current FreeBSD bus code. + * + * the MK48T02 is 2K. the MK48T08 is 8K, and the MK48T59 is supposed to be + * identical to it. + */ +static int +eeprom_ebus_attach(device_t dev) +{ + struct resource *res; + int rid, error; + + rid = 0; + res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0UL, ~0UL, 1, + RF_ACTIVE); + if (res == NULL) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + error = eeprom_attach(dev, ebus_get_node(dev), rman_get_bustag(res), + rman_get_bushandle(res)); + return (error); +} diff --git a/sys/sparc64/sparc64/eeprom_sbus.c b/sys/sparc64/sparc64/eeprom_sbus.c new file mode 100644 index 000000000000..e98c43b75aac --- /dev/null +++ b/sys/sparc64/sparc64/eeprom_sbus.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 1994 Gordon W. Ross + * Copyright (c) 1993 Adam Glass + * Copyright (c) 1996 Paul Kranenburg + * Copyright (c) 1996 + * The President and Fellows of Harvard College. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Harvard University. + * This product includes software developed by the University of + * California, Lawrence Berkeley Laboratory. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * This product includes software developed by Paul Kranenburg. + * This product includes software developed by Harvard University. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)clock.c 8.1 (Berkeley) 6/11/93 + * from: NetBSD: clock.c,v 1.41 2001/07/24 19:29:25 eeh Exp + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include + +#include + +#include + +#include + +#include "clock_if.h" + +static int eeprom_sbus_probe(device_t); +static int eeprom_sbus_attach(device_t); + +static device_method_t eeprom_sbus_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, eeprom_sbus_probe), + DEVMETHOD(device_attach, eeprom_sbus_attach), + + /* clock interface */ + DEVMETHOD(clock_gettime, mk48txx_gettime), + DEVMETHOD(clock_settime, mk48txx_settime), + + { 0, 0 } +}; + +static driver_t eeprom_sbus_driver = { + "eeprom", + eeprom_sbus_methods, + 0, +}; + +DRIVER_MODULE(eeprom, sbus, eeprom_sbus_driver, eeprom_devclass, 0, 0); + + +static int +eeprom_sbus_probe(device_t dev) +{ + + if (strcmp("eeprom", sbus_get_name(dev)) == 0) { + device_set_desc(dev, "SBus EEPROM/clock"); + return (0); + } + return (ENXIO); +} + +/* + * Attach a clock (really `eeprom') to the sbus. + * + * This is mapped read-only on NetBSD for safety, but this is not possible + * with the current FreeBSD bus code. + * + * the MK48T02 is 2K. the MK48T08 is 8K, and the MK48T59 is supposed to be + * identical to it. + */ +static int +eeprom_sbus_attach(device_t dev) +{ + struct resource *res; + int rid, error; + + rid = 0; + res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, 0UL, ~0UL, 1, + RF_ACTIVE); + if (res == NULL) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + error = eeprom_attach(dev, sbus_get_node(dev), rman_get_bustag(res), + rman_get_bushandle(res)); + return (error); +}