En raison d’un problème dans la version 5.4 du noyau Linux-socfpga et les versions ultérieures, le HPS EMAC peut suspendre ou ralentir dans certaines circonstances.
Ce problème est dû à un paramètre incorrect dans l’arbre de périphériques Linux Cyclone® V SoC
- Le bit shared enable override bit doit être activé sur le contrôleur de cache L2C-310
- La limite de transaction exceptionnelle en lecture et en écriture doit être fixée à 0xf sur le DMA EMAC
Pour contourner ce problème, suivez les étapes suivantes :
1. Assurez-vous que le nœud de l’arbre de périphérique L2C-310 définit le bit enable override bit partagé, en éditant arch/arm/boot/dts/socfpga.dtsi
L2 : cache-controller@fffef000 {
compatible = « bras, pl310-cache » ;
reg = <0xfffef000 0x1000> ;
interruptions = <0 38 0x04> ;
cache unifiée ;
niveau de cache = <2> ;
arm, latence tag = <1 1 1> ;
arm, latence des données = <2 1 1> ;
prefetch-data = <1> ;
prefetch-instr = <1> ;
arm, shared-override ; Nb. Vérifier que c’est présent
arm, double-line <1> ;
arm, double-line <0> ;
bras, double-line fait envelopper = <1> ;
arm, prefetch-drop = <0> ;
arm, prefetch-offset = <7> ;
};
2. Modifiez le ou les nœuds ethernet pour ajouter une référence(s) pour un snps, axi-config, et ajoutez des nœuds pour les 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.. 100644 90a0560
--- a/arch/arm/boot/dts/socfpga.dtsi
+++ b/arch/arm/boot/dts/socfpga.dtsi
@@ -560,10 +560,16 @@
reset-names = « st grandie » ;
snps, multicast-filter-bins = <256> ;
snps, entrées de filtre parfait = <128> ;
+ snps, axi-config = ;
profondeur tx-fifo = <4096> ;
profondeur rx-fifo = <4096> ;
statut = « désactivé » ;
};
+
+ stmmac_axi_setup_0 : stmmac-axi-config_0 {
+ snps, wr_osr_lmt = <0xf> ;
+ snps, rd_osr_lmt = <0xf> ;
+ };
Ce problème devrait être résolu dans une prochaine version du noyau Linux-Socfpga.