[PATCH 2/2] ARM: vexpress: Remove non-DT code

Mike Turquette mturquette at linaro.org
Wed Sep 10 10:45:00 PDT 2014


Quoting Pawel Moll (2014-09-10 07:33:38)
> Now, with the CLCD DT support available, there is no
> more reason to keep the non-DT support for V2P-CA9.
> 
> Removed, together with "some" supporting code. It was
> necessary to make PLAT_VERSATILE_SCHED_CLOCK optional
> and selected by the machines still interested in it.
> 
> Signed-off-by: Pawel Moll <pawel.moll at arm.com>

For clock driver parts:

Acked-by: Mike Turquette <mturquette at linaro.org>

> ---
>  arch/arm/Kconfig                                  |   2 +
>  arch/arm/mach-vexpress/Kconfig                    |   3 -
>  arch/arm/mach-vexpress/Makefile                   |   3 +-
>  arch/arm/mach-vexpress/core.h                     |   7 -
>  arch/arm/mach-vexpress/ct-ca9x4.c                 | 212 ------------
>  arch/arm/mach-vexpress/include/mach/ct-ca9x4.h    |  47 ---
>  arch/arm/mach-vexpress/include/mach/hardware.h    |   1 -
>  arch/arm/mach-vexpress/include/mach/irqs.h        |   6 -
>  arch/arm/mach-vexpress/include/mach/motherboard.h |  88 -----
>  arch/arm/mach-vexpress/platsmp.c                  |  42 ---
>  arch/arm/mach-vexpress/v2m.c                      | 374 ----------------------
>  arch/arm/plat-versatile/Kconfig                   |   2 +-
>  drivers/clk/versatile/Makefile                    |   1 -
>  drivers/clk/versatile/clk-vexpress-osc.c          |   7 -
>  drivers/clk/versatile/clk-vexpress.c              |  86 -----
>  drivers/mfd/vexpress-sysreg.c                     |  71 +---
>  drivers/misc/vexpress-syscfg.c                    |  60 +---
>  drivers/power/reset/vexpress-poweroff.c           |  17 +-
>  include/linux/vexpress.h                          |  19 --
>  19 files changed, 35 insertions(+), 1013 deletions(-)
>  delete mode 100644 arch/arm/mach-vexpress/ct-ca9x4.c
>  delete mode 100644 arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
>  delete mode 100644 arch/arm/mach-vexpress/include/mach/hardware.h
>  delete mode 100644 arch/arm/mach-vexpress/include/mach/irqs.h
>  delete mode 100644 arch/arm/mach-vexpress/include/mach/motherboard.h
>  delete mode 100644 drivers/clk/versatile/clk-vexpress.c
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 32cbbd5..32d5b2f 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -347,6 +347,7 @@ config ARCH_REALVIEW
>         select ICST
>         select NEED_MACH_MEMORY_H
>         select PLAT_VERSATILE
> +       select PLAT_VERSATILE_SCHED_CLOCK
>         help
>           This enables support for ARM Ltd RealView boards.
>  
> @@ -362,6 +363,7 @@ config ARCH_VERSATILE
>         select ICST
>         select PLAT_VERSATILE
>         select PLAT_VERSATILE_CLOCK
> +       select PLAT_VERSATILE_SCHED_CLOCK
>         select VERSATILE_FPGA_IRQ
>         help
>           This enables support for ARM Ltd Versatile board.
> diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig
> index b2cfba16c..9a96bab 100644
> --- a/arch/arm/mach-vexpress/Kconfig
> +++ b/arch/arm/mach-vexpress/Kconfig
> @@ -49,9 +49,6 @@ config ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA
>           build a working kernel, you must also enable relevant core
>           tile support or Flattened Device Tree based support options.
>  
> -config ARCH_VEXPRESS_CA9X4
> -       bool "Versatile Express Cortex-A9x4 tile"
> -
>  config ARCH_VEXPRESS_DCSCB
>         bool "Dual Cluster System Control Block (DCSCB) support"
>         depends on MCPM
> diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile
> index fc649bc..f5c1006 100644
> --- a/arch/arm/mach-vexpress/Makefile
> +++ b/arch/arm/mach-vexpress/Makefile
> @@ -1,11 +1,10 @@
>  #
>  # Makefile for the linux kernel.
>  #
> -ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
> +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := \
>         -I$(srctree)/arch/arm/plat-versatile/include
>  
>  obj-y                                  := v2m.o
> -obj-$(CONFIG_ARCH_VEXPRESS_CA9X4)      += ct-ca9x4.o
>  obj-$(CONFIG_ARCH_VEXPRESS_DCSCB)      += dcscb.o      dcscb_setup.o
>  CFLAGS_dcscb.o                         += -march=armv7-a
>  CFLAGS_REMOVE_dcscb.o                  = -pg
> diff --git a/arch/arm/mach-vexpress/core.h b/arch/arm/mach-vexpress/core.h
> index 152fad9..2a11d3a 100644
> --- a/arch/arm/mach-vexpress/core.h
> +++ b/arch/arm/mach-vexpress/core.h
> @@ -1,12 +1,5 @@
> -/* 2MB large area for motherboard's peripherals static mapping */
> -#define V2M_PERIPH 0xf8000000
> -
> -/* Tile's peripherals static mappings should start here */
> -#define V2T_PERIPH 0xf8200000
> -
>  bool vexpress_smp_init_ops(void);
>  
> -extern struct smp_operations   vexpress_smp_ops;
>  extern struct smp_operations   vexpress_smp_dt_ops;
>  
>  extern void vexpress_cpu_die(unsigned int cpu);
> diff --git a/arch/arm/mach-vexpress/ct-ca9x4.c b/arch/arm/mach-vexpress/ct-ca9x4.c
> deleted file mode 100644
> index 27bea04..0000000
> --- a/arch/arm/mach-vexpress/ct-ca9x4.c
> +++ /dev/null
> @@ -1,212 +0,0 @@
> -/*
> - * Versatile Express Core Tile Cortex A9x4 Support
> - */
> -#include <linux/init.h>
> -#include <linux/gfp.h>
> -#include <linux/device.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/platform_device.h>
> -#include <linux/amba/bus.h>
> -#include <linux/amba/clcd.h>
> -#include <linux/platform_data/video-clcd-versatile.h>
> -#include <linux/clkdev.h>
> -#include <linux/vexpress.h>
> -#include <linux/irqchip/arm-gic.h>
> -
> -#include <asm/hardware/arm_timer.h>
> -#include <asm/hardware/cache-l2x0.h>
> -#include <asm/smp_scu.h>
> -#include <asm/smp_twd.h>
> -
> -#include <mach/ct-ca9x4.h>
> -
> -#include <asm/hardware/timer-sp.h>
> -
> -#include <asm/mach/map.h>
> -#include <asm/mach/time.h>
> -
> -#include "core.h"
> -
> -#include <mach/motherboard.h>
> -#include <mach/irqs.h>
> -
> -static struct map_desc ct_ca9x4_io_desc[] __initdata = {
> -       {
> -               .virtual        = V2T_PERIPH,
> -               .pfn            = __phys_to_pfn(CT_CA9X4_MPIC),
> -               .length         = SZ_8K,
> -               .type           = MT_DEVICE,
> -       },
> -};
> -
> -static void __init ct_ca9x4_map_io(void)
> -{
> -       iotable_init(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc));
> -}
> -
> -static void __init ca9x4_l2_init(void)
> -{
> -#ifdef CONFIG_CACHE_L2X0
> -       void __iomem *l2x0_base = ioremap(CT_CA9X4_L2CC, SZ_4K);
> -
> -       if (l2x0_base) {
> -               /* set RAM latencies to 1 cycle for this core tile. */
> -               writel(0, l2x0_base + L310_TAG_LATENCY_CTRL);
> -               writel(0, l2x0_base + L310_DATA_LATENCY_CTRL);
> -
> -               l2x0_init(l2x0_base, 0x00400000, 0xfe0fffff);
> -       } else {
> -               pr_err("L2C: unable to map L2 cache controller\n");
> -       }
> -#endif
> -}
> -
> -#ifdef CONFIG_HAVE_ARM_TWD
> -static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, A9_MPCORE_TWD, IRQ_LOCALTIMER);
> -
> -static void __init ca9x4_twd_init(void)
> -{
> -       int err = twd_local_timer_register(&twd_local_timer);
> -       if (err)
> -               pr_err("twd_local_timer_register failed %d\n", err);
> -}
> -#else
> -#define ca9x4_twd_init()       do {} while(0)
> -#endif
> -
> -static void __init ct_ca9x4_init_irq(void)
> -{
> -       gic_init(0, 29, ioremap(A9_MPCORE_GIC_DIST, SZ_4K),
> -                ioremap(A9_MPCORE_GIC_CPU, SZ_256));
> -       ca9x4_twd_init();
> -       ca9x4_l2_init();
> -}
> -
> -static int ct_ca9x4_clcd_setup(struct clcd_fb *fb)
> -{
> -       unsigned long framesize = 1024 * 768 * 2;
> -
> -       fb->panel = versatile_clcd_get_panel("XVGA");
> -       if (!fb->panel)
> -               return -EINVAL;
> -
> -       return versatile_clcd_setup_dma(fb, framesize);
> -}
> -
> -static struct clcd_board ct_ca9x4_clcd_data = {
> -       .name           = "CT-CA9X4",
> -       .caps           = CLCD_CAP_5551 | CLCD_CAP_565,
> -       .check          = clcdfb_check,
> -       .decode         = clcdfb_decode,
> -       .setup          = ct_ca9x4_clcd_setup,
> -       .mmap           = versatile_clcd_mmap_dma,
> -       .remove         = versatile_clcd_remove_dma,
> -};
> -
> -static AMBA_AHB_DEVICE(clcd, "ct:clcd", 0, CT_CA9X4_CLCDC, IRQ_CT_CA9X4_CLCDC, &ct_ca9x4_clcd_data);
> -static AMBA_APB_DEVICE(dmc, "ct:dmc", 0, CT_CA9X4_DMC, IRQ_CT_CA9X4_DMC, NULL);
> -static AMBA_APB_DEVICE(smc, "ct:smc", 0, CT_CA9X4_SMC, IRQ_CT_CA9X4_SMC, NULL);
> -static AMBA_APB_DEVICE(gpio, "ct:gpio", 0, CT_CA9X4_GPIO, IRQ_CT_CA9X4_GPIO, NULL);
> -
> -static struct amba_device *ct_ca9x4_amba_devs[] __initdata = {
> -       &clcd_device,
> -       &dmc_device,
> -       &smc_device,
> -       &gpio_device,
> -};
> -
> -static struct resource pmu_resources[] = {
> -       [0] = {
> -               .start  = IRQ_CT_CA9X4_PMU_CPU0,
> -               .end    = IRQ_CT_CA9X4_PMU_CPU0,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -       [1] = {
> -               .start  = IRQ_CT_CA9X4_PMU_CPU1,
> -               .end    = IRQ_CT_CA9X4_PMU_CPU1,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -       [2] = {
> -               .start  = IRQ_CT_CA9X4_PMU_CPU2,
> -               .end    = IRQ_CT_CA9X4_PMU_CPU2,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -       [3] = {
> -               .start  = IRQ_CT_CA9X4_PMU_CPU3,
> -               .end    = IRQ_CT_CA9X4_PMU_CPU3,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -};
> -
> -static struct platform_device pmu_device = {
> -       .name           = "arm-pmu",
> -       .id             = -1,
> -       .num_resources  = ARRAY_SIZE(pmu_resources),
> -       .resource       = pmu_resources,
> -};
> -
> -static struct clk_lookup osc1_lookup = {
> -       .dev_id         = "ct:clcd",
> -};
> -
> -static struct platform_device osc1_device = {
> -       .name           = "vexpress-osc",
> -       .id             = 1,
> -       .num_resources  = 1,
> -       .resource       = (struct resource []) {
> -               VEXPRESS_RES_FUNC(0xf, 1),
> -       },
> -       .dev.platform_data = &osc1_lookup,
> -};
> -
> -static void __init ct_ca9x4_init(void)
> -{
> -       int i;
> -
> -       for (i = 0; i < ARRAY_SIZE(ct_ca9x4_amba_devs); i++)
> -               amba_device_register(ct_ca9x4_amba_devs[i], &iomem_resource);
> -
> -       platform_device_register(&pmu_device);
> -       vexpress_syscfg_device_register(&osc1_device);
> -}
> -
> -#ifdef CONFIG_SMP
> -static void *ct_ca9x4_scu_base __initdata;
> -
> -static void __init ct_ca9x4_init_cpu_map(void)
> -{
> -       int i, ncores;
> -
> -       ct_ca9x4_scu_base = ioremap(A9_MPCORE_SCU, SZ_128);
> -       if (WARN_ON(!ct_ca9x4_scu_base))
> -               return;
> -
> -       ncores = scu_get_core_count(ct_ca9x4_scu_base);
> -
> -       if (ncores > nr_cpu_ids) {
> -               pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
> -                       ncores, nr_cpu_ids);
> -               ncores = nr_cpu_ids;
> -       }
> -
> -       for (i = 0; i < ncores; ++i)
> -               set_cpu_possible(i, true);
> -}
> -
> -static void __init ct_ca9x4_smp_enable(unsigned int max_cpus)
> -{
> -       scu_enable(ct_ca9x4_scu_base);
> -}
> -#endif
> -
> -struct ct_desc ct_ca9x4_desc __initdata = {
> -       .id             = V2M_CT_ID_CA9,
> -       .name           = "CA9x4",
> -       .map_io         = ct_ca9x4_map_io,
> -       .init_irq       = ct_ca9x4_init_irq,
> -       .init_tile      = ct_ca9x4_init,
> -#ifdef CONFIG_SMP
> -       .init_cpu_map   = ct_ca9x4_init_cpu_map,
> -       .smp_enable     = ct_ca9x4_smp_enable,
> -#endif
> -};
> diff --git a/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h b/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
> deleted file mode 100644
> index 84acf84..0000000
> --- a/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
> +++ /dev/null
> @@ -1,47 +0,0 @@
> -#ifndef __MACH_CT_CA9X4_H
> -#define __MACH_CT_CA9X4_H
> -
> -/*
> - * Physical base addresses
> - */
> -#define CT_CA9X4_CLCDC         (0x10020000)
> -#define CT_CA9X4_AXIRAM                (0x10060000)
> -#define CT_CA9X4_DMC           (0x100e0000)
> -#define CT_CA9X4_SMC           (0x100e1000)
> -#define CT_CA9X4_SCC           (0x100e2000)
> -#define CT_CA9X4_SP804_TIMER   (0x100e4000)
> -#define CT_CA9X4_SP805_WDT     (0x100e5000)
> -#define CT_CA9X4_TZPC          (0x100e6000)
> -#define CT_CA9X4_GPIO          (0x100e8000)
> -#define CT_CA9X4_FASTAXI       (0x100e9000)
> -#define CT_CA9X4_SLOWAXI       (0x100ea000)
> -#define CT_CA9X4_TZASC         (0x100ec000)
> -#define CT_CA9X4_CORESIGHT     (0x10200000)
> -#define CT_CA9X4_MPIC          (0x1e000000)
> -#define CT_CA9X4_SYSTIMER      (0x1e004000)
> -#define CT_CA9X4_SYSWDT                (0x1e007000)
> -#define CT_CA9X4_L2CC          (0x1e00a000)
> -
> -#define A9_MPCORE_SCU          (CT_CA9X4_MPIC + 0x0000)
> -#define A9_MPCORE_GIC_CPU      (CT_CA9X4_MPIC + 0x0100)
> -#define A9_MPCORE_GIT          (CT_CA9X4_MPIC + 0x0200)
> -#define A9_MPCORE_TWD          (CT_CA9X4_MPIC + 0x0600)
> -#define A9_MPCORE_GIC_DIST     (CT_CA9X4_MPIC + 0x1000)
> -
> -/*
> - * Interrupts.  Those in {} are for AMBA devices
> - */
> -#define IRQ_CT_CA9X4_CLCDC     { 76 }
> -#define IRQ_CT_CA9X4_DMC       { 0 }
> -#define IRQ_CT_CA9X4_SMC       { 77, 78 }
> -#define IRQ_CT_CA9X4_TIMER0    80
> -#define IRQ_CT_CA9X4_TIMER1    81
> -#define IRQ_CT_CA9X4_GPIO      { 82 }
> -#define IRQ_CT_CA9X4_PMU_CPU0  92
> -#define IRQ_CT_CA9X4_PMU_CPU1  93
> -#define IRQ_CT_CA9X4_PMU_CPU2  94
> -#define IRQ_CT_CA9X4_PMU_CPU3  95
> -
> -extern struct ct_desc ct_ca9x4_desc;
> -
> -#endif
> diff --git a/arch/arm/mach-vexpress/include/mach/hardware.h b/arch/arm/mach-vexpress/include/mach/hardware.h
> deleted file mode 100644
> index 40a8c17..0000000
> --- a/arch/arm/mach-vexpress/include/mach/hardware.h
> +++ /dev/null
> @@ -1 +0,0 @@
> -/* empty */
> diff --git a/arch/arm/mach-vexpress/include/mach/irqs.h b/arch/arm/mach-vexpress/include/mach/irqs.h
> deleted file mode 100644
> index f8f7f78..0000000
> --- a/arch/arm/mach-vexpress/include/mach/irqs.h
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -#define IRQ_LOCALTIMER         29
> -#define IRQ_LOCALWDOG          30
> -
> -#ifndef CONFIG_SPARSE_IRQ
> -#define NR_IRQS        256
> -#endif
> diff --git a/arch/arm/mach-vexpress/include/mach/motherboard.h b/arch/arm/mach-vexpress/include/mach/motherboard.h
> deleted file mode 100644
> index 68abc8b..0000000
> --- a/arch/arm/mach-vexpress/include/mach/motherboard.h
> +++ /dev/null
> @@ -1,88 +0,0 @@
> -#ifndef __MACH_MOTHERBOARD_H
> -#define __MACH_MOTHERBOARD_H
> -
> -/*
> - * Physical addresses, offset from V2M_PA_CS0-3
> - */
> -#define V2M_NOR0               (V2M_PA_CS0)
> -#define V2M_NOR1               (V2M_PA_CS1)
> -#define V2M_SRAM               (V2M_PA_CS2)
> -#define V2M_VIDEO_SRAM         (V2M_PA_CS3 + 0x00000000)
> -#define V2M_LAN9118            (V2M_PA_CS3 + 0x02000000)
> -#define V2M_ISP1761            (V2M_PA_CS3 + 0x03000000)
> -
> -/*
> - * Physical addresses, offset from V2M_PA_CS7
> - */
> -#define V2M_SYSREGS            (V2M_PA_CS7 + 0x00000000)
> -#define V2M_SYSCTL             (V2M_PA_CS7 + 0x00001000)
> -#define V2M_SERIAL_BUS_PCI     (V2M_PA_CS7 + 0x00002000)
> -
> -#define V2M_AACI               (V2M_PA_CS7 + 0x00004000)
> -#define V2M_MMCI               (V2M_PA_CS7 + 0x00005000)
> -#define V2M_KMI0               (V2M_PA_CS7 + 0x00006000)
> -#define V2M_KMI1               (V2M_PA_CS7 + 0x00007000)
> -
> -#define V2M_UART0              (V2M_PA_CS7 + 0x00009000)
> -#define V2M_UART1              (V2M_PA_CS7 + 0x0000a000)
> -#define V2M_UART2              (V2M_PA_CS7 + 0x0000b000)
> -#define V2M_UART3              (V2M_PA_CS7 + 0x0000c000)
> -
> -#define V2M_WDT                        (V2M_PA_CS7 + 0x0000f000)
> -
> -#define V2M_TIMER01            (V2M_PA_CS7 + 0x00011000)
> -#define V2M_TIMER23            (V2M_PA_CS7 + 0x00012000)
> -
> -#define V2M_SERIAL_BUS_DVI     (V2M_PA_CS7 + 0x00016000)
> -#define V2M_RTC                        (V2M_PA_CS7 + 0x00017000)
> -
> -#define V2M_CF                 (V2M_PA_CS7 + 0x0001a000)
> -#define V2M_CLCD               (V2M_PA_CS7 + 0x0001f000)
> -
> -
> -/*
> - * Interrupts.  Those in {} are for AMBA devices
> - */
> -#define IRQ_V2M_WDT            { (32 + 0) }
> -#define IRQ_V2M_TIMER0         (32 + 2)
> -#define IRQ_V2M_TIMER1         (32 + 2)
> -#define IRQ_V2M_TIMER2         (32 + 3)
> -#define IRQ_V2M_TIMER3         (32 + 3)
> -#define IRQ_V2M_RTC            { (32 + 4) }
> -#define IRQ_V2M_UART0          { (32 + 5) }
> -#define IRQ_V2M_UART1          { (32 + 6) }
> -#define IRQ_V2M_UART2          { (32 + 7) }
> -#define IRQ_V2M_UART3          { (32 + 8) }
> -#define IRQ_V2M_MMCI           { (32 + 9), (32 + 10) }
> -#define IRQ_V2M_AACI           { (32 + 11) }
> -#define IRQ_V2M_KMI0           { (32 + 12) }
> -#define IRQ_V2M_KMI1           { (32 + 13) }
> -#define IRQ_V2M_CLCD           { (32 + 14) }
> -#define IRQ_V2M_LAN9118                (32 + 15)
> -#define IRQ_V2M_ISP1761                (32 + 16)
> -#define IRQ_V2M_PCIE           (32 + 17)
> -
> -
> -/*
> - * Core tile IDs
> - */
> -#define V2M_CT_ID_CA9          0x0c000191
> -#define V2M_CT_ID_UNSUPPORTED  0xff000191
> -#define V2M_CT_ID_MASK         0xff000fff
> -
> -struct ct_desc {
> -       u32                     id;
> -       const char              *name;
> -       void                    (*map_io)(void);
> -       void                    (*init_early)(void);
> -       void                    (*init_irq)(void);
> -       void                    (*init_tile)(void);
> -#ifdef CONFIG_SMP
> -       void                    (*init_cpu_map)(void);
> -       void                    (*smp_enable)(unsigned int);
> -#endif
> -};
> -
> -extern struct ct_desc *ct_desc;
> -
> -#endif
> diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c
> index a1f3804..83188cf 100644
> --- a/arch/arm/mach-vexpress/platsmp.c
> +++ b/arch/arm/mach-vexpress/platsmp.c
> @@ -19,48 +19,10 @@
>  #include <asm/smp_scu.h>
>  #include <asm/mach/map.h>
>  
> -#include <mach/motherboard.h>
> -
>  #include <plat/platsmp.h>
>  
>  #include "core.h"
>  
> -/*
> - * Initialise the CPU possible map early - this describes the CPUs
> - * which may be present or become present in the system.
> - */
> -static void __init vexpress_smp_init_cpus(void)
> -{
> -       ct_desc->init_cpu_map();
> -}
> -
> -static void __init vexpress_smp_prepare_cpus(unsigned int max_cpus)
> -{
> -       /*
> -        * Initialise the present map, which describes the set of CPUs
> -        * actually populated at the present time.
> -        */
> -       ct_desc->smp_enable(max_cpus);
> -
> -       /*
> -        * Write the address of secondary startup into the
> -        * system-wide flags register. The boot monitor waits
> -        * until it receives a soft interrupt, and then the
> -        * secondary CPU branches to this address.
> -        */
> -       vexpress_flags_set(virt_to_phys(versatile_secondary_startup));
> -}
> -
> -struct smp_operations __initdata vexpress_smp_ops = {
> -       .smp_init_cpus          = vexpress_smp_init_cpus,
> -       .smp_prepare_cpus       = vexpress_smp_prepare_cpus,
> -       .smp_secondary_init     = versatile_secondary_init,
> -       .smp_boot_secondary     = versatile_boot_secondary,
> -#ifdef CONFIG_HOTPLUG_CPU
> -       .cpu_die                = vexpress_cpu_die,
> -#endif
> -};
> -
>  bool __init vexpress_smp_init_ops(void)
>  {
>  #ifdef CONFIG_MCPM
> @@ -79,8 +41,6 @@ bool __init vexpress_smp_init_ops(void)
>         return false;
>  }
>  
> -#if defined(CONFIG_OF)
> -
>  static const struct of_device_id vexpress_smp_dt_scu_match[] __initconst = {
>         { .compatible = "arm,cortex-a5-scu", },
>         { .compatible = "arm,cortex-a9-scu", },
> @@ -112,5 +72,3 @@ struct smp_operations __initdata vexpress_smp_dt_ops = {
>         .cpu_die                = vexpress_cpu_die,
>  #endif
>  };
> -
> -#endif
> diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c
> index 6ff681a..a0400f4 100644
> --- a/arch/arm/mach-vexpress/v2m.c
> +++ b/arch/arm/mach-vexpress/v2m.c
> @@ -1,380 +1,7 @@
> -/*
> - * Versatile Express V2M Motherboard Support
> - */
> -#include <linux/device.h>
> -#include <linux/amba/bus.h>
> -#include <linux/amba/mmci.h>
> -#include <linux/io.h>
> -#include <linux/smp.h>
> -#include <linux/init.h>
> -#include <linux/of_address.h>
> -#include <linux/of_fdt.h>
> -#include <linux/of_irq.h>
> -#include <linux/of_platform.h>
> -#include <linux/platform_device.h>
> -#include <linux/ata_platform.h>
> -#include <linux/smsc911x.h>
> -#include <linux/spinlock.h>
> -#include <linux/usb/isp1760.h>
> -#include <linux/mtd/physmap.h>
> -#include <linux/regulator/fixed.h>
> -#include <linux/regulator/machine.h>
> -#include <linux/vexpress.h>
> -#include <linux/clkdev.h>
> -
> -#include <asm/mach-types.h>
> -#include <asm/sizes.h>
>  #include <asm/mach/arch.h>
> -#include <asm/mach/map.h>
> -#include <asm/mach/time.h>
> -#include <asm/hardware/arm_timer.h>
> -#include <asm/hardware/cache-l2x0.h>
> -#include <asm/hardware/timer-sp.h>
> -
> -#include <mach/ct-ca9x4.h>
> -#include <mach/motherboard.h>
> -
> -#include <plat/sched_clock.h>
> -#include <plat/platsmp.h>
>  
>  #include "core.h"
>  
> -#define V2M_PA_CS0     0x40000000
> -#define V2M_PA_CS1     0x44000000
> -#define V2M_PA_CS2     0x48000000
> -#define V2M_PA_CS3     0x4c000000
> -#define V2M_PA_CS7     0x10000000
> -
> -static struct map_desc v2m_io_desc[] __initdata = {
> -       {
> -               .virtual        = V2M_PERIPH,
> -               .pfn            = __phys_to_pfn(V2M_PA_CS7),
> -               .length         = SZ_128K,
> -               .type           = MT_DEVICE,
> -       },
> -};
> -
> -static void __init v2m_sp804_init(void __iomem *base, unsigned int irq)
> -{
> -       if (WARN_ON(!base || irq == NO_IRQ))
> -               return;
> -
> -       sp804_clocksource_init(base + TIMER_2_BASE, "v2m-timer1");
> -       sp804_clockevents_init(base + TIMER_1_BASE, irq, "v2m-timer0");
> -}
> -
> -
> -static struct resource v2m_pcie_i2c_resource = {
> -       .start  = V2M_SERIAL_BUS_PCI,
> -       .end    = V2M_SERIAL_BUS_PCI + SZ_4K - 1,
> -       .flags  = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device v2m_pcie_i2c_device = {
> -       .name           = "versatile-i2c",
> -       .id             = 0,
> -       .num_resources  = 1,
> -       .resource       = &v2m_pcie_i2c_resource,
> -};
> -
> -static struct resource v2m_ddc_i2c_resource = {
> -       .start  = V2M_SERIAL_BUS_DVI,
> -       .end    = V2M_SERIAL_BUS_DVI + SZ_4K - 1,
> -       .flags  = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device v2m_ddc_i2c_device = {
> -       .name           = "versatile-i2c",
> -       .id             = 1,
> -       .num_resources  = 1,
> -       .resource       = &v2m_ddc_i2c_resource,
> -};
> -
> -static struct resource v2m_eth_resources[] = {
> -       {
> -               .start  = V2M_LAN9118,
> -               .end    = V2M_LAN9118 + SZ_64K - 1,
> -               .flags  = IORESOURCE_MEM,
> -       }, {
> -               .start  = IRQ_V2M_LAN9118,
> -               .end    = IRQ_V2M_LAN9118,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -};
> -
> -static struct smsc911x_platform_config v2m_eth_config = {
> -       .flags          = SMSC911X_USE_32BIT,
> -       .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH,
> -       .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
> -       .phy_interface  = PHY_INTERFACE_MODE_MII,
> -};
> -
> -static struct platform_device v2m_eth_device = {
> -       .name           = "smsc911x",
> -       .id             = -1,
> -       .resource       = v2m_eth_resources,
> -       .num_resources  = ARRAY_SIZE(v2m_eth_resources),
> -       .dev.platform_data = &v2m_eth_config,
> -};
> -
> -static struct regulator_consumer_supply v2m_eth_supplies[] = {
> -       REGULATOR_SUPPLY("vddvario", "smsc911x"),
> -       REGULATOR_SUPPLY("vdd33a", "smsc911x"),
> -};
> -
> -static struct resource v2m_usb_resources[] = {
> -       {
> -               .start  = V2M_ISP1761,
> -               .end    = V2M_ISP1761 + SZ_128K - 1,
> -               .flags  = IORESOURCE_MEM,
> -       }, {
> -               .start  = IRQ_V2M_ISP1761,
> -               .end    = IRQ_V2M_ISP1761,
> -               .flags  = IORESOURCE_IRQ,
> -       },
> -};
> -
> -static struct isp1760_platform_data v2m_usb_config = {
> -       .is_isp1761             = true,
> -       .bus_width_16           = false,
> -       .port1_otg              = true,
> -       .analog_oc              = false,
> -       .dack_polarity_high     = false,
> -       .dreq_polarity_high     = false,
> -};
> -
> -static struct platform_device v2m_usb_device = {
> -       .name           = "isp1760",
> -       .id             = -1,
> -       .resource       = v2m_usb_resources,
> -       .num_resources  = ARRAY_SIZE(v2m_usb_resources),
> -       .dev.platform_data = &v2m_usb_config,
> -};
> -
> -static struct physmap_flash_data v2m_flash_data = {
> -       .width          = 4,
> -};
> -
> -static struct resource v2m_flash_resources[] = {
> -       {
> -               .start  = V2M_NOR0,
> -               .end    = V2M_NOR0 + SZ_64M - 1,
> -               .flags  = IORESOURCE_MEM,
> -       }, {
> -               .start  = V2M_NOR1,
> -               .end    = V2M_NOR1 + SZ_64M - 1,
> -               .flags  = IORESOURCE_MEM,
> -       },
> -};
> -
> -static struct platform_device v2m_flash_device = {
> -       .name           = "physmap-flash",
> -       .id             = -1,
> -       .resource       = v2m_flash_resources,
> -       .num_resources  = ARRAY_SIZE(v2m_flash_resources),
> -       .dev.platform_data = &v2m_flash_data,
> -};
> -
> -static struct pata_platform_info v2m_pata_data = {
> -       .ioport_shift   = 2,
> -};
> -
> -static struct resource v2m_pata_resources[] = {
> -       {
> -               .start  = V2M_CF,
> -               .end    = V2M_CF + 0xff,
> -               .flags  = IORESOURCE_MEM,
> -       }, {
> -               .start  = V2M_CF + 0x100,
> -               .end    = V2M_CF + SZ_4K - 1,
> -               .flags  = IORESOURCE_MEM,
> -       },
> -};
> -
> -static struct platform_device v2m_cf_device = {
> -       .name           = "pata_platform",
> -       .id             = -1,
> -       .resource       = v2m_pata_resources,
> -       .num_resources  = ARRAY_SIZE(v2m_pata_resources),
> -       .dev.platform_data = &v2m_pata_data,
> -};
> -
> -static struct mmci_platform_data v2m_mmci_data = {
> -       .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
> -       .status         = vexpress_get_mci_cardin,
> -       .gpio_cd        = -1,
> -       .gpio_wp        = -1,
> -};
> -
> -static struct resource v2m_sysreg_resources[] = {
> -       {
> -               .start  = V2M_SYSREGS,
> -               .end    = V2M_SYSREGS + 0xfff,
> -               .flags  = IORESOURCE_MEM,
> -       },
> -};
> -
> -static struct platform_device v2m_sysreg_device = {
> -       .name           = "vexpress-sysreg",
> -       .id             = -1,
> -       .resource       = v2m_sysreg_resources,
> -       .num_resources  = ARRAY_SIZE(v2m_sysreg_resources),
> -};
> -
> -static struct platform_device v2m_muxfpga_device = {
> -       .name           = "vexpress-muxfpga",
> -       .id             = 0,
> -       .num_resources  = 1,
> -       .resource       = (struct resource []) {
> -               VEXPRESS_RES_FUNC(0, 7),
> -       }
> -};
> -
> -static struct platform_device v2m_shutdown_device = {
> -       .name           = "vexpress-shutdown",
> -       .id             = 0,
> -       .num_resources  = 1,
> -       .resource       = (struct resource []) {
> -               VEXPRESS_RES_FUNC(0, 8),
> -       }
> -};
> -
> -static struct platform_device v2m_reboot_device = {
> -       .name           = "vexpress-reboot",
> -       .id             = 0,
> -       .num_resources  = 1,
> -       .resource       = (struct resource []) {
> -               VEXPRESS_RES_FUNC(0, 9),
> -       }
> -};
> -
> -static struct platform_device v2m_dvimode_device = {
> -       .name           = "vexpress-dvimode",
> -       .id             = 0,
> -       .num_resources  = 1,
> -       .resource       = (struct resource []) {
> -               VEXPRESS_RES_FUNC(0, 11),
> -       }
> -};
> -
> -static AMBA_APB_DEVICE(aaci,  "mb:aaci",  0, V2M_AACI, IRQ_V2M_AACI, NULL);
> -static AMBA_APB_DEVICE(mmci,  "mb:mmci",  0, V2M_MMCI, IRQ_V2M_MMCI, &v2m_mmci_data);
> -static AMBA_APB_DEVICE(kmi0,  "mb:kmi0",  0, V2M_KMI0, IRQ_V2M_KMI0, NULL);
> -static AMBA_APB_DEVICE(kmi1,  "mb:kmi1",  0, V2M_KMI1, IRQ_V2M_KMI1, NULL);
> -static AMBA_APB_DEVICE(uart0, "mb:uart0", 0, V2M_UART0, IRQ_V2M_UART0, NULL);
> -static AMBA_APB_DEVICE(uart1, "mb:uart1", 0, V2M_UART1, IRQ_V2M_UART1, NULL);
> -static AMBA_APB_DEVICE(uart2, "mb:uart2", 0, V2M_UART2, IRQ_V2M_UART2, NULL);
> -static AMBA_APB_DEVICE(uart3, "mb:uart3", 0, V2M_UART3, IRQ_V2M_UART3, NULL);
> -static AMBA_APB_DEVICE(wdt,   "mb:wdt",   0, V2M_WDT, IRQ_V2M_WDT, NULL);
> -static AMBA_APB_DEVICE(rtc,   "mb:rtc",   0, V2M_RTC, IRQ_V2M_RTC, NULL);
> -
> -static struct amba_device *v2m_amba_devs[] __initdata = {
> -       &aaci_device,
> -       &mmci_device,
> -       &kmi0_device,
> -       &kmi1_device,
> -       &uart0_device,
> -       &uart1_device,
> -       &uart2_device,
> -       &uart3_device,
> -       &wdt_device,
> -       &rtc_device,
> -};
> -
> -static void __init v2m_timer_init(void)
> -{
> -       vexpress_clk_init(ioremap(V2M_SYSCTL, SZ_4K));
> -       v2m_sp804_init(ioremap(V2M_TIMER01, SZ_4K), IRQ_V2M_TIMER0);
> -}
> -
> -static void __init v2m_init_early(void)
> -{
> -       if (ct_desc->init_early)
> -               ct_desc->init_early();
> -       versatile_sched_clock_init(vexpress_get_24mhz_clock_base(), 24000000);
> -}
> -
> -struct ct_desc *ct_desc;
> -
> -static struct ct_desc *ct_descs[] __initdata = {
> -#ifdef CONFIG_ARCH_VEXPRESS_CA9X4
> -       &ct_ca9x4_desc,
> -#endif
> -};
> -
> -static void __init v2m_populate_ct_desc(void)
> -{
> -       int i;
> -       u32 current_tile_id;
> -
> -       ct_desc = NULL;
> -       current_tile_id = vexpress_get_procid(VEXPRESS_SITE_MASTER)
> -                               & V2M_CT_ID_MASK;
> -
> -       for (i = 0; i < ARRAY_SIZE(ct_descs) && !ct_desc; ++i)
> -               if (ct_descs[i]->id == current_tile_id)
> -                       ct_desc = ct_descs[i];
> -
> -       if (!ct_desc)
> -               panic("vexpress: this kernel does not support core tile ID 0x%08x when booting via ATAGs.\n"
> -                     "You may need a device tree blob or a different kernel to boot on this board.\n",
> -                     current_tile_id);
> -}
> -
> -static void __init v2m_map_io(void)
> -{
> -       iotable_init(v2m_io_desc, ARRAY_SIZE(v2m_io_desc));
> -       vexpress_sysreg_early_init(ioremap(V2M_SYSREGS, SZ_4K));
> -       v2m_populate_ct_desc();
> -       ct_desc->map_io();
> -}
> -
> -static void __init v2m_init_irq(void)
> -{
> -       ct_desc->init_irq();
> -}
> -
> -static void __init v2m_init(void)
> -{
> -       int i;
> -
> -       regulator_register_fixed(0, v2m_eth_supplies,
> -                       ARRAY_SIZE(v2m_eth_supplies));
> -
> -       platform_device_register(&v2m_sysreg_device);
> -       platform_device_register(&v2m_pcie_i2c_device);
> -       platform_device_register(&v2m_ddc_i2c_device);
> -       platform_device_register(&v2m_flash_device);
> -       platform_device_register(&v2m_cf_device);
> -       platform_device_register(&v2m_eth_device);
> -       platform_device_register(&v2m_usb_device);
> -
> -       for (i = 0; i < ARRAY_SIZE(v2m_amba_devs); i++)
> -               amba_device_register(v2m_amba_devs[i], &iomem_resource);
> -
> -       vexpress_syscfg_device_register(&v2m_muxfpga_device);
> -       vexpress_syscfg_device_register(&v2m_shutdown_device);
> -       vexpress_syscfg_device_register(&v2m_reboot_device);
> -       vexpress_syscfg_device_register(&v2m_dvimode_device);
> -
> -       ct_desc->init_tile();
> -}
> -
> -MACHINE_START(VEXPRESS, "ARM-Versatile Express")
> -       .atag_offset    = 0x100,
> -       .smp            = smp_ops(vexpress_smp_ops),
> -       .map_io         = v2m_map_io,
> -       .init_early     = v2m_init_early,
> -       .init_irq       = v2m_init_irq,
> -       .init_time      = v2m_timer_init,
> -       .init_machine   = v2m_init,
> -MACHINE_END
> -
> -static void __init v2m_dt_init(void)
> -{
> -       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> -}
> -
>  static const char * const v2m_dt_match[] __initconst = {
>         "arm,vexpress",
>         NULL,
> @@ -386,5 +13,4 @@ DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")
>         .l2c_aux_mask   = 0xfe0fffff,
>         .smp            = smp_ops(vexpress_smp_dt_ops),
>         .smp_init       = smp_init_ops(vexpress_smp_init_ops),
> -       .init_machine   = v2m_dt_init,
>  MACHINE_END
> diff --git a/arch/arm/plat-versatile/Kconfig b/arch/arm/plat-versatile/Kconfig
> index a301ca2..49b8ef9 100644
> --- a/arch/arm/plat-versatile/Kconfig
> +++ b/arch/arm/plat-versatile/Kconfig
> @@ -4,6 +4,6 @@ config PLAT_VERSATILE_CLOCK
>         bool
>  
>  config PLAT_VERSATILE_SCHED_CLOCK
> -       def_bool y
> +       bool
>  
>  endif
> diff --git a/drivers/clk/versatile/Makefile b/drivers/clk/versatile/Makefile
> index 162e519..8ff0374 100644
> --- a/drivers/clk/versatile/Makefile
> +++ b/drivers/clk/versatile/Makefile
> @@ -2,6 +2,5 @@
>  obj-$(CONFIG_ICST)             += clk-icst.o clk-versatile.o
>  obj-$(CONFIG_INTEGRATOR_IMPD1) += clk-impd1.o
>  obj-$(CONFIG_ARCH_REALVIEW)    += clk-realview.o
> -obj-$(CONFIG_ARCH_VEXPRESS)    += clk-vexpress.o
>  obj-$(CONFIG_CLK_SP810)                += clk-sp810.o
>  obj-$(CONFIG_CLK_VEXPRESS_OSC) += clk-vexpress-osc.o
> diff --git a/drivers/clk/versatile/clk-vexpress-osc.c b/drivers/clk/versatile/clk-vexpress-osc.c
> index 529a59c..765f1e0 100644
> --- a/drivers/clk/versatile/clk-vexpress-osc.c
> +++ b/drivers/clk/versatile/clk-vexpress-osc.c
> @@ -70,7 +70,6 @@ static struct clk_ops vexpress_osc_ops = {
>  
>  static int vexpress_osc_probe(struct platform_device *pdev)
>  {
> -       struct clk_lookup *cl = pdev->dev.platform_data; /* Non-DT lookup */
>         struct clk_init_data init;
>         struct vexpress_osc *osc;
>         struct clk *clk;
> @@ -106,12 +105,6 @@ static int vexpress_osc_probe(struct platform_device *pdev)
>  
>         of_clk_add_provider(pdev->dev.of_node, of_clk_src_simple_get, clk);
>  
> -       /* Only happens for non-DT cases */
> -       if (cl) {
> -               cl->clk = clk;
> -               clkdev_add(cl);
> -       }
> -
>         dev_dbg(&pdev->dev, "Registered clock '%s'\n", init.name);
>  
>         return 0;
> diff --git a/drivers/clk/versatile/clk-vexpress.c b/drivers/clk/versatile/clk-vexpress.c
> deleted file mode 100644
> index 2d5e1b4..0000000
> --- a/drivers/clk/versatile/clk-vexpress.c
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -/*
> - * 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.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * Copyright (C) 2012 ARM Limited
> - */
> -
> -#include <linux/amba/sp810.h>
> -#include <linux/clkdev.h>
> -#include <linux/clk-provider.h>
> -#include <linux/err.h>
> -#include <linux/vexpress.h>
> -
> -static struct clk *vexpress_sp810_timerclken[4];
> -static DEFINE_SPINLOCK(vexpress_sp810_lock);
> -
> -static void __init vexpress_sp810_init(void __iomem *base)
> -{
> -       int i;
> -
> -       if (WARN_ON(!base))
> -               return;
> -
> -       for (i = 0; i < ARRAY_SIZE(vexpress_sp810_timerclken); i++) {
> -               char name[12];
> -               const char *parents[] = {
> -                       "v2m:refclk32khz", /* REFCLK */
> -                       "v2m:refclk1mhz" /* TIMCLK */
> -               };
> -
> -               snprintf(name, ARRAY_SIZE(name), "timerclken%d", i);
> -
> -               vexpress_sp810_timerclken[i] = clk_register_mux(NULL, name,
> -                               parents, 2, CLK_SET_RATE_NO_REPARENT,
> -                               base + SCCTRL, SCCTRL_TIMERENnSEL_SHIFT(i), 1,
> -                               0, &vexpress_sp810_lock);
> -
> -               if (WARN_ON(IS_ERR(vexpress_sp810_timerclken[i])))
> -                       break;
> -       }
> -}
> -
> -
> -static const char * const vexpress_clk_24mhz_periphs[] __initconst = {
> -       "mb:uart0", "mb:uart1", "mb:uart2", "mb:uart3",
> -       "mb:mmci", "mb:kmi0", "mb:kmi1"
> -};
> -
> -void __init vexpress_clk_init(void __iomem *sp810_base)
> -{
> -       struct clk *clk;
> -       int i;
> -
> -       clk = clk_register_fixed_rate(NULL, "dummy_apb_pclk", NULL,
> -                       CLK_IS_ROOT, 0);
> -       WARN_ON(clk_register_clkdev(clk, "apb_pclk", NULL));
> -
> -       clk = clk_register_fixed_rate(NULL, "v2m:clk_24mhz", NULL,
> -                       CLK_IS_ROOT, 24000000);
> -       for (i = 0; i < ARRAY_SIZE(vexpress_clk_24mhz_periphs); i++)
> -               WARN_ON(clk_register_clkdev(clk, NULL,
> -                               vexpress_clk_24mhz_periphs[i]));
> -
> -       clk = clk_register_fixed_rate(NULL, "v2m:refclk32khz", NULL,
> -                       CLK_IS_ROOT, 32768);
> -       WARN_ON(clk_register_clkdev(clk, NULL, "v2m:wdt"));
> -
> -       clk = clk_register_fixed_rate(NULL, "v2m:refclk1mhz", NULL,
> -                       CLK_IS_ROOT, 1000000);
> -
> -       vexpress_sp810_init(sp810_base);
> -
> -       for (i = 0; i < ARRAY_SIZE(vexpress_sp810_timerclken); i++)
> -               WARN_ON(clk_set_parent(vexpress_sp810_timerclken[i], clk));
> -
> -       WARN_ON(clk_register_clkdev(vexpress_sp810_timerclken[0],
> -                               "v2m-timer0", "sp804"));
> -       WARN_ON(clk_register_clkdev(vexpress_sp810_timerclken[1],
> -                               "v2m-timer1", "sp804"));
> -}
> diff --git a/drivers/mfd/vexpress-sysreg.c b/drivers/mfd/vexpress-sysreg.c
> index 9e21e4f..7147b30 100644
> --- a/drivers/mfd/vexpress-sysreg.c
> +++ b/drivers/mfd/vexpress-sysreg.c
> @@ -47,71 +47,26 @@
>  #define SYS_HBI_MASK           0xfff
>  #define SYS_PROCIDx_HBI_SHIFT  0
>  
> -#define SYS_MCI_CARDIN         (1 << 0)
> -#define SYS_MCI_WPROT          (1 << 1)
> -
>  #define SYS_MISC_MASTERSITE    (1 << 14)
>  
> -
> -static void __iomem *__vexpress_sysreg_base;
> -
> -static void __iomem *vexpress_sysreg_base(void)
> +void vexpress_flags_set(u32 data)
>  {
> -       if (!__vexpress_sysreg_base) {
> +       static void __iomem *base;
> +
> +       if (!base) {
>                 struct device_node *node = of_find_compatible_node(NULL, NULL,
>                                 "arm,vexpress-sysreg");
>  
> -               __vexpress_sysreg_base = of_iomap(node, 0);
> +               base = of_iomap(node, 0);
>         }
>  
> -       WARN_ON(!__vexpress_sysreg_base);
> -
> -       return __vexpress_sysreg_base;
> -}
> -
> -
> -static int vexpress_sysreg_get_master(void)
> -{
> -       if (readl(vexpress_sysreg_base() + SYS_MISC) & SYS_MISC_MASTERSITE)
> -               return VEXPRESS_SITE_DB2;
> -
> -       return VEXPRESS_SITE_DB1;
> -}
> -
> -void vexpress_flags_set(u32 data)
> -{
> -       writel(~0, vexpress_sysreg_base() + SYS_FLAGSCLR);
> -       writel(data, vexpress_sysreg_base() + SYS_FLAGSSET);
> -}
> -
> -unsigned int vexpress_get_mci_cardin(struct device *dev)
> -{
> -       return readl(vexpress_sysreg_base() + SYS_MCI) & SYS_MCI_CARDIN;
> -}
> -
> -u32 vexpress_get_procid(int site)
> -{
> -       if (site == VEXPRESS_SITE_MASTER)
> -               site = vexpress_sysreg_get_master();
> +       if (WARN_ON(!base))
> +               return;
>  
> -       return readl(vexpress_sysreg_base() + (site == VEXPRESS_SITE_DB1 ?
> -                       SYS_PROCID0 : SYS_PROCID1));
> +       writel(~0, base + SYS_FLAGSCLR);
> +       writel(data, base + SYS_FLAGSSET);
>  }
>  
> -void __iomem *vexpress_get_24mhz_clock_base(void)
> -{
> -       return vexpress_sysreg_base() + SYS_24MHZ;
> -}
> -
> -
> -void __init vexpress_sysreg_early_init(void __iomem *base)
> -{
> -       __vexpress_sysreg_base = base;
> -
> -       vexpress_config_set_master(vexpress_sysreg_get_master());
> -}
> -
> -
>  /* The sysreg block is just a random collection of various functions... */
>  
>  static struct syscon_platform_data vexpress_sysreg_sys_id_pdata = {
> @@ -210,6 +165,7 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)
>         struct resource *mem;
>         void __iomem *base;
>         struct bgpio_chip *mmc_gpio_chip;
> +       int master;
>         u32 dt_hbi;
>  
>         mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -220,11 +176,14 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)
>         if (!base)
>                 return -ENOMEM;
>  
> -       vexpress_config_set_master(vexpress_sysreg_get_master());
> +       master = readl(base + SYS_MISC) & SYS_MISC_MASTERSITE ?
> +                       VEXPRESS_SITE_DB2 : VEXPRESS_SITE_DB1;
> +       vexpress_config_set_master(master);
>  
>         /* Confirm board type against DT property, if available */
>         if (of_property_read_u32(of_allnodes, "arm,hbi", &dt_hbi) == 0) {
> -               u32 id = vexpress_get_procid(VEXPRESS_SITE_MASTER);
> +               u32 id = readl(base + (master == VEXPRESS_SITE_DB1 ?
> +                                SYS_PROCID0 : SYS_PROCID1));
>                 u32 hbi = (id >> SYS_PROCIDx_HBI_SHIFT) & SYS_HBI_MASK;
>  
>                 if (WARN_ON(dt_hbi != hbi))
> diff --git a/drivers/misc/vexpress-syscfg.c b/drivers/misc/vexpress-syscfg.c
> index b3a8123..c344483 100644
> --- a/drivers/misc/vexpress-syscfg.c
> +++ b/drivers/misc/vexpress-syscfg.c
> @@ -145,7 +145,7 @@ static struct regmap_config vexpress_syscfg_regmap_config = {
>  static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
>                 void *context)
>  {
> -       struct platform_device *pdev = to_platform_device(dev);
> +       int err;
>         struct vexpress_syscfg *syscfg = context;
>         struct vexpress_syscfg_func *func;
>         struct property *prop;
> @@ -155,32 +155,18 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
>         u32 site, position, dcc;
>         int i;
>  
> -       if (dev->of_node) {
> -               int err = vexpress_config_get_topo(dev->of_node, &site,
> +       err = vexpress_config_get_topo(dev->of_node, &site,
>                                 &position, &dcc);
> +       if (err)
> +               return ERR_PTR(err);
>  
> -               if (err)
> -                       return ERR_PTR(err);
> -
> -               prop = of_find_property(dev->of_node,
> -                               "arm,vexpress-sysreg,func", NULL);
> -               if (!prop)
> -                       return ERR_PTR(-EINVAL);
> -
> -               num = prop->length / sizeof(u32) / 2;
> -               val = prop->value;
> -       } else {
> -               if (pdev->num_resources != 1 ||
> -                               pdev->resource[0].flags != IORESOURCE_BUS)
> -                       return ERR_PTR(-EFAULT);
> -
> -               site = pdev->resource[0].start;
> -               if (site == VEXPRESS_SITE_MASTER)
> -                       site = vexpress_config_get_master();
> -               position = 0;
> -               dcc = 0;
> -               num = 1;
> -       }
> +       prop = of_find_property(dev->of_node,
> +                       "arm,vexpress-sysreg,func", NULL);
> +       if (!prop)
> +               return ERR_PTR(-EINVAL);
> +
> +       num = prop->length / sizeof(u32) / 2;
> +       val = prop->value;
>  
>         /*
>          * "arm,vexpress-energy" function used to be described
> @@ -207,13 +193,8 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
>         for (i = 0; i < num; i++) {
>                 u32 function, device;
>  
> -               if (dev->of_node) {
> -                       function = be32_to_cpup(val++);
> -                       device = be32_to_cpup(val++);
> -               } else {
> -                       function = pdev->resource[0].end;
> -                       device = pdev->id;
> -               }
> +               function = be32_to_cpup(val++);
> +               device = be32_to_cpup(val++);
>  
>                 dev_dbg(dev, "func %p: %u/%u/%u/%u/%u\n",
>                                 func, site, position, dcc,
> @@ -265,17 +246,6 @@ static struct vexpress_config_bridge_ops vexpress_syscfg_bridge_ops = {
>  };
>  
>  
> -/* Non-DT hack, to be gone... */
> -static struct device *vexpress_syscfg_bridge;
> -
> -int vexpress_syscfg_device_register(struct platform_device *pdev)
> -{
> -       pdev->dev.parent = vexpress_syscfg_bridge;
> -
> -       return platform_device_register(pdev);
> -}
> -
> -
>  static int vexpress_syscfg_probe(struct platform_device *pdev)
>  {
>         struct vexpress_syscfg *syscfg;
> @@ -303,10 +273,6 @@ static int vexpress_syscfg_probe(struct platform_device *pdev)
>         if (IS_ERR(bridge))
>                 return PTR_ERR(bridge);
>  
> -       /* Non-DT case */
> -       if (!pdev->dev.of_node)
> -               vexpress_syscfg_bridge = bridge;
> -
>         return 0;
>  }
>  
> diff --git a/drivers/power/reset/vexpress-poweroff.c b/drivers/power/reset/vexpress-poweroff.c
> index 4dc102e2..7b9b6ea 100644
> --- a/drivers/power/reset/vexpress-poweroff.c
> +++ b/drivers/power/reset/vexpress-poweroff.c
> @@ -88,22 +88,19 @@ static struct of_device_id vexpress_reset_of_match[] = {
>  
>  static int vexpress_reset_probe(struct platform_device *pdev)
>  {
> -       enum vexpress_reset_func func;
>         const struct of_device_id *match =
>                         of_match_device(vexpress_reset_of_match, &pdev->dev);
>         struct regmap *regmap;
>  
> -       if (match)
> -               func = (enum vexpress_reset_func)match->data;
> -       else
> -               func = pdev->id_entry->driver_data;
> +       if (!match)
> +               return -EINVAL;
>  
>         regmap = devm_regmap_init_vexpress_config(&pdev->dev);
>         if (IS_ERR(regmap))
>                 return PTR_ERR(regmap);
>         dev_set_drvdata(&pdev->dev, regmap);
>  
> -       switch (func) {
> +       switch ((enum vexpress_reset_func)match->data) {
>         case FUNC_SHUTDOWN:
>                 vexpress_power_off_device = &pdev->dev;
>                 pm_power_off = vexpress_power_off;
> @@ -124,20 +121,12 @@ static int vexpress_reset_probe(struct platform_device *pdev)
>         return 0;
>  }
>  
> -static const struct platform_device_id vexpress_reset_id_table[] = {
> -       { .name = "vexpress-reset", .driver_data = FUNC_RESET, },
> -       { .name = "vexpress-shutdown", .driver_data = FUNC_SHUTDOWN, },
> -       { .name = "vexpress-reboot", .driver_data = FUNC_REBOOT, },
> -       {}
> -};
> -
>  static struct platform_driver vexpress_reset_driver = {
>         .probe = vexpress_reset_probe,
>         .driver = {
>                 .name = "vexpress-reset",
>                 .of_match_table = vexpress_reset_of_match,
>         },
> -       .id_table = vexpress_reset_id_table,
>  };
>  
>  static int __init vexpress_reset_init(void)
> diff --git a/include/linux/vexpress.h b/include/linux/vexpress.h
> index a4c9547..f8e76e0 100644
> --- a/include/linux/vexpress.h
> +++ b/include/linux/vexpress.h
> @@ -15,8 +15,6 @@
>  #define _LINUX_VEXPRESS_H
>  
>  #include <linux/device.h>
> -#include <linux/platform_device.h>
> -#include <linux/reboot.h>
>  #include <linux/regmap.h>
>  
>  #define VEXPRESS_SITE_MB               0
> @@ -24,13 +22,6 @@
>  #define VEXPRESS_SITE_DB2              2
>  #define VEXPRESS_SITE_MASTER           0xf
>  
> -#define VEXPRESS_RES_FUNC(_site, _func)        \
> -{                                      \
> -       .start = (_site),               \
> -       .end = (_func),                 \
> -       .flags = IORESOURCE_BUS,        \
> -}
> -
>  /* Config infrastructure */
>  
>  void vexpress_config_set_master(u32 site);
> @@ -58,16 +49,6 @@ struct regmap *devm_regmap_init_vexpress_config(struct device *dev);
>  
>  /* Platform control */
>  
> -unsigned int vexpress_get_mci_cardin(struct device *dev);
> -u32 vexpress_get_procid(int site);
> -void *vexpress_get_24mhz_clock_base(void);
>  void vexpress_flags_set(u32 data);
>  
> -void vexpress_sysreg_early_init(void __iomem *base);
> -int vexpress_syscfg_device_register(struct platform_device *pdev);
> -
> -/* Clocks */
> -
> -void vexpress_clk_init(void __iomem *sp810_base);
> -
>  #endif
> -- 
> 1.9.1
> 



More information about the linux-arm-kernel mailing list