/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright 2018-2019, 2024 NXP
 *
 * Brief   CAAM Configuration header.
 */
#ifndef __CAAM_HAL_CFG_H__
#define __CAAM_HAL_CFG_H__

#include <caam_jr.h>

/*
 * Returns the Job Ring Configuration to be used by the TEE
 *
 * @jrcfg   [out] Job Ring Configuration
 *
 * Returns:
 * CAAM_NO_ERROR   Success
 * CAAM_FAILURE    An error occurred
 */
enum caam_status caam_hal_cfg_get_conf(struct caam_jrcfg *jrcfg);

/*
 * Setup the Non-Secure Job Ring
 *
 * @jrcfg   Job Ring configuration
 */
void caam_hal_cfg_setup_nsjobring(struct caam_jrcfg *jrcfg);

/*
 * Removes the JR used by HAB from dtb and backup its DID
 *
 * @jrcfg   Job Ring configuration of HAB JR
 */
void caam_hal_cfg_hab_jr_mgmt(struct caam_jrcfg *jrcfg);

/*
 * Indicate if the job ring is used by the HAB
 *
 * @jr_offset   Job Ring offset
 */
bool caam_hal_cfg_is_hab_jr(paddr_t jr_offset);

#ifdef CFG_DT
/*
 * Returns the Job Ring configuration to be used by the TEE
 *
 * @fdt         Device Tree handle
 * @ctrl_base   [out] CAAM Controller base address
 */
void caam_hal_cfg_get_ctrl_dt(void *fdt, vaddr_t *ctrl_base);

/*
 * Returns the Job Ring configuration to be used by the TEE
 *
 * @fdt     Device Tree handle
 * @jrcfg   [out] Job Ring configuration
 */
void caam_hal_cfg_get_jobring_dt(void *fdt, struct caam_jrcfg *jrcfg);

/*
 * Disable the DT node related to the Job Ring used by secure world
 *
 * @fdt     Device Tree handle
 * @jrcfg   Job Ring configuration
 */
void caam_hal_cfg_disable_jobring_dt(void *fdt, struct caam_jrcfg *jrcfg);
#else
static inline void caam_hal_cfg_get_ctrl_dt(void *fdt __unused,
					    vaddr_t *ctrl_base)
{
	*ctrl_base = 0;
}

static inline void
caam_hal_cfg_get_jobring_dt(void *fdt __unused,
			    struct caam_jrcfg *jrcfg)
{
	jrcfg->offset = 0;
	jrcfg->it_num = 0;
}

static inline void
caam_hal_cfg_disable_jobring_dt(void *fdt __unused,
				struct caam_jrcfg *jrcfg __unused)
{
}
#endif /* CFG_DT */

#endif /* __CAAM_HAL_CFG_H__ */
