linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: hvaibhav@ti.com (Vaibhav Hiremath)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/13] ARM: OMAP2+: PRCM: create SoC-specific chip restart functions
Date: Wed, 31 Oct 2012 12:05:33 +0530	[thread overview]
Message-ID: <5090C6B5.3080407@ti.com> (raw)
In-Reply-To: <20121025232116.17558.47458.stgit@dusk.lan>



On 10/26/2012 4:51 AM, Paul Walmsley wrote:
> Split omap_prcm_restart() from mach-omap2/prcm.c into SoC-specific
> variants.  These functions need to be able to save the reboot reason
> into the scratchpad RAM.  This implies a dependency on both the PRM
> and SCM IP blocks, so they've been moved into their own file.  This
> will eventually call functions in the PRM and SCM drivers, once those
> are created.
> 
> Signed-off-by: Paul Walmsley <paul@pwsan.com>
> ---
>  arch/arm/mach-omap2/Makefile        |    5 +++
>  arch/arm/mach-omap2/common.h        |    4 ++
>  arch/arm/mach-omap2/omap2-restart.c |   65 +++++++++++++++++++++++++++++++++++
>  arch/arm/mach-omap2/omap3-restart.c |   36 +++++++++++++++++++
>  arch/arm/mach-omap2/omap4-common.c  |   16 +++++++++
>  5 files changed, 126 insertions(+)
>  create mode 100644 arch/arm/mach-omap2/omap2-restart.c
>  create mode 100644 arch/arm/mach-omap2/omap3-restart.c
> 
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 7a628e7..aa0f59c 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -49,6 +49,11 @@ AFLAGS_sram242x.o			:=-Wa,-march=armv6
>  AFLAGS_sram243x.o			:=-Wa,-march=armv6
>  AFLAGS_sram34xx.o			:=-Wa,-march=armv7-a
>  
> +# Restart code (OMAP4/5 currently in omap4-common.c)
> +obj-$(CONFIG_SOC_OMAP2420)		+= omap2-restart.o
> +obj-$(CONFIG_SOC_OMAP2430)		+= omap2-restart.o
> +obj-$(CONFIG_ARCH_OMAP3)		+= omap3-restart.o
> +
>  # Pin multiplexing
>  obj-$(CONFIG_SOC_OMAP2420)		+= mux2420.o
>  obj-$(CONFIG_SOC_OMAP2430)		+= mux2430.o
> diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
> index 320f0d7..06dff1a 100644
> --- a/arch/arm/mach-omap2/common.h
> +++ b/arch/arm/mach-omap2/common.h
> @@ -115,6 +115,10 @@ void ti81xx_init_late(void);
>  void omap4430_init_late(void);
>  int omap2_common_pm_late_init(void);
>  void omap_prcm_restart(char, const char *);
> +void omap2xxx_restart(char, const char *);
> +void omap3xxx_restart(char, const char *);
> +void omap44xx_restart(char, const char *);
> +void omap5xxx_restart(char, const char *);
>  

Paul,

omap5xxx_restart declaration needs to be removed from here.
There is no such function implemented in code.

Thanks,
Vaibhav
>  /* This gets called from mach-omap2/io.c, do not call this */
>  void __init omap2_set_globals_tap(u32 class, void __iomem *tap);
> diff --git a/arch/arm/mach-omap2/omap2-restart.c b/arch/arm/mach-omap2/omap2-restart.c
> new file mode 100644
> index 0000000..be6bc89
> --- /dev/null
> +++ b/arch/arm/mach-omap2/omap2-restart.c
> @@ -0,0 +1,65 @@
> +/*
> + * omap2-restart.c - code common to all OMAP2xxx machines.
> + *
> + * Copyright (C) 2012 Texas Instruments
> + * Paul Walmsley
> + *
> + * 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/init.h>
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +
> +#include "common.h"
> +#include "prm2xxx.h"
> +
> +/*
> + * reset_virt_prcm_set_ck, reset_sys_ck: pointers to the virt_prcm_set
> + * clock and the sys_ck.  Used during the reset process
> + */
> +static struct clk *reset_virt_prcm_set_ck, *reset_sys_ck;
> +
> +/* Reboot handling */
> +
> +/**
> + * omap2xxx_restart - Set DPLL to bypass mode for reboot to work
> + *
> + * Set the DPLL to bypass so that reboot completes successfully.  No
> + * return value.
> + */
> +void omap2xxx_restart(char mode, const char *cmd)
> +{
> +	u32 rate;
> +
> +	rate = clk_get_rate(reset_sys_ck);
> +	clk_set_rate(reset_virt_prcm_set_ck, rate);
> +
> +	/* XXX Should save the cmd argument for use after the reboot */
> +
> +	omap2xxx_prm_dpll_reset(); /* never returns */
> +	while (1);
> +}
> +
> +/**
> + * omap2xxx_common_look_up_clks_for_reset - look up clocks needed for restart
> + *
> + * Some clocks need to be looked up in advance for the SoC restart
> + * operation to work - see omap2xxx_restart().  Returns -EINVAL upon
> + * error or 0 upon success.
> + */
> +static int __init omap2xxx_common_look_up_clks_for_reset(void)
> +{
> +	reset_virt_prcm_set_ck = clk_get(NULL, "virt_prcm_set");
> +	if (IS_ERR(reset_virt_prcm_set_ck))
> +		return -EINVAL;
> +
> +	reset_sys_ck = clk_get(NULL, "sys_ck");
> +	if (IS_ERR(reset_sys_ck))
> +		return -EINVAL;
> +
> +	return 0;
> +}
> +core_initcall(omap2xxx_common_look_up_clks_for_reset);
> diff --git a/arch/arm/mach-omap2/omap3-restart.c b/arch/arm/mach-omap2/omap3-restart.c
> new file mode 100644
> index 0000000..923c582
> --- /dev/null
> +++ b/arch/arm/mach-omap2/omap3-restart.c
> @@ -0,0 +1,36 @@
> +/*
> + * omap3-restart.c - Code common to all OMAP3xxx machines.
> + *
> + * Copyright (C) 2009, 2012 Texas Instruments
> + * Copyright (C) 2010 Nokia Corporation
> + * Tony Lindgren <tony@atomide.com>
> + * Santosh Shilimkar <santosh.shilimkar@ti.com>
> + *
> + * 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/init.h>
> +
> +#include "iomap.h"
> +#include "common.h"
> +#include "control.h"
> +#include "prm3xxx.h"
> +
> +/* Global address base setup code */
> +
> +/**
> + * omap3xxx_restart - trigger a software restart of the SoC
> + * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
> + * @cmd: passed from the userspace program rebooting the system (if provided)
> + *
> + * Resets the SoC.  For @cmd, see the 'reboot' syscall in
> + * kernel/sys.c.  No return value.
> + */
> +void omap3xxx_restart(char mode, const char *cmd)
> +{
> +	omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));
> +	omap3xxx_prm_dpll3_reset(); /* never returns */
> +	while (1);
> +}
> diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c
> index 6560e99..5348788 100644
> --- a/arch/arm/mach-omap2/omap4-common.c
> +++ b/arch/arm/mach-omap2/omap4-common.c
> @@ -35,6 +35,7 @@
>  #include "iomap.h"
>  #include "common.h"
>  #include "hsmmc.h"
> +#include "prminst44xx.h"
>  #include "omap4-sar-layout.h"
>  
>  #ifdef CONFIG_CACHE_L2X0
> @@ -249,6 +250,21 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
>  	return 0;
>  }
>  
> +/**
> + * omap44xx_restart - trigger a software restart of the SoC
> + * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
> + * @cmd: passed from the userspace program rebooting the system (if provided)
> + *
> + * Resets the SoC.  For @cmd, see the 'reboot' syscall in
> + * kernel/sys.c.  No return value.
> + */
> +void omap44xx_restart(char mode, const char *cmd)
> +{
> +	/* XXX Should save 'cmd' into scratchpad for use after reboot */
> +	omap4_prminst_global_warm_sw_reset(); /* never returns */
> +	while (1);
> +}
> +
>  static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
>  {
>  	struct omap_mmc_platform_data *pdata;
> 
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 

  reply	other threads:[~2012-10-31  6:35 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-25 23:21 [PATCH 00/13] ARM: OMAP: remove prcm.[ch] Paul Walmsley
2012-10-25 23:21 ` [PATCH 01/13] ARM: OMAP2+: common: remove mach-omap2/common.c and map_common_io code Paul Walmsley
2012-10-25 23:21 ` [PATCH 02/13] ARM: OMAP2/3: PRM: add SoC reset functions (using the CORE DPLL method) Paul Walmsley
2012-10-25 23:21 ` [PATCH 03/13] ARM: OMAP2xxx: clock: remove global 'dclk' variable Paul Walmsley
2012-10-25 23:21 ` [PATCH 05/13] ARM: OMAP2+: PRCM: create SoC-specific chip restart functions Paul Walmsley
2012-10-31  6:35   ` Vaibhav Hiremath [this message]
2012-10-31  6:38     ` Paul Walmsley
2012-11-01 11:57   ` Paul Walmsley
2012-11-07 20:03     ` Paul Walmsley
2012-10-25 23:21 ` [PATCH 04/13] ARM: OMAP2xxx: clock: move virt_prcm_set code into clkt2xxx_virt_prcm_set.c Paul Walmsley
2012-10-25 23:21 ` [PATCH 07/13] ARM: OMAP2xxx: APLL/CM: convert to use omap2_cm_wait_module_ready() Paul Walmsley
2012-10-25 23:21 ` [PATCH 06/13] ARM: OMAP2+: board files: use SoC-specific system restart functions Paul Walmsley
2012-10-25 23:21 ` [PATCH 08/13] ARM: OMAP2+: CM/clock: convert _omap2_module_wait_ready() to use SoC-independent CM functions Paul Walmsley
2012-11-08 22:15   ` Paul Walmsley
2012-10-25 23:21 ` [PATCH 09/13] ARM: OMAP2+: PRCM: remove omap2_cm_wait_idlest() Paul Walmsley
2012-10-25 23:21 ` [PATCH 10/13] ARM: OMAP2+: PRCM: split and relocate the PRM/CM globals setup Paul Walmsley
2012-10-25 23:21 ` [PATCH 11/13] ARM: OMAP2+: PRCM: consolidate PRCM-related timeout macros Paul Walmsley
2012-10-25 23:21 ` [PATCH 12/13] ARM: OMAP2+: hwmod: call to _omap4_disable_module() should use the SoC-specific call Paul Walmsley
2012-10-25 23:21 ` [PATCH 13/13] ARM: OMAP2+: PRCM: remove obsolete prcm.[ch] Paul Walmsley
2012-10-29 10:33 ` [PATCH 00/13] ARM: OMAP: remove prcm.[ch] Vaibhav Hiremath
2012-10-30 11:57   ` Paul Walmsley
2012-10-31  5:29     ` Hiremath, Vaibhav

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5090C6B5.3080407@ti.com \
    --to=hvaibhav@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).