Commit Graph

18 Commits

Author SHA1 Message Date
vasilito 52459b7873 redbear-full: re-enable amdgpu (v6.0 2026, 0.2.3)
The amdgpu recipe's idr_* / ida_* header conflict with linux-kpi is
now resolved (see the preceding commit). Re-enable amdgpu in
redbear-full.toml by changing amdgpu = "ignore" to amdgpu = {} and
add a [package] section to the amdgpu recipe marking the 0.2.3
release and describing the bounded display-glue compile surface
(DCN20 / DCN30 / DCN31 backend files plus the Rust-side init /
connector detection / modeset glue).
2026-06-09 15:08:31 +03:00
vasilito 638d78ee94 amdgpu: resolve idr_* conflict with linux-kpi via REDBEAR_AMDGPU_BUILD
The linux-kpi idr.h header and the amdgpu recipe's redox_glue.h
both define struct idr and the idr_init/alloc/remove/find/destroy
inline functions, but with different members and different argument
signatures. When the amdgpu build includes both headers in the same
translation unit (via -include linux/amdgpu_stubs.h and via
redox_glue.h), the compiler reports a redefinition of struct idr
and conflicting types for the idr_* inlines, blocking the build.

Resolve the conflict by gating the linux-kpi idr declarations on a
new REDBEAR_AMDGPU_BUILD preprocessor flag. The amdgpu recipe's
CFLAGS now defines REDBEAR_AMDGPU_BUILD, so the linux-kpi
declarations are suppressed and redox_glue.h's authoritative copies
take over. Every other consumer of linux-kpi (the redox-drm scheme
daemon, the Wi-Fi drivers) continues to see the generic stubs.

The IDA macros and struct ida in linux-kpi are kept outside the
gate because they are not part of the amdgpu surface and must
remain available to other drivers. A forward declaration of
struct idr is added at the top of the header so the
struct ida { struct idr *idr; } member compiles cleanly when the
IDR definitions are suppressed. The IDA macros are updated to
no-ops against a pointer-typed idr slot; the amdgpu build does
not exercise them and other consumers continue to treat them as
stubs.
2026-06-09 15:06:05 +03:00
vasilito 98982cc2fa amdgpu: extract pci_*_quirk_flags into redox_quirk_bridge.c (Gap 15)
R1-R10 audit Gap 15: the pci_*_quirk_flags and
redox_pci_set_quirk_flags symbols lived inside redox_stubs.c
alongside kmalloc, printk, and other generic glue functions.
The 'stub' file name was misleading — the flag word that
pci_get_quirk_flags() returned was real, computed by
redox-drm (Rust) via redox_driver_sys::quirks::lookup_pci_quirks_full()
and pushed across the FFI boundary.

This change:

- Adds source/redox_quirk_bridge.c containing the three
  symbols plus a static g_redox_quirk_flags global. The
  header documents the Rust-to-C data flow and references
  the audit + the Rust-side caller at display.rs:155.
- Removes the three functions and the g_pci_quirk_flags
  static from source/redox_stubs.c. redox_stubs.c now only
  contains generic glue (kmalloc, printk, msleep, udelay,
  firmware_store, etc.) and the file name matches its
  contents.
- Updates recipe.toml Stage 1 to compile the new
  translation unit alongside redox_stubs.c. Both files
  are linked into libamdgpu_dc_redox.so.

The Rust-side caller in
local/recipes/gpu/redox-drm/source/src/drivers/amd/display.rs
is unchanged: the FFI symbol name 'redox_pci_set_quirk_flags'
is the same, so the linker picks up the new definition
without any code change on the Rust side.

No caller code in amdgpu_redox_main.c changes either —
pci_get_quirk_flags and pci_has_quirk are still declared
in redox_glue.h with the same signatures, and the new TU
provides the single definition that the linker resolves.

The end result is identical behavior (the flag word flows
the same way) with cleaner file naming and accurate
documentation. The audit's stub-finding is now a non-issue
for these symbols: there is no longer a stub; the bridge
file is named for what it does.
2026-06-07 20:44:08 +03:00
vasilito 1882e44302 amdgpu: expand Stage 2 to 10 DCN files (DCN20+DCN30+DCN31)
Add dpp, mmhubbub include paths. Add ilog2 macro.
10 of 11 tested DCN files now compile with 0 errors.
dnc30_cm_common.c excluded — dcn30_cm_common.h missing from Linux 7.1 tree.
2026-06-01 11:23:06 +03:00
vasilito 1b266ddda7 amdgpu: compile DCN31 display files — linux-kpi header fixes + recipe Stage 2
linux-kpi additions:
- linux/types.h: add __le16/__le32/__le64/__be16/__be32/__be64 byteorder types
- linux/stddef.h: new file overriding amdgpu-source version (fixes false/true conflict)
- linux/byteorder/generic.h: new file with complete byteorder conversion functions
- linux/spinlock_types.h: new file for struct raw_spinlock compatibility
- linux/amdgpu_stubs.h: comprehensive new stub header covering:
  _THIS_IP_, raw_spinlock, ktime_get_*, compiletime_assert,
  math64 (div_u64, div64_u64, etc.), __counted_by, struct ida, va_format,
  devres, backlight, power management, i2c, pci config access, hdmi

- linux/idr.h: add struct ida + DEFINE_IDA/ida_* macros
- linux/types.h: remove duplicate atomic_long_t (conflicted with atomic.h)
  remove duplicate BITS_PER_LONG and ktime macros

Recipe update:
- Stage 2: add 4 DCN31 hardware files (dcn31_afmt.c, dcn31_vpg.c,
  dcn31_apg.c, dcn31_panel_cntl.c) — all compile with 0 errors
- CFLAGS: add -include linux/amdgpu_stubs.h, dc/inc, dc/inc/hw,
  dmub/inc, display/include paths for Linux 7.1 compatibility

This proves the Linux 7.1 AMD DC tree can be compiled against linux-kpi.
Next: expand to DCN20/DCN30/DCN32, then DC core files.
2026-06-01 11:12:18 +03:00
vasilito 844e305299 amdgpu: fix recipe comment to reference Linux 7.1 (not 7.0-rc7)
The amdgpu-source tree was upgraded from Linux 7.0-rc7 to 7.1.
The old backup remains at amdgpu-source.bak-7.0-rc7.
2026-06-01 10:51:55 +03:00
vasilito 9044ca8e61 amdgpu: fix PCI enable/IRQ stubs, SETPLANE error, CRTC_ID property
- Fix redox_pci_enable_device to track enabled state instead of noop.
  redox_pci_set_master now logs bus master enable.

- Fix redox_request_irq to return the IRQ fd instead of open+close.
  redox_free_irq now accepts fd via dev_id and actually closes it.

- SETPLANE now returns EOPNOTSUPP instead of silently succeeding,
  with warning about DC dependency.

- OBJ_SETPROPERTY now accepts CRTC_ID (property 30) as a noop
  (connector routing is managed by SETCRTC).
2026-06-01 07:20:42 +03:00
vasilito c5bd162aea amdgpu: flip_surface per-family offsets, DPMS, cursor, hotplug polling
- Move flip_surface from Rust hardcoded registers (HUBP 0x5800, Navi23-only)
  to C side amdgpu_dc_flip_surface() using asic_props per-family HUBP offsets.

- Add amdgpu_dc_set_dpms() for DPMS ON/OFF via OTG_CONTROL register.
  Uses per-family OTG base offsets. DPMS standby/suspend return noop.

- Override cursor_set/cursor_move on AmdDriver with honest error messages
  documenting Display Core dependency.

- Add poll_hotplug() to GpuDriver trait. AmdDriver overrides with connector
  count change detection when IRQ handle is unavailable.

- Remove hardcoded HUBP_FLIP_ADDR_* constants from Rust display.rs.
2026-06-01 05:44:57 +03:00
vasilito 61f758a881 amdgpu: VRAM-backed GEM allocator, CS ioctl docs, firmware stub
- Add VramManager (vram.rs): bump-allocator with free-list coalescing for BAR2 VRAM
  aperture. gem_create auto-selects VRAM for scanout buffers (width>0 && height>0)
  with fallback to system RAM on exhaustion. gem_close frees VRAM when gpu_addr is
  within BAR2 range. ensure_gem_gpu_mapping detects VRAM-backed buffers and skips
  GTT mapping.

- Add amdgpu_dc_upload_firmware() stub documenting DMUB firmware upload sequence
  prerequisites (requires Linux DC tree compilation).

- Replace generic 'unavailable' CS ioctl/virgl error messages with specific
  messages documenting what component is needed (amdgpu core driver, Mesa radeonsi/
  iris cross-compilation, CS ioctl backend).
2026-05-31 22:59:46 +03:00
vasilito 0a3e1fa7db amdgpu: fix ASIC detection, quirk stubs, firmware store, connector descriptors, register offsets
- Fix ASIC detection: use PCI device_id instead of broken MMIO offset-0 read.
  Add proper device_id->ASIC family lookup table covering Navi10-Navi33 (RDNA1/RDNA2/RDNA3).
  Add per-family properties (DCN revision, firmware name, OTG/HUBP base offsets, HPD register).

- Wire quirk flags from Rust to C: replace pci_get_quirk_flags/pci_has_quirk stubs
  (previously always returned 0/false) with stored quirk_flags set via new FFI
  redox_pci_set_quirk_flags(). Quirk-aware IRQ policy now actually works.

- Store firmware blobs from Rust to C: add redox_firmware_store() FFI to pass
  firmware blobs from AmdDriver.firmware HashMap into C-side storage. C side
  can now fall back to scheme:firmware if blobs not pre-stored.

- Fix connector descriptors: replace hardcoded 600x340mm fake dimensions with
  per-ASIC-family connector tables (desktop dGPU vs APU layout). Set mm_width/
  mm_height to 0 (unprobed — needs DC hardware detection). HPD register offset
  now comes from per-family asic_props table.

- Fix register offsets: replace hardcoded OTG base 0x4800 / HUBP base 0x5800
  (Navi23-specific) with per-DCN-revision dispatch from asic_props table
  (DCN2.0=0x4000/0x5000, DCN3.0=0x4800/0x5800, DCN3.2=0x5000/0x6000).
2026-05-31 22:46:47 +03:00
vasilito 3431bbfeb2 Fix duplicate atomic_t typedef conflicting with types.h 2026-05-31 05:50:29 +03:00
vasilito e3d776aa9a Advance redbear-full Wayland, greeter, and Qt integration
Consolidate the active desktop path around redbear-full while landing the greeter/session stack and the runtime fixes needed to keep Wayland and KWin bring-up moving forward.
2026-04-19 17:59:58 +01:00
vasilito d2b41aad8d Fix AMDGPU recipe glue assumptions 2026-04-18 21:38:31 +01:00
vasilito ed0b32c7dd Expand redox-drm DRM scheme, amdgpu port, and update patches 2026-04-18 17:58:44 +01:00
vasilito 8d56b7bb8b Refresh redox-drm and AMD GPU driver 2026-04-17 00:03:28 +01:00
vasilito 68aa94ce98 Advance Wayland and KDE package bring-up 2026-04-14 10:51:06 +01:00
vasilito 808a6eee6a Add GPU driver interrupt handling, Intel GPU PCI config, and display improvements
AMD display driver: expanded DCN pipeline setup with plane/controller/stream mapping.
Intel driver: cleaned up module structure.
New interrupt module for MSI-X vector management across GPU drivers.
PCID config endpoint patch and Intel GPU TOML for automatic driver spawning.
Expanded redox_stubs with additional kernel API shims.
2026-04-12 23:52:19 +01:00
vasilito 50b731f1b7 Red Bear OS — microkernel OS in Rust, based on Redox
Derivative of Redox OS (https://www.redox-os.org) adding:
- AMD GPU driver (amdgpu) via LinuxKPI compat layer
- ext4 filesystem support (ext4d scheme daemon)
- ACPI fixes for AMD bare metal (x2APIC, DMAR, IVRS, MCFG)
- Custom branding (hostname, os-release, boot identity)

Build system is full upstream Redox with RBOS overlay in local/.
Patches for kernel, base, and relibc are symlinked from local/patches/
and protected from make clean/distclean. Custom recipes live in
local/recipes/ with symlinks into the recipes/ search path.

Build:  make all CONFIG_NAME=redbear-full
Sync:   ./local/scripts/sync-upstream.sh
2026-04-12 19:05:00 +01:00