162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (C) 2019-2020 ARM Limited or its affiliates. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <linux/bitops.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#define POWER_DOWN_ENABLE 0x01
762306a36Sopenharmony_ci#define POWER_DOWN_DISABLE 0x00
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/* hwrng quality: bits of true entropy per 1024 bits of input */
1062306a36Sopenharmony_ci#define CC_TRNG_QUALITY	1024
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* CryptoCell TRNG HW definitions */
1362306a36Sopenharmony_ci#define CC_TRNG_NUM_OF_ROSCS	4
1462306a36Sopenharmony_ci/* The number of words generated in the entropy holding register (EHR)
1562306a36Sopenharmony_ci * 6 words (192 bit) according to HW implementation
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ci#define CC_TRNG_EHR_IN_WORDS	6
1862306a36Sopenharmony_ci#define CC_TRNG_EHR_IN_BITS	(CC_TRNG_EHR_IN_WORDS * BITS_PER_TYPE(u32))
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define CC_HOST_RNG_IRQ_MASK BIT(CC_HOST_RGF_IRR_RNG_INT_BIT_SHIFT)
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* RNG interrupt mask */
2362306a36Sopenharmony_ci#define CC_RNG_INT_MASK (BIT(CC_RNG_IMR_EHR_VALID_INT_MASK_BIT_SHIFT) | \
2462306a36Sopenharmony_ci			 BIT(CC_RNG_IMR_AUTOCORR_ERR_INT_MASK_BIT_SHIFT) | \
2562306a36Sopenharmony_ci			 BIT(CC_RNG_IMR_CRNGT_ERR_INT_MASK_BIT_SHIFT) | \
2662306a36Sopenharmony_ci			 BIT(CC_RNG_IMR_VN_ERR_INT_MASK_BIT_SHIFT) | \
2762306a36Sopenharmony_ci			 BIT(CC_RNG_IMR_WATCHDOG_INT_MASK_BIT_SHIFT))
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci// --------------------------------------
3062306a36Sopenharmony_ci// BLOCK: RNG
3162306a36Sopenharmony_ci// --------------------------------------
3262306a36Sopenharmony_ci#define CC_RNG_IMR_REG_OFFSET	0x0100UL
3362306a36Sopenharmony_ci#define CC_RNG_IMR_EHR_VALID_INT_MASK_BIT_SHIFT	0x0UL
3462306a36Sopenharmony_ci#define CC_RNG_IMR_AUTOCORR_ERR_INT_MASK_BIT_SHIFT	0x1UL
3562306a36Sopenharmony_ci#define CC_RNG_IMR_CRNGT_ERR_INT_MASK_BIT_SHIFT	0x2UL
3662306a36Sopenharmony_ci#define CC_RNG_IMR_VN_ERR_INT_MASK_BIT_SHIFT	0x3UL
3762306a36Sopenharmony_ci#define CC_RNG_IMR_WATCHDOG_INT_MASK_BIT_SHIFT	0x4UL
3862306a36Sopenharmony_ci#define CC_RNG_ISR_REG_OFFSET	0x0104UL
3962306a36Sopenharmony_ci#define CC_RNG_ISR_EHR_VALID_BIT_SHIFT	0x0UL
4062306a36Sopenharmony_ci#define CC_RNG_ISR_EHR_VALID_BIT_SIZE	0x1UL
4162306a36Sopenharmony_ci#define CC_RNG_ISR_AUTOCORR_ERR_BIT_SHIFT	0x1UL
4262306a36Sopenharmony_ci#define CC_RNG_ISR_AUTOCORR_ERR_BIT_SIZE	0x1UL
4362306a36Sopenharmony_ci#define CC_RNG_ISR_CRNGT_ERR_BIT_SHIFT	0x2UL
4462306a36Sopenharmony_ci#define CC_RNG_ISR_CRNGT_ERR_BIT_SIZE	0x1UL
4562306a36Sopenharmony_ci#define CC_RNG_ISR_WATCHDOG_BIT_SHIFT	0x4UL
4662306a36Sopenharmony_ci#define CC_RNG_ISR_WATCHDOG_BIT_SIZE	0x1UL
4762306a36Sopenharmony_ci#define CC_RNG_ICR_REG_OFFSET	0x0108UL
4862306a36Sopenharmony_ci#define CC_TRNG_CONFIG_REG_OFFSET	0x010CUL
4962306a36Sopenharmony_ci#define CC_EHR_DATA_0_REG_OFFSET	0x0114UL
5062306a36Sopenharmony_ci#define CC_RND_SOURCE_ENABLE_REG_OFFSET	0x012CUL
5162306a36Sopenharmony_ci#define CC_SAMPLE_CNT1_REG_OFFSET	0x0130UL
5262306a36Sopenharmony_ci#define CC_TRNG_DEBUG_CONTROL_REG_OFFSET	0x0138UL
5362306a36Sopenharmony_ci#define CC_RNG_SW_RESET_REG_OFFSET	0x0140UL
5462306a36Sopenharmony_ci#define CC_RNG_CLK_ENABLE_REG_OFFSET	0x01C4UL
5562306a36Sopenharmony_ci#define CC_RNG_DMA_ENABLE_REG_OFFSET	0x01C8UL
5662306a36Sopenharmony_ci#define CC_RNG_WATCHDOG_VAL_REG_OFFSET	0x01D8UL
5762306a36Sopenharmony_ci// --------------------------------------
5862306a36Sopenharmony_ci// BLOCK: SEC_HOST_RGF
5962306a36Sopenharmony_ci// --------------------------------------
6062306a36Sopenharmony_ci#define CC_HOST_RGF_IRR_REG_OFFSET	0x0A00UL
6162306a36Sopenharmony_ci#define CC_HOST_RGF_IRR_RNG_INT_BIT_SHIFT	0xAUL
6262306a36Sopenharmony_ci#define CC_HOST_RGF_IMR_REG_OFFSET	0x0A04UL
6362306a36Sopenharmony_ci#define CC_HOST_RGF_ICR_REG_OFFSET	0x0A08UL
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci#define CC_HOST_POWER_DOWN_EN_REG_OFFSET	0x0A78UL
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci// --------------------------------------
6862306a36Sopenharmony_ci// BLOCK: NVM
6962306a36Sopenharmony_ci// --------------------------------------
7062306a36Sopenharmony_ci#define CC_NVM_IS_IDLE_REG_OFFSET	0x0F10UL
7162306a36Sopenharmony_ci#define CC_NVM_IS_IDLE_VALUE_BIT_SHIFT	0x0UL
7262306a36Sopenharmony_ci#define CC_NVM_IS_IDLE_VALUE_BIT_SIZE	0x1UL
73