xref: /netbsd-src/usr.sbin/installboot/arch/evbarm.c (revision 02d67d10660cd0d3f72f9f7ee9ceeb2fc880da41)
1*02d67d10Sthorpej /*	$NetBSD: evbarm.c,v 1.1 2019/05/07 05:02:42 thorpej Exp $	*/
2*02d67d10Sthorpej 
3*02d67d10Sthorpej /*-
4*02d67d10Sthorpej  * Copyright (c) 2019 The NetBSD Foundation, Inc.
5*02d67d10Sthorpej  * All rights reserved.
6*02d67d10Sthorpej  *
7*02d67d10Sthorpej  * This code is derived from software contributed to The NetBSD Foundation
8*02d67d10Sthorpej  * by Jason R. Thorpe.
9*02d67d10Sthorpej  *
10*02d67d10Sthorpej  * Redistribution and use in source and binary forms, with or without
11*02d67d10Sthorpej  * modification, are permitted provided that the following conditions
12*02d67d10Sthorpej  * are met:
13*02d67d10Sthorpej  * 1. Redistributions of source code must retain the above copyright
14*02d67d10Sthorpej  *    notice, this list of conditions and the following disclaimer.
15*02d67d10Sthorpej  * 2. Redistributions in binary form must reproduce the above copyright
16*02d67d10Sthorpej  *    notice, this list of conditions and the following disclaimer in the
17*02d67d10Sthorpej  *    documentation and/or other materials provided with the distribution.
18*02d67d10Sthorpej  *
19*02d67d10Sthorpej  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20*02d67d10Sthorpej  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21*02d67d10Sthorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22*02d67d10Sthorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23*02d67d10Sthorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*02d67d10Sthorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*02d67d10Sthorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*02d67d10Sthorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*02d67d10Sthorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*02d67d10Sthorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*02d67d10Sthorpej  * POSSIBILITY OF SUCH DAMAGE.
30*02d67d10Sthorpej  */
31*02d67d10Sthorpej 
32*02d67d10Sthorpej #if HAVE_NBTOOL_CONFIG_H
33*02d67d10Sthorpej #include "nbtool_config.h"
34*02d67d10Sthorpej #endif
35*02d67d10Sthorpej 
36*02d67d10Sthorpej #include <sys/cdefs.h>
37*02d67d10Sthorpej #if !defined(__lint)
38*02d67d10Sthorpej __RCSID("$NetBSD: evbarm.c,v 1.1 2019/05/07 05:02:42 thorpej Exp $");
39*02d67d10Sthorpej #endif  /* !__lint */
40*02d67d10Sthorpej 
41*02d67d10Sthorpej #include <err.h>
42*02d67d10Sthorpej #include <stdio.h>
43*02d67d10Sthorpej #include <string.h>
44*02d67d10Sthorpej #include <limits.h>
45*02d67d10Sthorpej 
46*02d67d10Sthorpej #include "installboot.h"
47*02d67d10Sthorpej #include "evboards.h"
48*02d67d10Sthorpej 
49*02d67d10Sthorpej static int	evbarm_setboot(ib_params *);
50*02d67d10Sthorpej static int	evbarm_clearboot(ib_params *);
51*02d67d10Sthorpej static int	evbarm_editboot(ib_params *);
52*02d67d10Sthorpej static void	evbarm_usage(ib_params *);
53*02d67d10Sthorpej 
54*02d67d10Sthorpej struct ib_mach ib_mach_evbarm = {
55*02d67d10Sthorpej 	.name		=	"evbarm",
56*02d67d10Sthorpej 	.setboot	=	evbarm_setboot,
57*02d67d10Sthorpej 	.clearboot	=	evbarm_clearboot,
58*02d67d10Sthorpej 	.editboot	=	evbarm_editboot,
59*02d67d10Sthorpej 	.usage		=	evbarm_usage,
60*02d67d10Sthorpej 	.valid_flags	=	IB_BOARD | IB_DTB | IB_MEDIA,
61*02d67d10Sthorpej 	.mach_flags	=	MF_UBOOT,
62*02d67d10Sthorpej };
63*02d67d10Sthorpej 
64*02d67d10Sthorpej static int
evbarm_setboot(ib_params * params)65*02d67d10Sthorpej evbarm_setboot(ib_params *params)
66*02d67d10Sthorpej {
67*02d67d10Sthorpej 	evb_board board;
68*02d67d10Sthorpej 	int rv = 0;
69*02d67d10Sthorpej 
70*02d67d10Sthorpej 	if (!evb_db_load(params)) {
71*02d67d10Sthorpej 		warnx("Unable to load board db.");
72*02d67d10Sthorpej 		return 0;
73*02d67d10Sthorpej 	}
74*02d67d10Sthorpej 
75*02d67d10Sthorpej 	board = evb_db_get_board(params);
76*02d67d10Sthorpej 	if (board == NULL)
77*02d67d10Sthorpej 		goto out;
78*02d67d10Sthorpej 
79*02d67d10Sthorpej 	rv = evb_uboot_setboot(params, board);
80*02d67d10Sthorpej 
81*02d67d10Sthorpej  out:
82*02d67d10Sthorpej 	if (params->mach_data) {
83*02d67d10Sthorpej 		prop_object_release(params->mach_data);
84*02d67d10Sthorpej 		params->mach_data = NULL;
85*02d67d10Sthorpej 	}
86*02d67d10Sthorpej 	return rv;
87*02d67d10Sthorpej }
88*02d67d10Sthorpej 
89*02d67d10Sthorpej static int
evbarm_clearboot(ib_params * params)90*02d67d10Sthorpej evbarm_clearboot(ib_params *params)
91*02d67d10Sthorpej {
92*02d67d10Sthorpej 
93*02d67d10Sthorpej 	return no_clearboot(params);
94*02d67d10Sthorpej }
95*02d67d10Sthorpej 
96*02d67d10Sthorpej static int
evbarm_editboot(ib_params * params)97*02d67d10Sthorpej evbarm_editboot(ib_params *params)
98*02d67d10Sthorpej {
99*02d67d10Sthorpej 
100*02d67d10Sthorpej 	return no_editboot(params);
101*02d67d10Sthorpej }
102*02d67d10Sthorpej 
103*02d67d10Sthorpej static void
evbarm_usage(ib_params * params)104*02d67d10Sthorpej evbarm_usage(ib_params *params)
105*02d67d10Sthorpej {
106*02d67d10Sthorpej 
107*02d67d10Sthorpej 	if (!evb_db_load(params)) {
108*02d67d10Sthorpej 		warnx("Unable to load board db.");
109*02d67d10Sthorpej 		return;
110*02d67d10Sthorpej 	}
111*02d67d10Sthorpej 
112*02d67d10Sthorpej 	fprintf(stderr, "Known boards (for -o board=...) are:\n");
113*02d67d10Sthorpej 	evb_db_list_boards(params, stderr);
114*02d67d10Sthorpej 
115*02d67d10Sthorpej 	if (params->mach_data) {
116*02d67d10Sthorpej 		prop_object_release(params->mach_data);
117*02d67d10Sthorpej 		params->mach_data = NULL;
118*02d67d10Sthorpej 	}
119*02d67d10Sthorpej }
120