1bfc93fb4SNobuhiro Iwamatsu /*
2bfc93fb4SNobuhiro Iwamatsu * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
3bfc93fb4SNobuhiro Iwamatsu * Copyright (C) 2012 Renesas Solutions Corp.
4bfc93fb4SNobuhiro Iwamatsu *
51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+
6bfc93fb4SNobuhiro Iwamatsu */
7bfc93fb4SNobuhiro Iwamatsu
8bfc93fb4SNobuhiro Iwamatsu #include <common.h>
9bfc93fb4SNobuhiro Iwamatsu #include <asm/io.h>
10bfc93fb4SNobuhiro Iwamatsu #include <asm/processor.h>
11bfc93fb4SNobuhiro Iwamatsu #include <netdev.h>
12bfc93fb4SNobuhiro Iwamatsu #include <i2c.h>
13bfc93fb4SNobuhiro Iwamatsu
14bfc93fb4SNobuhiro Iwamatsu #define MODEMR (0xFFCC0020)
15bfc93fb4SNobuhiro Iwamatsu #define MODEMR_MASK (0x6)
16bfc93fb4SNobuhiro Iwamatsu #define MODEMR_533MHZ (0x2)
17bfc93fb4SNobuhiro Iwamatsu
checkboard(void)18bfc93fb4SNobuhiro Iwamatsu int checkboard(void)
19bfc93fb4SNobuhiro Iwamatsu {
20bfc93fb4SNobuhiro Iwamatsu u32 r = readl(MODEMR);
21bfc93fb4SNobuhiro Iwamatsu if ((r & MODEMR_MASK) & MODEMR_533MHZ)
22bfc93fb4SNobuhiro Iwamatsu puts("CPU Clock: 533MHz\n");
23bfc93fb4SNobuhiro Iwamatsu else
24bfc93fb4SNobuhiro Iwamatsu puts("CPU Clock: 400MHz\n");
25bfc93fb4SNobuhiro Iwamatsu
26bfc93fb4SNobuhiro Iwamatsu puts("BOARD: Alpha Project. AP-SH4A-4A\n");
27bfc93fb4SNobuhiro Iwamatsu return 0;
28bfc93fb4SNobuhiro Iwamatsu }
29bfc93fb4SNobuhiro Iwamatsu
30bfc93fb4SNobuhiro Iwamatsu #define MSTPSR1 (0xFFC80044)
31bfc93fb4SNobuhiro Iwamatsu #define MSTPCR1 (0xFFC80034)
32bfc93fb4SNobuhiro Iwamatsu #define MSTPSR1_GETHER (1 << 14)
33bfc93fb4SNobuhiro Iwamatsu
34bfc93fb4SNobuhiro Iwamatsu /* IPSR3 */
35bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD0 (0x4 << 3)
36bfc93fb4SNobuhiro Iwamatsu #define ET0_GTX_CLK_A (0x4 << 6)
37bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD1_A (0x4 << 9)
38bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD2_A (0x4 << 12)
39bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD3_A (0x4 << 15)
4099fc4fd1SNobuhiro Iwamatsu #define ET0_ETXD4 (0x3 << 18)
41bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD5_A (0x5 << 21)
42bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD6_A (0x5 << 24)
43bfc93fb4SNobuhiro Iwamatsu #define ET0_ETXD7 (0x4 << 27)
44bfc93fb4SNobuhiro Iwamatsu #define IPSR3_ETH_ENABLE \
45bfc93fb4SNobuhiro Iwamatsu (ET0_ETXD0 | ET0_GTX_CLK_A | ET0_ETXD1_A | ET0_ETXD2_A | \
46bfc93fb4SNobuhiro Iwamatsu ET0_ETXD3_A | ET0_ETXD4 | ET0_ETXD5_A | ET0_ETXD6_A | ET0_ETXD7)
47bfc93fb4SNobuhiro Iwamatsu
48bfc93fb4SNobuhiro Iwamatsu /* IPSR4 */
49bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD7 (0x4)
50bfc93fb4SNobuhiro Iwamatsu #define ET0_RX_DV (0x4 << 3)
51bfc93fb4SNobuhiro Iwamatsu #define ET0_RX_ER (0x4 << 6)
52bfc93fb4SNobuhiro Iwamatsu #define ET0_CRS (0x4 << 9)
53bfc93fb4SNobuhiro Iwamatsu #define ET0_COL (0x4 << 12)
54bfc93fb4SNobuhiro Iwamatsu #define ET0_MDC (0x4 << 15)
55bfc93fb4SNobuhiro Iwamatsu #define ET0_MDIO_A (0x3 << 18)
56bfc93fb4SNobuhiro Iwamatsu #define ET0_LINK_A (0x3 << 20)
57bfc93fb4SNobuhiro Iwamatsu #define ET0_PHY_INT_A (0x3 << 24)
58bfc93fb4SNobuhiro Iwamatsu
59bfc93fb4SNobuhiro Iwamatsu #define IPSR4_ETH_ENABLE \
60bfc93fb4SNobuhiro Iwamatsu (ET0_ERXD7 | ET0_RX_DV | ET0_RX_ER | ET0_CRS | ET0_COL | \
61bfc93fb4SNobuhiro Iwamatsu ET0_MDC | ET0_MDIO_A | ET0_LINK_A | ET0_PHY_INT_A)
62bfc93fb4SNobuhiro Iwamatsu
63bfc93fb4SNobuhiro Iwamatsu /* IPSR8 */
64bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD0 (0x4 << 20)
65bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD1 (0x4 << 23)
66bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD2_A (0x3 << 26)
67bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD3_A (0x3 << 28)
68bfc93fb4SNobuhiro Iwamatsu #define IPSR8_ETH_ENABLE \
69bfc93fb4SNobuhiro Iwamatsu (ET0_ERXD0 | ET0_ERXD1 | ET0_ERXD2_A | ET0_ERXD3_A)
70bfc93fb4SNobuhiro Iwamatsu
71bfc93fb4SNobuhiro Iwamatsu /* IPSR10 */
72bfc93fb4SNobuhiro Iwamatsu #define RX4_D (0x1 << 22)
73bfc93fb4SNobuhiro Iwamatsu #define TX4_D (0x1 << 23)
74bfc93fb4SNobuhiro Iwamatsu #define IPSR10_SCIF_ENABLE (RX4_D | TX4_D)
75bfc93fb4SNobuhiro Iwamatsu
76bfc93fb4SNobuhiro Iwamatsu /* IPSR11 */
77bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD4 (0x4 << 4)
78bfc93fb4SNobuhiro Iwamatsu #define ET0_ERXD5 (0x4 << 7)
7997e305cfSNobuhiro Iwamatsu #define ET0_ERXD6 (0x3 << 10)
80bfc93fb4SNobuhiro Iwamatsu #define ET0_TX_EN (0x2 << 19)
81bfc93fb4SNobuhiro Iwamatsu #define ET0_TX_ER (0x2 << 21)
82bfc93fb4SNobuhiro Iwamatsu #define ET0_TX_CLK_A (0x4 << 23)
83bfc93fb4SNobuhiro Iwamatsu #define ET0_RX_CLK_A (0x3 << 26)
84bfc93fb4SNobuhiro Iwamatsu #define IPSR11_ETH_ENABLE \
85bfc93fb4SNobuhiro Iwamatsu (ET0_ERXD4 | ET0_ERXD5 | ET0_ERXD6 | ET0_TX_EN | ET0_TX_ER | \
86bfc93fb4SNobuhiro Iwamatsu ET0_TX_CLK_A | ET0_RX_CLK_A)
87bfc93fb4SNobuhiro Iwamatsu
8897e305cfSNobuhiro Iwamatsu #define GPSR1_INIT (0xFFFF7FFF)
89bfc93fb4SNobuhiro Iwamatsu #define GPSR2_INIT (0x4005FEFF)
90bfc93fb4SNobuhiro Iwamatsu #define GPSR3_INIT (0x2EFFFFFF)
91bfc93fb4SNobuhiro Iwamatsu #define GPSR4_INIT (0xC7000000)
92bfc93fb4SNobuhiro Iwamatsu
board_init(void)93bfc93fb4SNobuhiro Iwamatsu int board_init(void)
94bfc93fb4SNobuhiro Iwamatsu {
95bfc93fb4SNobuhiro Iwamatsu u32 data;
96bfc93fb4SNobuhiro Iwamatsu
97bfc93fb4SNobuhiro Iwamatsu /* Set IPSR register */
98bfc93fb4SNobuhiro Iwamatsu data = readl(IPSR3);
99bfc93fb4SNobuhiro Iwamatsu data |= IPSR3_ETH_ENABLE;
100bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
101bfc93fb4SNobuhiro Iwamatsu writel(data, IPSR3);
102bfc93fb4SNobuhiro Iwamatsu
103bfc93fb4SNobuhiro Iwamatsu data = readl(IPSR4);
104bfc93fb4SNobuhiro Iwamatsu data |= IPSR4_ETH_ENABLE;
105bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
106bfc93fb4SNobuhiro Iwamatsu writel(data, IPSR4);
107bfc93fb4SNobuhiro Iwamatsu
108bfc93fb4SNobuhiro Iwamatsu data = readl(IPSR8);
109bfc93fb4SNobuhiro Iwamatsu data |= IPSR8_ETH_ENABLE;
110bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
111bfc93fb4SNobuhiro Iwamatsu writel(data, IPSR8);
112bfc93fb4SNobuhiro Iwamatsu
113bfc93fb4SNobuhiro Iwamatsu data = readl(IPSR10);
114bfc93fb4SNobuhiro Iwamatsu data |= IPSR10_SCIF_ENABLE;
115bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
116bfc93fb4SNobuhiro Iwamatsu writel(data, IPSR10);
117bfc93fb4SNobuhiro Iwamatsu
118bfc93fb4SNobuhiro Iwamatsu data = readl(IPSR11);
119bfc93fb4SNobuhiro Iwamatsu data |= IPSR11_ETH_ENABLE;
120bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
121bfc93fb4SNobuhiro Iwamatsu writel(data, IPSR11);
122bfc93fb4SNobuhiro Iwamatsu
123bfc93fb4SNobuhiro Iwamatsu /* GPIO select */
124bfc93fb4SNobuhiro Iwamatsu data = GPSR1_INIT;
125bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
126bfc93fb4SNobuhiro Iwamatsu writel(data, GPSR1);
127bfc93fb4SNobuhiro Iwamatsu
128bfc93fb4SNobuhiro Iwamatsu data = GPSR2_INIT;
129bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
130bfc93fb4SNobuhiro Iwamatsu writel(data, GPSR2);
131bfc93fb4SNobuhiro Iwamatsu
132bfc93fb4SNobuhiro Iwamatsu data = GPSR3_INIT;
133bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
134bfc93fb4SNobuhiro Iwamatsu writel(data, GPSR3);
135bfc93fb4SNobuhiro Iwamatsu
136bfc93fb4SNobuhiro Iwamatsu data = GPSR4_INIT;
137bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
138bfc93fb4SNobuhiro Iwamatsu writel(data, GPSR4);
139bfc93fb4SNobuhiro Iwamatsu
140bfc93fb4SNobuhiro Iwamatsu data = 0x0;
141bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
142bfc93fb4SNobuhiro Iwamatsu writel(data, GPSR5);
143bfc93fb4SNobuhiro Iwamatsu
144bfc93fb4SNobuhiro Iwamatsu /* mode select */
145bfc93fb4SNobuhiro Iwamatsu data = MODESEL2_INIT;
146bfc93fb4SNobuhiro Iwamatsu writel(~data, PMMR);
147bfc93fb4SNobuhiro Iwamatsu writel(data, MODESEL2);
148bfc93fb4SNobuhiro Iwamatsu
149bfc93fb4SNobuhiro Iwamatsu #if defined(CONFIG_SH_ETHER)
150bfc93fb4SNobuhiro Iwamatsu u32 r = readl(MSTPSR1);
151bfc93fb4SNobuhiro Iwamatsu if (r & MSTPSR1_GETHER)
152bfc93fb4SNobuhiro Iwamatsu writel((r & ~MSTPSR1_GETHER), MSTPCR1);
153bfc93fb4SNobuhiro Iwamatsu #endif
154bfc93fb4SNobuhiro Iwamatsu return 0;
155bfc93fb4SNobuhiro Iwamatsu }
156bfc93fb4SNobuhiro Iwamatsu
board_late_init(void)157bfc93fb4SNobuhiro Iwamatsu int board_late_init(void)
158bfc93fb4SNobuhiro Iwamatsu {
159*eb5ba3aeSSimon Glass printf("Cannot use I2C to get MAC address\n");
160bfc93fb4SNobuhiro Iwamatsu
161bfc93fb4SNobuhiro Iwamatsu return 0;
162bfc93fb4SNobuhiro Iwamatsu }
163