* [PATCH] kbuild: create an "include chroot" for DT bindings
@ 2013-02-20 21:05 Stephen Warren
2013-02-21 4:37 ` Shawn Guo
2013-02-21 22:26 ` Michal Marek
0 siblings, 2 replies; 6+ messages in thread
From: Stephen Warren @ 2013-02-20 21:05 UTC (permalink / raw)
To: linux-arm-kernel
From: Stephen Warren <swarren@nvidia.com>
The recent dtc+cpp support allows header files and C pre-processor
defines/macros to be used when compiling device tree files. These
headers will typically define various constants that are part of the
device tree bindings.
The original patch which set up the dtc+cpp include path only considered
using those headers from device tree files. However, they are also
useful for kernel code which needs to interpret the device tree.
In both the DT files and the kernel, I'd like to include the DT-related
headers in the same way, for example, <dt-bindings/gpio/tegra-gpio.h>.
That will simplify any text which discusses the DT header locations.
Creating a <dt-bindings/> for kernel source to use is as simple as
placing files into include/dt-bindings/.
However, when compiling DT files, the include path should be restricted
so that only the dt-bindings path is available; arbitrary kernel headers
shouldn't be exposed. For this reason, create a specific include
directory for use by dtc+cpp, and symlink dt-bindings from there to the
actual location of include/dt-bindings/. For want of a better location,
place this "include chroot" into the existing dts/ directory.
arch/*/boot/dts/include/dt-bindings -> ../../../../../dt-bindings
Cc: Shawn Guo <shawn.guo@linaro.org>
Cc: Hiroshi Doyu <hdoyu@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
You can find an example of how this would be used at
git://nv-tegra.nvidia.com/user/swarren/linux-2.6 linux-next_common
(note: there's a bunch of other cruft in that branch too)
arch/arm/boot/dts/include/dt-bindings | 1 +
scripts/Makefile.lib | 3 +--
2 files changed, 2 insertions(+), 2 deletions(-)
create mode 120000 arch/arm/boot/dts/include/dt-bindings
diff --git a/arch/arm/boot/dts/include/dt-bindings b/arch/arm/boot/dts/include/dt-bindings
new file mode 120000
index 0000000..08c00e4
--- /dev/null
+++ b/arch/arm/boot/dts/include/dt-bindings
@@ -0,0 +1 @@
+../../../../../include/dt-bindings
\ No newline at end of file
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 07125e6..d6c5036 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -157,8 +157,7 @@ cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
ld_flags = $(LDFLAGS) $(ldflags-y)
dtc_cpp_flags = -Wp,-MD,$(depfile) -nostdinc \
- -I$(srctree)/arch/$(SRCARCH)/boot/dts \
- -I$(srctree)/arch/$(SRCARCH)/include/dts \
+ -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \
-undef -D__DTS__
# Finds the multi-part object the current object will be linked into
--
1.7.10.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH] kbuild: create an "include chroot" for DT bindings
2013-02-20 21:05 [PATCH] kbuild: create an "include chroot" for DT bindings Stephen Warren
@ 2013-02-21 4:37 ` Shawn Guo
2013-02-21 18:43 ` Stephen Warren
2013-02-21 22:26 ` Michal Marek
1 sibling, 1 reply; 6+ messages in thread
From: Shawn Guo @ 2013-02-21 4:37 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Feb 20, 2013 at 02:05:56PM -0700, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> The recent dtc+cpp support allows header files and C pre-processor
> defines/macros to be used when compiling device tree files. These
> headers will typically define various constants that are part of the
> device tree bindings.
>
> The original patch which set up the dtc+cpp include path only considered
> using those headers from device tree files. However, they are also
> useful for kernel code which needs to interpret the device tree.
>
> In both the DT files and the kernel, I'd like to include the DT-related
> headers in the same way, for example, <dt-bindings/gpio/tegra-gpio.h>.
> That will simplify any text which discusses the DT header locations.
>
> Creating a <dt-bindings/> for kernel source to use is as simple as
> placing files into include/dt-bindings/.
>
> However, when compiling DT files, the include path should be restricted
> so that only the dt-bindings path is available; arbitrary kernel headers
> shouldn't be exposed. For this reason, create a specific include
> directory for use by dtc+cpp, and symlink dt-bindings from there to the
> actual location of include/dt-bindings/. For want of a better location,
> place this "include chroot" into the existing dts/ directory.
>
> arch/*/boot/dts/include/dt-bindings -> ../../../../../dt-bindings
../../../../../include/dt-bindings
And, I would expect only the headers that will actually be referenced
by kernel should go into include/dt-bindings. There is no point to
put headers that will not be included by kernel but only by dts files
into there, and instead arch/arm/boot/dts/include should just be good
enough for them. With this agreed ...
> Cc: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Hiroshi Doyu <hdoyu@nvidia.com>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> You can find an example of how this would be used at
> git://nv-tegra.nvidia.com/user/swarren/linux-2.6 linux-next_common
> (note: there's a bunch of other cruft in that branch too)
>
> arch/arm/boot/dts/include/dt-bindings | 1 +
> scripts/Makefile.lib | 3 +--
> 2 files changed, 2 insertions(+), 2 deletions(-)
> create mode 120000 arch/arm/boot/dts/include/dt-bindings
>
> diff --git a/arch/arm/boot/dts/include/dt-bindings b/arch/arm/boot/dts/include/dt-bindings
> new file mode 120000
> index 0000000..08c00e4
> --- /dev/null
> +++ b/arch/arm/boot/dts/include/dt-bindings
> @@ -0,0 +1 @@
> +../../../../../include/dt-bindings
> \ No newline at end of file
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 07125e6..d6c5036 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -157,8 +157,7 @@ cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
> ld_flags = $(LDFLAGS) $(ldflags-y)
>
> dtc_cpp_flags = -Wp,-MD,$(depfile) -nostdinc \
> - -I$(srctree)/arch/$(SRCARCH)/boot/dts \
> - -I$(srctree)/arch/$(SRCARCH)/include/dts \
> + -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \
> -undef -D__DTS__
>
> # Finds the multi-part object the current object will be linked into
> --
> 1.7.10.4
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] kbuild: create an "include chroot" for DT bindings
2013-02-21 4:37 ` Shawn Guo
@ 2013-02-21 18:43 ` Stephen Warren
2013-02-22 2:35 ` Shawn Guo
0 siblings, 1 reply; 6+ messages in thread
From: Stephen Warren @ 2013-02-21 18:43 UTC (permalink / raw)
To: linux-arm-kernel
On 02/20/2013 09:37 PM, Shawn Guo wrote:
> On Wed, Feb 20, 2013 at 02:05:56PM -0700, Stephen Warren wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> The recent dtc+cpp support allows header files and C pre-processor
>> defines/macros to be used when compiling device tree files. These
>> headers will typically define various constants that are part of the
>> device tree bindings.
>>
>> The original patch which set up the dtc+cpp include path only considered
>> using those headers from device tree files. However, they are also
>> useful for kernel code which needs to interpret the device tree.
>>
>> In both the DT files and the kernel, I'd like to include the DT-related
>> headers in the same way, for example, <dt-bindings/gpio/tegra-gpio.h>.
>> That will simplify any text which discusses the DT header locations.
>>
>> Creating a <dt-bindings/> for kernel source to use is as simple as
>> placing files into include/dt-bindings/.
>>
>> However, when compiling DT files, the include path should be restricted
>> so that only the dt-bindings path is available; arbitrary kernel headers
>> shouldn't be exposed. For this reason, create a specific include
>> directory for use by dtc+cpp, and symlink dt-bindings from there to the
>> actual location of include/dt-bindings/. For want of a better location,
>> place this "include chroot" into the existing dts/ directory.
>>
>> arch/*/boot/dts/include/dt-bindings -> ../../../../../dt-bindings
>
> ../../../../../include/dt-bindings
Yup.
> And, I would expect only the headers that will actually be referenced
> by kernel should go into include/dt-bindings. There is no point to
> put headers that will not be included by kernel but only by dts files
> into there, and instead arch/arm/boot/dts/include should just be good
> enough for them. With this agreed ...
There are two things that include DT-related headers:
a) Device trees (*.dts, *.dtsi)
b) The kernel
All the headers relevant here fall into category (a) by definition. I'd
actually expect most to also fall into category (b), although I can see
that category (b) might be a strict subset of category (a).
I believe you're proposing only storing category (b) headers in
include/dt-bindings/, and storing any others I suppose in arch/*/boot/dts/.
But, my thoughts are that /all/ these headers (both categories) should
be stored in one place for consistency.
That way, if/when the DT binding docs, these headers, and the DT files
themselves move out of the kernel, we'll end up with some other
repository/repositories that might have the following top-level
directories (or at least these sets of logical data):
1) DT binding documents
2) Headers that define constants for (1)
3) DT files (*.dts/*.dtsi)
We need at least some of (2) in the kernel for drivers to share the
constant definitions, so my proposal is to simply copy /all/ the headers
from (2) into the kernel's include/dt-bindings/. That keeps things
simple; simply copy everything and maintain the same hierarchy under
that "root" directory. Otherwise, we'll be constantly wondering which
headers to copy, perhaps moving things back/forth as people realize that
the kernel needs them, etc.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] kbuild: create an "include chroot" for DT bindings
2013-02-21 18:43 ` Stephen Warren
@ 2013-02-22 2:35 ` Shawn Guo
2013-02-22 18:11 ` Stephen Warren
0 siblings, 1 reply; 6+ messages in thread
From: Shawn Guo @ 2013-02-22 2:35 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Feb 21, 2013 at 11:43:13AM -0700, Stephen Warren wrote:
> There are two things that include DT-related headers:
>
> a) Device trees (*.dts, *.dtsi)
> b) The kernel
>
> All the headers relevant here fall into category (a) by definition. I'd
> actually expect most to also fall into category (b), although I can see
> that category (b) might be a strict subset of category (a).
>
> I believe you're proposing only storing category (b) headers in
> include/dt-bindings/, and storing any others I suppose in arch/*/boot/dts/.
>
> But, my thoughts are that /all/ these headers (both categories) should
> be stored in one place for consistency.
>
> That way, if/when the DT binding docs, these headers, and the DT files
> themselves move out of the kernel, we'll end up with some other
> repository/repositories that might have the following top-level
> directories (or at least these sets of logical data):
>
> 1) DT binding documents
> 2) Headers that define constants for (1)
> 3) DT files (*.dts/*.dtsi)
>
> We need at least some of (2) in the kernel for drivers to share the
> constant definitions, so my proposal is to simply copy /all/ the headers
> from (2) into the kernel's include/dt-bindings/. That keeps things
> simple; simply copy everything and maintain the same hierarchy under
> that "root" directory. Otherwise, we'll be constantly wondering which
> headers to copy, perhaps moving things back/forth as people realize that
> the kernel needs them, etc.
You need to anyway identify the headers needed by a) but not b) and
remove them from linux/include/dt-bindings/, when all DTS gets moved
out of kernel tree. Otherwise, you end up leaving those headers only
needed by DTS in the kernel tree.
Shawn
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] kbuild: create an "include chroot" for DT bindings
2013-02-22 2:35 ` Shawn Guo
@ 2013-02-22 18:11 ` Stephen Warren
0 siblings, 0 replies; 6+ messages in thread
From: Stephen Warren @ 2013-02-22 18:11 UTC (permalink / raw)
To: linux-arm-kernel
On 02/21/2013 07:35 PM, Shawn Guo wrote:
> On Thu, Feb 21, 2013 at 11:43:13AM -0700, Stephen Warren wrote:
>> There are two things that include DT-related headers:
>>
>> a) Device trees (*.dts, *.dtsi)
>> b) The kernel
>>
>> All the headers relevant here fall into category (a) by definition. I'd
>> actually expect most to also fall into category (b), although I can see
>> that category (b) might be a strict subset of category (a).
>>
>> I believe you're proposing only storing category (b) headers in
>> include/dt-bindings/, and storing any others I suppose in arch/*/boot/dts/.
>>
>> But, my thoughts are that /all/ these headers (both categories) should
>> be stored in one place for consistency.
>>
>> That way, if/when the DT binding docs, these headers, and the DT files
>> themselves move out of the kernel, we'll end up with some other
>> repository/repositories that might have the following top-level
>> directories (or at least these sets of logical data):
>>
>> 1) DT binding documents
>> 2) Headers that define constants for (1)
>> 3) DT files (*.dts/*.dtsi)
>>
>> We need at least some of (2) in the kernel for drivers to share the
>> constant definitions, so my proposal is to simply copy /all/ the headers
>> from (2) into the kernel's include/dt-bindings/. That keeps things
>> simple; simply copy everything and maintain the same hierarchy under
>> that "root" directory. Otherwise, we'll be constantly wondering which
>> headers to copy, perhaps moving things back/forth as people realize that
>> the kernel needs them, etc.
>
> You need to anyway identify the headers needed by a) but not b) and
> remove them from linux/include/dt-bindings/, when all DTS gets moved
> out of kernel tree. Otherwise, you end up leaving those headers only
> needed by DTS in the kernel tree.
Well that's really my point - do you actually /need/ to do that?
What headers would be in (b) but not (a)? We'd typically be defining
headers for the purpose of defining constants that are part of the
binding definitions. To keep the kernel and binding documents in sync,
the kernel should have access to any such header. Hence, I think the set
of headers only in (a) would be non-existent. Even if there are some,
presumably there would be so few it wouldn't actually matter if we
weeded them out.
The only exception I can think of right now is the header for the i.MX
pinctrl bindings, since that's expanding the names into a set of values
the kernel will use directly rather than as needing to use as table
indices. I'm not sure if that's the right way to go on the bindings; I
see you're getting some pushback. But, I guess "pinctrl-simple" would
end up in the same boat, so perhaps there's some argument for not
removing boot/dts/ itself from the include path.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] kbuild: create an "include chroot" for DT bindings
2013-02-20 21:05 [PATCH] kbuild: create an "include chroot" for DT bindings Stephen Warren
2013-02-21 4:37 ` Shawn Guo
@ 2013-02-21 22:26 ` Michal Marek
1 sibling, 0 replies; 6+ messages in thread
From: Michal Marek @ 2013-02-21 22:26 UTC (permalink / raw)
To: linux-arm-kernel
On 20.2.2013 22:05, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> The recent dtc+cpp support allows header files and C pre-processor
> defines/macros to be used when compiling device tree files. These
> headers will typically define various constants that are part of the
> device tree bindings.
>
> The original patch which set up the dtc+cpp include path only considered
> using those headers from device tree files. However, they are also
> useful for kernel code which needs to interpret the device tree.
>
> In both the DT files and the kernel, I'd like to include the DT-related
> headers in the same way, for example, <dt-bindings/gpio/tegra-gpio.h>.
> That will simplify any text which discusses the DT header locations.
>
> Creating a <dt-bindings/> for kernel source to use is as simple as
> placing files into include/dt-bindings/.
>
> However, when compiling DT files, the include path should be restricted
> so that only the dt-bindings path is available; arbitrary kernel headers
> shouldn't be exposed. For this reason, create a specific include
> directory for use by dtc+cpp, and symlink dt-bindings from there to the
> actual location of include/dt-bindings/. For want of a better location,
> place this "include chroot" into the existing dts/ directory.
Nice trick. dts+cpp only sees the bindings and LINUXINCLUDE is not
polluted either. You can add
Acked-by: Michal Marek <mmarek@suse.cz>
if you like.
Michal
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-02-22 18:11 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-20 21:05 [PATCH] kbuild: create an "include chroot" for DT bindings Stephen Warren
2013-02-21 4:37 ` Shawn Guo
2013-02-21 18:43 ` Stephen Warren
2013-02-22 2:35 ` Shawn Guo
2013-02-22 18:11 ` Stephen Warren
2013-02-21 22:26 ` Michal Marek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox