1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * arch/arm/include/asm/bL_switcher.h 4 * 5 * Created by: Nicolas Pitre, April 2012 6 * Copyright: (C) 2012-2013 Linaro Limited 7 */ 8 9 #ifndef ASM_BL_SWITCHER_H 10 #define ASM_BL_SWITCHER_H 11 12 #include <linux/compiler.h> 13 #include <linux/types.h> 14 15 typedef void (*bL_switch_completion_handler)(void *cookie); 16 17 int bL_switch_request_cb(unsigned int cpu, unsigned int new_cluster_id, 18 bL_switch_completion_handler completer, 19 void *completer_cookie); 20 static inline int bL_switch_request(unsigned int cpu, unsigned int new_cluster_id) 21 { 22 return bL_switch_request_cb(cpu, new_cluster_id, NULL, NULL); 23 } 24 25 /* 26 * Register here to be notified about runtime enabling/disabling of 27 * the switcher. 28 * 29 * The notifier chain is called with the switcher activation lock held: 30 * the switcher will not be enabled or disabled during callbacks. 31 * Callbacks must not call bL_switcher_{get,put}_enabled(). 32 */ 33 #define BL_NOTIFY_PRE_ENABLE 0 34 #define BL_NOTIFY_POST_ENABLE 1 35 #define BL_NOTIFY_PRE_DISABLE 2 36 #define BL_NOTIFY_POST_DISABLE 3 37 38 #ifdef CONFIG_BL_SWITCHER 39 40 int bL_switcher_register_notifier(struct notifier_block *nb); 41 int bL_switcher_unregister_notifier(struct notifier_block *nb); 42 43 /* 44 * Use these functions to temporarily prevent enabling/disabling of 45 * the switcher. 46 * bL_switcher_get_enabled() returns true if the switcher is currently 47 * enabled. Each call to bL_switcher_get_enabled() must be followed 48 * by a call to bL_switcher_put_enabled(). These functions are not 49 * recursive. 50 */ 51 bool bL_switcher_get_enabled(void); 52 void bL_switcher_put_enabled(void); 53 54 int bL_switcher_trace_trigger(void); 55 int bL_switcher_get_logical_index(u32 mpidr); 56 57 #else 58 static inline int bL_switcher_register_notifier(struct notifier_block *nb) 59 { 60 return 0; 61 } 62 63 static inline int bL_switcher_unregister_notifier(struct notifier_block *nb) 64 { 65 return 0; 66 } 67 68 static inline bool bL_switcher_get_enabled(void) { return false; } 69 static inline void bL_switcher_put_enabled(void) { } 70 static inline int bL_switcher_trace_trigger(void) { return 0; } 71 static inline int bL_switcher_get_logical_index(u32 mpidr) { return -EUNATCH; } 72 #endif /* CONFIG_BL_SWITCHER */ 73 74 #endif 75