ARM: Make a compile firmware conditionally
PATCH v5 1/2 ARM: Make a compile firmware conditionally
From: Kyungmin Park <[email protected]>
Some boards can use the firmware at trustzone but others can't use this. However we need to build it simultaneously. To address this issue, introduce arm firmware support and use it at each board files.
e.g., In boot_secondary at mach-exynos/platsmp.c
__raw_writel(virt_to_phys(exynos4_secondary_startup),
CPU1_BOOT_REG);
if (IS_ENABLED(CONFIG_ARM_FIRMWARE)) {
/* Call Exynos specific smc call */
do_firmware_op(cpu_boot, cpu);
}
gic_raise_softirq(cpumask_of(cpu), 1);
if (pen_release == -1)e.g., exynos4412 based board
static void __init board_init_early(void)
{
exynos_firmware_init();
}TODO
1. DT support.
2. call firmware init by smp_ops.
---
Changelog v4
use call_firmware_op commented by Tomasz Figa. remove useless core_initcall
arch/arm/common/Kconfig +3 -0
@@ -21,6 +21,9 @@ config ARM_VIC_NR The maximum number of VICs available in the system, for power management. +config ARM_FIRMWARE + bool + config ICST bool
arch/arm/common/Makefile +1 -0
@@ -4,6 +4,7 @@ obj-$(CONFIG_ARM_GIC) += gic.o obj-$(CONFIG_ARM_VIC) += vic.o +obj-$(CONFIG_ARM_FIRMWARE) += firmware.o obj-$(CONFIG_ICST) += icst.o obj-$(CONFIG_SA1111) += sa1111.o obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o
arch/arm/common/firmware.c new file +25 -0
@@ -0,0 +1,25 @@ +/* +* Copyright (C) 2012 Samsung Electronics. +* Kyungmin Park <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/suspend.h> + +#include <asm/firmware.h> + +static void cpu_boot (int cpu) +{ +/* Do nothing */ +} + +static struct firmware_ops default_firmware_ops = { + .do_idle = cpu_do_idle, + .cpu_boot = cpu_boot, +}; + +struct firmware_ops *firmware_ops = &default_firmware_ops;
arch/arm/include/asm/firmware.h new file +27 -0
@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2012 Samsung Electronics. +* Kyungmin Park <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef __ASM_ARM_FIRMWARE_H +#define __ASM_ARM_FIRMWARE_H + +struct firmware_ops { +int (*do_idle)(void ); +void (*cpu_boot)(int cpu); +}; + +extern struct firmware_ops *firmware_ops; + +#ifdef CONFIG_ARM_FIRMWARE +#define call_firmware_op (op, ...) \ + ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : 0) +#else +#define call_firmware_op (op, ...) do { } while (0) +#endif + +#endif
PATCH v5 1/2 ARM: Make a compile firmware conditionally
Hello,
Quoted 8 lines · On Friday 24 of August 2012 17:33:51 Kyungmin Park wrote:
From: Kyungmin Park <[email protected]>
Some boards can use the firmware at trustzone but others can't use this. However we need to build it simultaneously. To address this issue, introduce arm firmware support and use it at each board files.
e.g., In
boot_secondaryatmach-exynos/platsmp.c
Quoted 7 lines
__raw_writel(virt_to_phys(exynos4_secondary_startup),
CPU1_BOOT_REG);
if (IS_ENABLED(CONFIG_ARM_FIRMWARE)) {
/* Call Exynos specific smc call */
do_firmware_op(cpu_boot, cpu);
}There is no need for if (IS_ENABLED(CONFIG_ARM_FIRMWARE)) now when we have conditional call_firmware_op macro.
Also I guess there is a typo: s/do_firmware_op/call_firmware_op/ .
--
Best regards,
Tomasz Figa
Quoted 116 lines
gic_raise_softirq(cpumask_of(cpu), 1); if (pen_release == -1)e.g., exynos4412 based board
static void
__initboard_init_early(void){ exynos_firmware_init(); }TODO
1. DT support.
2. call firmware init bysmp_ops.Signed-off-by Kyungmin Park <[email protected]>---
Changelog v4
usecall_firmware_opcommented by Tomasz Figa. remove uselesscore_initcallarch/arm/common/Kconfig +3
-0@@ -21,6 +21,9 @@ config ARM_VIC_NR The maximum number of VICs available in the system, for power management. +config ARM_FIRMWARE + bool + config ICST boolarch/arm/common/Makefile +1
-0@@ -4,6 +4,7 @@ obj-$(CONFIG_ARM_GIC) += gic.o obj-$(CONFIG_ARM_VIC) += vic.o +obj-$(CONFIG_ARM_FIRMWARE) += firmware.o obj-$(CONFIG_ICST) += icst.o obj-$(CONFIG_SA1111) += sa1111.o obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.oarch/arm/common/firmware.c new file +25
-0@@ -0,0 +1,25 @@ +/* +* Copyright (C) 2012 Samsung Electronics. +* Kyungmin Park <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/suspend.h> + +#include <asm/firmware.h> + +static void cpu_boot (int cpu) +{ +/* Do nothing */ +} + +static struct firmware_ops default_firmware_ops = { + .do_idle = cpu_do_idle, + .cpu_boot = cpu_boot, +}; + +struct firmware_ops *firmware_ops = &default_firmware_ops;(quoted diff) +0
-0
b/arch/arm/include/asm/firmware.hnew file mode 100644 index 0000000..99c97ffarch/arm/include/asm/firmware.h new file +27
-0@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2012 Samsung Electronics. +* Kyungmin Park <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef __ASM_ARM_FIRMWARE_H +#define __ASM_ARM_FIRMWARE_H + +struct firmware_ops { +int (*do_idle)(void ); +void (*cpu_boot)(int cpu); +}; + +extern struct firmware_ops *firmware_ops; + +#ifdef CONFIG_ARM_FIRMWARE +#define call_firmware_op (op, ...) \ + ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : 0) +#else +#define call_firmware_op (op, ...) do { } while (0) +#endif + +#endif _______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH v5 1/2 ARM: Make a compile firmware conditionally
In reply to Kyungmin ParkHi,
arch/arm/common/Kconfig config ARM_VIC_NR · line 26
Quoted 11 lines · Kyungmin Park
arch/arm/common/Kconfig +3
-0@@ -21,6 +21,9 @@ config ARM_VIC_NR The maximum number of VICs available in the system, for power management. +config ARM_FIRMWARE + bool +
I don't think you need a config option for this now, it only adds 12 bytes of data to the kernel and it makes the below simpler.
Quoted 21 lines
arch/arm/include/asm/firmware.h new file +15
-0@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2012 Samsung Electronics. +* Kyungmin Park <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef __ASM_ARM_FIRMWARE_H +#define __ASM_ARM_FIRMWARE_H + +struct firmware_ops { + int (*do_idle)(void); + void (*cpu_boot)(int cpu);
arch/arm/include/asm/firmware.h line 25
Quoted 10 lines
arch/arm/include/asm/firmware.h new file +10
-0+}; + +extern struct firmware_ops *firmware_ops; + +#ifdef CONFIG_ARM_FIRMWARE +#define call_firmware_op (op, ...) \ + ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : 0) +#else +#define call_firmware_op (op, ...) do { } while (0) +#endif
If you always include the firmware.c file, then you don't need the ifdef above either, since the default version fills in dummy versions.
-Olof