# 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.