xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/board_init.c (revision c72f4d4c2ebb3be9797ef6cd7dcbc2124c825f7a)
1b2916712SMasahiro Yamada /*
2b2916712SMasahiro Yamada  * Copyright (C) 2012-2015 Panasonic Corporation
3b2916712SMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
4b2916712SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
5b2916712SMasahiro Yamada  *
6b2916712SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
7b2916712SMasahiro Yamada  */
8b2916712SMasahiro Yamada 
9b2916712SMasahiro Yamada #include <common.h>
10b2916712SMasahiro Yamada #include <libfdt.h>
11b2916712SMasahiro Yamada #include <linux/io.h>
12b2916712SMasahiro Yamada 
13b2916712SMasahiro Yamada #include "init.h"
14b2916712SMasahiro Yamada #include "micro-support-card.h"
15b78ffc53SMasahiro Yamada #include "sg-regs.h"
16b2916712SMasahiro Yamada #include "soc-info.h"
17b2916712SMasahiro Yamada 
18b2916712SMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
19b2916712SMasahiro Yamada 
20b2916712SMasahiro Yamada static void uniphier_setup_xirq(void)
21b2916712SMasahiro Yamada {
22b2916712SMasahiro Yamada 	const void *fdt = gd->fdt_blob;
23b2916712SMasahiro Yamada 	int soc_node, aidet_node;
24b2916712SMasahiro Yamada 	const u32 *val;
25b2916712SMasahiro Yamada 	unsigned long aidet_base;
26b2916712SMasahiro Yamada 	u32 tmp;
27b2916712SMasahiro Yamada 
28b2916712SMasahiro Yamada 	soc_node = fdt_path_offset(fdt, "/soc");
29b2916712SMasahiro Yamada 	if (soc_node < 0)
30b2916712SMasahiro Yamada 		return;
31b2916712SMasahiro Yamada 
32b2916712SMasahiro Yamada 	aidet_node = fdt_subnode_offset_namelen(fdt, soc_node, "aidet", 5);
33b2916712SMasahiro Yamada 	if (aidet_node < 0)
34b2916712SMasahiro Yamada 		return;
35b2916712SMasahiro Yamada 
36b2916712SMasahiro Yamada 	val = fdt_getprop(fdt, aidet_node, "reg", NULL);
37b2916712SMasahiro Yamada 	if (!val)
38b2916712SMasahiro Yamada 		return;
39b2916712SMasahiro Yamada 
40b2916712SMasahiro Yamada 	aidet_base = fdt32_to_cpu(*val);
41b2916712SMasahiro Yamada 
42b2916712SMasahiro Yamada 	tmp = readl(aidet_base + 8);	/* AIDET DETCONFR2 */
43b2916712SMasahiro Yamada 	tmp |= 0x00ff0000;		/* Set XIRQ0-7 low active */
44b2916712SMasahiro Yamada 	writel(tmp, aidet_base + 8);
45b2916712SMasahiro Yamada 
46b2916712SMasahiro Yamada 	tmp = readl(0x55000090);	/* IRQCTL */
47b2916712SMasahiro Yamada 	tmp |= 0x000000ff;
48b2916712SMasahiro Yamada 	writel(tmp, 0x55000090);
49b2916712SMasahiro Yamada }
50b2916712SMasahiro Yamada 
515ac9dfbeSMasahiro Yamada static void uniphier_nand_pin_init(bool cs2)
525ac9dfbeSMasahiro Yamada {
535ac9dfbeSMasahiro Yamada #ifdef CONFIG_NAND_DENALI
545ac9dfbeSMasahiro Yamada 	if (uniphier_pin_init(cs2 ? "nand2cs_grp" : "nand_grp"))
555ac9dfbeSMasahiro Yamada 		pr_err("failed to init NAND pins\n");
565ac9dfbeSMasahiro Yamada #endif
575ac9dfbeSMasahiro Yamada }
585ac9dfbeSMasahiro Yamada 
59b2916712SMasahiro Yamada int board_init(void)
60b2916712SMasahiro Yamada {
61682e09ffSMasahiro Yamada 	const struct uniphier_board_data *bd;
62682e09ffSMasahiro Yamada 
63b2916712SMasahiro Yamada 	led_puts("U0");
64b2916712SMasahiro Yamada 
65682e09ffSMasahiro Yamada 	bd = uniphier_get_board_param();
66682e09ffSMasahiro Yamada 	if (!bd)
67682e09ffSMasahiro Yamada 		return -ENODEV;
68682e09ffSMasahiro Yamada 
69b2916712SMasahiro Yamada 	switch (uniphier_get_soc_type()) {
70b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
71b2916712SMasahiro Yamada 	case SOC_UNIPHIER_SLD3:
725ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
73b2916712SMasahiro Yamada 		led_puts("U1");
746a3e4274SMasahiro Yamada 		uniphier_sld3_pll_init();
75b2916712SMasahiro Yamada 		uniphier_ld4_clk_init();
76b2916712SMasahiro Yamada 		break;
77b2916712SMasahiro Yamada #endif
78b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
79b2916712SMasahiro Yamada 	case SOC_UNIPHIER_LD4:
805ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
81b2916712SMasahiro Yamada 		led_puts("U1");
826a3e4274SMasahiro Yamada 		uniphier_ld4_pll_init();
83b2916712SMasahiro Yamada 		uniphier_ld4_clk_init();
84b2916712SMasahiro Yamada 		break;
85b2916712SMasahiro Yamada #endif
86b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
87b2916712SMasahiro Yamada 	case SOC_UNIPHIER_PRO4:
885ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(false);
89b2916712SMasahiro Yamada 		led_puts("U1");
906a3e4274SMasahiro Yamada 		uniphier_pro4_pll_init();
91b2916712SMasahiro Yamada 		uniphier_pro4_clk_init();
92b2916712SMasahiro Yamada 		break;
93b2916712SMasahiro Yamada #endif
94b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
95b2916712SMasahiro Yamada 	case SOC_UNIPHIER_SLD8:
965ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
97b2916712SMasahiro Yamada 		led_puts("U1");
986a3e4274SMasahiro Yamada 		uniphier_ld4_pll_init();
99b2916712SMasahiro Yamada 		uniphier_ld4_clk_init();
100b2916712SMasahiro Yamada 		break;
101b2916712SMasahiro Yamada #endif
102b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
103b2916712SMasahiro Yamada 	case SOC_UNIPHIER_PRO5:
1045ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
105b2916712SMasahiro Yamada 		led_puts("U1");
106b2916712SMasahiro Yamada 		uniphier_pro5_clk_init();
107b2916712SMasahiro Yamada 		break;
108b2916712SMasahiro Yamada #endif
109b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
110b2916712SMasahiro Yamada 	case SOC_UNIPHIER_PXS2:
1115ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
112b2916712SMasahiro Yamada 		led_puts("U1");
113b2916712SMasahiro Yamada 		uniphier_pxs2_clk_init();
114b2916712SMasahiro Yamada 		break;
115b2916712SMasahiro Yamada #endif
116b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
117b2916712SMasahiro Yamada 	case SOC_UNIPHIER_LD6B:
1185ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(true);
119b2916712SMasahiro Yamada 		led_puts("U1");
120b2916712SMasahiro Yamada 		uniphier_pxs2_clk_init();
121b2916712SMasahiro Yamada 		break;
122b2916712SMasahiro Yamada #endif
123b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD11)
124b2916712SMasahiro Yamada 	case SOC_UNIPHIER_LD11:
1255ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(false);
126b78ffc53SMasahiro Yamada 		sg_set_pinsel(149, 14, 8, 4);	/* XIRQ0    -> XIRQ0 */
127b78ffc53SMasahiro Yamada 		sg_set_iectrl(149);
128b78ffc53SMasahiro Yamada 		sg_set_pinsel(153, 14, 8, 4);	/* XIRQ4    -> XIRQ4 */
129b78ffc53SMasahiro Yamada 		sg_set_iectrl(153);
130b2916712SMasahiro Yamada 		led_puts("U1");
131*c72f4d4cSMasahiro Yamada 		uniphier_ld11_pll_init();
132b2916712SMasahiro Yamada 		uniphier_ld11_clk_init();
133b2916712SMasahiro Yamada 		break;
134b2916712SMasahiro Yamada #endif
135b2916712SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD20)
136b2916712SMasahiro Yamada 	case SOC_UNIPHIER_LD20:
1375ac9dfbeSMasahiro Yamada 		uniphier_nand_pin_init(false);
138b78ffc53SMasahiro Yamada 		sg_set_pinsel(149, 14, 8, 4);	/* XIRQ0    -> XIRQ0 */
139b78ffc53SMasahiro Yamada 		sg_set_iectrl(149);
140b78ffc53SMasahiro Yamada 		sg_set_pinsel(153, 14, 8, 4);	/* XIRQ4    -> XIRQ4 */
141b78ffc53SMasahiro Yamada 		sg_set_iectrl(153);
142b2916712SMasahiro Yamada 		led_puts("U1");
143682e09ffSMasahiro Yamada 		uniphier_ld20_pll_init(bd);
144b2916712SMasahiro Yamada 		uniphier_ld20_clk_init();
145b2916712SMasahiro Yamada 		cci500_init(2);
146b2916712SMasahiro Yamada 		break;
147b2916712SMasahiro Yamada #endif
148b2916712SMasahiro Yamada 	default:
149b2916712SMasahiro Yamada 		break;
150b2916712SMasahiro Yamada 	}
151b2916712SMasahiro Yamada 
152b2916712SMasahiro Yamada 	uniphier_setup_xirq();
153b2916712SMasahiro Yamada 
154b2916712SMasahiro Yamada 	led_puts("U2");
155b2916712SMasahiro Yamada 
156b2916712SMasahiro Yamada 	support_card_late_init();
157b2916712SMasahiro Yamada 
158b2916712SMasahiro Yamada 	led_puts("U3");
159b2916712SMasahiro Yamada 
160b2916712SMasahiro Yamada #ifdef CONFIG_ARM64
161b2916712SMasahiro Yamada 	uniphier_smp_kick_all_cpus();
162b2916712SMasahiro Yamada #endif
163b2916712SMasahiro Yamada 
164b2916712SMasahiro Yamada 	led_puts("Uboo");
165b2916712SMasahiro Yamada 
166b2916712SMasahiro Yamada 	return 0;
167b2916712SMasahiro Yamada }
168