* Re: [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux [not found] ` <4CE21163.2070806@gmail.com> @ 2010-11-16 5:17 ` Grant Likely 2010-11-16 5:28 ` Dirk Brandewie 0 siblings, 1 reply; 3+ messages in thread From: Grant Likely @ 2010-11-16 5:17 UTC (permalink / raw) To: Dirk Brandewie; +Cc: sodaville, devicetree-discuss, arjan, linuxppc-dev 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> >>> --- >>> =A0include/asm-generic/vmlinux.lds.h | =A0 19 +++++++++++++++++-- >>> =A0scripts/Makefile.lib =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 17 +++++++++++= ++++++ >>> =A02 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 @@ >>> =A0 * Align to a 32 byte boundary equal to the >>> =A0 * alignment gcc 4.5 uses for a struct >>> =A0 */ >>> -#define STRUCT_ALIGN() . =3D ALIGN(32) >>> +#define STRUCT_ALIGNMENT 32 >>> +#define STRUCT_ALIGN() . =3D 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 >>> >>> =A0/* The actual configuration determine if the init/exit sections >>> =A0 * are handled as text/data or they can be discarded (which >>> @@ -146,6 +153,13 @@ >>> =A0#define TRACE_SYSCALLS() >>> =A0#endif >>> >>> + >>> +#define KERNEL_DTB() =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> + =A0 =A0 =A0 . =3D ALIGN(DTB_ALIGNMENT); =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> + =A0 =A0 =A0 VMLINUX_SYMBOL(__dtb_start) =3D .; =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> + =A0 =A0 =A0 *(.dtb.init.rodata) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> + =A0 =A0 =A0 VMLINUX_SYMBOL(__dtb_end) =3D .; >>> + >>> =A0/* .data section */ >>> =A0#define DATA_DATA =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> =A0 =A0 =A0 =A0*(.data) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> @@ -468,7 +482,8 @@ >>> =A0 =A0 =A0 =A0MCOUNT_REC() =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> =A0 =A0 =A0 =A0DEV_DISCARD(init.rodata) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> =A0 =A0 =A0 =A0CPU_DISCARD(init.rodata) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> - =A0 =A0 =A0 MEM_DISCARD(init.rodata) >>> + =A0 =A0 =A0 MEM_DISCARD(init.rodata) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >>> + =A0 =A0 =A0 KERNEL_DTB() >>> >>> =A0#define INIT_TEXT =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> =A0 =A0 =A0 =A0*(.init.text) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >>> 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 =3D GZIP =A0 =A0$@ >>> =A0cmd_gzip =3D (cat $(filter-out FORCE,$^) | gzip -f -9> =A0$@) || \ >>> =A0 =A0 =A0 =A0(rm -f $@ ; false) >>> >>> +# DTC >>> +# >>> =A0--------------------------------------------------------------------= ------- >>> +$(obj)/%.dtb.S: $(obj)/%.dtb FORCE >>> + =A0 =A0 =A0 @echo '#include<asm-generic/vmlinux.lds.h>'> =A0$@ >>> + =A0 =A0 =A0 @echo '.section .dtb.init.rodata,"a"'>> =A0$@ >>> + =A0 =A0 =A0 @echo '.balign DTB_ALIGNMENT'>> =A0$@ >>> + =A0 =A0 =A0 @echo '.global __dtb_$(*F)_begin'>> =A0$@ >>> + =A0 =A0 =A0 @echo '__dtb_$(*F)_begin:'>> =A0$@ >>> + =A0 =A0 =A0 @echo '.incbin "$<" '>> =A0$@ >>> + =A0 =A0 =A0 @echo '__dtb_$(*F)_end:'>> =A0$@ >>> + =A0 =A0 =A0 @echo '.global __dtb_$(*F)_end'>> =A0$@ >>> + =A0 =A0 =A0 @echo '.balign DTB_ALIGNMENT'>> =A0$@ >>> + >>> +DTC =3D $(objtree)/scripts/dtc/dtc >>> + >>> +quiet_cmd_dtc =3D DTC =A0 =A0$@ >>> + =A0 =A0 =A0cmd_dtc =3D $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 =A0$(src)/= $*.dts >> >> Missing the %.dtb: %.dts rule, but otherwise looks okay. =A0You will >> need to make sure this doesn't break powerpc or microblaze when the >> dts->dtb rule is added. >> > I have the rule > =A0$(obj)/%.dtb: $(src)/%.dts > =A0 =A0 =A0 =A0 =A0$(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. g. > > I need some more skilled in kbuild to help craft the more generic rule so= we > can have the dts files anywhere in the arch/<*>/ directory structure and = be > able to find the correct dts files. > > --Dirk > --=20 Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux 2010-11-16 5:17 ` [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux Grant Likely @ 2010-11-16 5:28 ` Dirk Brandewie 2010-11-16 6:10 ` Grant Likely 0 siblings, 1 reply; 3+ messages in thread From: Dirk Brandewie @ 2010-11-16 5:28 UTC (permalink / raw) To: Grant Likely; +Cc: sodaville, devicetree-discuss, arjan, linuxppc-dev 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux 2010-11-16 5:28 ` Dirk Brandewie @ 2010-11-16 6:10 ` Grant Likely 0 siblings, 0 replies; 3+ messages in thread From: Grant Likely @ 2010-11-16 6:10 UTC (permalink / raw) To: Dirk Brandewie; +Cc: sodaville, devicetree-discuss, arjan, linuxppc-dev On Mon, Nov 15, 2010 at 10:28 PM, Dirk Brandewie <dirk.brandewie@gmail.com> wrote: > 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> =A0wrote: >>> >>> 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> >>>>> --- >>>>> =A0include/asm-generic/vmlinux.lds.h | =A0 19 +++++++++++++++++-- >>>>> =A0scripts/Makefile.lib =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 17 +++++++++= ++++++++ >>>>> =A02 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 @@ >>>>> =A0 * Align to a 32 byte boundary equal to the >>>>> =A0 * alignment gcc 4.5 uses for a struct >>>>> =A0 */ >>>>> -#define STRUCT_ALIGN() . =3D ALIGN(32) >>>>> +#define STRUCT_ALIGNMENT 32 >>>>> +#define STRUCT_ALIGN() . =3D 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 >>>>> >>>>> =A0/* The actual configuration determine if the init/exit sections >>>>> =A0 * are handled as text/data or they can be discarded (which >>>>> @@ -146,6 +153,13 @@ >>>>> =A0#define TRACE_SYSCALLS() >>>>> =A0#endif >>>>> >>>>> + >>>>> +#define KERNEL_DTB() >>>>> \ >>>>> + =A0 =A0 =A0 . =3D ALIGN(DTB_ALIGNMENT); >>>>> \ >>>>> + =A0 =A0 =A0 VMLINUX_SYMBOL(__dtb_start) =3D .; >>>>> =A0\ >>>>> + =A0 =A0 =A0 *(.dtb.init.rodata) >>>>> \ >>>>> + =A0 =A0 =A0 VMLINUX_SYMBOL(__dtb_end) =3D .; >>>>> + >>>>> =A0/* .data section */ >>>>> =A0#define DATA_DATA >>>>> \ >>>>> =A0 =A0 =A0 =A0*(.data) >>>>> =A0\ >>>>> @@ -468,7 +482,8 @@ >>>>> =A0 =A0 =A0 =A0MCOUNT_REC() >>>>> =A0\ >>>>> =A0 =A0 =A0 =A0DEV_DISCARD(init.rodata) >>>>> =A0\ >>>>> =A0 =A0 =A0 =A0CPU_DISCARD(init.rodata) >>>>> =A0\ >>>>> - =A0 =A0 =A0 MEM_DISCARD(init.rodata) >>>>> + =A0 =A0 =A0 MEM_DISCARD(init.rodata) >>>>> =A0\ >>>>> + =A0 =A0 =A0 KERNEL_DTB() >>>>> >>>>> =A0#define INIT_TEXT >>>>> \ >>>>> =A0 =A0 =A0 =A0*(.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 =3D GZIP =A0 =A0$@ >>>>> =A0cmd_gzip =3D (cat $(filter-out FORCE,$^) | gzip -f -9> =A0 =A0$@) = || \ >>>>> =A0 =A0 =A0 =A0(rm -f $@ ; false) >>>>> >>>>> +# DTC >>>>> +# >>>>> >>>>> =A0------------------------------------------------------------------= --------- >>>>> +$(obj)/%.dtb.S: $(obj)/%.dtb FORCE >>>>> + =A0 =A0 =A0 @echo '#include<asm-generic/vmlinux.lds.h>'> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.section .dtb.init.rodata,"a"'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.balign DTB_ALIGNMENT'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.global __dtb_$(*F)_begin'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '__dtb_$(*F)_begin:'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.incbin "$<" '>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '__dtb_$(*F)_end:'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.global __dtb_$(*F)_end'>> =A0 =A0$@ >>>>> + =A0 =A0 =A0 @echo '.balign DTB_ALIGNMENT'>> =A0 =A0$@ >>>>> + >>>>> +DTC =3D $(objtree)/scripts/dtc/dtc >>>>> + >>>>> +quiet_cmd_dtc =3D DTC =A0 =A0$@ >>>>> + =A0 =A0 =A0cmd_dtc =3D $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 =A0$(src= )/$*.dts >>>> >>>> Missing the %.dtb: %.dts rule, but otherwise looks okay. =A0You will >>>> need to make sure this doesn't break powerpc or microblaze when the >>>> dts->dtb rule is added. >>>> >>> I have the rule >>> =A0$(obj)/%.dtb: $(src)/%.dts >>> =A0 =A0 =A0 =A0 =A0$(call if_changed,dtc) >>> in the arch/x86/kernel/Makefile to prevent this sneaking into other oth= er >>> architectures. >> >> This rule looks correct. =A0PowerPC and Microblaze need to be modified >> to use it. =A0It should not be hard to do, give it a try. =A0Worst case, >> your first attempt is wrong and the rest of us fix it up. =A0:-) >> >> Hint: PowerPC currently puts the .dtb file in a different directory >> from the source .dts file. =A0It doesn't need to do it that way. >> arch/powerpc/boot/Makefile will need to be modified. >> > > I will give it a shot. =A0The only real difference except for the directo= ry > structures is powerpc and microblaze add padding to the dtb with the -p 1= 024 > command line argument to dtc. You could use a $(DTCFLAGS) variable to pass in arch specific flags. > =A0Is the padding needed when the blob are > linked into vmlinux proper? Maybe, maybe not. Padding is required to be able to modify the .dtb data in-place, which is important when adapting data from other sources into the device tree structure. However, when it is linked into the kernel, the adding of additional data /possibly/ can be deferred until after the tree is either copied or unflattened. g. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-11-16 6:10 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <cover.1289877715.git.dirk.brandewie@gmail.com> [not found] ` <ca5555dd665a668bf4e2b2256ccf4bb5d010cde1.1289877715.git.dirk.brandewie@gmail.com> [not found] ` <20101116044110.GA4074@angua.secretlab.ca> [not found] ` <4CE21163.2070806@gmail.com> 2010-11-16 5:17 ` [PATCH 1/2] of: Add support for linking device tree blobs into vmlinux Grant Likely 2010-11-16 5:28 ` Dirk Brandewie 2010-11-16 6:10 ` Grant Likely
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).