xref: /freebsd-src/sys/arm/qemu/virt_machdep.c (revision fdafd315ad0d0f28a11b9fb4476a9ab059c62b92)
142f0d1faSAndrew Turner /*-
242f0d1faSAndrew Turner  * Copyright (c) 2015 Andrew Turner
342f0d1faSAndrew Turner  * All rights reserved.
442f0d1faSAndrew Turner  *
542f0d1faSAndrew Turner  * Redistribution and use in source and binary forms, with or without
642f0d1faSAndrew Turner  * modification, are permitted provided that the following conditions
742f0d1faSAndrew Turner  * are met:
842f0d1faSAndrew Turner  * 1. Redistributions of source code must retain the above copyright
942f0d1faSAndrew Turner  *    notice, this list of conditions and the following disclaimer.
1042f0d1faSAndrew Turner  * 2. Redistributions in binary form must reproduce the above copyright
1142f0d1faSAndrew Turner  *    notice, this list of conditions and the following disclaimer in the
1242f0d1faSAndrew Turner  *    documentation and/or other materials provided with the distribution.
1342f0d1faSAndrew Turner  *
1442f0d1faSAndrew Turner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1542f0d1faSAndrew Turner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1642f0d1faSAndrew Turner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1742f0d1faSAndrew Turner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1842f0d1faSAndrew Turner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1942f0d1faSAndrew Turner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2042f0d1faSAndrew Turner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2142f0d1faSAndrew Turner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2242f0d1faSAndrew Turner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2342f0d1faSAndrew Turner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2442f0d1faSAndrew Turner  * SUCH DAMAGE.
2542f0d1faSAndrew Turner  *
2642f0d1faSAndrew Turner  */
2742f0d1faSAndrew Turner 
2842f0d1faSAndrew Turner #include "opt_platform.h"
2942f0d1faSAndrew Turner 
3042f0d1faSAndrew Turner #include <sys/param.h>
3142f0d1faSAndrew Turner #include <sys/systm.h>
3230b72b68SRuslan Bukin #include <sys/devmap.h>
3342f0d1faSAndrew Turner 
3442f0d1faSAndrew Turner #include <vm/vm.h>
3542f0d1faSAndrew Turner 
3642f0d1faSAndrew Turner #include <machine/bus.h>
3742f0d1faSAndrew Turner #include <machine/platform.h>
3842f0d1faSAndrew Turner #include <machine/platformvar.h>
3942f0d1faSAndrew Turner 
40a19c0b37SAndrew Turner #include <arm/qemu/virt_mp.h>
41a19c0b37SAndrew Turner 
4242f0d1faSAndrew Turner #include "platform_if.h"
4342f0d1faSAndrew Turner 
4442f0d1faSAndrew Turner /*
4542f0d1faSAndrew Turner  * Set up static device mappings.
4642f0d1faSAndrew Turner  */
4742f0d1faSAndrew Turner static int
virt_devmap_init(platform_t plat)4842f0d1faSAndrew Turner virt_devmap_init(platform_t plat)
4942f0d1faSAndrew Turner {
5042f0d1faSAndrew Turner 
5130b72b68SRuslan Bukin 	devmap_add_entry(0x09000000, 0x100000); /* Uart */
5242f0d1faSAndrew Turner 	return (0);
5342f0d1faSAndrew Turner }
5442f0d1faSAndrew Turner 
5542f0d1faSAndrew Turner static platform_method_t virt_methods[] = {
5642f0d1faSAndrew Turner 	PLATFORMMETHOD(platform_devmap_init,	virt_devmap_init),
5742f0d1faSAndrew Turner 
58a19c0b37SAndrew Turner #ifdef SMP
59a19c0b37SAndrew Turner 	PLATFORMMETHOD(platform_mp_start_ap,	virt_mp_start_ap),
60a19c0b37SAndrew Turner #endif
61a19c0b37SAndrew Turner 
6242f0d1faSAndrew Turner 	PLATFORMMETHOD_END,
6342f0d1faSAndrew Turner };
6442f0d1faSAndrew Turner 
65cca48a59SAndrew Turner FDT_PLATFORM_DEF(virt, "virt", 0, "linux,dummy-virt", 1);
66*e94f204aSBjoern A. Zeeb 
67*e94f204aSBjoern A. Zeeb static int
gem5_devmap_init(platform_t plat)68*e94f204aSBjoern A. Zeeb gem5_devmap_init(platform_t plat)
69*e94f204aSBjoern A. Zeeb {
70*e94f204aSBjoern A. Zeeb 
71*e94f204aSBjoern A. Zeeb 	devmap_add_entry(0x1c090000, 0x100000); /* Uart */
72*e94f204aSBjoern A. Zeeb 	return (0);
73*e94f204aSBjoern A. Zeeb }
74*e94f204aSBjoern A. Zeeb 
75*e94f204aSBjoern A. Zeeb static platform_method_t gem5_methods[] = {
76*e94f204aSBjoern A. Zeeb 	PLATFORMMETHOD(platform_devmap_init,	gem5_devmap_init),
77*e94f204aSBjoern A. Zeeb 
78*e94f204aSBjoern A. Zeeb 	PLATFORMMETHOD_END,
79*e94f204aSBjoern A. Zeeb };
80*e94f204aSBjoern A. Zeeb 
81*e94f204aSBjoern A. Zeeb FDT_PLATFORM_DEF(gem5, "gem5", 0, "arm,vexpress", 1);
82