1*f93d18d6Sjsg /* $OpenBSD: platform.c,v 1.1 2015/05/19 03:30:54 jsg Exp $ */ 2*f93d18d6Sjsg /* 3*f93d18d6Sjsg * Copyright (c) 2014 Patrick Wildt <patrick@blueri.se> 4*f93d18d6Sjsg * 5*f93d18d6Sjsg * Permission to use, copy, modify, and distribute this software for any 6*f93d18d6Sjsg * purpose with or without fee is hereby granted, provided that the above 7*f93d18d6Sjsg * copyright notice and this permission notice appear in all copies. 8*f93d18d6Sjsg * 9*f93d18d6Sjsg * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*f93d18d6Sjsg * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*f93d18d6Sjsg * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*f93d18d6Sjsg * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*f93d18d6Sjsg * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*f93d18d6Sjsg * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*f93d18d6Sjsg * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*f93d18d6Sjsg */ 17*f93d18d6Sjsg 18*f93d18d6Sjsg #include <sys/param.h> 19*f93d18d6Sjsg #include <sys/types.h> 20*f93d18d6Sjsg #include <sys/systm.h> 21*f93d18d6Sjsg 22*f93d18d6Sjsg #include <machine/bus.h> 23*f93d18d6Sjsg 24*f93d18d6Sjsg #include <armv7/armv7/armv7var.h> 25*f93d18d6Sjsg #include <armv7/armv7/armv7_machdep.h> 26*f93d18d6Sjsg #include <arm/cortex/smc.h> 27*f93d18d6Sjsg 28*f93d18d6Sjsg #include "imx.h" 29*f93d18d6Sjsg #include "omap.h" 30*f93d18d6Sjsg #include "sunxi.h" 31*f93d18d6Sjsg 32*f93d18d6Sjsg static struct armv7_platform *platform; 33*f93d18d6Sjsg 34*f93d18d6Sjsg struct armv7_platform *imx_platform_match(void); 35*f93d18d6Sjsg struct armv7_platform *omap_platform_match(void); 36*f93d18d6Sjsg struct armv7_platform *sunxi_platform_match(void); 37*f93d18d6Sjsg 38*f93d18d6Sjsg struct armv7_platform * (*plat_match[])(void) = { 39*f93d18d6Sjsg #if NIMX > 0 40*f93d18d6Sjsg imx_platform_match, 41*f93d18d6Sjsg #endif 42*f93d18d6Sjsg #if NOMAP > 0 43*f93d18d6Sjsg omap_platform_match, 44*f93d18d6Sjsg #endif 45*f93d18d6Sjsg #if NSUNXI > 0 46*f93d18d6Sjsg sunxi_platform_match, 47*f93d18d6Sjsg #endif 48*f93d18d6Sjsg }; 49*f93d18d6Sjsg 50*f93d18d6Sjsg void 51*f93d18d6Sjsg platform_init(void) 52*f93d18d6Sjsg { 53*f93d18d6Sjsg int i; 54*f93d18d6Sjsg 55*f93d18d6Sjsg for (i = 0; i < nitems(plat_match); i++) { 56*f93d18d6Sjsg platform = plat_match[i](); 57*f93d18d6Sjsg if (platform != NULL) 58*f93d18d6Sjsg break; 59*f93d18d6Sjsg } 60*f93d18d6Sjsg if (platform == NULL) 61*f93d18d6Sjsg panic("no matching armv7 platform"); 62*f93d18d6Sjsg } 63*f93d18d6Sjsg 64*f93d18d6Sjsg const char * 65*f93d18d6Sjsg platform_boot_name(void) 66*f93d18d6Sjsg { 67*f93d18d6Sjsg return platform->boot_name; 68*f93d18d6Sjsg } 69*f93d18d6Sjsg 70*f93d18d6Sjsg void 71*f93d18d6Sjsg platform_smc_write(bus_space_tag_t iot, bus_space_handle_t ioh, bus_size_t off, 72*f93d18d6Sjsg uint32_t op, uint32_t val) 73*f93d18d6Sjsg { 74*f93d18d6Sjsg platform->smc_write(iot, ioh, off, op, val); 75*f93d18d6Sjsg } 76*f93d18d6Sjsg 77*f93d18d6Sjsg void 78*f93d18d6Sjsg platform_init_cons(void) 79*f93d18d6Sjsg { 80*f93d18d6Sjsg platform->init_cons(); 81*f93d18d6Sjsg } 82*f93d18d6Sjsg 83*f93d18d6Sjsg void 84*f93d18d6Sjsg platform_watchdog_reset(void) 85*f93d18d6Sjsg { 86*f93d18d6Sjsg platform->watchdog_reset(); 87*f93d18d6Sjsg } 88*f93d18d6Sjsg 89*f93d18d6Sjsg void 90*f93d18d6Sjsg platform_powerdown(void) 91*f93d18d6Sjsg { 92*f93d18d6Sjsg platform->powerdown(); 93*f93d18d6Sjsg } 94*f93d18d6Sjsg 95*f93d18d6Sjsg const char * 96*f93d18d6Sjsg platform_board_name(void) 97*f93d18d6Sjsg { 98*f93d18d6Sjsg return (platform->board_name()); 99*f93d18d6Sjsg } 100*f93d18d6Sjsg 101*f93d18d6Sjsg void 102*f93d18d6Sjsg platform_disable_l2_if_needed(void) 103*f93d18d6Sjsg { 104*f93d18d6Sjsg platform->disable_l2_if_needed(); 105*f93d18d6Sjsg } 106*f93d18d6Sjsg 107*f93d18d6Sjsg struct board_dev * 108*f93d18d6Sjsg platform_board_devs() 109*f93d18d6Sjsg { 110*f93d18d6Sjsg return (platform->devs); 111*f93d18d6Sjsg } 112*f93d18d6Sjsg 113*f93d18d6Sjsg void 114*f93d18d6Sjsg platform_board_init() 115*f93d18d6Sjsg { 116*f93d18d6Sjsg platform->board_init(); 117*f93d18d6Sjsg } 118