เนื่องจากปัญหาในเคอร์เนล Linux-socfpga เวอร์ชั่น 5.4 และใหม่กว่า HPS EMAC อาจค้างหรือค้างในบางสถานการณ์
ปัญหานี้เกิดจากการตั้งค่าที่ไม่ถูกต้องในโครงสร้างอุปกรณ์ Cyclone® V SoC Linux
- ต้องเปิดใช้งานบิต Shared Enable Override ในแคชคอนโทรลเลอร์ L2C-310
- ควรตั้งค่าขีดจํากัดธุรกรรมการอ่านและเขียนที่ค้างอยู่เป็น 0xfบน EMAC DMA
หากต้องการแก้ไขปัญหานี้ ให้ทําตามขั้นตอนต่อไปนี้:
1. ตรวจสอบให้แน่ใจว่า โหนดแผนผังอุปกรณ์ L2C-310 ตั้งค่าบิต Enable Override ที่ใช้ร่วมกันโดยการแก้ไข arch/arm/boot/dts/socfpga.dtsi
L2: แคช-controller@fffef000 {
เข้ากันได้ = "arm,pl310-cache";
reg = <0xfffef000 0x1000>;
การขัดจังหวะ = <0 38 0x04>;
การรวมแคช
ระดับแคช = <2>;
arm, แท็ก-ความหน่วงแฝง = <1 1>;
arm, ข้อมูล-ความหน่วงแฝง = <2 1>;
ข้อมูล prefetch = <1>;
prefetch-instr = <1>;
arm, shared-override; # ตรวจสอบว่ามีอยู่
arm, double-linefill = <1>;
arm, double-linefill-incr = <0>;
arm, double-linefill-wrap = <1>;
arm, prefetch-drop = <0>;
arm, prefetch-offset = <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, perfect-filter-entries = <128>;
+ snps, axi-config = ;
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 ในอนาคต