diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2018-06-12 01:19:11 -0400 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2018-06-18 01:11:53 -0400 |
| commit | 6b293258cded9c8ee44cce4081d9170d6d1b5f5d (patch) | |
| tree | 82d3c69584d67d6c4300fb16ae4b3d50d0a4aa4a /include/uapi/linux | |
| parent | f143304442f4b273f28343910f79d0221984b096 (diff) | |
fsi: scom: Major overhaul
This was too hard to split ... this adds a number of features
to the SCOM user interface:
- Support for indirect SCOMs
- read()/write() interface now handle errors and retries
- New ioctl() "raw" interface for use by debuggers
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: Eddie James <eajames@linux.vnet.ibm.com>
Reviewed-by: Alistair Popple <alistair@popple.id.au>
Diffstat (limited to 'include/uapi/linux')
| -rw-r--r-- | include/uapi/linux/fsi.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/include/uapi/linux/fsi.h b/include/uapi/linux/fsi.h new file mode 100644 index 000000000000..da577ecd90e7 --- /dev/null +++ b/include/uapi/linux/fsi.h | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ | ||
| 2 | #ifndef _UAPI_LINUX_FSI_H | ||
| 3 | #define _UAPI_LINUX_FSI_H | ||
| 4 | |||
| 5 | #include <linux/types.h> | ||
| 6 | #include <linux/ioctl.h> | ||
| 7 | |||
| 8 | /* | ||
| 9 | * /dev/scom "raw" ioctl interface | ||
| 10 | * | ||
| 11 | * The driver supports a high level "read/write" interface which | ||
| 12 | * handles retries and converts the status to Linux error codes, | ||
| 13 | * however low level tools an debugger need to access the "raw" | ||
| 14 | * HW status information and interpret it themselves, so this | ||
| 15 | * ioctl interface is also provided for their use case. | ||
| 16 | */ | ||
| 17 | |||
| 18 | /* Structure for SCOM read/write */ | ||
| 19 | struct scom_access { | ||
| 20 | __u64 addr; /* SCOM address, supports indirect */ | ||
| 21 | __u64 data; /* SCOM data (in for write, out for read) */ | ||
| 22 | __u64 mask; /* Data mask for writes */ | ||
| 23 | __u32 intf_errors; /* Interface error flags */ | ||
| 24 | #define SCOM_INTF_ERR_PARITY 0x00000001 /* Parity error */ | ||
| 25 | #define SCOM_INTF_ERR_PROTECTION 0x00000002 /* Blocked by secure boot */ | ||
| 26 | #define SCOM_INTF_ERR_ABORT 0x00000004 /* PIB reset during access */ | ||
| 27 | #define SCOM_INTF_ERR_UNKNOWN 0x80000000 /* Unknown error */ | ||
| 28 | /* | ||
| 29 | * Note: Any other bit set in intf_errors need to be considered as an | ||
| 30 | * error. Future implementations may define new error conditions. The | ||
| 31 | * pib_status below is only valid if intf_errors is 0. | ||
| 32 | */ | ||
| 33 | __u8 pib_status; /* 3-bit PIB status */ | ||
| 34 | #define SCOM_PIB_SUCCESS 0 /* Access successful */ | ||
| 35 | #define SCOM_PIB_BLOCKED 1 /* PIB blocked, pls retry */ | ||
| 36 | #define SCOM_PIB_OFFLINE 2 /* Chiplet offline */ | ||
| 37 | #define SCOM_PIB_PARTIAL 3 /* Partial good */ | ||
| 38 | #define SCOM_PIB_BAD_ADDR 4 /* Invalid address */ | ||
| 39 | #define SCOM_PIB_CLK_ERR 5 /* Clock error */ | ||
| 40 | #define SCOM_PIB_PARITY_ERR 6 /* Parity error on the PIB bus */ | ||
| 41 | #define SCOM_PIB_TIMEOUT 7 /* Bus timeout */ | ||
| 42 | __u8 pad; | ||
| 43 | }; | ||
| 44 | |||
| 45 | /* Flags for SCOM check */ | ||
| 46 | #define SCOM_CHECK_SUPPORTED 0x00000001 /* Interface supported */ | ||
| 47 | #define SCOM_CHECK_PROTECTED 0x00000002 /* Interface blocked by secure boot */ | ||
| 48 | |||
| 49 | /* Flags for SCOM reset */ | ||
| 50 | #define SCOM_RESET_INTF 0x00000001 /* Reset interface */ | ||
| 51 | #define SCOM_RESET_PIB 0x00000002 /* Reset PIB */ | ||
| 52 | |||
| 53 | #define FSI_SCOM_CHECK _IOR('s', 0x00, __u32) | ||
| 54 | #define FSI_SCOM_READ _IOWR('s', 0x01, struct scom_access) | ||
| 55 | #define FSI_SCOM_WRITE _IOWR('s', 0x02, struct scom_access) | ||
| 56 | #define FSI_SCOM_RESET _IOW('s', 0x03, __u32) | ||
| 57 | |||
| 58 | #endif /* _UAPI_LINUX_FSI_H */ | ||
