diff --git a/components/mm/ioremap.c b/components/mm/ioremap.c index a3b8a9e1f2eb243b7d21a15f960f128282dc989f..f72a8b93542beded1b606c1513a48bf9a62c4224 100644 --- a/components/mm/ioremap.c +++ b/components/mm/ioremap.c @@ -27,6 +27,7 @@ size_t rt_ioremap_size; enum ioremap_type { MM_AREA_TYPE_PHY, + MM_AREA_TYPE_PHY_WT, MM_AREA_TYPE_PHY_CACHED }; @@ -52,6 +53,9 @@ static void *_ioremap_type(void *paddr, size_t size, enum ioremap_type type) case MM_AREA_TYPE_PHY: attr = MMU_MAP_K_DEVICE; break; + case MM_AREA_TYPE_PHY_WT: + attr = MMU_MAP_K_RW; + break; case MM_AREA_TYPE_PHY_CACHED: attr = MMU_MAP_K_RWCB; break; @@ -82,6 +86,11 @@ void *rt_ioremap_nocache(void *paddr, size_t size) return _ioremap_type(paddr, size, MM_AREA_TYPE_PHY); } +void *rt_ioremap_wt(void *paddr, size_t size) +{ + return _ioremap_type(paddr, size, MM_AREA_TYPE_PHY_WT); +} + void *rt_ioremap_cached(void *paddr, size_t size) { return _ioremap_type(paddr, size, MM_AREA_TYPE_PHY_CACHED); diff --git a/components/mm/ioremap.h b/components/mm/ioremap.h index dc219630a39b82f69b1f4afe2713abe6f84748c8..7ac9d196a9c90caef870f756006e52a6d6fe17cb 100644 --- a/components/mm/ioremap.h +++ b/components/mm/ioremap.h @@ -32,7 +32,8 @@ extern "C" { void *rt_ioremap(void *paddr, size_t size); void *rt_ioremap_nocache(void *paddr, size_t size); -void *rt_ioremap_cached (void *paddr, size_t size); +void *rt_ioremap_cached(void *paddr, size_t size); +void *rt_ioremap_wt(void *paddr, size_t size); void rt_iounmap(volatile void *addr); extern void *rt_ioremap_start;