เนื่องจากปัญหาในเคอร์เนล Linux-socfpga เวอร์ชัน 5.4 และใหม่กว่า HPS EMAC อาจค้างหรือติดขัดในบางกรณี
ปัญหานี้เกิดจากการตั้งค่าที่ไม่ถูกต้องในโครงสร้างอุปกรณ์ SoC Linux Cyclone® V
- ต้องเปิดใช้งานบิตที่กําหนดเองที่ใช้ร่วมกันบนคอนโทรลเลอร์แคช L2C-310
- ขีดจํากัดธุรกรรมการอ่านและเขียนที่คงค้างควรตั้งค่า 0xf บน EMAC DMA
เมื่อต้องการหลีกเลี่ยงปัญหานี้ ให้ทําตามขั้นตอนต่อไปนี้:
1 . ตรวจสอบให้แน่ใจว่า โหนดต้นไม้อุปกรณ์ L2C-310 ตั้งค่า Enable Override bit ที่ใช้ร่วมกันโดยการแก้ไขโค้ง/arm/boot/dts/socfpga.dtsi
L2: แคช-controller@fffef000 {
เข้ากันได้ = "arm, pl310-cache";
reg = <0xfffef000 0x1000>;
ขัดจังหวะ = <0 38 0x04>;
แคชเป็นหนึ่งเดียว;
ระดับแคช = <2>;
แขน, แท็ก- ความหน่วงแฝง= <11>;
Arm, ความหน่วงแฝงข้อมูล = <2 1 1>;
ข้อมูล prefetch - = <1>;
prefetch-instr = <1>;
แขน, ร่วมกัน- แทนที่; # ตรวจสอบที่อยู่นี้
แขน, คู่- linefill=<1>;
แขน, คู่- linefill-incr=<0>;
แขน, คู่- linefill-wrap= <1>;
แขน, prefetch- drop=<0>;
แขน, prefetch- ชดเชย=<7>;
};
2. แก้ไข โหนดอีเธอร์เน็ตเพื่อเพิ่มการอ้างอิงสําหรับ snps, axi-config และ เพิ่ม โหนดสําหรับ snps, axi-config ใน arch/arm/boot/dts/socfpga.dtsi
ตัวอย่างสําหรับ GMAC0:
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
ดัชนี e404220.. 100644 90a0560
--- a/arch/arm/boot/dts/socfpga.dtsi
+++ b/arch/arm/boot/dts/socfpga.dtsi
@@ -560,10 +560,16 @@
ชื่อรีเซ็ต = "stmmaceth";
snps, multicast-filter-bins = <256>;
snps, ที่สมบูรณ์แบบ- กรอง- รายการ=<128>;
+ snps, axi-config = <&stmmac_axi_setup_0>;
tx-fifo-depth = <4096>;
rx-fifo-depth = <4096>;
สถานะ = "ปิดใช้งาน";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ snps, wr_osr_lmt = <0xf>;
+ snps, rd_osr_lmt = <0xf>;
+ };
ปัญหานี้ได้รับการแก้ไขด้วย linux-socfpga-5.10.120-lts และ linux-socfpga-5.15.30-lts branches