forked from mirrors/linux
		
	 82f9327f77
			
		
	
	
		82f9327f77
		
	
	
	
	
		
			
			Older systems will not populate the security attributes in the capabilities register. The PSP on these systems, however, does have a command to get the security attributes. Use this command during ccp startup to populate the attributes if they're missing. Closes: https://github.com/fwupd/fwupd/issues/5284 Closes: https://github.com/fwupd/fwupd/issues/5675 Closes: https://github.com/fwupd/fwupd/issues/6253 Closes: https://github.com/fwupd/fwupd/issues/7280 Closes: https://github.com/fwupd/fwupd/issues/6323 Closes: https://github.com/fwupd/fwupd/discussions/5433 Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Acked-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-only */
 | |
| 
 | |
| #ifndef __PSP_PLATFORM_ACCESS_H
 | |
| #define __PSP_PLATFORM_ACCESS_H
 | |
| 
 | |
| #include <linux/psp.h>
 | |
| 
 | |
| enum psp_platform_access_msg {
 | |
| 	PSP_CMD_NONE			= 0x0,
 | |
| 	PSP_CMD_HSTI_QUERY		= 0x14,
 | |
| 	PSP_I2C_REQ_BUS_CMD		= 0x64,
 | |
| 	PSP_DYNAMIC_BOOST_GET_NONCE,
 | |
| 	PSP_DYNAMIC_BOOST_SET_UID,
 | |
| 	PSP_DYNAMIC_BOOST_GET_PARAMETER,
 | |
| 	PSP_DYNAMIC_BOOST_SET_PARAMETER,
 | |
| };
 | |
| 
 | |
| struct psp_req_buffer_hdr {
 | |
| 	u32 payload_size;
 | |
| 	u32 status;
 | |
| } __packed;
 | |
| 
 | |
| struct psp_request {
 | |
| 	struct psp_req_buffer_hdr header;
 | |
| 	void *buf;
 | |
| } __packed;
 | |
| 
 | |
| /**
 | |
|  * psp_send_platform_access_msg() - Send a message to control platform features
 | |
|  *
 | |
|  * This function is intended to be used by drivers outside of ccp to communicate
 | |
|  * with the platform.
 | |
|  *
 | |
|  * Returns:
 | |
|  *  0:           success
 | |
|  *  -%EBUSY:     mailbox in recovery or in use
 | |
|  *  -%ENODEV:    driver not bound with PSP device
 | |
|  *  -%ETIMEDOUT: request timed out
 | |
|  *  -%EIO:       unknown error (see kernel log)
 | |
|  */
 | |
| int psp_send_platform_access_msg(enum psp_platform_access_msg, struct psp_request *req);
 | |
| 
 | |
| /**
 | |
|  * psp_ring_platform_doorbell() - Ring platform doorbell
 | |
|  *
 | |
|  * This function is intended to be used by drivers outside of ccp to ring the
 | |
|  * platform doorbell with a message.
 | |
|  *
 | |
|  * Returns:
 | |
|  *  0:           success
 | |
|  *  -%EBUSY:     mailbox in recovery or in use
 | |
|  *  -%ENODEV:    driver not bound with PSP device
 | |
|  *  -%ETIMEDOUT: request timed out
 | |
|  *  -%EIO:       error will be stored in result argument
 | |
|  */
 | |
| int psp_ring_platform_doorbell(int msg, u32 *result);
 | |
| 
 | |
| /**
 | |
|  * psp_check_platform_access_status() - Checks whether platform features is ready
 | |
|  *
 | |
|  * This function is intended to be used by drivers outside of ccp to determine
 | |
|  * if platform features has initialized.
 | |
|  *
 | |
|  * Returns:
 | |
|  * 0          platform features is ready
 | |
|  * -%ENODEV   platform features is not ready or present
 | |
|  */
 | |
| int psp_check_platform_access_status(void);
 | |
| 
 | |
| #endif /* __PSP_PLATFORM_ACCESS_H */
 |