1931a1d2aSAlbert ARIBAUD \(3ADEV\) /*
2931a1d2aSAlbert ARIBAUD \(3ADEV\) * Copyright 2013 Freescale Semiconductor, Inc.
3931a1d2aSAlbert ARIBAUD \(3ADEV\) *
4931a1d2aSAlbert ARIBAUD \(3ADEV\) * SPDX-License-Identifier: GPL-2.0+
5931a1d2aSAlbert ARIBAUD \(3ADEV\) */
6931a1d2aSAlbert ARIBAUD \(3ADEV\)
7931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <common.h>
8931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/io.h>
9931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/arch/imx-regs.h>
10931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/arch/iomux-vf610.h>
11931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/arch/ddrmc-vf610.h>
12931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/arch/crm_regs.h>
13931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <asm/arch/clock.h>
14931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <mmc.h>
15931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <fsl_esdhc.h>
16931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <miiphy.h>
17931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <netdev.h>
18931a1d2aSAlbert ARIBAUD \(3ADEV\) #include <i2c.h>
19931a1d2aSAlbert ARIBAUD \(3ADEV\)
20931a1d2aSAlbert ARIBAUD \(3ADEV\) DECLARE_GLOBAL_DATA_PTR;
21931a1d2aSAlbert ARIBAUD \(3ADEV\)
22931a1d2aSAlbert ARIBAUD \(3ADEV\) /*
23931a1d2aSAlbert ARIBAUD \(3ADEV\) * Default DDR pad settings in arch/arm/include/asm/arch-vf610/iomux-vf610.h
24931a1d2aSAlbert ARIBAUD \(3ADEV\) * do not match our settings. Let us (re)define our own settings here.
25931a1d2aSAlbert ARIBAUD \(3ADEV\) */
26931a1d2aSAlbert ARIBAUD \(3ADEV\)
27931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_VF610_DDR_PAD_CTRL PAD_CTL_DSE_20ohm
28931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_VF610_DDR_PAD_CTRL_1 (PAD_CTL_DSE_20ohm | \
29931a1d2aSAlbert ARIBAUD \(3ADEV\) PAD_CTL_INPUT_DIFFERENTIAL)
30931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_VF610_DDR_RESET_PAD_CTL (PAD_CTL_DSE_150ohm | \
31931a1d2aSAlbert ARIBAUD \(3ADEV\) PAD_CTL_PUS_100K_UP | \
32931a1d2aSAlbert ARIBAUD \(3ADEV\) PAD_CTL_INPUT_DIFFERENTIAL)
33931a1d2aSAlbert ARIBAUD \(3ADEV\)
34931a1d2aSAlbert ARIBAUD \(3ADEV\) enum {
35931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_RESETB = IOMUX_PAD(0x021c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_RESET_PAD_CTL),
36931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A15__DDR_A_15 = IOMUX_PAD(0x0220, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
37931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A14__DDR_A_14 = IOMUX_PAD(0x0224, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
38931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A13__DDR_A_13 = IOMUX_PAD(0x0228, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
39931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A12__DDR_A_12 = IOMUX_PAD(0x022c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
40931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A11__DDR_A_11 = IOMUX_PAD(0x0230, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
41931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A10__DDR_A_10 = IOMUX_PAD(0x0234, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
42931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A9__DDR_A_9 = IOMUX_PAD(0x0238, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
43931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A8__DDR_A_8 = IOMUX_PAD(0x023c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
44931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A7__DDR_A_7 = IOMUX_PAD(0x0240, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
45931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A6__DDR_A_6 = IOMUX_PAD(0x0244, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
46931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A5__DDR_A_5 = IOMUX_PAD(0x0248, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
47931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A4__DDR_A_4 = IOMUX_PAD(0x024c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
48931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A3__DDR_A_3 = IOMUX_PAD(0x0250, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
49931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A2__DDR_A_2 = IOMUX_PAD(0x0254, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
50931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A1__DDR_A_1 = IOMUX_PAD(0x0258, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
51931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A0__DDR_A_0 = IOMUX_PAD(0x025c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
52931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA2__DDR_BA_2 = IOMUX_PAD(0x0260, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
53931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA1__DDR_BA_1 = IOMUX_PAD(0x0264, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
54931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA0__DDR_BA_0 = IOMUX_PAD(0x0268, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
55931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CAS__DDR_CAS_B = IOMUX_PAD(0x026c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
56931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CKE__DDR_CKE_0 = IOMUX_PAD(0x0270, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
57931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CLK__DDR_CLK_0 = IOMUX_PAD(0x0274, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL_1),
58931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CS__DDR_CS_B_0 = IOMUX_PAD(0x0278, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
59931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D15__DDR_D_15 = IOMUX_PAD(0x027c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
60931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D14__DDR_D_14 = IOMUX_PAD(0x0280, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
61931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D13__DDR_D_13 = IOMUX_PAD(0x0284, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
62931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D12__DDR_D_12 = IOMUX_PAD(0x0288, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
63931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D11__DDR_D_11 = IOMUX_PAD(0x028c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
64931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D10__DDR_D_10 = IOMUX_PAD(0x0290, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
65931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D9__DDR_D_9 = IOMUX_PAD(0x0294, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
66931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D8__DDR_D_8 = IOMUX_PAD(0x0298, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
67931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D7__DDR_D_7 = IOMUX_PAD(0x029c, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
68931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D6__DDR_D_6 = IOMUX_PAD(0x02a0, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
69931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D5__DDR_D_5 = IOMUX_PAD(0x02a4, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
70931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D4__DDR_D_4 = IOMUX_PAD(0x02a8, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
71931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D3__DDR_D_3 = IOMUX_PAD(0x02ac, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
72931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D2__DDR_D_2 = IOMUX_PAD(0x02b0, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
73931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D1__DDR_D_1 = IOMUX_PAD(0x02b4, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
74931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D0__DDR_D_0 = IOMUX_PAD(0x02b8, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
75931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQM1__DDR_DQM_1 = IOMUX_PAD(0x02bc, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
76931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQM0__DDR_DQM_0 = IOMUX_PAD(0x02c0, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
77931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQS1__DDR_DQS_1 = IOMUX_PAD(0x02c4, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL_1),
78931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQS0__DDR_DQS_0 = IOMUX_PAD(0x02c8, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL_1),
79931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_RAS__DDR_RAS_B = IOMUX_PAD(0x02cc, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
80931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_WE__DDR_WE_B = IOMUX_PAD(0x02d0, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
81931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_ODT1__DDR_ODT_0 = IOMUX_PAD(0x02d4, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
82931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_ODT0__DDR_ODT_1 = IOMUX_PAD(0x02d8, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
83931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DDRBYTE1__DDR_DDRBYTE1 = IOMUX_PAD(0x02dc, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
84931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DDRBYTE0__DDR_DDRBYTE0 = IOMUX_PAD(0x02e0, __NA_, 0, __NA_, 0, PCM052_VF610_DDR_PAD_CTRL),
85931a1d2aSAlbert ARIBAUD \(3ADEV\) };
86931a1d2aSAlbert ARIBAUD \(3ADEV\)
87931a1d2aSAlbert ARIBAUD \(3ADEV\) static struct ddrmc_cr_setting pcm052_cr_settings[] = {
88931a1d2aSAlbert ARIBAUD \(3ADEV\) /* not in the datasheets, but in the original code */
89931a1d2aSAlbert ARIBAUD \(3ADEV\) { 0x00002000, 105 },
90931a1d2aSAlbert ARIBAUD \(3ADEV\) { 0x00000020, 110 },
91931a1d2aSAlbert ARIBAUD \(3ADEV\) /* AXI */
92931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR117_AXI0_W_PRI(1) | DDRMC_CR117_AXI0_R_PRI(1), 117 },
93931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR118_AXI1_W_PRI(1) | DDRMC_CR118_AXI1_R_PRI(1), 118 },
94931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR120_AXI0_PRI1_RPRI(2) |
95931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR120_AXI0_PRI0_RPRI(2), 120 },
96931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR121_AXI0_PRI3_RPRI(2) |
97931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR121_AXI0_PRI2_RPRI(2), 121 },
98931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR122_AXI1_PRI1_RPRI(1) | DDRMC_CR122_AXI1_PRI0_RPRI(1) |
99931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR122_AXI0_PRIRLX(100), 122 },
100931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR123_AXI1_P_ODR_EN | DDRMC_CR123_AXI1_PRI3_RPRI(1) |
101931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR123_AXI1_PRI2_RPRI(1), 123 },
102931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR124_AXI1_PRIRLX(100), 124 },
103931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR126_PHY_RDLAT(11), 126 },
104931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR132_WRLAT_ADJ(5) | DDRMC_CR132_RDLAT_ADJ(6), 132 },
105931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR137_PHYCTL_DL(2), 137 },
106931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR139_PHY_WRLV_RESPLAT(4) | DDRMC_CR139_PHY_WRLV_LOAD(7) |
107931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR139_PHY_WRLV_DLL(3) |
108931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR139_PHY_WRLV_EN(3), 139 },
109931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR154_PAD_ZQ_EARLY_CMP_EN_TIMER(13) |
110931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR154_PAD_ZQ_MODE(1) |
111931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR154_DDR_SEL_PAD_CONTR(3) |
112931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR154_PAD_ZQ_HW_FOR(0), 154 },
113931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR155_PAD_ODT_BYTE1(5) | DDRMC_CR155_PAD_ODT_BYTE0(5), 155 },
114931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR158_TWR(6), 158 },
115931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_CR161_ODT_EN(0) | DDRMC_CR161_TODTH_RD(0) |
116931a1d2aSAlbert ARIBAUD \(3ADEV\) DDRMC_CR161_TODTH_WR(6), 161 },
117931a1d2aSAlbert ARIBAUD \(3ADEV\) /* end marker */
118931a1d2aSAlbert ARIBAUD \(3ADEV\) { 0, -1 }
119931a1d2aSAlbert ARIBAUD \(3ADEV\) };
120931a1d2aSAlbert ARIBAUD \(3ADEV\)
121931a1d2aSAlbert ARIBAUD \(3ADEV\) /* PHY settings -- most of them differ from default in imx-regs.h */
122931a1d2aSAlbert ARIBAUD \(3ADEV\)
123931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_DDRMC_PHY_DQ_TIMING 0x00002213
124931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_DDRMC_PHY_CTRL 0x00290000
125931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_DDRMC_PHY_SLAVE_CTRL 0x00002c00
126931a1d2aSAlbert ARIBAUD \(3ADEV\) #define PCM052_DDRMC_PHY_PROC_PAD_ODT 0x00010020
127931a1d2aSAlbert ARIBAUD \(3ADEV\)
128931a1d2aSAlbert ARIBAUD \(3ADEV\) static struct ddrmc_phy_setting pcm052_phy_settings[] = {
129931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_DQ_TIMING, 0 },
130931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_DQ_TIMING, 16 },
131931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_DQ_TIMING, 32 },
132931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_DQ_TIMING, 48 },
133931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_DQS_TIMING, 1 },
134931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_DQS_TIMING, 17 },
135931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_DQS_TIMING, 33 },
136931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_DQS_TIMING, 49 },
137931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_CTRL, 2 },
138931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_CTRL, 18 },
139931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_CTRL, 34 },
140931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_MASTER_CTRL, 3 },
141931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_MASTER_CTRL, 19 },
142931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY_MASTER_CTRL, 35 },
143931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_SLAVE_CTRL, 4 },
144931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_SLAVE_CTRL, 20 },
145931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_SLAVE_CTRL, 36 },
146931a1d2aSAlbert ARIBAUD \(3ADEV\) { DDRMC_PHY50_DDR3_MODE | DDRMC_PHY50_EN_SW_HALF_CYCLE, 50 },
147931a1d2aSAlbert ARIBAUD \(3ADEV\) { PCM052_DDRMC_PHY_PROC_PAD_ODT, 52 },
148931a1d2aSAlbert ARIBAUD \(3ADEV\)
149931a1d2aSAlbert ARIBAUD \(3ADEV\) /* end marker */
150931a1d2aSAlbert ARIBAUD \(3ADEV\) { 0, -1 }
151931a1d2aSAlbert ARIBAUD \(3ADEV\) };
152931a1d2aSAlbert ARIBAUD \(3ADEV\)
dram_init(void)153931a1d2aSAlbert ARIBAUD \(3ADEV\) int dram_init(void)
154931a1d2aSAlbert ARIBAUD \(3ADEV\) {
155931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t pcm052_pads[] = {
156931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A15__DDR_A_15,
157931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A14__DDR_A_14,
158931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A13__DDR_A_13,
159931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A12__DDR_A_12,
160931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A11__DDR_A_11,
161931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A10__DDR_A_10,
162931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A9__DDR_A_9,
163931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A8__DDR_A_8,
164931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A7__DDR_A_7,
165931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A6__DDR_A_6,
166931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A5__DDR_A_5,
167931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A4__DDR_A_4,
168931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A3__DDR_A_3,
169931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A2__DDR_A_2,
170931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A1__DDR_A_1,
171931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_A0__DDR_A_0,
172931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA2__DDR_BA_2,
173931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA1__DDR_BA_1,
174931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_BA0__DDR_BA_0,
175931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CAS__DDR_CAS_B,
176931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CKE__DDR_CKE_0,
177931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CLK__DDR_CLK_0,
178931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_CS__DDR_CS_B_0,
179931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D15__DDR_D_15,
180931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D14__DDR_D_14,
181931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D13__DDR_D_13,
182931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D12__DDR_D_12,
183931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D11__DDR_D_11,
184931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D10__DDR_D_10,
185931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D9__DDR_D_9,
186931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D8__DDR_D_8,
187931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D7__DDR_D_7,
188931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D6__DDR_D_6,
189931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D5__DDR_D_5,
190931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D4__DDR_D_4,
191931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D3__DDR_D_3,
192931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D2__DDR_D_2,
193931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D1__DDR_D_1,
194931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_D0__DDR_D_0,
195931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQM1__DDR_DQM_1,
196931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQM0__DDR_DQM_0,
197931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQS1__DDR_DQS_1,
198931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DQS0__DDR_DQS_0,
199931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_RAS__DDR_RAS_B,
200931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_WE__DDR_WE_B,
201931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_ODT1__DDR_ODT_0,
202931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_ODT0__DDR_ODT_1,
203931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DDRBYTE1__DDR_DDRBYTE1,
204931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_DDRBYTE0__DDR_DDRBYTE0,
205931a1d2aSAlbert ARIBAUD \(3ADEV\) PCM052_VF610_PAD_DDR_RESETB,
206931a1d2aSAlbert ARIBAUD \(3ADEV\) };
207931a1d2aSAlbert ARIBAUD \(3ADEV\)
20827192d16SAlbert ARIBAUD \(3ADEV\) #if defined(CONFIG_TARGET_PCM052)
20927192d16SAlbert ARIBAUD \(3ADEV\)
21027192d16SAlbert ARIBAUD \(3ADEV\) static const struct ddr3_jedec_timings pcm052_ddr_timings = {
21127192d16SAlbert ARIBAUD \(3ADEV\) .tinit = 5,
21227192d16SAlbert ARIBAUD \(3ADEV\) .trst_pwron = 80000,
21327192d16SAlbert ARIBAUD \(3ADEV\) .cke_inactive = 200000,
21427192d16SAlbert ARIBAUD \(3ADEV\) .wrlat = 5,
21527192d16SAlbert ARIBAUD \(3ADEV\) .caslat_lin = 12,
21627192d16SAlbert ARIBAUD \(3ADEV\) .trc = 6,
21727192d16SAlbert ARIBAUD \(3ADEV\) .trrd = 4,
21827192d16SAlbert ARIBAUD \(3ADEV\) .tccd = 4,
21927192d16SAlbert ARIBAUD \(3ADEV\) .tbst_int_interval = 4,
22027192d16SAlbert ARIBAUD \(3ADEV\) .tfaw = 18,
22127192d16SAlbert ARIBAUD \(3ADEV\) .trp = 6,
22227192d16SAlbert ARIBAUD \(3ADEV\) .twtr = 4,
22327192d16SAlbert ARIBAUD \(3ADEV\) .tras_min = 15,
22427192d16SAlbert ARIBAUD \(3ADEV\) .tmrd = 4,
22527192d16SAlbert ARIBAUD \(3ADEV\) .trtp = 4,
22627192d16SAlbert ARIBAUD \(3ADEV\) .tras_max = 14040,
22727192d16SAlbert ARIBAUD \(3ADEV\) .tmod = 12,
22827192d16SAlbert ARIBAUD \(3ADEV\) .tckesr = 4,
22927192d16SAlbert ARIBAUD \(3ADEV\) .tcke = 3,
23027192d16SAlbert ARIBAUD \(3ADEV\) .trcd_int = 6,
23127192d16SAlbert ARIBAUD \(3ADEV\) .tras_lockout = 1,
23227192d16SAlbert ARIBAUD \(3ADEV\) .tdal = 10,
23327192d16SAlbert ARIBAUD \(3ADEV\) .bstlen = 3,
23427192d16SAlbert ARIBAUD \(3ADEV\) .tdll = 512,
23527192d16SAlbert ARIBAUD \(3ADEV\) .trp_ab = 6,
23627192d16SAlbert ARIBAUD \(3ADEV\) .tref = 1542,
23727192d16SAlbert ARIBAUD \(3ADEV\) .trfc = 64,
23827192d16SAlbert ARIBAUD \(3ADEV\) .tref_int = 5,
23927192d16SAlbert ARIBAUD \(3ADEV\) .tpdex = 3,
24027192d16SAlbert ARIBAUD \(3ADEV\) .txpdll = 10,
24127192d16SAlbert ARIBAUD \(3ADEV\) .txsnr = 68,
24227192d16SAlbert ARIBAUD \(3ADEV\) .txsr = 506,
24327192d16SAlbert ARIBAUD \(3ADEV\) .cksrx = 5,
24427192d16SAlbert ARIBAUD \(3ADEV\) .cksre = 5,
24527192d16SAlbert ARIBAUD \(3ADEV\) .freq_chg_en = 1,
24627192d16SAlbert ARIBAUD \(3ADEV\) .zqcl = 256,
24727192d16SAlbert ARIBAUD \(3ADEV\) .zqinit = 512,
24827192d16SAlbert ARIBAUD \(3ADEV\) .zqcs = 64,
24927192d16SAlbert ARIBAUD \(3ADEV\) .ref_per_zq = 64,
25027192d16SAlbert ARIBAUD \(3ADEV\) .zqcs_rotate = 1,
25127192d16SAlbert ARIBAUD \(3ADEV\) .aprebit = 10,
25227192d16SAlbert ARIBAUD \(3ADEV\) .cmd_age_cnt = 255,
25327192d16SAlbert ARIBAUD \(3ADEV\) .age_cnt = 255,
25427192d16SAlbert ARIBAUD \(3ADEV\) .q_fullness = 0,
25527192d16SAlbert ARIBAUD \(3ADEV\) .odt_rd_mapcs0 = 1,
25627192d16SAlbert ARIBAUD \(3ADEV\) .odt_wr_mapcs0 = 1,
25727192d16SAlbert ARIBAUD \(3ADEV\) .wlmrd = 40,
25827192d16SAlbert ARIBAUD \(3ADEV\) .wldqsen = 25,
25927192d16SAlbert ARIBAUD \(3ADEV\) };
260931a1d2aSAlbert ARIBAUD \(3ADEV\)
261*db74cbfcSAlbert ARIBAUD \(3ADEV\) const int row_diff = 2;
262931a1d2aSAlbert ARIBAUD \(3ADEV\)
26327192d16SAlbert ARIBAUD \(3ADEV\) #elif defined(CONFIG_TARGET_BK4R1)
26427192d16SAlbert ARIBAUD \(3ADEV\)
26527192d16SAlbert ARIBAUD \(3ADEV\) static const struct ddr3_jedec_timings pcm052_ddr_timings = {
26627192d16SAlbert ARIBAUD \(3ADEV\) .tinit = 5,
26727192d16SAlbert ARIBAUD \(3ADEV\) .trst_pwron = 80000,
26827192d16SAlbert ARIBAUD \(3ADEV\) .cke_inactive = 200000,
26927192d16SAlbert ARIBAUD \(3ADEV\) .wrlat = 5,
27027192d16SAlbert ARIBAUD \(3ADEV\) .caslat_lin = 12,
27127192d16SAlbert ARIBAUD \(3ADEV\) .trc = 6,
27227192d16SAlbert ARIBAUD \(3ADEV\) .trrd = 4,
27327192d16SAlbert ARIBAUD \(3ADEV\) .tccd = 4,
27427192d16SAlbert ARIBAUD \(3ADEV\) .tbst_int_interval = 0,
27527192d16SAlbert ARIBAUD \(3ADEV\) .tfaw = 16,
27627192d16SAlbert ARIBAUD \(3ADEV\) .trp = 6,
27727192d16SAlbert ARIBAUD \(3ADEV\) .twtr = 4,
27827192d16SAlbert ARIBAUD \(3ADEV\) .tras_min = 15,
27927192d16SAlbert ARIBAUD \(3ADEV\) .tmrd = 4,
28027192d16SAlbert ARIBAUD \(3ADEV\) .trtp = 4,
28127192d16SAlbert ARIBAUD \(3ADEV\) .tras_max = 28080,
28227192d16SAlbert ARIBAUD \(3ADEV\) .tmod = 12,
28327192d16SAlbert ARIBAUD \(3ADEV\) .tckesr = 4,
28427192d16SAlbert ARIBAUD \(3ADEV\) .tcke = 3,
28527192d16SAlbert ARIBAUD \(3ADEV\) .trcd_int = 6,
28627192d16SAlbert ARIBAUD \(3ADEV\) .tras_lockout = 1,
28727192d16SAlbert ARIBAUD \(3ADEV\) .tdal = 12,
28827192d16SAlbert ARIBAUD \(3ADEV\) .bstlen = 3,
28927192d16SAlbert ARIBAUD \(3ADEV\) .tdll = 512,
29027192d16SAlbert ARIBAUD \(3ADEV\) .trp_ab = 6,
29127192d16SAlbert ARIBAUD \(3ADEV\) .tref = 3120,
29227192d16SAlbert ARIBAUD \(3ADEV\) .trfc = 104,
29327192d16SAlbert ARIBAUD \(3ADEV\) .tref_int = 0,
29427192d16SAlbert ARIBAUD \(3ADEV\) .tpdex = 3,
29527192d16SAlbert ARIBAUD \(3ADEV\) .txpdll = 10,
29627192d16SAlbert ARIBAUD \(3ADEV\) .txsnr = 108,
29727192d16SAlbert ARIBAUD \(3ADEV\) .txsr = 512,
29827192d16SAlbert ARIBAUD \(3ADEV\) .cksrx = 5,
29927192d16SAlbert ARIBAUD \(3ADEV\) .cksre = 5,
30027192d16SAlbert ARIBAUD \(3ADEV\) .freq_chg_en = 1,
30127192d16SAlbert ARIBAUD \(3ADEV\) .zqcl = 256,
30227192d16SAlbert ARIBAUD \(3ADEV\) .zqinit = 512,
30327192d16SAlbert ARIBAUD \(3ADEV\) .zqcs = 64,
30427192d16SAlbert ARIBAUD \(3ADEV\) .ref_per_zq = 64,
30527192d16SAlbert ARIBAUD \(3ADEV\) .zqcs_rotate = 1,
30627192d16SAlbert ARIBAUD \(3ADEV\) .aprebit = 10,
30727192d16SAlbert ARIBAUD \(3ADEV\) .cmd_age_cnt = 255,
30827192d16SAlbert ARIBAUD \(3ADEV\) .age_cnt = 255,
30927192d16SAlbert ARIBAUD \(3ADEV\) .q_fullness = 0,
31027192d16SAlbert ARIBAUD \(3ADEV\) .odt_rd_mapcs0 = 1,
31127192d16SAlbert ARIBAUD \(3ADEV\) .odt_wr_mapcs0 = 1,
31227192d16SAlbert ARIBAUD \(3ADEV\) .wlmrd = 40,
31327192d16SAlbert ARIBAUD \(3ADEV\) .wldqsen = 25,
31427192d16SAlbert ARIBAUD \(3ADEV\) };
31527192d16SAlbert ARIBAUD \(3ADEV\)
316*db74cbfcSAlbert ARIBAUD \(3ADEV\) const int row_diff = 1;
31727192d16SAlbert ARIBAUD \(3ADEV\)
31827192d16SAlbert ARIBAUD \(3ADEV\) #else /* Unknown PCM052 variant */
31927192d16SAlbert ARIBAUD \(3ADEV\)
32027192d16SAlbert ARIBAUD \(3ADEV\) #error DDR characteristics undefined for this target. Please define them.
32127192d16SAlbert ARIBAUD \(3ADEV\)
32227192d16SAlbert ARIBAUD \(3ADEV\) #endif
32327192d16SAlbert ARIBAUD \(3ADEV\)
32427192d16SAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(pcm052_pads, ARRAY_SIZE(pcm052_pads));
32527192d16SAlbert ARIBAUD \(3ADEV\)
326*db74cbfcSAlbert ARIBAUD \(3ADEV\) ddrmc_ctrl_init_ddr3(&pcm052_ddr_timings, pcm052_cr_settings,
327*db74cbfcSAlbert ARIBAUD \(3ADEV\) pcm052_phy_settings, 1, row_diff);
328*db74cbfcSAlbert ARIBAUD \(3ADEV\)
329931a1d2aSAlbert ARIBAUD \(3ADEV\) gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
330931a1d2aSAlbert ARIBAUD \(3ADEV\)
331931a1d2aSAlbert ARIBAUD \(3ADEV\) return 0;
332931a1d2aSAlbert ARIBAUD \(3ADEV\) }
333931a1d2aSAlbert ARIBAUD \(3ADEV\)
setup_iomux_uart(void)334931a1d2aSAlbert ARIBAUD \(3ADEV\) static void setup_iomux_uart(void)
335931a1d2aSAlbert ARIBAUD \(3ADEV\) {
336931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t uart1_pads[] = {
337931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTB4__UART1_TX, VF610_UART_PAD_CTRL),
338931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTB5__UART1_RX, VF610_UART_PAD_CTRL),
339931a1d2aSAlbert ARIBAUD \(3ADEV\) };
340931a1d2aSAlbert ARIBAUD \(3ADEV\)
341931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
342931a1d2aSAlbert ARIBAUD \(3ADEV\) }
343931a1d2aSAlbert ARIBAUD \(3ADEV\)
344931a1d2aSAlbert ARIBAUD \(3ADEV\) #define ENET_PAD_CTRL (PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_HIGH | \
345931a1d2aSAlbert ARIBAUD \(3ADEV\) PAD_CTL_DSE_50ohm | PAD_CTL_OBE_IBE_ENABLE)
346931a1d2aSAlbert ARIBAUD \(3ADEV\)
setup_iomux_enet(void)347931a1d2aSAlbert ARIBAUD \(3ADEV\) static void setup_iomux_enet(void)
348931a1d2aSAlbert ARIBAUD \(3ADEV\) {
349931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t enet0_pads[] = {
350931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA6__RMII0_CLKIN, ENET_PAD_CTRL),
351931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC1__RMII0_MDIO, ENET_PAD_CTRL),
352931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC0__RMII0_MDC, ENET_PAD_CTRL),
353931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC2__RMII0_CRS_DV, ENET_PAD_CTRL),
354931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC3__RMII0_RD1, ENET_PAD_CTRL),
355931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC4__RMII0_RD0, ENET_PAD_CTRL),
356931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC5__RMII0_RXER, ENET_PAD_CTRL),
357931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC6__RMII0_TD1, ENET_PAD_CTRL),
358931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC7__RMII0_TD0, ENET_PAD_CTRL),
359931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTC8__RMII0_TXEN, ENET_PAD_CTRL),
360931a1d2aSAlbert ARIBAUD \(3ADEV\) };
361931a1d2aSAlbert ARIBAUD \(3ADEV\)
362931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(enet0_pads, ARRAY_SIZE(enet0_pads));
363931a1d2aSAlbert ARIBAUD \(3ADEV\) }
364931a1d2aSAlbert ARIBAUD \(3ADEV\)
365931a1d2aSAlbert ARIBAUD \(3ADEV\) /*
366931a1d2aSAlbert ARIBAUD \(3ADEV\) * I2C2 is the only I2C used, on pads PTA22/PTA23.
367931a1d2aSAlbert ARIBAUD \(3ADEV\) */
368931a1d2aSAlbert ARIBAUD \(3ADEV\)
setup_iomux_i2c(void)369931a1d2aSAlbert ARIBAUD \(3ADEV\) static void setup_iomux_i2c(void)
370931a1d2aSAlbert ARIBAUD \(3ADEV\) {
371931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t i2c_pads[] = {
372931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTA22__I2C2_SCL,
373931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTA23__I2C2_SDA,
374931a1d2aSAlbert ARIBAUD \(3ADEV\) };
375931a1d2aSAlbert ARIBAUD \(3ADEV\)
376931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(i2c_pads, ARRAY_SIZE(i2c_pads));
377931a1d2aSAlbert ARIBAUD \(3ADEV\) }
378931a1d2aSAlbert ARIBAUD \(3ADEV\)
379931a1d2aSAlbert ARIBAUD \(3ADEV\) #ifdef CONFIG_NAND_VF610_NFC
setup_iomux_nfc(void)380931a1d2aSAlbert ARIBAUD \(3ADEV\) static void setup_iomux_nfc(void)
381931a1d2aSAlbert ARIBAUD \(3ADEV\) {
382931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t nfc_pads[] = {
383931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD31__NF_IO15,
384931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD30__NF_IO14,
385931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD29__NF_IO13,
386931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD28__NF_IO12,
387931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD27__NF_IO11,
388931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD26__NF_IO10,
389931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD25__NF_IO9,
390931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD24__NF_IO8,
391931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD23__NF_IO7,
392931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD22__NF_IO6,
393931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD21__NF_IO5,
394931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD20__NF_IO4,
395931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD19__NF_IO3,
396931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD18__NF_IO2,
397931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD17__NF_IO1,
398931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD16__NF_IO0,
399931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTB24__NF_WE_B,
400931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTB25__NF_CE0_B,
401931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTB27__NF_RE_B,
402931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTC26__NF_RB_B,
403931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTC27__NF_ALE,
404931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTC28__NF_CLE
405931a1d2aSAlbert ARIBAUD \(3ADEV\) };
406931a1d2aSAlbert ARIBAUD \(3ADEV\)
407931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(nfc_pads, ARRAY_SIZE(nfc_pads));
408931a1d2aSAlbert ARIBAUD \(3ADEV\) }
409931a1d2aSAlbert ARIBAUD \(3ADEV\) #endif
410931a1d2aSAlbert ARIBAUD \(3ADEV\)
setup_iomux_qspi(void)411931a1d2aSAlbert ARIBAUD \(3ADEV\) static void setup_iomux_qspi(void)
412931a1d2aSAlbert ARIBAUD \(3ADEV\) {
413931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t qspi0_pads[] = {
414931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD0__QSPI0_A_QSCK,
415931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD1__QSPI0_A_CS0,
416931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD2__QSPI0_A_DATA3,
417931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD3__QSPI0_A_DATA2,
418931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD4__QSPI0_A_DATA1,
419931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD5__QSPI0_A_DATA0,
420931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD7__QSPI0_B_QSCK,
421931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD8__QSPI0_B_CS0,
422931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD9__QSPI0_B_DATA3,
423931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD10__QSPI0_B_DATA2,
424931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD11__QSPI0_B_DATA1,
425931a1d2aSAlbert ARIBAUD \(3ADEV\) VF610_PAD_PTD12__QSPI0_B_DATA0,
426931a1d2aSAlbert ARIBAUD \(3ADEV\) };
427931a1d2aSAlbert ARIBAUD \(3ADEV\)
428931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(qspi0_pads, ARRAY_SIZE(qspi0_pads));
429931a1d2aSAlbert ARIBAUD \(3ADEV\) }
430931a1d2aSAlbert ARIBAUD \(3ADEV\)
431931a1d2aSAlbert ARIBAUD \(3ADEV\) #define ESDHC_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_HIGH | \
432931a1d2aSAlbert ARIBAUD \(3ADEV\) PAD_CTL_DSE_20ohm | PAD_CTL_OBE_IBE_ENABLE)
433931a1d2aSAlbert ARIBAUD \(3ADEV\)
434931a1d2aSAlbert ARIBAUD \(3ADEV\) struct fsl_esdhc_cfg esdhc_cfg[1] = {
435931a1d2aSAlbert ARIBAUD \(3ADEV\) {ESDHC1_BASE_ADDR},
436931a1d2aSAlbert ARIBAUD \(3ADEV\) };
437931a1d2aSAlbert ARIBAUD \(3ADEV\)
board_mmc_getcd(struct mmc * mmc)438931a1d2aSAlbert ARIBAUD \(3ADEV\) int board_mmc_getcd(struct mmc *mmc)
439931a1d2aSAlbert ARIBAUD \(3ADEV\) {
440931a1d2aSAlbert ARIBAUD \(3ADEV\) /* eSDHC1 is always present */
441931a1d2aSAlbert ARIBAUD \(3ADEV\) return 1;
442931a1d2aSAlbert ARIBAUD \(3ADEV\) }
443931a1d2aSAlbert ARIBAUD \(3ADEV\)
board_mmc_init(bd_t * bis)444931a1d2aSAlbert ARIBAUD \(3ADEV\) int board_mmc_init(bd_t *bis)
445931a1d2aSAlbert ARIBAUD \(3ADEV\) {
446931a1d2aSAlbert ARIBAUD \(3ADEV\) static const iomux_v3_cfg_t esdhc1_pads[] = {
447931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA24__ESDHC1_CLK, ESDHC_PAD_CTRL),
448931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA25__ESDHC1_CMD, ESDHC_PAD_CTRL),
449931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA26__ESDHC1_DAT0, ESDHC_PAD_CTRL),
450931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA27__ESDHC1_DAT1, ESDHC_PAD_CTRL),
451931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA28__ESDHC1_DAT2, ESDHC_PAD_CTRL),
452931a1d2aSAlbert ARIBAUD \(3ADEV\) NEW_PAD_CTRL(VF610_PAD_PTA29__ESDHC1_DAT3, ESDHC_PAD_CTRL),
453931a1d2aSAlbert ARIBAUD \(3ADEV\) };
454931a1d2aSAlbert ARIBAUD \(3ADEV\)
455931a1d2aSAlbert ARIBAUD \(3ADEV\) esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
456931a1d2aSAlbert ARIBAUD \(3ADEV\)
457931a1d2aSAlbert ARIBAUD \(3ADEV\) imx_iomux_v3_setup_multiple_pads(
458931a1d2aSAlbert ARIBAUD \(3ADEV\) esdhc1_pads, ARRAY_SIZE(esdhc1_pads));
459931a1d2aSAlbert ARIBAUD \(3ADEV\)
460931a1d2aSAlbert ARIBAUD \(3ADEV\) return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
461931a1d2aSAlbert ARIBAUD \(3ADEV\) }
462931a1d2aSAlbert ARIBAUD \(3ADEV\)
clock_init(void)463931a1d2aSAlbert ARIBAUD \(3ADEV\) static void clock_init(void)
464931a1d2aSAlbert ARIBAUD \(3ADEV\) {
465931a1d2aSAlbert ARIBAUD \(3ADEV\) struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
466931a1d2aSAlbert ARIBAUD \(3ADEV\) struct anadig_reg *anadig = (struct anadig_reg *)ANADIG_BASE_ADDR;
467931a1d2aSAlbert ARIBAUD \(3ADEV\)
468931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr0, CCM_REG_CTRL_MASK,
469931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR0_UART1_CTRL_MASK);
470931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr1, CCM_REG_CTRL_MASK,
471931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR1_PIT_CTRL_MASK | CCM_CCGR1_WDOGA5_CTRL_MASK);
472931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr2, CCM_REG_CTRL_MASK,
473931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR2_IOMUXC_CTRL_MASK | CCM_CCGR2_PORTA_CTRL_MASK |
474931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR2_PORTB_CTRL_MASK | CCM_CCGR2_PORTC_CTRL_MASK |
475931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR2_PORTD_CTRL_MASK | CCM_CCGR2_PORTE_CTRL_MASK |
476931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR2_QSPI0_CTRL_MASK);
477931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr3, CCM_REG_CTRL_MASK,
478931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR3_ANADIG_CTRL_MASK | CCM_CCGR3_SCSC_CTRL_MASK);
479931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr4, CCM_REG_CTRL_MASK,
480931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR4_WKUP_CTRL_MASK | CCM_CCGR4_CCM_CTRL_MASK |
481931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR4_GPC_CTRL_MASK);
482931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr6, CCM_REG_CTRL_MASK,
483931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR6_OCOTP_CTRL_MASK | CCM_CCGR6_DDRMC_CTRL_MASK);
484931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr7, CCM_REG_CTRL_MASK,
485931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR7_SDHC1_CTRL_MASK);
486931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr9, CCM_REG_CTRL_MASK,
487931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR9_FEC0_CTRL_MASK | CCM_CCGR9_FEC1_CTRL_MASK);
488931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccgr10, CCM_REG_CTRL_MASK,
489931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCGR10_NFC_CTRL_MASK | CCM_CCGR10_I2C2_CTRL_MASK);
490931a1d2aSAlbert ARIBAUD \(3ADEV\)
491931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&anadig->pll2_ctrl, ANADIG_PLL2_CTRL_POWERDOWN,
492931a1d2aSAlbert ARIBAUD \(3ADEV\) ANADIG_PLL2_CTRL_ENABLE | ANADIG_PLL2_CTRL_DIV_SELECT);
493931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&anadig->pll1_ctrl, ANADIG_PLL1_CTRL_POWERDOWN,
494931a1d2aSAlbert ARIBAUD \(3ADEV\) ANADIG_PLL1_CTRL_ENABLE | ANADIG_PLL1_CTRL_DIV_SELECT);
495931a1d2aSAlbert ARIBAUD \(3ADEV\)
496931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccr, CCM_CCR_OSCNT_MASK,
497931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCR_FIRC_EN | CCM_CCR_OSCNT(5));
498931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->ccsr, CCM_REG_CTRL_MASK,
499931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_PLL1_PFD_CLK_SEL(3) | CCM_CCSR_PLL2_PFD4_EN |
500931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_PLL2_PFD3_EN | CCM_CCSR_PLL2_PFD2_EN |
501931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_PLL2_PFD1_EN | CCM_CCSR_PLL1_PFD4_EN |
502931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_PLL1_PFD3_EN | CCM_CCSR_PLL1_PFD2_EN |
503931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_PLL1_PFD1_EN | CCM_CCSR_DDRC_CLK_SEL(1) |
504931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CCSR_FAST_CLK_SEL(1) | CCM_CCSR_SYS_CLK_SEL(4));
505931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cacrr, CCM_REG_CTRL_MASK,
506931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CACRR_IPG_CLK_DIV(1) | CCM_CACRR_BUS_CLK_DIV(2) |
507931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CACRR_ARM_CLK_DIV(0));
508931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cscmr1, CCM_REG_CTRL_MASK,
509931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCMR1_ESDHC1_CLK_SEL(3) |
510931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCMR1_QSPI0_CLK_SEL(3) |
511931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCMR1_NFC_CLK_SEL(0));
512931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cscdr1, CCM_REG_CTRL_MASK,
513931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR1_RMII_CLK_EN);
514931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cscdr2, CCM_REG_CTRL_MASK,
515931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0) |
516931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR2_NFC_EN);
517931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cscdr3, CCM_REG_CTRL_MASK,
518931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR3_QSPI0_EN | CCM_CSCDR3_QSPI0_DIV(1) |
519931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR3_QSPI0_X2_DIV(1) |
520931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR3_QSPI0_X4_DIV(3) |
521931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCDR3_NFC_PRE_DIV(5));
522931a1d2aSAlbert ARIBAUD \(3ADEV\) clrsetbits_le32(&ccm->cscmr2, CCM_REG_CTRL_MASK,
523931a1d2aSAlbert ARIBAUD \(3ADEV\) CCM_CSCMR2_RMII_CLK_SEL(0));
524931a1d2aSAlbert ARIBAUD \(3ADEV\) }
525931a1d2aSAlbert ARIBAUD \(3ADEV\)
mscm_init(void)526931a1d2aSAlbert ARIBAUD \(3ADEV\) static void mscm_init(void)
527931a1d2aSAlbert ARIBAUD \(3ADEV\) {
528931a1d2aSAlbert ARIBAUD \(3ADEV\) struct mscm_ir *mscmir = (struct mscm_ir *)MSCM_IR_BASE_ADDR;
529931a1d2aSAlbert ARIBAUD \(3ADEV\) int i;
530931a1d2aSAlbert ARIBAUD \(3ADEV\)
531931a1d2aSAlbert ARIBAUD \(3ADEV\) for (i = 0; i < MSCM_IRSPRC_NUM; i++)
532931a1d2aSAlbert ARIBAUD \(3ADEV\) writew(MSCM_IRSPRC_CP0_EN, &mscmir->irsprc[i]);
533931a1d2aSAlbert ARIBAUD \(3ADEV\) }
534931a1d2aSAlbert ARIBAUD \(3ADEV\)
board_phy_config(struct phy_device * phydev)535931a1d2aSAlbert ARIBAUD \(3ADEV\) int board_phy_config(struct phy_device *phydev)
536931a1d2aSAlbert ARIBAUD \(3ADEV\) {
537931a1d2aSAlbert ARIBAUD \(3ADEV\) if (phydev->drv->config)
538931a1d2aSAlbert ARIBAUD \(3ADEV\) phydev->drv->config(phydev);
539931a1d2aSAlbert ARIBAUD \(3ADEV\)
540931a1d2aSAlbert ARIBAUD \(3ADEV\) return 0;
541931a1d2aSAlbert ARIBAUD \(3ADEV\) }
542931a1d2aSAlbert ARIBAUD \(3ADEV\)
board_early_init_f(void)543931a1d2aSAlbert ARIBAUD \(3ADEV\) int board_early_init_f(void)
544931a1d2aSAlbert ARIBAUD \(3ADEV\) {
545931a1d2aSAlbert ARIBAUD \(3ADEV\) clock_init();
546931a1d2aSAlbert ARIBAUD \(3ADEV\) mscm_init();
547931a1d2aSAlbert ARIBAUD \(3ADEV\) setup_iomux_uart();
548931a1d2aSAlbert ARIBAUD \(3ADEV\) setup_iomux_enet();
549931a1d2aSAlbert ARIBAUD \(3ADEV\) setup_iomux_i2c();
550931a1d2aSAlbert ARIBAUD \(3ADEV\) setup_iomux_qspi();
551931a1d2aSAlbert ARIBAUD \(3ADEV\) setup_iomux_nfc();
552931a1d2aSAlbert ARIBAUD \(3ADEV\)
553931a1d2aSAlbert ARIBAUD \(3ADEV\) return 0;
554931a1d2aSAlbert ARIBAUD \(3ADEV\) }
555931a1d2aSAlbert ARIBAUD \(3ADEV\)
board_init(void)556931a1d2aSAlbert ARIBAUD \(3ADEV\) int board_init(void)
557931a1d2aSAlbert ARIBAUD \(3ADEV\) {
558931a1d2aSAlbert ARIBAUD \(3ADEV\) struct scsc_reg *scsc = (struct scsc_reg *)SCSC_BASE_ADDR;
559931a1d2aSAlbert ARIBAUD \(3ADEV\)
560931a1d2aSAlbert ARIBAUD \(3ADEV\) /* address of boot parameters */
561931a1d2aSAlbert ARIBAUD \(3ADEV\) gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
562931a1d2aSAlbert ARIBAUD \(3ADEV\)
563931a1d2aSAlbert ARIBAUD \(3ADEV\) /*
564931a1d2aSAlbert ARIBAUD \(3ADEV\) * Enable external 32K Oscillator
565931a1d2aSAlbert ARIBAUD \(3ADEV\) *
566931a1d2aSAlbert ARIBAUD \(3ADEV\) * The internal clock experiences significant drift
567931a1d2aSAlbert ARIBAUD \(3ADEV\) * so we must use the external oscillator in order
568931a1d2aSAlbert ARIBAUD \(3ADEV\) * to maintain correct time in the hwclock
569931a1d2aSAlbert ARIBAUD \(3ADEV\) */
570931a1d2aSAlbert ARIBAUD \(3ADEV\) setbits_le32(&scsc->sosc_ctr, SCSC_SOSC_CTR_SOSC_EN);
571931a1d2aSAlbert ARIBAUD \(3ADEV\)
572931a1d2aSAlbert ARIBAUD \(3ADEV\) return 0;
573931a1d2aSAlbert ARIBAUD \(3ADEV\) }
574931a1d2aSAlbert ARIBAUD \(3ADEV\)
checkboard(void)575931a1d2aSAlbert ARIBAUD \(3ADEV\) int checkboard(void)
576931a1d2aSAlbert ARIBAUD \(3ADEV\) {
577931a1d2aSAlbert ARIBAUD \(3ADEV\) puts("Board: PCM-052\n");
578931a1d2aSAlbert ARIBAUD \(3ADEV\)
579931a1d2aSAlbert ARIBAUD \(3ADEV\) return 0;
580931a1d2aSAlbert ARIBAUD \(3ADEV\) }
581303a2443SAlbert ARIBAUD \(3ADEV\)
do_m4go(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])582303a2443SAlbert ARIBAUD \(3ADEV\) static int do_m4go(cmd_tbl_t *cmdtp, int flag, int argc,
583303a2443SAlbert ARIBAUD \(3ADEV\) char * const argv[])
584303a2443SAlbert ARIBAUD \(3ADEV\) {
585303a2443SAlbert ARIBAUD \(3ADEV\) ulong addr;
586303a2443SAlbert ARIBAUD \(3ADEV\)
587303a2443SAlbert ARIBAUD \(3ADEV\) /* Consume 'm4go' */
588303a2443SAlbert ARIBAUD \(3ADEV\) argc--; argv++;
589303a2443SAlbert ARIBAUD \(3ADEV\)
590303a2443SAlbert ARIBAUD \(3ADEV\) /*
591303a2443SAlbert ARIBAUD \(3ADEV\) * Parse provided address - default to load_addr in case not provided.
592303a2443SAlbert ARIBAUD \(3ADEV\) */
593303a2443SAlbert ARIBAUD \(3ADEV\)
594303a2443SAlbert ARIBAUD \(3ADEV\) if (argc)
595303a2443SAlbert ARIBAUD \(3ADEV\) addr = simple_strtoul(argv[0], NULL, 16);
596303a2443SAlbert ARIBAUD \(3ADEV\) else
597303a2443SAlbert ARIBAUD \(3ADEV\) addr = load_addr;
598303a2443SAlbert ARIBAUD \(3ADEV\)
599303a2443SAlbert ARIBAUD \(3ADEV\) /*
600303a2443SAlbert ARIBAUD \(3ADEV\) * Write boot address in PERSISTENT_ENTRY1[31:0] aka SRC_GPR2[31:0]
601303a2443SAlbert ARIBAUD \(3ADEV\) */
602303a2443SAlbert ARIBAUD \(3ADEV\) writel(addr + 0x401, 0x4006E028);
603303a2443SAlbert ARIBAUD \(3ADEV\)
604303a2443SAlbert ARIBAUD \(3ADEV\) /*
605303a2443SAlbert ARIBAUD \(3ADEV\) * Start secondary processor by enabling its clock
606303a2443SAlbert ARIBAUD \(3ADEV\) */
607303a2443SAlbert ARIBAUD \(3ADEV\) writel(0x15a5a, 0x4006B08C);
608303a2443SAlbert ARIBAUD \(3ADEV\)
609303a2443SAlbert ARIBAUD \(3ADEV\) return 1;
610303a2443SAlbert ARIBAUD \(3ADEV\) }
611303a2443SAlbert ARIBAUD \(3ADEV\)
612303a2443SAlbert ARIBAUD \(3ADEV\) U_BOOT_CMD(
613303a2443SAlbert ARIBAUD \(3ADEV\) m4go, 2 /* one arg max */, 1 /* repeatable */, do_m4go,
614303a2443SAlbert ARIBAUD \(3ADEV\) "start the secondary Cortex-M4 from scatter file image",
615303a2443SAlbert ARIBAUD \(3ADEV\) "[<addr>]\n"
616303a2443SAlbert ARIBAUD \(3ADEV\) " - start secondary Cortex-M4 core using a scatter file image\n"
617303a2443SAlbert ARIBAUD \(3ADEV\) "The argument needs to be a scatter file\n"
618303a2443SAlbert ARIBAUD \(3ADEV\) );
619