[PATCH v6 01/15] ARM: SoC: Introduce per SoC descriptor
Nicolas Pitre
nico at fluxnic.net
Wed Feb 8 18:59:15 EST 2012
On Wed, 8 Feb 2012, Marc Zyngier wrote:
> The ARM core code expects the various SoCs to hide their
> implementation differences behind a well established API.
> The various sub-arch-specific bit are often either at
> the machine descriptor level, or provided at link time
> by the sub-arch code.
>
> The SoC descriptor is a container that holds the SoC
> specific bits that can be moved away from the machine
> descriptor as well as an indirection point for the
> global symbols (SMP and CPU hotplug support, for example).
>
> This patch introduce this SoC descriptor, with the only field
> being the name of the SoC.
>
> Cc: Arnd Bergmann <arnd at arndb.de>
> Cc: Nicolas Pitre <nico at fluxnic.net>
> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
Acked-by: Nicolas Pitre <nico at linaro.org>
> ---
> arch/arm/include/asm/mach/arch.h | 2 ++
> arch/arm/include/asm/soc.h | 19 +++++++++++++++++++
> arch/arm/kernel/setup.c | 7 +++++++
> 3 files changed, 28 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/include/asm/soc.h
>
> diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h
> index d7692ca..cf7ef91 100644
> --- a/arch/arm/include/asm/mach/arch.h
> +++ b/arch/arm/include/asm/mach/arch.h
> @@ -14,6 +14,7 @@ struct tag;
> struct meminfo;
> struct sys_timer;
> struct pt_regs;
> +struct arm_soc_desc;
>
> struct machine_desc {
> unsigned int nr; /* architecture number */
> @@ -35,6 +36,7 @@ struct machine_desc {
> unsigned char reserve_lp1 :1; /* never has lp1 */
> unsigned char reserve_lp2 :1; /* never has lp2 */
> char restart_mode; /* default restart mode */
> + struct arm_soc_desc *soc; /* SoC descriptor */
> void (*fixup)(struct tag *, char **,
> struct meminfo *);
> void (*reserve)(void);/* reserve mem blocks */
> diff --git a/arch/arm/include/asm/soc.h b/arch/arm/include/asm/soc.h
> new file mode 100644
> index 0000000..2d73e35
> --- /dev/null
> +++ b/arch/arm/include/asm/soc.h
> @@ -0,0 +1,19 @@
> +/*
> + * linux/arch/arm/include/asm/soc.h
> + *
> + * Copyright (C) 2011 ARM Ltd.
> + * All Rights Reserved
> + *
> + * 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_SOC_H
> +#define __ASM_ARM_SOC_H
> +
> +struct arm_soc_desc {
> + const char *name;
> +};
> +
> +#endif /* __ASM_ARM_SOC_H */
> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> index a255c39..69ac002 100644
> --- a/arch/arm/kernel/setup.c
> +++ b/arch/arm/kernel/setup.c
> @@ -45,6 +45,7 @@
> #include <asm/cachetype.h>
> #include <asm/tlbflush.h>
> #include <asm/system.h>
> +#include <asm/soc.h>
>
> #include <asm/prom.h>
> #include <asm/mach/arch.h>
> @@ -141,6 +142,7 @@ static const char *cpu_name;
> static const char *machine_name;
> static char __initdata cmd_line[COMMAND_LINE_SIZE];
> struct machine_desc *machine_desc __initdata;
> +static const struct arm_soc_desc *soc_desc __initdata;
>
> static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
> static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
> @@ -922,6 +924,11 @@ void __init setup_arch(char **cmdline_p)
> mdesc = setup_machine_tags(machine_arch_type);
> machine_desc = mdesc;
> machine_name = mdesc->name;
> + if (mdesc->soc) {
> + soc_desc = mdesc->soc;
> + pr_info("SoC: %s\n", soc_desc->name);
> + } else
> + soc_desc = NULL;
>
> #ifdef CONFIG_ZONE_DMA
> if (mdesc->dma_zone_size) {
> --
> 1.7.3.4
>
More information about the linux-arm-kernel
mailing list