Ich brauche Hilfe, um die PCIe-Aufzählung zu verstehen
PCIe ändert IO-zugeordnetes IO in speicherzugeordnetes IO. Die PCIe-Spezifikation führt einen erweiterten Mechanismus zum Lesen der Konfiguration mit MMIO ein. Da PCIe die Speicheradresse des Konfigurationsregisters kennt, verwendet PCIe das Lesen des Speichers, um die Konfigurationslesetransaktion durchzuführen.
Während der Aufzählung wird dem PCIe-Endpunkt keine Speicheradresse zugewiesen. (Er wird nicht einmal BDF zugewiesen.) Um BDF zuzuweisen, fordert die CPU eine Vendor-ID an, um festzustellen, ob der PCIe-Endpunkt gültig ist. Wenn der PCIe-Endpunkt eine gültige Vendor-ID sendet, weist die CPU dem BDF den PCIe-Endpunkt zu und schreibt die Speicheradresse in die Konfigurations-BARs, um speicherzugeordnete IOs zu erstellen.
Um eine Hersteller-ID zu erhalten, verwende ich gemäß meinem Verständnis IO-Schreibvorgänge an den Adressport (der sich in der IO-Zuordnung 0x0CF8 befindet) und IO-Lesevorgänge vom Datenport (der sich in der IO-Zuordnung 0xCFC befindet).
Die ARM-CPU verfügt jedoch nur über eine Speicherzuordnung (keine E/A-Zuordnung). Wie fordert sie dann eine Vendor-ID an? Welche Art von TLP-Paket wird verwendet?
Ich wäre dankbar, wenn Sie den Enumerationsprozess im PCIe-Paket ohne IO-Map erläutern könnten.