• Home
  • Raw
  • Download

Lines Matching +full:disable +full:- +full:key +full:- +full:power

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
12 #include "ufshcd-crypto.h"
13 #include "ufs-qcom.h"
54 /* BIST ("built-in self-test"?) status flags */
62 writel((val), (host)->ice_mmio + (reg))
64 readl((host)->ice_mmio + (reg))
68 struct device *dev = host->hba->dev; in qcom_ice_supported()
97 struct ufs_hba *hba = host->hba; in ufs_qcom_ice_init()
98 struct device *dev = hba->dev; in ufs_qcom_ice_init()
110 goto disable; in ufs_qcom_ice_init()
115 goto disable; in ufs_qcom_ice_init()
118 host->ice_mmio = devm_ioremap_resource(dev, res); in ufs_qcom_ice_init()
119 if (IS_ERR(host->ice_mmio)) { in ufs_qcom_ice_init()
120 err = PTR_ERR(host->ice_mmio); in ufs_qcom_ice_init()
126 goto disable; in ufs_qcom_ice_init()
130 disable: in ufs_qcom_ice_init()
132 hba->caps &= ~UFSHCD_CAP_CRYPTO; in ufs_qcom_ice_init()
142 * Enable low power mode sequence in qcom_ice_low_power_mode_enable()
143 * [0]-0, [1]-0, [2]-0, [3]-E, [4]-0, [5]-0, [6]-0, [7]-0 in qcom_ice_low_power_mode_enable()
164 if (!(host->hba->caps & UFSHCD_CAP_CRYPTO)) in ufs_qcom_ice_enable()
184 return -ETIMEDOUT; in qcom_ice_wait_bist_status()
192 if (!(host->hba->caps & UFSHCD_CAP_CRYPTO)) in ufs_qcom_ice_resume()
197 dev_err(host->hba->dev, "BIST status error (%d)\n", err); in ufs_qcom_ice_resume()
204 * Program a key into a QC ICE keyslot, or evict a keyslot. QC ICE requires
205 * vendor-specific SCM calls for this; it doesn't support the standard way.
214 } key; in ufs_qcom_ice_program_key() local
218 if (!(cfg->config_enable & UFS_CRYPTO_CONFIGURATION_ENABLE)) in ufs_qcom_ice_program_key()
221 /* Only AES-256-XTS has been tested so far. */ in ufs_qcom_ice_program_key()
222 cap = hba->crypto_cap_array[cfg->crypto_cap_idx]; in ufs_qcom_ice_program_key()
225 dev_err_ratelimited(hba->dev, in ufs_qcom_ice_program_key()
228 return -EINVAL; in ufs_qcom_ice_program_key()
231 memcpy(key.bytes, cfg->crypto_key, AES_256_XTS_KEY_SIZE); in ufs_qcom_ice_program_key()
234 * The SCM call byte-swaps the 32-bit words of the key. So we have to in ufs_qcom_ice_program_key()
235 * do the same, in order for the final key be correct. in ufs_qcom_ice_program_key()
237 for (i = 0; i < ARRAY_SIZE(key.words); i++) in ufs_qcom_ice_program_key()
238 __cpu_to_be32s(&key.words[i]); in ufs_qcom_ice_program_key()
240 err = qcom_scm_ice_set_key(slot, key.bytes, AES_256_XTS_KEY_SIZE, in ufs_qcom_ice_program_key()
242 cfg->data_unit_size); in ufs_qcom_ice_program_key()
243 memzero_explicit(&key, sizeof(key)); in ufs_qcom_ice_program_key()