* Russell King à propos du cache L2: http://lists.infradead.org/pipermail/linux-arm-kernel/2014-September/290120.html avec notamment l'exemple de la difficulté à faire de la compat ascendante pour des propriétés booléennes * L'exemple de cpu-reset sur Armada 370/XP, et de l'impossibilité d'utiliser le framework reset. * L'exemple de l'enable-method SMP sur Armada XP * L'exemple d'AT91 qui dit explicitement que ses bindings sont instables. * L'exemple de Fedora, qui installe les DTs dans /boot/dt-/ * Sur Allwinner == Pour les plateformes où tu ne connais pas le hardware ou alors quand il est sous-documenté (genre... Allwinner), c'est mega chiant. Le dernier exemple en date, c'est que nos clocks pour la MMC avaient un registre qui ressemblait a une clock que l'on avait deja (mod0, qui est utilisé pour le spi, la nand, le touchscreen, tout ce qui a besoin d'une clock independante), mais avec des bits non documentés. On a du coup mergé ça avec une fonction crado exportée juste pour notre driver qui mettait les bits magiques. Il s'est avéré quelques releases plus tard que ces bits magiques etaient en fait pour controler la phase des clocks de la MMC (en entree et sortie). On a du coup fait merger une fonction pour controler la phase avec le CCF, et on a converti notre driver de clocks et de MMC pour utiliser ça. Et forcément, on a dû modifier le DT pour ça, et on a fini par degager notre fonction crado. Du coup, DT as an ABI tout ça, ça marche bien dans un monde parfait où tu sais tout sur ton hardware quand tu écris le driver. Sauf que dans la vraie vie, c'est pas trop ça :) == * Sur AT91, l'exemple de la NAND pas gérée comme un child du bus SMC/EBI, ce qui pose problème maintenant pour gérer correctement le bus SMC/EBI. Cf http://lists.infradead.org/pipermail/linux-arm-kernel/2015-January/317468.html et https://lkml.org/lkml/2014/12/4/786. * Sur AT91, le macb qui avait une seule compat string relative à AVR32, mais utilisée sur ARM, qui marchait à coup de #ifdef dans le driver. Marche plus en multiplatform -> changement de chaîne de compat. Cf https://lkml.org/lkml/2015/3/5/501. * "Except for very rare case (modules support comes to mine) syscall compatibility works perfectly. But that's because syscalls are a very visible ABI and people don't break them by accident. They also don't decide they have a cool new scheme all syscalls need to follow now." Christoph Hellwig, http://lwn.net/Articles/234133/. * "Like many kernel developers, Steve Rostedt has found out that user-space interfaces are hard. API design is hard in general, but, once an interface makes it into a released kernel it must be maintained indefinitely." -- http://lwn.net/Articles/412744/. * "Andrew added that a bad ABI indicates a failure of the review process.". -- http://lwn.net/Articles/412744/ * http://lwn.net/Articles/561462/ * "For this reason, Russell argued that no device tree binding should be merged until it has had an in-depth review by somebody who not only understands device tree bindings, but who also understands the hardware in question. That bar is high enough to make the merging of new bindings difficult indeed." http://lwn.net/Articles/561462/ * "So embedded people are going to ship with unfinished DT and upgrade later. They have to. There is no choice. Stable DT doesn't change anything unless you can create perfect stable bindings for a new SOC instantaneously." -- Jason Gunthorpe