From: Alexander Letuchiy <asalde.le1@gmail.com>
To: Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Sean Wang <sean.wang@mediatek.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>,
Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Daniel Lezcano <daniel.lezcano@kernel.org>,
Thomas Gleixner <tglx@kernel.org>,
Mattijs Korpershoek <mkorpershoek@kernel.org>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Kees Cook <kees@kernel.org>, Tony Luck <tony.luck@intel.com>,
"Guilherme G. Piccoli" <gpiccoli@igalia.com>
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
linux-serial@vger.kernel.org, linux-watchdog@vger.kernel.org,
linux-input@vger.kernel.org, phone-devel@vger.kernel.org,
Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>,
Alexander Letuchiy <asalde.le1@gmail.com>,
Conor Dooley <conor.dooley@microchip.com>
Subject: [PATCH v2 0/9] arm64: mediatek: Add initial MT6895 and Xiaomi Poco X4 GT support
Date: Fri, 13 Nov 2026 22:04:56 +0300 [thread overview]
Message-ID: <20261113-initial-mt6895-v2-0-4ab0aa9fa391@gmail.com> (raw)
This series adds initial support for the MediaTek MT6895 (Dimensity
8000/8100) SoC and the Xiaomi xaga board, sold as Xiaomi Poco X4 GT, Redmi
Note 11T Pro/Pro+ and Redmi K50i. It is enough to boot to an initramfs
with a serial console, CPU idle, the CPU and DSU PMUs and the volume down
key.
Dependencies
------------
The SoC DT describes the pin controller and the board DT uses its pinmux
macros, so this series depends on the MT6895 pinctrl series:
https://lore.kernel.org/r/20261108-pinctrl-mt6895-v1-0-f704c443b31a@gmail.com
Bootloader dependency
---------------------
This was tested with a modified LK bootloader that is not public.
The stock LK cannot boot this DT, as its Android fixups expect nodes
that are not present here.
The DT relies on the bootloader to:
- update the /memory node
- add all firmware carveouts to /reserved-memory
- pass the command line from the boot image
The carveout addresses are therefore not listed in the DT, as the
bootloader allocates some of them dynamically. I can describe the
fixed ones in the DT if that is preferred.
Firmware behaviour
------------------
Two things in the stock TF-A affect what the DT describes, but not the
DT itself:
- TF-A rejects CPU_SUSPEND for about the first 40 seconds after boot.
The vendor kernel lifts this earlier with a SiP call, so with this
series the idle states only start to be used after that time.
- The DSU PMU registers are lost when the cluster powers down. TF-A
can preserve them (PRESERVE_DSU_PMU_REGS), but the MediaTek firmware
does not, so DSU PMU counts are only reliable while the cluster stays
powered up.
Testing
-------
Tested on a Poco X4 GT with 8 GiB of RAM, using a minimal config and a
script in the initramfs. The results were:
- All 8 CPUs come up and match the DT (A55 on 0-3, A78 on 4-7), and
CPUs 1-7 can be taken offline and brought back through PSCI.
- The cache sizes and geometry in sysfs match the CCSIDR registers on
every CPU.
- The redistributor is found for each CPU, and timer interrupts reach
every CPU.
- Once TF-A accepts CPU_SUSPEND, every CPU enters the CPU and cluster
power down states, and the system timer wakes them up as the
broadcast timer.
- Each core PMU counts only on its own CPUs, and its overflow interrupt
arrives on the right CPU through its PPI partition.
- The DSU PMU counts, and its overflow interrupt arrives on SPI 18.
- The pin configuration of the UART0 and keypad pins matches the DT.
- The volume down key reports presses and releases, with no bounce
through the 32 ms debounce.
- UART0 output works at 921600 baud, and its TX interrupt fires on the
expected line.
- About 7 GiB of RAM was written and verified with no errors, with the
carveouts added by the bootloader.
- The watchdog resets the board once it is no longer pinged, and the
ramoops console log survives that reset.
UART1 is disabled and was not tested. Only a minimal config was tested
on the device, not defconfig.
Tool use
--------
The commit messages, this cover letter and the test script were
drafted with Claude Code (Claude Opus 5.5). I reviewed them
and tested the result on the device.
Based on next-20261113.
---
Changes in v2:
- Describe MT6895 as Dimensity 8000/8100 in the commit messages.
- watchdog binding: drop the mediatek,mt6589-wdt fallback, as the
MT6895 reset layout is not known, and drop Conor's Acked-by.
- New patch: add the MT6895 compatible to the mtk_wdt driver.
- New patches: system timer and keypad bindings, pinmux header.
- SoC DT: add the cache nodes, CPU capacities and idle states, the CPU
PMUs with PPI partitions, the DSU PMU, the system timer with a 13 MHz
clock, the pin controller and the keypad.
- SoC DT: use IRQ_TYPE_LEVEL_HIGH for the architected timer PPIs.
- SoC DT: order the nodes as required by dt-check-style.
- Board DT: add the UART0 pins and the volume down key.
- The series now depends on the MT6895 pinctrl series.
- Link to v1: https://patch.msgid.link/20261105210622.523747-1-asalde.le1@gmail.com
---
Alexander Letuchiy (9):
dt-bindings: arm: mediatek: Add MT6895 and Xiaomi Poco X4 GT
dt-bindings: serial: mediatek,uart: Add compatible for MT6895
dt-bindings: watchdog: mediatek,mtk-wdt: Add compatible for MT6895
watchdog: mediatek: Add support for MT6895
dt-bindings: timer: mediatek,timer: Add compatible for MT6895
dt-bindings: input: mediatek,mt6779-keypad: Add compatible for MT6895
arm64: dts: mediatek: Add MT6895 pinmux macro header file
arm64: dts: mediatek: Add MT6895 SoC
arm64: dts: mediatek: Add Xiaomi Poco X4 GT
.../devicetree/bindings/arm/mediatek.yaml | 4 +
.../bindings/input/mediatek,mt6779-keypad.yaml | 1 +
.../devicetree/bindings/serial/mediatek,uart.yaml | 1 +
.../devicetree/bindings/timer/mediatek,timer.yaml | 1 +
.../bindings/watchdog/mediatek,mtk-wdt.yaml | 1 +
arch/arm64/boot/dts/mediatek/Makefile | 1 +
arch/arm64/boot/dts/mediatek/mt6895-pinfunc.h | 1524 ++++++++++++++++++++
.../arm64/boot/dts/mediatek/mt6895-xiaomi-xaga.dts | 87 ++
arch/arm64/boot/dts/mediatek/mt6895.dtsi | 461 ++++++
drivers/watchdog/mtk_wdt.c | 1 +
10 files changed, 2082 insertions(+)
---
base-commit: 84abb955b1015477aa11a96e2f3ac1b938b77f48
change-id: 20261110-initial-mt6895-16ef1b1aef55
prerequisite-message-id: <20261108-pinctrl-mt6895-v1-0-f704c443b31a@gmail.com>
prerequisite-patch-id: 68c077b6ff907e42d02115ed9b95bb5349eae7ef
prerequisite-patch-id: 09c2602edc0cdb6ca34ecbae12f608ab530da477
Best regards,
--
Alexander Letuchiy <asalde.le1@gmail.com>
next reply other threads:[~2026-11-13 19:07 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 19:04 Alexander Letuchiy [this message]
2026-11-13 19:04 ` [PATCH v2 1/9] dt-bindings: arm: mediatek: Add MT6895 and Xiaomi Poco X4 GT Alexander Letuchiy
2026-11-13 19:04 ` [PATCH v2 2/9] dt-bindings: serial: mediatek,uart: Add compatible for MT6895 Alexander Letuchiy
2026-11-13 19:04 ` [PATCH v2 3/9] dt-bindings: watchdog: mediatek,mtk-wdt: " Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 4/9] watchdog: mediatek: Add support " Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 5/9] dt-bindings: timer: mediatek,timer: Add compatible " Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 6/9] dt-bindings: input: mediatek,mt6779-keypad: " Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 7/9] arm64: dts: mediatek: Add MT6895 pinmux macro header file Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 8/9] arm64: dts: mediatek: Add MT6895 SoC Alexander Letuchiy
2026-11-13 19:05 ` [PATCH v2 9/9] arm64: dts: mediatek: Add Xiaomi Poco X4 GT Alexander Letuchiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261113-initial-mt6895-v2-0-4ab0aa9fa391@gmail.com \
--to=asalde.le1@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=conor+dt@kernel.org \
--cc=conor.dooley@microchip.com \
--cc=daniel.lezcano@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=gpiccoli@igalia.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=kees@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzysztof.kozlowski@oss.qualcomm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=matthias.bgg@gmail.com \
--cc=mkorpershoek@kernel.org \
--cc=phone-devel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sean.wang@mediatek.com \
--cc=tglx@kernel.org \
--cc=tony.luck@intel.com \
--cc=wim@linux-watchdog.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox