1 ============================================== 2 Interface for registering and calling firmware 3 ============================================== 4 5 Written by Tomasz Figa <t.figa@samsung.com> 6 7 Some boards are running with secure firmware r 8 world, which changes the way some things have 9 a need to provide an interface for such platfo 10 operations and call them when needed. 11 12 Firmware operations can be specified by fillin 13 with appropriate callbacks and then registerin 14 function:: 15 16 void register_firmware_ops(const struc 17 18 The ops pointer must be non-NULL. More informa 19 and its members can be found in arch/arm/inclu 20 21 There is a default, empty set of operations pr 22 set anything if platform does not require firm 23 24 To call a firmware operation, a helper macro i 25 26 #define call_firmware_op(op, ...) 27 ((firmware_ops->op) ? firmware 28 29 the macro checks if the operation is provided 30 -ENOSYS to signal that given operation is not 31 fallback to legacy operation). 32 33 Example of registering firmware operations:: 34 35 /* board file */ 36 37 static int platformX_do_idle(void) 38 { 39 /* tell platformX firmware to 40 return 0; 41 } 42 43 static int platformX_cpu_boot(int i) 44 { 45 /* tell platformX firmware to 46 return 0; 47 } 48 49 static const struct firmware_ops platf 50 .do_idle = exynos_do_id 51 .cpu_boot = exynos_cpu_b 52 /* other operations not availa 53 }; 54 55 /* init_early callback of machine desc 56 static void __init board_init_early(vo 57 { 58 register_firmware_ops(&platfor 59 } 60 61 Example of using a firmware operation:: 62 63 /* some platform code, e.g. SMP initia 64 65 __raw_writel(__pa_symbol(exynos4_secon 66 CPU1_BOOT_REG); 67 68 /* Call Exynos specific smc call */ 69 if (call_firmware_op(cpu_boot, cpu) == 70 cpu_boot_legacy(...); /* Try l 71 72 gic_raise_softirq(cpumask_of(cpu), 1);
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.