Message ID | 20250220-jk-e830-ddp-loading-fix-v2-1-7c9663a442c1@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [iwl-net,v2] ice: fix Get Tx Topology AQ command error on E830 | expand |
On Thu, Feb 20, 2025 at 03:15:24PM -0800, Jacob Keller wrote: > From: Paul Greenwalt <paul.greenwalt@intel.com> > > The Get Tx Topology AQ command (opcode 0x0418) has different read flag > requriements depending on the hardware/firmware. For E810, E822, and E823 > firmware the read flag must be set, and for newer hardware (E825 and E830) > it must not be set. > > This results in failure to configure Tx topology and the following warning > message during probe: > > DDP package does not support Tx scheduling layers switching feature - > please update to the latest DDP package and try again > > The current implementation only handles E825-C but not E830. It is > confusing as we first check ice_is_e825c() and then set the flag in the set > case. Finally, we check ice_is_e825c() again and set the flag for all other > hardware in both the set and get case. > > Instead, notice that we always need the read flag for set, but only need > the read flag for get on E810, E822, and E823 firmware. Fix the logic to > check the MAC type and set the read flag in get only on the older devices > which require it. > > Fixes: ba1124f58afd ("ice: Add E830 device IDs, MAC type and registers") > Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com> > Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> > --- > Changes in v2: > - Update commit message to include the warning users see > - Rework code to set the flag for E810 and E822 instead of to *not* set it > for E825-C and E830. We anticipate that future hardware and firmware > versions will behave like E830. > - Link to v1: https://lore.kernel.org/r/20250218-jk-e830-ddp-loading-fix-v1-1-47dc8e8d4ab5@intel.com > --- > drivers/net/ethernet/intel/ice/ice_ddp.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c b/drivers/net/ethernet/intel/ice/ice_ddp.c > index 03988be03729b76e96188864896527060c8c4d5b..59323c019544fc1f75dcb8a5d31e0b0c82932fe1 100644 > --- a/drivers/net/ethernet/intel/ice/ice_ddp.c > +++ b/drivers/net/ethernet/intel/ice/ice_ddp.c > @@ -2345,15 +2345,15 @@ ice_get_set_tx_topo(struct ice_hw *hw, u8 *buf, u16 buf_size, > cmd->set_flags |= ICE_AQC_TX_TOPO_FLAGS_SRC_RAM | > ICE_AQC_TX_TOPO_FLAGS_LOAD_NEW; > > - if (ice_is_e825c(hw)) > - desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); > + desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); > } else { > ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_get_tx_topo); > cmd->get_flags = ICE_AQC_TX_TOPO_GET_RAM; > - } > > - if (!ice_is_e825c(hw)) > - desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); > + if (hw->mac_type == ICE_MAC_E810 || > + hw->mac_type == ICE_MAC_GENERIC) > + desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); > + } > > status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); > if (status) > Thanks for fixing Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > --- > base-commit: 992ee3ed6e9fdd0be83a7daa5ff738e3cf86047f > change-id: 20250218-jk-e830-ddp-loading-fix-9efdbdfc270a > > Best regards, > -- > Jacob Keller <jacob.e.keller@intel.com> >
diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c b/drivers/net/ethernet/intel/ice/ice_ddp.c index 03988be03729b76e96188864896527060c8c4d5b..59323c019544fc1f75dcb8a5d31e0b0c82932fe1 100644 --- a/drivers/net/ethernet/intel/ice/ice_ddp.c +++ b/drivers/net/ethernet/intel/ice/ice_ddp.c @@ -2345,15 +2345,15 @@ ice_get_set_tx_topo(struct ice_hw *hw, u8 *buf, u16 buf_size, cmd->set_flags |= ICE_AQC_TX_TOPO_FLAGS_SRC_RAM | ICE_AQC_TX_TOPO_FLAGS_LOAD_NEW; - if (ice_is_e825c(hw)) - desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); + desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); } else { ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_get_tx_topo); cmd->get_flags = ICE_AQC_TX_TOPO_GET_RAM; - } - if (!ice_is_e825c(hw)) - desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); + if (hw->mac_type == ICE_MAC_E810 || + hw->mac_type == ICE_MAC_GENERIC) + desc.flags |= cpu_to_le16(ICE_AQ_FLAG_RD); + } status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd); if (status)