diff options
Diffstat (limited to 'drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c')
-rw-r--r-- | drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c | 86 |
1 files changed, 29 insertions, 57 deletions
diff --git a/drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c b/drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c index c65481810927..3baf3d96d41a 100644 --- a/drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c +++ b/drivers/gpu/arm/midgard/platform/juno_soc/mali_kbase_config_juno_soc.c @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2011-2016 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2011-2015 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -66,76 +66,48 @@ struct kbase_pm_callback_conf pm_callbacks = { }; /* - * Juno Protected Mode integration + * Juno Secure Mode integration */ /* SMC Function Numbers */ -#define JUNO_SMC_PROTECTED_ENTER_FUNC 0xff06 -#define JUNO_SMC_PROTECTED_RESET_FUNC 0xff07 +#define JUNO_SMC_SECURE_ENABLE_FUNC 0xff06 +#define JUNO_SMC_SECURE_DISABLE_FUNC 0xff07 -static int juno_protected_mode_enter(struct kbase_device *kbdev) +static int juno_secure_mode_enable(struct kbase_device *kbdev) { - /* T62X in SoC detected */ - u64 ret = kbase_invoke_smc(SMC_OEN_SIP, - JUNO_SMC_PROTECTED_ENTER_FUNC, false, - 0, 0, 0); - return ret; -} - -/* TODO: Remove these externs, reset should should be done by the firmware */ -extern void kbase_reg_write(struct kbase_device *kbdev, u16 offset, u32 value, - struct kbase_context *kctx); - -extern u32 kbase_reg_read(struct kbase_device *kbdev, u16 offset, - struct kbase_context *kctx); - -static int juno_protected_mode_reset(struct kbase_device *kbdev) -{ - - /* T62X in SoC detected */ - u64 ret = kbase_invoke_smc(SMC_OEN_SIP, - JUNO_SMC_PROTECTED_RESET_FUNC, false, - 0, 0, 0); - - /* TODO: Remove this reset, it should be done by the firmware */ - kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_COMMAND), - GPU_COMMAND_HARD_RESET, NULL); - - while ((kbase_reg_read(kbdev, GPU_CONTROL_REG(GPU_IRQ_RAWSTAT), NULL) - & RESET_COMPLETED) != RESET_COMPLETED) - ; + u32 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id; - return ret; + if (gpu_id == GPU_ID_MAKE(GPU_ID_PI_T62X, 0, 1, 0) && + kbdev->reg_start == 0x2d000000) { + /* T62X in SoC detected */ + u64 ret = kbase_invoke_smc(SMC_OEN_SIP, + JUNO_SMC_SECURE_ENABLE_FUNC, false, + 0, 0, 0); + return ret; + } + + return -EINVAL; /* Not supported */ } -static bool juno_protected_mode_supported(struct kbase_device *kbdev) +static int juno_secure_mode_disable(struct kbase_device *kbdev) { u32 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id; - /* - * Protected mode is only supported for the built in GPU - * _and_ only if the right firmware is running. - * - * Given that at init time the GPU is not powered up the - * juno_protected_mode_reset function can't be used as - * is needs to access GPU registers. - * However, although we don't want the GPU to boot into - * protected mode we know a GPU reset will be done after - * this function is called so although we set the GPU to - * protected mode it will exit protected mode before the - * driver is ready to run work. - */ if (gpu_id == GPU_ID_MAKE(GPU_ID_PI_T62X, 0, 1, 0) && - (kbdev->reg_start == 0x2d000000)) - return juno_protected_mode_enter(kbdev) == 0; - - return false; + kbdev->reg_start == 0x2d000000) { + /* T62X in SoC detected */ + u64 ret = kbase_invoke_smc(SMC_OEN_SIP, + JUNO_SMC_SECURE_DISABLE_FUNC, false, + 0, 0, 0); + return ret; + } + + return -EINVAL; /* Not supported */ } -struct kbase_protected_ops juno_protected_ops = { - .protected_mode_enter = juno_protected_mode_enter, - .protected_mode_reset = juno_protected_mode_reset, - .protected_mode_supported = juno_protected_mode_supported, +struct kbase_secure_ops juno_secure_ops = { + .secure_mode_enable = juno_secure_mode_enable, + .secure_mode_disable = juno_secure_mode_disable, }; static struct kbase_platform_config versatile_platform_config = { |