123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- * Copyright (c) 2017 Actions Semiconductor Co., Ltd
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- /**
- * @file
- * @brief SPICACHE profile interface for Actions SoC
- */
- #ifndef __SPICACHE_H__
- #define __SPICACHE_H__
- #include <zephyr/types.h>
- #define SPI0_BASE_ADDR 0x10000000
- #define SPI0_BASE_END_ADDR 0x14000000
- #define SPI0_UNCACHE_ADDR 0x14000000
- #define SPI0_UNCACHE_END_ADDR 0x18000000
- #define SPI1_BASE_ADDR 0x38000000
- #define SPI1_BASE_END_ADDR 0x3C000000
- #define SPI1_UNCACHE_ADDR 0x3C000000
- #define SPI1_UNCACHE_END_ADDR 0x40000000
- #define SPI1_CACHE_WT_WNA_ADDR 0x34000000
- #define SPI1_CACHE_WT_WNA_END_ADDR 0x38000000
- typedef enum __SPI_CACHE_OPS
- {
- SPI_CACHE_FLUSH = 0x01,
- SPI_CACHE_INVALIDATE = 0x02,
- SPI_WRITEBUF_FLUSH = 0x03,
- SPI_CACHE_FLUSH_ALL = 0x04,
- SPI_CACHE_INVALID_ALL = 0x05,
- SPI_CACHE_FLUSH_INVALID = 0x06,
- SPI_CACHE_FLUSH_INVALID_ALL = 0x07,
- }SPI_CACHE_OPS;
- typedef enum {
- SPI0_CACHE_MASTER_CPU, //always on
- SPI0_CACHE_MASTER_DMA,
- SPI0_CACHE_MASTER_SDMA,
- SPI0_CACHE_MASTER_DE,
- SPI1_CACHE_MASTER_CPU, //always on
- SPI1_CACHE_MASTER_GPU,
- SPI1_CACHE_MASTER_DMA,
- SPI1_CACHE_MASTER_SDMA,
- SPI1_CACHE_MASTER_DE,
- }SPI_CACHE_MASTER;
- typedef enum {
- SPI0_CACHE_PRIORITY_POLL = 0,
- SPI0_CACHE_PRIORITY_CACHEMISS_DMA_SDMA_DE,
- SPI0_CACHE_PRIORITY_SDMA_CACHEMISS_DMA_DE,
- SPI0_CACHE_PRIORITY_DE_SDMA_CACHEMISS_DMA,
- SPI1_CACHE_PRIORITY_POLL = 0x10,
- SPI1_CACHE_PRIORITY_SDMA_ICACHEMISS_DCACHEMISS_DMA_GPU_DER_DEW,
- SPI1_CACHE_PRIORITY_DMA_ICACHEMISS_DCACHEMISS_SDMA_GPU_DER_DEW,
- SPI1_CACHE_PRIORITY_DER_DEW_SDMA_GPU_DMA_ICACHEMISS_DCACHEMISS,
- SPI1_CACHE_PRIORITY_GPU_SDMA_DER_DEW_ICACHEMISS_DCACHEMISS_DMA,
- SPI1_CACHE_PRIORITY_DMA_DER_DEW_SDMA_GPU_ICACHEMISS_DCACHEMISS,
- }SPI_CACHE_PRIORITY;
- #ifdef CONFIG_SOC_SPICACHE_PROFILE
- struct spicache_profile {
- int spi_id;
- /* must aligned to 64-byte */
- uint32_t start_addr;
- uint32_t end_addr;
- uint32_t limit_addr;
- /* timestamp, ms */
- int64_t start_time;
- int64_t end_time;
- /* hit/miss in user address range */
- uint32_t hit_cnt;
- uint32_t miss_cnt;
- /* hit/miss in all address range */
- uint32_t total_hit_cnt;
- uint32_t total_miss_cnt;
- /* spi1 cache miss/hit count */
- uint32_t dma_hit_cnt;
- uint32_t dma_miss_cnt;
- };
- int spicache_profile_start(struct spicache_profile *profile);
- int spicache_profile_stop(struct spicache_profile *profile);
- int spicache_profile_get_data(struct spicache_profile *profile);
- #endif
- void spi1_cache_ops(SPI_CACHE_OPS ops, void* addr, int size);
- void spi1_cache_ops_wait_finshed(void);
- #define buf_is_psram(buf) (buf_is_psram_cache(buf) || buf_is_psram_wt_wna(buf))
- #define buf_is_psram_un(buf) ((((uint32_t)buf) >= SPI1_UNCACHE_ADDR) && (((uint32_t)buf) < SPI1_UNCACHE_END_ADDR))
- #define buf_is_psram_cache(buf) ((((uint32_t)buf) >= SPI1_BASE_ADDR) && (((uint32_t)buf) < SPI1_BASE_END_ADDR))
- #define buf_is_psram_wt_wna(buf) (((uint32_t)buf) >= SPI1_CACHE_WT_WNA_ADDR && (((uint32_t)buf) < SPI1_CACHE_WT_WNA_END_ADDR))
- #define buf_is_nor(buf) ((((uint32_t)buf) >= SPI0_BASE_ADDR) && (((uint32_t)buf) < SPI0_BASE_END_ADDR))
- #define buf_is_nor_un(buf) ((((uint32_t)buf) >= SPI0_UNCACHE_ADDR) && (((uint32_t)buf) < SPI0_UNCACHE_END_ADDR))
- extern void * cache_to_uncache(void *vaddr);
- extern void * cache_to_uncache_by_master(void *vaddr, SPI_CACHE_MASTER master_id);
- extern void * uncache_to_cache(void *paddr);
- extern void * uncache_to_cache_by_master(void *paddr, SPI_CACHE_MASTER master_id);
- extern void * uncache_to_wt_wna_cache(void *paddr);
- extern void * cache_to_wt_wna_cache(void *vaddr);
- extern void * wt_wna_cache_to_cache(void *vaddr);
- int spicache_master_enable(int spi_id, SPI_CACHE_MASTER master_id);
- int spicache_master_disable(int spi_id, SPI_CACHE_MASTER master_id);
- int spicache_set_priority(int spi_id, SPI_CACHE_PRIORITY priority);
- #endif /* __SPICACHE_H__ */
|