2121
2222LOG_MODULE_REGISTER (ambiq_sdio , CONFIG_SDHC_LOG_LEVEL );
2323
24- #define CACHABLE_START_ADDR SSRAM_BASEADDR
2524#if defined(CONFIG_SOC_SERIES_APOLLO4X )
2625#define SDIO_BASE_ADDR SDIO_BASE
2726#define SDIO_ADDR_INTERVAL 1
@@ -551,13 +550,12 @@ static int ambiq_sdio_request(const struct device *dev, struct sdhc_command *cmd
551550 }
552551
553552 if (data ) {
554- #if defined(CONFIG_CACHE_MANAGEMENT ) && defined(CONFIG_DCACHE )
555- /* Clean Dcache before DMA write */
556- if (cmd_data .dir == AM_HAL_DATA_DIR_WRITE &&
557- (uint32_t )(data -> data ) >= CACHABLE_START_ADDR ) {
553+ #if CONFIG_SDHC_AMBIQ_HANDLE_CACHE
554+ if (!buf_in_nocache ((uintptr_t )data -> data , data -> blocks * data -> block_size )) {
555+ /* Clean Dcache before DMA write or after memset*/
558556 sys_cache_data_flush_range (data -> data , data -> blocks * data -> block_size );
559557 }
560- #endif
558+ #endif /* CONFIG_SDHC_AMBIQ_HANDLE_CACHE */
561559
562560#ifdef CONFIG_AMBIQ_SDIO_ASYNC
563561 k_sem_reset (dev_data -> async_sem );
@@ -572,17 +570,19 @@ static int ambiq_sdio_request(const struct device *dev, struct sdhc_command *cmd
572570 }
573571#endif /* CONFIG_AMBIQ_SDIO_ASYNC */
574572
575- #if defined(CONFIG_CACHE_MANAGEMENT ) && defined(CONFIG_DCACHE )
576- /* Invalidate Dcache after DMA read */
577- if (cmd_data .dir == AM_HAL_DATA_DIR_READ &&
578- (uint32_t )(data -> data ) >= CACHABLE_START_ADDR ) {
579- sys_cache_data_invd_range (data -> data , data -> blocks * data -> block_size );
573+ #if CONFIG_SDHC_AMBIQ_HANDLE_CACHE
574+ if (!buf_in_nocache ((uintptr_t )data -> data , data -> blocks * data -> block_size )) {
575+ /* Invalidate Dcache after DMA read */
576+ if (cmd_data .dir == AM_HAL_DATA_DIR_READ ) {
577+ sys_cache_data_invd_range (data -> data ,
578+ data -> blocks * data -> block_size );
579+ }
580580 }
581- #endif
581+ #endif /* CONFIG_SDHC_AMBIQ_HANDLE_CACHE */
582582
583583 } else {
584- ui32Status =
585- dev_data -> host -> ops -> execute_cmd ( dev_data -> host -> pHandle , & sdio_cmd , NULL );
584+ ui32Status = dev_data -> host -> ops -> execute_cmd ( dev_data -> host -> pHandle ,
585+ & sdio_cmd , NULL );
586586 }
587587 if ((ui32Status & 0xFFFF ) != AM_HAL_STATUS_SUCCESS ) {
588588 if ((ui32Status & 0xFFFF ) == AM_HAL_STATUS_TIMEOUT ) {
0 commit comments