From 2e67231f10ed0b05c2bacfdd05774fe21315d6da Mon Sep 17 00:00:00 2001 From: Gu1 Date: Mon, 21 Jan 2013 04:13:56 +0100 Subject: [PATCH] ARM: EXYNOS: Add secure firmware support for l2x0 init Conflicts: arch/arm/mm/cache-l2x0.c --- arch/arm/mach-exynos/firmware.c | 19 +++++++++++++++++++ arch/arm/mm/cache-l2x0.c | 3 +++ 2 files changed, 22 insertions(+) diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c index eb91d23..c200f77 100644 --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c @@ -16,6 +16,7 @@ #include +#include #include #include "common.h" @@ -64,10 +65,28 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) return 0; } +extern struct l2x0_regs l2x0_saved_regs; +#define L2_AUX_VAL 0x7C470001 +#define L2_AUX_MASK 0xC200ffff + +static int exynos_l2x0_init(void) +{ + exynos_smc(SMC_CMD_L2X0SETUP1, l2x0_saved_regs.tag_latency, + l2x0_saved_regs.data_latency, + l2x0_saved_regs.prefetch_ctrl); + exynos_smc(SMC_CMD_L2X0SETUP2, l2x0_saved_regs.pwr_ctrl, + L2_AUX_VAL, L2_AUX_MASK); + exynos_smc(SMC_CMD_L2X0INVALL, 0, 0, 0); + exynos_smc(SMC_CMD_L2X0CTRL, 1, 0, 0); + return 0; +} + + static const struct firmware_ops exynos_firmware_ops = { .do_idle = exynos_do_idle, .set_cpu_boot_addr = exynos_set_cpu_boot_addr, .cpu_boot = exynos_cpu_boot, + .l2x0_init = exynos_l2x0_init, }; void __init exynos_firmware_init(void) diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index efc5cab..7367bef 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "cache-tauros3.h" #include "cache-aurora-l2.h" @@ -1504,6 +1505,8 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask) if (data->of_parse) data->of_parse(np, &aux_val, &aux_mask); + call_firmware_op(l2x0_init); + if (cache_id_part_number_from_dt) cache_id = cache_id_part_number_from_dt; else -- 1.9.1