Karena masalah di kernel Linux-socfpga versi 5.4 dan yang lebih baru, HPS EMAC mungkin macet atau macet dalam beberapa keadaan.
Masalah ini disebabkan oleh pengaturan yang salah di pohon perangkat Cyclone® V SoC Linux
- Bit Shared Enable Override harus diaktifkan pada L2C-310 Cache Controller
- Batas Transaksi Terutang Baca dan Tulis harus diatur ke 0xf pada DMA EMAC
Untuk mengatasi masalah ini, lakukan langkah-langkah berikut ini:
1. Pastikan node pohon perangkat L2C-310 mengatur bit Enable Override bersama, dengan mengedit arch/arm/boot/dts/socfpga.dtsi
L2: cache-controller@fffef000 {
kompatibel = "lengan, pl310-cache";
reg = <0xfffef000 0x1000>;
interupsi = <0 38 0x04>;
cache-terpadu;
tingkat cache = <2>;
lengan,tag-latensi = <1 1 1>;
lengan,latensi data = <2 1 1>;
prefetch-data = <1>;
prefetch-instr = <1>;
lengan, penggantian bersama; # Periksa ini ada
lengan, linefill ganda = <1>;
lengan, double-linefill-incr = <0>;
lengan, double-linefill-wrap = <1>;
lengan,prefetch-drop = <0>;
lengan,prefetch-offset = <7>;
};
2. Edit node ethernet untuk menambahkan referensi untuk snps, axi-config, dan tambahkan node untuk snps, axi-config di arch / arm / boot / dts / socfpga.dtsi
Contoh untuk GMAC0:
diff --git a/arch/lengan/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
Indeks E404220.. 90a0560 100644
--- a/lengkungan/lengan/boot/dts/socfpga.dtsi
+++ b / lengkungan / lengan / boot / dts / socfpga.dtsi
@@ -560,10 +560,16 @@
reset-names = "stmmaceth";
snps, multicast-filter-bin = <256>;
snps,entri filter sempurna = <128>;
+ snps,axi-config = <&stmmac_axi_setup_0>;
kedalaman tx-fifo = <4096>;
kedalaman rx-fifo = <4096>;
status = "dinonaktifkan";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ SNPS,wr_osr_lmt = <0xf>;
+ SNPS,rd_osr_lmt = <0xf>;
+ };
Masalah ini telah diperbaiki dimulai dengan cabang linux-socfpga-5.10.120-lts dan linux-socfpga-5.15.30-lts