Welcome to my blog. Have a look at the most recent posts below, or browse the tag cloud on the right. An archive of all posts is also available.
Context
- See hibernate-pocket, hibernate-pocket-2, hibernate-pocket-3, hibernate-pocket-4,hibernate-pocket-5, hibernate-pocket-6, hibernate-pocket-7, hibernate-pocket-8
Sidequest: Install u-boot-menu
Don't be like me and reboot without configuring u-boot-menu
. Although the defaults make sense for most people, in my case I lost access to the serial console (because that custom config needed to be re-done), and the default delay was not enough to choose a backup kernel. In consfigurator
notation:
(on-change
(file:has-content "/etc/u-boot-menu/conf.d/reform.conf"
'("U_BOOT_TIMEOUT=50"
"U_BOOT_PARAMETERS=\"ro no_console_suspend cryptomgr.notests \\${bootargs} console=ttyS2,1500000 keep_bootcon console=tty1\""))
(cmd:single "u-boot-update"))
The panel, alive.
Thanks to a hint from
joschc
(and a bit of luck) I realized the
issue I filed was nonsense. Yay?The panel driver is not added by the rk3588 patches (since the build process applies all the patches, this is not a problem for building from
reform-debian-packages
).After applying the two patches in
reform-debian-packages/linux/patches6.15/imx8mp-mnt-pocket-reform/pocket-panel
, the patched 6.16 kernel boots, and seems to work, including the panel.The updated source is on branch
reform-patches
athttps://salsa.debian.org/bremner/collabora-rockchip-3588
Unsurprisingly hibernate is not working out of the box with 6.16. My next mission is to apply the recommended pci-reset patches on top of 6.16.
Context
- See hibernate-pocket, hibernate-pocket-2, hibernate-pocket-3, hibernate-pocket-4, hibernate-pocket-5, hibernate-pocket-6, hibernate-pocket-7
Sidequest: Fix patches continued
1001-pci_dw_rockchip_enable_l0s_capability.patch doesn't apply cleanly either
b4 am 1744594051-209255-1-git-send-email-shawn.lin@rock-chips.com
This one has a usable blob index
21dc99c
git log --raw --all --find-object=21dc99c
finds the patch already applied as198e69cc4150aba1e7af740a2111ace6a267779e
1002-v2-media_verisilicon_fix_av1_decoder_clock_frequency.patch
applies cleanly
Build kernel with backported patches
Back following the upstream bisect instructions from reform-debian-packages/README.md
$ apt-get install git gpg gpgv build-essential bc rsync kmod cpio bison flex libelf-dev libssl-dev debhelper libdw-dev
$ cp /boot/config-6.15.4-mnt-reform-arm64 .config
$ make olddefconfig
$ yes '' | make localmodconfig
$ make KBUILD_IMAGE=arch/arm64/boot/Image bindeb-pkg -j$(nproc)
One thing not documented there is that you need the pocket-reform dtb as well.
Copy that file from reform-debian-packages
, and update the relevant Makefile.
diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
index 26533be1dd86..83ef850cd113 100644
--- a/arch/arm64/boot/dts/rockchip/Makefile
+++ b/arch/arm64/boot/dts/rockchip/Makefile
@@ -163,6 +163,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-h96-max-v58.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-pre-ict-tester.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-mnt-reform2.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-mnt-pocket-reform.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-nanopc-t6.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-nanopc-t6-lts.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-ok3588-c.dtb
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dts b/arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dts
new file mode 100644
index 000000000000..81533cedc200
- With these changes I can boot in to 6.16~rc6, and log in the serial console, but the LCD display seems blank (but with some backlight power). That is probably related to the following warnings from device tree compilation
DTC arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dtb
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dts:1020.3-13: Warning (reg_format): /dsi@fde30000/panel:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dtb: Warning (pci_device_reg): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dtb: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dtb: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dtb: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dts:1018.8-1033.4: Warning (avoid_default_addr_size): /dsi@fde30000/panel: Relying on default #address-cells value
arch/arm64/boot/dts/rockchip/rk3588-mnt-pocket-reform.dts:1018.8-1033.4: Warning (avoid_default_addr_size): /dsi@fde30000/panel: Relying on default #size-cells value
The current source is on
https://salsa.debian.org/bremner/collabora-rockchip-3588
The branch "reform-patches" is subject to rebase (and may make your computer explode).
For now I'm blocked on the panel, I suspect the dts file needs an update.
Context
- See hibernate-pocket, hibernate-pocket-2, hibernate-pocket-3, hibernate-pocket-4, hibernate-pocket-5, hibernate-pocket-6
Building upstream-ish kernel
- Roughly following the "bisecting upstream linux" section of
reform-debian-packages/README.md
$ git clone https://gitlab.collabora.com/hardware-enablement/rockchip-3588/linux.git collabora
$ cd collabora && git git switch -c rockchip-devel origin/rockchip-devel
The next step is to apply the the non-collabora patches from
reform-debian-packages/linux/patches6.15/rk3588-mnt-reform2
Unfortunately these are missing the proper metadata to work with git-am
Sidequest: Fix patches
1000-v3-pci_dw_rockchip_add_system_pm_support.patch doesn't apply, even with added metadata. Start again upstream.
Thanks to
joshc
for the suggestion of theb4
tool.b4 am 1744940759-23823-1-git-send-email-shawn.lin@rock-chips.com
This creates a
.mbx
file ready for git am (roughly equivalent to fetching the/raw
version from lore, with some extra checks).Brute force finding a base for the patch:
git rev-list --no-merges --since 2025-01-01 refs/heads/rockchip-devel | \
while read ref
do
echo trying $ref
git checkout $ref
git apply --check v3_20250418_shawn_lin_pci_dw_rockchip_add_system_pm_support.mbx && echo SUCCESS && break
done
- 122 steps later this yields 9dff55ebaef7 (bisect would be better if we knew a "good" commit).
$ git branch -D tmp ; git switch -c tmp 9dff55ebaef7
$ git am v3_20250418_shawn_lin_pci_dw_rockchip_add_system_pm_support.mbx
$ git rebase -i rockchip-devel
This fails with 3 conflicts. The first is easy, as the one non-comment
line just moves around. The other two involve a new function
rockchip_pcie_unmask_dll_indicator
used to reduce code duplication, and in all
3 cases I just took the version of the code from Shawn's patch.
EDIT This rebase turns out to miss (at least) changes in the names
of the PCI*
constants. By amusing(?) coincidence, as I was
discovering that, the patch was being rebased by someone more
competent at collabora, and is now in the rockchip-devel
branch.
Context
- See hibernate-pocket, hibernate-pocket-2, hibernate-pocket-3, hibernate-pocket-4, hibernate-pocket-5
Another kernel patch?
Confused about prerequisites, I wrote
A reply from Niklas Cassel suggested I look at
https://lore.kernel.org/linux-pci/1744940759-23823-1-git-send-email-shawn.lin@rock-chips.com/
EDIT It turns out that this patch is already shipped as part of the mnt research kernel. It will need rebasing for 6.16.x.
Applying the prerequisites
Niklas also point me to
https://lore.kernel.org/linux-pci/20250508-pcie-reset-slot-v4-0-7050093e2b50@linaro.org/
Since the new patch doesn't apply to linux master either, I guess I need to apply that series. But part of it is already applied, fun.
I'm not claiming this is the best way...
# index 31090770fffcc94e15 from the first patch in the series
$ git log --raw --all --find-object=31090770fffcc94e15
# The applied version of the first patch is `b06d125e6280603a34d9064cd9c12748ca2edb04`
$ git switch -c base b06d125e6280603a34d9064cd9c12748ca2edb04^
$ mbox-extract-patch < ~/Downloads/PATCH-v4-1-5-PCI-ERR-Remove-misleading-TODO-regarding-kernel-panic.mbox | git am
$ git rebase -i master # two applied patches skipped
$ git switch master && git merge base
mbox-extract-patch
is from package mailscripts.git am -3 ~/tmp/PATCH-v3-PCI-dw-rockchip-Add-support-for-slot-reset-on-link-down-event.txt
Currently can't get the "Add system PM support" patch to apply, will test the others first.
Except that a test build tells me I need to rebase all of my patches against 6.15.x, rather the the current 6.16~rcX
Context
A Kernel Patch
- The follow patch looks potentially relevant:
https://patchwork.kernel.org/project/linux-rockchip/patch/20250509-b4-pci_dwc_reset_support-v3-1-37e96b4692e7@wdc.com/
git clone https://github.com/torvalds/linux.git (Is there a better place? kernel.org is pretty opaque)
are the pre-reqs in mnt kernel? The patch header contains
base-commit: 08733088b566b58283f0f12fb73f5db6a9a9de30
change-id: 20250430-b4-pci_dwc_reset_support-d720dbafb7ea
prerequisite-change-id: 20250404-pcie-reset-slot-730bfa71a202:v4
prerequisite-patch-id: 2dad85eb26838d89569b12c19d70f392fa592667
prerequisite-patch-id: 6238a682bd8e9476e5911b7a59263c3fc618d63e
prerequisite-patch-id: 37cab00bc255a62b1e8396a48a3afba5e1751abd
prerequisite-patch-id: ff711f65cf9926374646b76cd38bdd823d576764
prerequisite-patch-id: 1654cca919d024b9a9190b28e90f722975c797e8
- First check and see what is upstream. I had to remember how to use
git-patch-id
and also how to split a long regex disjunction into multiple lines.
git log --patch --no-merges v6.13.. | \
git patch-id --stable | \
grep -F -e 2dad85eb26838d89569b12c19d70f392fa592667 \
-e 6238a682bd8e9476e5911b7a59263c3fc618d63e \
-e 37cab00bc255a62b1e8396a48a3afba5e1751abd \
-e ff711f65cf9926374646b76cd38bdd823d576764 \
-e 1654cca919d024b9a9190b28e90f722975c797e8
yields
37cab00bc255a62b1e8396a48a3afba5e1751abd d1c696dba120624256ab335ab8247f535b872309
2dad85eb26838d89569b12c19d70f392fa592667 b06d125e6280603a34d9064cd9c12748ca2edb04
The two commits that are actually found, are only in tag 'v6.16~rc1'
- The discussion on LKML mentions
pci/slot-reset
. Where does that branch live?
git remote add pci https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git
git fetch pci
git for-each-ref refs/remotes/pci --format "%(refname)" | \
while read branch
do
echo "checking $branch"
git log --patch --no-merges --since 2025-01-01 $branch | \
git patch-id --stable | \
grep -F -e 2dad85eb26838d89569b12c19d70f392fa592667 \
-e 6238a682bd8e9476e5911b7a59263c3fc618d63e \
-e 37cab00bc255a62b1e8396a48a3afba5e1751abd \
-e ff711f65cf9926374646b76cd38bdd823d576764 \
-e 1654cca919d024b9a9190b28e90f722975c797e8
done
This did not find any more commits, but I did learn how to use
git-for-each-ref
, so I guess not a total loss.
Context
Log from (failed) platform test
After some fun I got the serial console working and re-ran the platform test.
After a bit of reading the serial console, I realized that rmmod dwc3
was causing
more problems than it solved, in particularly reliable hard lockup on one of the CPUs.
My revised test script is
set -x
echo platform > /sys/power/pm_test
echo reboot > /sys/power/disk
sleep 2
rmmod mt76x2u
sleep 2
echo disk > /sys/power/state
sleep 2
modprobe mt76x2u
The current problem seems to be pcie
not resuming properly.
[ 65.306842] usbcore: deregistering interface driver mt76x2u
[ 65.343606] wlx000a5205eb2d: deauthenticating from 20:05:b7:00:2d:89 by local choice (Reason: 3=DEAUTH_LEAVING)
[ 67.995239] PM: hibernation: hibernation entry
[ 68.048103] Filesystems sync: 0.022 seconds
[ 68.049005] Freezing user space processes
[ 68.051075] Freezing user space processes completed (elapsed 0.001 seconds)
[ 68.051760] OOM killer disabled.
[ 68.052597] PM: hibernation: Basic memory bitmaps created
[ 68.053108] PM: hibernation: Preallocating image memory
[ 69.719040] PM: hibernation: Allocated 366708 pages for snapshot
[ 69.719650] PM: hibernation: Allocated 1466832 kbytes in 1.66 seconds (883.63 MB/s)
[ 69.720370] Freezing remaining freezable tasks
[ 69.723558] Freezing remaining freezable tasks completed (elapsed 0.002 seconds)
[ 69.728002] rk_gmac-dwmac fe1b0000.ethernet end0: Link is Down
[ 69.992324] rockchip-dw-pcie a40c00000.pcie: Failed to receive PME_TO_Ack
[ 69.993405] PM: hibernation: debug: Waiting for 5 seconds.
[ 76.059484] rockchip-dw-pcie a40c00000.pcie: Phy link never came up
[ 76.060043] rockchip-dw-pcie a40c00000.pcie: fail to resume
[ 76.060546] rockchip-dw-pcie a40c00000.pcie: PM: dpm_run_callback(): genpd_restore_noirq returns -110
[ 76.061363] rockchip-dw-pcie a40c00000.pcie: PM: failed to restore noirq: error -110
Context
Serial console hardware
- Manual is unclear about name of connector (J16 in schematics, J17 in manual).
- Also numbering of pins is not given afaict.
- Clone https://source.mnt.re/reform/pocket-reform.git
- Look at pocket-reform-motherboard.kicad_pcb
- From the PCB I can confirm J16 and pins numbered left (sysctl) to right.
- attach "dtech" prolific PL2303 based serial to usb cable per serial console section of PR manual
- lsusb shows
ID 067b:23a3 Prolific Technology, Inc. ATEN Serial Bridge
- install
tio
- add my user to group
dialout
newgrp dialout
- tio /dev/ttyUSB0 -b 1500000
- A closer look at the PCB in kicad makes me realize the pin labels in the manual are wrong. 4 = GND, 5 =
UART1_RX
, 6=UART1_TX
. With that change I have U-boot output on boot.
Serial console software
With some help from minute
on ircs://irc.libera.chat:6697/#mnt-reform
, I got
the kernel boot arguments right to have not just u-boot output but linux kernel output on the serial console. In consfigurator
notation
(on-change
(file:has-content "/etc/flash-kernel/ubootenv.d/00reform2_serial_console"
"setenv bootargs \"${bootargs} console=ttyS2,1500000 keep_bootcon\"")
(cmd:single "flash-kernel"))
The filename should sort before "00reform2_ubootenv" so that the existing "console=tty1" still ends up at the end.
Context
- See hibernate-pocket
Testing continued
- following a suggestion of
gordon1
, unload the mediatek module first. The following seems to work, either from the console or under sway
echo devices > /sys/power/pm_test
echo reboot > /sys/power/disk
rmmod mt76x2u
echo disk > /sys/power/state
modprobe mt76x2u
- It even works via ssh (on wired ethernet) if you are a bit more patient for it to come back.
- replacing "reboot" with "shutdown" doesn't seem to affect test mode.
- replacing "devices" with "platform" (or "processors") leads to unhappiness.
- under sway, the screen goes blank, and it does not resume
- same on console
Configuration
script: https://docs.kernel.org/power/basic-pm-debugging.html
kernel is 6.15.4-1~exp1+reform20250628T170930Z
State of things
normal reboot works
Either from the console, or from sway, the intial test of reboot mode hibernate fails. In both cases it looks very similar to halting.
- the screen is dark (but not completely black)
- the keyboard is still illuminated
- the system-controller still seems to work, althought I need to power off before I can power on again, and any "hibernation state" seems lost.
Running tests
- this is 1a from above
- freezer test passes
- devices test from console
- console comes back (including input)
- networking (both wired and wifi) seems wedged.
- console is full of messages from mt76x2u about vendor request 06 and 07 failing. This seems related to https://github.com/morrownr/7612u/issues/17
- at some point the console becomes non-responsive, except for the aforementioned messages from the wifi module.
- devices test under sway
- display comes back
- keyboard/mouse seem disconnected
- network down / disconnected?
Because of course the system that UNB paid literal millions of dollars for cannot actually tell me if students in my course have passed (with C or above) the single prerequisite course. I could handle either a small number of false positives, but apparently it also has an unknown number of false negatives (missed students) and no way to detect those without checking every student. Which makes this very expensive report useless.
In the unlikely event someone else finds this useful. Or just wants to make fun of my Python.
import csv
import sys
enrolled=set()
passed=set()
record={}
with open (sys.argv[1], 'r') as rosterfile:
rosterreader=csv.DictReader(rosterfile)
for row in rosterreader:
id=row['Student ID']
enrolled.add(id)
record[id]=row
with open ('report.csv', 'w') as outfile:
with open (sys.argv[2], 'r') as historyfile:
historyreader=csv.DictReader(historyfile)
writer = None
for row in historyreader:
if not writer:
fields=row.keys()
writer = csv.DictWriter(outfile,fieldnames=fields)
writer.writeheader()
id=row['StudentID']
grade=row['Final Grade']
if not grade in ['F', 'D', 'C-']:
passed.add(id)
if id in enrolled:
writer.writerow(row)
print("Students missing prerequisite:\n")
for id in enrolled.difference(passed):
row=record[id]
print(f"{row['Student ID']}\t{row['Student Name']}\t{row['Preferred Email']}")
This wiki is powered by ikiwiki.