2012/11/22, Tomasz Figa <t.f...@samsung.com>:
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to