diff options
Diffstat (limited to 'mali_kbase/platform')
6 files changed, 77 insertions, 49 deletions
diff --git a/mali_kbase/platform/devicetree/mali_kbase_config_platform.h b/mali_kbase/platform/devicetree/mali_kbase_config_platform.h index d4813f7..34f6d57 100644 --- a/mali_kbase/platform/devicetree/mali_kbase_config_platform.h +++ b/mali_kbase/platform/devicetree/mali_kbase_config_platform.h @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2014-2015 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2016 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 @@ -73,8 +73,8 @@ extern struct kbase_pm_callback_conf pm_callbacks; /** - * Secure mode switch + * Protected mode switch * - * Attached value: pointer to @ref kbase_secure_ops + * Attached value: pointer to @ref kbase_protected_ops */ -#define SECURE_CALLBACKS (NULL) +#define PROTECTED_CALLBACKS (NULL) diff --git a/mali_kbase/platform/juno_soc/mali_kbase_config_juno_soc.c b/mali_kbase/platform/juno_soc/mali_kbase_config_juno_soc.c index 3baf3d9..c654818 100644 --- a/mali_kbase/platform/juno_soc/mali_kbase_config_juno_soc.c +++ b/mali_kbase/platform/juno_soc/mali_kbase_config_juno_soc.c @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2011-2015 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2011-2016 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,48 +66,76 @@ struct kbase_pm_callback_conf pm_callbacks = { }; /* - * Juno Secure Mode integration + * Juno Protected Mode integration */ /* SMC Function Numbers */ -#define JUNO_SMC_SECURE_ENABLE_FUNC 0xff06 -#define JUNO_SMC_SECURE_DISABLE_FUNC 0xff07 +#define JUNO_SMC_PROTECTED_ENTER_FUNC 0xff06 +#define JUNO_SMC_PROTECTED_RESET_FUNC 0xff07 -static int juno_secure_mode_enable(struct kbase_device *kbdev) +static int juno_protected_mode_enter(struct kbase_device *kbdev) { - u32 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id; + /* T62X in SoC detected */ + u64 ret = kbase_invoke_smc(SMC_OEN_SIP, + JUNO_SMC_PROTECTED_ENTER_FUNC, false, + 0, 0, 0); + 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 */ +/* 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) + ; + + return ret; } -static int juno_secure_mode_disable(struct kbase_device *kbdev) +static bool juno_protected_mode_supported(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) { - /* 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 */ + (kbdev->reg_start == 0x2d000000)) + return juno_protected_mode_enter(kbdev) == 0; + + return false; } -struct kbase_secure_ops juno_secure_ops = { - .secure_mode_enable = juno_secure_mode_enable, - .secure_mode_disable = juno_secure_mode_disable, +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, }; static struct kbase_platform_config versatile_platform_config = { diff --git a/mali_kbase/platform/juno_soc/mali_kbase_config_platform.h b/mali_kbase/platform/juno_soc/mali_kbase_config_platform.h index 5fc6d9e..ab29e9d 100644 --- a/mali_kbase/platform/juno_soc/mali_kbase_config_platform.h +++ b/mali_kbase/platform/juno_soc/mali_kbase_config_platform.h @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2014-2015 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2016 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 @@ -71,14 +71,14 @@ #define PLATFORM_FUNCS (NULL) /** - * Secure mode switch + * Protected mode switch * - * Attached value: pointer to @ref kbase_secure_ops + * Attached value: pointer to @ref kbase_protected_ops */ -#define SECURE_CALLBACKS (&juno_secure_ops) +#define PROTECTED_CALLBACKS (&juno_protected_ops) extern struct kbase_pm_callback_conf pm_callbacks; #ifdef CONFIG_DEVFREQ_THERMAL extern struct devfreq_cooling_ops juno_model_ops; #endif -extern struct kbase_secure_ops juno_secure_ops; +extern struct kbase_protected_ops juno_protected_ops; diff --git a/mali_kbase/platform/vexpress/mali_kbase_config_platform.h b/mali_kbase/platform/vexpress/mali_kbase_config_platform.h index eb957d3..dc4471b 100644 --- a/mali_kbase/platform/vexpress/mali_kbase_config_platform.h +++ b/mali_kbase/platform/vexpress/mali_kbase_config_platform.h @@ -73,10 +73,10 @@ #define PLATFORM_FUNCS (NULL) /** - * Secure mode switch + * Protected mode switch * - * Attached value: pointer to @ref kbase_secure_ops + * Attached value: pointer to @ref kbase_protected_ops */ -#define SECURE_CALLBACKS (NULL) +#define PROTECTED_CALLBACKS (NULL) extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/mali_kbase/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h b/mali_kbase/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h index 2b91d72..b0490ca 100644 --- a/mali_kbase/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h +++ b/mali_kbase/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2014-2015 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2016 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 @@ -71,10 +71,10 @@ #define PLATFORM_FUNCS (NULL) /** - * Secure mode switch + * Protected mode switch * - * Attached value: pointer to @ref kbase_secure_ops + * Attached value: pointer to @ref kbase_protected_ops */ -#define SECURE_CALLBACKS (NULL) +#define PROTECTED_CALLBACKS (NULL) extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/mali_kbase/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h b/mali_kbase/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h index d269c25..22ffccb 100644 --- a/mali_kbase/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h +++ b/mali_kbase/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2014-2015 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2016 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 @@ -73,10 +73,10 @@ #define PLATFORM_FUNCS (NULL) /** - * Secure mode switch + * Protected mode switch * - * Attached value: pointer to @ref kbase_secure_ops + * Attached value: pointer to @ref kbase_protected_ops */ -#define SECURE_CALLBACKS (NULL) +#define PROTECTED_CALLBACKS (NULL) extern struct kbase_pm_callback_conf pm_callbacks; |