Skip to content

Commit

Permalink
mei: restrict vtag support to hbm version 2.2
Browse files Browse the repository at this point in the history
The vtag allows partitioning the mei messages into virtual groups/channels.
Vtags are supported for firmwares with HBM version 2.2 and newer
and only when a firmware confirms the support via capability handshake.
This change only define vtag restrictions in order to make
the series bisectable. Everything will be enabled when driver HBM
version is set to 2.2.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Link: https://lore.kernel.org/r/20200818115147.2567012-3-tomas.winkler@intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Alexander Usyskin authored and Greg Kroah-Hartman committed Aug 18, 2020
1 parent e5cab1f commit beb4e1e
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/misc/mei/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ static int mei_dbgfs_devstate_show(struct seq_file *m, void *unused)
seq_printf(m, "\tFA: %01d\n", dev->hbm_f_fa_supported);
seq_printf(m, "\tOS: %01d\n", dev->hbm_f_os_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, "\tCAP: %01d\n", dev->hbm_f_cap_supported);
}

Expand Down
15 changes: 15 additions & 0 deletions drivers/misc/mei/hbm.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,8 @@ static int mei_hbm_capabilities_req(struct mei_device *dev)

memset(&req, 0, sizeof(req));
req.hbm_cmd = MEI_HBM_CAPABILITIES_REQ_CMD;
if (dev->hbm_f_vt_supported)
req.capability_requested[0] = HBM_CAP_VT;

ret = mei_hbm_write_message(dev, &mei_hdr, &req);
if (ret) {
Expand Down Expand Up @@ -1074,6 +1076,14 @@ static void mei_hbm_config_features(struct mei_device *dev)
dev->version.minor_version >= HBM_MINOR_VERSION_DR))
dev->hbm_f_dr_supported = 1;

/* VTag Support */
dev->hbm_f_vt_supported = 0;
if (dev->version.major_version > HBM_MAJOR_VERSION_VT ||
(dev->version.major_version == HBM_MAJOR_VERSION_VT &&
dev->version.minor_version >= HBM_MINOR_VERSION_VT))
dev->hbm_f_vt_supported = 1;

/* Capability message Support */
dev->hbm_f_cap_supported = 0;
if (dev->version.major_version > HBM_MAJOR_VERSION_CAP ||
(dev->version.major_version == HBM_MAJOR_VERSION_CAP &&
Expand Down Expand Up @@ -1112,6 +1122,7 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
struct hbm_host_enum_response *enum_res;
struct hbm_dma_setup_response *dma_setup_res;
struct hbm_add_client_request *add_cl_req;
struct hbm_capability_response *capability_res;
int ret;

struct mei_hbm_cl_cmd *cl_cmd;
Expand Down Expand Up @@ -1214,6 +1225,10 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
return -EPROTO;
}

capability_res = (struct hbm_capability_response *)mei_msg;
if (!(capability_res->capability_granted[0] & HBM_CAP_VT))
dev->hbm_f_vt_supported = 0;

if (dev->hbm_f_dr_supported) {
if (mei_dmam_ring_alloc(dev))
dev_info(dev->dev, "running w/o dma ring\n");
Expand Down
9 changes: 9 additions & 0 deletions drivers/misc/mei/hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@
#define HBM_MINOR_VERSION_DR 1
#define HBM_MAJOR_VERSION_DR 2

/*
* MEI version with vm tag support
*/
#define HBM_MINOR_VERSION_VT 2
#define HBM_MAJOR_VERSION_VT 2

/*
* MEI version with capabilities message support
*/
Expand Down Expand Up @@ -542,6 +548,9 @@ struct hbm_dma_ring_ctrl {
u32 reserved4;
} __packed;

/* virtual tag supported */
#define HBM_CAP_VT BIT(0)

/**
* struct hbm_capability_request - capability request from host to fw
*
Expand Down
2 changes: 2 additions & 0 deletions drivers/misc/mei/mei_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,7 @@ struct mei_fw_version {
* @hbm_f_ie_supported : hbm feature immediate reply to enum request
* @hbm_f_os_supported : hbm feature support OS ver message
* @hbm_f_dr_supported : hbm feature dma ring supported
* @hbm_f_vt_supported : hbm feature vtag supported
* @hbm_f_cap_supported : hbm feature capabilities message supported
*
* @fw_ver : FW versions
Expand Down Expand Up @@ -511,6 +512,7 @@ struct mei_device {
unsigned int hbm_f_ie_supported:1;
unsigned int hbm_f_os_supported:1;
unsigned int hbm_f_dr_supported:1;
unsigned int hbm_f_vt_supported:1;
unsigned int hbm_f_cap_supported:1;

struct mei_fw_version fw_ver[MEI_MAX_FW_VER_BLOCKS];
Expand Down

0 comments on commit beb4e1e

Please sign in to comment.