]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: qat - disable 420xx AE cluster when lead engine is fused off
authorAhsan Atta <ahsan.atta@intel.com>
Tue, 24 Mar 2026 11:12:34 +0000 (11:12 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 3 Apr 2026 00:56:11 +0000 (08:56 +0800)
The get_ae_mask() function only disables individual engines based on
the fuse register, but engines are organized in clusters of 4. If the
lead engine of a cluster is fused off, the entire cluster must be
disabled.

Replace the single bitmask inversion with explicit test_bit() checks
on the lead engine of each group, disabling the full ADF_AE_GROUP
when the lead bit is set.

Signed-off-by: Ahsan Atta <ahsan.atta@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Fixes: fcf60f4bcf54 ("crypto: qat - add support for 420xx devices")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/intel/qat/qat_420xx/adf_420xx_hw_data.c

index 35105213d40c09de68a4785d4bdc66b50b7add35..0002122219bcbc3875dcbe656388a5395ef46be0 100644 (file)
@@ -97,9 +97,25 @@ static struct adf_hw_device_class adf_420xx_class = {
 
 static u32 get_ae_mask(struct adf_hw_device_data *self)
 {
-       u32 me_disable = self->fuses[ADF_FUSECTL4];
+       unsigned long fuses = self->fuses[ADF_FUSECTL4];
+       u32 mask = ADF_420XX_ACCELENGINES_MASK;
 
-       return ~me_disable & ADF_420XX_ACCELENGINES_MASK;
+       if (test_bit(0, &fuses))
+               mask &= ~ADF_AE_GROUP_0;
+
+       if (test_bit(4, &fuses))
+               mask &= ~ADF_AE_GROUP_1;
+
+       if (test_bit(8, &fuses))
+               mask &= ~ADF_AE_GROUP_2;
+
+       if (test_bit(12, &fuses))
+               mask &= ~ADF_AE_GROUP_3;
+
+       if (test_bit(16, &fuses))
+               mask &= ~ADF_AE_GROUP_4;
+
+       return mask;
 }
 
 static u32 uof_get_num_objs(struct adf_accel_dev *accel_dev)