Browse Source

Add cache flushing to the ChibiOS FATFS/PETITFS block routines. Required for STM32F7. This should really be in the ChibiOS DMA routines.

remotes/origin_old/release/v2.9
inmarket 4 years ago
parent
commit
8bf95a1128
  1. 1
      changelog.txt
  2. 28
      src/gfile/gfile_fatfs_diskio_chibios.c
  3. 3
      src/gfile/gfile_petitfs_diskio_chibios.c

1
changelog.txt

@ -61,6 +61,7 @@ FEATURE: Added the new color GFXTRANSPARENT - only available for RGB888 pixel fo
NOTE: Alpha support in RGB888 requies an alpha capable display (STM32LTDC 2nd display only currently)
NOTE: Alpha support in RGB888 is NOT the standard ARGB8888 format. Only use AHTML2COLOR() and ARGB2COLOR() to create alpha colors.
FEATURE: Added nullpointer checks to GDISP image functions (with new error code GDISP_IMAGE_ERR_NULLPOINTER)
FIX: Add cache flushing to the ChibiOS FATFS/PETITFS block drivers. Needed for STM32F7 chips. This should really be in the ChibiOS DMA routines.
*** Release 2.7 ***

28
src/gfile/gfile_fatfs_diskio_chibios.c

@ -23,11 +23,6 @@ extern SDCDriver SDCD1;
#error "MMC_SPI or SDC driver must be specified"
#endif
#if HAL_USE_RTC
#include "chrtclib.h"
extern RTCDriver RTCD1;
#endif
/*-----------------------------------------------------------------------*/
/* Correspondence between physical drive number and physical drive. */
@ -121,6 +116,7 @@ DRESULT disk_read (
return RES_NOTRDY;
if (mmcStartSequentialRead(&MMCD1, sector))
return RES_ERROR;
dmaBufferFlush(buff, MMCSD_BLOCK_SIZE*count);
while (count > 0) {
if (mmcSequentialRead(&MMCD1, buff))
return RES_ERROR;
@ -129,13 +125,16 @@ DRESULT disk_read (
}
if (mmcStopSequentialRead(&MMCD1))
return RES_ERROR;
dmaBufferInvalidate(buff, MMCSD_BLOCK_SIZE*count);
return RES_OK;
#else
case SDC:
if (blkGetDriverState(&SDCD1) != BLK_READY)
return RES_NOTRDY;
dmaBufferFlush(buff, MMCSD_BLOCK_SIZE*count);
if (sdcRead(&SDCD1, sector, buff, count))
return RES_ERROR;
dmaBufferInvalidate(buff, MMCSD_BLOCK_SIZE*count);
return RES_OK;
#endif
}
@ -164,6 +163,7 @@ DRESULT disk_write (
return RES_WRPRT;
if (mmcStartSequentialWrite(&MMCD1, sector))
return RES_ERROR;
dmaBufferFlush(buff, MMCSD_BLOCK_SIZE*count);
while (count > 0) {
if (mmcSequentialWrite(&MMCD1, buff))
return RES_ERROR;
@ -177,6 +177,7 @@ DRESULT disk_write (
case SDC:
if (blkGetDriverState(&SDCD1) != BLK_READY)
return RES_NOTRDY;
dmaBufferFlush(buff, MMCSD_BLOCK_SIZE*count);
if (sdcWrite(&SDCD1, sector, buff, count))
return RES_ERROR;
return RES_OK;
@ -241,14 +242,19 @@ DRESULT disk_ioctl (
return RES_PARERR;
}
DWORD get_fattime(void) {
#if HAL_USE_RTC
return rtcGetTimeFat(&RTCD1);
extern RTCDriver RTCD1;
DWORD get_fattime(void) {
RTCDateTime timespec;
rtcGetTime(&RTCD1, &timespec);
return rtcConvertDateTimeToFAT(&timespec);
}
#else
return ((uint32_t)0 | (1 << 16)) | (1 << 21); /* wrong but valid time */
DWORD get_fattime(void) {
return ((uint32_t)0 | (1 << 16)) | (1 << 21); /* wrong but valid time */
}
#endif
}
#endif // GFX_USE_GFILE && GFILE_NEED_FATFS && GFX_USE_OS_CHIBIOS && !GFILE_FATFS_EXTERNAL_LIB

3
src/gfile/gfile_petitfs_diskio_chibios.c

@ -71,7 +71,8 @@ DRESULT disk_readp (
if (sdcRead(&SDCD1, sector, sectBuf, 1))
return RES_ERROR;
#endif
sectpos = sector;
sectpos = sector;
dmaBufferInvalidate(sectBuf, sizeof(sectBuf));
}
memcpy(buff, sectBuf + offset, count);
return RES_OK;

Loading…
Cancel
Save