Lines Matching defs:hba

20 static int ufshcd_program_key(struct ufs_hba *hba,
24 u32 slot_offset = hba->crypto_cfg_register + slot * sizeof(*cfg);
27 ufshcd_hold(hba, false);
29 if (hba->vops && hba->vops->program_key) {
30 err = hba->vops->program_key(hba, cfg, slot);
35 ufshcd_writel(hba, 0, slot_offset + 16 * sizeof(cfg->reg_val[0]));
37 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[i]),
41 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[17]),
44 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[16]),
47 ufshcd_release(hba);
55 struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
56 const union ufs_crypto_cap_entry *ccap_array = hba->crypto_cap_array;
66 for (i = 0; i < hba->crypto_capabilities.num_crypto_cap; i++) {
91 err = ufshcd_program_key(hba, &cfg, slot);
97 static int ufshcd_clear_keyslot(struct ufs_hba *hba, int slot)
105 return ufshcd_program_key(hba, &cfg, slot);
112 struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
114 return ufshcd_clear_keyslot(hba, slot);
117 bool ufshcd_crypto_enable(struct ufs_hba *hba)
119 if (!(hba->caps & UFSHCD_CAP_CRYPTO))
123 blk_ksm_reprogram_all_keys(&hba->ksm);
149 * fields in hba
150 * @hba: Per adapter instance
154 int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
165 if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) ||
166 !(hba->caps & UFSHCD_CAP_CRYPTO))
169 hba->crypto_capabilities.reg_val =
170 cpu_to_le32(ufshcd_readl(hba, REG_UFS_CCAP));
171 hba->crypto_cfg_register =
172 (u32)hba->crypto_capabilities.config_array_ptr * 0x100;
173 hba->crypto_cap_array =
174 devm_kcalloc(hba->dev, hba->crypto_capabilities.num_crypto_cap,
175 sizeof(hba->crypto_cap_array[0]), GFP_KERNEL);
176 if (!hba->crypto_cap_array) {
182 err = blk_ksm_init(&hba->ksm,
183 hba->crypto_capabilities.config_count + 1);
187 hba->ksm.ksm_ll_ops = ufshcd_ksm_ops;
189 hba->ksm.max_dun_bytes_supported = 8;
190 hba->ksm.dev = hba->dev;
196 for (cap_idx = 0; cap_idx < hba->crypto_capabilities.num_crypto_cap;
198 hba->crypto_cap_array[cap_idx].reg_val =
199 cpu_to_le32(ufshcd_readl(hba,
203 hba->crypto_cap_array[cap_idx]);
205 hba->ksm.crypto_modes_supported[blk_mode_num] |=
206 hba->crypto_cap_array[cap_idx].sdus_mask * 512;
212 devm_kfree(hba->dev, hba->crypto_cap_array);
215 hba->caps &= ~UFSHCD_CAP_CRYPTO;
221 * @hba: Per adapter instance
223 void ufshcd_init_crypto(struct ufs_hba *hba)
227 if (!(hba->caps & UFSHCD_CAP_CRYPTO))
231 for (slot = 0; slot < hba->crypto_capabilities.config_count + 1; slot++)
232 ufshcd_clear_keyslot(hba, slot);
235 void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
238 if (hba->caps & UFSHCD_CAP_CRYPTO)
239 blk_ksm_register(&hba->ksm, q);
242 void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba)
244 blk_ksm_destroy(&hba->ksm);