2012/11/22, Tomasz Figa <t.figa@xxxxxxxxxxx>: > Some boards are running with secure firmware running in TrustZone secure > world, which changes the way some things have to be initialized. > > This patch adds an interface for platforms to specify available firmware > operations and call them. > > A wrapper macro, call_firmware_op(), checks if the operation is provided > and calls it if so, otherwise returns -ENOSYS to allow fallback to > legacy operation.. > > By default no operations are provided. > > Example of use: > > In code using firmware ops: > > __raw_writel(virt_to_phys(exynos4_secondary_startup), > CPU1_BOOT_REG); > > /* Call Exynos specific smc call */ > if (call_firmware_op(cpu_boot, cpu) == -ENOSYS) > cpu_boot_legacy(...); /* Try legacy way */ > > gic_raise_softirq(cpumask_of(cpu), 1); > > In board-/platform-specific code: > > static int platformX_do_idle(void) > { > /* tell platformX firmware to enter idle */ > return 0; > } > > static int platformX_cpu_boot(int i) > { > /* tell platformX firmware to boot CPU i */ > return 0; > } > > static const struct firmware_ops platformX_firmware_ops = { > .do_idle = exynos_do_idle, > .cpu_boot = exynos_cpu_boot, > /* other operations not available on platformX */ > }; i am thinking the firmware_ops should be namespaced, some hardware has firmware, firmware_ops should not be using a global namespace here. > > static void __init board_init_early(void) > { > register_firmware_ops(&platformX_firmware_ops); > } > -barry -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html