1d00d8ed8SEmmanuel Vadot /*-
2d00d8ed8SEmmanuel Vadot * Copyright (c) 2012 Ganbold Tsagaankhuu <ganbold@freebsd.org>
3d00d8ed8SEmmanuel Vadot * Copyright (c) 2015-2016 Emmanuel Vadot <manu@freebsd.org>
4d00d8ed8SEmmanuel Vadot * All rights reserved.
5d00d8ed8SEmmanuel Vadot *
6d00d8ed8SEmmanuel Vadot * This code is derived from software written for Brini by Mark Brinicombe
7d00d8ed8SEmmanuel Vadot *
8d00d8ed8SEmmanuel Vadot * Redistribution and use in source and binary forms, with or without
9d00d8ed8SEmmanuel Vadot * modification, are permitted provided that the following conditions
10d00d8ed8SEmmanuel Vadot * are met:
11d00d8ed8SEmmanuel Vadot * 1. Redistributions of source code must retain the above copyright
12d00d8ed8SEmmanuel Vadot * notice, this list of conditions and the following disclaimer.
13d00d8ed8SEmmanuel Vadot * 2. Redistributions in binary form must reproduce the above copyright
14d00d8ed8SEmmanuel Vadot * notice, this list of conditions and the following disclaimer in the
15d00d8ed8SEmmanuel Vadot * documentation and/or other materials provided with the distribution.
16d00d8ed8SEmmanuel Vadot *
17d00d8ed8SEmmanuel Vadot * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18d00d8ed8SEmmanuel Vadot * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19d00d8ed8SEmmanuel Vadot * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20d00d8ed8SEmmanuel Vadot * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21d00d8ed8SEmmanuel Vadot * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22d00d8ed8SEmmanuel Vadot * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23d00d8ed8SEmmanuel Vadot * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24d00d8ed8SEmmanuel Vadot * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25d00d8ed8SEmmanuel Vadot * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26d00d8ed8SEmmanuel Vadot * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27d00d8ed8SEmmanuel Vadot * SUCH DAMAGE.
28d00d8ed8SEmmanuel Vadot *
29d00d8ed8SEmmanuel Vadot
30d00d8ed8SEmmanuel Vadot * from: FreeBSD: //depot/projects/arm/src/sys/arm/ti/ti_machdep.c
31d00d8ed8SEmmanuel Vadot */
32d00d8ed8SEmmanuel Vadot
33d00d8ed8SEmmanuel Vadot #include "opt_ddb.h"
34d00d8ed8SEmmanuel Vadot #include "opt_platform.h"
35d00d8ed8SEmmanuel Vadot
36d00d8ed8SEmmanuel Vadot #include <sys/param.h>
37d00d8ed8SEmmanuel Vadot #include <sys/systm.h>
38d00d8ed8SEmmanuel Vadot #include <sys/bus.h>
39d00d8ed8SEmmanuel Vadot #include <sys/devmap.h>
40d00d8ed8SEmmanuel Vadot
41d00d8ed8SEmmanuel Vadot #include <vm/vm.h>
42d00d8ed8SEmmanuel Vadot #include <vm/pmap.h>
43d00d8ed8SEmmanuel Vadot
44d00d8ed8SEmmanuel Vadot #include <machine/bus.h>
45d00d8ed8SEmmanuel Vadot #include <machine/machdep.h>
46d00d8ed8SEmmanuel Vadot #include <machine/platformvar.h>
47d00d8ed8SEmmanuel Vadot
48d00d8ed8SEmmanuel Vadot #include <arm/allwinner/aw_mp.h>
49d00d8ed8SEmmanuel Vadot #include <arm/allwinner/aw_wdog.h>
50d00d8ed8SEmmanuel Vadot #include <arm/allwinner/aw_machdep.h>
51d00d8ed8SEmmanuel Vadot
52d00d8ed8SEmmanuel Vadot #include "platform_if.h"
53d00d8ed8SEmmanuel Vadot
54ba9f40caSAndrew Turner static platform_attach_t a10_attach;
55ba9f40caSAndrew Turner static platform_attach_t a13_attach;
56ba9f40caSAndrew Turner static platform_attach_t a20_attach;
57ba9f40caSAndrew Turner static platform_attach_t a31_attach;
58ba9f40caSAndrew Turner static platform_attach_t a31s_attach;
59ba9f40caSAndrew Turner static platform_attach_t a83t_attach;
60ba9f40caSAndrew Turner static platform_attach_t h3_attach;
61ba9f40caSAndrew Turner static platform_devmap_init_t allwinner_devmap_init;
62ba9f40caSAndrew Turner static platform_cpu_reset_t allwinner_cpu_reset;
63ba9f40caSAndrew Turner
64d00d8ed8SEmmanuel Vadot static u_int soc_type;
65d00d8ed8SEmmanuel Vadot static u_int soc_family;
66d00d8ed8SEmmanuel Vadot
67d00d8ed8SEmmanuel Vadot static int
a10_attach(platform_t plat)68d00d8ed8SEmmanuel Vadot a10_attach(platform_t plat)
69d00d8ed8SEmmanuel Vadot {
70d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A10;
71d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN4I;
72d00d8ed8SEmmanuel Vadot return (0);
73d00d8ed8SEmmanuel Vadot }
74d00d8ed8SEmmanuel Vadot
75d00d8ed8SEmmanuel Vadot static int
a13_attach(platform_t plat)76d00d8ed8SEmmanuel Vadot a13_attach(platform_t plat)
77d00d8ed8SEmmanuel Vadot {
78d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A13;
79d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN5I;
80d00d8ed8SEmmanuel Vadot return (0);
81d00d8ed8SEmmanuel Vadot }
82d00d8ed8SEmmanuel Vadot
83d00d8ed8SEmmanuel Vadot static int
a20_attach(platform_t plat)84d00d8ed8SEmmanuel Vadot a20_attach(platform_t plat)
85d00d8ed8SEmmanuel Vadot {
86d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A20;
87d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN7I;
88d00d8ed8SEmmanuel Vadot
89d00d8ed8SEmmanuel Vadot return (0);
90d00d8ed8SEmmanuel Vadot }
91d00d8ed8SEmmanuel Vadot
92d00d8ed8SEmmanuel Vadot static int
a31_attach(platform_t plat)93d00d8ed8SEmmanuel Vadot a31_attach(platform_t plat)
94d00d8ed8SEmmanuel Vadot {
95d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A31;
96d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN6I;
97d00d8ed8SEmmanuel Vadot
98d00d8ed8SEmmanuel Vadot return (0);
99d00d8ed8SEmmanuel Vadot }
100d00d8ed8SEmmanuel Vadot
101d00d8ed8SEmmanuel Vadot static int
a31s_attach(platform_t plat)102d00d8ed8SEmmanuel Vadot a31s_attach(platform_t plat)
103d00d8ed8SEmmanuel Vadot {
104d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A31S;
105d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN6I;
106d00d8ed8SEmmanuel Vadot
107d00d8ed8SEmmanuel Vadot return (0);
108d00d8ed8SEmmanuel Vadot }
109d00d8ed8SEmmanuel Vadot
110d00d8ed8SEmmanuel Vadot static int
a33_attach(platform_t plat)111cf72965fSEmmanuel Vadot a33_attach(platform_t plat)
112cf72965fSEmmanuel Vadot {
113cf72965fSEmmanuel Vadot soc_type = ALLWINNERSOC_A33;
114cf72965fSEmmanuel Vadot soc_family = ALLWINNERSOC_SUN8I;
115cf72965fSEmmanuel Vadot
116cf72965fSEmmanuel Vadot return (0);
117cf72965fSEmmanuel Vadot }
118cf72965fSEmmanuel Vadot
119cf72965fSEmmanuel Vadot static int
a83t_attach(platform_t plat)120d00d8ed8SEmmanuel Vadot a83t_attach(platform_t plat)
121d00d8ed8SEmmanuel Vadot {
122d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_A83T;
123d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN8I;
124d00d8ed8SEmmanuel Vadot
125d00d8ed8SEmmanuel Vadot return (0);
126d00d8ed8SEmmanuel Vadot }
127d00d8ed8SEmmanuel Vadot
128d00d8ed8SEmmanuel Vadot static int
h3_attach(platform_t plat)129d00d8ed8SEmmanuel Vadot h3_attach(platform_t plat)
130d00d8ed8SEmmanuel Vadot {
131d00d8ed8SEmmanuel Vadot soc_type = ALLWINNERSOC_H3;
132d00d8ed8SEmmanuel Vadot soc_family = ALLWINNERSOC_SUN8I;
133d00d8ed8SEmmanuel Vadot
134d00d8ed8SEmmanuel Vadot return (0);
135d00d8ed8SEmmanuel Vadot }
136d00d8ed8SEmmanuel Vadot
137d00d8ed8SEmmanuel Vadot /*
138d00d8ed8SEmmanuel Vadot * Set up static device mappings.
139d00d8ed8SEmmanuel Vadot *
140d00d8ed8SEmmanuel Vadot * This covers all the on-chip device with 1MB section mappings, which is good
141d00d8ed8SEmmanuel Vadot * for performance (uses fewer TLB entries for device access).
142d00d8ed8SEmmanuel Vadot *
143d00d8ed8SEmmanuel Vadot * XXX It also covers a block of SRAM and some GPU (mali400) stuff that maybe
144d00d8ed8SEmmanuel Vadot * shouldn't be device-mapped. The original code mapped a 4MB block, but
145d00d8ed8SEmmanuel Vadot * perhaps a 1MB block would be more appropriate.
146d00d8ed8SEmmanuel Vadot */
147d00d8ed8SEmmanuel Vadot static int
allwinner_devmap_init(platform_t plat)148d00d8ed8SEmmanuel Vadot allwinner_devmap_init(platform_t plat)
149d00d8ed8SEmmanuel Vadot {
150d00d8ed8SEmmanuel Vadot
151d00d8ed8SEmmanuel Vadot devmap_add_entry(0x01C00000, 0x00400000); /* 4MB */
152d00d8ed8SEmmanuel Vadot
153d00d8ed8SEmmanuel Vadot return (0);
154d00d8ed8SEmmanuel Vadot }
155d00d8ed8SEmmanuel Vadot
1560dbb8873SAndrew Turner static void
allwinner_cpu_reset(platform_t plat)1570dbb8873SAndrew Turner allwinner_cpu_reset(platform_t plat)
158d00d8ed8SEmmanuel Vadot {
159d00d8ed8SEmmanuel Vadot aw_wdog_watchdog_reset();
160d00d8ed8SEmmanuel Vadot printf("Reset failed!\n");
161d00d8ed8SEmmanuel Vadot while (1);
162d00d8ed8SEmmanuel Vadot }
163d00d8ed8SEmmanuel Vadot
164d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A10)
165d00d8ed8SEmmanuel Vadot static platform_method_t a10_methods[] = {
166d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a10_attach),
167d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
1680dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
169d00d8ed8SEmmanuel Vadot
170d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
171d00d8ed8SEmmanuel Vadot };
172d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a10, "a10", 0, "allwinner,sun4i-a10", 200);
173d00d8ed8SEmmanuel Vadot #endif
174d00d8ed8SEmmanuel Vadot
175d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A13)
176d00d8ed8SEmmanuel Vadot static platform_method_t a13_methods[] = {
177d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a13_attach),
178d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
1790dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
180d00d8ed8SEmmanuel Vadot
181d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
182d00d8ed8SEmmanuel Vadot };
183d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a13, "a13", 0, "allwinner,sun5i-a13", 200);
184d00d8ed8SEmmanuel Vadot #endif
185d00d8ed8SEmmanuel Vadot
186d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A20)
187d00d8ed8SEmmanuel Vadot static platform_method_t a20_methods[] = {
188d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a20_attach),
189d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
1900dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
191d00d8ed8SEmmanuel Vadot
192d00d8ed8SEmmanuel Vadot #ifdef SMP
193d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
194d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
195d00d8ed8SEmmanuel Vadot #endif
196d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
197d00d8ed8SEmmanuel Vadot };
198d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a20, "a20", 0, "allwinner,sun7i-a20", 200);
199d00d8ed8SEmmanuel Vadot #endif
200d00d8ed8SEmmanuel Vadot
201d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A31)
202d00d8ed8SEmmanuel Vadot static platform_method_t a31_methods[] = {
203d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a31_attach),
204d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
2050dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
206d00d8ed8SEmmanuel Vadot
207d00d8ed8SEmmanuel Vadot #ifdef SMP
208d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
209d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
210d00d8ed8SEmmanuel Vadot #endif
211d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
212d00d8ed8SEmmanuel Vadot };
213d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a31, "a31", 0, "allwinner,sun6i-a31", 200);
214d00d8ed8SEmmanuel Vadot #endif
215d00d8ed8SEmmanuel Vadot
216d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A31S)
217d00d8ed8SEmmanuel Vadot static platform_method_t a31s_methods[] = {
218d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a31s_attach),
219d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
2200dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
221d00d8ed8SEmmanuel Vadot
222d00d8ed8SEmmanuel Vadot #ifdef SMP
223d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
224d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
225d00d8ed8SEmmanuel Vadot #endif
226d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
227d00d8ed8SEmmanuel Vadot };
228d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a31s, "a31s", 0, "allwinner,sun6i-a31s", 200);
229d00d8ed8SEmmanuel Vadot #endif
230d00d8ed8SEmmanuel Vadot
231cf72965fSEmmanuel Vadot #if defined(SOC_ALLWINNER_A33)
232cf72965fSEmmanuel Vadot static platform_method_t a33_methods[] = {
233cf72965fSEmmanuel Vadot PLATFORMMETHOD(platform_attach, a33_attach),
234cf72965fSEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
235cf72965fSEmmanuel Vadot PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
236cf72965fSEmmanuel Vadot
237cf72965fSEmmanuel Vadot #ifdef SMP
238cf72965fSEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
239cf72965fSEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
240cf72965fSEmmanuel Vadot #endif
241cf72965fSEmmanuel Vadot PLATFORMMETHOD_END,
242cf72965fSEmmanuel Vadot };
243cf72965fSEmmanuel Vadot FDT_PLATFORM_DEF(a33, "a33", 0, "allwinner,sun8i-a33", 200);
244cf72965fSEmmanuel Vadot #endif
245cf72965fSEmmanuel Vadot
246d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_A83T)
247d00d8ed8SEmmanuel Vadot static platform_method_t a83t_methods[] = {
248d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, a83t_attach),
249d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
2500dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
251d00d8ed8SEmmanuel Vadot
252d00d8ed8SEmmanuel Vadot #ifdef SMP
253d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, a83t_mp_start_ap),
254d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
255d00d8ed8SEmmanuel Vadot #endif
256d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
257d00d8ed8SEmmanuel Vadot };
258d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(a83t, "a83t", 0, "allwinner,sun8i-a83t", 200);
259d00d8ed8SEmmanuel Vadot #endif
260d00d8ed8SEmmanuel Vadot
261*7f613942SEmmanuel Vadot #if defined(SOC_ALLWINNER_H2PLUS)
262*7f613942SEmmanuel Vadot static platform_method_t h2_plus_methods[] = {
263*7f613942SEmmanuel Vadot PLATFORMMETHOD(platform_attach, h3_attach),
264*7f613942SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
265*7f613942SEmmanuel Vadot PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
266*7f613942SEmmanuel Vadot
267*7f613942SEmmanuel Vadot #ifdef SMP
268*7f613942SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
269*7f613942SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
270*7f613942SEmmanuel Vadot #endif
271*7f613942SEmmanuel Vadot PLATFORMMETHOD_END,
272*7f613942SEmmanuel Vadot };
273*7f613942SEmmanuel Vadot FDT_PLATFORM_DEF(h2_plus, "h2_plus", 0, "allwinner,sun8i-h2-plus", 200);
274*7f613942SEmmanuel Vadot #endif
275*7f613942SEmmanuel Vadot
276d00d8ed8SEmmanuel Vadot #if defined(SOC_ALLWINNER_H3)
277d00d8ed8SEmmanuel Vadot static platform_method_t h3_methods[] = {
278d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_attach, h3_attach),
279d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init),
2800dbb8873SAndrew Turner PLATFORMMETHOD(platform_cpu_reset, allwinner_cpu_reset),
281d00d8ed8SEmmanuel Vadot
282d00d8ed8SEmmanuel Vadot #ifdef SMP
283d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap),
284d00d8ed8SEmmanuel Vadot PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid),
285d00d8ed8SEmmanuel Vadot #endif
286d00d8ed8SEmmanuel Vadot PLATFORMMETHOD_END,
287d00d8ed8SEmmanuel Vadot };
288d00d8ed8SEmmanuel Vadot FDT_PLATFORM_DEF(h3, "h3", 0, "allwinner,sun8i-h3", 200);
289d00d8ed8SEmmanuel Vadot #endif
290d00d8ed8SEmmanuel Vadot
291d00d8ed8SEmmanuel Vadot u_int
allwinner_soc_type(void)292d00d8ed8SEmmanuel Vadot allwinner_soc_type(void)
293d00d8ed8SEmmanuel Vadot {
294d00d8ed8SEmmanuel Vadot return (soc_type);
295d00d8ed8SEmmanuel Vadot }
296d00d8ed8SEmmanuel Vadot
297d00d8ed8SEmmanuel Vadot u_int
allwinner_soc_family(void)298d00d8ed8SEmmanuel Vadot allwinner_soc_family(void)
299d00d8ed8SEmmanuel Vadot {
300d00d8ed8SEmmanuel Vadot return (soc_family);
301d00d8ed8SEmmanuel Vadot }
302