mali_g610_opencl_vulkan/README.md
2026-09-17 01:06:13 +02:00

8.9 KiB

Procedura di ripristino OpenCL + Vulkan — Orange Pi 5 Plus / Debian 12

Obiettivo

Ripristinare l'accelerazione GPU sulla Orange Pi 5 Plus con:

  • Debian 12 Bookworm
  • kernel Rockchip 6.1.x già presente
  • kernel Mali DDK g21p0-01eac0
  • firmware Mali g21p0
  • userspace Mali g24p0-00eac0
  • Vulkan 1.3
  • OpenCL 3.0

La procedura non deve modificare kernel, DTB o U-Boot.

Attenzione

Non eseguire apt upgrade, apt full-upgrade, aggiornamenti del kernel o modifiche al bootloader come parte di questa procedura.


1. Verificare il sistema prima di iniziare

Controllare versione Debian:

cat /etc/debian_version

Controllare il kernel:

uname -a

Controllare il driver Mali:

dmesg | grep -E 'mali fb000000.gpu: (Kernel DDK|GPU identified|Probed as mali0)'

Il kernel funzionante utilizzato nella procedura deve riportare:

Kernel DDK version g21p0-01eac0

Controllare che il firmware attivo sia quello g21:

readlink -f /lib/firmware/mali_csffw.bin
sha256sum /lib/firmware/mali_csffw.bin

SHA-256 atteso:

8e7c821a55ca1c345cc79f61243616dd25fc35b81f090946f302886d67712df5

2. Verificare che il servizio firmware automatico sia disabilitato

Il servizio set-mali-firmware.service non deve sostituire automaticamente il firmware g21.

systemctl is-enabled set-mali-firmware.service

Risultato atteso:

disabled

Se è enabled, fermarsi e verificare la configurazione prima di procedere.


3. Installare il firmware g21

Il firmware deve essere disponibile in:

/lib/firmware/mali_csffw_g21p0/mali_csffw.bin

Creare il link al firmware g21:

sudo ln -sfn /lib/firmware/mali_csffw_g21p0/mali_csffw.bin \
  /lib/firmware/mali_csffw.bin

Verificare:

readlink -f /lib/firmware/mali_csffw.bin
sha256sum /lib/firmware/mali_csffw.bin

Deve risultare il firmware g21 con SHA-256:

8e7c821a55ca1c345cc79f61243616dd25fc35b81f090946f302886d67712df5

4. Backup prima di installare il nuovo userspace

Creare una directory di backup:

sudo mkdir -p /root/mali-backup-g24-restore

Salvare l'ICD OpenCL eventualmente esistente:

if [ -f /etc/OpenCL/vendors/mali-arm64.icd ]; then
    sudo cp -a /etc/OpenCL/vendors/mali-arm64.icd \
      /root/mali-backup-g24-restore/mali-arm64.icd.g13
fi

Salvare il firmware g21 come file reale:

sudo cp -L /lib/firmware/mali_csffw.bin \
  /root/mali-backup-g24-restore/mali_csffw-g21.bin

Verificare il backup:

sha256sum /root/mali-backup-g24-restore/mali_csffw-g21.bin

5. Installare il userspace Mali g24p0

Il pacchetto utilizzato nella configurazione funzionante è:

libmali-g610-g24p0-x11-wayland-gbm.deb

Esempio di percorso:

/tmp/libmali-g610-g24p0-x11-wayland-gbm.deb

Installare:

sudo dpkg -i /tmp/libmali-g610-g24p0-x11-wayland-gbm.deb

Il pacchetto installa, tra le altre cose:

  • libMaliVulkan.so.1
  • libMaliOpenCL.so.1
  • mali.json
  • configurazione del linker
  • firmware Mali

Importante

Il pacchetto può installare il proprio mali_csffw.bin. Non lasciarlo attivo: il kernel in uso richiede il firmware g21.


6. Ripristinare immediatamente il firmware g21

Dopo l'installazione del pacchetto:

sudo ln -sfn /lib/firmware/mali_csffw_g21p0/mali_csffw.bin \
  /lib/firmware/mali_csffw.bin

Verificare:

readlink -f /lib/firmware/mali_csffw.bin
sha256sum /lib/firmware/mali_csffw.bin

Deve essere:

/usr/lib/firmware/mali_csffw_g21p0/mali_csffw.bin
8e7c821a55ca1c345cc79f61243616dd25fc35b81f090946f302886d67712df5

7. Aggiornare la cache del linker

sudo ldconfig

È possibile che venga mostrato il warning:

ldconfig: /lib/librknnrt.so is not a symbolic link

Questo warning è indipendente da Mali e non va corretto come parte di questa procedura.


8. Configurare OpenCL

Il pacchetto g24 deve fornire:

/usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so.1

Controllare:

ls -l /usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so*

Creare l'ICD OpenCL g24:

sudo mkdir -p /etc/OpenCL/vendors

echo '/usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so.1' | \
  sudo tee /etc/OpenCL/vendors/mali.icd

Verificare:

cat /etc/OpenCL/vendors/mali.icd

Deve contenere esattamente:

/usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so.1

Se è presente il vecchio ICD g13:

/etc/OpenCL/vendors/mali-arm64.icd

non cancellarlo. Spostarlo nel backup:

sudo mv /etc/OpenCL/vendors/mali-arm64.icd \
  /root/mali-backup-g24-restore/mali-arm64.icd.g13

In questo modo clinfo vedrà una sola piattaforma ARM proprietaria.


9. Configurare Vulkan

Verificare che esista:

ls -l /usr/share/vulkan/icd.d/mali.json

Il contenuto atteso è equivalente a:

{
  "file_format_version" : "1.0.0",
  "ICD" : {
    "library_path" : "libMaliVulkan.so.1",
    "api_version" : "1.3.276"
  }
}

10. Verifica OpenCL senza reboot

Eseguire:

clinfo | grep -E \
'arm_release_ver|Number of platforms|Platform Version|Device Name'

Risultato atteso:

arm_release_ver: g24p0-00eac0, rk_so_ver: 10
Number of platforms                               1
Platform Version                                OpenCL 3.0 v1.g24p0-00eac0...
Device Name                                     Mali-G610 r0p0

11. Verifica Vulkan senza dipendere da X11

Per evitare problemi se la sessione grafica X11 non è disponibile:

VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json \
vulkaninfo --summary

Risultato atteso:

driverVersion      = 24.0.0
deviceName         = Mali-G610
driverID           = DRIVER_ID_ARM_PROPRIETARY
driverName         = Mali-G610
apiVersion         = 1.3.276

Nota

Un semplice vulkaninfo --summary può fallire con un errore XCB se non esiste una connessione al server X. In quel caso utilizzare il comando con VK_ICD_FILENAMES mostrato sopra.


12. Verifica del kernel prima del reboot

dmesg | grep -E 'mali fb000000.gpu: (Kernel DDK|Loading Mali firmware|Mali firmware git_sha|GPU identified|Probed as mali0)'

Devono essere presenti almeno:

Kernel DDK version g21p0-01eac0
GPU identified as 0x7 arch 10.8.6 r0p0 status 0
Probed as mali0

Dopo che il firmware è stato utilizzato, deve comparire anche il git SHA g21:

Mali firmware git_sha: 221d2b3e5f4cf47df6227ccb24c82c4e4baa986e

13. Riavvio

Prima del reboot verificare:

systemctl is-enabled set-mali-firmware.service
readlink -f /lib/firmware/mali_csffw.bin

Devono risultare:

disabled
/usr/lib/firmware/mali_csffw_g21p0/mali_csffw.bin

A questo punto:

sudo reboot

14. Verifica dopo il reboot

Kernel e firmware

dmesg | grep -E 'mali fb000000.gpu: (Kernel DDK|Loading Mali firmware|Mali firmware git_sha|GPU identified|Probed as mali0)'

Atteso:

Kernel DDK version g21p0-01eac0
GPU identified as 0x7 arch 10.8.6 r0p0 status 0
Probed as mali0

e, quando il firmware viene inizializzato:

Mali firmware git_sha: 221d2b3e5f4cf47df6227ccb24c82c4e4baa986e

Vulkan

VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json \
vulkaninfo --summary

OpenCL

clinfo | grep -E \
'arm_release_ver|Number of platforms|Platform Version|Device Name'

Devono essere presenti:

arm_release_ver: g24p0-00eac0, rk_so_ver: 10
Number of platforms                               1
Platform Version                                OpenCL 3.0 v1.g24p0-00eac0...
Device Name                                     Mali-G610 r0p0

15. Verifica finale dei pacchetti

dpkg -l | grep -E 'libmali|mali-g610-firmware'

Configurazione funzionante di riferimento:

libmali-g610-x11
libmali-valhall-g610-g24p0-x11-wayland-gbm
mali-g610-firmware

La presenza contemporanea del vecchio pacchetto libmali-g610-x11 non impedisce il funzionamento, purché il vecchio ICD OpenCL g13 non sia attivo.


16. Rollback

Non usare apt autoremove per fare rollback.

Se è necessario tornare al precedente userspace g13:

  1. Non modificare kernel, DTB o U-Boot.
  2. Ripristinare il firmware g21.
  3. Ripristinare l'ICD g13.
  4. Ripristinare il pacchetto libmali-g610-x11 se necessario.
  5. Verificare OpenCL e Vulkan prima di un eventuale reboot.

Ripristino firmware:

sudo ln -sfn /lib/firmware/mali_csffw_g21p0/mali_csffw.bin \
  /lib/firmware/mali_csffw.bin

Ripristino ICD g13:

sudo mv /root/mali-backup-g24-restore/mali-arm64.icd.g13 \
  /etc/OpenCL/vendors/mali-arm64.icd

Nota

Il rollback completo del userspace g13 dipende dal fatto che il relativo .deb sia ancora disponibile. Non rimuovere manualmente librerie a caso: prima verificare lo stato dei pacchetti con dpkg -l.


17. Stato finale desiderato

La configurazione verificata è:

Kernel Mali       g21p0-01eac0
Firmware          g21p0
Userspace Mali    g24p0-00eac0

Vulkan            1.3.276
OpenCL            3.0
GPU               Mali-G610 r0p0
OpenCL platforms  1

Questa procedura non richiede modifiche a kernel, DTB o U-Boot.