mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
Revert "ANDROID: scsi: ufs: UFS crypto variant operations API"
The ufs_hba_crypto_variant_ops support is causing lots of merge conflicts with upstream, and it contains a lot of functionality that vendors didn't end up using. Drop it for now; anything that's really needed can be added back later with a proper justification. Change-Id: I59b2de431bf770b922f319d227c2b539acaf985d Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
@@ -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 @@ out:
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 @@ enable_gating:
|
||||
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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user