Skip to content

Commit

Permalink
Squashed 'drivers/mss/mss_mmc/' changes from a2e5b75..4dcdc85
Browse files Browse the repository at this point in the history
62358b9 updated erase fuction as per coding style
d528b76 updated erase function parameter names and dma interrupt clear first then fill the next dma address
4307cb5 update erase functionality of eMMC and SD
c740ce7 add erase functionality for eMMC/SD

git-subtree-dir: drivers/mss/mss_mmc
git-subtree-split: 4dcdc8562d41c80ec3bf94e0c53be76d93cac300
  • Loading branch information
Padmarao Begari authored and Padmarao Begari committed Dec 8, 2021
1 parent 8c630c9 commit 6b8cbf4
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 2 deletions.
74 changes: 72 additions & 2 deletions mss_mmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ static uint8_t g_mmc_cq_init_complete;
static uint8_t g_mmc_is_multi_blk = MMC_CLEAR;
static uint8_t g_sdio_fun_num;
static uint8_t g_device_hpi_suport;
/* eMMC - 0, SD card - 1 */
static uint8_t g_mmc_card_sd;

#ifdef MSS_MMC_INTERNAL_APIS
static uint8_t g_device_hpi_set = MMC_CLEAR;
Expand Down Expand Up @@ -315,6 +317,7 @@ MSS_MMC_init
g_transfer_complete_handler_t = NULL_POINTER;
g_mmc_init_complete = MMC_CLEAR;
g_sdio_fun_num = MMC_CLEAR;
g_mmc_card_sd = MMC_CLEAR;
g_mmc_trs_status.state = MSS_MMC_NOT_INITIALISED;
/* Set RCA default value */
sdcard_RCA = RCA_VALUE;
Expand Down Expand Up @@ -670,6 +673,7 @@ MSS_MMC_init

if (MSS_MMC_TRANSFER_SUCCESS == ret_status)
{
g_mmc_card_sd = MMC_SET;
ret_status = MSS_MMC_INIT_SUCCESS;
g_mmc_trs_status.state = MSS_MMC_INIT_SUCCESS;
}
Expand Down Expand Up @@ -821,6 +825,7 @@ MSS_MMC_single_block_read
/* Abort if any errors*/
if ((SRS12_ERROR_STATUS_MASK & isr_errors) == MMC_CLEAR)
{
mmc_delay(MASK_8BIT);
/*
* Ensure no error fields in Card Status register are set and
* that the device is idle before this function returns.
Expand Down Expand Up @@ -1701,7 +1706,72 @@ mss_mmc_status_t MSS_MMC_sdio_single_block_write
}
return (ret_status);
}
/*-------------------------------------------------------------------------*//**
* See "mss_mmc.h" for details of how to use this function.
*/
mss_mmc_status_t MSS_MMC_erase
(
uint32_t start,
uint32_t count
)
{
uint32_t start_address;
uint32_t end_address;
uint32_t start_cmd;
uint32_t end_cmd;

cif_response_t response_status = TRANSFER_IF_FAIL;
mss_mmc_status_t ret_status = MSS_MMC_TRANSFER_FAIL;

if (g_mmc_init_complete == MMC_SET)
{
if (g_mmc_card_sd == MMC_CLEAR) /* eMMC*/
{
start_cmd = MMC_CMD_35_ERASE_GROUP_START;
end_cmd = MMC_CMD_36_ERASE_GROUP_END;
}
else /* SD Card */
{
start_cmd = SD_CMD_32_ERASE_WR_BLK_START;
end_cmd = SD_CMD_33_ERASE_WR_BLK_END;
}
start_address = start;
end_address = start + count - MMC_SET;

response_status = cif_send_cmd(start_address,
start_cmd,
MSS_MMC_RESPONSE_R1);

if (TRANSFER_IF_SUCCESS == response_status)
{
response_status = cif_send_cmd(end_address,
end_cmd,
MSS_MMC_RESPONSE_R1);
if (TRANSFER_IF_SUCCESS == response_status)
{
response_status = cif_send_cmd(MMC_CLEAR,
MMC_CMD_38_ERASE,
MSS_MMC_RESPONSE_R1B);

if (TRANSFER_IF_FAIL != response_status)
{
response_status = check_device_status(response_status);
}

if (TRANSFER_IF_SUCCESS == response_status)
{
ret_status = MSS_MMC_TRANSFER_SUCCESS;
}
}
}
}
else
{
ret_status = MSS_MMC_NOT_INITIALISED;
}

return ret_status;
}
/*-------------------------------------------------------------------------*//**
* See "mss_mmc.h" for details of how to use this function.
*/
Expand Down Expand Up @@ -1847,7 +1917,7 @@ mss_mmc_status_t MSS_MMC_cq_init(void)
}
else
{
ret_status = MSS_MMC_CQ_INIT_FAILURE;
ret_status = MSS_MMC_NOT_INITIALISED;
}
return ret_status;
}
Expand Down Expand Up @@ -2214,9 +2284,9 @@ uint8_t mmc_main_plic_IRQHandler(void)
address = (uint32_t)address64;
highaddr = (uint32_t)(address64 >> MMC_64BIT_UPPER_ADDR_SHIFT);

MMC->SRS12 = SRS12_DMA_INTERRUPT;
MMC->SRS22 = address;
MMC->SRS23 = highaddr;
MMC->SRS12 = SRS12_DMA_INTERRUPT;
}
else if ((trans_status_isr & SRS12_CMD_QUEUING_INT) != MMC_CLEAR)
{
Expand Down
49 changes: 49 additions & 0 deletions mss_mmc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1297,7 +1297,56 @@ MSS_MMC_cq_read
uint8_t *dest,
uint32_t size
);
/*-------------------------------------------------------------------------*//**
The MSS_MMC_erase() function is used to erase the eMMC/SD device blocks.
@param start
Specifies the sector number in the eMMC/SD device from where the data is
to be erased.
@param count
Specifies the number of sectors to be erased.
@return
This function returns a value of type mss_mmc_status_t which specifies the
status of the operation.
Example:
The following example shows how to initialize the device and perform a erase
functionality.
@code
#define SECT_NUMBER 0x01u
#define NUMBER_OF_SECTORS 0x100u
mss_mmc_cfg_t g_mmc0;
mss_mmc_status_t ret_status;
g_mmc0.clk_rate = MSS_MMC_CLOCK_25MHZ;
g_mmc0.card_type = MSS_MMC_CARD_TYPE_MMC;
g_mmc0.data_bus_width = MSS_MMC_DATA_WIDTH_4BIT;
g_mmc0.bus_speed_mode = MSS_MMC_MODE_LEGACY;
g_mmc0.bus_voltage = MSS_MMC_3_3V_BUS_VOLTAGE;
ret_status = MSS_MMC_init(&g_mmc0);
if (MSS_MMC_INIT_SUCCESS == ret_status)
{
ret_status = MSS_MMC_erase(SECT_NUMBER, NUMBER_OF_SECTORS);
if (MSS_MMC_TRANSFER_SUCCESS == ret_status)
{
//erase success
}
}
@endcode
*/
mss_mmc_status_t
MSS_MMC_erase
(
uint32_t start,
uint32_t count
);
#ifdef __cplusplus
}
#endif
Expand Down
5 changes: 5 additions & 0 deletions mss_mmc_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,18 @@ extern "C"
#define MMC_CMD_1_SEND_OP_COND 1u /* R3 Rsp */
#define MMC_CMD_39_FAST_IO 39u /* R4 Rsp */
#define MMC_CMD_40_GO_IRQ_STATE 40u /* R5 Rsp */
#define MMC_CMD_35_ERASE_GROUP_START 35u /* R1 Rsp */
#define MMC_CMD_36_ERASE_GROUP_END 36u /* R1 Rsp */
#define MMC_CMD_38_ERASE 38u /* R1b Rsp */

#define SD_CMD_8_SEND_IF_COND 8u /* R7 Rsp */
#define SD_ACMD_41_SEND_OP_COND 41u /* R3 Rsp */
#define SD_ACMD_42_SET_CLR_CARD_DETECT 42u /* R1 Rsp */

#define SD_CMD_11_VOLAGE_SWITCH 11u /* R1 Rsp */
#define SD_CMD_19_SEND_TUNING_BLK 19u /* R1 Rsp */
#define SD_CMD_32_ERASE_WR_BLK_START 32u /* R1 Rsp */
#define SD_CMD_33_ERASE_WR_BLK_END 33u /* R1 Rsp */
#define SD_CMD_55 55u

#define SD_CMD_5 5u /* R4 Rsp */
Expand Down

0 comments on commit 6b8cbf4

Please sign in to comment.