@@ -380,10 +380,21 @@ static uint16_t amdgpu_discovery_calculate_checksum(uint8_t *data, uint32_t size
380380 return checksum ;
381381}
382382
383- static inline bool amdgpu_discovery_verify_checksum (uint8_t * data , uint32_t size ,
383+ static inline bool amdgpu_discovery_verify_checksum (struct amdgpu_device * adev ,
384+ uint8_t * data , uint32_t size ,
384385 uint16_t expected )
385386{
386- return !!(amdgpu_discovery_calculate_checksum (data , size ) == expected );
387+ uint16_t calculated ;
388+
389+ calculated = amdgpu_discovery_calculate_checksum (data , size );
390+
391+ if (calculated != expected ) {
392+ dev_err (adev -> dev , "Discovery checksum failed: calc 0x%04x != exp 0x%04x, size %u.\n" ,
393+ calculated , expected , size );
394+ return false;
395+ }
396+
397+ return true;
387398}
388399
389400static inline bool amdgpu_discovery_verify_binary_signature (uint8_t * binary )
@@ -439,7 +450,7 @@ static int amdgpu_discovery_verify_npsinfo(struct amdgpu_device *adev,
439450 return - EINVAL ;
440451 }
441452
442- if (!amdgpu_discovery_verify_checksum (discovery_bin + offset ,
453+ if (!amdgpu_discovery_verify_checksum (adev , discovery_bin + offset ,
443454 le32_to_cpu (nhdr -> size_bytes ),
444455 checksum )) {
445456 dev_dbg (adev -> dev , "invalid nps info data table checksum\n" );
@@ -529,7 +540,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
529540 size = le16_to_cpu (bhdr -> binary_size ) - offset ;
530541 checksum = le16_to_cpu (bhdr -> binary_checksum );
531542
532- if (!amdgpu_discovery_verify_checksum (discovery_bin + offset , size ,
543+ if (!amdgpu_discovery_verify_checksum (adev , discovery_bin + offset , size ,
533544 checksum )) {
534545 dev_err (adev -> dev , "invalid ip discovery binary checksum\n" );
535546 r = - EINVAL ;
@@ -549,7 +560,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
549560 goto out ;
550561 }
551562
552- if (!amdgpu_discovery_verify_checksum (discovery_bin + offset ,
563+ if (!amdgpu_discovery_verify_checksum (adev , discovery_bin + offset ,
553564 le16_to_cpu (ihdr -> size ),
554565 checksum )) {
555566 dev_err (adev -> dev , "invalid ip discovery data table checksum\n" );
@@ -572,7 +583,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
572583 goto out ;
573584 }
574585
575- if (!amdgpu_discovery_verify_checksum (discovery_bin + offset ,
586+ if (!amdgpu_discovery_verify_checksum (adev , discovery_bin + offset ,
576587 le32_to_cpu (ghdr -> size ),
577588 checksum )) {
578589 dev_err (adev -> dev , "invalid gc data table checksum\n" );
@@ -595,7 +606,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
595606 goto out ;
596607 }
597608
598- if (!amdgpu_discovery_verify_checksum (
609+ if (!amdgpu_discovery_verify_checksum (adev ,
599610 discovery_bin + offset ,
600611 sizeof (struct harvest_table ), checksum )) {
601612 dev_err (adev -> dev , "invalid harvest data table checksum\n" );
@@ -618,7 +629,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
618629 goto out ;
619630 }
620631
621- if (!amdgpu_discovery_verify_checksum (
632+ if (!amdgpu_discovery_verify_checksum (adev ,
622633 discovery_bin + offset ,
623634 le32_to_cpu (vhdr -> size_bytes ), checksum )) {
624635 dev_err (adev -> dev , "invalid vcn data table checksum\n" );
@@ -641,7 +652,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
641652 goto out ;
642653 }
643654
644- if (!amdgpu_discovery_verify_checksum (
655+ if (!amdgpu_discovery_verify_checksum (adev ,
645656 discovery_bin + offset ,
646657 le32_to_cpu (mhdr -> size_bytes ), checksum )) {
647658 dev_err (adev -> dev , "invalid mall data table checksum\n" );
@@ -1867,7 +1878,7 @@ static int amdgpu_discovery_refresh_nps_info(struct amdgpu_device *adev,
18671878 sizeof (* nps_data ), false);
18681879
18691880 nhdr = (struct nps_info_header * )(nps_data );
1870- if (!amdgpu_discovery_verify_checksum ((uint8_t * )nps_data ,
1881+ if (!amdgpu_discovery_verify_checksum (adev , (uint8_t * )nps_data ,
18711882 le32_to_cpu (nhdr -> size_bytes ),
18721883 checksum )) {
18731884 dev_err (adev -> dev , "nps data refresh, checksum mismatch\n" );
0 commit comments