1209908Sraj/*- 2209908Sraj * Copyright (c) 2006 Juniper Networks. 3209908Sraj * All rights reserved. 4209908Sraj * 5209908Sraj * Redistribution and use in source and binary forms, with or without 6209908Sraj * modification, are permitted provided that the following conditions 7209908Sraj * are met: 8209908Sraj * 1. Redistributions of source code must retain the above copyright 9209908Sraj * notice, this list of conditions and the following disclaimer. 10209908Sraj * 2. Redistributions in binary form must reproduce the above copyright 11209908Sraj * notice, this list of conditions and the following disclaimer in the 12209908Sraj * documentation and/or other materials provided with the distribution. 13209908Sraj * 3. The name of the author may not be used to endorse or promote products 14209908Sraj * derived from this software without specific prior written permission. 15209908Sraj * 16209908Sraj * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17209908Sraj * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18209908Sraj * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19209908Sraj * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20209908Sraj * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21209908Sraj * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22209908Sraj * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23209908Sraj * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24209908Sraj * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25209908Sraj * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26209908Sraj * SUCH DAMAGE. 27209908Sraj */ 28209908Sraj 29209908Sraj#include <sys/cdefs.h> 30209908Sraj__FBSDID("$FreeBSD$"); 31209908Sraj 32209908Sraj#include <sys/param.h> 33209908Sraj#include <sys/systm.h> 34209908Sraj#include <sys/bus.h> 35209908Sraj#include <sys/conf.h> 36209908Sraj#include <sys/kernel.h> 37209908Sraj#include <sys/lock.h> 38209908Sraj#include <sys/malloc.h> 39209908Sraj#include <sys/module.h> 40209908Sraj#include <sys/rman.h> 41209908Sraj#include <sys/tty.h> 42209908Sraj#include <machine/bus.h> 43209908Sraj 44209908Sraj#include <dev/ofw/ofw_bus.h> 45209908Sraj#include <dev/ofw/ofw_bus_subr.h> 46209908Sraj#include <dev/quicc/quicc_bfe.h> 47209908Sraj 48209908Srajstatic int quicc_fdt_probe(device_t dev); 49209908Sraj 50209908Srajstatic device_method_t quicc_fdt_methods[] = { 51209908Sraj /* Device interface */ 52209908Sraj DEVMETHOD(device_probe, quicc_fdt_probe), 53209908Sraj DEVMETHOD(device_attach, quicc_bfe_attach), 54209908Sraj DEVMETHOD(device_detach, quicc_bfe_detach), 55209908Sraj 56209908Sraj DEVMETHOD(bus_alloc_resource, quicc_bus_alloc_resource), 57209908Sraj DEVMETHOD(bus_release_resource, quicc_bus_release_resource), 58209908Sraj DEVMETHOD(bus_get_resource, quicc_bus_get_resource), 59209908Sraj DEVMETHOD(bus_read_ivar, quicc_bus_read_ivar), 60209908Sraj DEVMETHOD(bus_setup_intr, quicc_bus_setup_intr), 61209908Sraj DEVMETHOD(bus_teardown_intr, quicc_bus_teardown_intr), 62209908Sraj 63227843Smarius DEVMETHOD_END 64209908Sraj}; 65209908Sraj 66209908Srajstatic driver_t quicc_fdt_driver = { 67209908Sraj quicc_driver_name, 68209908Sraj quicc_fdt_methods, 69209908Sraj sizeof(struct quicc_softc), 70209908Sraj}; 71209908Sraj 72209908Srajstatic int 73209908Srajquicc_fdt_probe(device_t dev) 74209908Sraj{ 75209908Sraj phandle_t par; 76209908Sraj pcell_t clock; 77209908Sraj 78266152Sian if (!ofw_bus_status_okay(dev)) 79266152Sian return (ENXIO); 80266152Sian 81209908Sraj if (!ofw_bus_is_compatible(dev, "fsl,cpm2")) 82209908Sraj return (ENXIO); 83209908Sraj 84209908Sraj par = OF_parent(ofw_bus_get_node(dev)); 85209908Sraj if (OF_getprop(par, "bus-frequency", &clock, sizeof(clock)) <= 0) 86209908Sraj clock = 0; 87209908Sraj 88209908Sraj return (quicc_bfe_probe(dev, (uintptr_t)clock)); 89209908Sraj} 90209908Sraj 91209908SrajDRIVER_MODULE(quicc, simplebus, quicc_fdt_driver, quicc_devclass, 0, 0); 92