> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf Of > Tony Nguyen > Sent: Friday, March 13, 2026 6:51 PM > To: Loktionov, Aleksandr <[email protected]>; Korba, > Przemyslaw <[email protected]>; intel-wired- > [email protected] > Cc: [email protected]; Kitszel, Przemyslaw > <[email protected]> > Subject: Re: [Intel-wired-lan] [PATCH iwl-net] ice: fix posted write support > for sideband queue operations > > > > On 3/10/2026 4:17 AM, Loktionov, Aleksandr wrote: > > > > > >> -----Original Message----- > >> From: Intel-wired-lan <[email protected]> On Behalf > >> Of Przemyslaw Korba > >> Sent: Tuesday, March 10, 2026 12:07 PM > >> To: [email protected] > >> Cc: [email protected]; Nguyen, Anthony L > >> <[email protected]>; Kitszel, Przemyslaw > >> <[email protected]>; Korba, Przemyslaw > >> <[email protected]> > >> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: fix posted write > >> support for sideband queue operations > >> > >> On E830, PTP time adjustment commands sent via SBQ don't generate > >> completion responses, causing the driver to timeout waiting and return > >> -EIO, when trying: > >> > >> phc_ctl eth8 get adj 2 get > >> dmesg: ice 0000:1a:00.0: PTP failed to adjust time, err -5 > >> > >> Add support for posted mode not to wait for completion response. > >> > >> Fixes: 8f5ee3c477a8 ("ice: add support for sideband messages") > >> Signed-off-by: Przemyslaw Korba <[email protected]> > >> --- > >> drivers/net/ethernet/intel/ice/ice_common.c | 7 ++++++- > >> drivers/net/ethernet/intel/ice/ice_controlq.c | 4 ++++ > >> drivers/net/ethernet/intel/ice/ice_controlq.h | 1 + > >> 3 files changed, 11 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c > >> b/drivers/net/ethernet/intel/ice/ice_common.c > >> index 8866902efb91..df9e5422b981 100644 > >> --- a/drivers/net/ethernet/intel/ice/ice_common.c > >> +++ b/drivers/net/ethernet/intel/ice/ice_common.c > >> @@ -1765,6 +1765,7 @@ int ice_sbq_rw_reg(struct ice_hw *hw, struct > >> ice_sbq_msg_input *in, u16 flags) { > >> struct ice_sbq_cmd_desc desc = {0}; > >> struct ice_sbq_msg_req msg = {0}; > >> + struct ice_sq_cd cd = {0}; > > Please init without the 0 i.e. {} > > >> u16 msg_len; > >> int status; > >> > >> @@ -1785,10 +1786,14 @@ int ice_sbq_rw_reg(struct ice_hw *hw, struct > >> ice_sbq_msg_input *in, u16 flags) > >> */ > >> msg_len -= sizeof(msg.data); > >> > >> + if (in->opcode == ice_sbq_msg_wr) > >> + cd.postpone = 1; > >> + > >> desc.flags = cpu_to_le16(flags); > >> desc.opcode = cpu_to_le16(ice_sbq_opc_neigh_dev_req); > >> desc.param0.cmd_len = cpu_to_le16(msg_len); > >> - status = ice_sbq_send_cmd(hw, &desc, &msg, msg_len, NULL); > >> + status = ice_sbq_send_cmd(hw, &desc, &msg, msg_len, &cd); > >> + > >> if (!status && !in->opcode) > >> in->data = le32_to_cpu > >> (((struct ice_sbq_msg_cmpl *)&msg)->data); diff - > >> -git a/drivers/net/ethernet/intel/ice/ice_controlq.c > >> b/drivers/net/ethernet/intel/ice/ice_controlq.c > >> index dcb837cadd18..5fb3a8441beb 100644 > >> --- a/drivers/net/ethernet/intel/ice/ice_controlq.c > >> +++ b/drivers/net/ethernet/intel/ice/ice_controlq.c > >> @@ -1086,6 +1086,10 @@ ice_sq_send_cmd(struct ice_hw *hw, struct > >> ice_ctl_q_info *cq, > >> wr32(hw, cq->sq.tail, cq->sq.next_to_use); > >> ice_flush(hw); > >> > >> + /* If the message is posted, don't wait for completion. */ > >> + if (cd && cd->postpone) > >> + goto sq_send_command_error; > >> + > >> /* Wait for the command to complete. If it finishes within the > >> * timeout, copy the descriptor back to temp. > >> */ > >> diff --git a/drivers/net/ethernet/intel/ice/ice_controlq.h > >> b/drivers/net/ethernet/intel/ice/ice_controlq.h > >> index 788040dd662e..7c98d3a0314e 100644 > >> --- a/drivers/net/ethernet/intel/ice/ice_controlq.h > >> +++ b/drivers/net/ethernet/intel/ice/ice_controlq.h > >> @@ -77,6 +77,7 @@ struct ice_ctl_q_ring { > >> /* sq transaction details */ > >> struct ice_sq_cd { > >> struct libie_aq_desc *wb_desc; > >> + u8 postpone : 1; > > I'd recommend to rename postpone -> posted to match terminology /* > posted write */. > > I think the name is a bit misleading. To not wait, we need to set > 'postpone'? I would think postpone means we want to wait. If we want to > represent functionality, maybe something like 'skip_wait' or if we > wanted to match the documentation, perhaps 'posted' as Alex suggested. > > Thanks, > Tony > I went over the specification and 'posted' term is used consistently. So I'm inclined to Alex's suggestion.
Thanks for the patch! Grzegorz. > > Reviewed-by: Aleksandr Loktionov <[email protected]> > > > >> }; > >> > >> /* rq event information */ > >> > >> base-commit: acd2abc52dea91c3bc3d1b6dd8a92b9631d48bbf > >> -- > >> 2.43.0 > >
