xref: /netbsd-src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c (revision 369dd977e4a3e945cd97904f760d5ee0b6655ac1)
1 /*	$NetBSD: netbookpro_machdep.c,v 1.4 2023/09/09 07:07:03 andvar Exp $	*/
2 /*
3  * Copyright (c) 2011 KIYOHARA Takashi
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  */
27 #include <sys/cdefs.h>
28 __KERNEL_RCSID(0, "$NetBSD: netbookpro_machdep.c,v 1.4 2023/09/09 07:07:03 andvar Exp $");
29 
30 #include <sys/systm.h>
31 #include <sys/device.h>
32 #include <sys/mutex.h>
33 #include <sys/param.h>
34 
35 #include <uvm/uvm.h>
36 
37 #include <machine/bootconfig.h>
38 #include <machine/pmap.h>
39 
40 #include <arm/xscale/pxa2x0_gpio.h>
41 
42 #include <hpcarm/dev/nbppconvar.h>
43 
44 #include <dev/cons.h>
45 #include <dev/i2c/i2cvar.h>
46 
47 #include "nbppcon.h"
48 
49 #include "biconsdev.h"
50 #if NBICONSDEV > 0
51 #include <dev/hpc/bicons.h>
52 cons_decl(bicons);
53 #endif
54 #include "wsdisplay.h"
55 #if NWSDISPLAY == 0
56 #include <dev/wscons/wskbdvar.h>
57 #endif
58 
59 static void netbookpro_reset(void);
60 void pxa2x0_machdep_init(void);
61 
62 static int __unused enable_console(void (*)(struct consdev *),
63 				   void (*)(struct consdev *));
64 static void disable_consoles(void);
65 static void cn_nonprobe(struct consdev *);
66 
67 const struct pmap_devmap machdep_devmap[] = {
68 	/* Framebuffer */
69 	DEVMAP_ENTRY(
70 		0x14000000,
71 		0x14000000,
72 		0x00400000
73 	),
74 	DEVMAP_ENTRY_END
75 };
76 
77 static struct pxa2x0_gpioconf netbookpro_boarddep_gpioconf[] = {
78 	{  6, GPIO_CLR | GPIO_ALT_FN_1_OUT },	/* MMCCLK */
79 	{  8, GPIO_CLR | GPIO_ALT_FN_1_OUT },	/* MMCCS0 */
80 	{ 52, GPIO_CLR | GPIO_ALT_FN_2_OUT },	/* nPCE1 */
81 	{ 53, GPIO_CLR | GPIO_ALT_FN_2_OUT },	/* nPCE2 */
82 	{ -1 }
83 };
84 
85 static struct pxa2x0_gpioconf *netbookpro_gpioconf[] = {
86 	pxa25x_pcic_gpioconf,
87 	netbookpro_boarddep_gpioconf,
88 	NULL
89 };
90 
91 static void
netbookpro_reset(void)92 netbookpro_reset(void)
93 {
94 	device_t pcon;
95 
96 	pcon = device_find_by_xname("nbppcon0");
97 #if NNBPPCON > 0
98 	if (pcon != NULL)
99 		nbppcon_pwr_hwreset(pcon);
100 #endif
101 
102 	while (1 /*CONSTCOND*/);
103 
104 	/* NOTREACHED */
105 }
106 
107 void
pxa2x0_machdep_init(void)108 pxa2x0_machdep_init(void)
109 {
110 	extern void (*__cpu_reset)(void);
111 	extern void (*__sleep_func)(void *);
112 	extern BootConfig bootconfig;		/* Boot config storage */
113 
114 
115 	__cpu_reset = netbookpro_reset;
116 	__sleep_func = NULL;
117 	bootconfig.dram[0].pages = 32768; /* 128MiB */
118 
119 	pxa2x0_gpio_config(netbookpro_gpioconf);
120 }
121 
122 void
consinit(void)123 consinit(void)
124 {
125 	static int consinit_called = 0;
126 
127 	if (consinit_called != 0)
128 		return;
129 
130 	consinit_called = 1;
131 
132 	disable_consoles();
133 
134 #if NBICONSDEV > 0
135 	enable_console(biconscninit, biconscnprobe);
136 	bicons_set_priority(CN_INTERNAL);
137 	cninit();
138 #if NWSDISPLAY == 0
139 	if (cn_tab != NULL) {	/* XXXX */
140 		cn_tab->cn_getc = wskbd_cngetc;
141 		cn_tab->cn_pollc = wskbd_cnpollc;
142 		cn_tab->cn_bell = wskbd_cnbell;
143 	}
144 #endif
145 #endif
146 }
147 
148 static int __unused
enable_console(void (* init)(struct consdev *),void (* probe)(struct consdev *))149 enable_console(void (*init)(struct consdev *), void (*probe)(struct consdev *))
150 {
151 	struct consdev *cp;
152 
153 	for (cp = constab; cp->cn_probe; cp++) {
154 		if (cp->cn_init == init) {
155 			cp->cn_probe = probe;
156 			return 1;
157 		}
158 	}
159 	return 0;
160 }
161 
162 static void
disable_consoles(void)163 disable_consoles(void)
164 {
165 	struct consdev *cp;
166 
167 	for (cp = constab; cp->cn_probe; cp++)
168 		cp->cn_probe = cn_nonprobe;
169 }
170 
171 static void
cn_nonprobe(struct consdev * cp)172 cn_nonprobe(struct consdev *cp)
173 {
174 
175 	cp->cn_pri = CN_DEAD;
176 }
177