From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: Rob Herring <rob.herring@calxeda.com>
Cc: "linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 32/71] ARC: [DeviceTree] Basic support
Date: Mon, 28 Jan 2013 13:10:29 +0530 [thread overview]
Message-ID: <51062B6D.8020805@synopsys.com> (raw)
In-Reply-To: <1359024639-21915-15-git-send-email-vgupta@synopsys.com>
Hi Rob,
On Thursday 24 January 2013 04:20 PM, Vineet Gupta wrote:
> This is minimal infrastructure needed for devicetree work.
> It uses an a sample "skeleton" devicetree - embedded in kernel image -
> to print the board, manufacturer by parsing the top-level "compatible"
> string.
>
> As of now we don't need any additional "board" specific "machine_desc".
>
> TODO: support interpreting the command line as boot-loader passed dtb
>
> Signed-off-by: Vineet Gupta <vgupta-HKixBCOQz3hWk0Htik3J/w@public.gmane.org>
> Cc: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
> Cc: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> Cc: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
> ---
> arch/arc/Kconfig | 9 +++++
> arch/arc/Makefile | 9 +++++
> arch/arc/boot/dts/Makefile | 14 ++++++++
> arch/arc/boot/dts/skeleton.dts | 10 ++++++
> arch/arc/boot/dts/skeleton.dtsi | 21 ++++++++++++
> arch/arc/include/asm/prom.h | 15 ++++++++
> arch/arc/include/asm/sections.h | 1 +
> arch/arc/kernel/Makefile | 2 +
> arch/arc/kernel/devtree.c | 69 +++++++++++++++++++++++++++++++++++++++
> arch/arc/kernel/setup.c | 9 +++++
> arch/arc/mm/init.c | 13 +++++++
> 11 files changed, 172 insertions(+), 0 deletions(-)
> create mode 100644 arch/arc/boot/dts/Makefile
> create mode 100644 arch/arc/boot/dts/skeleton.dts
> create mode 100644 arch/arc/boot/dts/skeleton.dtsi
> create mode 100644 arch/arc/include/asm/prom.h
> create mode 100644 arch/arc/kernel/devtree.c
>
> diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
> index a353849..7666857 100644
> --- a/arch/arc/Kconfig
> +++ b/arch/arc/Kconfig
> @@ -24,8 +24,11 @@ config ARC
> select GENERIC_SMP_IDLE_THREAD
> select HAVE_GENERIC_HARDIRQS
> select HAVE_MEMBLOCK
> + select IRQ_DOMAIN
> select MODULES_USE_ELF_RELA
> select NO_BOOTMEM
> + select OF
> + select OF_EARLY_FLATTREE
>
> config SCHED_OMIT_FRAME_POINTER
> def_bool y
> @@ -320,6 +323,12 @@ config CMDLINE_UBOOT
> to it. kernel startup code will copy the string into cmdline buffer
> and also append CONFIG_CMDLINE.
>
> +config ARC_BUILTIN_DTB_NAME
> + string "Built in DTB"
> + help
> + Set the name of the DTB to embed in the vmlinux binary
> + Leaving it blank selects the minimal "skeleton" dtb
> +
> source "kernel/Kconfig.preempt"
>
> endmenu # "ARC Architecture Configuration"
> diff --git a/arch/arc/Makefile b/arch/arc/Makefile
> index 4d52a3b..90570f9 100644
> --- a/arch/arc/Makefile
> +++ b/arch/arc/Makefile
> @@ -83,6 +83,9 @@ head-y := arch/arc/kernel/head.o
> # See arch/arc/Kbuild for content of core part of the kernel
> core-y += arch/arc/
>
> +# w/o this dtb won't embed into kernel binary
> +core-y += arch/arc/boot/dts/
> +
> # w/o this ifneq, make ARCH=arc clean was crapping out
> ifneq ($(platform-y),)
> core-y += arch/arc/plat-$(PLATFORM)/
> @@ -101,6 +104,12 @@ bootpImage: vmlinux
> uImage: vmlinux
> $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
>
> +%.dtb %.dtb.S %.dtb.o:
> + $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@
> +
> +dtbs:
> + $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@
> +
> archclean:
> $(Q)$(MAKE) $(clean)=$(boot)
>
> diff --git a/arch/arc/boot/dts/Makefile b/arch/arc/boot/dts/Makefile
> new file mode 100644
> index 0000000..4a972a3
> --- /dev/null
> +++ b/arch/arc/boot/dts/Makefile
> @@ -0,0 +1,14 @@
> +ifeq ($(CONFIG_OF),y)
> +
> +# Built-in dtb
> +builtindtb-y := skeleton
> +
> +ifneq ($(CONFIG_ARC_BUILTIN_DTB_NAME),"")
> + builtindtb-y := $(CONFIG_ARC_BUILTIN_DTB_NAME)
> +endif
> +
> +obj-y += $(patsubst "%",%,$(builtindtb-y)).dtb.o
> +
> +clean-files := *.dtb
> +
> +endif
> diff --git a/arch/arc/boot/dts/skeleton.dts b/arch/arc/boot/dts/skeleton.dts
> new file mode 100644
> index 0000000..25a84fb
> --- /dev/null
> +++ b/arch/arc/boot/dts/skeleton.dts
> @@ -0,0 +1,10 @@
> +/*
> + * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +/dts-v1/;
> +
> +/include/ "skeleton.dtsi"
> diff --git a/arch/arc/boot/dts/skeleton.dtsi b/arch/arc/boot/dts/skeleton.dtsi
> new file mode 100644
> index 0000000..9b357d8
> --- /dev/null
> +++ b/arch/arc/boot/dts/skeleton.dtsi
> @@ -0,0 +1,21 @@
> +/*
> + * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +/*
> + * Skeleton device tree; the bare minimum needed to boot; just include and
> + * add a compatible value.
> + */
> +
> +/ {
> + compatible = "snps,arc";
> + #address-cells = <1>;
> + #size-cells = <1>;
> + chosen { };
> + aliases { };
> + memory { device_type = "memory"; reg = <0 0>; };
> +};
> diff --git a/arch/arc/include/asm/prom.h b/arch/arc/include/asm/prom.h
> new file mode 100644
> index 0000000..f54489b
> --- /dev/null
> +++ b/arch/arc/include/asm/prom.h
> @@ -0,0 +1,15 @@
> +/*
> + * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef _ASM_ARC_PROM_H_
> +#define _ASM_ARC_PROM_H_
> +
> +#define HAVE_ARCH_DEVTREE_FIXUPS
> +extern int __init setup_machine_fdt(void *dt);
> +
> +#endif
> diff --git a/arch/arc/include/asm/sections.h b/arch/arc/include/asm/sections.h
> index fc15f2e..6fc1159 100644
> --- a/arch/arc/include/asm/sections.h
> +++ b/arch/arc/include/asm/sections.h
> @@ -13,5 +13,6 @@
>
> extern char _int_vec_base_lds[];
> extern char __arc_dccm_base[];
> +extern char __dtb_start[];
>
> #endif
> diff --git a/arch/arc/kernel/Makefile b/arch/arc/kernel/Makefile
> index 6d83431..8a55e99 100644
> --- a/arch/arc/kernel/Makefile
> +++ b/arch/arc/kernel/Makefile
> @@ -8,6 +8,8 @@
> obj-y := arcksyms.o setup.o irq.o time.o reset.o ptrace.o entry.o process.o
> obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o clk.o
>
> +obj-$(CONFIG_OF) += devtree.o
> +
> obj-$(CONFIG_ARC_FPU_SAVE_RESTORE) += fpu.o
> CFLAGS_fpu.o += -mdpfp
>
> diff --git a/arch/arc/kernel/devtree.c b/arch/arc/kernel/devtree.c
> new file mode 100644
> index 0000000..229f78e
> --- /dev/null
> +++ b/arch/arc/kernel/devtree.c
> @@ -0,0 +1,69 @@
> +/*
> + * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
> + *
> + * Based on highly stipped down version of METAG
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +
> +#include <linux/init.h>
> +#include <linux/export.h>
> +#include <linux/errno.h>
> +#include <linux/types.h>
> +#include <linux/reboot.h>
> +#include <linux/memblock.h>
> +#include <linux/of.h>
> +#include <linux/of_fdt.h>
> +#include <linux/of_irq.h>
> +#include <linux/of_platform.h>
> +#include <asm/prom.h>
> +
> +/* called from unflatten_device_tree() to bootstrap devicetree itself */
> +void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
> +{
> + return __va(memblock_alloc(size, align));
> +}
> +
> +/**
> + * setup_machine_fdt - Machine setup when an dtb was passed to the kernel
> + * @dt: virtual address pointer to dt blob
> + *
> + * If a dtb was passed to the kernel, then use it to choose the correct
> + * machine_desc and to setup the system.
> + */
> +int __init setup_machine_fdt(void *dt)
> +{
> + struct boot_param_header *devtree = dt;
> + unsigned long dt_root;
> + char *model, *compat;
> + char manufacturer[16];
> +
> + /* check device tree validity */
> + if (be32_to_cpu(devtree->magic) != OF_DT_HEADER)
> + return 1;
> +
> + /* Search the mdescs for the 'best' compatible value match */
> + initial_boot_params = devtree;
> + dt_root = of_get_flat_dt_root();
> +
> + /* compat = "<manufacturer>,<model>" */
> + compat = of_get_flat_dt_prop(dt_root, "compatible", NULL);
> + if (!compat)
> + compat = "<unknown>";
> +
> + model = strchr(compat, ',');
> + if (model)
> + model++;
> +
> + strlcpy(manufacturer, compat, model ? model - compat : strlen(compat));
> +
> + pr_info("Board \"%s\" from %s (Manufacturer)\n", model, manufacturer);
> +
> + /* Retrieve various information from the /chosen node */
> + of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line);
> +
> + return 0;
> +}
> diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
> index 82ac206..27aebd6 100644
> --- a/arch/arc/kernel/setup.c
> +++ b/arch/arc/kernel/setup.c
> @@ -13,6 +13,8 @@
> #include <linux/console.h>
> #include <linux/module.h>
> #include <linux/cpu.h>
> +#include <linux/of_fdt.h>
> +#include <asm/sections.h>
> #include <asm/arcregs.h>
> #include <asm/tlb.h>
> #include <asm/cache.h>
> @@ -20,6 +22,7 @@
> #include <asm/page.h>
> #include <asm/irq.h>
> #include <asm/arcregs.h>
> +#include <asm/prom.h>
>
> #define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x))
>
> @@ -57,6 +60,8 @@ void __init __attribute__((weak)) arc_platform_early_init(void)
>
> void __init setup_arch(char **cmdline_p)
> {
> + int rc;
> +
> #ifdef CONFIG_CMDLINE_UBOOT
> /* Make sure that a whitespace is inserted before */
> strlcat(command_line, " ", sizeof(command_line));
> @@ -71,6 +76,8 @@ void __init setup_arch(char **cmdline_p)
> strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
> *cmdline_p = command_line;
>
> + rc = setup_machine_fdt(__dtb_start);
> +
> /* To force early parsing of things like mem=xxx */
> parse_early_param();
>
> @@ -81,6 +88,8 @@ void __init setup_arch(char **cmdline_p)
>
> setup_arch_memory();
>
> + unflatten_device_tree();
> +
> /* Can be issue if someone passes cmd line arg "ro"
> * But that is unlikely so keeping it as it is
> */
> diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
> index 63da347..682cf57 100644
> --- a/arch/arc/mm/init.c
> +++ b/arch/arc/mm/init.c
> @@ -39,6 +39,11 @@ static int __init setup_mem_sz(char *str)
> }
> early_param("mem", setup_mem_sz);
>
> +void __init early_init_dt_add_memory_arch(u64 base, u64 size)
> +{
> + pr_err("%s(%llx, %llx)\n", __func__, base, size);
> +}
> +
> /*
> * First memory setup routine called from setup_arch()
> * 1. setup swapper's mm @init_mm
> @@ -169,3 +174,11 @@ void __init free_initrd_mem(unsigned long start, unsigned long end)
> free_init_pages("initrd memory", start, end);
> }
> #endif
> +
> +#ifdef CONFIG_OF_FLATTREE
> +void __init early_init_dt_setup_initrd_arch(unsigned long start,
> + unsigned long end)
> +{
> + pr_err("%s(%lx, %lx)\n", __func__, start, end);
> +}
> +#endif /* CONFIG_OF_FLATTREE */
>
Does the reworked patch look OK to you ? If so, can I get your ACK please.
Thx,
-Vineet
next prev parent reply other threads:[~2013-01-28 7:40 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-24 10:50 [PATCH v3 00/71] Synopsys ARC Linux kernel Port (Part #1) Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 01/71] ARC: Generic Headers Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 02/71] ARC: Build system: Makefiles, Kconfig, Linker script Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-28 6:29 ` Vineet Gupta
2013-01-28 6:29 ` Vineet Gupta
2013-01-28 18:44 ` Sam Ravnborg
2013-01-29 13:45 ` Vineet Gupta
2013-01-29 13:45 ` Vineet Gupta
2013-01-29 17:52 ` Sam Ravnborg
2013-02-11 11:29 ` James Hogan
2013-02-11 11:29 ` James Hogan
2013-02-11 11:44 ` Vineet Gupta
2013-02-11 11:44 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 06/71] ARC: uaccess friends Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 11/71] ARC: Fundamental ARCH data-types/defines Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 17/71] ARC: Syscall support (no-legacy-syscall ABI) Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 18/71] ARC: Process-creation/scheduling/idle-loop Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 19/71] ARC: Timers/counters/delay management Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 20/71] ARC: Signal handling Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-02-11 7:26 ` pt_regs leak into userspace (was Re: [PATCH v3 20/71] ARC: Signal handling) Vineet Gupta
2013-02-11 7:26 ` Vineet Gupta
2013-02-11 9:36 ` Jonas Bonn
2013-02-11 10:13 ` Vineet Gupta
2013-02-11 10:28 ` James Hogan
2013-02-11 10:53 ` Jonas Bonn
2013-02-11 10:57 ` James Hogan
2013-02-11 11:01 ` James Hogan
2013-02-11 11:22 ` Vineet Gupta
2013-02-11 12:12 ` Jonas Bonn
2013-02-11 12:37 ` Vineet Gupta
2013-02-11 13:02 ` Jonas Bonn
2013-02-11 13:08 ` Vineet Gupta
2013-02-11 10:30 ` Jonas Bonn
2013-02-11 14:07 ` Al Viro
2013-02-15 7:23 ` Jonas Bonn
2013-02-15 7:35 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 21/71] ARC: [Review] Preparing to fix incorrect syscall restarts due to signals Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 22/71] ARC: [Review] Prevent incorrect syscall restarts Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-28 7:42 ` Vineet Gupta
2013-01-28 7:42 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 23/71] ARC: Cache Flush Management Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 29/71] ARC: I/O and DMA Mappings Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 30/71] ARC: Boot #1: low-level, setup_arch(), /proc/cpuinfo, mem init Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
[not found] ` <1359024639-21915-1-git-send-email-vgupta-HKixBCOQz3hWk0Htik3J/w@public.gmane.org>
2013-01-24 10:50 ` [PATCH v3 32/71] ARC: [DeviceTree] Basic support Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-28 7:40 ` Vineet Gupta [this message]
2013-01-28 10:21 ` James Hogan
2013-01-28 10:21 ` James Hogan
2013-01-29 9:53 ` Vineet Gupta
2013-01-29 9:53 ` Vineet Gupta
2013-01-29 10:06 ` James Hogan
2013-01-29 10:06 ` James Hogan
[not found] ` <1359024639-21915-15-git-send-email-vgupta-HKixBCOQz3hWk0Htik3J/w@public.gmane.org>
2013-01-29 13:25 ` Rob Herring
2013-01-29 13:25 ` Rob Herring
[not found] ` <5107CDD3.3050502-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-01-29 13:39 ` Vineet Gupta
2013-01-29 13:39 ` Vineet Gupta
2013-01-29 13:39 ` Vineet Gupta
2013-01-29 13:55 ` [PATCH v4 " Vineet Gupta
2013-01-30 11:08 ` James Hogan
2013-01-30 11:56 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 33/71] ARC: [DeviceTree] Convert some Kconfig items to runtime values Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 34/71] ARC: [plat-arcfpga]: Enabling DeviceTree for Angel4 board Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 42/71] ARC: Module support Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 44/71] ARC: SMP support Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 48/71] ARC: kprobes support Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 57/71] ARC: Hostlink Pseudo-Driver for Metaware Debugger Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 58/71] ARC: UAPI Disintegrate arch/arc/include/asm Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-28 7:36 ` Vineet Gupta
2013-01-28 7:36 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 59/71] ARC: Add support for ioremap_prot API Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 62/71] ARC: [Review] Multi-platform image #2: Board callback Infrastructure Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 69/71] ARC: [plat-arcfpga] defconfig for fully loaded ARC Linux Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 10:50 ` [PATCH v3 70/71] ARC: Provide a default serial.h for uart drivers needing BASE_BAUD Vineet Gupta
2013-01-24 10:50 ` Vineet Gupta
2013-01-24 11:01 ` [PATCH v3 45/71] ARC: DWARF2 .debug_frame based stack unwinder Vineet Gupta
2013-01-24 11:01 ` Vineet Gupta
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=51062B6D.8020805@synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rob.herring@calxeda.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.