All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Sanjeev Premi <premi@ti.com>
Cc: linux-omap@vger.kernel.org
Subject: Re: [PATCH] OMAP35x: Add support for 720MHz part
Date: Tue, 13 Oct 2009 08:51:29 -0700	[thread overview]
Message-ID: <20091013155129.GQ12700@atomide.com> (raw)
In-Reply-To: <1255351453-9023-1-git-send-email-premi@ti.com>

Hi,

* Sanjeev Premi <premi@ti.com> [091012 06:00]:
> This patch adds support for ARM running at 720MHz part.
> 
> The 720MHz capability can be probed run-time by reading the
> PRODID.SKUID[3:0] at 0x4830A20C.
> 
>   [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
> 
> Signed-off-by: Sanjeev Premi <premi@ti.com>
> ---
>  arch/arm/mach-omap2/clock34xx.c           |    6 ++++++
>  arch/arm/mach-omap2/id.c                  |   11 +++++++++++
>  arch/arm/plat-omap/include/mach/control.h |    7 +++++++
>  arch/arm/plat-omap/include/mach/cpu.h     |    2 ++
>  4 files changed, 26 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
> index 489556e..9b56af3 100644
> --- a/arch/arm/mach-omap2/clock34xx.c
> +++ b/arch/arm/mach-omap2/clock34xx.c
> @@ -1096,6 +1096,12 @@ static int __init omap2_clk_arch_init(void)
>  	if (!mpurate)
>  		return -EINVAL;
>  
> +	if ((mpurate == 720000000) && !omap3_has_720mhz()) {
> +		printk(KERN_ERR "*** Silicon doesn't support 720MHz\n");
> +
> +		mpurate = 600000000;  /* Set to highest supported */
> +	}
> +
>  	/* REVISIT: not yet ready for 343x */
>  	if (clk_set_rate(&dpll1_ck, mpurate))
>  		printk(KERN_ERR "*** Unable to set MPU rate\n");

To me it seems like this should be limited in clk_set_rate()
instead.


> diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
> index d4d563b..e0b427a 100644
> --- a/arch/arm/mach-omap2/id.c
> +++ b/arch/arm/mach-omap2/id.c
> @@ -79,6 +79,7 @@ EXPORT_SYMBOL(omap_type);
>  #define OMAP_TAP_DIE_ID_2	0x0220
>  #define OMAP_TAP_DIE_ID_3	0x0224
>  
> +
>  #define read_tap_reg(reg)	__raw_readl(tap_base  + (reg))
>  
>  struct omap_id {
> @@ -180,6 +181,15 @@ void __init omap3_check_features(void)
>  	 * TODO: Get additional info (where applicable)
>  	 *       e.g. Size of L2 cache.
>  	 */
> +
> +	/*
> +	 * Does it support 720MHz?
> +	 */
> +	status = (OMAP3_SKUID_MASK & read_tap_reg(OMAP3_PRODID));
> +
> +	if (status & OMAP3_SKUID_720MHZ) {
> +		omap3_features |= OMAP3_HAS_720MHZ;
> +	}
>  }
>  
>  void __init omap3_check_revision(void)

How would 720MHz speed be any different from other speeds?


> @@ -296,6 +306,7 @@ void __init omap3_cpuinfo(void)
>  	OMAP3_SHOW_FEATURE(sgx);
>  	OMAP3_SHOW_FEATURE(neon);
>  	OMAP3_SHOW_FEATURE(isp);
> +	OMAP3_SHOW_FEATURE(720mhz);
>  }
>  
>  /*
> diff --git a/arch/arm/plat-omap/include/mach/control.h b/arch/arm/plat-omap/include/mach/control.h
> index fdb6300..e886bb6 100644
> --- a/arch/arm/plat-omap/include/mach/control.h
> +++ b/arch/arm/plat-omap/include/mach/control.h
> @@ -238,6 +238,13 @@
>  #define		FEAT_NEON		0
>  #define		FEAT_NEON_NONE		1
>  
> +/*
> + * Product ID register
> + */
> +#define OMAP3_PRODID			0x020C
> +
> +#define OMAP3_SKUID_MASK		0x0f
> +#define 	OMAP3_SKUID_720MHZ	0x08
>  
>  #ifndef __ASSEMBLY__
>  #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \
> diff --git a/arch/arm/plat-omap/include/mach/cpu.h b/arch/arm/plat-omap/include/mach/cpu.h
> index 8d0841b..12b91f7 100644
> --- a/arch/arm/plat-omap/include/mach/cpu.h
> +++ b/arch/arm/plat-omap/include/mach/cpu.h
> @@ -472,6 +472,7 @@ extern u32 omap3_features;
>  #define OMAP3_HAS_SGX			BIT(2)
>  #define OMAP3_HAS_NEON			BIT(3)
>  #define OMAP3_HAS_ISP			BIT(4)
> +#define OMAP3_HAS_720MHZ		BIT(5)
>  
>  #define OMAP3_HAS_FEATURE(feat,flag)			\
>  static inline unsigned int omap3_has_ ##feat(void)	\
> @@ -484,5 +485,6 @@ OMAP3_HAS_FEATURE(sgx, SGX)
>  OMAP3_HAS_FEATURE(iva, IVA)
>  OMAP3_HAS_FEATURE(neon, NEON)
>  OMAP3_HAS_FEATURE(isp, ISP)
> +OMAP3_HAS_FEATURE(720mhz, 720MHZ)
>  
>  #endif

I think we should rather implement a function omap_get_max_rate()
or similar, and then the clock framework initializes the clocks
based on that. This way clk_set_rate() can limit the speed
as needed.

Regards,

Tony

  reply	other threads:[~2009-10-13 15:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-12 12:44 [PATCH] OMAP35x: Add support for 720MHz part Sanjeev Premi
2009-10-13 15:51 ` Tony Lindgren [this message]
2009-10-13 19:14 ` Kevin Hilman

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=20091013155129.GQ12700@atomide.com \
    --to=tony@atomide.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=premi@ti.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.