blob: 121b78605f9298376f9ada626ff875667bbcec82 [file] [log] [blame]
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +09001/*
Masahiro Yamadae59ed192016-09-14 01:06:08 +09002 * Copyright (C) 2012-2015 Panasonic Corporation
3 * Copyright (C) 2015-2016 Socionext Inc.
4 * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +09005 *
6 * SPDX-License-Identifier: GPL-2.0+
7 */
8
Masahiro Yamada24802562016-06-29 19:39:03 +09009#include <common.h>
10#include <libfdt.h>
11#include <linux/io.h>
12
Masahiro Yamadaefdf3402016-01-09 01:51:13 +090013#include "init.h"
14#include "micro-support-card.h"
Masahiro Yamada011fd5b2016-09-17 03:33:07 +090015#include "sg-regs.h"
Masahiro Yamadaefdf3402016-01-09 01:51:13 +090016#include "soc-info.h"
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +090017
Masahiro Yamada24802562016-06-29 19:39:03 +090018DECLARE_GLOBAL_DATA_PTR;
19
Masahiro Yamada266111c2017-01-15 14:59:08 +090020#ifdef CONFIG_ARCH_UNIPHIER_LD20
21static void uniphier_ld20_misc_init(void)
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +090022{
Masahiro Yamada266111c2017-01-15 14:59:08 +090023 /* ES1 errata: increase VDD09 supply to suppress VBO noise */
24 if (uniphier_get_soc_revision() == 1) {
25 writel(0x00000003, 0x6184e004);
26 writel(0x00000100, 0x6184e040);
27 writel(0x0000b500, 0x6184e024);
28 writel(0x00000001, 0x6184e000);
29 }
Masahiro Yamada266111c2017-01-15 14:59:08 +090030}
31#endif
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +090032
Masahiro Yamada266111c2017-01-15 14:59:08 +090033struct uniphier_initdata {
Masahiro Yamada31649052017-01-21 18:05:26 +090034 unsigned int soc_id;
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090035 void (*sbc_init)(void);
Masahiro Yamada266111c2017-01-15 14:59:08 +090036 void (*pll_init)(void);
37 void (*clk_init)(void);
38 void (*misc_init)(void);
39};
40
Masahiro Yamadaf17e5982017-01-21 18:05:21 +090041static const struct uniphier_initdata uniphier_initdata[] = {
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090042#if defined(CONFIG_ARCH_UNIPHIER_LD4)
Masahiro Yamada266111c2017-01-15 14:59:08 +090043 {
Masahiro Yamada31649052017-01-21 18:05:26 +090044 .soc_id = UNIPHIER_LD4_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090045 .sbc_init = uniphier_ld4_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090046 .pll_init = uniphier_ld4_pll_init,
47 .clk_init = uniphier_ld4_clk_init,
48 },
Masahiro Yamada75f16f82015-09-22 00:27:39 +090049#endif
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090050#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
Masahiro Yamada266111c2017-01-15 14:59:08 +090051 {
Masahiro Yamada31649052017-01-21 18:05:26 +090052 .soc_id = UNIPHIER_PRO4_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090053 .sbc_init = uniphier_sbc_init_savepin,
Masahiro Yamada266111c2017-01-15 14:59:08 +090054 .pll_init = uniphier_pro4_pll_init,
55 .clk_init = uniphier_pro4_clk_init,
56 },
Masahiro Yamada75f16f82015-09-22 00:27:39 +090057#endif
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090058#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
Masahiro Yamada266111c2017-01-15 14:59:08 +090059 {
Masahiro Yamada31649052017-01-21 18:05:26 +090060 .soc_id = UNIPHIER_SLD8_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090061 .sbc_init = uniphier_ld4_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090062 .pll_init = uniphier_ld4_pll_init,
63 .clk_init = uniphier_ld4_clk_init,
64 },
Masahiro Yamada75f16f82015-09-22 00:27:39 +090065#endif
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090066#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
Masahiro Yamada266111c2017-01-15 14:59:08 +090067 {
Masahiro Yamada31649052017-01-21 18:05:26 +090068 .soc_id = UNIPHIER_PRO5_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090069 .sbc_init = uniphier_sbc_init_savepin,
Masahiro Yamada266111c2017-01-15 14:59:08 +090070 .clk_init = uniphier_pro5_clk_init,
71 },
Masahiro Yamadad5167d52015-09-22 00:27:40 +090072#endif
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090073#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
Masahiro Yamada266111c2017-01-15 14:59:08 +090074 {
Masahiro Yamada31649052017-01-21 18:05:26 +090075 .soc_id = UNIPHIER_PXS2_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090076 .sbc_init = uniphier_pxs2_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090077 .clk_init = uniphier_pxs2_clk_init,
78 },
Masahiro Yamada1fe65d32015-09-22 00:27:41 +090079#endif
Masahiro Yamada53c59ae2016-03-18 16:41:43 +090080#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
Masahiro Yamada266111c2017-01-15 14:59:08 +090081 {
Masahiro Yamada31649052017-01-21 18:05:26 +090082 .soc_id = UNIPHIER_LD6B_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090083 .sbc_init = uniphier_pxs2_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090084 .clk_init = uniphier_pxs2_clk_init,
85 },
Masahiro Yamada1fe65d32015-09-22 00:27:41 +090086#endif
Masahiro Yamada8bbbcbd2016-05-24 21:14:01 +090087#if defined(CONFIG_ARCH_UNIPHIER_LD11)
Masahiro Yamada266111c2017-01-15 14:59:08 +090088 {
Masahiro Yamada31649052017-01-21 18:05:26 +090089 .soc_id = UNIPHIER_LD11_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090090 .sbc_init = uniphier_ld11_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090091 .pll_init = uniphier_ld11_pll_init,
92 .clk_init = uniphier_ld11_clk_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090093 },
Masahiro Yamada8bbbcbd2016-05-24 21:14:01 +090094#endif
Masahiro Yamada063eb1e2016-04-21 14:43:18 +090095#if defined(CONFIG_ARCH_UNIPHIER_LD20)
Masahiro Yamada266111c2017-01-15 14:59:08 +090096 {
Masahiro Yamada31649052017-01-21 18:05:26 +090097 .soc_id = UNIPHIER_LD20_ID,
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +090098 .sbc_init = uniphier_ld11_sbc_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +090099 .pll_init = uniphier_ld20_pll_init,
Masahiro Yamadab3b1bb72017-02-17 16:17:22 +0900100 .clk_init = uniphier_ld20_clk_init,
Masahiro Yamada266111c2017-01-15 14:59:08 +0900101 .misc_init = uniphier_ld20_misc_init,
102 },
Masahiro Yamada063eb1e2016-04-21 14:43:18 +0900103#endif
Masahiro Yamada133b1262017-01-21 18:05:31 +0900104#if defined(CONFIG_ARCH_UNIPHIER_PXS3)
105 {
106 .soc_id = UNIPHIER_PXS3_ID,
Masahiro Yamada133b1262017-01-21 18:05:31 +0900107 .sbc_init = uniphier_pxs2_sbc_init,
108 .pll_init = uniphier_pxs3_pll_init,
Masahiro Yamada8e0a4502017-05-15 14:26:33 +0900109 .clk_init = uniphier_pxs3_clk_init,
Masahiro Yamada133b1262017-01-21 18:05:31 +0900110 },
111#endif
Masahiro Yamada266111c2017-01-15 14:59:08 +0900112};
Masahiro Yamada1b818982017-01-21 18:05:27 +0900113UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_initdata, uniphier_initdata)
Masahiro Yamada266111c2017-01-15 14:59:08 +0900114
115int board_init(void)
116{
Masahiro Yamadaf17e5982017-01-21 18:05:21 +0900117 const struct uniphier_initdata *initdata;
Masahiro Yamada266111c2017-01-15 14:59:08 +0900118
119 led_puts("U0");
120
Masahiro Yamada1b818982017-01-21 18:05:27 +0900121 initdata = uniphier_get_initdata();
Masahiro Yamada266111c2017-01-15 14:59:08 +0900122 if (!initdata) {
Masahiro Yamada1b818982017-01-21 18:05:27 +0900123 pr_err("unsupported SoC\n");
Masahiro Yamada266111c2017-01-15 14:59:08 +0900124 return -EINVAL;
125 }
126
Masahiro Yamada0cc46ad2017-01-15 14:59:10 +0900127 initdata->sbc_init();
128
129 support_card_init();
130
131 led_puts("U0");
132
Masahiro Yamada266111c2017-01-15 14:59:08 +0900133 if (initdata->pll_init)
134 initdata->pll_init();
Masahiro Yamada24802562016-06-29 19:39:03 +0900135
Masahiro Yamada285ceed2017-08-26 17:58:03 +0900136 led_puts("U1");
Masahiro Yamadac04368f2015-02-27 02:26:51 +0900137
Masahiro Yamada266111c2017-01-15 14:59:08 +0900138 if (initdata->clk_init)
139 initdata->clk_init();
Masahiro Yamadae59ed192016-09-14 01:06:08 +0900140
Masahiro Yamada285ceed2017-08-26 17:58:03 +0900141 led_puts("U2");
Masahiro Yamadae59ed192016-09-14 01:06:08 +0900142
Masahiro Yamada266111c2017-01-15 14:59:08 +0900143 if (initdata->misc_init)
144 initdata->misc_init();
145
Masahiro Yamada285ceed2017-08-26 17:58:03 +0900146 led_puts("U3");
Masahiro Yamada266111c2017-01-15 14:59:08 +0900147
Masahiro Yamada266111c2017-01-15 14:59:08 +0900148 support_card_late_init();
149
Masahiro Yamadae59ed192016-09-14 01:06:08 +0900150 led_puts("Uboo");
151
Masahiro Yamada1f3d9c72015-02-05 14:42:54 +0900152 return 0;
153}