Do sự cố trong phiên bản nhân Linux-socfpga 5.4 trở lên, HPS EMAC có thể bị treo hoặc đình trệ trong một số trường hợp.
Sự cố này là do cài đặt không chính xác trong cây thiết bị Cyclone® V SoC Linux
- Bit Ghi đè Kích hoạt Chia sẻ phải được bật trên Bộ điều khiển Bộ nhớ đệm L2C-310
- Giới hạn giao dịch chưa thanh toán Đọc và Ghi phải được đặt thành 0xf trên EMAC DMA
Để khắc phục sự cố này, hãy thực hiện các bước sau:
1. Đảm bảo nút cây thiết bị L2C-310 đặt bit Ghi đè bật được chia sẻ, bằng cách chỉnh sửa arch / arm / boot / dts / socfpga.dtsi
L2: bộ nhớ cache-controller@fffef000 {
tương thích = "arm, PL310-bộ nhớ đệm";
reg = <0xfffef000 0x1000>;
ngắt = <0 38 0x04>;
thống nhất bộ nhớ đệm;
mức bộ nhớ đệm = <2>;
cánh tay, độ trễ thẻ = <1 1 1>;
arm, độ trễ dữ liệu = <2 1 1>;
tìm nạp trước dữ liệu = <1>;
tìm nạp trước-instr = <1>;
cánh tay, chia sẻ-ghi đè; # Kiểm tra xem đây là hiện tại
cánh tay, hai dòngđiền = <1>;
cánh tay, double-linefill-incr = <0>;
cánh tay, double-linefill-wrap = <1>;
cánh tay, tìm nạp trước-thả = <0>;
cánh tay, tìm nạp trước-bù đắp = <7>;
};
2. Chỉnh sửa (các) nút ethernet để thêm (các) tham chiếu cho snps, axi-config và thêm các nút cho snps, axi-config trong arch / arm / boot / dts / socfpga.dtsi
Ví dụ cho GMAC0:
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
chỉ số E404220.. 90a0560 100644
--- a/arch/arm/boot/dts/socfpga.dtsi
+++ b/arch/arm/boot/dts/socfpga.dtsi
@@ -560,10 +560,16 @@
đặt lại tên = "stmmaceth";
snps, multicast-filter-bins = <256>;
snps, perfect-filter-entries = < 128>;
+ SNPS,axi-config = <&stmmac_axi_setup_0>;
TX-FIFO-depth = <4096>;
rx-fifo-depth = <4096>;
trạng thái = "bị vô hiệu hóa";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ SNPS,wr_osr_lmt = <0xf>;
+ SNPS,rd_osr_lmt = <0xf>;
+ };
Sự cố này đã được khắc phục bắt đầu với các nhánh linux-socfpga-5.10.120-lts và linux-socfpga-5.15.30-lts