En raison d’un problème dans le noyau Linux-socfpga version 5.4 et ultérieure, HPS EMAC peut se bloquer ou se bloquer dans certaines circonstances.
Ce problème est dû à un paramètre incorrect dans l’arborescence des périphériques Linux du SoC Cyclone® V
- Le bit de remplacement d’activation partagé doit être activé sur le contrôleur de cache L2C-310.
- La limite de lecture et d’écriture des transactions en cours doit être définie sur 0xf sur le DMA EMAC.
Pour contourner ce problème, procédez comme suit :
1. Assurez-vous que le nœud de l’arborescence des périphériques L2C-310 définit le bit partagé Activer le remplacement en modifiant arch/arm/boot/dts/socfpga.dtsi
L2: cache-controller@fffef000 {
compatible = « arm,pl310-cache »;
reg = <0xfffef000 0x1000>;
interruptions = <0 38 0x04>;
cache unifié;
niveau du cache = <2 >;
arm,latence de balise = <1 1 1>;
arm,latence des données = <2 1 1>;
prefetch-data = <1>;
prefetch-instr = <1>;
arm, partagé-outrepassement; # Vérifiez que ceci est présent
bras, double remplissage de ligne = <1>;
arm,double-linefill-incr = <0>;
bras, double ligneremplissage-enveloppe = <1>;
arm,prefetch-drop = <0>;
arm,prefetch-offset = <7>;
};
2. Modifiez le(s) nœud(s) ethernet(s) pour ajouter une référence pour un snps, axi-config, et ajoutez des nœuds pour le snps,axi-config dans arch/arm/boot/dts/socfpga.dtsi
Exemple pour 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-entries = <128>;
+ snps,axi-config = <&stmmac_axi_setup_0>;
tx-fifo-profondeur = <4096>;
rx-fifo-profondeur = <4096>;
status = « disabled »;
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ snps,wr_osr_lmt = <0xf>;
+ snps,rd_osr_lmt = <0xf>;
+ };
Ce problème a été résolu à partir des branches linux-socfpga-5.10.120-lts et linux-socfpga-5.15.30-lts