From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Thu, 30 Jul 2026 15:08:31 +0200 Received: from metis.whiteo.stw.pengutronix.de ([2a0a:edc0:2:b01:1d::104]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wpQUx-004V3s-08 for lore@lore.pengutronix.de; Thu, 30 Jul 2026 15:08:31 +0200 Received: from [127.0.0.1] (helo=metis.whiteo.stw.pengutronix.de) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1wpQUt-0001jc-BQ; Thu, 30 Jul 2026 15:08:27 +0200 Received: from mx1.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::107]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1wpQUc-0001Zl-El for ptxdist@pengutronix.de; Thu, 30 Jul 2026 15:08:10 +0200 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPS id 2EED3201D85 for ; Thu, 30 Jul 2026 15:08:06 +0200 (CEST) Authentication-Results: mx1.white.stw.pengutronix.de; dkim=pass header.d=gmail.com header.s=20251104 header.b=LYg0BbyI; spf=pass (mx1.white.stw.pengutronix.de: domain of bruno.thomsen@gmail.com designates 2a00:1450:4864:20::636 as permitted sender) smtp.mailfrom=bruno.thomsen@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-c16794450aeso271871866b.2 for ; Thu, 30 Jul 2026 06:08:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785416885; x=1786021685; darn=pengutronix.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Oywx4SbelYqhHoa9qVy0olUT6pd04KyqEXzk/9cNAEE=; b=LYg0BbyIKQrviCBVICfBAwCDM+65Llwm/+3yES4XKPkhcjxa90/Xo79qtp1bgby9DO RrUzCESWKSUab2JOCWm5kwMibbpk044NLQK4eiGlPi6BOAqJm+9sebjOrPi4afdrR4Fd dBB9QgZSzCWiktNu/jcIZyZExf+SZo41VsT1B04LwF/inI9UloJMacWtLfMHn8O1UdnN fv+c9zctIuZXmQRlfIFz4opTfP/ew2Wuc5mYKLZtRciuFjXyx+rLOjavGg3TQHpqHA/6 x8tV3u2czHWQjQtHyFeeG9taZRi/N4GcKaTS3Hcx1PLlGctbtDqNQJdODHs3W9L5SPhR GxYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785416885; x=1786021685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Oywx4SbelYqhHoa9qVy0olUT6pd04KyqEXzk/9cNAEE=; b=sxOnZHjmRnsaOwPqRacO+oIZOMC8vQNDDWdmuFYzm9d8c6S2Tk1LNJU6PV9/Kwe1UJ zJ3RtXjc8OzYlIJjjdr/HcZBC8kppIoqiGOm65OqOAs0WGkXfXfpX6gacpRQzY20LUCV OljRaCN2R1jsD6w+MnFBOR+yieB9KRqYiXPCN1wxASSky2lTvwfjeok7kHihTJCLCpjw +KulunSa76lgp91BeUKGK7AHtezNMnYaN0+FeDa6NF2c5D/idhjaLZsov0ubAFpMifhL ydI3x80tGhX2VQN9kEb6x1dgf6DCbJxzkZFrFdhGWbXS5/I2QH0dX4m7b4Qv4eBAAR3g uGmw== X-Gm-Message-State: AOJu0YxN11VPXuRxx71A4q0w/frJqPyGWrQlwBddv/7edNXnJ1y+a7Wg IvYPeO/l33HWQhVGKyFnWwEmigcjfXVLF8aJeImyNGdCXyBPh5oeFsepryDC7w== X-Gm-Gg: AR+sD12bk6e6AhMn8Q6i8UNrVlgTOBWGSdHs7C+lTabuJVrtbsLrkEYYYcWV/TX7xOR Fw88pgQsIXEmAWr8Kh+1EkpST6aG3EVCF+OFppBcHtrEy406OxQEGnCf/oNNuq2smbivX1CtG+K 7yOTXKpI7ic5U4qKpVBP54NzF8ftv3sKIOFi8DHRjktdm0ZNl4GCAbZD+ohV/CA/X5QIFRp591/ /Ydlx+HYJWofAwW2sJRVyDOEi8Rvzl4mzgyCylako0wa+pTBSZD8kHR0w7pa9AgxlalXFQHIKoE lWQgWem+ph6w5fJr0nGOzl1SBxjFUWy6w7eNHCIjlvXh+N7uubWNcpg/PqGz1tahFB312GS+iFg JbLr3C7NE0twjFO5h60I1K01iPg3EeG/m9IFWF3/YrJms2VM6KD5dacJVUeJt9xb6e8plI8vZVi VADvJ4E0X8840S9g5LvXF4mHaTLPwPn1grWWUeoedgb4rnfbUUYZ/r1livSx22rptww1t05LFXX M7T0tE/EwaGHOEeDmE5G8JNWlzaQTOokbTj+Nx2yMH1XQ== X-Received: by 2002:a05:6938:a08f:20b0:c12:4cb8:a826 with SMTP id a640c23a62f3a-c1fbca204b3mr17341366b.6.1785416885260; Thu, 30 Jul 2026 06:08:05 -0700 (PDT) Received: from fedora.tux.internal (85.191.71.118.dynamic.dhcp.aura-net.dk. [85.191.71.118]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1fa85dbe43sm65900566b.27.2026.07.30.06.08.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jul 2026 06:08:04 -0700 (PDT) From: Bruno Thomsen To: ptxdist@pengutronix.de Date: Thu, 30 Jul 2026 15:07:40 +0200 Message-ID: <20260730130740.10851-3-bruno.thomsen@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260730130740.10851-1-bruno.thomsen@gmail.com> References: <20260730130740.10851-1-bruno.thomsen@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Server: mx1 X-Stat-Signature: 95ck8kp8683tytnuorzxiffrbbu5sbto X-Spamd-Result: default: False [-3.50 / 15.00]; BAYES_HAM(-3.00)[100.00%]; R_MISSING_CHARSET(0.50)[]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4864::/56:c]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20251104]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TAGGED_FROM(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FREEMAIL_CC(0.00)[gmail.com]; MID_RHS_MATCH_FROM(0.00)[]; NEURAL_HAM(-0.00)[-1.000]; PREVIOUSLY_DELIVERED(0.00)[ptxdist@pengutronix.de]; RCVD_COUNT_TWO(0.00)[2]; TAGGED_RCPT(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::636:from]; DKIM_TRACE(0.00)[gmail.com:+]; FROM_HAS_DN(0.00)[] X-Rspamd-Queue-Id: 2EED3201D85 Subject: [ptxdist] [RFC PATCH 2/2] kernel: validate device trees against the DT schema X-BeenThere: ptxdist@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Cc: Bruno Thomsen Sender: "ptxdist" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: ptxdist-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false Make it possible to do device tree validation on dts/dtsi during development and preparation for upstream. Signed-off-by: Bruno Thomsen --- platforms/kernel.in | 25 +++++++++++++++++++++++++ rules/kernel.make | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/platforms/kernel.in b/platforms/kernel.in index 2c6d906e8..79a414fd8 100644 --- a/platforms/kernel.in +++ b/platforms/kernel.in @@ -11,6 +11,8 @@ menuconfig KERNEL select HOST_LZ4 if KERNEL_LZ4 select HOST_LIBKMOD if KERNEL_MODULES select HOST_SYSTEM_BC + select HOST_SYSTEM_PYTHON3 if KERNEL_DTB_CHECK + select HOST_SYSTEM_PYTHON3_DTSCHEMA if KERNEL_DTB_CHECK select HOST_OPENSSL if KERNEL_OPENSSL select HOST_LIBELF if KERNEL_LIBELF select HOST_BINDGEN_CLI if KERNEL_RUST @@ -232,6 +234,29 @@ config KERNEL_DTSO endif +config KERNEL_DTB_CHECK + bool + depends on KERNEL_DTB + prompt "validate device trees against the DT schema" + help + Additionally build the device trees with the kernel build system + ('make CHECK_DTBS=y .dtb') to validate them against the + device tree bindings in Documentation/devicetree/bindings. + Problems are reported as warnings, they do not break the build. + + This requires the 'dtschema' python package on the build host and + it noticeably increases the build time of the kernel, because the + schema of all bindings must be processed first. + + Only device trees that are part of the kernel tree can be checked. + Each file in KERNEL_DTS is looked up in KERNEL_DTS_PATH and the + first match below a 'boot/dts' directory is checked, even if the + device tree itself is built from an earlier entry in the search + path. Device trees without such a match are skipped with a + warning. So for device trees in a vendor directory, that directory + must be part of KERNEL_DTS_PATH, e.g. + "${KERNEL_DIR}/arch/${GENERIC_KERNEL_ARCH}/boot/dts/ti/omap". + config KERNEL_CODE_SIGNING prompt "use code signing infrastructure" select KERNEL_OPENSSL diff --git a/rules/kernel.make b/rules/kernel.make index af0dd3913..eaed71023 100644 --- a/rules/kernel.make +++ b/rules/kernel.make @@ -215,6 +215,36 @@ KERNEL_MAKE_OPT = \ $(KERNEL_IMAGE) \ $(call ptx/ifdef, PTXCONF_KERNEL_MODULES,modules) +# +# device tree validation +# +# The kernel build system can only validate device trees from the kernel tree. +# Look up the device trees in KERNEL_DTS_PATH and use the first match below a +# 'boot/dts' directory. +# +kernel/dtb-check-file = \ + $(firstword $(foreach dts, \ + $(call ptx/in-path-all,KERNEL_DTS_PATH,$(1)), \ + $(if $(findstring /boot/dts/,$(dts)),$(dts)))) + +# the dtb make targets are relative to arch//boot/dts +kernel/dtb-check-target = \ + $(patsubst %.dts,%.dtb,$(patsubst /%,%,$(word 2, \ + $(subst /boot/dts,$(ptx/def/space), \ + $(call kernel/dtb-check-file,$(1)))))) + +KERNEL_DTB_CHECK_FILES = $(strip \ + $(foreach dts,$(KERNEL_DTS),$(call kernel/dtb-check-target,$(dts)))) + +KERNEL_DTB_CHECK_SKIPPED = $(strip \ + $(foreach dts,$(KERNEL_DTS), \ + $(if $(call kernel/dtb-check-file,$(dts)),,$(dts)))) + +KERNEL_DTB_CHECK_OPT = \ + $(KERNEL_SHARED_OPT) \ + CHECK_DTBS=y \ + $(KERNEL_DTB_CHECK_FILES) + KERNEL_TOOL_PERF_OPTS := \ -C $(KERNEL_DIR)/tools/perf \ O=$(KERNEL_BUILD_DIR)/tools/perf \ @@ -263,6 +293,12 @@ $(STATEDIR)/kernel.compile: $(KERNEL_BUILD_DIR)/usr/initramfs_data.cpio.* \ $(KERNEL_BUILD_DIR)/usr/.initramfs_data.cpio.* @$(call world/compile, KERNEL) +ifdef PTXCONF_KERNEL_DTB_CHECK + @$(foreach dts, $(KERNEL_DTB_CHECK_SKIPPED), \ + echo "dtb-check: skipping '$(dts)': no match below 'boot/dts' in KERNEL_DTS_PATH";) + @$(if $(KERNEL_DTB_CHECK_FILES), \ + $(call world/execute, KERNEL, $(MAKE) $(KERNEL_DTB_CHECK_OPT))) +endif ifdef PTXCONF_KERNEL_TOOL_PERF @mkdir -p $(KERNEL_BUILD_DIR)/tools/perf @$(call compile, KERNEL, $(KERNEL_TOOL_PERF_OPTS)) -- 2.55.0