Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 114 additions & 1 deletion arch/arm64/configs/aurora-apif.config
Original file line number Diff line number Diff line change
@@ -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
78 changes: 78 additions & 0 deletions tools/testing/selftests/aurora-apif/config.py
Original file line number Diff line number Diff line change
@@ -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())