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