fatfs: Add trim ioctl call, set FF_USE_TRIM as default option.

FF_USE_TRIM is set by default with this commit. Fatfs invokes disk_ioctl
with CTRL_TRIM to erase the sectors calling sdmmc_erase_sectors to choose the right
argument for the erase operation based on media type.
This commit is contained in:
Vamshi Gajjela 2022-03-05 16:35:37 +05:30
parent ffdbeee9f6
commit 964592e189
2 changed files with 30 additions and 1 deletions

View File

@ -67,6 +67,23 @@ DRESULT ff_sdmmc_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)
return RES_OK; return RES_OK;
} }
#if FF_USE_TRIM
DRESULT ff_sdmmc_trim (BYTE pdrv, DWORD start_sector, DWORD sector_count)
{
sdmmc_card_t* card = s_cards[pdrv];
assert(card);
sdmmc_erase_arg_t arg;
arg = sdmmc_can_discard(card) == ESP_OK ? SDMMC_DISCARD_ARG : SDMMC_ERASE_ARG;
esp_err_t err = sdmmc_erase_sectors(card, start_sector, sector_count, arg);
if (unlikely(err != ESP_OK)) {
ESP_LOGE(TAG, "sdmmc_erase_sectors failed (%d)", err);
return RES_ERROR;
}
return RES_OK;
}
#endif //FF_USE_TRIM
DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff) DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff)
{ {
sdmmc_card_t* card = s_cards[pdrv]; sdmmc_card_t* card = s_cards[pdrv];
@ -82,6 +99,18 @@ DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff)
return RES_OK; return RES_OK;
case GET_BLOCK_SIZE: case GET_BLOCK_SIZE:
return RES_ERROR; return RES_ERROR;
#if FF_USE_TRIM
case CTRL_TRIM:
/*
* limitation with sector erase when used in SDSPI mode
* hence return if host is SPI.
*/
if ((card->host.flags & SDMMC_HOST_FLAG_SPI) != 0) {
return RES_ERROR;
}
return ff_sdmmc_trim (pdrv, *((DWORD*)buff), //start_sector
(*((DWORD*)buff + 1) - *((DWORD*)buff) + 1)); //sector_count
#endif //FF_USE_TRIM
} }
return RES_ERROR; return RES_ERROR;
} }

View File

@ -235,7 +235,7 @@
/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */ / f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */
#define FF_USE_TRIM 0 #define FF_USE_TRIM 1
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable) /* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
/ To enable Trim function, also CTRL_TRIM command should be implemented to the / To enable Trim function, also CTRL_TRIM command should be implemented to the
/ disk_ioctl() function. */ / disk_ioctl() function. */