1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
5 * All rights reserved.
6 *
7 * This code is derived from software written for Brini by Mark Brinicombe
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * from: FreeBSD: //depot/projects/arm/src/sys/arm/ti/ti_machdep.c
31 */
32
33#include "opt_ddb.h"
34#include "opt_platform.h"
35
36#include <sys/cdefs.h>
37__FBSDID("$FreeBSD$");
38
39#include <sys/param.h>
40#include <sys/systm.h>
41#include <sys/bus.h>
42#include <sys/devmap.h>
43
44#include <vm/vm.h>
45#include <vm/pmap.h>
46
47#include <machine/bus.h>
48#include <machine/machdep.h>
49#include <machine/platform.h>
50#include <machine/platformvar.h>
51
52#include <arm/rockchip/rk30xx_wdog.h>
53#include <arm/rockchip/rk30xx_mp.h>
54
55#include "platform_if.h"
56
57static platform_devmap_init_t rk30xx_devmap_init;
58static platform_late_init_t rk30xx_late_init;
59static platform_cpu_reset_t rk30xx_cpu_reset;
60
61static void
62rk30xx_late_init(platform_t plat)
63{
64
65	/* Enable cache */
66	cpufunc_control(CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE,
67	    CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE);
68}
69
70/*
71 * Set up static device mappings.
72 */
73static int
74rk30xx_devmap_init(platform_t plat)
75{
76
77	devmap_add_entry(0x10000000, 0x00200000);
78	devmap_add_entry(0x20000000, 0x00100000);
79
80	return (0);
81}
82
83static void
84rk30xx_cpu_reset(platform_t plat)
85{
86
87	rk30_wd_watchdog_reset();
88	printf("Reset failed!\n");
89	while (1);
90}
91
92#if defined(SOC_ROCKCHIP_RK3188)
93static platform_method_t rk30xx_methods[] = {
94	PLATFORMMETHOD(platform_devmap_init,	rk30xx_devmap_init),
95	PLATFORMMETHOD(platform_late_init,	rk30xx_late_init),
96	PLATFORMMETHOD(platform_cpu_reset,	rk30xx_cpu_reset),
97
98#ifdef SMP
99	PLATFORMMETHOD(platform_mp_start_ap,	rk30xx_mp_start_ap),
100	PLATFORMMETHOD(platform_mp_setmaxid,	rk30xx_mp_setmaxid),
101#endif
102	PLATFORMMETHOD_END,
103};
104FDT_PLATFORM_DEF(rk30xx, "RK3188", 0, "rockchip,rk3188", 200);
105#endif
106