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