xref: /rk3399_ARM-atf/plat/brcm/board/stingray/driver/plat_emmc.c (revision 926cd70a0cc3a0cbf209a87765a8dc0b869798e3)
1*bffde63dSSheetal Tigadoli /*
2*bffde63dSSheetal Tigadoli  * Copyright (c) 2016 - 2020, Broadcom
3*bffde63dSSheetal Tigadoli  *
4*bffde63dSSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
5*bffde63dSSheetal Tigadoli  */
6*bffde63dSSheetal Tigadoli 
7*bffde63dSSheetal Tigadoli #include <stdint.h>
8*bffde63dSSheetal Tigadoli 
9*bffde63dSSheetal Tigadoli #include <lib/mmio.h>
10*bffde63dSSheetal Tigadoli 
11*bffde63dSSheetal Tigadoli #include <platform_def.h>
12*bffde63dSSheetal Tigadoli 
13*bffde63dSSheetal Tigadoli #define ICFG_IPROC_IOPAD_CTRL_4 (IPROC_ROOT + 0x9c0)
14*bffde63dSSheetal Tigadoli #define ICFG_IPROC_IOPAD_CTRL_5 (IPROC_ROOT + 0x9c4)
15*bffde63dSSheetal Tigadoli #define ICFG_IPROC_IOPAD_CTRL_6 (IPROC_ROOT + 0x9c8)
16*bffde63dSSheetal Tigadoli #define ICFG_IPROC_IOPAD_CTRL_7 (IPROC_ROOT + 0x9cc)
17*bffde63dSSheetal Tigadoli 
18*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CD_IND_R 30
19*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CD_SRC_R 31
20*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CD_HYS_R 29
21*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CD_PULL_R 28
22*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CD_DRIVE_R 24
23*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_SRC_R 23
24*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_HYS_R 21
25*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_CLK_SDCARD_DRIVE_R 17
26*bffde63dSSheetal Tigadoli 
27*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA0_SRC_R 15
28*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA0_HYS_R 13
29*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA0_DRIVE_R 9
30*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA1_SRC_R 7
31*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA1_HYS_R 5
32*bffde63dSSheetal Tigadoli #define IOPAD_CTRL4_SDIO0_DATA1_DRIVE_R 1
33*bffde63dSSheetal Tigadoli 
34*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA2_SRC_R 31
35*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA2_HYS_R 29
36*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA2_DRIVE_R 25
37*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA3_SRC_R 23
38*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA3_IND_R 22
39*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA3_HYS_R 21
40*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA3_DRIVE_R 17
41*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA4_SRC_R 15
42*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA4_HYS_R 13
43*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA4_DRIVE_R 9
44*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA5_SRC_R 7
45*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA5_HYS_R 5
46*bffde63dSSheetal Tigadoli #define IOPAD_CTRL5_SDIO0_DATA5_DRIVE_R 1
47*bffde63dSSheetal Tigadoli 
48*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA6_SRC_R 31
49*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA6_HYS_R 29
50*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA6_DRIVE_R 25
51*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA7_SRC_R 23
52*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA7_HYS_R 21
53*bffde63dSSheetal Tigadoli #define IOPAD_CTRL6_SDIO0_DATA7_DRIVE_R 17
54*bffde63dSSheetal Tigadoli 
emmc_soft_reset(void)55*bffde63dSSheetal Tigadoli void emmc_soft_reset(void)
56*bffde63dSSheetal Tigadoli {
57*bffde63dSSheetal Tigadoli 	uint32_t val = 0;
58*bffde63dSSheetal Tigadoli 
59*bffde63dSSheetal Tigadoli 	val = (BIT(IOPAD_CTRL6_SDIO0_DATA7_SRC_R) |
60*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL6_SDIO0_DATA7_HYS_R) |
61*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL6_SDIO0_DATA7_DRIVE_R) |
62*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL6_SDIO0_DATA6_SRC_R) |
63*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL6_SDIO0_DATA6_HYS_R) |
64*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL6_SDIO0_DATA6_DRIVE_R));
65*bffde63dSSheetal Tigadoli 
66*bffde63dSSheetal Tigadoli 	mmio_write_32(ICFG_IPROC_IOPAD_CTRL_6, val);
67*bffde63dSSheetal Tigadoli 
68*bffde63dSSheetal Tigadoli 	val = (BIT(IOPAD_CTRL5_SDIO0_DATA3_SRC_R) |
69*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA3_HYS_R) |
70*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA3_DRIVE_R) |
71*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA4_SRC_R) |
72*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA4_HYS_R) |
73*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA4_DRIVE_R) |
74*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA5_SRC_R) |
75*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA5_HYS_R) |
76*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA5_DRIVE_R));
77*bffde63dSSheetal Tigadoli 
78*bffde63dSSheetal Tigadoli 	mmio_write_32(ICFG_IPROC_IOPAD_CTRL_5, val);
79*bffde63dSSheetal Tigadoli 
80*bffde63dSSheetal Tigadoli 	val = (BIT(IOPAD_CTRL4_SDIO0_DATA0_SRC_R) |
81*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_DATA0_HYS_R) |
82*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_DATA0_DRIVE_R) |
83*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_DATA1_SRC_R) |
84*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_DATA1_HYS_R) |
85*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_DATA1_DRIVE_R) |
86*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA2_SRC_R) |
87*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA2_HYS_R) |
88*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL5_SDIO0_DATA2_DRIVE_R));
89*bffde63dSSheetal Tigadoli 
90*bffde63dSSheetal Tigadoli 	mmio_write_32(ICFG_IPROC_IOPAD_CTRL_6, val);
91*bffde63dSSheetal Tigadoli 
92*bffde63dSSheetal Tigadoli 	val = (BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_SRC_R) |
93*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_HYS_R) |
94*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_CLK_SDCARD_DRIVE_R) |
95*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_CD_SRC_R) |
96*bffde63dSSheetal Tigadoli 	       BIT(IOPAD_CTRL4_SDIO0_CD_HYS_R));
97*bffde63dSSheetal Tigadoli 
98*bffde63dSSheetal Tigadoli 	/*
99*bffde63dSSheetal Tigadoli 	 * set pull-down, clear pull-up=0
100*bffde63dSSheetal Tigadoli 	 * bit 12: pull-down  bit 11: pull-up
101*bffde63dSSheetal Tigadoli 	 * Note:  In emulation, this pull-down setting was not
102*bffde63dSSheetal Tigadoli 	 * sufficient.  Board design likely requires pull down on
103*bffde63dSSheetal Tigadoli 	 * this pin for eMMC.
104*bffde63dSSheetal Tigadoli 	 */
105*bffde63dSSheetal Tigadoli 
106*bffde63dSSheetal Tigadoli 	val |= BIT(IOPAD_CTRL4_SDIO0_CD_PULL_R);
107*bffde63dSSheetal Tigadoli 
108*bffde63dSSheetal Tigadoli 	mmio_write_32(ICFG_IPROC_IOPAD_CTRL_4, val);
109*bffde63dSSheetal Tigadoli }
110