xref: /openbmc/linux/drivers/accel/habanalabs/include/gaudi2/gaudi2_fw_if.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1e65e175bSOded Gabbay /* SPDX-License-Identifier: GPL-2.0
2e65e175bSOded Gabbay  *
3e65e175bSOded Gabbay  * Copyright 2019-2021 HabanaLabs, Ltd.
4e65e175bSOded Gabbay  * All Rights Reserved.
5e65e175bSOded Gabbay  *
6e65e175bSOded Gabbay  */
7e65e175bSOded Gabbay 
8e65e175bSOded Gabbay #ifndef GAUDI2_FW_IF_H
9e65e175bSOded Gabbay #define GAUDI2_FW_IF_H
10e65e175bSOded Gabbay 
11e65e175bSOded Gabbay #define GAUDI2_EVENT_QUEUE_MSIX_IDX	0
12e65e175bSOded Gabbay 
13e65e175bSOded Gabbay #define UBOOT_FW_OFFSET			0x100000	/* 1MB in SRAM */
14e65e175bSOded Gabbay #define LINUX_FW_OFFSET			0x800000	/* 8BM in DDR */
15e65e175bSOded Gabbay 
16e65e175bSOded Gabbay #define GAUDI2_PLL_FREQ_LOW		200000000 /* 200 MHz */
17e65e175bSOded Gabbay 
18e65e175bSOded Gabbay #define GAUDI2_SP_SRAM_BASE_ADDR	0x27FE0000
19e65e175bSOded Gabbay #define GAUDI2_MAILBOX_BASE_ADDR	0x27FE1800
20e65e175bSOded Gabbay 
21e65e175bSOded Gabbay #define GAUDI2_NUM_MME			4
22e65e175bSOded Gabbay 
23bcace6f0SOded Gabbay #define NUM_OF_GPIOS_PER_PORT		16
24bcace6f0SOded Gabbay #define GAUDI2_WD_GPIO			(62 % NUM_OF_GPIOS_PER_PORT)
25bcace6f0SOded Gabbay 
26e65e175bSOded Gabbay #define GAUDI2_ARCPID_TX_MB_SIZE	0x1000
27e65e175bSOded Gabbay #define GAUDI2_ARCPID_RX_MB_SIZE	0x400
28e65e175bSOded Gabbay #define GAUDI2_ARM_TX_MB_SIZE		0x400
29e65e175bSOded Gabbay #define GAUDI2_ARM_RX_MB_SIZE		0x1800
30e65e175bSOded Gabbay 
31e65e175bSOded Gabbay #define GAUDI2_DCCM_BASE_ADDR		0x27020000
32e65e175bSOded Gabbay 
33e65e175bSOded Gabbay #define GAUDI2_ARM_TX_MB_ADDR		GAUDI2_MAILBOX_BASE_ADDR
34e65e175bSOded Gabbay 
35e65e175bSOded Gabbay #define GAUDI2_ARM_RX_MB_ADDR		(GAUDI2_ARM_TX_MB_ADDR + \
36e65e175bSOded Gabbay 					GAUDI2_ARM_TX_MB_SIZE)
37e65e175bSOded Gabbay 
38bcace6f0SOded Gabbay #define GAUDI2_ARCPID_TX_MB_ADDR	(GAUDI2_ARM_RX_MB_ADDR + GAUDI2_ARM_RX_MB_SIZE)
39bcace6f0SOded Gabbay 
40bcace6f0SOded Gabbay #define GAUDI2_ARCPID_RX_MB_ADDR	(GAUDI2_ARCPID_TX_MB_ADDR + GAUDI2_ARCPID_TX_MB_SIZE)
41bcace6f0SOded Gabbay 
42e65e175bSOded Gabbay #define GAUDI2_ARM_TX_MB_OFFSET		(GAUDI2_ARM_TX_MB_ADDR - \
43e65e175bSOded Gabbay 					GAUDI2_SP_SRAM_BASE_ADDR)
44e65e175bSOded Gabbay 
45e65e175bSOded Gabbay #define GAUDI2_ARM_RX_MB_OFFSET		(GAUDI2_ARM_RX_MB_ADDR - \
46e65e175bSOded Gabbay 					GAUDI2_SP_SRAM_BASE_ADDR)
47e65e175bSOded Gabbay 
48e65e175bSOded Gabbay enum gaudi2_fw_status {
49e65e175bSOded Gabbay 	GAUDI2_PID_STATUS_UP = 0x1,	/* PID on ARC0 is up */
50e65e175bSOded Gabbay 	GAUDI2_ARM_STATUS_UP = 0x2,	/* ARM Linux Boot complete */
51e65e175bSOded Gabbay 	GAUDI2_MGMT_STATUS_UP = 0x3,	/* ARC1 Mgmt is up */
52e65e175bSOded Gabbay 	GAUDI2_STATUS_LAST = 0xFF
53e65e175bSOded Gabbay };
54e65e175bSOded Gabbay 
55e65e175bSOded Gabbay struct gaudi2_cold_rst_data {
56e65e175bSOded Gabbay 	union {
57e65e175bSOded Gabbay 		struct {
58e65e175bSOded Gabbay 			u32 recovery_flag: 1;
59e65e175bSOded Gabbay 			u32 validation_flag: 1;
60e65e175bSOded Gabbay 			u32 efuse_read_flag: 1;
61e65e175bSOded Gabbay 			u32 spsram_init_done : 1;
62e65e175bSOded Gabbay 			u32 fake_security_enable : 1;
63e65e175bSOded Gabbay 			u32 fake_sig_validation_en : 1;
64bcace6f0SOded Gabbay 			u32 bist_skip_enable : 1;
65bcace6f0SOded Gabbay 			u32 reserved1 : 1;
66*336b78c6SOded Gabbay 			u32 fake_bis_compliant : 1;
67*336b78c6SOded Gabbay 			u32 wd_rst_cause_arm : 1;
68*336b78c6SOded Gabbay 			u32 wd_rst_cause_arcpid : 1;
69*336b78c6SOded Gabbay 			u32 reserved : 21;
70e65e175bSOded Gabbay 		};
71e65e175bSOded Gabbay 		__le32 data;
72e65e175bSOded Gabbay 	};
73e65e175bSOded Gabbay };
74e65e175bSOded Gabbay 
75e65e175bSOded Gabbay enum gaudi2_rst_src {
76e65e175bSOded Gabbay 	HL_COLD_RST = 1,
77e65e175bSOded Gabbay 	HL_MANUAL_RST = 2,
78e65e175bSOded Gabbay 	HL_PRSTN_RST = 4,
79e65e175bSOded Gabbay 	HL_SOFT_RST = 8,
80e65e175bSOded Gabbay 	HL_WD_RST = 16,
81e65e175bSOded Gabbay 	HL_FW_ALL_RST = 32,
82e65e175bSOded Gabbay 	HL_SW_ALL_RST = 64,
83e65e175bSOded Gabbay 	HL_FLR_RST = 128,
84e65e175bSOded Gabbay 	HL_ECC_DERR_RST = 256
85e65e175bSOded Gabbay };
86e65e175bSOded Gabbay 
87e65e175bSOded Gabbay struct gaudi2_redundancy_ctx {
88bcace6f0SOded Gabbay 	__le32 redundant_hbm;
89bcace6f0SOded Gabbay 	__le32 redundant_edma;
90bcace6f0SOded Gabbay 	__le32 redundant_tpc;
91bcace6f0SOded Gabbay 	__le32 redundant_vdec;
92e65e175bSOded Gabbay 	__le64 hbm_mask;
93e65e175bSOded Gabbay 	__le64 edma_mask;
94e65e175bSOded Gabbay 	__le64 tpc_mask;
95e65e175bSOded Gabbay 	__le64 vdec_mask;
96e65e175bSOded Gabbay 	__le64 mme_mask;
97e65e175bSOded Gabbay 	__le64 nic_mask;
98e65e175bSOded Gabbay 	__le64 rtr_mask;
99e65e175bSOded Gabbay 	__le64 hmmu_hif_iso;
100e65e175bSOded Gabbay 	__le64 xbar_edge_iso;
101e65e175bSOded Gabbay 	__le64 hmmu_hif_mask;
102e65e175bSOded Gabbay 	__le64 xbar_edge_mask;
103e65e175bSOded Gabbay 	__u8 mme_pe_iso[GAUDI2_NUM_MME];
104e65e175bSOded Gabbay 	__le32 full_hbm_mode;	/* true on full (non binning hbm)*/
105e65e175bSOded Gabbay } __packed;
106e65e175bSOded Gabbay 
107e65e175bSOded Gabbay #endif /* GAUDI2_FW_IF_H */
108