Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c10d1e26 authored by Andres Salomon's avatar Andres Salomon Committed by H. Peter Anvin
Browse files

x86, olpc: Add OLPC device-tree support



Make use of PROC_DEVICETREE to export the tree, and sparc's PROMTREE code to
call into OLPC's Open Firmware to build the tree.

v5: fix buglet with root node check (introduced in v4)

v4: address some minor style issues pointed out by Grant, and explicitly cast
    negative phandle checks to s32.

v3: rename olpc_prom to olpc_dt
  - rework Kconfig entries
  - drop devtree build hook from proc, instead adding a call to x86's
    paging_init (similarly to how sparc64 does it)
  - switch allocation from using slab to alloc_bootmem.  this allows
    the DT to be built earlier during boot (during setup_arch); the
    downside is that there are some 1200 bootmem reservations that are
    done during boot.  Not ideal..
  - add a helper olpc_ofw_is_installed function to test for the
    existence and successful detection of OLPC's OFW.

Signed-off-by: default avatarAndres Salomon <dilinger@queued.net>
LKML-Reference: <20101116220952.26526a80@queued.net>
Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent 4722d194
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2049,11 +2049,17 @@ config OLPC_OPENFIRMWARE
	bool "Support for OLPC's Open Firmware"
	depends on !X86_64 && !X86_PAE
	default n
	select OF
	help
	  This option adds support for the implementation of Open Firmware
	  that is used on the OLPC XO-1 Children's Machine.
	  If unsure, say N here.

config OLPC_OPENFIRMWARE_DT
	bool
	default y if OLPC_OPENFIRMWARE && PROC_DEVICETREE
	select OF_PROMTREE

endif # X86_32

config AMD_NB
+9 −0
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@

#ifdef CONFIG_OLPC_OPENFIRMWARE

extern bool olpc_ofw_is_installed(void);

/* run an OFW command by calling into the firmware */
#define olpc_ofw(name, args, res) \
	__olpc_ofw((name), ARRAY_SIZE(args), args, ARRAY_SIZE(res), res)
@@ -26,10 +28,17 @@ extern bool olpc_ofw_present(void);

#else /* !CONFIG_OLPC_OPENFIRMWARE */

static inline bool olpc_ofw_is_installed(void) { return false; }
static inline void olpc_ofw_detect(void) { }
static inline void setup_olpc_ofw_pgd(void) { }
static inline bool olpc_ofw_present(void) { return false; }

#endif /* !CONFIG_OLPC_OPENFIRMWARE */

#ifdef CONFIG_OLPC_OPENFIRMWARE_DT
extern void olpc_dt_build_devicetree(void);
#else
static inline void olpc_dt_build_devicetree(void) { }
#endif /* CONFIG_OLPC_OPENFIRMWARE_DT */

#endif /* _ASM_X86_OLPC_OFW_H */
+1 −0
Original line number Diff line number Diff line
/* dummy prom.h; here to make linux/of.h's #includes happy */
+2 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@
#include <asm/bugs.h>
#include <asm/tlb.h>
#include <asm/tlbflush.h>
#include <asm/olpc_ofw.h>
#include <asm/pgalloc.h>
#include <asm/sections.h>
#include <asm/paravirt.h>
@@ -715,6 +716,7 @@ void __init paging_init(void)
	/*
	 * NOTE: at this point the bootmem allocator is fully available.
	 */
	olpc_dt_build_devicetree();
	sparse_init();
	zone_sizes_init();
}
+1 −0
Original line number Diff line number Diff line
obj-$(CONFIG_OLPC)		+= olpc.o
obj-$(CONFIG_OLPC_XO1)		+= olpc-xo1.o
obj-$(CONFIG_OLPC_OPENFIRMWARE)	+= olpc_ofw.o
obj-$(CONFIG_OLPC_OPENFIRMWARE_DT)	+= olpc_dt.o
Loading