17ccc4f4eSMario Limonciello /* SPDX-License-Identifier: GPL-2.0-only */ 27ccc4f4eSMario Limonciello 37ccc4f4eSMario Limonciello #ifndef __PSP_PLATFORM_ACCESS_H 47ccc4f4eSMario Limonciello #define __PSP_PLATFORM_ACCESS_H 57ccc4f4eSMario Limonciello 67ccc4f4eSMario Limonciello #include <linux/psp.h> 77ccc4f4eSMario Limonciello 87ccc4f4eSMario Limonciello enum psp_platform_access_msg { 97ccc4f4eSMario Limonciello PSP_CMD_NONE = 0x0, 10*82f9327fSMario Limonciello PSP_CMD_HSTI_QUERY = 0x14, 11440da737SMario Limonciello PSP_I2C_REQ_BUS_CMD = 0x64, 12c04cf9e1SMario Limonciello PSP_DYNAMIC_BOOST_GET_NONCE, 13d9408716SMario Limonciello PSP_DYNAMIC_BOOST_SET_UID, 14e2cfe05eSMario Limonciello PSP_DYNAMIC_BOOST_GET_PARAMETER, 15e2cfe05eSMario Limonciello PSP_DYNAMIC_BOOST_SET_PARAMETER, 167ccc4f4eSMario Limonciello }; 177ccc4f4eSMario Limonciello 187ccc4f4eSMario Limonciello struct psp_req_buffer_hdr { 197ccc4f4eSMario Limonciello u32 payload_size; 207ccc4f4eSMario Limonciello u32 status; 217ccc4f4eSMario Limonciello } __packed; 227ccc4f4eSMario Limonciello 237ccc4f4eSMario Limonciello struct psp_request { 247ccc4f4eSMario Limonciello struct psp_req_buffer_hdr header; 257ccc4f4eSMario Limonciello void *buf; 267ccc4f4eSMario Limonciello } __packed; 277ccc4f4eSMario Limonciello 287ccc4f4eSMario Limonciello /** 297ccc4f4eSMario Limonciello * psp_send_platform_access_msg() - Send a message to control platform features 307ccc4f4eSMario Limonciello * 317ccc4f4eSMario Limonciello * This function is intended to be used by drivers outside of ccp to communicate 327ccc4f4eSMario Limonciello * with the platform. 337ccc4f4eSMario Limonciello * 347ccc4f4eSMario Limonciello * Returns: 357ccc4f4eSMario Limonciello * 0: success 367ccc4f4eSMario Limonciello * -%EBUSY: mailbox in recovery or in use 377ccc4f4eSMario Limonciello * -%ENODEV: driver not bound with PSP device 387ccc4f4eSMario Limonciello * -%ETIMEDOUT: request timed out 397ccc4f4eSMario Limonciello * -%EIO: unknown error (see kernel log) 407ccc4f4eSMario Limonciello */ 417ccc4f4eSMario Limonciello int psp_send_platform_access_msg(enum psp_platform_access_msg, struct psp_request *req); 427ccc4f4eSMario Limonciello 437ccc4f4eSMario Limonciello /** 44d5812571SMario Limonciello * psp_ring_platform_doorbell() - Ring platform doorbell 45d5812571SMario Limonciello * 46d5812571SMario Limonciello * This function is intended to be used by drivers outside of ccp to ring the 47d5812571SMario Limonciello * platform doorbell with a message. 48d5812571SMario Limonciello * 49d5812571SMario Limonciello * Returns: 50d5812571SMario Limonciello * 0: success 51d5812571SMario Limonciello * -%EBUSY: mailbox in recovery or in use 52d5812571SMario Limonciello * -%ENODEV: driver not bound with PSP device 53d5812571SMario Limonciello * -%ETIMEDOUT: request timed out 54a19c61b0SMario Limonciello * -%EIO: error will be stored in result argument 55d5812571SMario Limonciello */ 56a19c61b0SMario Limonciello int psp_ring_platform_doorbell(int msg, u32 *result); 57d5812571SMario Limonciello 58d5812571SMario Limonciello /** 597ccc4f4eSMario Limonciello * psp_check_platform_access_status() - Checks whether platform features is ready 607ccc4f4eSMario Limonciello * 617ccc4f4eSMario Limonciello * This function is intended to be used by drivers outside of ccp to determine 627ccc4f4eSMario Limonciello * if platform features has initialized. 637ccc4f4eSMario Limonciello * 647ccc4f4eSMario Limonciello * Returns: 657ccc4f4eSMario Limonciello * 0 platform features is ready 667ccc4f4eSMario Limonciello * -%ENODEV platform features is not ready or present 677ccc4f4eSMario Limonciello */ 687ccc4f4eSMario Limonciello int psp_check_platform_access_status(void); 697ccc4f4eSMario Limonciello 707ccc4f4eSMario Limonciello #endif /* __PSP_PLATFORM_ACCESS_H */ 71