[PATCHv2 1/1] ARM:vt8500: Convert to use .restart and remove arch_reset()

Alexey Charkov alchark at gmail.com
Wed Jul 18 08:52:26 EDT 2012


2012/7/18 Tony Prisk <sentientnz at yahoo.co.nz>:
> Changed the existing board files to use .restart in there machine

Looks like a typo here :)

> descriptions.
> Removed system.h as it only contained an inline for arch_reset()
>
> Added device tree support for the restart controller.
> Device tree support for vt8500 is still a work-in-progress.
>
> Signed-off-by: Tony Prisk <linux at prisktech.co.nz>
> ---
>  arch/arm/mach-vt8500/Makefile               |    2 +-
>  arch/arm/mach-vt8500/bv07.c                 |    3 +
>  arch/arm/mach-vt8500/include/mach/restart.h |   17 +++++++
>  arch/arm/mach-vt8500/include/mach/system.h  |   13 -----
>  arch/arm/mach-vt8500/restart.c              |   64 +++++++++++++++++++++++++++
>  arch/arm/mach-vt8500/wm8505_7in.c           |    4 +-
>  6 files changed, 88 insertions(+), 15 deletions(-)
>  create mode 100644 arch/arm/mach-vt8500/include/mach/restart.h
>  delete mode 100644 arch/arm/mach-vt8500/include/mach/system.h
>  create mode 100644 arch/arm/mach-vt8500/restart.c
>
> diff --git a/arch/arm/mach-vt8500/Makefile b/arch/arm/mach-vt8500/Makefile
> index 81aedb7..54e6997 100644
> --- a/arch/arm/mach-vt8500/Makefile
> +++ b/arch/arm/mach-vt8500/Makefile
> @@ -1,4 +1,4 @@
> -obj-y += devices.o gpio.o irq.o timer.o
> +obj-y += devices.o gpio.o irq.o timer.o restart.o
>
>  obj-$(CONFIG_VTWM_VERSION_VT8500) += devices-vt8500.o
>  obj-$(CONFIG_VTWM_VERSION_WM8505) += devices-wm8505.o
> diff --git a/arch/arm/mach-vt8500/bv07.c b/arch/arm/mach-vt8500/bv07.c
> index a464c75..f9fbeb2 100644
> --- a/arch/arm/mach-vt8500/bv07.c
> +++ b/arch/arm/mach-vt8500/bv07.c
> @@ -23,6 +23,7 @@
>
>  #include <asm/mach-types.h>
>  #include <asm/mach/arch.h>
> +#include <mach/restart.h>
>
>  #include "devices.h"
>
> @@ -62,6 +63,7 @@ void __init bv07_init(void)
>      else
>          printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n");
>
> +    wmt_setup_restart();
>      vt8500_set_resources();
>      platform_add_devices(devices, ARRAY_SIZE(devices));
>      vt8500_gpio_init();
> @@ -69,6 +71,7 @@ void __init bv07_init(void)
>
>  MACHINE_START(BV07, "Benign BV07 Mini Netbook")
>      .atag_offset    = 0x100,
> +    .restart    = wmt_restart,
>      .reserve    = vt8500_reserve_mem,
>      .map_io        = vt8500_map_io,
>      .init_irq    = vt8500_init_irq,
> diff --git a/arch/arm/mach-vt8500/include/mach/restart.h b/arch/arm/mach-vt8500/include/mach/restart.h
> new file mode 100644
> index 0000000..89f9b78
> --- /dev/null
> +++ b/arch/arm/mach-vt8500/include/mach/restart.h
> @@ -0,0 +1,17 @@
> +/* linux/arch/arm/mach-vt8500/restart.h
> + *
> + * Copyright (C) 2012 Tony Prisk <linux at prisktech.co.nz>
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * 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.
> + *
> + */
> +
> +void wmt_setup_restart(void);
> +void wmt_restart(char mode, const char *cmd);
> diff --git a/arch/arm/mach-vt8500/include/mach/system.h b/arch/arm/mach-vt8500/include/mach/system.h
> deleted file mode 100644
> index 58fa801..0000000
> --- a/arch/arm/mach-vt8500/include/mach/system.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/*
> - * arch/arm/mach-vt8500/include/mach/system.h
> - *
> - */
> -#include <asm/io.h>
> -
> -/* PM Software Reset request register */
> -#define VT8500_PMSR_VIRT    0xf8130060
> -
> -static inline void arch_reset(char mode, const char *cmd)
> -{
> -    writel(1, VT8500_PMSR_VIRT);
> -}
> diff --git a/arch/arm/mach-vt8500/restart.c b/arch/arm/mach-vt8500/restart.c
> new file mode 100644
> index 0000000..9134aea
> --- /dev/null
> +++ b/arch/arm/mach-vt8500/restart.c
> @@ -0,0 +1,64 @@
> +/* linux/arch/arm/mach-vt8500/restart.c
> + *
> + * Copyright (C) 2012 Tony Prisk <linux at prisktech.co.nz>
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * 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.
> + *
> + */
> +#include <asm/io.h>
> +#include <linux/ioport.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +
> +/* PM Software Reset request register */
> +#define LEGACY_PMSR_REG        0xD8130060
> +#define WMT_PRIZM_PMSR_REG    0x60
> +
> +static void __iomem *wmt_restart_reg;
> +
> +void wmt_setup_restart(void)
> +{
> +    struct device_node *np;
> +    void __iomem *pmc_base;
> +
> +    /*
> +     * Check if Power Mgmt Controller node is present in device tree. If no
> +     * device tree node, use the legacy PMSR value (valid for all current
> +     * SoCs).
> +     */
> +    np = of_find_compatible_node(NULL, NULL, "wmt,prizm-pmc");
> +    if (np) {
> +        pmc_base = of_iomap(np, 0);
> +
> +        if (!pmc_base)
> +            pr_err("%s:of_iomap(pmc) failed\n", __func__);
> +
> +        of_node_put(np);
> +
> +        wmt_restart_reg = (void *)((u32)(pmc_base) + WMT_PRIZM_PMSR_REG);

GCC allows pointer arithmetics on void * directly, and that's relied
upon heavily throughout the kernel code, so you don't need to cast it
here.

> +    } else {
> +        if (!request_mem_region(LEGACY_PMSR_REG, 4, NULL)) {

Is this required? I believe we could drop it just as well.

Thanks,
Alexey



More information about the linux-arm-kernel mailing list