devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andres Salomon <dilinger-pFFUokh25LWsTnJN9+BGXg@public.gmane.org>
To: Daniel Drake <dsd-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org>
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Subject: Re: [RFC 1/3] OLPC: Use device tree for platform identification
Date: Fri, 4 Mar 2011 10:01:37 -0800	[thread overview]
Message-ID: <20110304100137.473b8d04@debxo> (raw)
In-Reply-To: <20110304171214.2B5C69D401D-k/4jFdqg8LLlyo9zxV8I99HuzzzSOjJt@public.gmane.org>

The x86 folks should probably be cc'd as well..

Overall, this looks good, just a few minor issues below.

On Fri,  4 Mar 2011 17:12:14 +0000 (GMT)
Daniel Drake <dsd-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org> wrote:

> Make OLPC fully depend on device tree, and use it to identify the OLPC
> platform details. Some nodes are exposed as platform devices where we
> plan to use device tree for device probing.
> 
> Signed-off-by: Daniel Drake <dsd-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org>
> ---
>  arch/x86/Kconfig                 |    2 +-
>  arch/x86/include/asm/olpc_ofw.h  |    8 +----
>  arch/x86/platform/olpc/Makefile  |    4 +--
>  arch/x86/platform/olpc/olpc.c    |   51
> ++++++++++++++++++++-----------------
> arch/x86/platform/olpc/olpc_dt.c |   15 +++++++++++ 5 files changed,
> 47 insertions(+), 33 deletions(-)
> 
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index b4c2e9c..471221b 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -2071,7 +2071,7 @@ config OLPC
>  	depends on !X86_PAE
>  	select GPIOLIB
>  	select OF
> -	select OF_PROMTREE if PROC_DEVICETREE
> +	select OF_PROMTREE
>  	---help---
>  	  Add support for detecting the unique features of the OLPC
>  	  XO hardware.
> diff --git a/arch/x86/include/asm/olpc_ofw.h
> b/arch/x86/include/asm/olpc_ofw.h index c5d3a5a..a0e24e7 100644
> --- a/arch/x86/include/asm/olpc_ofw.h
> +++ b/arch/x86/include/asm/olpc_ofw.h
> @@ -26,15 +26,11 @@ extern void setup_olpc_ofw_pgd(void);
>  /* check if OFW was detected during boot */
>  extern bool olpc_ofw_present(void);
>  
> +extern void olpc_dt_build_devicetree(void);
> +
>  #else /* !CONFIG_OLPC */
>  static inline void olpc_ofw_detect(void) { }
>  static inline void setup_olpc_ofw_pgd(void) { }

You need the following here, as build_devicetree is called
from x86's paging_init():

static inline void olpc_dt_build_devicetree(void) { }

>  #endif /* !CONFIG_OLPC */
>  
> -#ifdef CONFIG_OF_PROMTREE
> -extern void olpc_dt_build_devicetree(void);
> -#else
> -static inline void olpc_dt_build_devicetree(void) { }
> -#endif
> -
>  #endif /* _ASM_X86_OLPC_OFW_H */
> diff --git a/arch/x86/platform/olpc/Makefile
> b/arch/x86/platform/olpc/Makefile index c2a8cab..81c5e21 100644
> --- a/arch/x86/platform/olpc/Makefile
> +++ b/arch/x86/platform/olpc/Makefile
> @@ -1,4 +1,2 @@
> -obj-$(CONFIG_OLPC)		+= olpc.o
> +obj-$(CONFIG_OLPC)		+= olpc.o olpc_ofw.o olpc_dt.o
>  obj-$(CONFIG_OLPC_XO1)		+= olpc-xo1.o
> -obj-$(CONFIG_OLPC)		+= olpc_ofw.o
> -obj-$(CONFIG_OF_PROMTREE)	+= olpc_dt.o
> diff --git a/arch/x86/platform/olpc/olpc.c
> b/arch/x86/platform/olpc/olpc.c index edaf3fe..2ecc98d 100644
> --- a/arch/x86/platform/olpc/olpc.c
> +++ b/arch/x86/platform/olpc/olpc.c
> @@ -18,6 +18,7 @@
>  #include <linux/io.h>
>  #include <linux/string.h>
>  #include <linux/platform_device.h>
> +#include <linux/of.h>
>  
>  #include <asm/geode.h>
>  #include <asm/setup.h>
> @@ -187,41 +188,45 @@ err:
>  }
>  EXPORT_SYMBOL_GPL(olpc_ec_cmd);
>  
> -static bool __init check_ofw_architecture(void)
> +static bool __init check_ofw_architecture(struct device_node *root)
>  {
> -	size_t propsize;
> -	char olpc_arch[5];
> -	const void *args[] = { NULL, "architecture", olpc_arch,
> (void *)5 };
> -	void *res[] = { &propsize };
> +	const char *olpc_arch;
> +	int propsize;
>  
> -	if (olpc_ofw("getprop", args, res)) {
> -		printk(KERN_ERR "ofw: getprop call failed!\n");
> -		return false;
> -	}
> +	olpc_arch = of_get_property(root, "architecture", &propsize);
>  	return propsize == 5 && strncmp("OLPC", olpc_arch, 5) == 0;
>  }
>  
> -static u32 __init get_board_revision(void)
> +static u32 __init get_board_revision(struct device_node *root)
>  {
> -	size_t propsize;
> -	__be32 rev;
> -	const void *args[] = { NULL, "board-revision-int", &rev,
> (void *)4 };
> -	void *res[] = { &propsize };
> -
> -	if (olpc_ofw("getprop", args, res) || propsize != 4) {
> -		printk(KERN_ERR "ofw: getprop call failed!\n");
> -		return cpu_to_be32(0);
> -	}
> -	return be32_to_cpu(rev);
> +	int propsize;
> +	const __be32 *rev;
> +
> +	rev = of_get_property(root, "board-revision-int", &propsize);
> +	if (propsize != 4)
> +		return 0;
> +
> +	return be32_to_cpu(*rev);
>  }
>  
>  static bool __init platform_detect(void)
>  {
> -	if (!check_ofw_architecture())
> +	struct device_node *root = of_find_node_by_path("/");
> +	bool success;
> +
> +	if (!root)
>  		return false;
> +
> +	success = check_ofw_architecture(root);
> +	if (!success)
> +		goto out;
> +
>  	olpc_platform_info.flags |= OLPC_F_PRESENT;
> -	olpc_platform_info.boardrev = get_board_revision();
> -	return true;
> +	olpc_platform_info.boardrev = get_board_revision(root);
> +
> +out:
> +	of_node_put(root);
> +	return success;


Actually, rather than the goto, this could be

success = check_ofw_architecture
if (success)
	olpc_platform_info.boardrev = get_board_revision(root);
of_node_put(root);
return success;

>  }
>  
>  static int __init add_xo1_platform_devices(void)
> diff --git a/arch/x86/platform/olpc/olpc_dt.c
> b/arch/x86/platform/olpc/olpc_dt.c index 044bda5..09cbede 100644
> --- a/arch/x86/platform/olpc/olpc_dt.c
> +++ b/arch/x86/platform/olpc/olpc_dt.c
> @@ -19,6 +19,7 @@
>  #include <linux/kernel.h>
>  #include <linux/bootmem.h>
>  #include <linux/of.h>
> +#include <linux/of_platform.h>
>  #include <linux/of_pdt.h>
>  #include <asm/olpc_ofw.h>
>  
> @@ -180,3 +181,17 @@ void __init olpc_dt_build_devicetree(void)
>  	pr_info("PROM DT: Built device tree with %u bytes of
> memory.\n", prom_early_allocated);
>  }
> +
> +/* A list of DT node/bus matches that we want to expose as platform
> devices */ +static struct of_device_id __initdata of_ids[] = {
> +	{ .compatible = "olpc,xo1-battery" },
> +	{ .compatible = "olpc,xo1-dcon" },
> +	{ .compatible = "olpc,xo1-rtc" },
> +	{},
> +};
> +
> +static int __init declare_of_platform_devices(void)
> +{
> +	return of_platform_bus_probe(NULL, of_ids, NULL);
> +}
> +device_initcall(declare_of_platform_devices);

How about 'olpc_create_platform_devices' or some such name?  That's
what's really happening here, right?

  parent reply	other threads:[~2011-03-04 18:01 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-04 17:12 [RFC 1/3] OLPC: Use device tree for platform identification Daniel Drake
     [not found] ` <20110304171214.2B5C69D401D-k/4jFdqg8LLlyo9zxV8I99HuzzzSOjJt@public.gmane.org>
2011-03-04 18:01   ` Andres Salomon [this message]
2011-03-08 21:13     ` Daniel Drake
     [not found]       ` <AANLkTi=Jcq5SDbWgN+1TQNeP3CvJVRY7CO3c__DDEPz3-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-03-09  3:35         ` Andres Salomon
     [not found]           ` <20110308193546.151521a9-pFFUokh25LWsTnJN9+BGXg@public.gmane.org>
2011-03-12  7:45             ` Grant Likely
2011-03-05  4:28   ` Grant Likely

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=20110304100137.473b8d04@debxo \
    --to=dilinger-pffuokh25lwstnjn9+bgxg@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=dsd-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org \
    --cc=x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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).