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 PBOOT_HAL_MEMORY_EMMC_DRV_H 8*91f16700Schasinglulu #define PBOOT_HAL_MEMORY_EMMC_DRV_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <drivers/delay_timer.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include "emmc_chal_types.h" 13*91f16700Schasinglulu #include "emmc_chal_sd.h" 14*91f16700Schasinglulu #include "emmc_csl_sdprot.h" 15*91f16700Schasinglulu #include "emmc_csl_sdcmd.h" 16*91f16700Schasinglulu #include "emmc_csl_sd.h" 17*91f16700Schasinglulu #include "emmc_brcm_rdb_sd4_top.h" 18*91f16700Schasinglulu 19*91f16700Schasinglulu #define CLK_SDIO_DIV_52MHZ 0x0 20*91f16700Schasinglulu #define SYSCFG_IOCR4_PAD_10MA 0x38000000 21*91f16700Schasinglulu 22*91f16700Schasinglulu #define SDCLK_CNT_PER_MS 52000 23*91f16700Schasinglulu #define BOOT_ACK_TIMEOUT (50 * SDCLK_CNT_PER_MS) 24*91f16700Schasinglulu #define BOOT_DATA_TIMEOUT (1000 * SDCLK_CNT_PER_MS) 25*91f16700Schasinglulu 26*91f16700Schasinglulu #define EMMC_BOOT_OK 0 27*91f16700Schasinglulu #define EMMC_BOOT_ERROR 1 28*91f16700Schasinglulu #define EMMC_BOOT_TIMEOUT 2 29*91f16700Schasinglulu #define EMMC_BOOT_INVALIDIMAGE 3 30*91f16700Schasinglulu #define EMMC_BOOT_NO_CARD 4 31*91f16700Schasinglulu 32*91f16700Schasinglulu #define EMMC_USER_AREA 0 33*91f16700Schasinglulu #define EMMC_BOOT_PARTITION1 1 34*91f16700Schasinglulu #define EMMC_BOOT_PARTITION2 2 35*91f16700Schasinglulu #define EMMC_USE_CURRENT_PARTITION 3 36*91f16700Schasinglulu 37*91f16700Schasinglulu #define EMMC_BOOT_PARTITION_SIZE (128*1024) 38*91f16700Schasinglulu #define EMMC_BLOCK_SIZE 512 39*91f16700Schasinglulu #define EMMC_DMA_SIZE (4*1024) 40*91f16700Schasinglulu 41*91f16700Schasinglulu /* 42*91f16700Schasinglulu * EMMC4.3 definitions 43*91f16700Schasinglulu * Table 6 EXT_CSD access mode 44*91f16700Schasinglulu * Access 45*91f16700Schasinglulu * Bits Access Name Operation 46*91f16700Schasinglulu * 00 Command Set The command set is changed according to the Cmd Set field of 47*91f16700Schasinglulu * the argument 48*91f16700Schasinglulu * 01 Set Bits The bits in the pointed uint8_t are set, 49*91f16700Schasinglulu * according to the 1 bits in the Value field. 50*91f16700Schasinglulu * 10 Clear Bits The bits in the pointed uint8_t are cleared, 51*91f16700Schasinglulu * according to the 1 bits in the Value field. 52*91f16700Schasinglulu * 11 Write Byte The Value field is written into the pointed uint8_t. 53*91f16700Schasinglulu */ 54*91f16700Schasinglulu 55*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_WRITE_BYTE 0X03000000 56*91f16700Schasinglulu 57*91f16700Schasinglulu /* Boot bus width1 BOOT_BUS_WIDTH 1 R/W [177] */ 58*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_BUS_WIDTH_OFFSET 0X00B10000 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* Boot configuration BOOT_CONFIG 1 R/W [179] */ 61*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_CONFIG_OFFSET 0X00B30000 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Bus width mode BUS_WIDTH 1 WO [183] */ 64*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BUS_WIDTH_OFFSET 0X00B70000 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* 67*91f16700Schasinglulu * Bit 6: BOOT_ACK (non-volatile) 68*91f16700Schasinglulu * 0x0 : No boot acknowledge sent (default) 69*91f16700Schasinglulu * 0x1 : Boot acknowledge sent during boot operation 70*91f16700Schasinglulu * Bit[5:3] : BOOT_PARTITION_ENABLE (non-volatile) 71*91f16700Schasinglulu * User selects boot data that will be sent to master 72*91f16700Schasinglulu * 0x0 : Device not boot enabled (default) 73*91f16700Schasinglulu * 0x1 : Boot partition 1 enabled for boot 74*91f16700Schasinglulu * 0x2 : Boot partition 2 enabled for boot 75*91f16700Schasinglulu * 0x3-0x6 : Reserved 76*91f16700Schasinglulu * 0x7 : User area enabled for boot 77*91f16700Schasinglulu * Bit[2:0] : BOOT_PARTITION_ACCESS 78*91f16700Schasinglulu * User selects boot partition for read and write operation 79*91f16700Schasinglulu * 0x0 : No access to boot partition (default) 80*91f16700Schasinglulu * 0x1 : R/W boot partition 1 81*91f16700Schasinglulu * 0x2 : R/W boot partition 2 82*91f16700Schasinglulu * 0x3-0x7 : Reserved 83*91f16700Schasinglulu */ 84*91f16700Schasinglulu 85*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_ACC_BOOT1 0X00000100 86*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_ACC_BOOT2 0X00000200 87*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_ACC_USER 0X00000000 88*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_EN_BOOT1 0X00004800 89*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_EN_BOOT2 0X00005000 90*91f16700Schasinglulu #define SDIO_HW_EMMC_EXT_CSD_BOOT_EN_USER 0X00007800 91*91f16700Schasinglulu 92*91f16700Schasinglulu #define SD_US_DELAY(x) udelay(x) 93*91f16700Schasinglulu 94*91f16700Schasinglulu #endif 95