linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Anton Vorontsov <cbouatmailru@gmail.com>
To: Scott Wood <scottwood@freescale.com>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH] fsl_soc: Factor fsl_get_sys_freq() out of the wdt and spi inits.
Date: Wed, 16 Apr 2008 01:32:22 +0400	[thread overview]
Message-ID: <20080415213221.GA2646@zarina> (raw)
In-Reply-To: <20080415185234.GA10579@loki.buserror.net>

On Tue, Apr 15, 2008 at 01:52:34PM -0500, Scott Wood wrote:
> Signed-off-by: Scott Wood <scottwood@freescale.com>
> ---
>  arch/powerpc/sysdev/fsl_soc.c |   70 ++++++++++++++++++----------------------
>  arch/powerpc/sysdev/fsl_soc.h |    1 +
>  2 files changed, 33 insertions(+), 38 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
> index 642e45e..b6d6bda 100644
> --- a/arch/powerpc/sysdev/fsl_soc.c
> +++ b/arch/powerpc/sysdev/fsl_soc.c
> @@ -75,6 +75,33 @@ phys_addr_t get_immrbase(void)
>  
>  EXPORT_SYMBOL(get_immrbase);
>  
> +static u32 sysfreq = -1;
> +
> +u32 fsl_get_sys_freq(void)
> +{
> +	struct device_node *soc;
> +	const u32 *prop;
> +	int size;
> +
> +	if (sysfreq != -1)
> +		return sysfreq;
> +
> +	soc = of_find_node_by_type(NULL, "soc");
> +	if (!soc)
> +		return -1;

Um.. can we finally decide on compatible for the soc nodes,
and add there compatible matching from the start?

> +
> +	prop = of_get_property(soc, "clock-frequency", &size);
> +	if (!prop || size != sizeof(*prop) || *prop == 0)
> +		prop = of_get_property(soc, "bus-frequency", &size);
> +
> +	if (prop && size == sizeof(*prop))
> +		sysfreq = *prop;
> +
> +	of_node_put(soc);
> +	return sysfreq;
> +}
> +EXPORT_SYMBOL(fsl_get_sys_freq);
> +
>  #if defined(CONFIG_CPM2) || defined(CONFIG_QUICC_ENGINE) || defined(CONFIG_8xx)
>  
>  static u32 brgfreq = -1;
> @@ -516,9 +543,9 @@ arch_initcall(fsl_i2c_of_init);
>  static int __init mpc83xx_wdt_init(void)
>  {
>  	struct resource r;
> -	struct device_node *soc, *np;
> +	struct device_node *np;
>  	struct platform_device *dev;
> -	const unsigned int *freq;
> +	u32 freq = fsl_get_sys_freq();
>  	int ret;
>  
>  	np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt");
> @@ -528,19 +555,6 @@ static int __init mpc83xx_wdt_init(void)
>  		goto nodev;
>  	}
>  
> -	soc = of_find_node_by_type(NULL, "soc");
> -
> -	if (!soc) {
> -		ret = -ENODEV;
> -		goto nosoc;
> -	}
> -
> -	freq = of_get_property(soc, "bus-frequency", NULL);
> -	if (!freq) {
> -		ret = -ENODEV;
> -		goto err;
> -	}
> -
>  	memset(&r, 0, sizeof(r));
>  
>  	ret = of_address_to_resource(np, 0, &r);
> @@ -553,20 +567,16 @@ static int __init mpc83xx_wdt_init(void)
>  		goto err;
>  	}
>  
> -	ret = platform_device_add_data(dev, freq, sizeof(int));
> +	ret = platform_device_add_data(dev, &freq, sizeof(freq));
>  	if (ret)
>  		goto unreg;
>  
> -	of_node_put(soc);
>  	of_node_put(np);
> -
>  	return 0;
>  
>  unreg:
>  	platform_device_unregister(dev);
>  err:
> -	of_node_put(soc);
> -nosoc:
>  	of_node_put(np);
>  nodev:
>  	return ret;
> @@ -830,25 +840,9 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
>  	sysclk = get_brgfreq();
>  #endif
>  	if (sysclk == -1) {
> -		struct device_node *np;
> -		const u32 *freq;
> -		int size;
> -
> -		np = of_find_node_by_type(NULL, "soc");
> -		if (!np)
> +		sysclk = fsl_get_sys_freq();
> +		if (sysclk == -1)
>  			return -ENODEV;
> -
> -		freq = of_get_property(np, "clock-frequency", &size);
> -		if (!freq || size != sizeof(*freq) || *freq == 0) {
> -			freq = of_get_property(np, "bus-frequency", &size);
> -			if (!freq || size != sizeof(*freq) || *freq == 0) {
> -				of_node_put(np);
> -				return -ENODEV;
> -			}
> -		}
> -
> -		sysclk = *freq;
> -		of_node_put(np);
>  	}
>  
>  	ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos,
> diff --git a/arch/powerpc/sysdev/fsl_soc.h b/arch/powerpc/sysdev/fsl_soc.h
> index 63e7db3..74c4a96 100644
> --- a/arch/powerpc/sysdev/fsl_soc.h
> +++ b/arch/powerpc/sysdev/fsl_soc.h
> @@ -7,6 +7,7 @@
>  extern phys_addr_t get_immrbase(void);
>  extern u32 get_brgfreq(void);
>  extern u32 get_baudrate(void);
> +extern u32 fsl_get_sys_freq(void);
>  
>  struct spi_board_info;

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

  reply	other threads:[~2008-04-15 21:32 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-15 18:52 [PATCH] fsl_soc: Factor fsl_get_sys_freq() out of the wdt and spi inits Scott Wood
2008-04-15 21:32 ` Anton Vorontsov [this message]
2008-04-15 21:35   ` Scott Wood
2008-04-15 21:52     ` Kumar Gala
2008-04-16 14:02     ` Anton Vorontsov
2008-04-15 23:20 ` Kumar Gala

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=20080415213221.GA2646@zarina \
    --to=cbouatmailru@gmail.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=scottwood@freescale.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 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).