Forum: FPGA, VHDL & Co. Unterschied Legacy/Native Endpoint PCIe


von andreas (Gast)


Lesenswert?

Hallo,

im moment lese ich mich duch die Spezifikation von dem PCIe. Als ich 
über die Endpoints stolperte, sah ich das es zwei unterschiedliche gibt: 
native und legacy. Wo ist der Unterschied zwischen den beiden?

Vielen Dank für die Antwort!


mfg
andreas

von cfgardiner (Gast)


Lesenswert?

Andreas,

Die PCI SIG möchten drei PCI Eigenschaften aufs Abstellgleis schicken:
1) I/O Space
2) Devices deren BAR Resources unterhalb 4 GB gelegt werden muessen bzw. 
dessen DMA Controller keine 64-Bit Adressen generieren können.
3) Unterstützung von PCI Lock Semantics

Fällt dein Endpoint in einer dieser Kategorien, dann ist es ein Legacy 
Device sonst ein Full-Featured Device.

Was aber nicht heisst, dass dein full-featured Device z.B. keine I/O 
Space unterstützen darf. Nur wenn du I/O space unterstützt, muessen 
diese Register auch über Memory Space (Memory Mapped I/O) erreichbar 
sein. Entweder innerhalb eines bestehenden Mem-Space BARS oder über 
einen getrennten Mem Space BAR.

Bzgl. der 4 GB Anforderung, gilt das auch nur für prefetchable Mem 
Space. Nicht prefetchable Mem Space (FIFOs, Control Regs, Status 
Regs....) darf nach wie auf einer Plazierung < 4 GB ausgelegt sein. Es 
wird aber gefordert. dass alle Resourcen ohne "Side Effects" (eben alles 
ausser FIFOs, Cmd/Ctl Regs etc.) als prefetchable markiert sein muessen.

Noch ein übrigens, Legacy in diesem Zusammenhang hat gar nichts mit 
Legacy Interrupts (emulierte INTA.. INTD) zu tun. Sowohl full-featured 
als auch Legacy Endpoints muessen auch Legacy Interrupts unterstützen 
(natürlich nur falls Interrupts in deinem Design überhaupt verwendet 
werden). MSI(-X) muessen auch beide unterstützen (wieder, falls Ints 
überhaupt verwendet werden natürlich)

von Erik (Gast)


Lesenswert?

entschuldigt wenn ich mich da einmische,
aber müssen bei native PCI-Express wirklich auch die alten INT-Signale 
unterstützt werden? so weit ich die Spec verstanden hab darf man auch 
nur MSI und/oder MSI-X anbieten

von cfgardiner (Gast)


Lesenswert?

Erik,

die Legacy INT-__Signale__ werden natürlich nicht unterstützt. PCIe 
kennt keine Sideband Signale (ausser im PC Umfeld, WAKE, SMBUS, JTAG 
etc.). Für die Legacy Interrupts INTA/INTB/INTC/INTD gibt es insgesamt 
acht Messages, je ein Assert_INTx sowie Deassert_INTx. Der Empfänger 
eines Interrupt Messages muss sich einen virtuellen Draht dazu "denken", 
der den aktuellen Zustand eines equivalenten INTx-Signals nachbildet. 
Der Legacy Interrupt Enable Mechanismus über das PCI Command Register is 
auch gleich geblieben.

Zum zweiten Teil deiner Frage, ja diese Messages muessen unbedingt von 
Legacy und nicht-legacy interrupt-fähigen Endpoints unterstützt werden. 
Windows XP z.B. kann gar kein MSI. Ein Endpoint, der gar keine INTx 
Messages generieren kann, würde unter XP nicht funktionieren. Ein Win-XP 
Gerätetreiber wird daher immer nur Legacy Interrupts aktivieren.

Charles

von Erik (Gast)


Lesenswert?

Hallo Charles,


Danke für Deine Antwort.
Das ältere Windowse kein MSI(-X) unterstützen ist mir bewusst, meine 
Frage zielte eher darauf ab ob die PCI(-Express)-Spezifikation explizit 
verlangt das ein interrupt-fähiger Endpoint auch immer die alten 
INT#-Signale (bei Express natürlich INT#-Messages) unterstützen muss. 
Ich habe so etwas nicht in den Spezifikationen gefunden.
Gerade wenn man an AHCI oder xHCI denkt, wo jeweils die Unterstützung 
von MSI und/oder MSI-X ausdrücklich verlangt wird, könnte man meinen das 
die alten INT#-Mechanismen aussterben sollen.


Grüße
Erik

von Erik (Gast)


Lesenswert?

Hallo,


zu der 4GB-Grenze muss noch gesagt werden das non-prefetchable Speicher 
gar nicht über der 4GB-Grenze liegen kann weil PCI-Bridges 
non-prefetchable Speicher nur unterhalb der 4GB-Grenze routen können. 
Nur für prefetchable Speicher kann man in einer PCI-2-PCI-Bridge auch 
einen Speicherbereich eintragen der oberhalb der 4GB-Grenze liegt.
Man könnte zwar ein PCI-Device bauen das für non-prefetchable Speicher 
so einen Doppel-BAR hat der auch Adressen über der 4GB-Grenze erlaubt 
(das ist in der PCI-Spezifikation nirgends explizit verboten) aber 
nutzen kann man das nicht wirklich (also man kann nur Adressen unter der 
4GB-Grenze eintragen) weil die PCI-Bridges das eben nicht unterstützen.


Grüße
Erik

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.