63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
#ifndef __MMZ_ARCH_OPS_HEADER__
|
|
#define __MMZ_ARCH_OPS_HEADER__
|
|
|
|
#if defined(CONFIG_ARM64)
|
|
/* this function is used to change memory's property. */
|
|
static void dma_pages_remap(struct page *page, size_t size, pgprot_t prot) {}
|
|
|
|
static void dma_buffer_clear(struct page *page, size_t size)
|
|
{
|
|
memset(page_address(page), 0, size);
|
|
__flush_dcache_area(page_address(page), size);
|
|
}
|
|
|
|
static void mmb_dcache_flush(mmz_mmb_t *mmb)
|
|
{
|
|
__flush_dcache_area((void *)mmb->kvirt, (size_t)mmb->length);
|
|
}
|
|
|
|
static pgprot_t arch_kern_pgprot(int cache)
|
|
{
|
|
if (cache) {
|
|
return PAGE_KERNEL;
|
|
}
|
|
|
|
return __pgprot(PROT_NORMAL_NC);
|
|
}
|
|
|
|
#elif defined(CONFIG_ARM)
|
|
#include <asm/highmem.h>
|
|
#include <asm/pgtable.h>
|
|
|
|
extern void __dma_clear_buffer(struct page *page, size_t size);
|
|
|
|
static void dma_buffer_clear(struct page *page, size_t size)
|
|
{
|
|
__dma_clear_buffer(page, size);
|
|
}
|
|
|
|
static void mmb_dcache_flush(mmz_mmb_t *mmb)
|
|
{
|
|
__cpuc_flush_dcache_area((void *)mmb->kvirt, (size_t)mmb->length);
|
|
|
|
outer_flush_range(mmb->phys_addr, mmb->phys_addr + mmb->length);
|
|
}
|
|
|
|
static pgprot_t arch_kern_pgprot(int cache)
|
|
{
|
|
if (cache) {
|
|
return pgprot_kernel;
|
|
}
|
|
|
|
return pgprot_noncached(pgprot_kernel);
|
|
}
|
|
|
|
#else
|
|
#error no proper arch selected(CONFIG_ARM64/CONFIG_ARM)!
|
|
#endif
|
|
|
|
#endif
|