Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: qat - add MMP FW support to accel engine

Add code that loads the MMP firmware

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Tadeusz Struk and committed by
Herbert Xu
28cfaf67 f3dd7e60

+42 -5
+2
drivers/crypto/qat/qat_common/adf_accel_devices.h
··· 152 152 void (*exit_arb)(struct adf_accel_dev *accel_dev); 153 153 void (*enable_ints)(struct adf_accel_dev *accel_dev); 154 154 const char *fw_name; 155 + const char *fw_mmp_name; 155 156 uint32_t pci_dev_id; 156 157 uint32_t fuses; 157 158 uint32_t accel_capabilities_mask; ··· 186 185 struct adf_fw_loader_data { 187 186 struct icp_qat_fw_loader_handle *fw_loader; 188 187 const struct firmware *uof_fw; 188 + const struct firmware *mmp_fw; 189 189 }; 190 190 191 191 struct adf_accel_dev {
+37 -5
drivers/crypto/qat/qat_common/adf_accel_engine.c
··· 55 55 { 56 56 struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; 57 57 struct adf_hw_device_data *hw_device = accel_dev->hw_device; 58 - void *uof_addr; 59 - uint32_t uof_size; 58 + void *uof_addr, *mmp_addr; 59 + u32 uof_size, mmp_size; 60 60 61 + if (!hw_device->fw_name) 62 + return 0; 63 + 64 + if (request_firmware(&loader_data->mmp_fw, hw_device->fw_mmp_name, 65 + &accel_dev->accel_pci_dev.pci_dev->dev)) { 66 + dev_err(&GET_DEV(accel_dev), "Failed to load MMP firmware %s\n", 67 + hw_device->fw_mmp_name); 68 + return -EFAULT; 69 + } 61 70 if (request_firmware(&loader_data->uof_fw, hw_device->fw_name, 62 71 &accel_dev->accel_pci_dev.pci_dev->dev)) { 63 - dev_err(&GET_DEV(accel_dev), "Failed to load firmware %s\n", 72 + dev_err(&GET_DEV(accel_dev), "Failed to load UOF firmware %s\n", 64 73 hw_device->fw_name); 65 - return -EFAULT; 74 + goto out_err; 66 75 } 67 76 68 77 uof_size = loader_data->uof_fw->size; 69 78 uof_addr = (void *)loader_data->uof_fw->data; 79 + mmp_size = loader_data->mmp_fw->size; 80 + mmp_addr = (void *)loader_data->mmp_fw->data; 81 + qat_uclo_wr_mimage(loader_data->fw_loader, mmp_addr, mmp_size); 70 82 if (qat_uclo_map_uof_obj(loader_data->fw_loader, uof_addr, uof_size)) { 71 83 dev_err(&GET_DEV(accel_dev), "Failed to map UOF\n"); 72 84 goto out_err; 73 85 } 74 86 if (qat_uclo_wr_all_uimage(loader_data->fw_loader)) { 75 - dev_err(&GET_DEV(accel_dev), "Failed to map UOF\n"); 87 + dev_err(&GET_DEV(accel_dev), "Failed to load UOF\n"); 76 88 goto out_err; 77 89 } 78 90 return 0; ··· 97 85 void adf_ae_fw_release(struct adf_accel_dev *accel_dev) 98 86 { 99 87 struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; 88 + struct adf_hw_device_data *hw_device = accel_dev->hw_device; 89 + 90 + if (!hw_device->fw_name) 91 + return; 100 92 101 93 qat_uclo_del_uof_obj(loader_data->fw_loader); 102 94 qat_hal_deinit(loader_data->fw_loader); 103 95 release_firmware(loader_data->uof_fw); 96 + release_firmware(loader_data->mmp_fw); 104 97 loader_data->uof_fw = NULL; 98 + loader_data->mmp_fw = NULL; 105 99 loader_data->fw_loader = NULL; 106 100 } 107 101 ··· 116 98 struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; 117 99 struct adf_hw_device_data *hw_data = accel_dev->hw_device; 118 100 uint32_t ae_ctr, ae, max_aes = GET_MAX_ACCELENGINES(accel_dev); 101 + 102 + if (!hw_data->fw_name) 103 + return 0; 119 104 120 105 for (ae = 0, ae_ctr = 0; ae < max_aes; ae++) { 121 106 if (hw_data->ae_mask & (1 << ae)) { ··· 137 116 struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; 138 117 struct adf_hw_device_data *hw_data = accel_dev->hw_device; 139 118 uint32_t ae_ctr, ae, max_aes = GET_MAX_ACCELENGINES(accel_dev); 119 + 120 + if (!hw_data->fw_name) 121 + return 0; 140 122 141 123 for (ae = 0, ae_ctr = 0; ae < max_aes; ae++) { 142 124 if (hw_data->ae_mask & (1 << ae)) { ··· 167 143 int adf_ae_init(struct adf_accel_dev *accel_dev) 168 144 { 169 145 struct adf_fw_loader_data *loader_data; 146 + struct adf_hw_device_data *hw_device = accel_dev->hw_device; 147 + 148 + if (!hw_device->fw_name) 149 + return 0; 170 150 171 151 loader_data = kzalloc(sizeof(*loader_data), GFP_KERNEL); 172 152 if (!loader_data) ··· 194 166 int adf_ae_shutdown(struct adf_accel_dev *accel_dev) 195 167 { 196 168 struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; 169 + struct adf_hw_device_data *hw_device = accel_dev->hw_device; 170 + 171 + if (!hw_device->fw_name) 172 + return 0; 197 173 198 174 qat_hal_deinit(loader_data->fw_loader); 199 175 kfree(accel_dev->fw_loader);
+1
drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
··· 227 227 hw_data->get_sram_bar_id = get_sram_bar_id; 228 228 hw_data->get_sku = get_sku; 229 229 hw_data->fw_name = ADF_DH895XCC_FW; 230 + hw_data->fw_mmp_name = ADF_DH895XCC_MMP; 230 231 hw_data->init_admin_comms = adf_init_admin_comms; 231 232 hw_data->exit_admin_comms = adf_exit_admin_comms; 232 233 hw_data->init_arb = adf_init_arb;
+2
drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h
··· 85 85 #define ADF_DH895XCC_ADMINMSGLR_OFFSET (0x3A000 + 0x578) 86 86 #define ADF_DH895XCC_MAILBOX_BASE_OFFSET 0x20970 87 87 #define ADF_DH895XCC_MAILBOX_STRIDE 0x1000 88 + /* FW names */ 88 89 #define ADF_DH895XCC_FW "qat_895xcc.bin" 90 + #define ADF_DH895XCC_MMP "qat_mmp.bin" 89 91 #endif