Commit b7a48041 authored by Alexander Usyskin's avatar Alexander Usyskin Committed by Greg Kroah-Hartman

mei: add support for client dma capability

Client DMA capability indicates whether the firmware supports setting up
a direct DMA channel between the host and me client.
The DMA capabilities are supported from firmware HBM version 2.2
and newer.
Signed-off-by: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Link: https://lore.kernel.org/r/20210206144325.25682-3-tomas.winkler@intel.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 36edb140
...@@ -106,6 +106,7 @@ static int mei_dbgfs_devstate_show(struct seq_file *m, void *unused) ...@@ -106,6 +106,7 @@ static int mei_dbgfs_devstate_show(struct seq_file *m, void *unused)
seq_printf(m, "\tDR: %01d\n", dev->hbm_f_dr_supported); seq_printf(m, "\tDR: %01d\n", dev->hbm_f_dr_supported);
seq_printf(m, "\tVT: %01d\n", dev->hbm_f_vt_supported); seq_printf(m, "\tVT: %01d\n", dev->hbm_f_vt_supported);
seq_printf(m, "\tCAP: %01d\n", dev->hbm_f_cap_supported); seq_printf(m, "\tCAP: %01d\n", dev->hbm_f_cap_supported);
seq_printf(m, "\tCD: %01d\n", dev->hbm_f_cd_supported);
} }
seq_printf(m, "pg: %s, %s\n", seq_printf(m, "pg: %s, %s\n",
......
...@@ -339,7 +339,9 @@ static int mei_hbm_capabilities_req(struct mei_device *dev) ...@@ -339,7 +339,9 @@ static int mei_hbm_capabilities_req(struct mei_device *dev)
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.hbm_cmd = MEI_HBM_CAPABILITIES_REQ_CMD; req.hbm_cmd = MEI_HBM_CAPABILITIES_REQ_CMD;
if (dev->hbm_f_vt_supported) if (dev->hbm_f_vt_supported)
req.capability_requested[0] = HBM_CAP_VT; req.capability_requested[0] |= HBM_CAP_VT;
if (dev->hbm_f_cd_supported)
req.capability_requested[0] |= HBM_CAP_CD;
ret = mei_hbm_write_message(dev, &mei_hdr, &req); ret = mei_hbm_write_message(dev, &mei_hdr, &req);
if (ret) { if (ret) {
...@@ -1085,6 +1087,13 @@ static void mei_hbm_config_features(struct mei_device *dev) ...@@ -1085,6 +1087,13 @@ static void mei_hbm_config_features(struct mei_device *dev)
(dev->version.major_version == HBM_MAJOR_VERSION_CAP && (dev->version.major_version == HBM_MAJOR_VERSION_CAP &&
dev->version.minor_version >= HBM_MINOR_VERSION_CAP)) dev->version.minor_version >= HBM_MINOR_VERSION_CAP))
dev->hbm_f_cap_supported = 1; dev->hbm_f_cap_supported = 1;
/* Client DMA Support */
dev->hbm_f_cd_supported = 0;
if (dev->version.major_version > HBM_MAJOR_VERSION_CD ||
(dev->version.major_version == HBM_MAJOR_VERSION_CD &&
dev->version.minor_version >= HBM_MINOR_VERSION_CD))
dev->hbm_f_cd_supported = 1;
} }
/** /**
...@@ -1233,6 +1242,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) ...@@ -1233,6 +1242,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
capability_res = (struct hbm_capability_response *)mei_msg; capability_res = (struct hbm_capability_response *)mei_msg;
if (!(capability_res->capability_granted[0] & HBM_CAP_VT)) if (!(capability_res->capability_granted[0] & HBM_CAP_VT))
dev->hbm_f_vt_supported = 0; dev->hbm_f_vt_supported = 0;
if (!(capability_res->capability_granted[0] & HBM_CAP_CD))
dev->hbm_f_cd_supported = 0;
if (dev->hbm_f_dr_supported) { if (dev->hbm_f_dr_supported) {
if (mei_dmam_ring_alloc(dev)) if (mei_dmam_ring_alloc(dev))
......
...@@ -88,6 +88,12 @@ ...@@ -88,6 +88,12 @@
#define HBM_MINOR_VERSION_CAP 2 #define HBM_MINOR_VERSION_CAP 2
#define HBM_MAJOR_VERSION_CAP 2 #define HBM_MAJOR_VERSION_CAP 2
/*
* MEI version with client DMA support
*/
#define HBM_MINOR_VERSION_CD 2
#define HBM_MAJOR_VERSION_CD 2
/* Host bus message command opcode */ /* Host bus message command opcode */
#define MEI_HBM_CMD_OP_MSK 0x7f #define MEI_HBM_CMD_OP_MSK 0x7f
/* Host bus message command RESPONSE */ /* Host bus message command RESPONSE */
...@@ -648,6 +654,8 @@ struct hbm_dma_ring_ctrl { ...@@ -648,6 +654,8 @@ struct hbm_dma_ring_ctrl {
/* virtual tag supported */ /* virtual tag supported */
#define HBM_CAP_VT BIT(0) #define HBM_CAP_VT BIT(0)
/* client dma supported */
#define HBM_CAP_CD BIT(2)
/** /**
* struct hbm_capability_request - capability request from host to fw * struct hbm_capability_request - capability request from host to fw
......
...@@ -451,6 +451,7 @@ struct mei_fw_version { ...@@ -451,6 +451,7 @@ struct mei_fw_version {
* @hbm_f_dr_supported : hbm feature dma ring supported * @hbm_f_dr_supported : hbm feature dma ring supported
* @hbm_f_vt_supported : hbm feature vtag supported * @hbm_f_vt_supported : hbm feature vtag supported
* @hbm_f_cap_supported : hbm feature capabilities message supported * @hbm_f_cap_supported : hbm feature capabilities message supported
* @hbm_f_cd_supported : hbm feature client dma supported
* *
* @fw_ver : FW versions * @fw_ver : FW versions
* *
...@@ -538,6 +539,7 @@ struct mei_device { ...@@ -538,6 +539,7 @@ struct mei_device {
unsigned int hbm_f_dr_supported:1; unsigned int hbm_f_dr_supported:1;
unsigned int hbm_f_vt_supported:1; unsigned int hbm_f_vt_supported:1;
unsigned int hbm_f_cap_supported:1; unsigned int hbm_f_cap_supported:1;
unsigned int hbm_f_cd_supported:1;
struct mei_fw_version fw_ver[MEI_MAX_FW_VER_BLOCKS]; struct mei_fw_version fw_ver[MEI_MAX_FW_VER_BLOCKS];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment