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);
return ret;
}
+void __init secmon_clear_cma_mmu(void)
+{
+ struct device_node *np;
+ unsigned int clear[2] = {};
+
+ np = of_find_node_by_name(NULL, "secmon");
+ if (!np)
+ return;
+
+ 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]);
+
+ if (clear[0]) {
+ struct page *page = phys_to_page(clear[0]);
+ int cnt = clear[1] / PAGE_SIZE;
+
+ cma_mmu_op(page, cnt, 0);
+ }
+}
+
static const struct of_device_id secmon_dt_match[] = {
{ .compatible = "amlogic, secmon" },
{ /* sentinel */ },
#ifdef CONFIG_AMLOGIC_CMA
#include <asm/pgtable.h>
#include <linux/amlogic/aml_cma.h>
+#include <linux/amlogic/secmon.h>
#endif /* CONFIG_AMLOGIC_CMA */
#include "cma.h"
if (ret)
return ret;
}
-
+#ifdef CONFIG_AMLOGIC_SEC
+ /*
+ * A73 cache speculate prefetch may cause SError when boot.
+ * because it may prefetch cache line in secure memory range
+ * which have already reserved by bootloader. So we must
+ * clear mmu of secmon range before A73 core boot up
+ */
+ secmon_clear_cma_mmu();
+#endif
return 0;
}
+#ifdef CONFIG_AMLOGIC_CMA
+early_initcall(cma_init_reserved_areas);
+#else
core_initcall(cma_init_reserved_areas);
+#endif
/**
* cma_init_reserved_mem() - create custom contiguous area from reserved memory