Commit Graph

49 Commits

Author SHA1 Message Date
marfrit 7a86ebb587 Merge pull request 'fleet/ohm: switch bes2600 to cumulative-c5x interim + close besser#1 + GCC 15 SCS fix (closes #5 partial)' (#28) from claude-noether/kernel-agent:noether/migrate-pinetab2-pkg-and-patches into main
Reviewed-on: #28
2026-05-18 20:56:41 +00:00
claude-noether 731e98e079 fleet/ohm.yaml: fix arch/arm64 include path after merge rename
The merge commit renamed arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/
to arch/arm64/scs-arm-neon-build-fix/ (= main's canonical name) but the
include reference in ohm.yaml didn't get updated atomically.

Update the include path to match the renamed dir; ka-promote would have
exit-2'd on this manifest otherwise.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 20:52:59 +00:00
claude-noether bae99da612 Merge upstream/main into noether/migrate-pinetab2-pkg-and-patches
Resolves the conflict-window between the PR's "switch bes2600 to
cumulative-c5x interim" intent and main's incremental per-patch
evolution.

Resolution per discussion:
- fleet/ohm.yaml: keep PR's cumulative-c5x layout (replaces per-patch
  list) but rename arch/arm64 include to main's canonical
  'scs-arm-neon-build-fix/' (branch's renamed dir dropped).
- patches/driver/bes2600/queue-pending-record-lock-bh-danctnix/
  0001-*.patch: take main's (= identical content + the git-format-patch
  trailer that the branch's earlier add omitted).
- patches/driver/bes2600/scan-filter-5ghz-danctnix/: drop branch's
  older '0001-...-allow-single-channel.patch' variant; keep main's
  newer '0001-...-filter-at-driver-boundary.patch' to avoid 0001-*
  collisions in ka-promote's series-dir resolver.
- patches/arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/:
  dropped (= duplicate of main's scs-arm-neon-build-fix/).
- All other main additions (rkvdec vp9 patches, scan-filter-5ghz/,
  fleet/ampere.yaml updates) auto-merged cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 20:52:27 +00:00
marfrit 3d10a2c21a Merge pull request 'patches/driver/bes2600/queue-pending-record-lock-bh-danctnix: mirror besser#18 fix' (#30) from claude-noether/kernel-agent:noether/bes2600-pending-record-lock-bh into main
Reviewed-on: #30
2026-05-18 19:18:51 +00:00
claude-noether 3ee0ef7d86 patches/arch/arm64/xor-neon-...: correct @@ hunk counts (overcorrected in a840f76)
a840f76 changed @@ from -9,6 +9,10 to -9,7 +9,12 but overshot by 1.
Actual hunk is 6 context + 5 add = -9,6 +9,11. Wrong counts were
silently masked in pkgrel=4 build #4 by the trailer-stripped EOF
letting patch fuzz recover. pkgrel=5 with besser#18 after SCS
exposes it as 'malformed patch at line N: 2.54.0'.

Cumulative b2sum: ceec602afa8574c74354... -> 50397711a6a3ba522283...
Size unchanged 162 716.
2026-05-18 19:17:22 +02:00
claude-noether 878e86f103 patches/arch/arm64/xor-neon-...: restore trailer (SCS is no longer last)
When the SCS patch was the LAST patch in ohm's cumulative, the
trailing '-- \n2.54.0\n' git-format-patch sentinel was an orphan that
patch(1) read as a malformed header — fixed in 84734ba by stripping
the trailer.

Now besser#18 (queue-pending-record-lock-bh-danctnix) is added at the
end of ohm.yaml's includes. SCS is no longer last. Without its
trailer to mark end-of-patch, patch(1) reads straight into besser#18's
'From d95453c... Mon Sep 17 00:00:00 2001' line and errors as
'malformed patch at line N: From ...'.

Restoring the trailer makes the separator unambiguous again.

Cumulative b2sum: 0eb091ddaba4a8f1c3c2a78... -> ceec602afa8574c74354...
Size: 162 704 -> 162 716 (+12 = the trailer bytes).

This rule — 'only the LAST patch must lack a trailer; all others must
keep theirs' — is sensitive to ohm.yaml include ordering, which is
brittle. Filed as a kernel-agent followup: ka-promote should rewrite
trailers automatically (always add to non-last, always strip from
last) so source patches don't need to be ordering-aware.
2026-05-18 18:15:45 +02:00
claude-noether 4d98a8169d fleet/ohm + patches/driver/bes2600/queue-pending-record-lock-bh-danctnix: bundle besser#18 fix into the migration
Pulls the besser#18 lockdep fix (originally on
noether/bes2600-pending-record-lock-bh / PR #30) into this PR so the
ohm migration ships a single self-consistent pkgrel that contains all
three goal components: kernel-agent flow + Patch I + besser#18 fix
(plus the GCC 15 SCS Makefile workaround, no-op while SCS=n).

ohm.yaml includes now resolve to 4 patches:
  1. driver/bes2600/cumulative-c5x-danctnix/             (148 149 B)
  2. driver/bes2600/scan-filter-5ghz-danctnix/           (  7 735 B)
  3. arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/ (1 562 B)
  4. driver/bes2600/queue-pending-record-lock-bh-danctnix/  (5 258 B)
  ----
  cumulative.patch                                       (162 704 B)
  b2sum 0eb091ddaba4a8f1c3c2a78eb8c621cdc6e6dfed6c43f7dac03e508a05b...

Trailer-strip applied to the besser#18 patch source for the same
reason as the SCS patch — it's now the last in the concatenated
cumulative, and patch(1) errors on the orphan '-- \n2.54.0\n' EOF
sentinel. Same gotcha documented in 84734ba.

PR #30 (the standalone besser#18 mirror PR) becomes superfluous
once this lands; close it as 'bundled into #28'.
2026-05-18 18:01:41 +02:00
claude-noether 84734ba527 patches/arch/arm64/xor-neon-...: strip trailing git-format-patch sentinel
The '-- \n2.54.0\n\n' trailer added in 989b884 was wrong. The
underlying problem was the malformed @@ hunk counts (off by 1 in
both old and new), fixed in a840f76. With correct @@ counts, patch(1)
processes the hunk fully and then sees the orphan trailer at EOF —
which it tries to parse as the start of a new patch header
('malformed patch at line N: 2.54.0').

The original (no-trailer) shape works correctly in the concatenated
cumulative as long as the @@ counts are right. Removing the trailer
brings the file back to the original 1562-byte size and the
cumulative b2sum to 334c37b5d37067982bd9... (size unchanged 157 458 ->
157 446 since the 12 byte trailer is gone).

Lesson for ka-promote: when concatenating patches as a stream for
patch(1), the LAST patch must not carry a trailing '-- \n<version>\n'
sentinel — the previous patches' sentinels are fine because they are
followed by 'From <sha>' headers that patch(1) recognises as the next
patch boundary. Documented in series-dir README as a gotcha.
2026-05-18 17:00:11 +02:00
claude-noether c9e9ad973c patches/driver/bes2600/queue-pending-record-lock-bh-danctnix: mirror besser#18 fix from bes2600-dkms
Single-patch series-dir, mirror of the Markus-authored commit d95453c
on marfrit/bes2600-dkms branch bes2600/queue-pending-record-lock-bh-fix
(PR #11). Paths rewritten from DKMS-style (bes2600/foo.c) to in-tree
staging (drivers/staging/bes2600/foo.c) via sed -- this is the
in-tree variant.

Fix: convert plain spin_lock(&pending_record_lock) to spin_lock_bh()
at the 5 sites where it's taken in non-BH-disabled contexts
(queue.c:832/839/844, tx_loop.c:112/114). queue.c:289/295 stays as
plain spin_lock because BH is already disabled by the outer
queue->lock_bh acquired at queue.c:285.

Eliminates the SOFTIRQ-safe -> SOFTIRQ-unsafe lockdep warning
reported in besser#18 (PROVE_LOCKING-only -- non-fatal on production
builds where lockdep is off, but real AB-BA window between
bes2600_join_work workqueue context and bes2600_tx softirq context).

This commit does NOT add the include to fleet/ohm.yaml. The patch
will be wired into ohm's manifest in a follow-up commit (or this
branch's PR can extend with the ohm.yaml change once the migration
PR #28 lands and the bes2600-dkms PR #11 is reviewed).

Closes: besser#18
Refs: marfrit/bes2600-dkms #11 (source-of-truth PR)
2026-05-18 16:59:28 +02:00
claude-noether a840f76907 patches/arch/arm64/xor-neon-...: fix malformed @@ hunk counts
The hunk header @@ -9,6 +9,10 @@ understated both old (actual 7) and
new (actual 12) line counts by 1. patch(1) standalone tolerates this
via fuzz, but in the concatenated cumulative the wrong counts cause
patch to mis-judge the hunk boundary and read the trailing context
line ('lib-...uaccess_flushcache.o') as the start of a new patch
header — 'malformed patch at line 4526'.

Cumulative b2sum: bd42cd39106298879eeb... -> ad9e2cb533957f218058...
(size unchanged at 157 458; only the @@ counts in the SCS patch
differ)
2026-05-18 16:58:19 +02:00
claude-noether 989b8842fb patches/arch/arm64/xor-neon-...: append git-format-patch trailer
The SCS-build-fix patch was missing the standard '-- \n2.54.0\n'
trailer that git format-patch emits between patches. Without it,
BSD-flavour patch(1) in makepkg's prepare() reads the trailing context
line of the @@ hunk as the start of a new patch header and dies with
'malformed patch at line N'. Affects builds where ka-promote
concatenates this series with any others. Reproduced 2026-05-18 on
the first attempted ohm pkgrel=4 build.

Cumulative b2sum changes accordingly:
  a807297b25be... -> bd42cd39106298879eeb...
(size 157446 -> 157458; 12 bytes for the trailer)
2026-05-18 16:52:46 +02:00
claude-noether f203b70f4f fleet/ohm: switch bes2600 driver scope to cumulative-c5x-danctnix interim (closes #5 partial migration)
Audit during ohm pkgrel=4 migration found the per-series -danctnix
mirrors merged in #17 do NOT apply against the linux-pinetab2 baseline:
all 17 of them use DKMS-style root paths (bes2600/foo.c) rather than
in-tree staging paths (drivers/staging/bes2600/foo.c), and at least one
has a corrupted mixed-prefix header
(a/drivers/staging/bes2600/...  b/bes2600/...).

ka-promote ohm with those includes produced a 172 644-byte cumulative
touching 27 file paths, of which 11 are bogus. The hand-curated
0001-bes2600-besser-cumulative-series.patch from the working
danctnix-besser-pkgbuild flow on boltzmann (148 149 bytes, 48 in-tree
staging files) is what pkgrel=3 actually builds with.

Until the per-series mirrors are reconstructed (followup issue to be
opened separately), the bes2600 driver scope is satisfied here by
staging that hand-curated cumulative as a single-file series-dir
patches/driver/bes2600/cumulative-c5x-danctnix/. ohm.yaml drops the
broken per-series includes in favour of:

  - driver/bes2600/cumulative-c5x-danctnix/
  - driver/bes2600/scan-filter-5ghz-danctnix/      (closes besser#1)
  - arch/arm64/xor-neon-ffixed-x18-scs-build-fix-danctnix/

ka-promote ohm now produces a self-consistent 157 446-byte cumulative
(148 149 + 7 735 + 1 562 = exact byte arithmetic) with b2sum
a807297b25be... which is what the new
marfrit-packages/arch/linux-pinetab2-danctnix-besser PKGBUILD pkgrel=4
pins.

Also fixes fleet/ohm.yaml YAML parse error: bar5_burn_in had a scalar
value followed by a sub-list, which ka-promote (PyYAML) refused to
parse. The whole manifest had never parsed cleanly since #18 landed.

Refs: #5 (migrate PKGBUILD), #2 (mirror besser series — needs per-series
rewrite followup), besser#1 (Patch I).
2026-05-18 16:50:41 +02:00
marfrit a254b6f0bb Merge pull request 'bes2600/scan-filter-5ghz: refine to allow targeted single-channel scans' (#26) from noether/scan-filter-5ghz-refine-targeted-allowed into main
Reviewed-on: #26
2026-05-18 14:06:53 +00:00
test0r 43c8f0cba8 patches/driver/bes2600: scan-filter-5ghz refinement — allow targeted single-channel scans
Updates both flavors with the n_channels > 1 refinement (was > 0).
The original guard refused ALL 5 GHz scans which broke 5 GHz
association via NM band=a profiles (NM iterates freq_list per
channel, single-channel scans were also refused).

Tightened: only multi-channel 5 GHz scans (the per-band-sweep
that triggers the firmware storm) are refused; single-channel
5 GHz scans pass through so NM/wpa_supplicant can find and
associate to 5 GHz BSSes.

Verified on ohm with locally-built pkgrel=3 (srcversion
BEB625FA7443171EA8D55F7): associated to 5 GHz BSSID
c0:25:06:e6:5b:33 on 5240 MHz / ch.48, 150 Mbit/s MCS 7
40MHz short-GI; Pattern A still 0 since boot.

Patch file is now a concatenation of two commits from
marfrit/bes2600-dkms bes2600/scan-filter-5ghz branch:
  093a503 (original Patch I)
  8cd10f4 (this refinement)
patch -Np1 applies them sequentially -> net effect = single squash.

Refs: besser#1 (closed), PKGBUILD update at marfrit/besser
claude-noether-14 commit 122582e (pkgrel=3 deployed to ohm
on 2026-05-18 same session).
2026-05-18 15:57:20 +02:00
marfrit 42b0c5042a Merge pull request 'fleet/ohm: import Patch I (5GHz scan filter, closes besser#1) + arm64 SCS build-fix' (#25) from noether/import-scan-filter-5ghz-and-scs-fix into main
Reviewed-on: #25
2026-05-18 13:34:55 +00:00
test0r 4c80458d1f fleet/ohm: import Patch I (5GHz scan filter) + arm64 SCS build-fix
Patch I closes besser#1 — the wsm_generic_confirm 0x0007 dmesg storm.
One-line guard in bes2600_hw_scan() refuses the 5 GHz iteration of
mac80211's per-band hw_scan loop with -EOPNOTSUPP, so the firmware
never sees the scan request that would be rejected with status 2 →
-EINVAL cascade.  Phase 7 verified 2026-05-18 on ohm running pkgrel=2:
Pattern A 14.3/h → 0/h over 30-min window, no WARN/BUG, single-band
2.4 GHz scans still return BSSes cleanly.

Two flavors imported (scan-filter-5ghz and scan-filter-5ghz-danctnix)
matching the convention of other bes2600 series — the code path
doesn't touch timer APIs so the two are byte-identical for now;
flavor separation is kept to preserve consistency in ohm.yaml.

The arm64 scs-arm-neon-build-fix series is a build-environment
workaround: GCC 15.2.1 strictly validates that -fsanitize=shadow-
call-stack requires -ffixed-x18, and arm_neon.h's #pragma target/
push/pop blocks lose x18 fixing inside the wrapped section.  The
Makefile tweak re-adds -ffixed-x18 explicitly for xor-neon.o.  It's
a no-op when SCS is off (current pkgrel=2 ohm config) and unblocks
SCS=y once GCC upstream is fixed.

ohm.yaml gains a CONFIG_SHADOW_CALL_STACK=n config override with a
pointer to besser#20 (the re-enable tracking issue) so future
manifest-driven kconfig generation honors the workaround without
silently dropping it.

Source-of-truth commit for Patch I:
  marfrit/bes2600-dkms branch bes2600/scan-filter-5ghz sha 093a503
PKGBUILD-side (already deployed to ohm via pkgrel=2):
  marfrit/besser branch claude-noether-14 sha ae175f9

Refs: besser#1 (closed), besser#20, kernel-agent#5
2026-05-18 15:25:37 +02:00
marfrit 96af34d775 Merge PR #24: import Sarma VP9-VDPU381 series + enable in fleet/ampere.yaml 2026-05-18 13:15:19 +00:00
marfrit 95be39ef80 fleet/ampere: enable Sarma VP9-VDPU381 patches in baseline
Reference the 3 patches imported in the previous commit under the
scope-tagged patch list. Apply order is strict (0001 → 0002 → 0003).

Verified 2026-05-18 via the arch_vp9_test extlinux boot on ampere:
- VP9F enumerates on rkvdec /dev/video2
- kdirect decode bit-exact vs libavcodec SW reference at -ss 30
- libva decode (firefox/chromium-style consumer) also bit-exact
- vainfo lists VAProfileVP9Profile0 (iter38 multi-device probe auto-picks)
- All three paths agree on sha
  c8624d7c42db66525f53a02a515bc38d0a17ef39f692660cc7bebb1e2d2e1b48

Removes VP9 from the "explicitly not included" comment block — issue
#12 closes with this change.

Also: AV1 stays out-of-scope per issue #6 ask 3 (kernel side fine via
the existing av1-vpu-dec node; backend just needs the 4th-fd
generalization tracked in libva-v4l2-request-fourier#2).

The next linux-ampere-fourier package rebuild from this manifest
will pick up VP9 automatically; ampere's running
7.0.0-rc3-vp9-test+ kernel already has these patches via the
operator's manual build session today.
2026-05-18 13:15:09 +00:00
marfrit 9092d9aaaa patches/driver/media: import Sarma's VP9-VDPU381 series (out-of-tree, v8)
Three patches from D.V.A.B. Sarma adding VP9 decode support to the
VDPU381 variant of rkvdec (RK3588 generation). Combined ~1500 LOC,
5 new files in drivers/media/platform/rockchip/rkvdec/.

Provenance: github.com/dvab-sarma/android_kernel_rk_opi branch
add-rkvdec-vdpu381-vp9-v8. Collabora's blog cites the work but it
hasn't reached linux-media patchwork yet (Collabora: "v1 series
needs to be sent for review soon"). Casanova's underlying
VDPU381/VDPU383 H.264+HEVC base IS in mainline 7.0 release.

Tested by author on Orange Pi 5 Pro (RK3588) with AOSP 16 + FFMPEG,
Profile 0 + Profile 2.

Tested in our fleet 2026-05-18: cherry-picks cleanly on top of
ampere-minimal-devices, full kernel build (KERNELRELEASE
7.0.0-rc3-vp9-test+) succeeds clean with GCC 16.1.1. Image + DTB +
modules + initramfs installed under -vp9-test+ suffix on ampere
without touching the running -devices+ kernel; new extlinux label
arch_vp9_test added (default unchanged at arch_devices). End-to-end
VP9 decode verification pending operator reboot into the new label.

Patches NOT yet referenced from fleet/ampere.yaml — that bump is
the operator's call (manifest preamble currently scopes VP9 out per
issue #6). Once verified, ampere.yaml can add these three under the
scope-tagged patch list in apply order 0001→0002→0003.

Cross-reference: marfrit/kernel-agent#12.
2026-05-18 12:56:15 +00:00
marfrit 44c6c3fa4f Merge pull request '[ka:cli-build-out] ka-promote: implement resolver + cumulative + manifest.lock (closes #22)' (#23) from claude-noether/kernel-agent:noether/ka-promote into main
Reviewed-on: #23
2026-05-18 08:57:15 +00:00
claude-noether 3c6d3567f0 README: reflect ka-promote implementation + ka-import rename (Phase 8 of #22)
CLI verb table updates:
- ka-promote: new signature `<host>` (read fleet/<host>.yaml → cumulative.patch +
  manifest.lock). Marked [bin/ka-promote — implemented Phase 6, issue #22].
- ka-import: new verb name carrying the original ka-promote semantic
  (`<campaign> <patch-or-glob> --to <scope>`, promote patches into the
  scope-tagged tree). Unimplemented; today this is the regular git+PR workflow.
- ka-build / ka-install: signatures elaborated, marked as the next two verbs
  to implement (issues TBD).

Bootstrap reference build section:
- Header reframed: "before ka-* verbs existed" → ka-promote replaces step #1
  as of 2026-05-18.
- Baseline corrected: torvalds/linux not mmind/linux-rockchip (mmind doesn't
  ship plain v7.0 tag — caught in ka-promote Phase 3, fleet/fresnel.yaml fixed
  in the implementation commit).
- "Manual substitute" table gets a Status column. Row for ka-promote split
  into the old "import" semantic vs the new "manifest resolve" semantic, with
  the latter marked **automated 2026-05-18**.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 08:54:22 +00:00
claude-noether 91fe815c4c bin/ka-promote: implement resolver + cumulative + manifest.lock (Phase 6 of #22)
First of the three [ka:cli-build-out] verbs (umbrella #21). Reads
fleet/<host>.yaml, resolves includes[] (single-file + series-dir),
concatenates in apply order, emits build/<host>/<ref>/{cumulative.patch,
manifest.lock}. Phase-3 ground truth on fresnel parity: b2sum
4d9d93c655ea701b… matches bit-for-bit.

Five tests in tests/ka-promote/ (fresnel parity, series-dir resolver,
bad-include, missing-patch, dup-include) all pass.

Validator (--validate-against <linux-checkout>) hard-fails on: missing
.git, baseline.ref not in checkout, HEAD-tree != baseline.ref tree,
or uncommitted/untracked changes. Verified on boltzmann against the
torvalds v7.0 worktree (all 3 negative paths exit 3 with clear errors).

Side fix: fleet/fresnel.yaml baseline.tree mmind/linux-rockchip → torvalds/linux.
mmind doesn't ship a plain v7.0 tag; baseline was actually torvalds the
whole time. mmind kept as informational patch_authoring_context.

Phase-5 reviewer (sonnet outside-look, #22 comment 1135) followups
addressed: series-dir fixture count 7 (not 6), divergence = hard error,
raw-bytes manifest hash, duplicate-include pre-flight check, explicit
yaml.dump(sort_keys=True).

Language choice (vs ka-status's bash): pure python3 — YAML round-trip,
dict construction, and per-file hashing made bash+heredoc python quoting
hell with no readability gain.

Phase 7 (verify on ampere parity) + Phase 8 (close + README rewrite +
PR) to follow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 08:52:42 +00:00
marfrit 0e1075fbdd Merge pull request 'ampere: wire internal microphone (MIC1) routing' (#20) from claude-noether/kernel-agent:noether/genbook-internal-mic into main 2026-05-17 21:30:14 +00:00
claude-noether f8d56d8635 ampere: wire internal microphone (MIC1) routing
Add coolpi-cm5-genbook DTS patch that mirrors vendor coolpi-kernel
audio routing for the internal microphone:

  routing = "MIC1", "Main Mic",
            "MIC2", "Headset Mic";

Necessary-but-not-sufficient: the ES8316 RX aif_out widget power-up
chain is still broken on mainline (separate issue, not addressed
here); a future codec/audio-graph-card driver fix can complete the
capture path once the topology is correct.

Include in ampere fleet manifest.
2026-05-17 21:29:06 +00:00
marfrit fb4bfdc2ff Merge pull request 'fleet/ohm: scaffold manifest for linux-pinetab2-danctnix-besser (#5 partial)' (#18) from claude-noether/kernel-agent:migrate-pinetab2-pkgbuild into main 2026-05-16 16:43:41 +00:00
claude-noether 2d2b9ee8ba fleet/ohm: scaffold manifest for linux-pinetab2-danctnix-besser (#5 partial)
Adds fleet/ohm.yaml referencing the bes2600 series mirrored in #2 →
patches/driver/bes2600/. Establishes the manifest shape for ohm
(PineTab2 / RK3566 + BES2600).

Includes list defaults to the -danctnix sibling variants (ohm runs the
DanctNIX kernel base), 17 series total. The pure-mainline non-danctnix
variants are NOT included — they exist for vanilla consumers that ohm
doesn't currently have.

What's NOT in this commit (blockers for #5 full closure):

1. PKGBUILD migration to marfrit-packages/arch/linux-pinetab2-danctnix-besser/
   PENDING the kernel-agent template renderer (b2sum regen, pkgrel
   bump, cumulative-patch generation per build job).

2. Cumulative-patch ordering field (apply_order). Current order on
   boltzmann is A,B,C v3,F,G,D,E,C2,c5.x,c6.x,c7,H — NOT alphabetical.
   Need explicit apply_order: [...] in this manifest before
   ka-promote can replace the hand-managed cumulative.

3. Config-by-manifest. The .config still lives next to the existing
   boltzmann PKGBUILD. Migrate when kconfig-by-manifest lands.

4. Orphan retirement (~/src/besser/danctnix-besser-pkgbuild/ on
   boltzmann). Surface to fourier campaign for working-state
   migration BEFORE deletion. See besser #17 for the regression
   that the orphan caused.

All four blockers documented as TODO at the bottom of fleet/ohm.yaml.
Issue #5 stays OPEN pending these.

Generated-by: Claude Opus 4.7 <claude@reauktion.de>
2026-05-16 16:43:34 +00:00
marfrit 7f60a3a37c Merge pull request 'patches/driver/bes2600: mirror besser series — closes #2' (#17) from claude-noether/kernel-agent:migrate-besser into main 2026-05-16 16:42:50 +00:00
claude-noether d5893e65f0 patches/driver/bes2600: mirror besser series (closes #2)
Mirrors all 30 BES2600 patch series from marfrit/besser/patches/ into
the kernel-agent scope-tagged tree under patches/driver/bes2600/.
15 base series + 15 -danctnix siblings = 45 .patch files including
cover letters.

Per-series promotion eligibility tracked in the README (default
unset → ka-promote asks before including in a build). Markus to
update as series mature.

DKMS-to-in-tree transition path documented (drop bes2600-dkms
once series lands in mainline / DanctNIX base).

Cumulative-patch ordering caveat captured: existing order is NOT
alphabetical (A,B,C v3,F,G,D,E,C2,c5.x,c6.x,c7,H). ka-promote
needs an explicit apply_order field, not a series-name sort.
Surface when fleet/ohm.yaml lands in #5.

Acceptance criteria from #2:
  [x] All series present under driver/bes2600/
  [x] Promotion eligibility per series (table in README, defaults unset for Markus to fill)
  [ ] Manifest for ohm references driver:bes2600 scope (deferred to #5)
  [x] DKMS-to-in-tree transition path documented

Generated-by: Claude Opus 4.7 <claude@reauktion.de>
2026-05-16 16:42:42 +00:00
marfrit 2783d5ec60 Merge pull request 'patches: migrate remaining misc_patches/genbook (0006, 0009, 0010-split) — closes #1' (#16) from claude-noether/kernel-agent:migrate-misc-patches into main 2026-05-16 16:41:36 +00:00
claude-noether 91617fae14 patches: migrate remaining misc_patches/genbook into scope-tagged tree (closes #1)
Closes the migration started in #8. The 6 active ampere patches (pwm15,
pwm-fan, RK806 power-controller, speaker, USB-C PD, lid switch) landed
in #8 under soc/rockchip/rk3588/, module/coolpi-cm5/, and
board/coolpi-cm5-genbook/. This commit migrates the remaining 3:

* `0006 arm64 Kconfig: do not select HAVE_GCC_PLUGINS`
  → patches/arch/arm64/. NOT for upstream — local build workaround;
  README explains the proper fix is gcc-plugin-devel install.

* `0009 Bluetooth: btrtl: make RTL_SEC_PROJ read non-fatal`
  → patches/driver/bluetooth/btrtl/. Benefits ampere (RTL8852BE) and
  boltzmann (same M.2 family). Cross-host driver/ scope.

* `0010 gpio/drm/mfd/input/dts: fix suspend/resume and wakeup on RK3588`
  → SPLIT into 5 scope-tagged sub-patches as the issue required
  ("0010 split into ≥2 patches by scope"):
    - patches/driver/gpio/rockchip/0010a-gpio-rockchip-propagate-irq_set_wake-to-parent-GIC.patch
    - patches/driver/gpu/drm/bridge/analogix/0010b-drm-bridge-analogix-dp-disable-IRQ-before-clock-gating-in-suspend.patch
    - patches/driver/mfd/rk8xx/0010c-mfd-rk8xx-spi-add-PM-ops-and-shutdown-callback.patch
    - patches/driver/input/misc/0010d-input-rk805-pwrkey-register-wake-IRQ-via-dev_pm_set_wake_irq.patch
    - patches/board/coolpi-cm5-genbook/0010e-arm64-dts-rockchip-rk3588-coolpi-cm5-genbook-add-NPU-power-domain-and-touchpad-wakeup.patch

  The split is byte-identical to the original 0010 (verified on
  decompose-0010 branch in marfrit/linux-rk3588-marfrit — sha256 of
  the combined diff matches the monolithic 0010 commit).

  All 0010 sub-patches marked WIP in their README and explicitly NOT
  added to fleet/ampere.yaml includes — suspend/resume thread is still
  open and Markus hasn't decided the upstream-targeting shape.

READMEs added at each new directory documenting per-patch context.

Acceptance criteria from #1:
  [x] Each patch lives at narrowest correct scope
  [x] 0010 split into ≥2 patches by scope (5 sub-patches)
  [x] Per-host manifest for ampere references the right scopes + explicit includes (already #8)
  [ ] github.com/marfrit/misc_patches retained as historical mirror — Markus to decide
  [x] working-tree dirty state on boltzmann reconciled (decompose-0010 + ampere-minimal-devices branches captured)

Generated-by: Claude Opus 4.7 <claude@reauktion.de>
2026-05-16 16:41:24 +00:00
marfrit ea3b2fb813 Merge pull request 'fleet/ampere: pin baseline to torvalds v7.0-rc3 (working) instead of broken marfrit tip' (#10) from claude-noether/kernel-agent:baseline-fix into main 2026-05-16 06:07:50 +00:00
claude-noether 62a6f88abd fleet/ampere: pin baseline to torvalds v7.0-rc3 (working) instead of broken marfrit tip
2026-05-16 bisect found that linux-rk3588-marfrit @ f8f3ad9 (the
previous baseline.ref) black-screens ampere — eDP connector reports
connected/enabled/dpms On + SDDM starts + backlight on, but the panel
shows no pixels. Decomposing the suspend/resume patch 0010 into 5
atomic sub-commits and reverting all of them did NOT recover display,
ruling out 0010 as the offender.

The 6 patches already listed in fleet/ampere.yaml's includes apply
cleanly on top of v7.0-rc3 mainline and produce a kernel that boots
with working display + power-off. That's the verified-working baseline,
captured here.

Regression source is in one of the 12 remaining commits f8f3ad9 has on
top of v7.0-rc3. Top suspect: 55d1b3dcc05e "clk: rockchip: rk3588:
Drop CLK_SET_RATE_PARENT from DCLK_VOP2_SRC" (touches display
controller clock parent rate). Bisect campaign separately.

For consumers who want a ready-to-fetch ref instead of
patches-on-mainline, the verified-working tree is on
git.reauktion.de/marfrit/linux-rk3588-marfrit @ ampere-minimal-devices
(7c241f2e2835).

No change to the includes list — same 6 patches as #8, just retargeted
to a baseline they can actually be applied to.

Generated-by: Claude Opus 4.7 <claude@reauktion.de>
2026-05-16 06:07:39 +00:00
marfrit ad7c61a81b phase 2 ask #1: bootstrap ampere kernel-agent recipe (CoolPi GenBook RK3588) (#8) 2026-05-15 16:47:13 +00:00
claude-noether a6549605f0 phase 2 ask #1: bootstrap ampere kernel-agent recipe (CoolPi GenBook RK3588)
Brings the second customized fleet host into kernel-agent's
scope-tagged tree. Sibling PR coming in marfrit-packages with the
arch/linux-ampere-fourier/ PKGBUILD + flat patch + config + extlinux
hook (build-tree-ready form).

Issue #6 ask #1 only — VP9 enablement (ask #2) and AV1 dec integration
(ask #3) are explicitly deferred to a separate session per the user's
direction. The ampere.yaml manifest documents what's excluded and why.

## Patches promoted

Six patches from boltzmann:~/src/misc_patches/genbook/kernel/ get
scope-tagged into kernel-agent's tree:

  soc/rockchip/rk3588/
    0001-...Add-pwm15-pinctrl-entries.patch         (prereq for 0002)
  module/coolpi-cm5/
    0003-...Fix-power-off-by-enabling-RK806-as-system-power-controller.patch
  board/coolpi-cm5-genbook/
    0002-...Add-pwm-fan.patch
    0004-...Enable-speaker-output-via-audio-graph-card.patch
    0005-...Enable-USB-C-PD-charging-via-FUSB302.patch
    0008-...Add-lid-switch-and-USB3-PHY-lane-config.patch

Each new scope dir gets a README.md documenting what it carries and
why the scope-level granularity makes sense (pwm15 is SoC-wide,
RK806 power-off is SoM-level not board-level, the rest are
board-specific GenBook quirks).

Note on uncommitted-modifications flag in issue body: patches 0001-0004
have working-tree-only changes in misc_patches that fix malformed
'From: PATCH 000X/000Y' headers (placeholder text instead of an
RFC-2822 author identity). The working-tree versions with proper
'From: Markus Fritsche <mfritsche@localhost>' headers are what we ship
here — the unfixed-on-disk variants would fail patch -i header parsing
on stricter implementations and are user-side cleanup that hasn't been
committed back to misc_patches yet. Markus can commit the cleanup
to that personal repo separately; this PR's ingestion does not depend
on it.

Patches 0006 (HAVE_GCC_PLUGINS Kconfig), 0009 (Bluetooth btrtl),
0010 (multi-driver suspend/wakeup) from the misc_patches series are
intentionally NOT promoted here — they need different scope tags
(arch/arm64/, driver/bluetooth/, soc/rockchip/rk3588/ + driver/ split)
and will follow when their respective campaigns demand them. The
ampere.yaml manifest documents the explicit-defer for each.

## fleet/ampere.yaml manifest

Same shape as fleet/fresnel.yaml. Baseline pinned at marfrit/linux-rockchip
branch linux-rk3588-marfrit @ f8f3ad934433 (the working tree on
boltzmann; 18 commits ahead of v7.0-rc3, current 2026-05-15 tip).
Six scope-tagged patch includes per the apply-order in the package
(pwm15 pinctrl must precede the pwm-fan node consumer).

## ampere-specific bootloader path

Documented in manifest. ampere boots from /boot/firmware/ (vfat
partition on mmcblk0p1), not /boot/ (root partition) like fresnel.
The marfrit-packages PKGBUILD's extlinux-add hook needs to write to
/boot/firmware/extlinux/extlinux.conf, not /boot/extlinux/.

## ampere as 2nd aarch64 build host

Per the README update in PR #7, ampere is now a secondary aarch64
build host. The manifest's build_host: section pins ampere as
self-hosting primary for its own kernel, with boltzmann as secondary
and fermi as fallback. This is the first manifest that has its own
host listed as the primary build target — not ideologically pretty,
but pragmatic: native arch, same uarch, full RAM, no cross-compile
step, no need to wake another host.
2026-05-15 16:03:00 +00:00
marfrit e53db55959 Merge pull request 'phase 1: promote vb2_dma_resv RFC v2 + add ka-status + ampere as 2nd aarch64 host' (#7) from claude-noether/kernel-agent:noether/phase1-promote-vb2-dma-resv into main
Reviewed-on: #7
2026-05-15 15:36:56 +00:00
claude-noether 18da673ccc phase 1: promote vb2_dma_resv RFC v2 + add ka-status + ampere as 2nd aarch64 host
Three changes that together flip kernel-agent from spec'd to operational
in the manual-orchestrated form. Real ka-* CLI verbs come in later phases;
this commit gets a first iteration through the pipeline and proves the
flow at the artifact level.

1. Promote vb2_dma_resv RFC v2 series into the scope-tagged tree

Markus iterated v2 locally on boltzmann (kernel-agent-bootstrap dir,
reaching linux-fresnel-fourier pkgrel=14). v2 attaches the producer
fence at device_run in slept-OK context per Dufresne's v1 review on
linux-media. The three patches land under
patches/subsystem/media/videobuf2/dma-resv-release-fence/:

  - 0004 (helper) — opt-in vb2 dma_resv producer-fence helper
  - 0005 (driver opt-in) — hantro device_run attach
  - 0006 (driver opt-in) — rockchip-rga device_run attach

Numbered 4/5/6 because the fresnel build PKGBUILD applies them after
the three 0001/0002/0003 PBP DTS patches; this directory's numbering
follows that apply-order, not the upstream lore series numbering.

README at the scope dir documents fleet eligibility, decision history,
and the v1 → v2 design pivot.

2. Update fleet/fresnel.yaml to include the v2 series

Pre-v2 manifest had a comment block 'Explicitly NOT included … vb2
dma-resv-release-fence … defer until v2 lands'. v2 has landed. Move
those three lines from 'excluded' to 'includes', annotate the decision
inline.

3. README updates

- Build hosts table: add ampere (CoolPi GenBook, RK3588 32GB) as
  secondary aarch64 host. Same uarch as boltzmann, on-demand wake via
  His. Gives the fleet a second native build target for when boltzmann
  is busy (e.g. carrying a firefox-fourier 4h build).
- 'Out of scope this round' bootstrap section: mark vb2_dma_resv as
  resolved 2026-05-15, keep panfrost IOMMU_CACHE deferred.

4. First ka-* CLI verb implemented: bin/ka-status

bash, ~120 lines. Reads fleet/*.yaml manifests, queries Gitea for
open [ka:*] issues, probes each reachable host for the installed
kernel-package version. Read-only — no sudo, no host writes. Picks
GITEA_TOKEN from /opt/herding/etc/claude-identities/<host>.creds or
env override.

Proves the agent's Gitea-API + manifest-parsing skeleton works
end-to-end without committing to a full ka-promote/build/install
implementation. Smoke-tested locally:

  $ bin/ka-status
  kernel-agent status (repo: marfrit/kernel-agent)
  open [ka:*] issues total: 1
  ══ fresnel ══
    manifest: arch=arm64 soc=rockchip/rk3399 board=pinebook-pro
    package:  linux-fresnel-fourier
    installed: host-down            # (fresnel is currently powered off)
    open ka-issues: (none for this host)

No PKGBUILD update in this PR — that lives in marfrit-packages and
ships as a sibling PR (the actual linux-fresnel-fourier-7.0-14 publish).
2026-05-15 15:32:00 +00:00
claude-noether 49c5892a69 README: add bootstrap reference build (2026-05-09 fresnel); drop distcc from build hosts; close issue-3 followup 2026-05-09 19:03:56 +00:00
claude-noether 5e661a4d2f fleet/fresnel: drop distcc_pool — kernel-agent builds are native (feedback_kernel_agent_no_distcc.md) 2026-05-09 17:00:28 +00:00
claude-noether 427f3e28c5 fleet/fresnel: include all three pinebook-pro DTS patches (OC + hdmi_sound + spi1 cap) 2026-05-09 13:54:22 +00:00
claude-noether 04b36954e7 patches/board/pinebook-pro: cap spi1 to 10 MHz for NOR flash stability 2026-05-09 13:53:51 +00:00
claude-noether 92037aa214 patches/board/pinebook-pro: enable hdmi_sound 2026-05-09 13:53:50 +00:00
claude-noether 46bdfe6b2e patches/board/pinebook-pro: add OC OPP tables (cluster0 1.704 GHz, cluster1 2.184 GHz) 2026-05-09 13:53:49 +00:00
claude-noether 838e0b819b patches/board/pinebook-pro: drop placeholder, real OC patch lands 2026-05-09 13:53:48 +00:00
claude-noether 7816093cb2 patches/board/pinebook-pro: placeholder for OC OPP patch (canonical DTS pending fresnel/data) 2026-05-09 12:03:09 +00:00
claude-noether 5d3a55c8f0 patches: scaffold board/pinebook-pro/ 2026-05-09 12:03:08 +00:00
claude-noether afd7526606 fleet: add fresnel manifest (Pinebook Pro RK3399 OC) 2026-05-09 12:03:07 +00:00
claude-noether 458e43c78e fleet: bootstrap manifest directory 2026-05-09 12:03:07 +00:00
marfrit 5a16089d85 Initial design — agent spec, lifecycle, verbs, hard rules 2026-05-09 08:34:12 +00:00
marfrit 740ea8caf3 Initial commit 2026-05-09 08:32:10 +00:00