xref: /linux/include/linux/psp-platform-access.h (revision 22bdd6e68bbe270a916233ec5f34a13ae5e80ed9)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __PSP_PLATFORM_ACCESS_H
4 #define __PSP_PLATFORM_ACCESS_H
5 
6 #include <linux/psp.h>
7 
8 enum psp_platform_access_msg {
9 	PSP_CMD_NONE			= 0x0,
10 	PSP_SFS_GET_FW_VERSIONS,
11 	PSP_SFS_UPDATE,
12 	PSP_CMD_HSTI_QUERY		= 0x14,
13 	PSP_I2C_REQ_BUS_CMD		= 0x64,
14 	PSP_DYNAMIC_BOOST_GET_NONCE,
15 	PSP_DYNAMIC_BOOST_SET_UID,
16 	PSP_DYNAMIC_BOOST_GET_PARAMETER,
17 	PSP_DYNAMIC_BOOST_SET_PARAMETER,
18 };
19 
20 struct psp_req_buffer_hdr {
21 	u32 payload_size;
22 	u32 status;
23 } __packed;
24 
25 struct psp_request {
26 	struct psp_req_buffer_hdr header;
27 	void *buf;
28 } __packed;
29 
30 /**
31  * psp_send_platform_access_msg() - Send a message to control platform features
32  *
33  * This function is intended to be used by drivers outside of ccp to communicate
34  * with the platform.
35  *
36  * Returns:
37  *  0:           success
38  *  -%EBUSY:     mailbox in recovery or in use
39  *  -%ENODEV:    driver not bound with PSP device
40  *  -%ETIMEDOUT: request timed out
41  *  -%EIO:       unknown error (see kernel log)
42  */
43 int psp_send_platform_access_msg(enum psp_platform_access_msg, struct psp_request *req);
44 
45 /**
46  * psp_ring_platform_doorbell() - Ring platform doorbell
47  *
48  * This function is intended to be used by drivers outside of ccp to ring the
49  * platform doorbell with a message.
50  *
51  * Returns:
52  *  0:           success
53  *  -%EBUSY:     mailbox in recovery or in use
54  *  -%ENODEV:    driver not bound with PSP device
55  *  -%ETIMEDOUT: request timed out
56  *  -%EIO:       error will be stored in result argument
57  */
58 int psp_ring_platform_doorbell(int msg, u32 *result);
59 
60 /**
61  * psp_check_platform_access_status() - Checks whether platform features is ready
62  *
63  * This function is intended to be used by drivers outside of ccp to determine
64  * if platform features has initialized.
65  *
66  * Returns:
67  * 0          platform features is ready
68  * -%ENODEV   platform features is not ready or present
69  */
70 int psp_check_platform_access_status(void);
71 
72 #endif /* __PSP_PLATFORM_ACCESS_H */
73