ARM: EXYNOS: Add exynos_smc2 to read SFR
authorKyungmin Park <kyungmin.park@samsung.com>
Thu, 10 Jul 2014 04:38:39 +0000 (13:38 +0900)
committerChanho Park <chanho61.park@samsung.com>
Tue, 18 Nov 2014 03:00:12 +0000 (12:00 +0900)
Some SFR is restricted to access from AP side.
so use this smc call to access these SFRs.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
arch/arm/mach-exynos/exynos-smc.S
arch/arm/mach-exynos/smc.h

index 2e27aa3..7376169 100644 (file)
@@ -20,3 +20,16 @@ ENTRY(exynos_smc)
        smc     #0
        ldmfd   sp!, {r4-r11, pc}
 ENDPROC(exynos_smc)
+
+/*
+ * Function signature: u32 exynos_smc2(u32 cmd, u32 arg1, u32 arg2, u32 arg3)
+ * return r2
+ */
+
+ENTRY(exynos_smc2)
+       stmfd   sp!, {r4-r11, lr}
+       dsb
+       smc     #0
+       mov     r0, r2
+       ldmfd   sp!, {r4-r11, pc}
+ENDPROC(exynos_smc2)
index cb458ac..af61e97 100644 (file)
 #define SMC_CMD_L2X0SETUP2     (-23)
 #define SMC_CMD_L2X0INVALL     (-24)
 #define SMC_CMD_L2X0DEBUG      (-25)
+/* For Register Access */
+#define SMC_CMD_REG            (-101)
+#define SMC_REG_SFR_W(a)       ((0x1 << 30) | ((a) >> 2))
+#define SMC_REG_SFR_R(a)       ((0x3 << 30) | ((a) >> 2))
 
 extern void exynos_smc(u32 cmd, u32 arg1, u32 arg2, u32 arg3);
+extern u32 exynos_smc2(u32 cmd, u32 arg1, u32 arg2, u32 arg3);
 
 enum {
        EXYNOS_DO_IDLE_NORMAL,