Aufgrund eines Problems im Linux-socfpga Kernel Version 5.4 und höher kann der HPS EMAC unter bestimmten Umständen hängen bleiben oder stehen bleiben.
Dieses Problem ist auf eine falsche Einstellung in der Cyclone® V SoC Linux-Gerätestruktur zurückzuführen
- Das Shared Enable Override-Bit muss auf dem L2C-310 Cache-Controller aktiviert sein
- Das Limit für ausstehende Lese- und Schreibtransaktionen sollte auf dem EMAC DMA auf 0xf festgelegt werden
Führen Sie die folgenden Schritte aus, um dieses Problem zu umgehen:
1. Stellen Sie sicher, dass der L2C-310-Gerätebaumknoten das freigegebene Enable Override-Bit festlegt, indem Sie arch/arm/boot/dts/socfpga.dtsi bearbeiten
L2: cache-controller@fffef000 {
Kompatibel = "Arm,PL310-CACHE";
reg = <0xfffef000 0x1000>;
Interrupts = <0 38 0x04>;
Cache-einheitlich;
Cache-Ebene = <2>;
arm,tag-latency = <1 1 1>;
Arm,Datenlatenz = <2 1 1>;
prefetch-data = <1>;
prefetch-instr = <1>;
Arm, geteilte Überschreibung; # Überprüfen Sie, ob dies vorhanden ist
arm, doppelte Zeilenfüllung = <1>;
arm,double-linefill-incr = <0>;
Arm, Doppel-Linefill-Wrap = <1>;
arm,prefetch-drop = <0>;
Arm,Prefetch-Offset = <7>;
};
2. Bearbeiten Sie den/die Ethernet-Knoten, um eine(n) Referenz(en) für eine snps,axi-config hinzuzufügen, und fügen Sie Knoten für die snps,axi-config in arch/arm/boot/dts/socfpga.dtsi hinzu
Beispiel für GMAC0:
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
Index E404220.. 90A0560 100644
--- a/arch/arm/boot/dts/socfpga.dtsi
+++ b/arch/arm/boot/dts/socfpga.dtsi
@@ -560,10 +560,16 @@
reset-names = "stmmaceth";
SNPs,MultiCast-Filter-Bins = <256>;
SNPS,Perfect-Filter-Einträge = <128>;
+ snps,axi-config = <&stmmac_axi_setup_0>;
TX-FIFO-Tiefe = <4096>;
Rx-FIFO-Tiefe = <4096>;
Status = "deaktiviert";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ SNPs,wr_osr_lmt = <0xf>;
+ SNPs,rd_osr_lmt = <0xf>;
+ };
Dieses Problem wurde ab den Zweigen linux-socfpga-5.10.120-lts und linux-socfpga-5.15.30-lts behoben