Forum Discussion

K606's avatar
K606
Icon for Contributor rankContributor
6 months ago
Solved

Agilex 5 EMAC to EMAC : Driver error

I am trying to ping one EMAC from another, and have instantiated the following in the HPS:

These are exported to the top level, then connected as followed:

// https://www.intel.com/content/www/us/en/docs/programmable/814346/25-1/fpga-emac-i-o-signals.html
module dual_emac_interface (
    input  wire        clk,
    input  wire        rst_n,

    // EMAC0 Signals
    input  wire        emac0_app_rst_reset_n_wire,
    output wire        emac0_mac_tx_clk_o_wire,     // not used in 10/100 Mbps
    input  wire        emac0_mac_tx_clk_i_wire,     // not used in 1/2.5 Gbps 
    input  wire        emac0_mac_rx_clk_wire,
    output wire        emac0_mac_rst_tx_n_wire,     // (unused) reset for tx path
    output wire        emac0_mac_rst_rx_n_wire,     // (unused) reset for rx path
    output wire        emac0_mac_txen_wire,
    output wire        emac0_mac_txer_wire,
    input  wire        emac0_mac_rxdv_wire,
    input  wire        emac0_mac_rxer_wire,
    input  wire [7:0]  emac0_mac_rxd_wire,          // for 10/100 Mbps designs, only bits [3:0] are used
    input  wire        emac0_mac_col_wire,          // valid only when operating in half duplex
    input  wire        emac0_mac_crs_wire,
    output wire [2:0]  emac0_mac_speed_wire,        // set to 3'b011 for 1 Gbps (125 MHz)
    output wire [7:0]  emac0_mac_txd_o_wire,        // for 10/100 Mbps designs, only bits [3:0] are used

    // EMAC1 Signals
    input  wire        emac1_app_rst_reset_n_wire,
    output wire        emac1_mac_tx_clk_o_wire,
    input  wire        emac1_mac_tx_clk_i_wire,
    input  wire        emac1_mac_rx_clk_wire,
    output wire        emac1_mac_rst_tx_n_wire,
    output wire        emac1_mac_rst_rx_n_wire,
    output wire        emac1_mac_txen_wire,
    output wire        emac1_mac_txer_wire,
    input  wire        emac1_mac_rxdv_wire,
    input  wire        emac1_mac_rxer_wire,
    input  wire [7:0]  emac1_mac_rxd_wire,
    input  wire        emac1_mac_col_wire,
    input  wire        emac1_mac_crs_wire,
    input  wire [2:0]  emac1_mac_speed_wire,
    output wire [7:0]  emac1_mac_txd_o_wire
);
    assign emac0_app_rst_reset_n_wire = rst_n;
    //assign emac0_mac_tx_clk_i_wire = clk;                
    assign emac0_mac_rx_clk_wire = emac1_mac_tx_clk_o_wire; //rxclk0=txclk1
    assign emac0_mac_rxdv_wire = 1'b1;                      //valid held high
    assign emac0_mac_rxer_wire = emac1_mac_txer_wire;       //rx0err=tx1err
    assign emac0_mac_rxd_wire = emac1_mac_txd_o_wire;       //din0=dout1
    //assign emac0_mac_col_wire = 1'b0;                     //full duplex
    assign emac0_mac_crs_wire = 1'b1;                       //never idle

    assign emac1_app_rst_reset_n_wire = rst_n;
    //assign emac1_mac_tx_clk_i_wire = clk;                     
    assign emac1_mac_rx_clk_wire = emac0_mac_tx_clk_o_wire;    
    assign emac1_mac_rxdv_wire = 1'b1;                         
    assign emac1_mac_rxer_wire = emac0_mac_txer_wire;           
    assign emac1_mac_rxd_wire = emac0_mac_txd_o_wire;           
    //assign emac1_mac_col_wire = 1'b0;                         
    assign emac1_mac_crs_wire = 1'b1;                                

endmodule

In the .dts, I have the following config (based on the dtsi provided by altera

&gmac0 {
	status = "okay";
	phy-mode = "gmii";

	fixed-link {
		speed = <1000>;
		full-duplex;
	};
};

&gmac1 {
	status = "okay";
	phy-mode = "gmii";

	fixed-link {
		speed = <1000>;
		full-duplex;
	};
};

However, when booting into linux - the drivers appear to be unhappy:

[   26.367856] socfpga-dwmac 10810000.ethernet: Failed to reset the dma
[   26.374250] socfpga-dwmac 10810000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
[   26.383425] socfpga-dwmac 10810000.ethernet eth0: __stmmac_open: Hw setup failed
[   26.588347] socfpga-dwmac 10820000.ethernet: Failed to reset the dma
[   26.594740] socfpga-dwmac 10820000.ethernet eth1: stmmac_hw_setup: DMA engine initialization failed
[   26.603759] socfpga-dwmac 10820000.ethernet eth1: __stmmac_open: Hw setup failed

Anyone maybe know what is the issue?

18 Replies

  • K606's avatar
    K606
    Icon for Contributor rankContributor

    Hi @TiensungA_Altera ,

    In terms of the clocking setup - I am currently doing the following:

    - Feeding the output 1/2.5G port of MAC-0 to the input 1/2.5G port of MAC-1

    - Feeding a custom 25MHz clock generated in the Fabric to the 10/100M ports of each MAC

    I notice that in the HPS editor, there are these fields:

    Which is confusing, as it makes me wonder why there is the extra option here (also documented here as not used in 1/2.5G

    input  wire        emac0_mac_tx_clk_i_wire,     // not used in 1/2.5 Gbps
    When exporting the EMAC interface from Qsys to the top level design.
    However - it is not clear from this error report how the signal should in fact be connected to avoid such an error.

    I have shared the relevant bitstreams here

    Many thanks,

    K

    • TiensungA_Altera's avatar
      TiensungA_Altera
      Icon for New Contributor rankNew Contributor

      Thanks, we will have to analyze the SOF you provided to further troubleshoot this problem.

      We will revert to you when we have more insights on the issue. thanks again!

      • K606's avatar
        K606
        Icon for Contributor rankContributor

        Hi there @TiensungA_Altera - just wondering if there was any insight here? And also I would be very interested to know what method you are using to debug the designs using only the bitstreams (if that is ok?)!

        Kind Regards,
        K

  • K606's avatar
    K606
    Icon for Contributor rankContributor

    Solved: bring MAC signals up a module