xref: /freebsd/sys/dev/quicc/quicc_bfe_fdt.c (revision d1d3233ebd5b639265458ec6e2a1f999a805222a)
1*d1d3233eSRafal Jaworowski /*-
2*d1d3233eSRafal Jaworowski  * Copyright (c) 2006 Juniper Networks.
3*d1d3233eSRafal Jaworowski  * All rights reserved.
4*d1d3233eSRafal Jaworowski  *
5*d1d3233eSRafal Jaworowski  * Redistribution and use in source and binary forms, with or without
6*d1d3233eSRafal Jaworowski  * modification, are permitted provided that the following conditions
7*d1d3233eSRafal Jaworowski  * are met:
8*d1d3233eSRafal Jaworowski  * 1. Redistributions of source code must retain the above copyright
9*d1d3233eSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer.
10*d1d3233eSRafal Jaworowski  * 2. Redistributions in binary form must reproduce the above copyright
11*d1d3233eSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer in the
12*d1d3233eSRafal Jaworowski  *    documentation and/or other materials provided with the distribution.
13*d1d3233eSRafal Jaworowski  * 3. The name of the author may not be used to endorse or promote products
14*d1d3233eSRafal Jaworowski  *    derived from this software without specific prior written permission.
15*d1d3233eSRafal Jaworowski  *
16*d1d3233eSRafal Jaworowski  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17*d1d3233eSRafal Jaworowski  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18*d1d3233eSRafal Jaworowski  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19*d1d3233eSRafal Jaworowski  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20*d1d3233eSRafal Jaworowski  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*d1d3233eSRafal Jaworowski  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*d1d3233eSRafal Jaworowski  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*d1d3233eSRafal Jaworowski  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*d1d3233eSRafal Jaworowski  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*d1d3233eSRafal Jaworowski  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*d1d3233eSRafal Jaworowski  * SUCH DAMAGE.
27*d1d3233eSRafal Jaworowski  */
28*d1d3233eSRafal Jaworowski 
29*d1d3233eSRafal Jaworowski #include <sys/cdefs.h>
30*d1d3233eSRafal Jaworowski __FBSDID("$FreeBSD$");
31*d1d3233eSRafal Jaworowski 
32*d1d3233eSRafal Jaworowski #include <sys/param.h>
33*d1d3233eSRafal Jaworowski #include <sys/systm.h>
34*d1d3233eSRafal Jaworowski #include <sys/bus.h>
35*d1d3233eSRafal Jaworowski #include <sys/conf.h>
36*d1d3233eSRafal Jaworowski #include <sys/kernel.h>
37*d1d3233eSRafal Jaworowski #include <sys/lock.h>
38*d1d3233eSRafal Jaworowski #include <sys/malloc.h>
39*d1d3233eSRafal Jaworowski #include <sys/module.h>
40*d1d3233eSRafal Jaworowski #include <sys/rman.h>
41*d1d3233eSRafal Jaworowski #include <sys/tty.h>
42*d1d3233eSRafal Jaworowski #include <machine/bus.h>
43*d1d3233eSRafal Jaworowski 
44*d1d3233eSRafal Jaworowski #include <dev/ofw/ofw_bus.h>
45*d1d3233eSRafal Jaworowski #include <dev/ofw/ofw_bus_subr.h>
46*d1d3233eSRafal Jaworowski #include <dev/quicc/quicc_bfe.h>
47*d1d3233eSRafal Jaworowski 
48*d1d3233eSRafal Jaworowski static int quicc_fdt_probe(device_t dev);
49*d1d3233eSRafal Jaworowski 
50*d1d3233eSRafal Jaworowski static device_method_t quicc_fdt_methods[] = {
51*d1d3233eSRafal Jaworowski 	/* Device interface */
52*d1d3233eSRafal Jaworowski 	DEVMETHOD(device_probe,		quicc_fdt_probe),
53*d1d3233eSRafal Jaworowski 	DEVMETHOD(device_attach,	quicc_bfe_attach),
54*d1d3233eSRafal Jaworowski 	DEVMETHOD(device_detach,	quicc_bfe_detach),
55*d1d3233eSRafal Jaworowski 
56*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_alloc_resource,	quicc_bus_alloc_resource),
57*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_release_resource,	quicc_bus_release_resource),
58*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_get_resource,	quicc_bus_get_resource),
59*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_read_ivar,	quicc_bus_read_ivar),
60*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_setup_intr,	quicc_bus_setup_intr),
61*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_teardown_intr,	quicc_bus_teardown_intr),
62*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_print_child,	bus_generic_print_child),
63*d1d3233eSRafal Jaworowski 	DEVMETHOD(bus_driver_added,	bus_generic_driver_added),
64*d1d3233eSRafal Jaworowski 
65*d1d3233eSRafal Jaworowski 	{ 0, 0 }
66*d1d3233eSRafal Jaworowski };
67*d1d3233eSRafal Jaworowski 
68*d1d3233eSRafal Jaworowski static driver_t quicc_fdt_driver = {
69*d1d3233eSRafal Jaworowski 	quicc_driver_name,
70*d1d3233eSRafal Jaworowski 	quicc_fdt_methods,
71*d1d3233eSRafal Jaworowski 	sizeof(struct quicc_softc),
72*d1d3233eSRafal Jaworowski };
73*d1d3233eSRafal Jaworowski 
74*d1d3233eSRafal Jaworowski static int
75*d1d3233eSRafal Jaworowski quicc_fdt_probe(device_t dev)
76*d1d3233eSRafal Jaworowski {
77*d1d3233eSRafal Jaworowski 	phandle_t par;
78*d1d3233eSRafal Jaworowski 	pcell_t clock;
79*d1d3233eSRafal Jaworowski 
80*d1d3233eSRafal Jaworowski 	if (!ofw_bus_is_compatible(dev, "fsl,cpm2"))
81*d1d3233eSRafal Jaworowski 		return (ENXIO);
82*d1d3233eSRafal Jaworowski 
83*d1d3233eSRafal Jaworowski 	par = OF_parent(ofw_bus_get_node(dev));
84*d1d3233eSRafal Jaworowski 	if (OF_getprop(par, "bus-frequency", &clock, sizeof(clock)) <= 0)
85*d1d3233eSRafal Jaworowski 		clock = 0;
86*d1d3233eSRafal Jaworowski 
87*d1d3233eSRafal Jaworowski 	return (quicc_bfe_probe(dev, (uintptr_t)clock));
88*d1d3233eSRafal Jaworowski }
89*d1d3233eSRafal Jaworowski 
90*d1d3233eSRafal Jaworowski DRIVER_MODULE(quicc, simplebus, quicc_fdt_driver, quicc_devclass, 0, 0);
91