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

Commit da6b737b authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Thomas Gleixner
Browse files

x86: Add device tree support



This patch adds minimal support for device tree on x86. The device
tree blob is passed to the kernel via setup_data which requires at
least boot protocol 2.09.

Memory size, restricted memory regions, boot arguments are gathered
the traditional way so things like cmd_line are just here to let the
code compile.

The current plan is use the device tree as an extension and to gather
information which can not be enumerated and would have to be hardcoded
otherwise. This includes things like 
   - which devices are on this I2C/SPI bus?
   - how are the interrupts wired to IO APIC?
   - where could my hpet be?

Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarDirk Brandewie <dirk.brandewie@gmail.com>
Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Cc: sodaville@linutronix.de
Cc: devicetree-discuss@lists.ozlabs.org
LKML-Reference: <1298405266-1624-3-git-send-email-bigeasy@linutronix.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent f1c2b357
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ Table of Contents

  I - Introduction
    1) Entry point for arch/powerpc
    2) Entry point for arch/x86

  II - The DT block format
    1) Header
@@ -225,6 +226,25 @@ it with special cases.
  cannot support both configurations with Book E and configurations
  with classic Powerpc architectures.

2) Entry point for arch/x86
-------------------------------

  There is one single 32bit entry point to the kernel at code32_start,
  the decompressor (the real mode entry point goes to the same  32bit
  entry point once it switched into protected mode). That entry point
  supports one calling convention which is documented in
  Documentation/x86/boot.txt
  The physical pointer to the device-tree block (defined in chapter II)
  is passed via setup_data which requires at least boot protocol 2.09.
  The type filed is defined as

  #define SETUP_DTB                      2

  This device-tree is used as an extension to the "boot page". As such it
  does not parse / consider data which is already covered by the boot
  page. This includes memory size, reserved ranges, command line arguments
  or initrd address. It simply holds information which can not be retrieved
  otherwise like interrupt routing or a list of devices behind an I2C bus.

II - The DT block format
========================
+2 −0
Original line number Diff line number Diff line
@@ -382,6 +382,8 @@ config X86_INTEL_CE
	depends on X86_32
	depends on X86_EXTENDED_PLATFORM
	select X86_REBOOTFIXUPS
	select OF
	select OF_EARLY_FLATTREE
	---help---
	  Select for the Intel CE media processor (CE4100) SOC.
	  This option compiles in support for the CE4100 SOC for settop
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
/* setup data types */
#define SETUP_NONE			0
#define SETUP_E820_EXT			1
#define SETUP_DTB			2

/* extensible setup data list node */
struct setup_data {
+0 −3
Original line number Diff line number Diff line
@@ -10,9 +10,6 @@
#include <asm/apicdef.h>
#include <asm/irq_vectors.h>

/* Even though we don't support this, supply it to appease OF */
static inline void irq_dispose_mapping(unsigned int virq) { }

static inline int irq_canonicalize(int irq)
{
	return ((irq == 2) ? 9 : irq);
+47 −1
Original line number Diff line number Diff line
/* dummy prom.h; here to make linux/of.h's #includes happy */
/*
 * Definitions for Device tree / OpenFirmware handling on X86
 *
 * based on arch/powerpc/include/asm/prom.h which is
 *         Copyright (C) 1996-2005 Paul Mackerras.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */

#ifndef _ASM_X86_PROM_H
#define _ASM_X86_PROM_H
#ifndef __ASSEMBLY__

#include <linux/of.h>
#include <linux/types.h>

#include <asm/irq.h>
#include <asm/atomic.h>
#include <asm/setup.h>

#ifdef CONFIG_OF
extern void add_dtb(u64 data);
#else
static inline void add_dtb(u64 data) { }
#endif

extern char cmd_line[COMMAND_LINE_SIZE];

#define pci_address_to_pio pci_address_to_pio
unsigned long pci_address_to_pio(phys_addr_t addr);

/**
 * irq_dispose_mapping - Unmap an interrupt
 * @virq: linux virq number of the interrupt to unmap
 *
 * FIXME: We really should implement proper virq handling like power,
 * but that's going to be major surgery.
 */
static inline void irq_dispose_mapping(unsigned int virq) { }

#define HAVE_ARCH_DEVTREE_FIXUPS

#endif /* __ASSEMBLY__ */
#endif
Loading