4 * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following
14 * disclaimer in the documentation and/or other materials provided
15 * with the distribution.
16 * 3. The names of the authors may not be used to endorse or promote
17 * products derived from this software without specific prior
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
21 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
27 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
29 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
34 * Copyright 2002 Wasabi Systems, Inc.
35 * All rights reserved.
37 * Written by Simon Burge for Wasabi Systems, Inc.
39 * Redistribution and use in source and binary forms, with or without
40 * modification, are permitted provided that the following conditions
42 * 1. Redistributions of source code must retain the above copyright
43 * notice, this list of conditions and the following disclaimer.
44 * 2. Redistributions in binary form must reproduce the above copyright
45 * notice, this list of conditions and the following disclaimer in the
46 * documentation and/or other materials provided with the distribution.
47 * 3. All advertising materials mentioning features or use of this software
48 * must display the following acknowledgement:
49 * This product includes software developed for the NetBSD Project by
50 * Wasabi Systems, Inc.
51 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
52 * or promote products derived from this software without specific prior
55 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
56 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
57 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
58 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
59 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
60 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
61 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
62 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
63 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
64 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
65 * POSSIBILITY OF SUCH DAMAGE.
68 #include <sys/cdefs.h>
69 __KERNEL_RCSID(0, "$NetBSD: pb1000_obio.c,v 1.8 2005/08/26 13:19:35 drochner Exp $");
71 #include <sys/param.h>
72 #include <sys/systm.h>
73 #include <sys/device.h>
75 #include <machine/bus.h>
77 #include <mips/cache.h>
78 #include <mips/cpuregs.h>
80 #include <mips/adm5120/include/adm5120reg.h>
81 #include <mips/adm5120/include/adm5120var.h>
82 #include <mips/adm5120/include/adm5120_mainbusvar.h>
83 #include <mips/adm5120/include/adm5120_obiovar.h>
89 #define OBIO_DPRINTF(__fmt, ...) \
92 printf((__fmt), __VA_ARGS__); \
93 } while (/*CONSTCOND*/0)
94 #else /* !OBIO_DEBUG */
95 #define OBIO_DPRINTF(__fmt, ...) do { } while (/*CONSTCOND*/0)
96 #endif /* OBIO_DEBUG */
98 static int obio_match(struct device
*, struct cfdata
*, void *);
99 static void obio_attach(struct device
*, struct device
*, void *);
100 static int obio_submatch(struct device
*, struct cfdata
*,
101 const int *, void *);
102 static int obio_print(void *, const char *);
104 CFATTACH_DECL(obio
, sizeof(struct device
), obio_match
, obio_attach
, NULL
, NULL
);
106 /* There can be only one. */
113 uint32_t od_gpio_mask
;
116 struct obiodev obiodevs
[] = {
117 {"uart", ADM5120_BASE_UART0
, 1, 0x0},
118 {"uart", ADM5120_BASE_UART1
, 2, 0x0},
119 {"admsw", ADM5120_BASE_SWITCH
, 9, 0x0},
120 {"ahci", ADM5120_BASE_USB
, 3, 0x0},
121 {"admflash", ADM5120_BASE_SRAM0
, 0, 0x0},
126 obio_match(struct device
*parent
, struct cfdata
*match
, void *aux
)
132 obio_attach_args_create(struct obio_attach_args
*oa
, struct obiodev
*od
,
133 void *gpio
, bus_dma_tag_t dmat
, bus_space_tag_t st
)
135 oa
->oba_name
= od
->od_name
;
136 oa
->oba_addr
= od
->od_addr
;
137 oa
->oba_irq
= od
->od_irq
;
141 oa
->oba_gpio_mask
= od
->od_gpio_mask
;
145 obio_attach(struct device
*parent
, struct device
*self
, void *aux
)
147 struct mainbus_attach_args
*ma
= (struct mainbus_attach_args
*)aux
;
148 struct obio_attach_args oa
;
154 OBIO_DPRINTF("%s: %d\n", __func__
, __LINE__
);
156 OBIO_DPRINTF("%s: %d\n", __func__
, __LINE__
);
157 for (od
= obiodevs
; od
->od_name
!= NULL
; od
++) {
158 OBIO_DPRINTF("%s: %d\n", __func__
, __LINE__
);
159 obio_attach_args_create(&oa
, od
, ma
->ma_gpio
, ma
->ma_dmat
,
161 OBIO_DPRINTF("%s: %d\n", __func__
, __LINE__
);
162 (void)config_found_sm_loc(self
, "obio", NULL
, &oa
, obio_print
,
165 OBIO_DPRINTF("%s: %d\n", __func__
, __LINE__
);
169 obio_submatch(struct device
*parent
, struct cfdata
*cf
,
170 const int *ldesc
, void *aux
)
172 struct obio_attach_args
*oa
= aux
;
174 if (cf
->cf_loc
[OBIOCF_ADDR
] != OBIOCF_ADDR_DEFAULT
&&
175 cf
->cf_loc
[OBIOCF_ADDR
] != oa
->oba_addr
)
178 return config_match(parent
, cf
, aux
);
182 obio_print(void *aux
, const char *pnp
)
184 struct obio_attach_args
*oa
= aux
;
187 aprint_normal("%s at %s", oa
->oba_name
, pnp
);
188 if (oa
->oba_addr
!= OBIOCF_ADDR_DEFAULT
)
189 aprint_normal(" addr 0x%lx", oa
->oba_addr
);
190 if (oa
->oba_gpio_mask
!= OBIOCF_GPIO_MASK_DEFAULT
)
191 aprint_normal(" gpio_mask 0x%02x", oa
->oba_gpio_mask
);