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