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