Group: Hardware/Components/GPUs/radeon
(→Status in the Xorg radeon driver) |
|||
Line 1: | Line 1: | ||
== Introduction == | == Introduction == | ||
+ | |||
+ | The Radeon GPUs have many freedom issues that are referenced on the table below. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | ! Nonfree software | ||
+ | ! Effects without the nonfree software or workarounds | ||
+ | ! Workaround | ||
+ | ! Workaround consequences | ||
+ | ! Fix | ||
+ | ! Existing projects that could be leveraged to fix the problem | ||
+ | |- | ||
+ | | Radeon firmwares/microcodes | ||
+ | | | ||
+ | The Radeon driver doesn't load and Linux falls back on another driver like VESA or efifb: | ||
+ | * Native resolutions might be missing | ||
+ | * No multi-display | ||
+ | | Patch the radeon driver in linux-libre to enable it to load and work without the nonfree firwares | ||
+ | | | ||
+ | The radeon driver loads: | ||
+ | * Native resolutions become available | ||
+ | * Multi display is available | ||
+ | * 3D acceleration is still missing | ||
+ | | Write free replacement for the firmwares | ||
+ | | | ||
+ | * The nouveau project generates free firwmare in the Linux driver. While it's not meant to support non-nvidia GPUs, it could be a good idea to use a similar software architecture. | ||
+ | |- | ||
+ | | AtomBIOS bytecode: This bytecode is part of the Video BIOS and is parsed and executed by the Linux driver | ||
+ | | | ||
+ | * The radeon driver doesn't load | ||
+ | * The boot software (BIOS, UEFI) may not be able to initialize the display. Untested. | ||
+ | | ? | ||
+ | | | ||
+ | | Replace the nonfree bytecode by a free one. | ||
+ | | | ||
+ | * The [https://www.x.org/wiki/radeonhd/ RadeonHD] driver did that, however it wasn't chosen as the main Radeon driver because it didn't match ATI's Interest. | ||
+ | * Other? TODO: Look if the video BIOS replacements also deal with the AtomBIOS bytecode. | ||
+ | |- | ||
+ | | The Video BIOS | ||
+ | | | ||
+ | | Use Libreboot or Coreboot with SeaBIOS, put the Video BIOS in memory but don't execute it | ||
+ | | The display is initialized very late, when the Radeon driver loads, if the AtomBIOS tables are in the right memory area. | ||
+ | | Implement a free Video BIOS replacement either as standalone replacement or in Coreboot and Libreboot. | ||
+ | | | ||
+ | * There is a free Video BIOS replacement in Coreboot for many Intel GPUs. While its meant to support Intel GPUs, it may be a good idea to leverage some of the code and architecture. It may also be a good idea to instead implement it as a standalone Video BIOS replacement, as standalone Radeon GPUs do exist, whereas standalone Intel GPU don't at the time of writing. | ||
+ | * TODO: List Vide BIOS Replacement projects and their freedom issues (check if the compiler is free) | ||
+ | |} | ||
+ | |||
+ | == Status in linux-libre == | ||
The radeon driver has code like that for many GPU families: | The radeon driver has code like that for many GPU families: | ||
Line 15: | Line 63: | ||
* it can enable native resolution | * it can enable native resolution | ||
* It supports multi-displays | * It supports multi-displays | ||
− | |||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" |
Revision as of 09:45, 20 October 2019
Introduction
The Radeon GPUs have many freedom issues that are referenced on the table below.
Nonfree software | Effects without the nonfree software or workarounds | Workaround | Workaround consequences | Fix | Existing projects that could be leveraged to fix the problem |
---|---|---|---|---|---|
Radeon firmwares/microcodes |
The Radeon driver doesn't load and Linux falls back on another driver like VESA or efifb:
|
Patch the radeon driver in linux-libre to enable it to load and work without the nonfree firwares |
The radeon driver loads:
|
Write free replacement for the firmwares |
|
AtomBIOS bytecode: This bytecode is part of the Video BIOS and is parsed and executed by the Linux driver |
|
? | Replace the nonfree bytecode by a free one. |
|
|
The Video BIOS | Use Libreboot or Coreboot with SeaBIOS, put the Video BIOS in memory but don't execute it | The display is initialized very late, when the Radeon driver loads, if the AtomBIOS tables are in the right memory area. | Implement a free Video BIOS replacement either as standalone replacement or in Coreboot and Libreboot. |
|
Status in linux-libre
The radeon driver has code like that for many GPU families:
if (!rdev->me_fw) { r = r100_cp_init_microcode(rdev); if (r) { DRM_ERROR("Failed to load firmware!\n"); return r; } }
The result of that is that without the nonfree firmware, the radeon driver doesn't load.
Being able to use that driver, even if the 3D acceleration doesn't work without the nonfree firmware is very interesting:
- it can enable native resolution
- It supports multi-displays
family | file | commit introducing the driver .remove() | code | linux-libre status |
---|---|---|---|---|
r100 | r100.c |
70967ab9c0c9 radeon: Use request_firmware() |
if (!rdev->me_fw) { r = r100_cp_init_microcode(rdev); if (r) { DRM_ERROR("Failed to load firmware!\n"); return r; } } |
Patch not enabled |
r600 (KMS) | r600.c | Always there:
3ce0a23d2d25 drm/radeon/kms: add r600 KMS support |
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { r = r600_init_microcode(rdev); if (r) { DRM_ERROR("Failed to load firmware!\n"); return r; } } |
Working:
clean_sed ' /r = r600_init_microcode(rdev);/,/}/ s,return r;,/*(DEBLOBBED)*/, ' drivers/gpu/drm/radeon/r600.c 'enable blobless activation' |
r600 (UMS) | r600_cp.c |
70967ab9c0c9 radeon: Use request_firmware() |
UMS support has been removed in:
8333f607a631 drm/radeon: remove UMS support |
|
Evergreen | evergreen.c | Working:
clean_sed ' /r = r600_init_microcode(rdev);/,/}/ s,return r;,/*(DEBLOBBED)*/, ' drivers/gpu/drm/radeon/evergreen.c 'enable blobless activation' |
||
rv770 | rv770.c | Working:
clean_sed ' /r = r600_init_microcode(rdev);/,/}/ s,return r;,/*(DEBLOBBED)*/, ' drivers/gpu/drm/radeon/rv770.c 'enable blobless activation' |
||
Northern Islands | ni.c | Maybe this commit or before (not clear):
0af62b016804 drm/radeon/kms: add ucode loader for NI |
if (rdev->flags & RADEON_IS_IGP) { if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { r = ni_init_microcode(rdev); if (r) { DRM_ERROR("Failed to load firmware!\n"); return r; } } } else { if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) { r = ni_init_microcode(rdev); if (r) { DRM_ERROR("Failed to load firmware!\n"); return r; } } } |
Patch sent to linux-libre, doesn't appear yet in mailman archives |
TODO:
- ni_dpm.c
- si.c
- si_dpm.c
- cik.c
- radeon_uvd.c
- radeon_vce.c
- btc_dpm.c
- ci_dpm.c
- cik.c
- cik_sdma.c
Status in the Xorg radeon driver
family | distribution and version information | configuration files | status |
---|---|---|---|
Northern Islands | Parabola, TODO | TODO | TODO |
External links
- Radeon Xorg driver: Has many information on the GPUs
- linux-libre website
- linux-libre mailing list archives