Commit Graph

13 Commits

Author SHA1 Message Date
vasilito 5e44191c90 quirks: implement R6 — xHCI controller flag expansion
Phase R6 (2026-06-07) extends the xHCI controller quirk layer with five
new XHCI_* bit positions from Linux 7.1's drivers/usb/host/xhci.h, three
new PCI table entries from xhci-pci.c, and an xhcid-side observability
hook for the unenforced flags. Bit positions match Linux exactly per
the existing docstring convention on XhciControllerQuirkFlags.

Five new xHCI flags (24 total, no collisions):
- XHCI_SSIC_PORT_UNUSED   (bit 22) — Intel Cherryview 0x22b5
- XHCI_MISSING_CAS        (bit 24) — Intel CV/SP/APL/DV
- XHCI_BROKEN_PORT_PED    (bit 25) — platform-only in Linux
- XHCI_HW_LPM_DISABLE     (bit 29) — platform-only in Linux
- XHCI_BROKEN_D3COLD_S2I  (bit 41) — AMD Renoir 0x1639

XHCI_EP_CTX_BROKEN_DCS (bit 42) was the fifth entry on the plan's list
but is a Linux reserved-but-unused bit: only the BIT_ULL(42) definition
exists, with no consumer code anywhere and no PCI/vendor association.
Adding it would have been a stub. XHCI_SSIC_PORT_UNUSED is added in its
place — it has both a PCI association and a consumer site.

PCI table entries (3 new, 89 total):
- Intel Cherryview 0x22b5 → SSIC_PORT_UNUSED + MISSING_CAS
- AMD Renoir 0x1639 → BROKEN_D3COLD_S2I

BROKEN_PORT_PED and HW_LPM_DISABLE have no PCI entries — Linux sets
these only from xhci-plat.c / xhci-mtk.c / xhci-histb.c (non-PCI host
adapters). They are defined for forward-compatibility with future
platform xHCI support.

xhcid consumer wiring (in local/sources/base submodule):
- log_unenforced_xhci_quirks() called from Xhci::init() emits a
  warn! line for each set-but-unenforced R6 flag, citing the Linux
  consumer site and the missing Red Bear code path. Observability,
  not fake enforcement.
- Real enforcement for consumer sites that require suspend, LPM,
  port-disable, or CAS code paths in xhcid is deferred to Phase R8
  (PM infrastructure) and follow-up work.

Tests: 8 new (75 → 83 total passing).
Clippy: 26 warnings, all pre-existing R0–R5 baseline. No new warnings.
TOML validator: 244 entries, 0 undefined (no TOML changes for R6 —
xHCI controller flags are compiled-in only).

Source of truth: Linux 7.1 drivers/usb/host/{xhci.h, xhci-pci.c,
xhci.c, xhci-hub.c, xhci-plat.c, xhci-mtk.c, xhci-histb.c}.
2026-06-07 09:50:50 +03:00
vasilito c492e9153b session-launch: set KWIN_DRM_DEVICES default for kde-wayland sessions
On Redox there is no udev-based DRM device enumeration. KWin's DRM
backend relies on m_udev->listGPUs() which returns nothing without udev.
Add a fallback: when no KWIN_DRM_DEVICES is set and the session is
kde-wayland, inject KWIN_DRM_DEVICES=/scheme/drm/card0 so KWin knows
which device to open. This fixes the 'No suitable DRM devices' error
that prevented KWin from starting on Redox.

Added test: build_environment_sets_kwin_drm_devices_default_for_kde_wayland
to verify the fallback is applied correctly.
2026-06-03 13:11:27 +03:00
vasilito 7686729069 drm: implement syncobj and fence for VIRGL/VirtIO driver
Extract protocol-agnostic FenceTimeline from Intel to shared
src/drivers/fence.rs — atomic-based fence tracking suitable
for Intel, VIRGL, and AMD drivers.

Extract protocol-agnostic SyncobjManager from Intel to shared
src/drivers/syncobj.rs — syncobj create/destroy/signal/reset/
wait/query and sync_file fd export/import.

Wire both into VirtioDriver:
- Add FenceTimeline + SyncobjManager fields
- Implement all 5 GpuDriver syncobj trait methods
  (create, destroy, wait, export_fd, import_fd)
- Track fence seqnos in virgl_submit_3d (allocate
  before submit, signal after completion)

Intel fence.rs and syncobj.rs converted to thin re-export
modules pointing at shared sources — no behavioral change
for Intel driver.

This gives Mesa VIRGL userspace the standard DRM syncobj
API for GPU/compositor synchronization.
2026-06-02 14:33:28 +03:00
vasilito a52632f69d fix: bits_pthread cbindgen needs stddef.h for size_t type
The generated bits/pthread.h uses size_t but had no includes.
Also added openat cache vars to m4 recipe for gnulib cross-compilation.
2026-06-01 17:00:53 +03:00
vasilito 24584eb3c6 fix: remove garbled lines in AMD hotplug IRQ handler
Lines 649-651 had VramManager and info!() calls that don't belong
in handle_irq(). These were likely from a bad merge. The variables
fb_phys and fb_size are local to new() and don't exist in handle_irq().
2026-05-31 23:12:56 +03:00
vasilito 3431bbfeb2 Fix duplicate atomic_t typedef conflicting with types.h 2026-05-31 05:50:29 +03:00
vasilito a5577c0602 intel: Gen12 register table + DBUF registers (Phase 2)
Add regs_gen12.rs implementing IntelRegs trait for Gen12 (TGL/ADL)
and Gen12_7 (MTL/ARL) display engines. Gen12 shares most display
register offsets with Gen9 but has different forcewake and DMC.

- Gen12Regs: same pipe/plane/DDI/cursor/vblank offsets as Gen9
  but with Gen12 forcewake (0xa188/0xdfc) and DMC (0x80000+)
- Gen12DisplayRegs: Gen12-specific display registers:
  TRANS_DDI_FUNC_CTL (0x60400) — separate transcoder control
  DBUF_CTL_S1/S2 (0x45008/0x4500C) — display buffer slices
  PLANE_CTL/SURF/STRIDE at standard plane offsets

Update mod.rs generation selector: Gen12/Gen12_7 → Gen12Regs.
Xe2 continues to use Xe2Regs, Gen9 uses Gen9Regs.

Linux reference: intel_display_regs.h, xe_gt_regs.h
2026-05-30 09:00:03 +03:00
vasilito 58f8e8c6a7 intel: multi-generation power wells — Gen9 + Xe2
Rewrite display_power.rs to support both Gen9 (Skylake) and Xe2
(Arrow Lake/Battlemage) power well initialization.

Gen9 path (unchanged): single POWER_WELL_CTL register at 0x45400
with bitmask for PW1/PW2/DDI_A-E/AUX_A-D domains.

Xe2 path (new): multiple power well controllers:
- HSW_PWR_WELL_CTL1 (0x45400) — PW1/PW2 per-index REQ/STATE
- ICL_PWR_WELL_CTL_AUX1 (0x45440) — 4 AUX channels
- ICL_PWR_WELL_CTL_DDI1 (0x45450) — 4 DDI ports
- DC_STATE_EN (0x45504) — DC power state control
Each well uses 2-bit per-index encoding (REQ=0x2, STATE=0x1).

DisplayPower::new() now takes &IntelDeviceInfo to select
generation-appropriate initialization path.

Linux reference: intel_display_power_well.c (xelpdp_aux_power_well_*)
2026-05-30 08:22:43 +03:00
vasilito df5b6d1c6f migrate: finalize source ownership — mini ISO builds and boots
- Restore all fork repos from properly pre-patched 0.1.0 release archives
  (kernel, relibc, base, bootloader, userutils — all now have full git history)
- Fix installer Cargo.toml: comment out broken ext4-blockdev path dependency
- Add initfs-storage.toml to base fork for base-initfs build
- Remove stale Phase 6 from BUILD-SYSTEM-HARDENING-PLAN.md
- Delete 282 archived .patch files (non-fork components, unused)
- Delete local/patches/ directory (empty, historical)
- Remove local/AGENTS.md stale references
- Fix pkgar signing keys: regenerate all 77 package signatures

Build verification (redbear-mini):
- kernel: BUILDS from local/sources/kernel
- relibc: BUILDS from local/sources/relibc
- base: BUILDS from local/sources/base
- bootloader: BUILDS from local/sources/bootloader
- userutils: BUILDS from local/sources/userutils
- installer: BUILDS from local/sources/installer
- redoxfs: BUILDS from local/sources/redoxfs
- 77 packages total in repo
- harddrive.img: 1.5GB, boots in QEMU (Stage 1 → Stage 2 confirmed)
- Final harddrive.img verified with SeaBIOS → iPXE → boot chain
2026-05-30 00:38:25 +03:00
vasilito 08a0588961 migrate: restore fork repos from properly patched release archives
Kernel, relibc, and base forks now use the full pre-patched source
from the frozen 0.1.0 release archives (including .git history).

Build verification:
- kernel: BUILDS from local/sources/kernel
- relibc: BUILDS from local/sources/relibc
- base: BUILDS from local/sources/base
- redoxfs: BUILDS from local/sources/redoxfs

The mini ISO build fails due to pre-existing cached pkgar signature
issues (not migration-related).
2026-05-29 23:07:54 +03:00
vasilito 38a5d2018e migrate: apply remaining patches to source forks, clean up
Apply all active patches from archived patches to source forks:
- kernel: 33 individual patches + consolidated mega-patch (34 total commits)
- relibc: 33 individual patches (34 total commits)
- base: 26 individual patches + redox.patch mega-patch (28 total commits)
- bootloader: 4 patches (5 total commits)
- installer: 1 patch (2 total commits)
- redoxfs: 2 patches (3 total commits)
- userutils: 2 patches (3 total commits)

Cleanup:
- Remove all .rej and .orig files from fork repos
- Delete all absorbed/ subdirectories (71 already-folded patches)
- Delete stale .patch files from recipe directories (~130 upstream port patches)
- 282 remaining .patch files are for non-fork components (archived, not in build system)
2026-05-29 22:48:03 +03:00
vasilito a23012cee0 migrate: remove patch system, adopt direct source ownership
BREAKING CHANGE: The patch-based build system is removed.
All Red Bear source now lives in local/sources/<component>/ as git repos.

Changes:
- src/recipe.rs: remove patches field from SourceRecipe::Git/Tar, add Local variant
- src/cook/fetch.rs: delete fetch_apply_patches, validate_patches, normalize_patch,
  fetch_compute_patches_hash, fetch_write_patches_state, fetch_patches_state_stale,
  fetch_validate_patch_symlinks, fetch_is_patches_newer. Simplify fetch and
  fetch_offline. Remove recipe_has_patches. Add Local source handler.
- src/bin/repo.rs: remove validate-patches command and handle_validate_patches
- 70 recipe.toml files: remove patches arrays, convert core recipes to Local source
- 272 .patch symlinks deleted from recipe directories
- integrate-redbear.sh: replace patch symlink logic with source fork validation
- Makefile: replace validate-patches with validate-sources target
- AGENTS.md: remove 369 lines of patch documentation, add source ownership model
- local/docs/PATCH-GOVERNANCE.md: deleted (replaced by SOURCE-OWNERSHIP-MODEL.md)
- local/docs/SOURCE-OWNERSHIP-MODEL.md: new canonical reference
- local/sources/: Red Bear fork repos created (kernel, relibc, base, bootloader,
  installer) from frozen 0.1.0 pre-patched archives
- .gitignore: exclude local/sources/ (separate git repos)
- create-forks.sh: new script for initializing fork repos

Build: cargo check passes (5 warnings, 0 errors).
Developer workflow is now: edit local/sources/ → repo cook → test. No patches.
2026-05-29 22:32:36 +03:00
vasilito 289d53d62d Red Bear OS base baseline 2026-05-29 21:59:47 +03:00