From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: linux-kernel@vger.kernel.org
Cc: Andreas Noever <andreas.noever@gmail.com>,
Michael Jamet <michael.jamet@intel.com>,
Yehezkel Bernat <yehezkel.bernat@intel.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Mario.Limonciello@dell.com,
Radion Mirchevsky <radion.mirchevsky@intel.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>
Subject: [PATCH 14/18] thunderbolt: Move driver ready handling to struct icm
Date: Tue, 13 Feb 2018 20:00:14 +0300 [thread overview]
Message-ID: <20180213170018.9780-15-mika.westerberg@linux.intel.com> (raw)
In-Reply-To: <20180213170018.9780-1-mika.westerberg@linux.intel.com>
Intel Titan Ridge uses slightly different format for ICM driver ready
response, so add a new ->driver_ready() callback to struct icm and move
the existing handling to a separate function which we then use in Falcon
Ridge and Alpine Ridge.
No functional changes intended.
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
drivers/thunderbolt/icm.c | 42 +++++++++++++++++++++++++++++++-----------
drivers/thunderbolt/tb_msgs.h | 6 ++++--
2 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c
index a707a3b60f90..c7cb5cd36f68 100644
--- a/drivers/thunderbolt/icm.c
+++ b/drivers/thunderbolt/icm.c
@@ -59,6 +59,7 @@
* @is_supported: Checks if we can support ICM on this controller
* @get_mode: Read and return the ICM firmware mode (optional)
* @get_route: Find a route string for given switch
+ * @driver_ready: Send driver ready message to ICM
* @device_connected: Handle device connected ICM message
* @device_disconnected: Handle device disconnected ICM message
* @xdomain_connected - Handle XDomain connected ICM message
@@ -73,6 +74,8 @@ struct icm {
bool (*is_supported)(struct tb *tb);
int (*get_mode)(struct tb *tb);
int (*get_route)(struct tb *tb, u8 link, u8 depth, u64 *route);
+ int (*driver_ready)(struct tb *tb,
+ enum tb_security_level *security_level);
void (*device_connected)(struct tb *tb,
const struct icm_pkg_header *hdr);
void (*device_disconnected)(struct tb *tb,
@@ -246,6 +249,27 @@ static int icm_fr_get_route(struct tb *tb, u8 link, u8 depth, u64 *route)
return ret;
}
+static int
+icm_fr_driver_ready(struct tb *tb, enum tb_security_level *security_level)
+{
+ struct icm_fr_pkg_driver_ready_response reply;
+ struct icm_pkg_driver_ready request = {
+ .hdr.code = ICM_DRIVER_READY,
+ };
+ int ret;
+
+ memset(&reply, 0, sizeof(reply));
+ ret = icm_request(tb, &request, sizeof(request), &reply, sizeof(reply),
+ 1, ICM_TIMEOUT);
+ if (ret)
+ return ret;
+
+ if (security_level)
+ *security_level = reply.security_level & ICM_FR_SLEVEL_MASK;
+
+ return 0;
+}
+
static int icm_fr_approve_switch(struct tb *tb, struct tb_switch *sw)
{
struct icm_fr_pkg_approve_device request;
@@ -869,21 +893,15 @@ static void icm_handle_event(struct tb *tb, enum tb_cfg_pkg_type type,
static int
__icm_driver_ready(struct tb *tb, enum tb_security_level *security_level)
{
- struct icm_pkg_driver_ready_response reply;
- struct icm_pkg_driver_ready request = {
- .hdr.code = ICM_DRIVER_READY,
- };
+ struct icm *icm = tb_priv(tb);
unsigned int retries = 50;
int ret;
- memset(&reply, 0, sizeof(reply));
- ret = icm_request(tb, &request, sizeof(request), &reply, sizeof(reply),
- 1, ICM_TIMEOUT);
- if (ret)
+ ret = icm->driver_ready(tb, security_level);
+ if (ret) {
+ tb_err(tb, "failed to send driver ready to ICM\n");
return ret;
-
- if (security_level)
- *security_level = reply.security_level & 0xf;
+ }
/*
* Hold on here until the switch config space is accessible so
@@ -1329,6 +1347,7 @@ struct tb *icm_probe(struct tb_nhi *nhi)
case PCI_DEVICE_ID_INTEL_FALCON_RIDGE_4C_NHI:
icm->is_supported = icm_fr_is_supported;
icm->get_route = icm_fr_get_route;
+ icm->driver_ready = icm_fr_driver_ready;
icm->device_connected = icm_fr_device_connected;
icm->device_disconnected = icm_fr_device_disconnected;
icm->xdomain_connected = icm_fr_xdomain_connected;
@@ -1344,6 +1363,7 @@ struct tb *icm_probe(struct tb_nhi *nhi)
icm->is_supported = icm_ar_is_supported;
icm->get_mode = icm_ar_get_mode;
icm->get_route = icm_ar_get_route;
+ icm->driver_ready = icm_fr_driver_ready;
icm->device_connected = icm_fr_device_connected;
icm->device_disconnected = icm_fr_device_disconnected;
icm->xdomain_connected = icm_fr_xdomain_connected;
diff --git a/drivers/thunderbolt/tb_msgs.h b/drivers/thunderbolt/tb_msgs.h
index 476bc04cac6c..931db2a7c7b3 100644
--- a/drivers/thunderbolt/tb_msgs.h
+++ b/drivers/thunderbolt/tb_msgs.h
@@ -127,14 +127,16 @@ struct icm_pkg_driver_ready {
struct icm_pkg_header hdr;
};
-struct icm_pkg_driver_ready_response {
+/* Falcon Ridge & Alpine Ridge common messages */
+
+struct icm_fr_pkg_driver_ready_response {
struct icm_pkg_header hdr;
u8 romver;
u8 ramver;
u16 security_level;
};
-/* Falcon Ridge & Alpine Ridge common messages */
+#define ICM_FR_SLEVEL_MASK 0xf
struct icm_fr_pkg_get_topology {
struct icm_pkg_header hdr;
--
2.15.1
next prev parent reply other threads:[~2018-02-13 17:12 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-13 17:00 [PATCH 00/18] thunderbolt: Add support for Intel Titan Ridge Mika Westerberg
2018-02-13 17:00 ` [PATCH 01/18] thunderbolt: Resume control channel after hibernation image is created Mika Westerberg
2018-02-13 17:00 ` [PATCH 02/18] thunderbolt: Serialize PCIe tunnel creation with PCI rescan Mika Westerberg
2018-02-13 17:00 ` [PATCH 03/18] thunderbolt: Handle connecting device in place of host properly Mika Westerberg
2018-02-13 17:00 ` [PATCH 04/18] thunderbolt: Do not overwrite error code when domain adding fails Mika Westerberg
2018-02-13 17:00 ` [PATCH 05/18] thunderbolt: Wait a bit longer for root switch config space Mika Westerberg
2018-02-13 17:00 ` [PATCH 06/18] thunderbolt: Wait a bit longer for ICM to authenticate the active NVM Mika Westerberg
2018-02-13 17:21 ` Mario.Limonciello
2018-02-14 10:03 ` Mika Westerberg
2018-02-13 17:00 ` [PATCH 07/18] thunderbolt: Handle rejected Thunderbolt devices Mika Westerberg
2018-02-22 23:17 ` [07/18] " Jeremy McNicoll
2018-02-26 10:20 ` Mika Westerberg
2018-02-26 13:38 ` Mika Westerberg
2018-02-26 19:28 ` Jeremy McNicoll
2018-02-26 19:46 ` Mika Westerberg
2018-02-26 20:15 ` Jeremy McNicoll
2018-02-27 9:26 ` Mika Westerberg
2018-02-27 22:27 ` Jeremy McNicoll
2018-02-13 17:00 ` [PATCH 08/18] thunderbolt: Factor common ICM add and update operations out Mika Westerberg
2018-02-13 17:00 ` [PATCH 09/18] thunderbolt: Correct function name in kernel-doc comment Mika Westerberg
2018-02-13 17:00 ` [PATCH 10/18] thunderbolt: Add tb_switch_get() Mika Westerberg
2018-02-13 17:00 ` [PATCH 11/18] thunderbolt: Add tb_switch_find_by_route() Mika Westerberg
2018-02-13 17:00 ` [PATCH 12/18] thunderbolt: Add tb_xdomain_find_by_route() Mika Westerberg
2018-02-13 17:51 ` Andy Shevchenko
2018-02-14 10:25 ` Mika Westerberg
2018-02-13 17:00 ` [PATCH 13/18] thunderbolt: Add constant for approval timeout Mika Westerberg
2018-02-13 17:00 ` Mika Westerberg [this message]
2018-02-13 17:00 ` [PATCH 15/18] thunderbolt: Add 'boot' attribute for devices Mika Westerberg
2018-02-13 17:00 ` [PATCH 16/18] thunderbolt: Add support for preboot ACL Mika Westerberg
2018-02-13 18:19 ` Andy Shevchenko
2018-02-14 10:22 ` Mika Westerberg
2018-02-13 17:00 ` [PATCH 17/18] thunderbolt: Introduce USB only (SL4) security level Mika Westerberg
2018-02-14 0:29 ` Randy Dunlap
2018-02-14 10:09 ` Mika Westerberg
2018-02-13 17:00 ` [PATCH 18/18] thunderbolt: Add support for Intel Titan Ridge Mika Westerberg
2018-02-14 14:23 ` Andy Shevchenko
2018-02-14 14:28 ` Mika Westerberg
2018-02-14 14:29 ` Andy Shevchenko
2018-02-14 15:52 ` Mika Westerberg
2018-02-14 13:58 ` [PATCH 00/18] " Andy Shevchenko
2018-02-14 16:43 ` Mika Westerberg
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=20180213170018.9780-15-mika.westerberg@linux.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=Mario.Limonciello@dell.com \
--cc=andreas.noever@gmail.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.jamet@intel.com \
--cc=radion.mirchevsky@intel.com \
--cc=yehezkel.bernat@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).