blob: 80d8c4241ec36a77575b9b300b271621cdf5e87d [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Heiko Stübnerdf9041e2017-02-18 19:46:38 +01002/*
3 * (C) Copyright 2015 Google, Inc
Heiko Stübnerdf9041e2017-02-18 19:46:38 +01004 */
5
6#include <common.h>
7#include <clk.h>
8#include <dm.h>
9#include <ram.h>
10#include <syscon.h>
Simon Glassc35f8e52019-01-21 14:53:31 -070011#include <asm/gpio.h>
Heiko Stübnerdf9041e2017-02-18 19:46:38 +010012#include <asm/io.h>
Kever Yang15f09a12019-03-28 11:01:23 +080013#include <asm/arch-rockchip/clock.h>
14#include <asm/arch-rockchip/grf_rk3188.h>
15#include <asm/arch-rockchip/periph.h>
16#include <asm/arch-rockchip/pmu_rk3288.h>
17#include <asm/arch-rockchip/boot_mode.h>
Heiko Stübnerdf9041e2017-02-18 19:46:38 +010018#include <dm/pinctrl.h>
19
Alexander Kochetkov706afa42018-02-26 15:37:42 +030020__weak int rk_board_late_init(void)
21{
22 return 0;
23}
24
Heiko Stübner008a6102017-04-06 00:19:36 +020025int board_late_init(void)
26{
27 struct rk3188_grf *grf;
28
Andy Yane3067792017-10-11 15:00:16 +080029 setup_boot_mode();
Heiko Stübner008a6102017-04-06 00:19:36 +020030 grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
31 if (IS_ERR(grf)) {
Masahiro Yamada9b643e32017-09-16 14:10:41 +090032 pr_err("grf syscon returned %ld\n", PTR_ERR(grf));
Heiko Stübner008a6102017-04-06 00:19:36 +020033 } else {
34 /* enable noc remap to mimic legacy loaders */
35 rk_clrsetreg(&grf->soc_con0,
36 NOC_REMAP_MASK << NOC_REMAP_SHIFT,
37 NOC_REMAP_MASK << NOC_REMAP_SHIFT);
38 }
39
Alexander Kochetkov706afa42018-02-26 15:37:42 +030040 return rk_board_late_init();
Heiko Stübner008a6102017-04-06 00:19:36 +020041}
42
Heiko Stübnerdf9041e2017-02-18 19:46:38 +010043int board_init(void)
44{
Philipp Tomsichee14d292017-06-29 11:21:15 +020045#if CONFIG_IS_ENABLED(ROCKCHIP_BACK_TO_BROM)
Heiko Stübnerdf9041e2017-02-18 19:46:38 +010046 struct udevice *pinctrl;
47 int ret;
48
49 /*
50 * We need to implement sdcard iomux here for the further
51 * initialization, otherwise, it'll hit sdcard command sending
52 * timeout exception.
53 */
54 ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
55 if (ret) {
56 debug("%s: Cannot find pinctrl device\n", __func__);
57 goto err;
58 }
59 ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_SDCARD);
60 if (ret) {
61 debug("%s: Failed to set up SD card\n", __func__);
62 goto err;
63 }
64
65 return 0;
66err:
67 printf("board_init: Error %d\n", ret);
68
69 /* No way to report error here */
70 hang();
71
72 return -1;
73#else
74 return 0;
75#endif
76}
77
Trevor Woerner10015022019-05-03 09:41:00 -040078#if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
Heiko Stübnerdf9041e2017-02-18 19:46:38 +010079void enable_caches(void)
80{
81 /* Enable D-cache. I-cache is already enabled in start.S */
82 dcache_enable();
83}
84#endif