All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dirk Brandewie <dirk.brandewie@gmail.com>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: sodaville@linutronix.de, devicetree-discuss@lists.ozlabs.org,
	arjan@linux.intel.com, linuxppc-dev <linuxppc-dev@ozlabs.org>
Subject: Re: [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux
Date: Mon, 15 Nov 2010 21:28:27 -0800	[thread overview]
Message-ID: <4CE2167B.3070101@gmail.com> (raw)
In-Reply-To: <AANLkTi=G1TwfOHBVB2wpZHpafw_KB7S7yhj6syP339e1@mail.gmail.com>

On 11/15/2010 09:17 PM, Grant Likely wrote:
> On Mon, Nov 15, 2010 at 10:06 PM, Dirk Brandewie
> <dirk.brandewie@gmail.com>  wrote:
>> On 11/15/2010 08:41 PM, Grant Likely wrote:
>>>
>>> On Mon, Nov 15, 2010 at 08:01:20PM -0800, dirk.brandewie@gmail.com wrote:
>>>>
>>>> From: Dirk Brandewie<dirk.brandewie@gmail.com>
>>>>
>>>> This patch adds support for linking device tree blobs into
>>>> vmlinux. The device tree blobs are placed in the init.data
>>>> section.
>>>>
>>>> Signed-off-by: Dirk Brandewie<dirk.brandewie@gmail.com>
>>>> ---
>>>>   include/asm-generic/vmlinux.lds.h |   19 +++++++++++++++++--
>>>>   scripts/Makefile.lib              |   17 +++++++++++++++++
>>>>   2 files changed, 34 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/include/asm-generic/vmlinux.lds.h
>>>> b/include/asm-generic/vmlinux.lds.h
>>>> index bd69d79..ea671e7 100644
>>>> --- a/include/asm-generic/vmlinux.lds.h
>>>> +++ b/include/asm-generic/vmlinux.lds.h
>>>> @@ -67,7 +67,14 @@
>>>>    * Align to a 32 byte boundary equal to the
>>>>    * alignment gcc 4.5 uses for a struct
>>>>    */
>>>> -#define STRUCT_ALIGN() . = ALIGN(32)
>>>> +#define STRUCT_ALIGNMENT 32
>>>> +#define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT)
>>>> +
>>>> +/* Device tree blobs linked into the kernel need to have proper
>>>> + * structure alignment to be parsed by the flat device tree library
>>>> + * used in early boot
>>>> +*/
>>>> +#define DTB_ALIGNMENT STRUCT_ALIGNMENT
>>>>
>>>>   /* The actual configuration determine if the init/exit sections
>>>>    * are handled as text/data or they can be discarded (which
>>>> @@ -146,6 +153,13 @@
>>>>   #define TRACE_SYSCALLS()
>>>>   #endif
>>>>
>>>> +
>>>> +#define KERNEL_DTB()                                                   \
>>>> +       . = ALIGN(DTB_ALIGNMENT);                                       \
>>>> +       VMLINUX_SYMBOL(__dtb_start) = .;                                \
>>>> +       *(.dtb.init.rodata)                                             \
>>>> +       VMLINUX_SYMBOL(__dtb_end) = .;
>>>> +
>>>>   /* .data section */
>>>>   #define DATA_DATA                                                     \
>>>>         *(.data)                                                        \
>>>> @@ -468,7 +482,8 @@
>>>>         MCOUNT_REC()                                                    \
>>>>         DEV_DISCARD(init.rodata)                                        \
>>>>         CPU_DISCARD(init.rodata)                                        \
>>>> -       MEM_DISCARD(init.rodata)
>>>> +       MEM_DISCARD(init.rodata)                                        \
>>>> +       KERNEL_DTB()
>>>>
>>>>   #define INIT_TEXT                                                     \
>>>>         *(.init.text)                                                   \
>>>> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
>>>> index 4c72c11..a8a4774 100644
>>>> --- a/scripts/Makefile.lib
>>>> +++ b/scripts/Makefile.lib
>>>> @@ -200,6 +200,23 @@ quiet_cmd_gzip = GZIP    $@
>>>>   cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9>    $@) || \
>>>>         (rm -f $@ ; false)
>>>>
>>>> +# DTC
>>>> +#
>>>>   ---------------------------------------------------------------------------
>>>> +$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
>>>> +       @echo '#include<asm-generic/vmlinux.lds.h>'>    $@
>>>> +       @echo '.section .dtb.init.rodata,"a"'>>    $@
>>>> +       @echo '.balign DTB_ALIGNMENT'>>    $@
>>>> +       @echo '.global __dtb_$(*F)_begin'>>    $@
>>>> +       @echo '__dtb_$(*F)_begin:'>>    $@
>>>> +       @echo '.incbin "$<" '>>    $@
>>>> +       @echo '__dtb_$(*F)_end:'>>    $@
>>>> +       @echo '.global __dtb_$(*F)_end'>>    $@
>>>> +       @echo '.balign DTB_ALIGNMENT'>>    $@
>>>> +
>>>> +DTC = $(objtree)/scripts/dtc/dtc
>>>> +
>>>> +quiet_cmd_dtc = DTC    $@
>>>> +      cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0  $(src)/$*.dts
>>>
>>> Missing the %.dtb: %.dts rule, but otherwise looks okay.  You will
>>> need to make sure this doesn't break powerpc or microblaze when the
>>> dts->dtb rule is added.
>>>
>> I have the rule
>>   $(obj)/%.dtb: $(src)/%.dts
>>           $(call if_changed,dtc)
>> in the arch/x86/kernel/Makefile to prevent this sneaking into other other
>> architectures.
>
> This rule looks correct.  PowerPC and Microblaze need to be modified
> to use it.  It should not be hard to do, give it a try.  Worst case,
> your first attempt is wrong and the rest of us fix it up.  :-)
>
> Hint: PowerPC currently puts the .dtb file in a different directory
> from the source .dts file.  It doesn't need to do it that way.
> arch/powerpc/boot/Makefile will need to be modified.
>

I will give it a shot.  The only real difference except for the directory 
structures is powerpc and microblaze add padding to the dtb with the -p 1024
command line argument to dtc.  Is the padding needed when the blob are linked 
into vmlinux proper?

--Dirk

WARNING: multiple messages have this Message-ID (diff)
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: sodaville-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	arjan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org,
	linuxppc-dev
	<linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>
Subject: Re: [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux
Date: Mon, 15 Nov 2010 21:28:27 -0800	[thread overview]
Message-ID: <4CE2167B.3070101@gmail.com> (raw)
In-Reply-To: <AANLkTi=G1TwfOHBVB2wpZHpafw_KB7S7yhj6syP339e1-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 11/15/2010 09:17 PM, Grant Likely wrote:
> On Mon, Nov 15, 2010 at 10:06 PM, Dirk Brandewie
> <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>  wrote:
>> On 11/15/2010 08:41 PM, Grant Likely wrote:
>>>
>>> On Mon, Nov 15, 2010 at 08:01:20PM -0800, dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote:
>>>>
>>>> From: Dirk Brandewie<dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>>>
>>>> This patch adds support for linking device tree blobs into
>>>> vmlinux. The device tree blobs are placed in the init.data
>>>> section.
>>>>
>>>> Signed-off-by: Dirk Brandewie<dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>>> ---
>>>>   include/asm-generic/vmlinux.lds.h |   19 +++++++++++++++++--
>>>>   scripts/Makefile.lib              |   17 +++++++++++++++++
>>>>   2 files changed, 34 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/include/asm-generic/vmlinux.lds.h
>>>> b/include/asm-generic/vmlinux.lds.h
>>>> index bd69d79..ea671e7 100644
>>>> --- a/include/asm-generic/vmlinux.lds.h
>>>> +++ b/include/asm-generic/vmlinux.lds.h
>>>> @@ -67,7 +67,14 @@
>>>>    * Align to a 32 byte boundary equal to the
>>>>    * alignment gcc 4.5 uses for a struct
>>>>    */
>>>> -#define STRUCT_ALIGN() . = ALIGN(32)
>>>> +#define STRUCT_ALIGNMENT 32
>>>> +#define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT)
>>>> +
>>>> +/* Device tree blobs linked into the kernel need to have proper
>>>> + * structure alignment to be parsed by the flat device tree library
>>>> + * used in early boot
>>>> +*/
>>>> +#define DTB_ALIGNMENT STRUCT_ALIGNMENT
>>>>
>>>>   /* The actual configuration determine if the init/exit sections
>>>>    * are handled as text/data or they can be discarded (which
>>>> @@ -146,6 +153,13 @@
>>>>   #define TRACE_SYSCALLS()
>>>>   #endif
>>>>
>>>> +
>>>> +#define KERNEL_DTB()                                                   \
>>>> +       . = ALIGN(DTB_ALIGNMENT);                                       \
>>>> +       VMLINUX_SYMBOL(__dtb_start) = .;                                \
>>>> +       *(.dtb.init.rodata)                                             \
>>>> +       VMLINUX_SYMBOL(__dtb_end) = .;
>>>> +
>>>>   /* .data section */
>>>>   #define DATA_DATA                                                     \
>>>>         *(.data)                                                        \
>>>> @@ -468,7 +482,8 @@
>>>>         MCOUNT_REC()                                                    \
>>>>         DEV_DISCARD(init.rodata)                                        \
>>>>         CPU_DISCARD(init.rodata)                                        \
>>>> -       MEM_DISCARD(init.rodata)
>>>> +       MEM_DISCARD(init.rodata)                                        \
>>>> +       KERNEL_DTB()
>>>>
>>>>   #define INIT_TEXT                                                     \
>>>>         *(.init.text)                                                   \
>>>> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
>>>> index 4c72c11..a8a4774 100644
>>>> --- a/scripts/Makefile.lib
>>>> +++ b/scripts/Makefile.lib
>>>> @@ -200,6 +200,23 @@ quiet_cmd_gzip = GZIP    $@
>>>>   cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9>    $@) || \
>>>>         (rm -f $@ ; false)
>>>>
>>>> +# DTC
>>>> +#
>>>>   ---------------------------------------------------------------------------
>>>> +$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
>>>> +       @echo '#include<asm-generic/vmlinux.lds.h>'>    $@
>>>> +       @echo '.section .dtb.init.rodata,"a"'>>    $@
>>>> +       @echo '.balign DTB_ALIGNMENT'>>    $@
>>>> +       @echo '.global __dtb_$(*F)_begin'>>    $@
>>>> +       @echo '__dtb_$(*F)_begin:'>>    $@
>>>> +       @echo '.incbin "$<" '>>    $@
>>>> +       @echo '__dtb_$(*F)_end:'>>    $@
>>>> +       @echo '.global __dtb_$(*F)_end'>>    $@
>>>> +       @echo '.balign DTB_ALIGNMENT'>>    $@
>>>> +
>>>> +DTC = $(objtree)/scripts/dtc/dtc
>>>> +
>>>> +quiet_cmd_dtc = DTC    $@
>>>> +      cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0  $(src)/$*.dts
>>>
>>> Missing the %.dtb: %.dts rule, but otherwise looks okay.  You will
>>> need to make sure this doesn't break powerpc or microblaze when the
>>> dts->dtb rule is added.
>>>
>> I have the rule
>>   $(obj)/%.dtb: $(src)/%.dts
>>           $(call if_changed,dtc)
>> in the arch/x86/kernel/Makefile to prevent this sneaking into other other
>> architectures.
>
> This rule looks correct.  PowerPC and Microblaze need to be modified
> to use it.  It should not be hard to do, give it a try.  Worst case,
> your first attempt is wrong and the rest of us fix it up.  :-)
>
> Hint: PowerPC currently puts the .dtb file in a different directory
> from the source .dts file.  It doesn't need to do it that way.
> arch/powerpc/boot/Makefile will need to be modified.
>

I will give it a shot.  The only real difference except for the directory 
structures is powerpc and microblaze add padding to the dtb with the -p 1024
command line argument to dtc.  Is the padding needed when the blob are linked 
into vmlinux proper?

--Dirk

  reply	other threads:[~2010-11-16  5:28 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-16  4:01 [PATCH 0/2] Adding DTB's to architecture independent vmlinux dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
     [not found] ` <cover.1289877715.git.dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-11-16  4:01   ` [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
     [not found]     ` <ca5555dd665a668bf4e2b2256ccf4bb5d010cde1.1289877715.git.dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-11-16  4:41       ` Grant Likely
     [not found]         ` <20101116044110.GA4074-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-16  5:06           ` Dirk Brandewie
2010-11-16  5:17             ` Grant Likely
2010-11-16  5:17               ` Grant Likely
2010-11-16  5:28               ` Dirk Brandewie [this message]
2010-11-16  5:28                 ` Dirk Brandewie
2010-11-16  6:10                 ` Grant Likely
2010-11-16  6:10                   ` Grant Likely
2010-11-16  4:01   ` [PATCH 2/2] of/fdt: add kernel command line option for dtb_compat string dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
     [not found]     ` <bdb6f333aea69accf3ca3e74c1f01da0a8587aee.1289877715.git.dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-11-16  6:32       ` Grant Likely
     [not found]         ` <20101116063253.GB4074-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-16 13:50           ` Dirk Brandewie
     [not found]             ` <4CE28C32.3020807-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-11-17  0:12               ` Grant Likely
     [not found]                 ` <AANLkTinwGh3HsLCfnfLLBHpu8UTy69JEYG17rkBn4nW4-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-11-17  1:48                   ` Dirk Brandewie
     [not found]                     ` <4CE3346B.3000109-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-11-17  5:59                       ` 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=4CE2167B.3070101@gmail.com \
    --to=dirk.brandewie@gmail.com \
    --cc=arjan@linux.intel.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=sodaville@linutronix.de \
    /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.