Pocket Reform System Controller Update: Looking for Testers

I can confirm my anker chargers work with the pocket reform now.

1 Like

the Apple A2452 140W USB-C charger I have has gone from not working, to working slowly. The PD negotiation seems to negotiate 20V then cut out and then re-negotiate. It only seems to work when the machine is not running (switched on). I’ll do some more testing when I get a chance, but the update does seem to have improved things. I’ll check the LPC serial debug logs and see what’s happening with the PD state machine.

I’m getting a 404 on the wget

The correct artifact url is probably this one:

https://source.mnt.re/reform/pocket-reform/-/jobs/4893/artifacts/raw/pocket-reform-sysctl-fw/build/sysctl.uf2

The one in the script references job 4892 which had its artifacts expired. Only the artifacts of the latest CI run are kept, unless you press the “keep” button. Which is ironic since the commit which resulted in a new CI run was one that explicitly updated the job id.

I updated my firmware using the result of job 4893.

Before the update, my system would only activate PD when powered off.

After the update, it is exactly the same. No change in behavior. When I plug my USB-C into a power supply, it will not start drawing 20V until I turn my laptop off (sudo poweroff, etc.).

If the system is already off it will activate power when I plug my laptop in. Otherwise it activates immediately after the SoC turns off from a poweroff command.

This happens with pinepower and with steam deck powersupply.

It is easy to observe with the pinepower, because pinepower tells me exactly what voltage/amperage it is providing on its screen. When I plug in the cable with the system on, it says 5V, 0A. Once I power the system off, it changes to 20V, and some amps that depends on battery charge. This matches the power draw metering as viewed with the system controller through the OLED screen.

It says powered when I turn the system back on with the cable left plugged in, and amps goes up, as you would expect from system drawing power.

also, when I updated, I had the problem too of filesystem being left in a bad state and boot failure. I was dropped into initramfs prompt.

The fix was simple for me: from the prompt, I ran fsck on the root partition. This let me restore the filesystem to a consistent state. Then I rebooted with the keyboard menu.

Just performed the update. I modified the script to wget job 4893 instead of 4892. The script completed successfully after that and I’m on 20240716.

As noted by @violet i got stuck at initramfs. I’ve had this happen on my big reform if it shutsdown improperly and is fixed with a second reboot. This also worked for the pocket!

Good news is my pine power that did not work before works now. Anker 40w GaN still works, and asus 100w GaN charger still work. Bad news is steamdeck OLED charger still does not work.

Edit: Anker battery pack still does not charge but shargeek battery pack does but I did not test this one pre update.

Edit pt2: As others have noted some chargers work if you plug in the charger while powered off, then boot. Both Steamdeck charger and Anker battery pack work in this scenario.

A long term solution for this issue would be to either update the firmware in the initramfs (either of the running system or via a custom sd-card/usb-stick) or by using systemd soft-reboot combined with systemd system-update.target. I have not yet made up my mind on which solution to work first…

I have also applied this update - went really smoothly and I had no problem with booting.

My Apple charger still doesn’t work (does nothing when booted and alternates between -0.7V and 0V when turned off) and my Anker charger will still only start charging when plugged in whilst the device is turned off.

Just for the record, I’m using these to charge my Pocket:

  • OK: Inateck PDS75-4UT01 5v/9v/12v/15v/20v, 3A.
  • OK: ShenZhen KunXing Technology FC57 5v3a/9v2.67a/12v2a (gpd pocket 2 charger)
  • BAD: Powerbank Walk Secretary Plus SBS100C 5v2.4a/9v1.5a/12v1a (reform charges at 0.01 or 0.02a rate)

I have tried this update sometime last week. The update failed (the Pocket powered of during the flashing process although the battery was fully changed) and did not reboot ever since. Today I found some time to go through the process of flashing the controller from an second computer (as described in the manual, page 69ff). I could not find a uf2 binary of the build job mentioned in the update script, so I picked the latest one: job 5004 artefacts. I did a picotool save and picotool verify, both where successful. However, the Pocket still does not want to boot. Here’s a list of symptoms I am facing:

  • Powering the device on does not do anything, also the keyboard LEDs do not turn on.
  • The only thing that happens (also when powering off) is that the OLED shows a T on the top left after a second or so.
  • When selecting the Battery Status via keyboard controller, the display stays on the main menu, not showing the status.

Any hints…?

Edit 1: I have also tested to boot from a freshly dd-ed SD card. This does not work either. It appears that no power is reaching the sysctl/mainboard. Is there a way to supply the mainboard with power directy, skipping the battery section?

1 Like

The script doesn’t seem to be able to pull down the artifact / binary for me.

As of right now, and subject to change you need to change the artifact number in the script to 5059 and comment out the hash check in the script. This is how I got it working, thanks to @josch help!

Seems to be helping with my charging so I am a happy camper.

I applied these changes to install the job 5059 firmware:

diff --git a/scripts/update-sysctl-firmware.sh b/scripts/update-sysctl-firmware.sh
index 949e8eb..18e5b83 100755
--- a/scripts/update-sysctl-firmware.sh
+++ b/scripts/update-sysctl-firmware.sh
@@ -2,7 +2,7 @@
 
 set -e
 
-FWURL=https://source.mnt.re/reform/pocket-reform/-/jobs/4892/artifacts/raw/pocket-reform-sysctl-fw/build/sysctl.uf2
+FWURL=https://source.mnt.re/reform/pocket-reform/-/jobs/5059/artifacts/raw/pocket-reform-sysctl-fw/build/sysctl.uf2
 FWPATH=/tmp/sysctl.uf2
 # change to 2e8a:0003 if rp2040 is in "Raspberry Pi RP2 Boot" mode
 USBDEV=2e8a:000a
@@ -32,7 +32,7 @@ wget -O $FWPATH $FWURL
 
 # verify integrity
 HASH=$(md5sum $FWPATH | cut -d ' ' -f 1)
-if [[ "$HASH" != "e11a1be35444f7e72cc58e32858e8f86" ]]
+if [[ "$HASH" != "99fe2b80e041513e3d1d355d7cdedf6d" ]]
 then echo "Downloaded $FWPATH failed integrity check, exiting."
      exit 2
 fi

It works fine! I have not noticed increased compatibility with usb-c chargers but I wasn’t noticing problems before.

1 Like

oh, but this system controller firmware revision (98310017) does allow me to operate the device with usb-c power only, the charger board unplugged, and pins 2 and 3 jumped in the charger connector as described here, which the stock firmware had issues with. Neat

2 Likes