diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c index e809f4d9a9e9..08e828660e81 100644 --- a/drivers/firmware/arm_sdei.c +++ b/drivers/firmware/arm_sdei.c @@ -887,6 +887,45 @@ static void sdei_smccc_hvc(unsigned long function_id, arm_smccc_hvc(function_id, arg0, arg1, arg2, arg3, arg4, 0, 0, res); } +#ifdef CONFIG_FIQ_DEBUGGER_TRUST_ZONE +int sdei_event_enable_nolock(u32 event_num) +{ + return sdei_api_event_enable(event_num); +} + +int sdei_event_disable_nolock(u32 event_num) +{ + return sdei_api_event_disable(event_num); +} + +int sdei_event_routing_set_nolock(u32 event_num, unsigned long flags, + unsigned long affinity) +{ + return invoke_sdei_fn(SDEI_1_0_FN_SDEI_EVENT_ROUTING_SET, event_num, + (unsigned long)flags, (unsigned long)affinity, + 0, 0, 0); +} + +int sdei_event_routing_set(u32 event_num, unsigned long flags, + unsigned long affinity) +{ + int err = -EINVAL; + struct sdei_event *event; + + mutex_lock(&sdei_events_lock); + event = sdei_event_find(event_num); + if (!event) { + mutex_unlock(&sdei_events_lock); + return -ENOENT; + } + + err = sdei_event_routing_set_nolock(event_num, flags, affinity); + mutex_unlock(&sdei_events_lock); + + return err; +} +#endif + static int sdei_get_conduit(struct platform_device *pdev) { const char *method; diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h index 942afbd544b7..d3f1d27aba64 100644 --- a/include/linux/arm_sdei.h +++ b/include/linux/arm_sdei.h @@ -39,6 +39,15 @@ int sdei_event_unregister(u32 event_num); int sdei_event_enable(u32 event_num); int sdei_event_disable(u32 event_num); +#ifdef CONFIG_FIQ_DEBUGGER_TRUST_ZONE +int sdei_event_enable_nolock(u32 event_num); +int sdei_event_disable_nolock(u32 event_num); +int sdei_event_routing_set_nolock(u32 event_num, unsigned long flags, + unsigned long affinity); +int sdei_event_routing_set(u32 event_num, unsigned long flags, + unsigned long affinity); +#endif + #ifdef CONFIG_ARM_SDE_INTERFACE /* For use by arch code when CPU hotplug notifiers are not appropriate. */ int sdei_mask_local_cpu(void);