From b1107e312ac17392e26d199f5445c509f9381d01 Mon Sep 17 00:00:00 2001 From: Dj <43033058+DjDeveloperr@users.noreply.github.com> Date: Mon, 26 Oct 2026 02:34:21 -0400 Subject: [PATCH] arm64: configs: Enable the T6050 APIF platform consumers Enable the composed non-GPU T6050 platform through the APIF configuration fragment, including storage, power, input, display, networking, USB, boot NOR, and desktop sandbox prerequisites. Source snapshot: t6050-gpu ee68abb105200e99636a5edfc647a5cfc1d89954 Integration base: 9cbdd0734d9e186c5f5f5949a21b909d10c2571b Signed-off-by: Dj <43033058+DjDeveloperr@users.noreply.github.com> --- arch/arm64/configs/aurora-apif.config | 115 +++++++++++++++++- tools/testing/selftests/aurora-apif/config.py | 78 ++++++++++++ 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100755 tools/testing/selftests/aurora-apif/config.py diff --git a/arch/arm64/configs/aurora-apif.config b/arch/arm64/configs/aurora-apif.config index dbc1e64573992..d4bb3e241402e 100644 --- a/arch/arm64/configs/aurora-apif.config +++ b/arch/arm64/configs/aurora-apif.config @@ -1,6 +1,119 @@ -# Common T6050 APIF providers. Add the platform-wiring PR for all consumers. +# Native Aura guest providers. Apply after defconfig and asahi.config. CONFIG_ARM64_16K_PAGES=y CONFIG_AURORA_APIF_MMIO=y CONFIG_APPLE_DART_APIF=y +# The alternate SART provider is built into the common SART consumer API. CONFIG_APPLE_SART=y CONFIG_APPLE_SART_APIF=y +CONFIG_NVME_APPLE=y +CONFIG_PCI=y +CONFIG_PCI_MSI=y +CONFIG_PCIE_APPLE_APIF=y +CONFIG_PM=y +CONFIG_RUST=y +CONFIG_APPLE_PMP=y +CONFIG_SPMI=y +CONFIG_SPMI_APPLE=y +CONFIG_NVMEM=y +CONFIG_NVMEM_APPLE_SPMI=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_APPLE_SPMI_PMU=y +CONFIG_MFD_MACSMC=y +CONFIG_GPIO_MACSMC=y +CONFIG_INPUT=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MACSMC_INPUT=y +CONFIG_HWMON=y +CONFIG_SENSORS_MACSMC_HWMON=y +CONFIG_PHY_APPLE_T6050_DP=y +CONFIG_MULTIPLEXER=y +CONFIG_MUX_APPLE_DPXBAR=y +CONFIG_CPU_FREQ=y +CONFIG_ARM_APPLE_SOC_CPUFREQ=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_INET=y +CONFIG_WIRELESS=y +CONFIG_RFKILL=y +CONFIG_WLAN=y +CONFIG_CFG80211=y +CONFIG_WLAN_VENDOR_APPLE=y +CONFIG_APPLE_CENTAURI=y +CONFIG_APPLE_CENTAURI_WIFI=y +CONFIG_BT=y +CONFIG_BT_HCICENTAURI=y +CONFIG_DRM=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_DRM_APPLE=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_DRM_APPLE_AUDIO=y +# Existing platform consumers needed alongside the APIF providers. +CONFIG_APPLE_MAILBOX=y +CONFIG_APPLE_RTKIT=y +CONFIG_APPLE_RTKIT_HELPER=y +CONFIG_APPLE_DOCKCHANNEL=y +CONFIG_HID=y +CONFIG_HID_DOCKCHANNEL=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_HID_APPLE=y +CONFIG_HID_APPLE_MTP_HAPTIC=y +# Keep early framebuffer text readable on the native-resolution panel. +CONFIG_FONTS=y +CONFIG_FONT_8x16=y +CONFIG_FONT_TER16x32=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_APPLE_GPIO=y +CONFIG_I2C=y +CONFIG_I2C_APPLE=y +CONFIG_SPI=y +CONFIG_SPI_APPLE=y +# T6050 boot NOR uses QSPIMC, not the ordinary SPIMC controller. +CONFIG_SPI_MEM=y +CONFIG_SPI_APPLE_QSPI=y +CONFIG_MTD=y +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_OF_PARTS=y +CONFIG_USB_SUPPORT=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_DUAL_ROLE=y +CONFIG_USB_DWC3_APPLE=y +CONFIG_PHY_APPLE_ATC=y +CONFIG_TYPEC=y +CONFIG_TYPEC_SN201202X=y +CONFIG_TYPEC_DP_ALTMODE=y +CONFIG_USB_ROLE_SWITCH=y + +# Desktop networking and package-manager sandbox support. +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_NETFILTER=y +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_NAT=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=y +CONFIG_NFT_CT=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_NAT=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_FIB_INET=m +CONFIG_NFT_COMPAT=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_LANDLOCK=y diff --git a/tools/testing/selftests/aurora-apif/config.py b/tools/testing/selftests/aurora-apif/config.py new file mode 100755 index 0000000000000..e2404b20fe286 --- /dev/null +++ b/tools/testing/selftests/aurora-apif/config.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0-only +"""Check QSPI/NOR support and migration refusal with an incomplete config.""" +from pathlib import Path +import importlib.util +import shutil +import subprocess +import sys +import tempfile + +ROOT = Path(__file__).resolve().parents[4] + + +def main(): + print("TAP version 13\n1..1", flush=True) + if not shutil.which("dtc"): + print("ok 1 - guest config # SKIP dtc unavailable") + return 4 + try: + import libfdt + except ImportError: + print("ok 1 - guest config # SKIP Python libfdt unavailable") + return 4 + tool = ROOT / "tools/aurora-apif/check_guest_config.py" + spec = importlib.util.spec_from_file_location("check_guest_config", tool) + check = importlib.util.module_from_spec(spec) + spec.loader.exec_module(check) + required = ["SPI", "SPI_MEM", "SPI_APPLE_QSPI", "MTD", "MTD_SPI_NOR", "MTD_OF_PARTS"] + fragment = check.parse_config((ROOT / "arch/arm64/configs/aurora-apif.config").read_text()) + assert all(fragment.get("CONFIG_" + symbol) == "y" for symbol in required) + source = r'''/dts-v1/; +/ { + #address-cells=<2>; #size-cells=<2>; + spi@62630000 { + compatible="apple,t6050-qspi","apple,t8140-qspi"; + reg=<0 0x62630000 0 0x4000>; #address-cells=<1>; #size-cells=<0>; + flash@0 {compatible="jedec,spi-nor"; reg=<0>; + partitions {compatible="fixed-partitions";};}; + }; + iommu@61f34000 {compatible="apple,dart-x1n1"; + reg=<0 0x61f34000 0 0x4000>; #iommu-cells=<1>; apple,x1n1-dart-id=<12>;}; + disabled {status="disabled"; child {compatible="apple,sn201202x";};}; + opaque {compatible="example,not-in-map";}; +};''' + values = required + ["AURORA_APIF_MMIO", "APPLE_DART_APIF"] + good = "\n".join("CONFIG_" + symbol + "=y" for symbol in values) + "\n" + bad = good.replace("CONFIG_SPI_APPLE_QSPI=y\n", "CONFIG_SPI_APPLE=y\n") + with tempfile.TemporaryDirectory(prefix="apif-config-") as temporary: + tmp = Path(temporary) + (tmp / "input.dts").write_text(source) + subprocess.run(["dtc", "-q", "-I", "dts", "-O", "dtb", "-o", str(tmp / "input.dtb"), + str(tmp / "input.dts")], check=True) + blob = (tmp / "input.dtb").read_bytes() + report = check.audit(blob, bad) + assert report["missing"] == [{"node": "/spi@62630000", "symbol": "CONFIG_SPI_APPLE_QSPI", "value": "n"}] + assert not check.validate(blob, good)["missing"] + assert any(item["node"] == "/opaque" for item in report["unaudited"]) + modular = good.replace("CONFIG_SPI_APPLE_QSPI=y", "CONFIG_SPI_APPLE_QSPI=m") + assert not check.audit(blob, modular)["missing"] + assert check.audit(blob, modular, builtin=True)["missing"] + assert check.audit(blob, good.replace("CONFIG_MTD_SPI_NOR=y\n", ""))["missing"] + migration = ROOT / "tools/aurora-apif/prepare_guest.py" + (tmp / "bad.config").write_text(bad) + failed = subprocess.run([sys.executable, str(migration), str(tmp / "input.dtb"), + str(tmp / "rejected.dtb"), "--kernel-config", str(tmp / "bad.config")], + capture_output=True, text=True) + assert failed.returncode != 0 and "CONFIG_SPI_APPLE_QSPI" in failed.stderr + assert not (tmp / "rejected.dtb").exists() + (tmp / "good.config").write_text(good) + subprocess.run([sys.executable, str(migration), str(tmp / "input.dtb"), + str(tmp / "accepted.dtb"), "--kernel-config", str(tmp / "good.config")], check=True) + assert (tmp / "accepted.dtb").exists() + print("ok 1 - QSPI/NOR dependencies, disabled parents, modules and migration config gate") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())