diff --git a/drivers/scsi/ufs/ufshcd-crypto.c b/drivers/scsi/ufs/ufshcd-crypto.c index b52f0b97393d..9bb8251dd475 100644 --- a/drivers/scsi/ufs/ufshcd-crypto.c +++ b/drivers/scsi/ufs/ufshcd-crypto.c @@ -122,8 +122,7 @@ static int ufshcd_crypto_keyslot_evict(struct blk_keyslot_manager *ksm, return 0; } -/* Functions implementing UFSHCI v2.1 specification behaviour */ -bool ufshcd_crypto_enable_spec(struct ufs_hba *hba) +bool ufshcd_crypto_enable(struct ufs_hba *hba) { if (!(hba->caps & UFSHCD_CAP_CRYPTO)) return false; @@ -132,7 +131,6 @@ bool ufshcd_crypto_enable_spec(struct ufs_hba *hba) blk_ksm_reprogram_all_keys(&hba->ksm); return true; } -EXPORT_SYMBOL(ufshcd_crypto_enable_spec); static const struct blk_ksm_ll_ops ufshcd_ksm_ops = { .keyslot_program = ufshcd_crypto_keyslot_program, @@ -160,8 +158,7 @@ ufshcd_find_blk_crypto_mode(union ufs_crypto_cap_entry cap) * * Return: 0 if crypto was initialized or is not supported, else a -errno value. */ -int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba, - const struct blk_ksm_ll_ops *ksm_ops) +int ufshcd_hba_init_crypto(struct ufs_hba *hba) { int cap_idx = 0; int err = 0; @@ -196,7 +193,7 @@ int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba, if (err) goto out_free_caps; - hba->ksm.ksm_ll_ops = *ksm_ops; + hba->ksm.ksm_ll_ops = ufshcd_ksm_ops; /* UFS only supports 8 bytes for any DUN */ hba->ksm.max_dun_bytes_supported = 8; hba->ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS; @@ -231,118 +228,15 @@ int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba, hba->caps &= ~UFSHCD_CAP_CRYPTO; return err; } -EXPORT_SYMBOL(ufshcd_hba_init_crypto_spec); - -void ufshcd_crypto_setup_rq_keyslot_manager_spec(struct ufs_hba *hba, - struct request_queue *q) -{ - if (hba->caps & UFSHCD_CAP_CRYPTO) - blk_ksm_register(&hba->ksm, q); -} -EXPORT_SYMBOL(ufshcd_crypto_setup_rq_keyslot_manager_spec); - -void ufshcd_crypto_destroy_keyslot_manager_spec(struct ufs_hba *hba) -{ - blk_ksm_destroy(&hba->ksm); -} -EXPORT_SYMBOL(ufshcd_crypto_destroy_keyslot_manager_spec); - -/* Crypto Variant Ops Support */ - -bool ufshcd_crypto_enable(struct ufs_hba *hba) -{ - if (hba->crypto_vops && hba->crypto_vops->enable) - return hba->crypto_vops->enable(hba); - - return ufshcd_crypto_enable_spec(hba); -} - -int ufshcd_hba_init_crypto(struct ufs_hba *hba) -{ - if (hba->crypto_vops && hba->crypto_vops->hba_init_crypto) - return hba->crypto_vops->hba_init_crypto(hba, - &ufshcd_ksm_ops); - - return ufshcd_hba_init_crypto_spec(hba, &ufshcd_ksm_ops); -} void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba, struct request_queue *q) { - if (hba->crypto_vops && hba->crypto_vops->setup_rq_keyslot_manager) { - hba->crypto_vops->setup_rq_keyslot_manager(hba, q); - return; - } - - ufshcd_crypto_setup_rq_keyslot_manager_spec(hba, q); + if (hba->caps & UFSHCD_CAP_CRYPTO) + blk_ksm_register(&hba->ksm, q); } void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba) { - if (hba->crypto_vops && hba->crypto_vops->destroy_keyslot_manager) { - hba->crypto_vops->destroy_keyslot_manager(hba); - return; - } - - ufshcd_crypto_destroy_keyslot_manager_spec(hba); -} - -void ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp) -{ - if (hba->crypto_vops && hba->crypto_vops->prepare_lrbp_crypto) { - hba->crypto_vops->prepare_lrbp_crypto(hba, cmd, lrbp); - return; - } - - ufshcd_prepare_lrbp_crypto_spec(hba, cmd, lrbp); -} - -int ufshcd_map_sg_crypto(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) -{ - if (hba->crypto_vops && hba->crypto_vops->map_sg_crypto) - return hba->crypto_vops->map_sg_crypto(hba, lrbp); - - return 0; -} - -int ufshcd_complete_lrbp_crypto(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp) -{ - if (hba->crypto_vops && hba->crypto_vops->complete_lrbp_crypto) - return hba->crypto_vops->complete_lrbp_crypto(hba, cmd, lrbp); - - return 0; -} - -void ufshcd_crypto_debug(struct ufs_hba *hba) -{ - if (hba->crypto_vops && hba->crypto_vops->debug) - hba->crypto_vops->debug(hba); -} - -int ufshcd_crypto_suspend(struct ufs_hba *hba, - enum ufs_pm_op pm_op) -{ - if (hba->crypto_vops && hba->crypto_vops->suspend) - return hba->crypto_vops->suspend(hba, pm_op); - - return 0; -} - -int ufshcd_crypto_resume(struct ufs_hba *hba, - enum ufs_pm_op pm_op) -{ - if (hba->crypto_vops && hba->crypto_vops->resume) - return hba->crypto_vops->resume(hba, pm_op); - - return 0; -} - -void ufshcd_crypto_set_vops(struct ufs_hba *hba, - struct ufs_hba_crypto_variant_ops *crypto_vops) -{ - hba->crypto_vops = crypto_vops; + blk_ksm_destroy(&hba->ksm); } diff --git a/drivers/scsi/ufs/ufshcd-crypto.h b/drivers/scsi/ufs/ufshcd-crypto.h index 7fbc45903d4d..9578edb63e7b 100644 --- a/drivers/scsi/ufs/ufshcd-crypto.h +++ b/drivers/scsi/ufs/ufshcd-crypto.h @@ -10,9 +10,9 @@ #include "ufshcd.h" #include "ufshci.h" -static inline void ufshcd_prepare_lrbp_crypto_spec(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp) +static inline void ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba, + struct scsi_cmnd *cmd, + struct ufshcd_lrb *lrbp) { struct request *rq = cmd->request; @@ -24,18 +24,6 @@ static inline void ufshcd_prepare_lrbp_crypto_spec(struct ufs_hba *hba, } } -bool ufshcd_crypto_enable_spec(struct ufs_hba *hba); - -struct blk_ksm_ll_ops; -int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba, - const struct blk_ksm_ll_ops *ksm_ops); - -void ufshcd_crypto_setup_rq_keyslot_manager_spec(struct ufs_hba *hba, - struct request_queue *q); - -void ufshcd_crypto_destroy_keyslot_manager_spec(struct ufs_hba *hba); - -/* Crypto Variant Ops Support */ bool ufshcd_crypto_enable(struct ufs_hba *hba); int ufshcd_hba_init_crypto(struct ufs_hba *hba); @@ -45,25 +33,6 @@ void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba, void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba); -void ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp); - -int ufshcd_map_sg_crypto(struct ufs_hba *hba, struct ufshcd_lrb *lrbp); - -int ufshcd_complete_lrbp_crypto(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp); - -void ufshcd_crypto_debug(struct ufs_hba *hba); - -int ufshcd_crypto_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op); - -int ufshcd_crypto_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op); - -void ufshcd_crypto_set_vops(struct ufs_hba *hba, - struct ufs_hba_crypto_variant_ops *crypto_vops); - #else /* CONFIG_SCSI_UFS_CRYPTO */ static inline void ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba, @@ -86,36 +55,6 @@ static inline void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba, static inline void ufshcd_crypto_destroy_keyslot_manager(struct ufs_hba *hba) { } -static inline int ufshcd_map_sg_crypto(struct ufs_hba *hba, - struct ufshcd_lrb *lrbp) -{ - return 0; -} - -static inline int ufshcd_complete_lrbp_crypto(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp) -{ - return 0; -} - -static inline void ufshcd_crypto_debug(struct ufs_hba *hba) { } - -static inline int ufshcd_crypto_suspend(struct ufs_hba *hba, - enum ufs_pm_op pm_op) -{ - return 0; -} - -static inline int ufshcd_crypto_resume(struct ufs_hba *hba, - enum ufs_pm_op pm_op) -{ - return 0; -} - -static inline void ufshcd_crypto_set_vops(struct ufs_hba *hba, - struct ufs_hba_crypto_variant_ops *crypto_vops) { } - #endif /* CONFIG_SCSI_UFS_CRYPTO */ #endif /* _UFSHCD_CRYPTO_H */ diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 38db78b68a76..96be7f6e9134 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -449,8 +449,6 @@ static void ufshcd_print_host_regs(struct ufs_hba *hba) ufshcd_print_clk_freqs(hba); ufshcd_vops_dbg_register_dump(hba); - - ufshcd_crypto_debug(hba); } static @@ -2188,7 +2186,7 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp->utr_descriptor_ptr->prd_table_length = 0; } - return ufshcd_map_sg_crypto(hba, lrbp); + return 0; } /** @@ -4896,7 +4894,6 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba, result = ufshcd_transfer_rsp_status(hba, lrbp); scsi_dma_unmap(cmd); cmd->result = result; - ufshcd_complete_lrbp_crypto(hba, cmd, lrbp); /* Mark completed command as NULL in LRB */ lrbp->cmd = NULL; lrbp->compl_time_stamp = ktime_get(); @@ -8238,10 +8235,6 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) req_link_state = UIC_LINK_OFF_STATE; } - ret = ufshcd_crypto_suspend(hba, pm_op); - if (ret) - goto out; - /* * If we can't transition into any of the low power modes * just gate the clocks. @@ -8363,7 +8356,6 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) hba->clk_gating.is_suspended = false; hba->dev_info.b_rpm_dev_flush_capable = false; ufshcd_release(hba); - ufshcd_crypto_resume(hba, pm_op); out: if (hba->dev_info.b_rpm_dev_flush_capable) { schedule_delayed_work(&hba->rpm_dev_flush_recheck_work, @@ -8391,11 +8383,9 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) { int ret; enum uic_link_state old_link_state; - enum ufs_dev_pwr_mode old_pwr_mode; hba->pm_op_in_progress = 1; old_link_state = hba->uic_link_state; - old_pwr_mode = hba->curr_dev_pwr_mode; ufshcd_hba_vreg_set_hpm(hba); /* Make sure clocks are enabled before accessing controller */ @@ -8445,10 +8435,6 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) goto set_old_link_state; } - ret = ufshcd_crypto_resume(hba, pm_op); - if (ret) - goto set_old_dev_pwr_mode; - if (ufshcd_keep_autobkops_enabled_except_suspend(hba)) ufshcd_enable_auto_bkops(hba); else @@ -8476,9 +8462,6 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) goto out; -set_old_dev_pwr_mode: - if (old_pwr_mode != hba->curr_dev_pwr_mode) - ufshcd_set_dev_pwr_mode(hba, old_pwr_mode); set_old_link_state: ufshcd_link_state_transition(hba, old_link_state, 0); vendor_suspend: diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 31a0564e5480..b448c9a2ff33 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -360,27 +360,6 @@ struct ufs_hba_variant_ops { const union ufs_crypto_cfg_entry *cfg, int slot); }; -struct blk_ksm_ll_ops; -struct ufs_hba_crypto_variant_ops { - void (*setup_rq_keyslot_manager)(struct ufs_hba *hba, - struct request_queue *q); - void (*destroy_keyslot_manager)(struct ufs_hba *hba); - int (*hba_init_crypto)(struct ufs_hba *hba, - const struct blk_ksm_ll_ops *ksm_ops); - bool (*enable)(struct ufs_hba *hba); - int (*suspend)(struct ufs_hba *hba, enum ufs_pm_op pm_op); - int (*resume)(struct ufs_hba *hba, enum ufs_pm_op pm_op); - int (*debug)(struct ufs_hba *hba); - void (*prepare_lrbp_crypto)(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp); - int (*map_sg_crypto)(struct ufs_hba *hba, struct ufshcd_lrb *lrbp); - int (*complete_lrbp_crypto)(struct ufs_hba *hba, - struct scsi_cmnd *cmd, - struct ufshcd_lrb *lrbp); - void *priv; -}; - /* clock gating state */ enum clk_gating_state { CLKS_OFF, @@ -722,7 +701,6 @@ struct ufs_hba { const struct ufs_hba_variant_ops *vops; struct ufs_hba_variant_params *vps; void *priv; - const struct ufs_hba_crypto_variant_ops *crypto_vops; size_t sg_entry_size; unsigned int irq; bool is_irq_enabled;