diff mbox series

[iwl-net,v1] ice: Fix package download algorithm

Message ID 20240318162958.991829-1-paul.greenwalt@intel.com
State Changes Requested
Headers show
Series [iwl-net,v1] ice: Fix package download algorithm | expand

Commit Message

Paul Greenwalt March 18, 2024, 4:29 p.m. UTC
From: Dan Nowlin <dan.nowlin@intel.com>

Previously, the code would assume that only "Modular Signature Segment"
existed. Given a package with both a "Reference Signature Segment" and a
"Modular Signature Segment" the download would not have been successful
because an incorrect sequence of buffers would be sent to the firmware.

Update download flow to detect a "Reference Signature Segment" and to
only download the buffers in the signature segment in this case, and to
skip downloading any buffers from the configuration segment.

Fixes: 3cbdb0343022 ("ice: Add support for E830 DDP package segment")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Dan Nowlin <dan.nowlin@intel.com>
Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ddp.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Paul Menzel March 18, 2024, 5:44 p.m. UTC | #1
Dear Paul, dear Dan,


Thank you for the patch.

Am 18.03.24 um 17:29 schrieb Paul Greenwalt:
> From: Dan Nowlin <dan.nowlin@intel.com>
> 
> Previously, the code would assume that only "Modular Signature Segment"
> existed. Given a package with both a "Reference Signature Segment" and a
> "Modular Signature Segment" the download would not have been successful
> because an incorrect sequence of buffers would be sent to the firmware.
> 
> Update download flow to detect a "Reference Signature Segment" and to
> only download the buffers in the signature segment in this case, and to
> skip downloading any buffers from the configuration segment.

Could you please document the test setup (with firmware version) so 
people can reproduce the error and fix?

> Fixes: 3cbdb0343022 ("ice: Add support for E830 DDP package segment")
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Dan Nowlin <dan.nowlin@intel.com>
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_ddp.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c b/drivers/net/ethernet/intel/ice/ice_ddp.c
> index 8b7504a9df31..90b9e28ddba9 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ddp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ddp.c
> @@ -1424,14 +1424,14 @@ ice_dwnld_sign_and_cfg_segs(struct ice_hw *hw, struct ice_pkg_hdr *pkg_hdr,
>   		goto exit;
>   	}
>   
> -	conf_idx = le32_to_cpu(seg->signed_seg_idx);
> -	start = le32_to_cpu(seg->signed_buf_start);
>   	count = le32_to_cpu(seg->signed_buf_count);
> -
>   	state = ice_download_pkg_sig_seg(hw, seg);
> -	if (state)
> +	if (state || !count)
>   		goto exit;
>   
> +	conf_idx = le32_to_cpu(seg->signed_seg_idx);
> +	start = le32_to_cpu(seg->signed_buf_start);
> +
>   	state = ice_download_pkg_config_seg(hw, pkg_hdr, conf_idx, start,
>   					    count);

Sorry, just reading the diff, it’s not clear to me why skipping is 
correct. Isn’t now nothing read, if the Modular and Reference Signature 
Segment exist? Maybe comments would be nice.


Kind regards,

Paul
Paul Greenwalt March 21, 2024, 12:34 a.m. UTC | #2
On 3/18/2024 10:44 AM, Paul Menzel wrote:
> Dear Paul, dear Dan,
> 
> 
> Thank you for the patch.
> 
> Am 18.03.24 um 17:29 schrieb Paul Greenwalt:
>> From: Dan Nowlin <dan.nowlin@intel.com>
>>
>> Previously, the code would assume that only "Modular Signature Segment"
>> existed. Given a package with both a "Reference Signature Segment" and a
>> "Modular Signature Segment" the download would not have been successful
>> because an incorrect sequence of buffers would be sent to the firmware.
>>
>> Update download flow to detect a "Reference Signature Segment" and to
>> only download the buffers in the signature segment in this case, and to
>> skip downloading any buffers from the configuration segment.
> 
> Could you please document the test setup (with firmware version) so
> people can reproduce the error and fix?
> 

The package isn't available yet, so there is no reproducing the error or
validating the fix.

>> Fixes: 3cbdb0343022 ("ice: Add support for E830 DDP package segment")
>> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
>> Signed-off-by: Dan Nowlin <dan.nowlin@intel.com>
>> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
>> ---
>>   drivers/net/ethernet/intel/ice/ice_ddp.c | 8 ++++----
>>   1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c
>> b/drivers/net/ethernet/intel/ice/ice_ddp.c
>> index 8b7504a9df31..90b9e28ddba9 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_ddp.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_ddp.c
>> @@ -1424,14 +1424,14 @@ ice_dwnld_sign_and_cfg_segs(struct ice_hw *hw,
>> struct ice_pkg_hdr *pkg_hdr,
>>           goto exit;
>>       }
>>   -    conf_idx = le32_to_cpu(seg->signed_seg_idx);
>> -    start = le32_to_cpu(seg->signed_buf_start);
>>       count = le32_to_cpu(seg->signed_buf_count);
>> -
>>       state = ice_download_pkg_sig_seg(hw, seg);
>> -    if (state)
>> +    if (state || !count)
>>           goto exit;
>>   +    conf_idx = le32_to_cpu(seg->signed_seg_idx);
>> +    start = le32_to_cpu(seg->signed_buf_start);
>> +
>>       state = ice_download_pkg_config_seg(hw, pkg_hdr, conf_idx, start,
>>                           count);
> 
> Sorry, just reading the diff, it’s not clear to me why skipping is
> correct. Isn’t now nothing read, if the Modular and Reference Signature
> Segment exist? Maybe comments would be nice.
>

The driver can skip the downloading process for this segment since there
are no buffers to download  (seg->signed_buf_count == 0) . The package
will contain one or more additional segments with the actual buffers
(seg->signed_buf_count > 0) to be downloaded.

I will redo the commit message to try and make this clearer.

Thanks,
Paul

> 
> Kind regards,
> 
> Paul
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c b/drivers/net/ethernet/intel/ice/ice_ddp.c
index 8b7504a9df31..90b9e28ddba9 100644
--- a/drivers/net/ethernet/intel/ice/ice_ddp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ddp.c
@@ -1424,14 +1424,14 @@  ice_dwnld_sign_and_cfg_segs(struct ice_hw *hw, struct ice_pkg_hdr *pkg_hdr,
 		goto exit;
 	}
 
-	conf_idx = le32_to_cpu(seg->signed_seg_idx);
-	start = le32_to_cpu(seg->signed_buf_start);
 	count = le32_to_cpu(seg->signed_buf_count);
-
 	state = ice_download_pkg_sig_seg(hw, seg);
-	if (state)
+	if (state || !count)
 		goto exit;
 
+	conf_idx = le32_to_cpu(seg->signed_seg_idx);
+	start = le32_to_cpu(seg->signed_buf_start);
+
 	state = ice_download_pkg_config_seg(hw, pkg_hdr, conf_idx, start,
 					    count);