/*
 * Copyright (c) 2021, NVIDIA Corporation. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef GIC600AE_FMU_H
#define GIC600AE_FMU_H

/*******************************************************************************
 * GIC600-AE FMU register offsets and constants
 ******************************************************************************/
#define GICFMU_ERRFR_LO		U(0x000)
#define GICFMU_ERRFR_HI		U(0x004)
#define GICFMU_ERRCTLR_LO	U(0x008)
#define GICFMU_ERRCTLR_HI	U(0x00C)
#define GICFMU_ERRSTATUS_LO	U(0x010)
#define GICFMU_ERRSTATUS_HI	U(0x014)
#define GICFMU_ERRGSR_LO	U(0xE00)
#define GICFMU_ERRGSR_HI	U(0xE04)
#define GICFMU_KEY		U(0xEA0)
#define GICFMU_PINGCTLR		U(0xEA4)
#define GICFMU_PINGNOW		U(0xEA8)
#define GICFMU_SMEN		U(0xEB0)
#define GICFMU_SMINJERR		U(0xEB4)
#define GICFMU_PINGMASK_LO	U(0xEC0)
#define GICFMU_PINGMASK_HI	U(0xEC4)
#define GICFMU_STATUS		U(0xF00)
#define GICFMU_ERRIDR		U(0xFC8)

/* ERRCTLR bits */
#define FMU_ERRCTLR_ED_BIT	BIT(0)
#define FMU_ERRCTLR_CE_EN_BIT	BIT(1)
#define FMU_ERRCTLR_UI_BIT	BIT(2)
#define FMU_ERRCTLR_CI_BIT	BIT(3)

/* SMEN constants */
#define FMU_SMEN_BLK_SHIFT	U(8)
#define FMU_SMEN_SMID_SHIFT	U(24)

/* Error record IDs */
#define FMU_BLK_GICD		U(0)
#define FMU_BLK_SPICOL		U(1)
#define FMU_BLK_WAKERQ		U(2)
#define FMU_BLK_ITS0		U(4)
#define FMU_BLK_ITS1		U(5)
#define FMU_BLK_ITS2		U(6)
#define FMU_BLK_ITS3		U(7)
#define FMU_BLK_ITS4		U(8)
#define FMU_BLK_ITS5		U(9)
#define FMU_BLK_ITS6		U(10)
#define FMU_BLK_ITS7		U(11)
#define FMU_BLK_PPI0		U(12)
#define FMU_BLK_PPI1		U(13)
#define FMU_BLK_PPI2		U(14)
#define FMU_BLK_PPI3		U(15)
#define FMU_BLK_PPI4		U(16)
#define FMU_BLK_PPI5		U(17)
#define FMU_BLK_PPI6		U(18)
#define FMU_BLK_PPI7		U(19)
#define FMU_BLK_PPI8		U(20)
#define FMU_BLK_PPI9		U(21)
#define FMU_BLK_PPI10		U(22)
#define FMU_BLK_PPI11		U(23)
#define FMU_BLK_PPI12		U(24)
#define FMU_BLK_PPI13		U(25)
#define FMU_BLK_PPI14		U(26)
#define FMU_BLK_PPI15		U(27)
#define FMU_BLK_PPI16		U(28)
#define FMU_BLK_PPI17		U(29)
#define FMU_BLK_PPI18		U(30)
#define FMU_BLK_PPI19		U(31)
#define FMU_BLK_PPI20		U(32)
#define FMU_BLK_PPI21		U(33)
#define FMU_BLK_PPI22		U(34)
#define FMU_BLK_PPI23		U(35)
#define FMU_BLK_PPI24		U(36)
#define FMU_BLK_PPI25		U(37)
#define FMU_BLK_PPI26		U(38)
#define FMU_BLK_PPI27		U(39)
#define FMU_BLK_PPI28		U(40)
#define FMU_BLK_PPI29		U(41)
#define FMU_BLK_PPI30		U(42)
#define FMU_BLK_PPI31		U(43)
#define FMU_BLK_PRESENT_MASK	U(0xFFFFFFFFFFF)

/* Safety Mechamism limit */
#define FMU_SMID_GICD_MAX	U(33)
#define FMU_SMID_SPICOL_MAX	U(5)
#define FMU_SMID_WAKERQ_MAX	U(2)
#define FMU_SMID_ITS_MAX	U(14)
#define FMU_SMID_PPI_MAX	U(12)

/* MBIST Safety Mechanism ID */
#define GICD_MBIST_REQ_ERROR	U(23)
#define GICD_FMU_CLKGATE_ERROR	U(33)
#define PPI_MBIST_REQ_ERROR	U(10)
#define PPI_FMU_CLKGATE_ERROR	U(12)
#define ITS_MBIST_REQ_ERROR	U(13)
#define ITS_FMU_CLKGATE_ERROR	U(14)

/* ERRSTATUS bits */
#define FMU_ERRSTATUS_V_BIT	BIT(30)
#define FMU_ERRSTATUS_UE_BIT	BIT(29)
#define FMU_ERRSTATUS_OV_BIT	BIT(27)
#define FMU_ERRSTATUS_CE_BITS	(BIT(25) | BIT(24))
#define FMU_ERRSTATUS_CLEAR	(FMU_ERRSTATUS_V_BIT | FMU_ERRSTATUS_UE_BIT | \
				 FMU_ERRSTATUS_OV_BIT | FMU_ERRSTATUS_CE_BITS)

/* PINGCTLR constants */
#define FMU_PINGCTLR_INTDIFF_SHIFT	U(16)
#define FMU_PINGCTLR_TIMEOUTVAL_SHIFT	U(4)
#define FMU_PINGCTLR_EN_BIT		BIT(0)

#ifndef __ASSEMBLER__

#include <stdint.h>

#include <arch_helpers.h>

/*******************************************************************************
 * GIC600 FMU EL3 driver API
 ******************************************************************************/
uint64_t gic_fmu_read_errfr(uintptr_t base, unsigned int n);
uint64_t gic_fmu_read_errctlr(uintptr_t base, unsigned int n);
uint64_t gic_fmu_read_errstatus(uintptr_t base, unsigned int n);
uint64_t gic_fmu_read_errgsr(uintptr_t base);
uint32_t gic_fmu_read_pingctlr(uintptr_t base);
uint32_t gic_fmu_read_pingnow(uintptr_t base);
uint64_t gic_fmu_read_pingmask(uintptr_t base);
uint32_t gic_fmu_read_status(uintptr_t base);
uint32_t gic_fmu_read_erridr(uintptr_t base);
void gic_fmu_write_errctlr(uintptr_t base, unsigned int n, uint64_t val);
void gic_fmu_write_errstatus(uintptr_t base, unsigned int n, uint64_t val);
void gic_fmu_write_pingctlr(uintptr_t base, uint32_t val);
void gic_fmu_write_pingnow(uintptr_t base, uint32_t val);
void gic_fmu_write_smen(uintptr_t base, uint32_t val);
void gic_fmu_write_sminjerr(uintptr_t base, uint32_t val);
void gic_fmu_write_pingmask(uintptr_t base, uint64_t val);

void gic600_fmu_init(uint64_t base, uint64_t blk_present_mask, bool errctlr_ce_en, bool errctlr_ue_en);
void gic600_fmu_enable_ping(uint64_t base, uint64_t blk_present_mask,
		unsigned int timeout_val, unsigned int interval_diff);
void gic600_fmu_print_sm_info(uint64_t base, unsigned int blk, unsigned int smid);

#endif /* __ASSEMBLER__ */

#endif /* GIC600AE_FMU_H */
