A causa di un problema nel kernel Linux-socfpga versione 5.4 e successive, l'HPS EMAC potrebbe bloccarsi o bloccarsi in alcune circostanze.
Questo problema è dovuto a un'impostazione non corretta nell'albero dei dispositivi Linux Cyclone® V SoC
- Il bit shared enable override deve essere abilitato sul controller di cache L2C-310
- Il limite di transazioni in lettura e scrittura in sospeso deve essere impostato su 0xf sull'EMAC DMA
Per risolvere questo problema, eseguire i seguenti passaggi:
1. Assicurarsi che il nodo dell'albero del dispositivo L2C-310 imposta il bit di attivazione override condiviso, modificando arch/arm/boot/dts/socfpga.dtsi
L2: cache-controller@fffef000 {
compatibile = "arm,pl310-cache";
reg = <0xfffef000 0x1000>;
interrupt = <0 38 0x04>;
cache unificata;
livello cache = <2>;
arm,tag-latenza = <1 1 1>;
arm,data-latenza = <2 1 1>;
prefetch-data = <1>;
prefetch-instr = <1>;
braccio,sostituzione condivisa; # Controlla che sia presente
arm,double-linefill = <1>;
arm,double-linefill-incr = <0>;
arm,double-linefill-wrap = <1>;
braccio,prefetch-drop = <0>;
arm,prefetch-offset = <7>;
};
2. Modificare i nodi Ethernet per aggiungere un riferimento per un snps,axi-config e aggiungere nodi per gli snp,axi-config in arch/arm/boot/dts/socfpga.dtsi
Esempio per GMAC0:
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
indice e404220.. 100644 90a0560
--- 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-entries = <128>;
+ snps,axi-config = ;
profondità tx-fifo = <4096>;
profondità rx-fifo = <4096>;
status = "disabilitato";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ snps,wr_osr_lmt = <0xf>;
+ snps,rd_osr_lmt = <0xf>;
+ };
Questo problema è pianificato per essere risolto in una versione futura del kernel Linux-Socfpga.