Großprojekt beendet

Geschrieben von MMind am Donnerstag, 7. Februar 2013 in E-Book Reader

Vor ein paar Tagen kam mit der Aufnahme in den Samsung-Maintainer-Tree mein bisher größtes Restrukturierungsprojekt der älteren Samsung-SoCs zu einem vorläufigen Ende. Im Kern ging es dabei um eine Neuordnung des Codes, der die Interrupt-Controller der S3C24XX-SoCs steuert, um später DeviceTree-Unterstützung für die S3C24XX-SoCs realisieren zu können — mehr zu DeviceTree folgt in einem späteren Eintrag.

Bisheriger Zustand

Die S3C24XX-SoCs verwenden zwar den selben Interrupt-Controller, dessen innere Struktur unterscheidet sich jedoch zwischen allen SoC-Varianten. Im Endeffekt handelt es sich »nur« um unterschiedlich belegte Bits in den Registern des Controllers. Zur Verdeutlichung ein kleines Beispiel:

Bit0...18...
S3C2410EINT0...DMA1...
S3C2416EINT0...UART3...

Der S3C2410 signalisiert also in Bit 18 Interrupts des zweiten DMA-Kanals, während der S3C2416 dort Interrupts der vierten seriellen Schnittstelle signalisiert.

Implementiert war das Ganze dann derart, dass ein generischer Interrupt-Init die Struktur für den S3C2410 zusammenbaute und später dann eine SoC-spezifische zweite Init-Funktion, die geänderten Werte überschrieb. Diese zweite Funktion wurde über einen arch_initcall und damit zu einem gänzlich anderen Zeitpunkt gestartet.

Ein zweites großes Manko war die Festlegung auf statische Interrupt-Nummern. In arch/arm/mach-s3c24xx/include/mach/irqs.h waren den jeweiligen Interrupts feste Nummern zugewiesen und diese Nummern wurden auch durch den ganzen Interrupt-Code verstreut verwendet. D.h. es fanden sich überall Fragmente wie das folgende:

if (irq >= IRQ_EINT0 && irq <= IRQ_EINT3) ....

Dadurch kam es zu vielen Code-Dopplungen die sich nur in den verwendeten Interrupt-Nummern unterschieden.

Als drittes großes Problem ist noch das fehlen einer IRQ-Domain, welche aber für DeviceTree-Unterstützung absolut notwendig ist.

Der gesamte Prozess zog sich von Anfang November bis Ende Januar und große Teile davon entstanden auf den Flughäfen von Barcelone, Frankfurt und Hong Kong :-) .

Neue Weltordnung

Nach dem Entfernen und Hinzufügen von 1132 respektive 688 Codezeilen stellt sich das System nun folgendermassen dar. Der gesamte Aufbau folgt nun einem deklarativen Ansatz. In einer speziellen Struktur werden die Parameter der Interrupt, also Typ und gegebenenfalls Eltern-Interrupt deklariert. Die mehrfach vorhandenen Funktionen zum quittieren, maskieren und demaskieren von Interrupts sind verschwunden und wurden durch einen einzigen Satz von Funktionen ersetzt, die ihr spezifisches Verhalten aus der Interrupt-Deklaration ableiten.

Ebenso wird jetzt für jeden der Subinterrupt-Controller eine IRQ-Domain erstellt und der vorherige zweistufige Init ist auch normalisiert.

Ausblick

Als Restarbeit müssen noch die S3C2412, S3C2440 und S3C2442 Varianten in die neue Struktur konvertiert werden. Nachdem das generelle Konzept aber angenommen wurde, ist dies nichtmehr allzu schwierig. Die eigentliche DeviceTree-Unterstützung im Interrupt-Code ist dann auch nur noch eine relativ kleine Änderung, die auch schon im Großen und Ganzen existiert und nur noch etwas Feinschliff benötigt.


1 Kommentar für diesen Eintrag

Ansicht der Kommentare: Linear | Verschachtelt

  • randOM
    Sehr interessant. Nur, dass ich kein Wort verstanden habe. :-) Aber ich muss ja auch nicht alles begreifen. Da hätte ich mir zwar auch den Kommentar sparen können aber ich wollte doch noch wissen, was es mit der NWO auf sich hat. So unter Verschwörungstheoretikern ;-)

1 Trackback für diesen Eintrag

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA 1CAPTCHA 2CAPTCHA 3CAPTCHA 4CAPTCHA 5


Suche

Nach Einträgen suchen in Outside the Walled Garden:

Das Gesuchte nicht gefunden? Gib einen Kommentar in einem Eintrag ab oder nimm per E-Mail Kontakt auf!