<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div style="margin: 0;">Thanks for the suggestion.</div><div style="margin: 0;"><br></div><div style="margin: 0;">I took half an hour to add debug logs layer by layer and finally I came to igc_init_phy_params_i225 in drivers/net/igc/base/igc_i225.c.</div><div style="margin: 0;"><br></div><div style="margin: 0;">There is a piece of code that looks like this in the function:</div><div style="margin: 0;"><br></div><div style="margin: 0;"><div style="margin: 0;">> /* Verify phy id and set remaining function pointers */</div><div style="margin: 0;">> switch (phy->id) {</div><div style="margin: 0;">> case I225_I_PHY_ID:</div><div style="margin: 0;">> case I226_LM_PHY_ID:</div><div style="margin: 0;">> phy->type<span style="white-space:pre"> </span>= igc_phy_i225;</div><div style="margin: 0;">> phy->ops.set_d0_lplu_state = igc_set_d0_lplu_state_i225;</div><div style="margin: 0;">> phy->ops.set_d3_lplu_state = igc_set_d3_lplu_state_i225;</div><div style="margin: 0;">> /* TODO - complete with GPY PHY information */</div><div style="margin: 0;">> break;</div><div style="margin: 0;">> default:</div><div style="margin: 0;">> ret_val = -IGC_ERR_PHY;</div><div style="margin: 0;">> goto out;</div><div style="margin: 0;">> }</div><div><br></div></div><div style="position:relative;zoom:1"></div><div id="divNeteaseMailCard"></div><div style="margin: 0;">The supported I225 model is I225_I with PHY_ID 0x67C9DC00, but the adapters on my Mini-PC are I225_V with PHY_ID 0x67C9DCC0.</div><div style="margin: 0;">After adding the case l2fwd is now working.</div><div style="margin: 0;"><br></div><div style="margin: 0;">BTW, I noticed that there are so many different cases (in different source files) which might generate the "Requested device xxx cannot be used" error. Introducing a standard error code may be hellpful for ordinary dpdk users, but it requires lots of work.</div><pre><br>At 2022-09-20 23:16:25, "Stephen Hemminger" <stephen@networkplumber.org> wrote:
>On Tue, 20 Sep 2022 19:04:57 +0800 (CST)
>F32 <feng32@163.com> wrote:
>
>> Hi Stephen,
>>
>>
>> I have checked related iommu_groups:
>>
>>
>> $ readlink 0000\:01\:00.0/iommu_group
>>
>> ../../../../kernel/iommu_groups/16
>>
>> $ readlink 0000\:02\:00.0/iommu_group
>>
>> ../../../../kernel/iommu_groups/17
>>
>> $ readlink 0000\:03\:00.0/iommu_group
>>
>> ../../../../kernel/iommu_groups/18
>>
>> $ readlink 0000\:04\:00.0/iommu_group
>>
>> ../../../../kernel/iommu_groups/19
>>
>> $ readlink 0000\:05\:00.0/iommu_group
>>
>> ../../../../kernel/iommu_groups/20
>>
>>
>>
>> It seems that the adapters belongs to different iommu_groups.
>
>The way I would fix it is add instrumentation (ie printf) in EAL
>code where the can not be used message is and work backwards from there.
</pre></div>