From nobody Sun Feb 8 05:29:33 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70B2E1A8F8B for ; Mon, 23 Dec 2024 18:18:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734977918; cv=none; b=kit/gg9AENxXXoNnRr4nEES95y8BzK/qVsdLZwr/XhyjQY7zea8NoTXUZs5nIkdhHKCpsORTUFag3ZLQ9CkP2Ihb4Xgsd4H/mfBARsss6X0xjvDRi0qdrp+m4ZsJi9cliDgdzYkfKIARI581Fie3v1NSfS5e9C6qnOoBW4CAnlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734977918; c=relaxed/simple; bh=B2E6qqZwGMShX2nKcueQu1ZDUaeo1wq2IEw0JKforyA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=F151WDgi56TS9m1RiuACKXAU89nbn7ZD4peD0D5IKHHM5RPWWlE2e/fSipMjZ3BsOk6wzZuBy2IjHbdPR6hfKij5g/NrkkGX9YIYgd7n1Qh5MnTKUm2nX8C2uEzA2qOXEkGCvsqYJna+6/7tD6sBlmr36xAq9XH7t5Tl+yR/UPo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=dtf0LPdm; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="dtf0LPdm" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4361f664af5so50768065e9.1 for ; Mon, 23 Dec 2024 10:18:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1734977915; x=1735582715; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=tLuFz6WU7Y8I7wA0/705LYzuAZg+Xyirc5S+pPOZBTI=; b=dtf0LPdmIUV0TltHfYvE7OL0xfAuArExPJgZ+/RgZFqfOADpaSWluOM3onrwoga9Lp JLAv8wkTqSEoK0QMarNykeL4+uYgXrWjHnsduJYgs1W65Wft2o3ySYlYfOdo1viJRg66 oKaN0e0XrH0XJZdLUyue456MEmKhJeq/B1tYY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734977915; x=1735582715; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tLuFz6WU7Y8I7wA0/705LYzuAZg+Xyirc5S+pPOZBTI=; b=kNgjJkumqu+Ga1QvF3qYOFoD7+Dm/UqCvjtM2F2k7HmY6phPZzv9aDu0ReKgjhMUjp OIGnhFsxly2rVPmo5SBc13LozqJbieLrybDkzPSu7vUQ3PnuuOVteLGOEh3YBISbm9JW hTaMoFT1XaNhAw0rswcIDQshXhFFJaL91z4gn3sTVE+APOd9lh3EoypTYQU7216WhAC1 7l+sgweq3V28HF4G4o2OUxdtdBpoMmDe8o0oKoXpNE0l6MzsieXeXn55pX8Wj/pVXNqQ X0lZ8kv/MskhOz4nOE5jgdzTP83Ob0bGN8N9r+7gzOoDVYkHIFkTc8ZpwsxaiA63rdnl dclQ== X-Forwarded-Encrypted: i=1; AJvYcCU956x8rtwgVeskkhiuaWGDDhawjhUvGRjteO4NcI4QFyAw7ZjLZ7UK27dsq+mPLUYeQSEhpHH09UwcCwc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8vqYBjcSguqHNEydMlrP+hFqdHwmnC4KyH2sGr1AX2UKiHf21 vF9ajhfmaBI77TGBIciT3WoTiamhs3Vo8k1yo7GKunlmaCzFaoayV6Er5Jzuag== X-Gm-Gg: ASbGncuOdfj2QRHk8kUG4M70RJwBTUWItiYuHyBCNO9mqZfgEDHQH5AcNrh0PBAmXuT RybgZROCdkQipJZ0GfKTs2tmzmuG7VfYtkFUgg3YF18iTBWF2OIS5zA09FQz4WL6AfKebucQkG1 MmYEVFJ8896PBrIb7djgkoeI2FD2kyYI7+NSq/hNo/uKUOCOWpEh9M/uJpHVmC36KiOab3J6hNf HRLnN9BkixuSGQSLIeFgdHTvIsLAqEBeEKKdmvtZwC+3KD5wnXGUFjxqrG0pTHoMCp27Jzdddmu R1WI6VSi6d5CU6ZIbLraZzz/wHUhzeCXKlL1s7zGGQ== X-Google-Smtp-Source: AGHT+IHnVx6E6+jpgj6V5M0oZS5uvf2+NG4biibS6FNy7VrAA4VTe1doRUngiRy+NEUUzDUe8WdmLQ== X-Received: by 2002:a05:600c:1d07:b0:435:192:63fb with SMTP id 5b1f17b1804b1-4366854bf0cmr124029705e9.3.1734977914779; Mon, 23 Dec 2024 10:18:34 -0800 (PST) Received: from dmaluka.c.googlers.com.com (187.5.148.146.bc.googleusercontent.com. [146.148.5.187]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43664b15365sm127553805e9.7.2024.12.23.10.18.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Dec 2024 10:18:34 -0800 (PST) From: Dmytro Maluka To: Thomas Gleixner Cc: Dmytro Maluka , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org (maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)), "H. Peter Anvin" , Rob Herring , Saravana Kannan , Saurabh Sengar , Usama Arif , Stephen Boyd , Frank Rowand , linux-kernel@vger.kernel.org (open list:X86 ARCHITECTURE (32-BIT AND 64-BIT)), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE) Subject: [PATCH] x86/of: Restore possibility to use both ACPI and FDT from bootloader Date: Mon, 23 Dec 2024 18:18:03 +0000 Message-ID: <20241223181813.224446-1-dmaluka@chromium.org> X-Mailer: git-send-email 2.47.1.613.gc27f4b7a9f-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are cases when the bootloader provides information to the kernel in both ACPI and DTB, not interchangeably. One such use case is virtual machines in Android. When running on x86, the Android Virtualization Framework (AVF) boots VMs with ACPI like it is usually done on x86 (i.e. the virtual LAPIC, IOAPIC, HPET, PCI MMCONFIG etc are described in ACPI) but also passes various AVF-specific boot parameters in DTB. This allows reusing the same implementations of various AVF components on both arm64 and x86. Commit 7b937cc243e5 ("of: Create of_root if no dtb provided by firmware") removed the possibility to do that, since among other things it introduced forcing emptying the bootloader-provided DTB if ACPI is enabled (probably assuming that if ACPI is available, a DTB can only be useful for applying overlays to it afterwards, for testing purposes). So restore this possibility. At the same time, since the aforementioned recently introduced restriction is actually useful for preventing conflicts between ACPI and DT for LAPIC/IOAPIC/HPET setup, don't remove this restriction completely but relax it: unflatten the bootloader supplied DTB but don't try to use it for SMP setup (i.e. don't override the .parse_smp_cfg callback) if ACPI is enabled. Precisely, right now this prevents at least: - incorrectly calling register_lapic_address(APIC_DEFAULT_PHYS_BASE) after the LAPIC was already successfully enumerated via ACPI, causing noisy kernel warnings and probably potential real issues as well - failed IOAPIC setup in the case when IOAPIC is enumerated via mptable instead of ACPI (e.g. with acpi=3Dnoirq), due to mpparse_parse_smp_config() overridden by x86_dtb_parse_smp_config() Fixes: 7b937cc243e5 ("of: Create of_root if no dtb provided by firmware") Signed-off-by: Dmytro Maluka --- arch/x86/kernel/devicetree.c | 3 ++- drivers/of/fdt.c | 10 +--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c index 59d23cdf4ed0..dd8748c45529 100644 --- a/arch/x86/kernel/devicetree.c +++ b/arch/x86/kernel/devicetree.c @@ -2,6 +2,7 @@ /* * Architecture specific OF callbacks. */ +#include #include #include #include @@ -313,6 +314,6 @@ void __init x86_flattree_get_config(void) if (initial_dtb) early_memunmap(dt, map_len); #endif - if (of_have_populated_dt()) + if (acpi_disabled && of_have_populated_dt()) x86_init.mpparse.parse_smp_cfg =3D x86_dtb_parse_smp_config; } diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 0121100372b4..3b29a5c50e2e 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -8,7 +8,6 @@ =20 #define pr_fmt(fmt) "OF: fdt: " fmt =20 -#include #include #include #include @@ -1215,14 +1214,7 @@ void __init unflatten_device_tree(void) /* Save the statically-placed regions in the reserved_mem array */ fdt_scan_reserved_mem_reg_nodes(); =20 - /* Don't use the bootloader provided DTB if ACPI is enabled */ - if (!acpi_disabled) - fdt =3D NULL; - - /* - * Populate an empty root node when ACPI is enabled or bootloader - * doesn't provide one. - */ + /* Populate an empty root node when bootloader doesn't provide one */ if (!fdt) { fdt =3D (void *) __dtb_empty_root_begin; /* fdt_totalsize() will be used for copy size */ --=20 2.47.1.613.gc27f4b7a9f-goog