diff options
author | Kyungmin Park <kyungmin.park@samsung.com> | 2014-07-10 13:41:00 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-11-18 12:00:12 +0900 |
commit | c113707c002a995f7392cb3f7730746d7191385e (patch) | |
tree | 092b7d801ce70a93f66a4b8da0b35ff714c7b805 /arch/arm | |
parent | 923bbdb8b2636969a6ba6ceb29e54251ff40aeed (diff) | |
download | linux-3.10-c113707c002a995f7392cb3f7730746d7191385e.tar.gz linux-3.10-c113707c002a995f7392cb3f7730746d7191385e.tar.bz2 linux-3.10-c113707c002a995f7392cb3f7730746d7191385e.zip |
ARM: EXYNOS: add read/write SFR by smc call
This patch add SMC helper functions to access special SFRs.
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/include/asm/firmware.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-exynos/firmware.c | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/include/asm/firmware.h b/arch/arm/include/asm/firmware.h index 4e2879f6053..060c80d068a 100644 --- a/arch/arm/include/asm/firmware.h +++ b/arch/arm/include/asm/firmware.h @@ -50,6 +50,11 @@ struct firmware_ops { */ int (*resume)(void); /* + * Read/write SFRs + */ + int (*readsfr)(unsigned int addr, unsigned int *value); + int (*writesfr)(unsigned int addr, unsigned int value); + /* * Restores coprocessor 15 registers */ int (*c15resume)(u32 *regs); diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c index b93c42eb309..2cdec14e148 100644 --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c @@ -119,6 +119,18 @@ static int exynos_c15resume(u32 *regs) return 0; } +static int exynos_readsfr(unsigned int addr, unsigned int *value) +{ + *value = exynos_smc2(SMC_CMD_REG, SMC_REG_SFR_R(addr), 0, 0); + return 0; +} + +static int exynos_writesfr(unsigned int addr, unsigned int value) +{ + exynos_smc(SMC_CMD_REG, SMC_REG_SFR_W(addr), value, 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, @@ -129,6 +141,8 @@ static const struct firmware_ops exynos_firmware_ops = { #endif .suspend = exynos_suspend, .resume = exynos_resume, + .readsfr = exynos_readsfr, + .writesfr = exynos_writesfr, .c15resume = exynos_c15resume, }; |