xref: /rk3399_ARM-atf/include/drivers/brcm/emmc/bcm_emmc.h (revision bffde63de7a2c1a8534c1d969857d17fa17e30df)
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 #ifndef EMMC_H
8*bffde63dSSheetal Tigadoli #define EMMC_H
9*bffde63dSSheetal Tigadoli 
10*bffde63dSSheetal Tigadoli #include <stdint.h>
11*bffde63dSSheetal Tigadoli 
12*bffde63dSSheetal Tigadoli #include <common/debug.h>
13*bffde63dSSheetal Tigadoli 
14*bffde63dSSheetal Tigadoli #include <platform_def.h>
15*bffde63dSSheetal Tigadoli 
16*bffde63dSSheetal Tigadoli #include "emmc_chal_types.h"
17*bffde63dSSheetal Tigadoli #include "emmc_chal_sd.h"
18*bffde63dSSheetal Tigadoli #include "emmc_csl_sdprot.h"
19*bffde63dSSheetal Tigadoli #include "emmc_csl_sdcmd.h"
20*bffde63dSSheetal Tigadoli #include "emmc_pboot_hal_memory_drv.h"
21*bffde63dSSheetal Tigadoli 
22*bffde63dSSheetal Tigadoli /* ------------------------------------------------------------------- */
23*bffde63dSSheetal Tigadoli #define EXT_CSD_SIZE		512
24*bffde63dSSheetal Tigadoli 
25*bffde63dSSheetal Tigadoli #ifdef PLAT_SD_MAX_READ_LENGTH
26*bffde63dSSheetal Tigadoli #define SD_MAX_READ_LENGTH PLAT_SD_MAX_READ_LENGTH
27*bffde63dSSheetal Tigadoli #ifdef USE_EMMC_LARGE_BLK_TRANSFER_LENGTH
28*bffde63dSSheetal Tigadoli #define SD_MAX_BLK_TRANSFER_LENGTH	0x10000000
29*bffde63dSSheetal Tigadoli #else
30*bffde63dSSheetal Tigadoli #define SD_MAX_BLK_TRANSFER_LENGTH	0x1000
31*bffde63dSSheetal Tigadoli #endif
32*bffde63dSSheetal Tigadoli #else
33*bffde63dSSheetal Tigadoli #define SD_MAX_READ_LENGTH EMMC_BLOCK_SIZE
34*bffde63dSSheetal Tigadoli #define SD_MAX_BLK_TRANSFER_LENGTH EMMC_BLOCK_SIZE
35*bffde63dSSheetal Tigadoli #endif
36*bffde63dSSheetal Tigadoli 
37*bffde63dSSheetal Tigadoli struct emmc_global_buffer {
38*bffde63dSSheetal Tigadoli 	union {
39*bffde63dSSheetal Tigadoli 		uint8_t Ext_CSD_storage[EXT_CSD_SIZE];
40*bffde63dSSheetal Tigadoli 		uint8_t tempbuf[SD_MAX_READ_LENGTH];
41*bffde63dSSheetal Tigadoli 	} u;
42*bffde63dSSheetal Tigadoli };
43*bffde63dSSheetal Tigadoli 
44*bffde63dSSheetal Tigadoli struct emmc_global_vars {
45*bffde63dSSheetal Tigadoli 	struct sd_card_data cardData;
46*bffde63dSSheetal Tigadoli 	struct sd_handle sdHandle;
47*bffde63dSSheetal Tigadoli 	struct sd_dev sdDevice;
48*bffde63dSSheetal Tigadoli 	struct sd_card_info sdCard;
49*bffde63dSSheetal Tigadoli 	unsigned int init_done;
50*bffde63dSSheetal Tigadoli };
51*bffde63dSSheetal Tigadoli 
52*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__SLOT_TYPE_R 27
53*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__INT_MODE_R 26
54*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__SYS_BUS_64BIT_R 25
55*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__VOLTAGE_1P8V_R 24
56*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__VOLTAGE_3P0V_R 23
57*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__VOLTAGE_3P3V_R 22
58*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__SUSPEND_RESUME_R 21
59*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__SDMA_R 20
60*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__HIGH_SPEED_R 19
61*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__ADMA2_R 18
62*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__EXTENDED_MEDIA_R 17
63*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__MAX_BLOCK_LEN_R 15
64*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__BASE_CLK_FREQ_R 7
65*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__TIMEOUT_UNIT_R 6
66*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP0__TIMEOUT_CLK_FREQ_R 0
67*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__SPI_BLOCK_MODE_R 22
68*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__SPI_MODE_R 21
69*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__CLK_MULT_R 13
70*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__RETUNING_MODE_R 11
71*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__TUNE_SDR50_R 10
72*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__TIME_RETUNE_R 6
73*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__DRIVER_D_R 5
74*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__DRIVER_C_R 4
75*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__DRIVER_A_R 3
76*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__DDR50_R 2
77*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__SDR104_R 1
78*bffde63dSSheetal Tigadoli #define ICFG_SDIO0_CAP1__SDR50_R 0
79*bffde63dSSheetal Tigadoli 
80*bffde63dSSheetal Tigadoli #define SDIO0_CTRL_REGS_BASE_ADDR	   (SDIO0_EMMCSDXC_SYSADDR)
81*bffde63dSSheetal Tigadoli #define SDIO0_IDM_RESET_CTRL_ADDR	   (SDIO_IDM0_IDM_RESET_CONTROL)
82*bffde63dSSheetal Tigadoli 
83*bffde63dSSheetal Tigadoli #define EMMC_CTRL_REGS_BASE_ADDR	    SDIO0_CTRL_REGS_BASE_ADDR
84*bffde63dSSheetal Tigadoli #define EMMC_IDM_RESET_CTRL_ADDR	    SDIO0_IDM_RESET_CTRL_ADDR
85*bffde63dSSheetal Tigadoli #define EMMC_IDM_IO_CTRL_DIRECT_ADDR	SDIO_IDM0_IO_CONTROL_DIRECT
86*bffde63dSSheetal Tigadoli 
87*bffde63dSSheetal Tigadoli extern struct emmc_global_buffer *emmc_global_buf_ptr;
88*bffde63dSSheetal Tigadoli 
89*bffde63dSSheetal Tigadoli extern struct emmc_global_vars *emmc_global_vars_ptr;
90*bffde63dSSheetal Tigadoli 
91*bffde63dSSheetal Tigadoli #define EMMC_CARD_DETECT_TIMEOUT_MS 1200
92*bffde63dSSheetal Tigadoli #define EMMC_CMD_TIMEOUT_MS 200
93*bffde63dSSheetal Tigadoli #define EMMC_BUSY_CMD_TIMEOUT_MS 200
94*bffde63dSSheetal Tigadoli #define EMMC_CLOCK_SETTING_TIMEOUT_MS 100
95*bffde63dSSheetal Tigadoli #define EMMC_WFE_RETRY 40000
96*bffde63dSSheetal Tigadoli #define EMMC_WFE_RETRY_DELAY_US 10
97*bffde63dSSheetal Tigadoli 
98*bffde63dSSheetal Tigadoli #ifdef EMMC_DEBUG
99*bffde63dSSheetal Tigadoli #define EMMC_TRACE INFO
100*bffde63dSSheetal Tigadoli #else
101*bffde63dSSheetal Tigadoli #define EMMC_TRACE(...)
102*bffde63dSSheetal Tigadoli #endif
103*bffde63dSSheetal Tigadoli 
104*bffde63dSSheetal Tigadoli #endif /* EMMC_H */
105