> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf Of Jacob 
> Keller
> Sent: 02 August 2025 03:57
> To: Temerkhanov, Sergey <[email protected]>; Kitszel, Przemyslaw 
> <[email protected]>; Nitka, Grzegorz <[email protected]>; 
> [email protected]; Intel Wired LAN <[email protected]>; 
> Nguyen, Anthony L <[email protected]>
> Cc: Keller, Jacob E <[email protected]>; Loktionov, Aleksandr 
> <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: use fixed adapter index for 
> E825C embedded devices
>
> The ice_adapter structure is used by the ice driver to connect multiple 
> physical functions of a device in software. It was introduced by commit 
> 0e2bddf9e5f9 ("ice: add ice_adapter for shared data across PFs on the same 
> NIC") and is primarily used for PTP support, as well as for handling certain 
> cross-PF synchronization.
>
> The original design of ice_adapter used PCI address information to determine 
> which devices should be connected. This was extended to support E825C devices 
> by commit fdb7f54700b1 ("ice: Initial support for E825C hardware in 
> ice_adapter"), which used the device ID for E825C devices instead of the PCI 
> address.
>
> Later, commit 0093cb194a75 ("ice: use DSN instead of PCI BDF for ice_adapter 
> index") replaced the use of Bus/Device/Function addressing with use of the 
> device serial number.
>
> E825C devices may appear in "Dual NAC" configuration which has multiple 
> physical devices tied to the same clock source and which need to use the same 
> ice_adapter. Unfortunately, each "NAC" has its own NVM which has its own 
> unique Device Serial Number. Thus, use of the DSN for connecting ice_adapter 
> does not work properly. It "worked" in the pre-production systems because the 
> DSN was not initialized on the test NVMs and all the NACs had the same zero'd 
> serial number.
>
> Since we cannot rely on the DSN, lets fall back to the logic in the original 
> E825C support which used the device ID. This is safe for E825C only because 
> of the embedded nature of the device. It isn't a discreet adapter that can be 
> plugged into an arbitrary system. All E825C devices on a given system are 
> connected to the same clock source and need to be configured through the same 
> PTP clock.
>
> To make this separation clear, reserve bit 63 of the 64-bit index values as a 
> "fixed index" indicator. Always clear this bit when using the device serial 
> number as an index.
>
> For E825C, use a fixed value defined as the 0x579C E825C backplane device ID 
> bitwise ORed with the fixed index indicator. This is slightly different than 
> the original logic of just using the device ID directly. Doing so prevents a 
> potential issue with systems where only one of the NACs is connected with an 
> external PHY over SGMII. In that case, one NAC would have the E825C_SGMII 
> device ID, but the other would not.
>
> Separate the determination of the full 64-bit index from the 32-bit reduction 
> logic. Provide both ice_adapter_index() and a wrapping
ice_adapter_xa_index() which handles reducing the index to a long on 32-bit 
systems. As before, cache the full index value in the adapter structure to warn 
about collisions.
>
> This fixes issues with E825C not initializing PTP on both NACs, due to 
> failure to connect the appropriate devices to the same ice_adapter.
>
> Fixes: 0093cb194a75 ("ice: use DSN instead of PCI BDF for ice_adapter index")
> Signed-off-by: Jacob Keller <[email protected]>
> Reviewed-by: Grzegorz Nitka <[email protected]>
> Reviewed-by: Aleksandr Loktionov <[email protected]>
> ---
> It turns out that using the device serial number does not work for E825C 
> boards. I spoke with the team involved in the NVM image generation, and its 
> not feasible at this point to change the process for generating the NVMs for 
> E825C. We're stuck with the case that E825C Dual-NAC boards will have 
> independent DSN for each NAC.
>
> As far as I can tell, the only suitable fallback is to rely on the embedded 
> nature of the E825C device. We know that all current systems with E825C need 
> to have their ice_adapter connected. There are no plans to build platforms 
> with multiple E825C devices. The E825C variant is not a discreet board, so 
> customers can't simply plug an extra in. Thus, this change reverts back to 
> using the device ID for E825C systems, instead of the serial number.
> ---
> drivers/net/ethernet/intel/ice/ice_adapter.h |  4 +--  
> drivers/net/ethernet/intel/ice/ice_adapter.c | 49 +++++++++++++++++++++-------
> 2 files changed, 40 insertions(+), 13 deletions(-)
>

Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)

Reply via email to