summaryrefslogtreecommitdiff
path: root/drivers/accel/amdxdna/amdxdna_error.h
blob: 326d7153b17d5005051888a66e38b6064cf3bb1d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2025, Advanced Micro Devices, Inc.
 */

#ifndef _AMDXDNA_ERROR_H_
#define _AMDXDNA_ERROR_H_

#include <linux/bitfield.h>
#include <linux/bits.h>

#define AMDXDNA_ERR_DRV_AIE		4
#define AMDXDNA_ERR_SEV_CRITICAL	3
#define AMDXDNA_ERR_CLASS_AIE		2

#define AMDXDNA_ERR_NUM_MASK		GENMASK_U64(15, 0)
#define AMDXDNA_ERR_DRV_MASK		GENMASK_U64(23, 16)
#define AMDXDNA_ERR_SEV_MASK		GENMASK_U64(31, 24)
#define AMDXDNA_ERR_MOD_MASK		GENMASK_U64(39, 32)
#define AMDXDNA_ERR_CLASS_MASK		GENMASK_U64(47, 40)

enum amdxdna_error_num {
	AMDXDNA_ERROR_NUM_AIE_SATURATION = 3,
	AMDXDNA_ERROR_NUM_AIE_FP,
	AMDXDNA_ERROR_NUM_AIE_STREAM,
	AMDXDNA_ERROR_NUM_AIE_ACCESS,
	AMDXDNA_ERROR_NUM_AIE_BUS,
	AMDXDNA_ERROR_NUM_AIE_INSTRUCTION,
	AMDXDNA_ERROR_NUM_AIE_ECC,
	AMDXDNA_ERROR_NUM_AIE_LOCK,
	AMDXDNA_ERROR_NUM_AIE_DMA,
	AMDXDNA_ERROR_NUM_AIE_MEM_PARITY,
	AMDXDNA_ERROR_NUM_UNKNOWN = 15,
};

enum amdxdna_error_module {
	AMDXDNA_ERROR_MODULE_AIE_CORE = 3,
	AMDXDNA_ERROR_MODULE_AIE_MEMORY,
	AMDXDNA_ERROR_MODULE_AIE_SHIM,
	AMDXDNA_ERROR_MODULE_AIE_NOC,
	AMDXDNA_ERROR_MODULE_AIE_PL,
	AMDXDNA_ERROR_MODULE_UNKNOWN = 8,
};

#define AMDXDNA_ERROR_ENCODE(err_num, err_mod)				\
	(FIELD_PREP(AMDXDNA_ERR_NUM_MASK, err_num) |			\
	 FIELD_PREP_CONST(AMDXDNA_ERR_DRV_MASK, AMDXDNA_ERR_DRV_AIE) |	\
	 FIELD_PREP_CONST(AMDXDNA_ERR_SEV_MASK, AMDXDNA_ERR_SEV_CRITICAL) | \
	 FIELD_PREP(AMDXDNA_ERR_MOD_MASK, err_mod) |			\
	 FIELD_PREP_CONST(AMDXDNA_ERR_CLASS_MASK, AMDXDNA_ERR_CLASS_AIE))

#define AMDXDNA_EXTRA_ERR_COL_MASK	GENMASK_U64(7, 0)
#define AMDXDNA_EXTRA_ERR_ROW_MASK	GENMASK_U64(15, 8)

#define AMDXDNA_EXTRA_ERR_ENCODE(row, col)				\
	(FIELD_PREP(AMDXDNA_EXTRA_ERR_COL_MASK, col) |			\
	 FIELD_PREP(AMDXDNA_EXTRA_ERR_ROW_MASK, row))

/*
 * Maximum number of async event buffers. This value is used in two places:
 * (1) to size the management mailbox channel, which must happen before
 * total_col is known from firmware; (2) to allocate the async event pool,
 * which runs after total_col is known. Both counts must match. The channel
 * is sized AMDXDNA_MAX_ASYNC_EVENT_BUFS + 1 (one extra for other management
 * commands), so the pool cannot exceed AMDXDNA_MAX_ASYNC_EVENT_BUFS slots.
 */
#define AMDXDNA_MAX_ASYNC_EVENT_BUFS	4

#endif /* _AMDXDNA_ERROR_H_ */