[PATCH 5/6] ARM: EXYNOS: Add support for Exynos secure firmware

Tomasz Figa t.figa at samsung.com
Thu Oct 11 09:18:54 EDT 2012


Hi Olof,

On Wednesday 10 of October 2012 09:00:27 Olof Johansson wrote:
> Hi,
> 
> On Mon, Sep 24, 2012 at 04:28:32PM +0200, Tomasz Figa wrote:
> > Some Exynos-based boards contain secure firmware and must use firmware
> > operations to set up some hardware.
> > 
> > This patch adds firmware operations for Exynos secure firmware and a
> > way
> > for board code and device tree to specify that they must be used.
> > 
> > Example of use:
> > 
> > In board code:
> > 	...MACHINE_START(...)
> > 	
> > 		/* ... */
> > 		.init_early	= exynos_firmware_init,
> > 		/* ... */
> > 	
> > 	MACHINE_END
> > 
> > In device tree:
> > 	/ {
> > 	
> > 		/* ... */
> > 		
> > 		firmware {
> > 		
> > 			compatible = "samsung,secure-firmware";
> > 		
> > 		};
> > 		
> > 		/* ... */
> > 	
> > 	};
> > 
> > Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> > Signed-off-by: Tomasz Figa <t.figa at samsung.com>
> > ---
> > 
> >  .../devicetree/bindings/arm/samsung-boards.txt     |  8 ++++
> >  arch/arm/mach-exynos/Makefile                      |  1 +
> >  arch/arm/mach-exynos/common.h                      |  2 +
> >  arch/arm/mach-exynos/firmware.c                    | 54
> >  ++++++++++++++++++++++ arch/arm/mach-exynos/mach-exynos4-dt.c        
> >      |  1 +
> >  5 files changed, 66 insertions(+)
> >  create mode 100644 arch/arm/mach-exynos/firmware.c
> > 
> > diff --git a/Documentation/devicetree/bindings/arm/samsung-boards.txt
> > b/Documentation/devicetree/bindings/arm/samsung-boards.txt index
> > 0bf68be..f447059 100644
> > --- a/Documentation/devicetree/bindings/arm/samsung-boards.txt
> > +++ b/Documentation/devicetree/bindings/arm/samsung-boards.txt
> > 
> > @@ -6,3 +6,11 @@ Required root node properties:
> >      - compatible = should be one or more of the following.
> >      
> >          (a) "samsung,smdkv310" - for Samsung's SMDKV310 eval board.
> >          (b) "samsung,exynos4210"  - for boards based on Exynos4210
> >          SoC.
> > 
> > +
> > +Optional:
> > +    - firmware node, specifying presence and type of secure firmware,
> > currently +        supported value of compatible property is
> > "samsung,secure-firmware": +
> > +	firmware {
> > +		compatible = "samsung,secure-firmware";
> > +	};
> 
> If you require the binding to specify the memory area, then you at least
> allow for future work to move to a dynamic mapping without updating the
> binding and all device trees. So, please do that even if the code is
> hardcoded to the static address today.

All right.

> For extra credit, make sure that the reg property is matching the static
> mapping when you setup your firmware interface on your platform.

Hmm, do you know a way to look up physical address of such static mapping, 
given only the virtual address? Additional problem is that the code is 
executed very early (in init_early callback), before most of VM 
initialization code.

I could do something like

	if (soc_is_exynos4210())
		paddr = EXYNOS4210_PA_SYSRAM_NS;
	else if (soc_is_exynos4212() || soc_is_exynos4412())
		paddr = EXYNOS4x12_PA_SYSRAM_NS;
	...

and compare paddr with address received from device tree, but I don't 
really like this construct.
 
> > +static int exynos_cpu_boot_reg(int cpu, void __iomem **ptr)
> > +{
> > +	*ptr = S5P_VA_SYSRAM_NS + 0x1c + 4*cpu;
> > +	return 0;
> > +}
> 
> It would be nice to get a memory map for the SMC area in documentation
> somewhere, but that can be done separately later.

OK.

Best regards,
-- 
Tomasz Figa
Samsung Poland R&D Center




More information about the linux-arm-kernel mailing list