Aller au contenu


Photo

[PS4] Manjaro Linux PS4 V1 disponible


  • Veuillez vous connecter pour répondre
61 réponses à ce sujet

Posté 19 mars 2018 - 12:56

#1
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

Mise à jour de l'article : apparemment EEPLY va travailler (quand il aura le temps) sur l'ajout du support des derniers patchs des drivers GPU par la team Fail0verflow au noyau Linux (BzImage), soyez patients donc, c'est une question de temps que les corrections côté GPU au moins, arrivent ! (Issu du forum gbatemp)
Un simple remplacement de fichier sur la partition FAT32 fera l'affaire. ;-)

 

 

1521486450.png

 

 

 

 

 

Bonjour à tous, comme vous avez dû suivre récemment, Eeply a apporté une contribution au noyau Linux avec le driver du pont Display Port => HDMI Panasonic MN864729, cette avancée nous permet enfin de profiter de la sortie vidéo des PS4 Slim et Pro sous Linux.
 
Dans ces conditions, je me suis m'y au travail, et malgré quelques déboires, j'ai pu en tirer de petite chose, c'est pourquoi je vous apporte une distribution prêt à l'emploi, basée sur ArchLinux, mais avec l'accessibilité d'une Ubuntu.
 
Voici une petite vidéo du boot de Manjaro Linux Gnome, sur une PS4 Pro avec Firmware 4.55 :
 

 
Pourquoi Manjaro ? Parce qu'est elle est à la fois simple à prendre en main, accessible, mais également très modulable, et avantage de taille, rolling release, ce qui signifie qu'elle est mise à jour en temps réel à mesure de la sortie de tous ses composants systèmes (pas de mise à jour à faire tous les X temps comme Ubuntu ou Fedora), mais aussi parce que, basée sur ArchLinux, elle apporte son lot d'outil dont le dépôt communautaire de scripts AUR.
 
Le système de dépôt Aur, communautaire, est très intéressant, il pourrait être le point d'entrée pour que n'importe qui apport sa contribution facilement pour Linux sur PS4 côté logiciel, via ce dépôt, quiconque peut proposer un script, qui va empaqueter automatiquement n'importe quel fichier/logiciel à partir de sources ou binaires pré-compilées. Il est ainsi possible de proposer des applications, des jeux, des fichiers de configuration, ou même... Un noyau Linux sur mesure, des pilotes customisés, etc.. Et le dépôt grouille déjà d'émulateurs, il est ainsi très simple de compiler automatiquement, les dernières révisions issues de github de nombreux émulateurs (RPCS3 y compris.).
Le processeur x86_64 d'AMD est également un très gros avantage de compatibilité avec l'univers PC, avec Linux sous PS4.
 
Vous pourrez apporter vos contributions au dépôt communautaire ici => https://aur.archlinux.org
 

Voici ce qu'apporte la distribution préconfigurée, de multiples solutions d'accès distantes ont été intégrées et activées par défaut pour faciliter débogage et apports :
 
-Noyau Linux 4.9 patché par Eeply pour le pont Panasonic MN864729
-Boot automatique sur Manjaro x64 (basé sur l'initramfs de la vieille version fedora PS4
-Dernières mises à jour incluses (19/03/2018)
-SSH activé par défaut, accès via un PC sur le même réseau local
-X2Go serveur (LXDE uniquement !) activé par défaut, accès local/distant à une session de bureau via X2Go client sous Linux ou Windows.
-Teamviewer 13 préinstallé. (Accès distant à session de bureau)
-Environnements de bureau Gnome, LXDE, Mate.
-Firefox, Thunderbird, Libreoffice, Gnote, Audacious, VLC, Smplayer, Kodi, Filezilla, XCFA, Handbrake.
-Des émulateurs : Fceux (NES) / Nestopia (NES) /Snes9X (Super Nes) / Yabause (Sega Saturn) /PCSXR (PsOne)/PCSX2 (PS2) /PCSSPP (PSP) /Redream Dreamcast) /Reicast (Dreamcast) / CEMU (WiiU)/ Dolphin (GameCube/Wii) / DesMume (Nintendo DS) / MGBA (Game boy/ Game Boy Advance)
-Steam
-Interpréteur Wine + PlayOnLinux, pour installer simplement des jeux et applications Windows sous Linux, sans émulation, nativement.
-Préconfiguration Azerty/Français intégrale.
-Intégration du logiciel Solaar pour le support des dongles Logitech unifying.
-Flatpak (intégration du système de paquetage universel, mais nécessité d'avoir des kernels-headers pour l'utiliser, en attente d'une contribution donc)
-Intégration de la gestion dynamique du swap (fichier d'échange), désactivé par défaut toutefois pour préserver la mémoire flash de vos clés USB, pour l'activez exécutez la commande "sudo systemctl enable swapspace && sudo systemctl start swapspace"
 
 
À propos des bugs et retours de bugs :
 
La distribution Manjaro en elle même n'a pas de soucis particuliers, tous les bugs rencontrés dépendent des 2 autres éléments, le payload permettant de charger le noyau Linux depuis OrbitOS-BSD (qu'il s'agisse de la version de la version de valentinbreiz ou vultra) , et ledit noyau Linux patché par Eeply qui lui va charger l'initramfs (une sorte de minuscule distribution très légère) qui via ses scripts, chargera ensuite une vraie distribution GNU (tous les éléments libres gravitants autour du noyau Linux, de l’environnement de bureau, les services, les API, logiciels, etc...)
 
En effet, les PayLoads de valentinbreiz et vultra sont assez instables lors du chargement initial, en moyenne, on retrouve plusieurs types de crashs/échecs avant de réussis à booter Linux et avoir quelque chose s'affichant à l'écran, très souvent on peut rencontrer un crash complêt de la PS4 avec vérification du disque dur, etc... Ou même, se retrouver avec un écran noir/éteint. Et Dans de rares cas, j'ai même rencontré un Freeze de l'OS de la PS4 au moment de charger Linux, ou le noyau d'Eeply qui ne charge pas la distribution tel qu'il est censé le faire..
 
Un autre bug, vient peut être du fait que ce soit une PS4 Pro et que le pilote proposé par Failoverfl0w n'ait pas été optimisé pour la dernière révision de l'APU d'AMD inclu dans cette version de la console, il y a de nombreux soucis du côté de la gestion des fréquences du GPU de l'APU, c'est pourquoi l'environnement de bureau sous Gnome saccade, de même la prise en charge des résolutions est encore limité au 1080P, quand bien même la sortie HDMI 2.0 devrait aussi bien gérer de la 4K que des résolutions exotiques en 21/9 (3440x1440 et 2560x1440).
De fait, en tout cas sur ma PS4 Pro, seul l'environnement de bureau GNOME avec serveur d'affichage Wayland et pilote graphique logiciel (LLVM) se lance, sous Mate, LXDE, avec Xorg, niet (par contre en accès distant via x2go aucun souci, on peut se servir sans aucun problème de la PS4 comme d'un serveur.)
 
Par ailleurs il n'y a aucun support du Wifi et du Bluetooth actuellement, ni du disque dur interne.

Tous ces bugs rencontrés, ne dépendront que des mises à jour apportées au PayLoad, et au noyau Linux (BzImage) intégré dans la première partition en FAT32, que le PayLoad va venir charger, ce sont les deux seuls éléments dont il faudra se soucier réellement pour corriger les problèmes, et ça sera à voir du côté d'Eeply et valentinbreiz et vultra.
 
Leurs github sont accessibles ici, c'est sur leurs github que vous devrez apporter vos contributions, commits, et retours de bugs, ou même forker leur code :
 
Eeply (noyau & sources Linux): https://github.com/eeply/ps4-linux/
Valentinbreiz (Payload loader noyau Linux): https://github.com/v...4-Linux-Loader/
Vultra (Payload loader Linux) : https://github.com/V...5-Linux-Loader/
 
Les apports de chacun :
 
Au niveau des apports, sachez que la virtualisation est supportée par l'APU AMD, donc théoriquement il est possible de pouvoir lancer VirtualBox. Mais ce dernier a besoin des kernel-headers (les sources) du noyau Linux de Eeply pour pouvoir compiler et charger son module (pilote) et être utilisable.
Il faudra donc qu'une âme charitable propose sur le dépôt communautaire AUR, un paquet intégrant proprement les sources dans un paquet "kernel-headers" tel que c'est fait pour les noyaux prévus pour PC, et pourquoi pas, une gestion des mises à jour du noyau au passage directement sur la partition contenant ce dernier (BzImage)
 
Sachez aussi que quel que soit l'accessoire USB que vous utiliserez, les pilotes que vous voudrez utiliser dépendront essentiellement de deux choses, leur intégration au noyau Linux fourni par Eeply, OU la disponibilité de kernel Headers (les sources du noyau proprement intégrées à la distribution) permettant à tout un chacun de rétro-porter n'importe quel pilote.
 
Enfin, sachez que le Noyau Linux étant libre et open source, il y a de bonnes chances qu'à termes, tous les apports d'Eeply soient intégré au noyau Linux lors du développement de version ultérieures, et une fois qu'un pilote est présent dans le noyau Linux... Il y reste !
Personne ne rencontrera donc les problèmes typiques de Linux sur PS3, avec un OtherOS bridant l'accès au GPU, une architecture peu courante et quasi à l'abandon et un support logiciel sur la durée pauvre. L'architecture PC de la PS4 joue en notre faveur, dans dix ans, il pourra toujours y avoir des mises à jour et un système Linux à jour, donc n'importe lequel de vos apports, sera fait pour durer !
 
 
De même, il serait utile et sympathique qu'un lecteur/contributeur fasse une traduction de cet article en anglais pour GBAtemp et PsHax :manhug:
 
Téléchargements :
 
1er miroir : http://vavar60.online.fr/share/ps4/panasonic_MN864729/
2ème miroir : http://163.172.90.214/ps4linux/

Sources du noyau Linux par Eeeply contenant son patch pour le bridge Panasonic MN864729 => https://github.com/e...archive/1.0.zip
Pilote "radeon" modifié apportant le support du bridge (voir les modifications sur les fichiers ps4_bridge.c, radeon_connectors.c et radeon_encoders.c) => https://github.com/e.../gpu/drm/radeon

Sommes MD5 des fichiers :
 
PS4-Linux-Loader-4.55.bin : e71c6fcf2f5f61034801d929507a08b8
 
Manjaro-PS4-V1.7z.001 : 95296f03a3ca4faead4ec67a0c0f9f86 
Manjaro-PS4-V1.7z.002 : a5b0bc8cdfadf701835a5d91c4e804a6
Manjaro-PS4-V1.7z.003 : b877a101ca2e36fd3cbfe4dbb619f6ea
Manjaro-PS4-V1.7z.004 : a705ff5bc6e399a761f693558d2818bb
Manjaro-PS4-V1.7z.005 : bf5950eed70067f0c57d8d160d39ae9a
Manjaro-PS4-V1.7z.006 : 930fb6b1377f2453a143a9a4d48a5ba0
Manjaro-PS4-V1.7z.007 : 2cacc3b5dc881d4827f17fd3239da567
 
J'ai découpé le fichier IMG avec 7zip pour permettre à ceux ayant de petites connexions d'avoir moins de problèmes, et propose deux miroirs pour les téléchargements.
 
 
Installation :
 
Le principe est le même que Fedora pour firmware 1.76, vous aurez besoin de copier bit à bit, le fichier image sur une clé USB ou un disque dur. Vous pouvez utiliser les outils "gnome-disk-utility" (interface graphique) sous Linux ou DD (en ligne de commande) ou coupler les deux, pour ce faire, vous pouvez même redimensionner la partition Linux ensuite avec Gparted, par exemple, si c'est sur un SSD ou HDD sur port USB 3.0
Attention, la première partition du disque doit toujours être celle en FAT32 contenant le noyau Linux chargé par le Payload, et l'initramfs chargé par le noyau Linux, ensuite vous devez avoir la partition contenant Manjaro, et si vous le souhaitez, vous pouvez même rajouter votre partition EXFAT à côté pour vos applications & cie sur PS4 en usage habituel.
 
Vous pouvez également, si vous utilisez Manjaro Linuxc sur PC, utiliser la commande "mhwd-chroot /dev/sdb2" (remplacez /dev/sdb2 par le bon chemin de la partition système) via un terminal pour vous chrooter directement sur le système installé et modifier à la volée sans être sur PS4, mais sur PC.
 
 
Login :
 
Utilisateur : ps4
Mot de passe : 1
(sudo est fonctionel !)
 
Super administrateur : root
Mot de passe : 1
 
Pour des raisons de sécurité évidentes, pensez à changer le mot de passe ! :yay:
 
 
Rappel & documentation :
 
Encore une fois, ne vous étonnez pas si vous avez des crashs lors du chargement du payload... Ce dernier est encore instable. Par contre quand tout se déroule bien, il n'y a plus de crash (excepté les soucis GPU avec Xorg sur PS4 Pro, mais même quand ça ça plante, la console reste accessible via SSH ou X2Go, il est ainsi possible de redémarrer GDM avec la commande "sudo systemctl restart gdm".
 
Enfin, les touches magiques fonctionnent, Eeply semble les avoir activé par défaut, ainsi un CTRM+MAJ+PRINT+B va forcer un reboot de la console quelle que soit la situation. (Normalement.)
 
Documentation de Manjaro : https://wiki.manjaro...Page_Principale
Forum francophone Manjaro : https://www.manjaro.fr/forum/index.php
Documentation d'ArchLinux : https://wiki.archlinux.org
 
Vous y trouverez tout le nécessaire inhérent à cet écosystème logiciel, de pacman à yaourt pour installer des logiciels, au gestionnaire de pilotes MHWD très simplifié proposé par Manjaro.
 

Remerciement :
 
Eeply, Vultra, ValentinBreiz, qwertyuiop, specter, la team Fail0verflow, Linus Torvalds, Richard Stallman, la team ArchLinux, la Team Manjaro, ainsi que tous les contributeurs de logiciels libres, et tous ceux à venir.


Modifié par tikilou, 19 mars 2018 - 20:11.

  • Retour en haut

Posté 19 mars 2018 - 13:08

#2
colonelsmith

colonelsmith

    Sunriseur

  • Members
  • PipPip
  • 77 messages
Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?
  • Retour en haut

Posté 19 mars 2018 - 13:14

#3
Boukaki76

Boukaki76

    Sunriseur elite

  • Members
  • PipPipPipPip
  • 1 175 messages
  • Sexe:Male

Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?


A faire des choses que tu ne peux pas faire tourner sur la ps4 actuellement émulateur etc .... mais perso c'est chacun sont avis mais je trouve sa complètement inutile tu veux linux ta le pc qui peut lacceuir sans problème etc de mon point de vue ça sert juste à dire au gens ta vue j'ai réussi à faire tourner linux sur ma ps4
  • Retour en haut

Posté 19 mars 2018 - 13:21

#4
shim80

shim80

    Sunriseur avancé

  • Members
  • PipPipPip
  • 664 messages
J'ai l'impression que le payload linux 4.05 me fait des siennes sur ma ps4 Slim (cuh-2015B), est-ce que le payload 4.55 a des chances de mieux fonctionner sur 4.05?
  • Retour en haut

Posté 19 mars 2018 - 13:21

#5
Rumpelstiltskin

Rumpelstiltskin

    Sunriseur avancé

  • Members
  • PipPipPip
  • 700 messages
  • Sexe:Male
Le première avancer linux est une catastrophe , la deuxième est quelque peut instable ...ça devient bon! Vivement les mises à jours !
  • Retour en haut

Posté 19 mars 2018 - 13:22

#6
Rumpelstiltskin

Rumpelstiltskin

    Sunriseur avancé

  • Members
  • PipPipPip
  • 700 messages
  • Sexe:Male

J'ai l'impression que le payload linux 4.05 me fait des siennes sur ma ps4 Slim (cuh-2015B), est-ce que le payload 4.55 a des chances de mieux fonctionner sur 4.05?

Théoriquement c'est plus stable sur 4.05... tu es sur d'avoir le dernier en date sinon (4.1 il me semble )

Moi sur 4.55 c'est impeccable 2 à 5 fois moyenne , ça prend 10s...
  • Retour en haut

Posté 19 mars 2018 - 13:35

#7
overload

overload

    Sunriseur elite

  • Members
  • PipPipPipPip
  • 1 900 messages
c'est un super taff merci pour les gens concernés, par contre je doute fort que CEMU tourne (bien) dessus comme mentionné dans la news , si une personne peut faire un retour a ce sujet je suis curieux de savoir :)
merci

(je peut pas perso je suis en 5.01)

Modifié par overload, 19 mars 2018 - 13:35.

"Si ça saigne ça peut crever"

  • Retour en haut

Posté 19 mars 2018 - 13:47

#8
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?


Avoir un écosystème de homebrews plus complet que le peu qu'on a à se mettre sous la dent actuellement sur l'OS d'origine (OrbitOS) de la PS4.

Avec ça, on peut avoir les émulateurs, KODI, etc... Et n'importe qui peut très bien reproduire une interface ressemblant à celle de la PS4 pour faire "console de jeu" dans l'apparence... Si des gens sur les consoles hackées développaient des interfaces optimisées console, rien ne l'empêche sous Linux aussi...

En réalité il sera beaucoup plus simple de développer du Homebrews via Linux sur PS4, que nativement, et les contributions PC seront bénéfiques à la PS4, et celles PS4 bénéfiques à l'univers PC.

Un cercle vertueux en somme.

Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?


A faire des choses que tu ne peux pas faire tourner sur la ps4 actuellement émulateur etc .... mais perso c'est chacun sont avis mais je trouve sa complètement inutile tu veux linux ta le pc qui peut lacceuir sans problème etc de mon point de vue ça sert juste à dire au gens ta vue j'ai réussi à faire tourner linux sur ma ps4


Tout le monde n'a pas un PC gaming tu sais ? La PS4 a un rapport qualité/prix imbattable pour ce matos, avec ça on peut aussi bien faire tourner des jeux/programmes PC, que PS4...
  • Retour en haut

Posté 19 mars 2018 - 13:56

#9
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

c'est un super taff merci pour les gens concernés, par contre je doute fort que CEMU tourne (bien) dessus comme mentionné dans la news , si une personne peut faire un retour a ce sujet je suis curieux de savoir :)
merci

(je peut pas perso je suis en 5.01)


Peut être sur la Slim, sur la pro en tout cas, pas possible au vu des soucis en matière de pilote gpu (côté fréquences), ce dernier est clairement sous exploité et aurait besoin d'un patch.
Il faut donc voir ça du côté d'Eeply et fail0verflow.

Oh, et désolé pour les nombreuses fautes de l'article au passage, beaucoup d’inattention, j'ai passé des heures sur tout ça, ça m'a mis KO.
  • Retour en haut

Posté 19 mars 2018 - 14:05

#10
HAFEDHBY

HAFEDHBY

    Sunriseur avancé

  • Members
  • PipPipPip
  • 432 messages
  • Sexe:Male
Est ce que çà peut aider les devs à exploiter le noyau des ? ps4 5.x
  • Retour en haut

Posté 19 mars 2018 - 14:09

#11
overload

overload

    Sunriseur elite

  • Members
  • PipPipPipPip
  • 1 900 messages
@tikilou :

merci pour ta reponse , quand tu dit slim tu englobe aussi la ps4 fat ? (vu que tu y fait pas mention dans ta réponse je demande mais je pense que c'est pareil niveau matos et exploitation )

@HAFEDHBY :

Les devs on deja ce qu'il faut pour exploiter la ps4 en 5.x et non ils on pas attendu linux sur ps4 pour cela

Modifié par overload, 19 mars 2018 - 14:12.

"Si ça saigne ça peut crever"

  • Retour en haut

Posté 19 mars 2018 - 14:12

#12
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

Est ce que çà peut aider les devs à exploiter le noyau des ? ps4 5.x


Il y a déjà une faille privée en 5.x

Par contre le support de Linux peut aider au reverse engeenering de la console, oui.
  • Retour en haut

Posté 19 mars 2018 - 14:13

#13
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

@tikilou :

merci pour ta reponse , quand tu dit slim tu englobe aussi la ps4 fat ? (vu que tu y fait pas mention dans ta réponse je demande mais je pense que c'est pareil niveau matos et exploitation )


Oui, à tester donc, mais moi je n'ai pas cette version.
  • Retour en haut

Posté 19 mars 2018 - 14:27

#14
Boukaki76

Boukaki76

    Sunriseur elite

  • Members
  • PipPipPipPip
  • 1 175 messages
  • Sexe:Male

Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?


Avoir un écosystème de homebrews plus complet que le peu qu'on a à se mettre sous la dent actuellement sur l'OS d'origine (OrbitOS) de la PS4.

Avec ça, on peut avoir les émulateurs, KODI, etc... Et n'importe qui peut très bien reproduire une interface ressemblant à celle de la PS4 pour faire "console de jeu" dans l'apparence... Si des gens sur les consoles hackées développaient des interfaces optimisées console, rien ne l'empêche sous Linux aussi...

En réalité il sera beaucoup plus simple de développer du Homebrews via Linux sur PS4, que nativement, et les contributions PC seront bénéfiques à la PS4, et celles PS4 bénéfiques à l'univers PC.

Un cercle vertueux en somme.

Bonour,

Question toute bête : j'utilise linux sur mon pc, je comprends bien son intérêt sur ordinateur.
Qu'est-ce que cela apporte comme fonctionnalité sur console ?


A faire des choses que tu ne peux pas faire tourner sur la ps4 actuellement émulateur etc .... mais perso c'est chacun sont avis mais je trouve sa complètement inutile tu veux linux ta le pc qui peut lacceuir sans problème etc de mon point de vue ça sert juste à dire au gens ta vue j'ai réussi à faire tourner linux sur ma ps4


Tout le monde n'a pas un PC gaming tu sais ? La PS4 a un rapport qualité/prix imbattable pour ce matos, avec ça on peut aussi bien faire tourner des jeux/programmes PC, que PS4...

il n y a pas besoin d'un pc gaming pour faire tourner un émulateur ps1 ps2 nes super nes etc y'a que pour les émulateur GameCube etc que ça peux être très intéressent et faudrais que cela soit etudier pour ce genre d emulateur pour ce qui et de faire tourner des programme je pense que ceci et plus réserver à des gens spécifique et non à Mr tout le monde

Après comme j'ai dit chacun sont avis pour ce qui et du miens je trouve ça entièrement inutile mais cela fait un truc quand même en plus pour la ps4 :)

Modifié par Boukaki76, 19 mars 2018 - 14:28.

  • Retour en haut

Posté 19 mars 2018 - 14:36

#15
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages
Chacun son avis... C'est inutile pour toi, mais de mon côté, entre mon i5-7200u et son gpu intel intégré, et l'APU d'AMD sur PS4, il y a un gouffre de performances...
Sur mon laptop, je ne peux pas jouer, sinon à de vieux émulateurs.

La PS4 a ce potentiel là, sans parler de l'aspect "plateforme multimedia" avec Kodi.
  • Retour en haut

Posté 19 mars 2018 - 14:39

#16
shim80

shim80

    Sunriseur avancé

  • Members
  • PipPipPip
  • 664 messages
Je vais refaire le test avec Manjaro, mais je n'ai jamais réussi a lancer le shell Linux ne serais-ce qu'une seule fois sur slim...
  • Retour en haut

Posté 19 mars 2018 - 14:44

#17
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

Je vais refaire le test avec Manjaro, mais je n'ai jamais réussi a lancer le shell Linux ne serais-ce qu'une seule fois sur slim...


Je REpréviens à nouveau, réussir à booter Linux c'est côton, le Payload a vraiment du mal... Il faut insister de nombreuses fois.

Avant cette vidéo, alors que précédemment j'avais booté 3 fois d'affilé sans aucun soucis, j'ai mis 1/4H à avoir de nouveau un boot fonctionnel, entretemps au moins 6 ou 7 crashs...


M'enfin bon, c'est un début, faut attendre que valentinbreiz le stabilise, et que eeply fasse des majs.

Modifié par tikilou, 19 mars 2018 - 14:45.

  • Retour en haut

Posté 19 mars 2018 - 14:49

#18
Injection2Javel

Injection2Javel

    Sunriseur

  • Members
  • PipPip
  • 19 messages
  • Sexe:Not Telling

Bonjour, est-ce que cette version de linux est compatible avec les premières ps4 ? faut-il changer les initframs dans ce cas ?


  • Retour en haut

Posté 19 mars 2018 - 15:00

#19
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages

Bonjour, est-ce que cette version de linux est compatible avec les premières ps4 ? faut-il changer les initframs dans ce cas ?


Qui peut le plus peut le moins, ça fonctionnera aussi. ;)
  • Retour en haut

Posté 19 mars 2018 - 15:19

#20
tikilou

tikilou

    Sunriseur avancé

  • Technicien
  • 496 messages
Pour les curieux, voilà le code du pilote Panasonic, qu'il nous manquait auparavant :

Il a vraiment bien bossé Eeply
 
/*
 * Panasonic mn864729 DP->HDMI bridge driver (via PS4 Aeolia ICC interface)
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <asm/ps4.h>

#include "drm_crtc.h"
#include "drm_crtc_helper.h"
#include "drm_atomic_helper.h"
#include "drm_edid.h"
#include "drmP.h"

#include "radeon_mode.h"
#include "ObjectID.h"

#define CMD_READ	1, 1
#define CMD_WRITE	2, 2
#define CMD_MASK	2, 3
#define CMD_DELAY	3, 1
#define CMD_WAIT_SET	3, 2
#define CMD_WAIT_CLEAR	3, 3

#define TSYSCTRL 0x7005
# define TSYSCTRL_HDMI BIT(7)

#define TSRST 0x7006
# define TSRST_AVCSRST BIT(0)
# define TSRST_ENCSRST BIT(1)
# define TSRST_FIFOSRST BIT(2)
# define TSRST_CCSRST BIT(3)
# define TSRST_HDCPSRST BIT(4)
# define TSRST_AUDSRST BIT(6)
# define TSRST_VIFSRST BIT(7)

#define TMONREG 0x7008
# define TMONREG_HPD BIT(3)

#define TDPCMODE 0x7009


#define UPDCTRL 0x7011
# define UPDCTRL_ALLUPD BIT(7)
# define UPDCTRL_AVIIUPD BIT(6)
# define UPDCTRL_AUDIUPD BIT(5)
# define UPDCTRL_CLKUPD BIT(4)
# define UPDCTRL_HVSIUPD BIT(3)
# define UPDCTRL_VIFUPD BIT(2)
# define UPDCTRL_AUDUPD BIT(1)
# define UPDCTRL_CSCUPD BIT(0)


#define VINCNT 0x7040
# define VINCNT_VIF_FILEN BIT(6)

#define VMUTECNT 0x705f
# define VMUTECNT_CCVMUTE BIT(7)
# define VMUTECNT_DUMON BIT(6)
# define VMUTECNT_LINEWIDTH_80 (0<<4)
# define VMUTECNT_LINEWIDTH_90 (1<<4)
# define VMUTECNT_LINEWIDTH_180 (2<<4)
# define VMUTECNT_LINEWIDTH_360 (3<<4)
# define VMUTECNT_VMUTE_MUTE_ASYNC 1
# define VMUTECNT_VMUTE_MUTE_NORMAL 2
# define VMUTECNT_VMUTE_MUTE_RAMPA 4
# define VMUTECNT_VMUTE_MUTE_RAMPB 8
# define VMUTECNT_VMUTE_MUTE_COLORBAR_RGB 10
# define VMUTECNT_VMUTE_MUTE_TOGGLE 12
# define VMUTECNT_VMUTE_MUTE_COLORBAR_YCBCR 14

#define CSCMOD 0x70c0
#define C420SET 0x70c2
#define OUTWSET 0x70c3

#define PKTENA 0x7202

#define INFENA 0x7203
# define INFENA_AVIEN BIT(6)

#define AKESTA 0x7a84
# define AKESTA_BUSY BIT(0)

#define AKESRST 0x7a88

#define HDCPEN 0x7a8b
# define HDCPEN_NONE 0x00
# define HDCPEN_ENC_EN 0x03
# define HDCPEN_ENC_DIS 0x05


struct i2c_cmd_hdr {
	u8 major;
	u8 length;
	u8 minor;
	u8 count;
} __packed;

struct i2c_cmdqueue {
	struct {
		u8 code;
		u16 length;
		u8 count;
		u8 cmdbuf[0x7ec];
	} __packed req;
	struct {
		u8 res1, res2;
		u8 unk1, unk2;
		u8 count;
		u8 databuf[0x7eb];
	} __packed reply;

	u8 *p;
	struct i2c_cmd_hdr *cmd;
};

struct mn864729_bridge {
	struct drm_connector *connector;
	struct drm_encoder *encoder;
	struct drm_bridge bridge;
	struct i2c_cmdqueue cq;
	struct mutex mutex;

	int mode;
};

/* this should really be taken care of by the connector, but that is currently
 * contained/owned by radeon_connector so just use a global for now */
static struct mn864729_bridge g_bridge = {
	.mutex = __MUTEX_INITIALIZER(g_bridge.mutex)
};

static void cq_init(struct i2c_cmdqueue *q, u8 code)
{
	q->req.code = code;
	q->req.count = 0;
	q->p = q->req.cmdbuf;
	q->cmd = NULL;
}

static void cq_cmd(struct i2c_cmdqueue *q, u8 major, u8 minor)
{
	if (!q->cmd || q->cmd->major != major || q->cmd->minor != minor) {
		if (q->cmd)
			q->cmd->length = q->p - (u8 *)q->cmd;
		q->cmd = (struct i2c_cmd_hdr *)q->p;
		q->cmd->major = major;
		q->cmd->minor = minor;
		q->cmd->length = 0;
		q->cmd->count = 1;
		q->req.count += 1;
		q->p += sizeof(*q->cmd);
	} else {
		q->cmd->count += 1;
	}
}

static int cq_exec(struct i2c_cmdqueue *q)
{
	int res;

	if (!q->cmd)
		return 0;

	q->cmd->length = q->p - (u8 *)q->cmd;
	q->req.length = q->p - (u8 *)&q->req;

	res = apcie_icc_cmd(0x10, 0, &q->req, q->req.length,
		      &q->reply, sizeof(q->reply));

	if (res < 5) {
		DRM_ERROR("icc i2c commandqueue failed: %d\n", res);
		return -EIO;
	}
	if (q->reply.res1 != 0 || q->reply.res2) {
		DRM_ERROR("icc i2c commandqueue failed: %d, %d\n",
			  q->reply.res1, q->reply.res2);
		return -EIO;
	}

	return res;
}

static void cq_read(struct i2c_cmdqueue *q, u16 addr, u8 count)
{
	cq_cmd(q, CMD_READ);
	*q->p++ = count;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	*q->p++ = 0;
}

static void cq_writereg(struct i2c_cmdqueue *q, u16 addr, u8 data)
{
	cq_cmd(q, CMD_WRITE);
	*q->p++ = 1;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	*q->p++ = data;
}

#if 0
static void cq_write(struct i2c_cmdqueue *q, u16 addr, u8 *data, u8 count)
{
	cq_cmd(q, CMD_WRITE);
	*q->p++ = count;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	while (count--)
		*q->p++ = *data++;
}
#endif

static void cq_mask(struct i2c_cmdqueue *q, u16 addr, u8 value, u8 mask)
{
	cq_cmd(q, CMD_MASK);
	*q->p++ = 1;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	*q->p++ = value;
	*q->p++ = mask;
}

#if 0
static void cq_delay(struct i2c_cmdqueue *q, u16 time)
{
	cq_cmd(q, CMD_DELAY);
	*q->p++ = 0;
	*q->p++ = time & 0xff;
	*q->p++ = time>>8;
	*q->p++ = 0;
}
#endif

static void cq_wait_set(struct i2c_cmdqueue *q, u16 addr, u8 mask)
{
	cq_cmd(q, CMD_WAIT_SET);
	*q->p++ = 0;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	*q->p++ = mask;
}

static void cq_wait_clear(struct i2c_cmdqueue *q, u16 addr, u8 mask)
{
	cq_cmd(q, CMD_WAIT_CLEAR);
	*q->p++ = 0;
	*q->p++ = addr >> 8;
	*q->p++ = addr & 0xff;
	*q->p++ = mask;
}

static inline struct mn864729_bridge *
		bridge_to_mn864729(struct drm_bridge *bridge)
{
	return container_of(bridge, struct mn864729_bridge, bridge);
}

static void mn864729_mode_set(struct drm_bridge *bridge,
			      struct drm_display_mode *mode,
			      struct drm_display_mode *adjusted_mode)
{
	struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge);

	/* This gets called before pre_enable/enable, so we just stash
	 * the vic ID for later */
	mn_bridge->mode = drm_match_cea_mode(adjusted_mode);
	DRM_DEBUG_KMS("vic mode: %d\n", mn_bridge->mode);
	if (!mn_bridge->mode) {
		DRM_ERROR("attempted to set non-CEA mode\n");
	}
}

static void mn864729_pre_enable(struct drm_bridge *bridge)
{
	struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge);
	DRM_DEBUG_KMS("mn864729_pre_enable\n");

	mutex_lock(&mn_bridge->mutex);
	cq_init(&mn_bridge->cq, 4);

#if 0
	/* No idea. DP stuff probably. This borks for some reason. Meh. */
	cq_writereg(&mn_bridge->cq, 0x7657,0xff);
	cq_writereg(&mn_bridge->cq, 0x76a5,0x80);
	cq_writereg(&mn_bridge->cq, 0x76a6,0x04);
	cq_writereg(&mn_bridge->cq, 0x7601,0x0a);
	cq_writereg(&mn_bridge->cq, 0x7602,0x84);
	cq_writereg(&mn_bridge->cq, 0x7603,0x00);
	cq_writereg(&mn_bridge->cq, 0x76a8,0x09);
	cq_writereg(&mn_bridge->cq, 0x76ae,0xd1);
	cq_writereg(&mn_bridge->cq, 0x76af,0x50);
	cq_writereg(&mn_bridge->cq, 0x76b0,0x70);
	cq_writereg(&mn_bridge->cq, 0x76b1,0xb0);
	cq_writereg(&mn_bridge->cq, 0x76b2,0xf0);
	cq_writereg(&mn_bridge->cq, 0x76db,0x00);
	cq_writereg(&mn_bridge->cq, 0x76dc,0x64);
	cq_writereg(&mn_bridge->cq, 0x76dd,0x22);
	cq_writereg(&mn_bridge->cq, 0x76e4,0x00);
	cq_writereg(&mn_bridge->cq, 0x76e6,0x1e); /* 0 for (DP?) scramble off */
	cq_writereg(&mn_bridge->cq, 0x7670,0xff);
	cq_writereg(&mn_bridge->cq, 0x7671,0xff);
	cq_writereg(&mn_bridge->cq, 0x7672,0xff);
	cq_writereg(&mn_bridge->cq, 0x7673,0xff);
	cq_writereg(&mn_bridge->cq, 0x7668,0xff);
	cq_writereg(&mn_bridge->cq, 0x7669,0xff);
	cq_writereg(&mn_bridge->cq, 0x766a,0xff);
	cq_writereg(&mn_bridge->cq, 0x766b,0xff);
	cq_writereg(&mn_bridge->cq, 0x7655,0x04);
	cq_writereg(&mn_bridge->cq, 0x7007,0xff);
	cq_writereg(&mn_bridge->cq, 0x7098,0xff);
	cq_writereg(&mn_bridge->cq, 0x7099,0x00);
	cq_writereg(&mn_bridge->cq, 0x709a,0x0f);
	cq_writereg(&mn_bridge->cq, 0x709b,0x00);
	cq_writereg(&mn_bridge->cq, 0x709c,0x50);
	cq_writereg(&mn_bridge->cq, 0x709d,0x00);
	cq_writereg(&mn_bridge->cq, 0x709e,0x00);
	cq_writereg(&mn_bridge->cq, 0x709f,0xd0);
	cq_writereg(&mn_bridge->cq, 0x7a9c,0x2e);
	cq_writereg(&mn_bridge->cq, 0x7021,0x04);
	cq_writereg(&mn_bridge->cq, 0x7028,0x00);
	cq_writereg(&mn_bridge->cq, 0x7030,0xa3);
	cq_writereg(&mn_bridge->cq, 0x7016,0x04);
#endif

	/* Disable InfoFrames */
	cq_writereg(&mn_bridge->cq, INFENA, 0x00);
	/* Reset HDCP */
	cq_writereg(&mn_bridge->cq, TSRST, TSRST_ENCSRST | TSRST_HDCPSRST);
	/* Disable HDCP flag */
	cq_writereg(&mn_bridge->cq, TSRST, HDCPEN_ENC_DIS);
	/* HDCP AKE reset */
	cq_writereg(&mn_bridge->cq, AKESRST, 0xff);
	/* Wait AKE busy */
	cq_wait_clear(&mn_bridge->cq, AKESTA, AKESTA_BUSY);

	if (cq_exec(&mn_bridge->cq) < 0) {
		DRM_ERROR("failed to run pre-enable sequence");
	}
	mutex_unlock(&mn_bridge->mutex);
}

static void mn864729_enable(struct drm_bridge *bridge)
{
	struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge);
	u8 dp[3];

	if (!mn_bridge->mode) {
		DRM_ERROR("mode not available\n");
		return;
	}

	DRM_DEBUG_KMS("mn864729_enable (mode: %d)\n", mn_bridge->mode);

	/* Here come the dragons */

	mutex_lock(&mn_bridge->mutex);
	cq_init(&mn_bridge->cq, 4);

	cq_mask(&mn_bridge->cq, 0x6005, 0x01, 0x01);
	cq_writereg(&mn_bridge->cq, 0x6a03, 0x47);


	/* Wait for DP lane status */

	cq_wait_set(&mn_bridge->cq, 0x60f8, 0xff);
	cq_wait_set(&mn_bridge->cq, 0x60f9, 0x01);
	/* Wait for ?? */
	cq_writereg(&mn_bridge->cq, 0x6a01, 0x4d);
	cq_wait_set(&mn_bridge->cq, 0x60f9, 0x1a);


	cq_mask(&mn_bridge->cq, 0x1e00, 0x00, 0x01);
	cq_mask(&mn_bridge->cq, 0x1e02, 0x00, 0x70);

	cq_writereg(&mn_bridge->cq, 0x6020, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7402, 0x1c);
	cq_writereg(&mn_bridge->cq, 0x6020, 0x04);
	cq_writereg(&mn_bridge->cq, TSYSCTRL, TSYSCTRL_HDMI);
	cq_writereg(&mn_bridge->cq, 0x10c7, 0x38);
	cq_writereg(&mn_bridge->cq, 0x1e02, 0x88);
	cq_writereg(&mn_bridge->cq, 0x1e00, 0x66);
	cq_writereg(&mn_bridge->cq, 0x100c, 0x01);
	cq_writereg(&mn_bridge->cq, TSYSCTRL, TSYSCTRL_HDMI);

	cq_writereg(&mn_bridge->cq, 0x7009, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7040, 0x42);
	cq_writereg(&mn_bridge->cq, 0x7225, 0x28);
	cq_writereg(&mn_bridge->cq, 0x7227, mn_bridge->mode);
	cq_writereg(&mn_bridge->cq, 0x7228, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7070, mn_bridge->mode);
	cq_writereg(&mn_bridge->cq, 0x7071, mn_bridge->mode | 0x80);
	cq_writereg(&mn_bridge->cq, 0x7072, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7073, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7074, 0x00);
	cq_writereg(&mn_bridge->cq, 0x7075, 0x00);
	cq_writereg(&mn_bridge->cq, 0x70c4, 0x0a);
	cq_writereg(&mn_bridge->cq, 0x70c5, 0x0a);
	cq_writereg(&mn_bridge->cq, 0x70c2, 0x00);
	cq_writereg(&mn_bridge->cq, 0x70fe, 0x12);
	cq_writereg(&mn_bridge->cq, 0x70c3, 0x10);
	cq_writereg(&mn_bridge->cq, 0x10c5, 0x00);
	cq_writereg(&mn_bridge->cq, 0x10f6, 0xff);
	cq_writereg(&mn_bridge->cq, 0x7202, 0x20);
	cq_writereg(&mn_bridge->cq, 0x7203, 0x60);
	cq_writereg(&mn_bridge->cq, 0x7011, 0xd5);
	cq_writereg(&mn_bridge->cq, 0x7a00, 0x0e);
	cq_wait_set(&mn_bridge->cq, 0x10f6, 0x80);
	cq_mask(&mn_bridge->cq, 0x7226, 0x00, 0x80);
	cq_mask(&mn_bridge->cq, 0x7228, 0x00, 0xFF);
	cq_writereg(&mn_bridge->cq, 0x7204, 0x40);
	cq_wait_clear(&mn_bridge->cq, 0x7204, 0x40);
	cq_writereg(&mn_bridge->cq, 0x7a8b, 0x05);
	cq_mask(&mn_bridge->cq, 0x1e02, 0x70, 0x70);
	cq_mask(&mn_bridge->cq, 0x1034, 0x02, 0x02);
	cq_mask(&mn_bridge->cq, 0x1e00, 0x01, 0x01);
	cq_writereg(&mn_bridge->cq, VMUTECNT, VMUTECNT_LINEWIDTH_90);
	if (cq_exec(&mn_bridge->cq) < 0) {
		DRM_ERROR("Failed to configure bridge mode\n");
	}

	mutex_unlock(&mn_bridge->mutex);
}

static void mn864729_disable(struct drm_bridge *bridge)
{
	struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge);
	DRM_DEBUG_KMS("mn864729_disable\n");

	mutex_lock(&mn_bridge->mutex);
	cq_init(&mn_bridge->cq, 4);
	cq_writereg(&mn_bridge->cq, VMUTECNT, VMUTECNT_LINEWIDTH_90 | VMUTECNT_VMUTE_MUTE_NORMAL);
	cq_writereg(&mn_bridge->cq, INFENA, 0x00);
	if (cq_exec(&mn_bridge->cq) < 0) {
		DRM_ERROR("Failed to disable bridge\n");
	}
	mutex_unlock(&mn_bridge->mutex);
}

static void mn864729_post_disable(struct drm_bridge *bridge)
{
	/* struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge); */
	DRM_DEBUG_KMS("mn864729_post_disable\n");
}

/* Hardcoded modes, since we don't really know how to do custom modes yet.
 * Other CEA modes *should* work (and are allowed if externally added) */

/* 1 - 640x480@60Hz */
static const struct drm_display_mode mode_480p = {
	DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
		 752, 800, 0, 480, 490, 492, 525, 0,
		 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3
};
/* 4 - 1280x720@60Hz */
static const struct drm_display_mode mode_720p = {
	DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
		 1430, 1650, 0, 720, 725, 730, 750, 0,
		 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9
};
/* 16 - 1920x1080@60Hz */
static const struct drm_display_mode mode_1080p = {
	DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
		 2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
		 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9
};

int mn864729_get_modes(struct drm_connector *connector)
{
	struct drm_device *dev = connector->dev;
	struct drm_display_mode *newmode;
	DRM_DEBUG_KMS("mn864729_get_modes\n");

	newmode = drm_mode_duplicate(dev, &mode_1080p);
	drm_mode_probed_add(connector, newmode);
	//newmode = drm_mode_duplicate(dev, &mode_720p);
	//drm_mode_probed_add(connector, newmode);
	//newmode = drm_mode_duplicate(dev, &mode_480p);
	//drm_mode_probed_add(connector, newmode);

	drm_mode_connector_update_edid_property(connector, NULL);

	return 0;
}

enum drm_connector_status mn864729_detect(struct drm_connector *connector,
		bool force)
{
	struct mn864729_bridge *mn_bridge = &g_bridge;
	u8 reg;

	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;

	radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
	radeon_dp_getdpcd(radeon_connector);

	mutex_lock(&mn_bridge->mutex);
	cq_init(&mn_bridge->cq, 4);
	cq_read(&mn_bridge->cq, TMONREG, 1);
	if (cq_exec(&mn_bridge->cq) < 9) {
		mutex_unlock(&mn_bridge->mutex);
		DRM_ERROR("could not read TMONREG");
		return connector_status_disconnected;
	}
	reg = mn_bridge->cq.reply.databuf[3];
	mutex_unlock(&mn_bridge->mutex);

	DRM_DEBUG_KMS("TMONREG=0x%02x\n", reg);

	if (reg & TMONREG_HPD)
		return connector_status_connected;
	else
		return connector_status_disconnected;
}

int mn864729_mode_valid(struct drm_connector *connector,
				  struct drm_display_mode *mode)
{
	int vic = drm_match_cea_mode(mode);

	/* Allow anything that we can match up to a VIC (CEA modes) */
	if (!vic || vic != 16) {
		return MODE_BAD;
	}

	return MODE_OK;
}

static int mn864729_bridge_attach(struct drm_bridge *bridge)
{
	/* struct mn864729_bridge *mn_bridge = bridge_to_mn864729(bridge); */

	return 0;
}

static struct drm_bridge_funcs mn864729_bridge_funcs = {
	.pre_enable = mn864729_pre_enable,
	.enable = mn864729_enable,
	.disable = mn864729_disable,
	.post_disable = mn864729_post_disable,
	.attach = mn864729_bridge_attach,
	.mode_set = mn864729_mode_set
};

int mn864729_bridge_register(struct drm_connector *connector,
			     struct drm_encoder *encoder)
{
	int ret;
	struct mn864729_bridge *mn_bridge = &g_bridge;
	struct drm_device *dev = connector->dev;

	mn_bridge->encoder = encoder;
	mn_bridge->connector = connector;
	mn_bridge->bridge.funcs = &mn864729_bridge_funcs;
	ret = drm_bridge_attach(dev, &mn_bridge->bridge);
	if (ret) {
		DRM_ERROR("Failed to initialize bridge with drm\n");
		return -EINVAL;
	}

	encoder->bridge = &mn_bridge->bridge;

	return 0;
}

Modifié par tikilou, 19 mars 2018 - 15:20.

  • Retour en haut




0 utilisateur(s) li(sen)t ce sujet

0 invité(s) et 0 utilisateur(s) anonyme(s)