Important note about the new MNT Pocket Reform kernel and firmware updates 20260819 (updated)

Update Instructions

Update 2026-08-19: These instructions are only valid and supported by me if you’re on the official Debian unstable image published by MNT Research, not the contributed stable/trixie image or other distributions. Please ask the maintainers of these alternative distros for appropriate upgrade instructions.

These instructions are up-to-date on 2026-08-19. You don’t need to read the rest of this thread, which contains individual troubleshooting.


TLDR

  • The new firmware (20260808+) requires a new kernel driver (mnt-sc) that is now included in the kernel package. The kernel package and reform-tools 1.88 are available in the MNT apt repository. Please update the kernel first, and then the firmware without rebooting, using these commands in a terminal:
sudo apt update
sudo apt install reform-tools linux-image-mnt-reform-arm64
  • Again, don’t reboot after this step. Upgrade the firmware now.

  • The firmware updates, version 20260819 are available on LVFS, that means can update the firmware using GNOME Firmware which can be found in Applications or started from a terminal using the gnome-firmware command.

  • Alternatively, you can use fwupdmgr on the console.

  • Please update both your Keyboard and your System Controller firmware (this should happen automatically when using fwupdmgr).

To update the firmware on console/in a terminal:

sudo fwupdmgr refresh
sudo fwupdmgr update
  • Before rebooting, make sure:
    • You updated the kernel package (linux-image-mnt-reform-arm64)
    • You updated the reform-tools package
    • You updated the system controller and keyboard firmware to 20260819 (you can verify this by pressing

You can stop reading here, except if something goes wrong, then check the next section.


What if something goes wrong?

  • If fwupdmgr doesn’t want to update the firmware because of “not enough power” or similar, do the following (thanks @xordspar0):

    1. sudo micro /etc/fwupd/fwupd.conf
    2. Add a line: IgnorePower=true
    3. save the file
    4. sudo systemctl restart fwupd
    5. sudo fwupdmgr update
  • If you upgraded the kernel, but not the firmware, or the other way around, and rebooted, and now the system hangs during boot because of i.e. journald, don’t panic. Just wait around 10-15 minutes. It will give up after around 3 countdowns with random, long timeouts, and the boot will continue.

  • If the screen looks like hot garbage, try power cycling or try to connect an HDMI monitor.

  • Recovery method if you updated the firmware, but not the kernel package:

    • Flash a MicroSD card with a system image from https://mnt.re/system-image
      • If you don’t know how to use bmaptool (ideal) or gunzip and dd, or your other computer is a Mac or Windows PC, you can also use a GUI like Balena etcher.
      • Make sure you download the actual image file and not the HTML page linking to the image file (GitLab UI is a bit misleading).
    • Insert this MicroSD card in your Pocket Reform and turn it on. Complete the setup wizard with dummy usernames etc.
    • Start a terminal and use sudo reform-rescue-shell which will mount your old system and give you a root shell in it.
    • Do sudo apt update and sudo apt install linux-image-mnt-reform-arm64 reform-tools in there.
    • Exit the shell, power down cleanly. Restart without the MicroSD card.
  • Recovery method if you updated the kernel, but not the firmware:

    • Prepare a MicroSD card in the same way as above and complete the setup wizard.
    • Open a terminal.
    • Tell fwdupdmgr to ignore power/battery state:
      1. sudo micro /etc/fwupd/fwupd.conf
      2. Add a line: IgnorePower=true
      3. save the file
      4. sudo systemctl restart fwupd
    • Do sudo fwupdmgr refresh, then sudo fwupdmgr update
    • Power down, remove the MicroSD card, and you should be good.

Main release notes

Keyboard

  • Fixes keyboard backlight not activating immediately after powerup (mostly affects Keyboard 2.0).
  • Supports new System Controller (SC) API V4 commands.
  • Adds “Console” mode in OLED menu to interact with SC directly.
  • Adds support for Pocket Keyboard V1.5/V2.0.

System Controller

  • Adds extensive support for Pocket Mainboard 2.0 features, and detects Mainboard version.
  • Introduces System Controller API V4, unified across interrupt-serviced SPI, USB-ACM and keyboard UART.
  • Extends USB-C PD support to handle more devices like docks, adapters and active cables, and DisplayPort Alt-Mode on MB 2.0.
  • Exposes virtual GPIOs for improved handling of Display V1 and Display V2 resets and backlight control.
  • Improves brightness curve for Display V2 with more detail in lower brightness levels, and prevents flicker on some displays.
  • As of 20260812, correctly turns off the display backlight when locking the screen (in Gnome) and turns it back on when unlocking.

Kernel

  • Adds new mnt-sc driver to replace reform2-lpc (first only on Pocket Reform, later on other devices) that uses a new, more stable and extensible command language (API V4) and can be better integrated with other drivers in device tree using virtual/internal GPIOs, for example to reset the display panel or toggling power rails for suspend optimization.
  • Rewrite of the mnt-pocket-reform-panel driver that removes many hacks and, together with the new SC firmware (required for this to work), fixes many issues like:
    • the “fade out” bug on Display V2
    • displays not being able to wake up from blanking in Gnome
    • “oscillation” bug on Display V1 after wake-up
    • fixes the occurence of and can recover from the “stripes and half display” bug on Display V2 (if you encounter it, disabling and reenabling the panel, or rebooting, should fix it). The next release will focus on eliminating this bug completely.
12 Likes

I just updated my Pocket reform firmware for sysctl and keyboard using:

sudo fwupdmgr refresh --force
sudo fwupdmgr update

I upgraded my kernel (and everything else) using:

sudo apt update
sudo apt full-upgrade

The first shutdown after this upgraded didn’t work and I had to hard-poweroff the machine. Makes sense because the old lpc module doesn’t know how to communicate with sysctl firmware 2.0.

After the first boot, things look okay. The reform-check output is clean except for the message:

W: /sys/bus/spi/drivers/reform2_lpc/spi1.0/firmware does not exist -- is the reform2_lpc module loaded?

The module is still loaded (but probably can be uninstalled) but reform-check should probably suppress this warning if the mnt-sc driver is found to be loaded instead.

Setting display brightness works.

Power off now works as well.

What does not work is to press and hold super+enter to switch on the Pocket Refom. Selecting 1 in the menu works though.

1 Like

i’m running Trixie right now and the kernel isn’t available yet, is there a timeline for when it’ll be backported? the firmware updates are available though.

gonna wait for a reply to test since i assume if i update FW without kernel i’d wind up soft bricking my Pocket Reform due to it not having the driver available?

Thank you @minute, the kernel, and firmware updates went well. i used the steps from @josch to update the system controller and then built the keyboard from source with my updated matrix file. Everything seems to work great.

I can confirm this change in operation…

1 Like

The current way that patches are arranged means that we cannot have a patch directory for both 7.1.3 as well as 7.1.6. There is only a shared directory for 7.1.x. Unfortunately, the patches for 7.1.6 (in unstable) do not apply to 7.1.3 (in stable-backports). Since these changes are very important because they are tied to the firmware I hacked around this for now and the kernel might be done building and in the reform.debian.net repos in maybe around 6 hours.

I talked with @minute in IRC recently about improving the way we prepare patches. I have some ideas that I want to work on in the holidays. I want to make sure that my solution does not have this drawback that we cannot have different patch stacks for patch-level versions.

2 Likes

While the vendor kernel discussion is important, can I ask you to move it to a different thread @sander @josch so this thread can be reserved for feedback/support of the new updates? Thanks!

3 Likes

Important note, also edited into the original post: I initially forgot the instruction to update reform-tools as well, see below. reform-tools 1.88 or newer is required for the new System Controller driver to be included in initramfs! So you also need to do:

sudo apt install reform-tools

And in case Gnome firmware or fwupdmgr don’t want to update your firmware because they think that your batteries are empty, you can force it:

fwupdmgr --no-safety-check update
1 Like

3 posts were split to a new topic: No battery status and brightness control with trixie-backports

First of all, thanks for maintaining and improving existing hardware.

I just updated my pocket reform according to this post and want to report that there may be an issue with the version 1 display. After rebooting, it won’t come on. dmesg says:

[    6.891536] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    6.891539] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set pixel format: -110 

Here with more context:

dmesg log
[    4.432196] SPI driver mnt_sc has no spi_device_id for mntre,system-controller
[    4.432943] mnt_sc spi1.0: MNT System Controller v4
[    4.435232] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] start...
[    4.435889] panel-mnt-pocket-reform fde30000.dsi.0: DSI eot/hfp/hbp/hsa disabled via device tree
[    4.436755] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 0)
[    4.441517] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 8 0)
[    4.445437] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] jdi_panel_add done.
[    4.446832] rockchip-drm display-subsystem: bound fdd90000.vop (ops vop2_component_ops [rockchipdrm])
[    4.448558] dwhdmiqp-rockchip fdea0000.hdmi: registered DesignWare HDMI QP I2C bus driver
[    4.449577] rockchip-drm display-subsystem: bound fdea0000.hdmi (ops dw_hdmi_qp_rockchip_ops [rockchipdrm])
[    4.450485] rockchip-drm display-subsystem: bound fde30000.dsi (ops dw_mipi_dsi2_rockchip_ops [rockchipdrm])
[    4.467646] [drm] Initialized rockchip 1.0.0 for display-subsystem on minor 0
[    4.468324] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 0
[    4.479544] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_prepare] prepared: 0
[    4.479551] panel-mnt-pocket-reform fde30000.dsi.0: [display] init in prepare...
[    4.479556] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 0)
[    4.495445] random: crng init done
[    4.673495] reform2_lpc: loading out-of-tree module taints kernel.
[    4.673510] reform2_lpc: module verification failed: signature and/or required key missing - tainting kernel
[    4.691515] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 1)
[    4.995620] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_init] enabled: 0 prepared: 0
[    4.995649] panel-mnt-pocket-reform fde30000.dsi.0: [mnt_panel_detect_version] read register 12a: 0x77
[    4.995652] panel-mnt-pocket-reform fde30000.dsi.0: [mnt_panel_detect_version] detected panel_version: 1
[    6.239718] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_enable] enabled: 0 prepared: 1
[    6.278927] Console: switching to colour frame buffer device 120x37
[    6.307131] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device
[    6.307153] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] done.
[    6.316330] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 1
[    6.332806] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_disable] enabled: 1
[    6.363614] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_unprepare]
[    6.365431] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 0)
[    6.391140] device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be recorded in the IMA log.
[    6.394830] device-mapper: uevent: version 1.0.3
[    6.396851] device-mapper: ioctl: 4.50.0-ioctl (2025-04-28) initialised: dm-devel@lists.linux.dev
[    6.397801] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_prepare] prepared: 0
[    6.401751] panel-mnt-pocket-reform fde30000.dsi.0: [display] init in prepare...
[    6.403792] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 0)
[    6.515589] mnt_sc spi1.0: [mntsc_gpio_set] (set-gpio 0 1)
[    6.851512] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_init] enabled: 0 prepared: 0
[    6.871530] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    6.891536] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    6.891539] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set pixel format: -110
[    6.911545] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    6.931548] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    7.155582] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    7.155591] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set exit sleep mode: -110
[    7.991507] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    7.991516] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set mcap: -110
[    8.211546] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    8.211548] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set display interface setting: -110
[    8.251554] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    8.271557] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    8.271567] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_enable] enabled: 0 prepared: 1
[    8.291572] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    8.291574] panel-mnt-pocket-reform fde30000.dsi.0: [display] failed to turn display on in enable: -110
[    8.311577] dw-mipi-dsi2 fde30000.dsi: command interface is busy
[    8.538779] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 1
dmesg | grep panel-mnt-pocket-reform
[    4.691251] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] start...
[    4.691920] panel-mnt-pocket-reform fde30000.dsi.0: DSI eot/hfp/hbp/hsa disabled via device tree
[    4.702749] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] jdi_panel_add done.
[    4.838572] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 0
[    4.855355] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_prepare] prepared: 0
[    4.855363] panel-mnt-pocket-reform fde30000.dsi.0: [display] init in prepare...
[    5.283686] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_init] enabled: 0 prepared: 0
[    5.283715] panel-mnt-pocket-reform fde30000.dsi.0: [mnt_panel_detect_version] read register 12a: 0x77
[    5.283718] panel-mnt-pocket-reform fde30000.dsi.0: [mnt_panel_detect_version] detected panel_version: 1
[    6.528062] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_enable] enabled: 0 prepared: 1
[    6.616460] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_probe] done.
[    6.745545] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 1
[    6.749094] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_disable] enabled: 1
[    6.775666] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_unprepare]
[    6.802917] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_prepare] prepared: 0
[    6.802930] panel-mnt-pocket-reform fde30000.dsi.0: [display] init in prepare...
[    7.235764] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_init] enabled: 0 prepared: 0
[    7.275790] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set pixel format: -110
[    7.539783] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set exit sleep mode: -110
[    8.375679] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set mcap: -110
[    8.595711] panel-mnt-pocket-reform fde30000.dsi.0: [display v1] failed to set display interface setting: -110
[    8.655729] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_enable] enabled: 0 prepared: 1
[    8.675736] panel-mnt-pocket-reform fde30000.dsi.0: [display] failed to turn display on in enable: -110
[   68.414629] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 1
[   98.716570] panel-mnt-pocket-reform fde30000.dsi.0: [jdi_panel_get_modes] panel_version: 1

As I’m new to this forum, I did not know if I should open a new thread or post here :slight_smile:

1 Like

Thanks, I’ve just reproduced this and am working on a fix which should be done very soon. I must have introduced that bug for the combo RK3588+DispV1 at the last minute, as I did extensive testing last night.

2 Likes

A fix is in the CI pipeline now, if everything goes well it should be in the apt repository in an hour or two. You can then again do:

sudo apt update
sudo apt install linux-image-mnt-reform-arm64

In case you have Display V1 and you’re stuck with a blank internal screen after my original update, you can boot with an HDMI monitor and should get a login screen or console prompt there. If you end up in a grey screen on HDMI, press Hyper+Ctrl+Alt+2 to switch to a Linux console where you can log in and enter the update commands. Or if you have barebox already set up, you can interrupt boot by pressing m and selecting an older kernel from the boot menu.

2 Likes

After updating to kernel 7.1.7 + reform-tools 1.88 + SC/Keyboard firmware 20260806 on my pocket reform A311D, restarting via Hyper+Enter freezes the OLED entirely. It stops responding.

My only fix was flipping the Standby switch off and then on. After that it works again and “Power On” from the menu boots fine.

This happened twice in a row.

Might be related to what @josch and @Savasten found, but mine’s slightly different.

Hi, I’ve fixed the issue that @josch and @Savasten encountered. Normally it shouldn’t “freeze” the OLED menu, it did leave residue of a non-working menu on the display though that seems like it froze.

I’ve just uploaded the new release 20260808 for both Pocket System Controller and Pocket Keyboard to LVFS Stable, so you should be able to update again via Gnome Firmware or fwupdmgr update.

2 Likes

Thank you again, I rebuilt the keyboard controller(custom matrix) and the hold to power on works again. I will pull the latest system controller when it is reflected in the mirrors.

Thank you again,
Keith

I encountered the same issue as @pixie. After updating SC/Keyboard firmware and kernel the internal display wouldn’t turn on.

With an external monitor attached I was able to switch to a console tty and update the kernel. I can report that the display is working fine now.

I updated the system controller and keyboard firmware again and I can also confirm the hyper+enter key combo is working now as well.

Thanks for the quick fixes

1 Like

Not sure if this is related to the recent updates but after installing today, my system no fails to boot. Its gets stuck at starting journald and just keeps timing out.

I’m fully locked out, also can’t SSH into the system. I don’t know what to do. For now my laptop is bricked.

(I have not upgraded the firmware yet)

Hi, I’m sorry to hear this. I wonder what is timing out there, would you mind posting a photo that shows the messages?

To recover, I would recommend:

1 Like

Yeah, you’re right. On further testing it appears frozen, but if I hit Hyper+Enter again I can then navigate the OLED menu.

1 Like