Commit 7ed98ddd authored by Eddie James's avatar Eddie James Committed by Guenter Roeck

fsi: Add On-Chip Controller (OCC) driver

The OCC is a device embedded on a POWER processor that collects and
aggregates sensor data from the processor and system. The OCC can
provide the raw sensor data as well as perform thermal and power
management on the system.

This driver provides an atomic communications channel between a service
processor (e.g. a BMC) and the OCC. The driver is dependent on the FSI
SBEFIFO driver to get hardware access through the SBE to the OCC SRAM.
Commands are issued to the SBE to send or fetch data to the SRAM.
Signed-off-by: default avatarEddie James <eajames@linux.ibm.com>
Signed-off-by: default avatarAndrew Jeffery <andrew@aj.id.au>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 6021c48f
...@@ -65,4 +65,14 @@ config FSI_SBEFIFO ...@@ -65,4 +65,14 @@ config FSI_SBEFIFO
a pipe-like FSI device for communicating with the self boot engine a pipe-like FSI device for communicating with the self boot engine
(SBE) on POWER processors. (SBE) on POWER processors.
config FSI_OCC
tristate "OCC SBEFIFO client device driver"
depends on FSI_SBEFIFO
---help---
This option enables an SBEFIFO based On-Chip Controller (OCC) device
driver. The OCC is a device embedded on a POWER processor that collects
and aggregates sensor data from the processor and system. The OCC can
provide the raw sensor data as well as perform thermal and power
management on the system.
endif endif
...@@ -5,3 +5,4 @@ obj-$(CONFIG_FSI_MASTER_GPIO) += fsi-master-gpio.o ...@@ -5,3 +5,4 @@ obj-$(CONFIG_FSI_MASTER_GPIO) += fsi-master-gpio.o
obj-$(CONFIG_FSI_MASTER_AST_CF) += fsi-master-ast-cf.o obj-$(CONFIG_FSI_MASTER_AST_CF) += fsi-master-ast-cf.o
obj-$(CONFIG_FSI_SCOM) += fsi-scom.o obj-$(CONFIG_FSI_SCOM) += fsi-scom.o
obj-$(CONFIG_FSI_SBEFIFO) += fsi-sbefifo.o obj-$(CONFIG_FSI_SBEFIFO) += fsi-sbefifo.o
obj-$(CONFIG_FSI_OCC) += fsi-occ.o
This diff is collapsed.
// SPDX-License-Identifier: GPL-2.0
#ifndef LINUX_FSI_OCC_H
#define LINUX_FSI_OCC_H
struct device;
#define OCC_RESP_CMD_IN_PRG 0xFF
#define OCC_RESP_SUCCESS 0
#define OCC_RESP_CMD_INVAL 0x11
#define OCC_RESP_CMD_LEN_INVAL 0x12
#define OCC_RESP_DATA_INVAL 0x13
#define OCC_RESP_CHKSUM_ERR 0x14
#define OCC_RESP_INT_ERR 0x15
#define OCC_RESP_BAD_STATE 0x16
#define OCC_RESP_CRIT_EXCEPT 0xE0
#define OCC_RESP_CRIT_INIT 0xE1
#define OCC_RESP_CRIT_WATCHDOG 0xE2
#define OCC_RESP_CRIT_OCB 0xE3
#define OCC_RESP_CRIT_HW 0xE4
int fsi_occ_submit(struct device *dev, const void *request, size_t req_len,
void *response, size_t *resp_len);
#endif /* LINUX_FSI_OCC_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment