mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
2afbf43a4a
This takes the already existing duplicated support in both ufs-qcom and sdhci-msm drivers and makes it a dedicated driver that can be used by both mentioned drivers. The reason for this is because, staring with SM8550, the ICE IP block is shared between UFS and SDCC, which means we need to probe a dedicated device and share it between those two consumers. So let's add the ICE dedicated driver as a soc driver. Platforms that already have ICE supported, will use it as a library as the of_qcom_ice_get will return an ICE instance created for the consumer device. This allows the backwards compatibility with old-style devicetree approach. Also, add support to HW version 4.x since it works out-of-the-box with the current driver. The 4.x HW version is found on SM8550 platform. Signed-off-by: Abel Vesa <abel.vesa@linaro.org> Reviewed-by: Bjorn Andersson <andersson@kernel.org> Signed-off-by: Bjorn Andersson <andersson@kernel.org> Link: https://lore.kernel.org/r/20230407105029.2274111-4-abel.vesa@linaro.org
38 lines
1008 B
C
38 lines
1008 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2023, Linaro Limited
|
|
*/
|
|
|
|
#ifndef __QCOM_ICE_H__
|
|
#define __QCOM_ICE_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct qcom_ice;
|
|
|
|
enum qcom_ice_crypto_key_size {
|
|
QCOM_ICE_CRYPTO_KEY_SIZE_INVALID = 0x0,
|
|
QCOM_ICE_CRYPTO_KEY_SIZE_128 = 0x1,
|
|
QCOM_ICE_CRYPTO_KEY_SIZE_192 = 0x2,
|
|
QCOM_ICE_CRYPTO_KEY_SIZE_256 = 0x3,
|
|
QCOM_ICE_CRYPTO_KEY_SIZE_512 = 0x4,
|
|
};
|
|
|
|
enum qcom_ice_crypto_alg {
|
|
QCOM_ICE_CRYPTO_ALG_AES_XTS = 0x0,
|
|
QCOM_ICE_CRYPTO_ALG_BITLOCKER_AES_CBC = 0x1,
|
|
QCOM_ICE_CRYPTO_ALG_AES_ECB = 0x2,
|
|
QCOM_ICE_CRYPTO_ALG_ESSIV_AES_CBC = 0x3,
|
|
};
|
|
|
|
int qcom_ice_enable(struct qcom_ice *ice);
|
|
int qcom_ice_resume(struct qcom_ice *ice);
|
|
int qcom_ice_suspend(struct qcom_ice *ice);
|
|
int qcom_ice_program_key(struct qcom_ice *ice,
|
|
u8 algorithm_id, u8 key_size,
|
|
const u8 crypto_key[], u8 data_unit_size,
|
|
int slot);
|
|
int qcom_ice_evict_key(struct qcom_ice *ice, int slot);
|
|
struct qcom_ice *of_qcom_ice_get(struct device *dev);
|
|
#endif /* __QCOM_ICE_H__ */
|