#include <linux/platform_device.h>
#include <linux/dma-contiguous.h>
#include <asm/compiler.h>
+#include <linux/cma.h>
#include <linux/arm-smccc.h>
#undef pr_fmt
#define pr_fmt(fmt) "secmon: " fmt
int ret;
int mem_size;
struct page *page;
+ unsigned int clear[2] = {};
if (!of_property_read_u32(np, "in_base_func", &id))
phy_in_base = get_sharemem_info(id);
return ret;
}
+ if (of_property_read_u32_array(np, "clear_range", clear, 2))
+ pr_info("can't fine clear_range\n");
+ else
+ pr_info("clear_range:%x %x\n", clear[0], clear[1]);
+
page = dma_alloc_from_contiguous(&pdev->dev, mem_size >> PAGE_SHIFT, 0);
if (!page) {
pr_err("alloc page failed, ret:%p\n", page);
return -ENOMEM;
}
+ if (clear[0]) {
+ struct page *page = phys_to_page(clear[0]);
+ int cnt = clear[1] / PAGE_SIZE;
+
+ cma_mmu_op(page, cnt, 0);
+ }
+
if (pfn_valid(__phys_to_pfn(phy_out_base)))
sharemem_out_base = (void __iomem *)
__phys_to_virt(phy_out_base);