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_API_H 8*91f16700Schasinglulu #define EMMC_API_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include "bcm_emmc.h" 11*91f16700Schasinglulu #include "emmc_pboot_hal_memory_drv.h" 12*91f16700Schasinglulu 13*91f16700Schasinglulu #ifdef INCLUDE_EMMC_DRIVER_ERASE_CODE 14*91f16700Schasinglulu /* 15*91f16700Schasinglulu * The erasable unit of the eMMC is the Erase Group 16*91f16700Schasinglulu * Erase group is measured in write blocks which 17*91f16700Schasinglulu * are the basic writable units of the Device 18*91f16700Schasinglulu * EMMC_ERASE_GROUP_SIZE is the number of writeable 19*91f16700Schasinglulu * units (each unit is 512 bytes) 20*91f16700Schasinglulu */ 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* Start address (sector) */ 23*91f16700Schasinglulu #define EMMC_ERASE_START_BLOCK 0x0 24*91f16700Schasinglulu /* Number of blocks to be erased */ 25*91f16700Schasinglulu #define EMMC_ERASE_BLOCK_COUNT 0x1 26*91f16700Schasinglulu 27*91f16700Schasinglulu #define EMMC_ERASE_USER_AREA 0 28*91f16700Schasinglulu #define EMMC_ERASE_BOOT_PARTITION1 1 29*91f16700Schasinglulu #define EMMC_ERASE_BOOT_PARTITION2 2 30*91f16700Schasinglulu 31*91f16700Schasinglulu /* eMMC partition to be erased */ 32*91f16700Schasinglulu #define EMMC_ERASE_PARTITION EMMC_ERASE_USER_AREA 33*91f16700Schasinglulu #endif 34*91f16700Schasinglulu 35*91f16700Schasinglulu uint32_t bcm_emmc_init(bool card_rdy_only); 36*91f16700Schasinglulu void emmc_deinit(void); 37*91f16700Schasinglulu 38*91f16700Schasinglulu #ifdef INCLUDE_EMMC_DRIVER_ERASE_CODE 39*91f16700Schasinglulu int emmc_erase(uintptr_t mem_addr, size_t num_of_blocks, uint32_t partition); 40*91f16700Schasinglulu #endif 41*91f16700Schasinglulu 42*91f16700Schasinglulu uint32_t emmc_partition_select(uint32_t partition); 43*91f16700Schasinglulu uint32_t emmc_read(uintptr_t mem_addr, uintptr_t storage_addr, 44*91f16700Schasinglulu size_t storage_size, size_t bytes_to_read); 45*91f16700Schasinglulu uint32_t emmc_write(uintptr_t mem_addr, uintptr_t data_addr, 46*91f16700Schasinglulu size_t bytes_to_write); 47*91f16700Schasinglulu #endif /* EMMC_API_H */ 48