From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: Tomas Winkler <tomas.winkler@intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alexander Usyskin <alexander.usyskin@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [char-misc-next 2/2] mei: send OS type to the FW
Date: Tue, 8 Nov 2016 08:32:31 -0800 [thread overview]
Message-ID: <20161108163231.jus24ocasifgeqvy@intel.com> (raw)
In-Reply-To: <1478622369-31604-2-git-send-email-tomas.winkler@intel.com>
On Tue, Nov 08, 2016 at 06:26:09PM +0200, Tomas Winkler wrote:
> From: Alexander Usyskin <alexander.usyskin@intel.com>
>
> Tell the FW that we are running a sane OS and TPM2_ChangeEPS()
> is supported. This workaround was added to support other broken OS
> and we need to follow here. The command is sent just once at the boot time.
>
> Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Acked-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
/Jarkko
> ---
> drivers/misc/mei/bus-fixup.c | 98 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 98 insertions(+)
>
> diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
> index 9e10d86e3887..344a0c99ee44 100644
> --- a/drivers/misc/mei/bus-fixup.c
> +++ b/drivers/misc/mei/bus-fixup.c
> @@ -38,6 +38,9 @@ static const uuid_le mei_nfc_info_guid = MEI_UUID_NFC_INFO;
> #define MEI_UUID_WD UUID_LE(0x05B79A6F, 0x4628, 0x4D7F, \
> 0x89, 0x9D, 0xA9, 0x15, 0x14, 0xCB, 0x32, 0xAB)
>
> +#define MEI_UUID_MKHIF_FIX UUID_LE(0x55213584, 0x9a29, 0x4916, \
> + 0xba, 0xdf, 0xf, 0xb7, 0xed, 0x68, 0x2a, 0xeb)
> +
> #define MEI_UUID_ANY NULL_UUID_LE
>
> /**
> @@ -69,6 +72,100 @@ static void blacklist(struct mei_cl_device *cldev)
> cldev->do_match = 0;
> }
>
> +#define OSTYPE_LINUX 2
> +struct mei_os_ver {
> + u16 build;
> + u16 reserved1;
> + u8 os_type;
> + u8 major;
> + u8 minor;
> + u8 reserved2;
> +} __packed;
> +
> +#define MKHI_FEATURE_PTT 0x10
> +
> +struct mkhi_rule_id {
> + u16 rule_type;
> + u8 feature_id;
> + u8 reserved;
> +} __packed;
> +
> +struct mkhi_fwcaps {
> + struct mkhi_rule_id id;
> + u8 len;
> + u8 data[0];
> +} __packed;
> +
> +#define MKHI_FWCAPS_GROUP_ID 0x3
> +#define MKHI_FWCAPS_SET_OS_VER_APP_RULE_CMD 6
> +struct mkhi_msg_hdr {
> + u32 group_id :8;
> + u32 command :7;
> + u32 is_response :1;
> + u32 reserved :8;
> + u32 result :8;
> +};
> +
> +struct mkhi_msg {
> + struct mkhi_msg_hdr hdr;
> + u8 data[0];
> +} __packed;
> +
> +static int mei_osver(struct mei_cl_device *cldev)
> +{
> + int ret;
> + const size_t size = sizeof(struct mkhi_msg_hdr) +
> + sizeof(struct mkhi_fwcaps) +
> + sizeof(struct mei_os_ver);
> + size_t length = 8;
> + char buf[size];
> + struct mkhi_msg *req;
> + struct mkhi_fwcaps *fwcaps;
> + struct mei_os_ver *os_ver;
> + unsigned int mode = MEI_CL_IO_TX_BLOCKING | MEI_CL_IO_TX_INTERNAL;
> +
> + memset(buf, 0, size);
> +
> + req = (struct mkhi_msg *)buf;
> + req->hdr.group_id = MKHI_FWCAPS_GROUP_ID;
> + req->hdr.command = MKHI_FWCAPS_SET_OS_VER_APP_RULE_CMD;
> +
> + fwcaps = (struct mkhi_fwcaps *)req->data;
> +
> + fwcaps->id.rule_type = 0x0;
> + fwcaps->id.feature_id = MKHI_FEATURE_PTT;
> + fwcaps->len = sizeof(*os_ver);
> + os_ver = (struct mei_os_ver *)fwcaps->data;
> + os_ver->os_type = OSTYPE_LINUX;
> +
> + ret = __mei_cl_send(cldev->cl, buf, size, mode);
> + if (ret < 0)
> + return ret;
> +
> + ret = __mei_cl_recv(cldev->cl, buf, length);
> + if (ret < 0)
> + return ret;
> +
> + return 0;
> +}
> +
> +static void mei_mkhi_fix(struct mei_cl_device *cldev)
> +{
> + int ret;
> +
> + dev_dbg(&cldev->dev, "running hook %s\n", __func__);
> +
> + ret = mei_cldev_enable(cldev);
> + if (ret)
> + return;
> +
> + ret = mei_osver(cldev);
> + if (ret)
> + dev_info(&cldev->dev, "OS version command failed\n");
> +
> + mei_cldev_disable(cldev);
> +}
> +
> /**
> * mei_wd - wd client on the bus, change protocol version
> * as the API has changed.
> @@ -310,6 +407,7 @@ static struct mei_fixup {
> MEI_FIXUP(MEI_UUID_NFC_INFO, blacklist),
> MEI_FIXUP(MEI_UUID_NFC_HCI, mei_nfc),
> MEI_FIXUP(MEI_UUID_WD, mei_wd),
> + MEI_FIXUP(MEI_UUID_MKHIF_FIX, mei_mkhi_fix),
> };
>
> /**
> --
> 2.7.4
>
next prev parent reply other threads:[~2016-11-08 16:32 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-08 16:26 [char-misc-next 1/2] mei: enable to set the internal flag for client write Tomas Winkler
2016-11-08 16:26 ` [char-misc-next 2/2] mei: send OS type to the FW Tomas Winkler
2016-11-08 16:32 ` Jarkko Sakkinen [this message]
2016-11-10 7:22 ` Greg Kroah-Hartman
2016-11-10 12:00 ` Winkler, Tomas
2016-11-10 12:14 ` Greg Kroah-Hartman
2016-11-10 12:19 ` Winkler, Tomas
2016-11-10 12:27 ` Greg Kroah-Hartman
2016-11-10 13:00 ` Winkler, Tomas
2016-11-10 13:15 ` Greg Kroah-Hartman
2016-11-10 7:24 ` Greg Kroah-Hartman
2016-11-10 12:13 ` Winkler, Tomas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161108163231.jus24ocasifgeqvy@intel.com \
--to=jarkko.sakkinen@linux.intel.com \
--cc=alexander.usyskin@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tomas.winkler@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.