[Intel-gfx] [PATCH v3 1/1] drm/i915/pxp: Separate PXP FW interface structures for both v42 and 43
Ceraolo Spurio, Daniele
daniele.ceraolospurio at intel.com
Mon Nov 14 23:07:16 UTC 2022
On 11/7/2022 8:56 PM, Alan Previn wrote:
> Previously, we only used PXP FW interface version-42 structures for
> PXP arbitration session on ADL/TGL products and version-43 for HuC
> authentication on DG2. That worked fine despite not differentiating such
> versioning of the PXP firmware interaction structures. This was okay
> back then because the only commands used via version 42 was not
> used via version 43 and vice versa.
>
> With MTL, we'll need both these versions side by side for the same
> commands (PXP-session) with the older platform feature support. That
> said, let's create separate files to define the structures and definitions
> for both version-42 and 43 of PXP FW interfaces.
>
> Signed-off-by: Alan Previn <alan.previn.teres.alexis at intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Daniele
> ---
> .../drm/i915/pxp/intel_pxp_cmd_interface_42.h | 28 +++++++++
> .../drm/i915/pxp/intel_pxp_cmd_interface_43.h | 26 +++++++++
> .../i915/pxp/intel_pxp_cmd_interface_cmn.h | 35 ++++++++++++
> drivers/gpu/drm/i915/pxp/intel_pxp_huc.c | 10 ++--
> drivers/gpu/drm/i915/pxp/intel_pxp_tee.c | 12 ++--
> .../drm/i915/pxp/intel_pxp_tee_interface.h | 57 -------------------
> 6 files changed, 100 insertions(+), 68 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h
> create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h
> create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h
> delete mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_tee_interface.h
>
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h
> new file mode 100644
> index 000000000000..739f9072fa5f
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h
> @@ -0,0 +1,28 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2020, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __INTEL_PXP_FW_INTERFACE_42_H__
> +#define __INTEL_PXP_FW_INTERFACE_42_H__
> +
> +#include <linux/types.h>
> +#include "intel_pxp_cmd_interface_cmn.h"
> +
> +/* PXP-Opcode for Init Session */
> +#define PXP42_CMDID_INIT_SESSION 0x1e
> +
> +/* PXP-Input-Packet: Init Session (Arb-Session) */
> +struct pxp42_create_arb_in {
> + struct pxp_cmd_header header;
> + u32 protection_mode;
> +#define PXP42_ARB_SESSION_MODE_HEAVY 0x2
> + u32 session_id;
> +} __packed;
> +
> +/* PXP-Output-Packet: Init Session */
> +struct pxp42_create_arb_out {
> + struct pxp_cmd_header header;
> +} __packed;
> +
> +#endif /* __INTEL_PXP_FW_INTERFACE_42_H__ */
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h
> new file mode 100644
> index 000000000000..ad67e3f49c20
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h
> @@ -0,0 +1,26 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2022, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __INTEL_PXP_FW_INTERFACE_43_H__
> +#define __INTEL_PXP_FW_INTERFACE_43_H__
> +
> +#include <linux/types.h>
> +#include "intel_pxp_cmd_interface_cmn.h"
> +
> +/* PXP-Cmd-Op definitions */
> +#define PXP43_CMDID_START_HUC_AUTH 0x0000003A
> +
> +/* PXP-Input-Packet: HUC-Authentication */
> +struct pxp43_start_huc_auth_in {
> + struct pxp_cmd_header header;
> + __le64 huc_base_address;
> +} __packed;
> +
> +/* PXP-Output-Packet: HUC-Authentication */
> +struct pxp43_start_huc_auth_out {
> + struct pxp_cmd_header header;
> +} __packed;
> +
> +#endif /* __INTEL_PXP_FW_INTERFACE_43_H__ */
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h
> new file mode 100644
> index 000000000000..c2f23394f9b8
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h
> @@ -0,0 +1,35 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2022, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __INTEL_PXP_FW_INTERFACE_CMN_H__
> +#define __INTEL_PXP_FW_INTERFACE_CMN_H__
> +
> +#include <linux/types.h>
> +
> +#define PXP_APIVER(x, y) (((x) & 0xFFFF) << 16 | ((y) & 0xFFFF))
> +
> +/*
> + * there are a lot of status codes for PXP, but we only define the cross-API
> + * common ones that we actually can handle in the kernel driver. Other failure
> + * codes should be printed to error msg for debug.
> + */
> +enum pxp_status {
> + PXP_STATUS_SUCCESS = 0x0,
> + PXP_STATUS_OP_NOT_PERMITTED = 0x4013
> +};
> +
> +/* Common PXP FW message header */
> +struct pxp_cmd_header {
> + u32 api_version;
> + u32 command_id;
> + union {
> + u32 status; /* out */
> + u32 stream_id; /* in */
> + };
> + /* Length of the message (excluding the header) */
> + u32 buffer_len;
> +} __packed;
> +
> +#endif /* __INTEL_PXP_FW_INTERFACE_CMN_H__ */
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_huc.c b/drivers/gpu/drm/i915/pxp/intel_pxp_huc.c
> index 7ec36d94e758..ed27e3524afc 100644
> --- a/drivers/gpu/drm/i915/pxp/intel_pxp_huc.c
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_huc.c
> @@ -13,14 +13,14 @@
> #include "intel_pxp_huc.h"
> #include "intel_pxp_tee.h"
> #include "intel_pxp_types.h"
> -#include "intel_pxp_tee_interface.h"
> +#include "intel_pxp_cmd_interface_43.h"
>
> int intel_pxp_huc_load_and_auth(struct intel_pxp *pxp)
> {
> struct intel_gt *gt = pxp_to_gt(pxp);
> struct intel_huc *huc = >->uc.huc;
> - struct pxp_tee_start_huc_auth_in huc_in = {0};
> - struct pxp_tee_start_huc_auth_out huc_out = {0};
> + struct pxp43_start_huc_auth_in huc_in = {0};
> + struct pxp43_start_huc_auth_out huc_out = {0};
> dma_addr_t huc_phys_addr;
> u8 client_id = 0;
> u8 fence_id = 0;
> @@ -32,8 +32,8 @@ int intel_pxp_huc_load_and_auth(struct intel_pxp *pxp)
> huc_phys_addr = i915_gem_object_get_dma_address(huc->fw.obj, 0);
>
> /* write the PXP message into the lmem (the sg list) */
> - huc_in.header.api_version = PXP_TEE_43_APIVER;
> - huc_in.header.command_id = PXP_TEE_43_START_HUC_AUTH;
> + huc_in.header.api_version = PXP_APIVER(4, 3);
> + huc_in.header.command_id = PXP43_CMDID_START_HUC_AUTH;
> huc_in.header.status = 0;
> huc_in.header.buffer_len = sizeof(huc_in.huc_base_address);
> huc_in.huc_base_address = huc_phys_addr;
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c b/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c
> index 052fd2f9a583..b0c9170b1395 100644
> --- a/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c
> @@ -14,7 +14,7 @@
> #include "intel_pxp.h"
> #include "intel_pxp_session.h"
> #include "intel_pxp_tee.h"
> -#include "intel_pxp_tee_interface.h"
> +#include "intel_pxp_cmd_interface_42.h"
> #include "intel_pxp_huc.h"
>
> static inline struct intel_pxp *i915_dev_to_pxp(struct device *i915_kdev)
> @@ -286,14 +286,14 @@ int intel_pxp_tee_cmd_create_arb_session(struct intel_pxp *pxp,
> int arb_session_id)
> {
> struct drm_i915_private *i915 = pxp_to_gt(pxp)->i915;
> - struct pxp_tee_create_arb_in msg_in = {0};
> - struct pxp_tee_create_arb_out msg_out = {0};
> + struct pxp42_create_arb_in msg_in = {0};
> + struct pxp42_create_arb_out msg_out = {0};
> int ret;
>
> - msg_in.header.api_version = PXP_TEE_APIVER;
> - msg_in.header.command_id = PXP_TEE_ARB_CMDID;
> + msg_in.header.api_version = PXP_APIVER(4, 2);
> + msg_in.header.command_id = PXP42_CMDID_INIT_SESSION;
> msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
> - msg_in.protection_mode = PXP_TEE_ARB_PROTECTION_MODE;
> + msg_in.protection_mode = PXP42_ARB_SESSION_MODE_HEAVY;
> msg_in.session_id = arb_session_id;
>
> ret = intel_pxp_tee_io_message(pxp,
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_tee_interface.h b/drivers/gpu/drm/i915/pxp/intel_pxp_tee_interface.h
> deleted file mode 100644
> index 7edc1760f142..000000000000
> --- a/drivers/gpu/drm/i915/pxp/intel_pxp_tee_interface.h
> +++ /dev/null
> @@ -1,57 +0,0 @@
> -/* SPDX-License-Identifier: MIT */
> -/*
> - * Copyright(c) 2020-2022, Intel Corporation. All rights reserved.
> - */
> -
> -#ifndef __INTEL_PXP_TEE_INTERFACE_H__
> -#define __INTEL_PXP_TEE_INTERFACE_H__
> -
> -#include <linux/types.h>
> -
> -#define PXP_TEE_APIVER 0x40002
> -#define PXP_TEE_43_APIVER 0x00040003
> -#define PXP_TEE_ARB_CMDID 0x1e
> -#define PXP_TEE_ARB_PROTECTION_MODE 0x2
> -#define PXP_TEE_43_START_HUC_AUTH 0x0000003A
> -
> -/*
> - * there are a lot of status codes for PXP, but we only define the ones we
> - * actually can handle in the driver. other failure codes will be printed to
> - * error msg for debug.
> - */
> -enum pxp_status {
> - PXP_STATUS_SUCCESS = 0x0,
> - PXP_STATUS_OP_NOT_PERMITTED = 0x4013
> -};
> -
> -/* PXP TEE message header */
> -struct pxp_tee_cmd_header {
> - u32 api_version;
> - u32 command_id;
> - u32 status;
> - /* Length of the message (excluding the header) */
> - u32 buffer_len;
> -} __packed;
> -
> -/* PXP TEE message input to create a arbitrary session */
> -struct pxp_tee_create_arb_in {
> - struct pxp_tee_cmd_header header;
> - u32 protection_mode;
> - u32 session_id;
> -} __packed;
> -
> -/* PXP TEE message output to create a arbitrary session */
> -struct pxp_tee_create_arb_out {
> - struct pxp_tee_cmd_header header;
> -} __packed;
> -
> -struct pxp_tee_start_huc_auth_in {
> - struct pxp_tee_cmd_header header;
> - __le64 huc_base_address;
> -};
> -
> -struct pxp_tee_start_huc_auth_out {
> - struct pxp_tee_cmd_header header;
> -};
> -
> -#endif /* __INTEL_PXP_TEE_INTERFACE_H__ */
More information about the Intel-gfx
mailing list