Das nächste Großprojekt - der S3C24XX-DMA-Controller
Geschrieben von MMind am Sonntag, 21. April 2013 in E-Book Reader
Nachdem die Erneuerung des Interrupt-Controllers ja nun abgeschlossen ist, folgt gleich das nächste Großprojekt — der DMA-Controller der S3C24XX-Prozessoren.
Was ist DMA
DMA steht für Direct Memory Access und soll helfen die Übertragung von Daten vom Arbeitsspeicher zu Geräten (und zurück) zu beschleunigen.
Der einfache Weg, Daten zwischen diesen auszutauschen nennt sich PIO — Programmed Input/Output. Dabei liest der Prozessor die zu übertragenden Daten häppchenweise aus dem Speicher und schreibt sie in spezielle Register des Gerätes. Gerade diese Häppchen-Arbeitsweise macht das ganze zum einen langsam und erfordert zum anderen auch eine ständige Beteiligung des Prozessors.
Hier setzt nun DMA an, indem es einen Kommunikationsweg zwischen Sender und Empfänger ohne Beteiligung des Prozessors bietet. Hier wird dem DMA-Controller nur noch mitgeteilt, welchen Speicherbereich er zu welchem Ziel übertragen soll. Nach dem Start der Übertragung hat der Prozessor mit dieser nichts mehr zu tun und kann andere Aufgaben erledigen. Nach dem Ende des Transfers wird er über einen Interrupt darüber benachrichtigt und kann dann an der entsprechenden Position weitermachen.
Aktueller Zustand
Wie bei fast allen anderen Subsystemen auch, gab es im ARM-Bereich auch bei den DMA-Controllern die Tendenz, dass jeder seine eigene Schnittstelle zwischen Gerätetreibern und DMA-Controllern kreierte — so ist der aktuelle DMA-Treiber der S3C24XX-Prozessoren in den Jahren 2003 bis 2006 entstanden — und seit dem auch nicht mehr großartig verändert worden.
In dieser Konstellation bieten natürlich nur Treiber DMA-Funktionalität, die speziell für diese Controller-Schnittstelle angepasst geschrieben wurden. Im ARM-Bereich ist dies oftmals möglich, da die Prozessoren meist spezielle Peripheriegeräte mitbringen die auch nur in diesen Prozessoren vorkommen. Schwierig wird es mit solchen privaten Schnittstellen dann, wenn sich wirklich mehrere Prozessoren dieselben Geräte teilen — so teilen sich die S3C24XX Prozessoren zum Beispiel einige wenige Geräte mit neueren Samsung-Prozessoren bis hin zum aktuellen Exynos.
DMAEngine
Seit 2006 hat sich aber auch das DMAEngine-Framework von Intel als die hardwareunabhängige Lösung für DMA-Transfers etabliert. Dort implementieren die Hardware-Treiber nicht mehr den gesamten Transfer sondern nur noch die wirklich hardwarespezifischen-Einstellungen des DMA-Controllers.
Interessanterweise gibt es zwar eine recht gute Dokumentation zur Nutzung der DMAEngine in Treibern, aber keine zum Schreiben von DMAEngine-Treibern. Es bleibt also beim Lesen von Code-Kommentaren um die Funktionsweise zusammen zu puzzeln.
Der Kernel 3.10 wird gigantisch
Geschrieben von MMind am Montag, 15. April 2013 in E-Book Reader
Das Release des Kernel 3.9 nähert sich mit großen Schritten und wenn ich meinem Patch-Tracker glauben darf, wird der folgende 3.10 mein volumenstärkster Kernel bisher. Die dortige Statistik sagt mir:
- 48 individual patches
- 1832 lines added
- 1680 lines removed
Die 48 Patches sind also nochmal knapp 40% meiner bisherigen Kernel-Patches — schon cool. Im Einzelnen gehören dazu:
Die Restarbeiten der Interrupt-Umstellung, die ja bereits letztens erwähnt wurden (ARM: S3C24XX: irq rework for S3C2412, S3C2440 and S3C2442, ARM: S3C24XX: integrate special s3c2412 eint handling, ARM: S3C24XX: more fixes and enhancements for the s3c24xx irqs).
Die DeviceTree-Unterstützung für die Interrupt-Controller war dann doch nicht ganz so trivial und weckte etwas Diskussionsbedarf — wie an der Menge der Revisionen gut zu erkennen ist. Jetzt nach allen Änderungen muss ich aber auch sagen, dass die Devicetree-Syntax für die Interrupt-Controller deutlich besser gworden ist, als mein erster Versuch.
Der Rest ist dann im Vergleich dazu eher Kleinkram. Der Oyo-Display-Controller bekommt die Fähigkeit die Anzeige zu rotieren und den Anwendungen 16bit vorzugaukeln, da nicht alle Anwendungen mit einem palettenbasierten Display zurechtkommen. Der Oyo-Touchscreen bekommt Devicetree-Unterstützung. Und dann gibts da noch ein paar weitere Kleinigkeiten in anderen Teilen.
Nach Ladenschluss
Momentan läuft die vermutlich letzte Woche des Entwicklungszyklus von 3.9. Das heißt, alle Features für das Merge-Window von 3.10 müssen jetzt bereits linux-next erreicht haben. Leider bedeutet dies auch, dass einige meiner Patches erst für 3.11 in Frage kommen.
Dies sind der Pinctrl-Treiber für die Samsung S3C24xx SoCs und die generelle Devicetree-Unterstützung für den S3C2416.
Seite 1 von 1, insgesamt 2 Einträge