xref: /openbmc/linux/drivers/thunderbolt/xdomain.c (revision 4e99c98e)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Thunderbolt XDomain discovery protocol support
4  *
5  * Copyright (C) 2017, Intel Corporation
6  * Authors: Michael Jamet <michael.jamet@intel.com>
7  *          Mika Westerberg <mika.westerberg@linux.intel.com>
8  */
9 
10 #include <linux/device.h>
11 #include <linux/delay.h>
12 #include <linux/kmod.h>
13 #include <linux/module.h>
14 #include <linux/pm_runtime.h>
15 #include <linux/prandom.h>
16 #include <linux/string_helpers.h>
17 #include <linux/utsname.h>
18 #include <linux/uuid.h>
19 #include <linux/workqueue.h>
20 
21 #include "tb.h"
22 
23 #define XDOMAIN_SHORT_TIMEOUT			100	/* ms */
24 #define XDOMAIN_DEFAULT_TIMEOUT			1000	/* ms */
25 #define XDOMAIN_BONDING_TIMEOUT			10000	/* ms */
26 #define XDOMAIN_RETRIES				10
27 #define XDOMAIN_DEFAULT_MAX_HOPID		15
28 
29 enum {
30 	XDOMAIN_STATE_INIT,
31 	XDOMAIN_STATE_UUID,
32 	XDOMAIN_STATE_LINK_STATUS,
33 	XDOMAIN_STATE_LINK_STATE_CHANGE,
34 	XDOMAIN_STATE_LINK_STATUS2,
35 	XDOMAIN_STATE_BONDING_UUID_LOW,
36 	XDOMAIN_STATE_BONDING_UUID_HIGH,
37 	XDOMAIN_STATE_PROPERTIES,
38 	XDOMAIN_STATE_ENUMERATED,
39 	XDOMAIN_STATE_ERROR,
40 };
41 
42 static const char * const state_names[] = {
43 	[XDOMAIN_STATE_INIT] = "INIT",
44 	[XDOMAIN_STATE_UUID] = "UUID",
45 	[XDOMAIN_STATE_LINK_STATUS] = "LINK_STATUS",
46 	[XDOMAIN_STATE_LINK_STATE_CHANGE] = "LINK_STATE_CHANGE",
47 	[XDOMAIN_STATE_LINK_STATUS2] = "LINK_STATUS2",
48 	[XDOMAIN_STATE_BONDING_UUID_LOW] = "BONDING_UUID_LOW",
49 	[XDOMAIN_STATE_BONDING_UUID_HIGH] = "BONDING_UUID_HIGH",
50 	[XDOMAIN_STATE_PROPERTIES] = "PROPERTIES",
51 	[XDOMAIN_STATE_ENUMERATED] = "ENUMERATED",
52 	[XDOMAIN_STATE_ERROR] = "ERROR",
53 };
54 
55 struct xdomain_request_work {
56 	struct work_struct work;
57 	struct tb_xdp_header *pkg;
58 	struct tb *tb;
59 };
60 
61 static bool tb_xdomain_enabled = true;
62 module_param_named(xdomain, tb_xdomain_enabled, bool, 0444);
63 MODULE_PARM_DESC(xdomain, "allow XDomain protocol (default: true)");
64 
65 /*
66  * Serializes access to the properties and protocol handlers below. If
67  * you need to take both this lock and the struct tb_xdomain lock, take
68  * this one first.
69  */
70 static DEFINE_MUTEX(xdomain_lock);
71 
72 /* Properties exposed to the remote domains */
73 static struct tb_property_dir *xdomain_property_dir;
74 static u32 xdomain_property_block_gen;
75 
76 /* Additional protocol handlers */
77 static LIST_HEAD(protocol_handlers);
78 
79 /* UUID for XDomain discovery protocol: b638d70e-42ff-40bb-97c2-90e2c0b2ff07 */
80 static const uuid_t tb_xdp_uuid =
81 	UUID_INIT(0xb638d70e, 0x42ff, 0x40bb,
82 		  0x97, 0xc2, 0x90, 0xe2, 0xc0, 0xb2, 0xff, 0x07);
83 
84 bool tb_is_xdomain_enabled(void)
85 {
86 	return tb_xdomain_enabled && tb_acpi_is_xdomain_allowed();
87 }
88 
89 static bool tb_xdomain_match(const struct tb_cfg_request *req,
90 			     const struct ctl_pkg *pkg)
91 {
92 	switch (pkg->frame.eof) {
93 	case TB_CFG_PKG_ERROR:
94 		return true;
95 
96 	case TB_CFG_PKG_XDOMAIN_RESP: {
97 		const struct tb_xdp_header *res_hdr = pkg->buffer;
98 		const struct tb_xdp_header *req_hdr = req->request;
99 
100 		if (pkg->frame.size < req->response_size / 4)
101 			return false;
102 
103 		/* Make sure route matches */
104 		if ((res_hdr->xd_hdr.route_hi & ~BIT(31)) !=
105 		     req_hdr->xd_hdr.route_hi)
106 			return false;
107 		if ((res_hdr->xd_hdr.route_lo) != req_hdr->xd_hdr.route_lo)
108 			return false;
109 
110 		/* Check that the XDomain protocol matches */
111 		if (!uuid_equal(&res_hdr->uuid, &req_hdr->uuid))
112 			return false;
113 
114 		return true;
115 	}
116 
117 	default:
118 		return false;
119 	}
120 }
121 
122 static bool tb_xdomain_copy(struct tb_cfg_request *req,
123 			    const struct ctl_pkg *pkg)
124 {
125 	memcpy(req->response, pkg->buffer, req->response_size);
126 	req->result.err = 0;
127 	return true;
128 }
129 
130 static void response_ready(void *data)
131 {
132 	tb_cfg_request_put(data);
133 }
134 
135 static int __tb_xdomain_response(struct tb_ctl *ctl, const void *response,
136 				 size_t size, enum tb_cfg_pkg_type type)
137 {
138 	struct tb_cfg_request *req;
139 
140 	req = tb_cfg_request_alloc();
141 	if (!req)
142 		return -ENOMEM;
143 
144 	req->match = tb_xdomain_match;
145 	req->copy = tb_xdomain_copy;
146 	req->request = response;
147 	req->request_size = size;
148 	req->request_type = type;
149 
150 	return tb_cfg_request(ctl, req, response_ready, req);
151 }
152 
153 /**
154  * tb_xdomain_response() - Send a XDomain response message
155  * @xd: XDomain to send the message
156  * @response: Response to send
157  * @size: Size of the response
158  * @type: PDF type of the response
159  *
160  * This can be used to send a XDomain response message to the other
161  * domain. No response for the message is expected.
162  *
163  * Return: %0 in case of success and negative errno in case of failure
164  */
165 int tb_xdomain_response(struct tb_xdomain *xd, const void *response,
166 			size_t size, enum tb_cfg_pkg_type type)
167 {
168 	return __tb_xdomain_response(xd->tb->ctl, response, size, type);
169 }
170 EXPORT_SYMBOL_GPL(tb_xdomain_response);
171 
172 static int __tb_xdomain_request(struct tb_ctl *ctl, const void *request,
173 	size_t request_size, enum tb_cfg_pkg_type request_type, void *response,
174 	size_t response_size, enum tb_cfg_pkg_type response_type,
175 	unsigned int timeout_msec)
176 {
177 	struct tb_cfg_request *req;
178 	struct tb_cfg_result res;
179 
180 	req = tb_cfg_request_alloc();
181 	if (!req)
182 		return -ENOMEM;
183 
184 	req->match = tb_xdomain_match;
185 	req->copy = tb_xdomain_copy;
186 	req->request = request;
187 	req->request_size = request_size;
188 	req->request_type = request_type;
189 	req->response = response;
190 	req->response_size = response_size;
191 	req->response_type = response_type;
192 
193 	res = tb_cfg_request_sync(ctl, req, timeout_msec);
194 
195 	tb_cfg_request_put(req);
196 
197 	return res.err == 1 ? -EIO : res.err;
198 }
199 
200 /**
201  * tb_xdomain_request() - Send a XDomain request
202  * @xd: XDomain to send the request
203  * @request: Request to send
204  * @request_size: Size of the request in bytes
205  * @request_type: PDF type of the request
206  * @response: Response is copied here
207  * @response_size: Expected size of the response in bytes
208  * @response_type: Expected PDF type of the response
209  * @timeout_msec: Timeout in milliseconds to wait for the response
210  *
211  * This function can be used to send XDomain control channel messages to
212  * the other domain. The function waits until the response is received
213  * or when timeout triggers. Whichever comes first.
214  *
215  * Return: %0 in case of success and negative errno in case of failure
216  */
217 int tb_xdomain_request(struct tb_xdomain *xd, const void *request,
218 	size_t request_size, enum tb_cfg_pkg_type request_type,
219 	void *response, size_t response_size,
220 	enum tb_cfg_pkg_type response_type, unsigned int timeout_msec)
221 {
222 	return __tb_xdomain_request(xd->tb->ctl, request, request_size,
223 				    request_type, response, response_size,
224 				    response_type, timeout_msec);
225 }
226 EXPORT_SYMBOL_GPL(tb_xdomain_request);
227 
228 static inline void tb_xdp_fill_header(struct tb_xdp_header *hdr, u64 route,
229 	u8 sequence, enum tb_xdp_type type, size_t size)
230 {
231 	u32 length_sn;
232 
233 	length_sn = (size - sizeof(hdr->xd_hdr)) / 4;
234 	length_sn |= (sequence << TB_XDOMAIN_SN_SHIFT) & TB_XDOMAIN_SN_MASK;
235 
236 	hdr->xd_hdr.route_hi = upper_32_bits(route);
237 	hdr->xd_hdr.route_lo = lower_32_bits(route);
238 	hdr->xd_hdr.length_sn = length_sn;
239 	hdr->type = type;
240 	memcpy(&hdr->uuid, &tb_xdp_uuid, sizeof(tb_xdp_uuid));
241 }
242 
243 static int tb_xdp_handle_error(const struct tb_xdp_error_response *res)
244 {
245 	if (res->hdr.type != ERROR_RESPONSE)
246 		return 0;
247 
248 	switch (res->error) {
249 	case ERROR_UNKNOWN_PACKET:
250 	case ERROR_UNKNOWN_DOMAIN:
251 		return -EIO;
252 	case ERROR_NOT_SUPPORTED:
253 		return -ENOTSUPP;
254 	case ERROR_NOT_READY:
255 		return -EAGAIN;
256 	default:
257 		break;
258 	}
259 
260 	return 0;
261 }
262 
263 static int tb_xdp_uuid_request(struct tb_ctl *ctl, u64 route, int retry,
264 			       uuid_t *uuid, u64 *remote_route)
265 {
266 	struct tb_xdp_uuid_response res;
267 	struct tb_xdp_uuid req;
268 	int ret;
269 
270 	memset(&req, 0, sizeof(req));
271 	tb_xdp_fill_header(&req.hdr, route, retry % 4, UUID_REQUEST,
272 			   sizeof(req));
273 
274 	memset(&res, 0, sizeof(res));
275 	ret = __tb_xdomain_request(ctl, &req, sizeof(req),
276 				   TB_CFG_PKG_XDOMAIN_REQ, &res, sizeof(res),
277 				   TB_CFG_PKG_XDOMAIN_RESP,
278 				   XDOMAIN_DEFAULT_TIMEOUT);
279 	if (ret)
280 		return ret;
281 
282 	ret = tb_xdp_handle_error(&res.err);
283 	if (ret)
284 		return ret;
285 
286 	uuid_copy(uuid, &res.src_uuid);
287 	*remote_route = (u64)res.src_route_hi << 32 | res.src_route_lo;
288 
289 	return 0;
290 }
291 
292 static int tb_xdp_uuid_response(struct tb_ctl *ctl, u64 route, u8 sequence,
293 				const uuid_t *uuid)
294 {
295 	struct tb_xdp_uuid_response res;
296 
297 	memset(&res, 0, sizeof(res));
298 	tb_xdp_fill_header(&res.hdr, route, sequence, UUID_RESPONSE,
299 			   sizeof(res));
300 
301 	uuid_copy(&res.src_uuid, uuid);
302 	res.src_route_hi = upper_32_bits(route);
303 	res.src_route_lo = lower_32_bits(route);
304 
305 	return __tb_xdomain_response(ctl, &res, sizeof(res),
306 				     TB_CFG_PKG_XDOMAIN_RESP);
307 }
308 
309 static int tb_xdp_error_response(struct tb_ctl *ctl, u64 route, u8 sequence,
310 				 enum tb_xdp_error error)
311 {
312 	struct tb_xdp_error_response res;
313 
314 	memset(&res, 0, sizeof(res));
315 	tb_xdp_fill_header(&res.hdr, route, sequence, ERROR_RESPONSE,
316 			   sizeof(res));
317 	res.error = error;
318 
319 	return __tb_xdomain_response(ctl, &res, sizeof(res),
320 				     TB_CFG_PKG_XDOMAIN_RESP);
321 }
322 
323 static int tb_xdp_properties_request(struct tb_ctl *ctl, u64 route,
324 	const uuid_t *src_uuid, const uuid_t *dst_uuid, int retry,
325 	u32 **block, u32 *generation)
326 {
327 	struct tb_xdp_properties_response *res;
328 	struct tb_xdp_properties req;
329 	u16 data_len, len;
330 	size_t total_size;
331 	u32 *data = NULL;
332 	int ret;
333 
334 	total_size = sizeof(*res) + TB_XDP_PROPERTIES_MAX_DATA_LENGTH * 4;
335 	res = kzalloc(total_size, GFP_KERNEL);
336 	if (!res)
337 		return -ENOMEM;
338 
339 	memset(&req, 0, sizeof(req));
340 	tb_xdp_fill_header(&req.hdr, route, retry % 4, PROPERTIES_REQUEST,
341 			   sizeof(req));
342 	memcpy(&req.src_uuid, src_uuid, sizeof(*src_uuid));
343 	memcpy(&req.dst_uuid, dst_uuid, sizeof(*dst_uuid));
344 
345 	data_len = 0;
346 
347 	do {
348 		ret = __tb_xdomain_request(ctl, &req, sizeof(req),
349 					   TB_CFG_PKG_XDOMAIN_REQ, res,
350 					   total_size, TB_CFG_PKG_XDOMAIN_RESP,
351 					   XDOMAIN_DEFAULT_TIMEOUT);
352 		if (ret)
353 			goto err;
354 
355 		ret = tb_xdp_handle_error(&res->err);
356 		if (ret)
357 			goto err;
358 
359 		/*
360 		 * Package length includes the whole payload without the
361 		 * XDomain header. Validate first that the package is at
362 		 * least size of the response structure.
363 		 */
364 		len = res->hdr.xd_hdr.length_sn & TB_XDOMAIN_LENGTH_MASK;
365 		if (len < sizeof(*res) / 4) {
366 			ret = -EINVAL;
367 			goto err;
368 		}
369 
370 		len += sizeof(res->hdr.xd_hdr) / 4;
371 		len -= sizeof(*res) / 4;
372 
373 		if (res->offset != req.offset) {
374 			ret = -EINVAL;
375 			goto err;
376 		}
377 
378 		/*
379 		 * First time allocate block that has enough space for
380 		 * the whole properties block.
381 		 */
382 		if (!data) {
383 			data_len = res->data_length;
384 			if (data_len > TB_XDP_PROPERTIES_MAX_LENGTH) {
385 				ret = -E2BIG;
386 				goto err;
387 			}
388 
389 			data = kcalloc(data_len, sizeof(u32), GFP_KERNEL);
390 			if (!data) {
391 				ret = -ENOMEM;
392 				goto err;
393 			}
394 		}
395 
396 		memcpy(data + req.offset, res->data, len * 4);
397 		req.offset += len;
398 	} while (!data_len || req.offset < data_len);
399 
400 	*block = data;
401 	*generation = res->generation;
402 
403 	kfree(res);
404 
405 	return data_len;
406 
407 err:
408 	kfree(data);
409 	kfree(res);
410 
411 	return ret;
412 }
413 
414 static int tb_xdp_properties_response(struct tb *tb, struct tb_ctl *ctl,
415 	struct tb_xdomain *xd, u8 sequence, const struct tb_xdp_properties *req)
416 {
417 	struct tb_xdp_properties_response *res;
418 	size_t total_size;
419 	u16 len;
420 	int ret;
421 
422 	/*
423 	 * Currently we expect all requests to be directed to us. The
424 	 * protocol supports forwarding, though which we might add
425 	 * support later on.
426 	 */
427 	if (!uuid_equal(xd->local_uuid, &req->dst_uuid)) {
428 		tb_xdp_error_response(ctl, xd->route, sequence,
429 				      ERROR_UNKNOWN_DOMAIN);
430 		return 0;
431 	}
432 
433 	mutex_lock(&xd->lock);
434 
435 	if (req->offset >= xd->local_property_block_len) {
436 		mutex_unlock(&xd->lock);
437 		return -EINVAL;
438 	}
439 
440 	len = xd->local_property_block_len - req->offset;
441 	len = min_t(u16, len, TB_XDP_PROPERTIES_MAX_DATA_LENGTH);
442 	total_size = sizeof(*res) + len * 4;
443 
444 	res = kzalloc(total_size, GFP_KERNEL);
445 	if (!res) {
446 		mutex_unlock(&xd->lock);
447 		return -ENOMEM;
448 	}
449 
450 	tb_xdp_fill_header(&res->hdr, xd->route, sequence, PROPERTIES_RESPONSE,
451 			   total_size);
452 	res->generation = xd->local_property_block_gen;
453 	res->data_length = xd->local_property_block_len;
454 	res->offset = req->offset;
455 	uuid_copy(&res->src_uuid, xd->local_uuid);
456 	uuid_copy(&res->dst_uuid, &req->src_uuid);
457 	memcpy(res->data, &xd->local_property_block[req->offset], len * 4);
458 
459 	mutex_unlock(&xd->lock);
460 
461 	ret = __tb_xdomain_response(ctl, res, total_size,
462 				    TB_CFG_PKG_XDOMAIN_RESP);
463 
464 	kfree(res);
465 	return ret;
466 }
467 
468 static int tb_xdp_properties_changed_request(struct tb_ctl *ctl, u64 route,
469 					     int retry, const uuid_t *uuid)
470 {
471 	struct tb_xdp_properties_changed_response res;
472 	struct tb_xdp_properties_changed req;
473 	int ret;
474 
475 	memset(&req, 0, sizeof(req));
476 	tb_xdp_fill_header(&req.hdr, route, retry % 4,
477 			   PROPERTIES_CHANGED_REQUEST, sizeof(req));
478 	uuid_copy(&req.src_uuid, uuid);
479 
480 	memset(&res, 0, sizeof(res));
481 	ret = __tb_xdomain_request(ctl, &req, sizeof(req),
482 				   TB_CFG_PKG_XDOMAIN_REQ, &res, sizeof(res),
483 				   TB_CFG_PKG_XDOMAIN_RESP,
484 				   XDOMAIN_DEFAULT_TIMEOUT);
485 	if (ret)
486 		return ret;
487 
488 	return tb_xdp_handle_error(&res.err);
489 }
490 
491 static int
492 tb_xdp_properties_changed_response(struct tb_ctl *ctl, u64 route, u8 sequence)
493 {
494 	struct tb_xdp_properties_changed_response res;
495 
496 	memset(&res, 0, sizeof(res));
497 	tb_xdp_fill_header(&res.hdr, route, sequence,
498 			   PROPERTIES_CHANGED_RESPONSE, sizeof(res));
499 	return __tb_xdomain_response(ctl, &res, sizeof(res),
500 				     TB_CFG_PKG_XDOMAIN_RESP);
501 }
502 
503 static int tb_xdp_link_state_status_request(struct tb_ctl *ctl, u64 route,
504 					    u8 sequence, u8 *slw, u8 *tlw,
505 					    u8 *sls, u8 *tls)
506 {
507 	struct tb_xdp_link_state_status_response res;
508 	struct tb_xdp_link_state_status req;
509 	int ret;
510 
511 	memset(&req, 0, sizeof(req));
512 	tb_xdp_fill_header(&req.hdr, route, sequence, LINK_STATE_STATUS_REQUEST,
513 			   sizeof(req));
514 
515 	memset(&res, 0, sizeof(res));
516 	ret = __tb_xdomain_request(ctl, &req, sizeof(req), TB_CFG_PKG_XDOMAIN_REQ,
517 				   &res, sizeof(res), TB_CFG_PKG_XDOMAIN_RESP,
518 				   XDOMAIN_DEFAULT_TIMEOUT);
519 	if (ret)
520 		return ret;
521 
522 	ret = tb_xdp_handle_error(&res.err);
523 	if (ret)
524 		return ret;
525 
526 	if (res.status != 0)
527 		return -EREMOTEIO;
528 
529 	*slw = res.slw;
530 	*tlw = res.tlw;
531 	*sls = res.sls;
532 	*tls = res.tls;
533 
534 	return 0;
535 }
536 
537 static int tb_xdp_link_state_status_response(struct tb *tb, struct tb_ctl *ctl,
538 					     struct tb_xdomain *xd, u8 sequence)
539 {
540 	struct tb_switch *sw = tb_to_switch(xd->dev.parent);
541 	struct tb_xdp_link_state_status_response res;
542 	struct tb_port *port = tb_port_at(xd->route, sw);
543 	u32 val[2];
544 	int ret;
545 
546 	memset(&res, 0, sizeof(res));
547 	tb_xdp_fill_header(&res.hdr, xd->route, sequence,
548 			   LINK_STATE_STATUS_RESPONSE, sizeof(res));
549 
550 	ret = tb_port_read(port, val, TB_CFG_PORT,
551 			   port->cap_phy + LANE_ADP_CS_0, ARRAY_SIZE(val));
552 	if (ret)
553 		return ret;
554 
555 	res.slw = (val[0] & LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK) >>
556 			LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT;
557 	res.sls = (val[0] & LANE_ADP_CS_0_SUPPORTED_SPEED_MASK) >>
558 			LANE_ADP_CS_0_SUPPORTED_SPEED_SHIFT;
559 	res.tls = val[1] & LANE_ADP_CS_1_TARGET_SPEED_MASK;
560 	res.tlw = (val[1] & LANE_ADP_CS_1_TARGET_WIDTH_MASK) >>
561 			LANE_ADP_CS_1_TARGET_WIDTH_SHIFT;
562 
563 	return __tb_xdomain_response(ctl, &res, sizeof(res),
564 				     TB_CFG_PKG_XDOMAIN_RESP);
565 }
566 
567 static int tb_xdp_link_state_change_request(struct tb_ctl *ctl, u64 route,
568 					    u8 sequence, u8 tlw, u8 tls)
569 {
570 	struct tb_xdp_link_state_change_response res;
571 	struct tb_xdp_link_state_change req;
572 	int ret;
573 
574 	memset(&req, 0, sizeof(req));
575 	tb_xdp_fill_header(&req.hdr, route, sequence, LINK_STATE_CHANGE_REQUEST,
576 			   sizeof(req));
577 	req.tlw = tlw;
578 	req.tls = tls;
579 
580 	memset(&res, 0, sizeof(res));
581 	ret = __tb_xdomain_request(ctl, &req, sizeof(req), TB_CFG_PKG_XDOMAIN_REQ,
582 				   &res, sizeof(res), TB_CFG_PKG_XDOMAIN_RESP,
583 				   XDOMAIN_DEFAULT_TIMEOUT);
584 	if (ret)
585 		return ret;
586 
587 	ret = tb_xdp_handle_error(&res.err);
588 	if (ret)
589 		return ret;
590 
591 	return res.status != 0 ? -EREMOTEIO : 0;
592 }
593 
594 static int tb_xdp_link_state_change_response(struct tb_ctl *ctl, u64 route,
595 					     u8 sequence, u32 status)
596 {
597 	struct tb_xdp_link_state_change_response res;
598 
599 	memset(&res, 0, sizeof(res));
600 	tb_xdp_fill_header(&res.hdr, route, sequence, LINK_STATE_CHANGE_RESPONSE,
601 			   sizeof(res));
602 
603 	res.status = status;
604 
605 	return __tb_xdomain_response(ctl, &res, sizeof(res),
606 				     TB_CFG_PKG_XDOMAIN_RESP);
607 }
608 
609 /**
610  * tb_register_protocol_handler() - Register protocol handler
611  * @handler: Handler to register
612  *
613  * This allows XDomain service drivers to hook into incoming XDomain
614  * messages. After this function is called the service driver needs to
615  * be able to handle calls to callback whenever a package with the
616  * registered protocol is received.
617  */
618 int tb_register_protocol_handler(struct tb_protocol_handler *handler)
619 {
620 	if (!handler->uuid || !handler->callback)
621 		return -EINVAL;
622 	if (uuid_equal(handler->uuid, &tb_xdp_uuid))
623 		return -EINVAL;
624 
625 	mutex_lock(&xdomain_lock);
626 	list_add_tail(&handler->list, &protocol_handlers);
627 	mutex_unlock(&xdomain_lock);
628 
629 	return 0;
630 }
631 EXPORT_SYMBOL_GPL(tb_register_protocol_handler);
632 
633 /**
634  * tb_unregister_protocol_handler() - Unregister protocol handler
635  * @handler: Handler to unregister
636  *
637  * Removes the previously registered protocol handler.
638  */
639 void tb_unregister_protocol_handler(struct tb_protocol_handler *handler)
640 {
641 	mutex_lock(&xdomain_lock);
642 	list_del_init(&handler->list);
643 	mutex_unlock(&xdomain_lock);
644 }
645 EXPORT_SYMBOL_GPL(tb_unregister_protocol_handler);
646 
647 static void update_property_block(struct tb_xdomain *xd)
648 {
649 	mutex_lock(&xdomain_lock);
650 	mutex_lock(&xd->lock);
651 	/*
652 	 * If the local property block is not up-to-date, rebuild it now
653 	 * based on the global property template.
654 	 */
655 	if (!xd->local_property_block ||
656 	    xd->local_property_block_gen < xdomain_property_block_gen) {
657 		struct tb_property_dir *dir;
658 		int ret, block_len;
659 		u32 *block;
660 
661 		dir = tb_property_copy_dir(xdomain_property_dir);
662 		if (!dir) {
663 			dev_warn(&xd->dev, "failed to copy properties\n");
664 			goto out_unlock;
665 		}
666 
667 		/* Fill in non-static properties now */
668 		tb_property_add_text(dir, "deviceid", utsname()->nodename);
669 		tb_property_add_immediate(dir, "maxhopid", xd->local_max_hopid);
670 
671 		ret = tb_property_format_dir(dir, NULL, 0);
672 		if (ret < 0) {
673 			dev_warn(&xd->dev, "local property block creation failed\n");
674 			tb_property_free_dir(dir);
675 			goto out_unlock;
676 		}
677 
678 		block_len = ret;
679 		block = kcalloc(block_len, sizeof(*block), GFP_KERNEL);
680 		if (!block) {
681 			tb_property_free_dir(dir);
682 			goto out_unlock;
683 		}
684 
685 		ret = tb_property_format_dir(dir, block, block_len);
686 		if (ret) {
687 			dev_warn(&xd->dev, "property block generation failed\n");
688 			tb_property_free_dir(dir);
689 			kfree(block);
690 			goto out_unlock;
691 		}
692 
693 		tb_property_free_dir(dir);
694 		/* Release the previous block */
695 		kfree(xd->local_property_block);
696 		/* Assign new one */
697 		xd->local_property_block = block;
698 		xd->local_property_block_len = block_len;
699 		xd->local_property_block_gen = xdomain_property_block_gen;
700 	}
701 
702 out_unlock:
703 	mutex_unlock(&xd->lock);
704 	mutex_unlock(&xdomain_lock);
705 }
706 
707 static void tb_xdp_handle_request(struct work_struct *work)
708 {
709 	struct xdomain_request_work *xw = container_of(work, typeof(*xw), work);
710 	const struct tb_xdp_header *pkg = xw->pkg;
711 	const struct tb_xdomain_header *xhdr = &pkg->xd_hdr;
712 	struct tb *tb = xw->tb;
713 	struct tb_ctl *ctl = tb->ctl;
714 	struct tb_xdomain *xd;
715 	const uuid_t *uuid;
716 	int ret = 0;
717 	u32 sequence;
718 	u64 route;
719 
720 	route = ((u64)xhdr->route_hi << 32 | xhdr->route_lo) & ~BIT_ULL(63);
721 	sequence = xhdr->length_sn & TB_XDOMAIN_SN_MASK;
722 	sequence >>= TB_XDOMAIN_SN_SHIFT;
723 
724 	mutex_lock(&tb->lock);
725 	if (tb->root_switch)
726 		uuid = tb->root_switch->uuid;
727 	else
728 		uuid = NULL;
729 	mutex_unlock(&tb->lock);
730 
731 	if (!uuid) {
732 		tb_xdp_error_response(ctl, route, sequence, ERROR_NOT_READY);
733 		goto out;
734 	}
735 
736 	xd = tb_xdomain_find_by_route_locked(tb, route);
737 	if (xd)
738 		update_property_block(xd);
739 
740 	switch (pkg->type) {
741 	case PROPERTIES_REQUEST:
742 		tb_dbg(tb, "%llx: received XDomain properties request\n", route);
743 		if (xd) {
744 			ret = tb_xdp_properties_response(tb, ctl, xd, sequence,
745 				(const struct tb_xdp_properties *)pkg);
746 		}
747 		break;
748 
749 	case PROPERTIES_CHANGED_REQUEST:
750 		tb_dbg(tb, "%llx: received XDomain properties changed request\n",
751 		       route);
752 
753 		ret = tb_xdp_properties_changed_response(ctl, route, sequence);
754 
755 		/*
756 		 * Since the properties have been changed, let's update
757 		 * the xdomain related to this connection as well in
758 		 * case there is a change in services it offers.
759 		 */
760 		if (xd && device_is_registered(&xd->dev))
761 			queue_delayed_work(tb->wq, &xd->state_work,
762 					   msecs_to_jiffies(XDOMAIN_SHORT_TIMEOUT));
763 		break;
764 
765 	case UUID_REQUEST_OLD:
766 	case UUID_REQUEST:
767 		tb_dbg(tb, "%llx: received XDomain UUID request\n", route);
768 		ret = tb_xdp_uuid_response(ctl, route, sequence, uuid);
769 		break;
770 
771 	case LINK_STATE_STATUS_REQUEST:
772 		tb_dbg(tb, "%llx: received XDomain link state status request\n",
773 		       route);
774 
775 		if (xd) {
776 			ret = tb_xdp_link_state_status_response(tb, ctl, xd,
777 								sequence);
778 		} else {
779 			tb_xdp_error_response(ctl, route, sequence,
780 					      ERROR_NOT_READY);
781 		}
782 		break;
783 
784 	case LINK_STATE_CHANGE_REQUEST:
785 		tb_dbg(tb, "%llx: received XDomain link state change request\n",
786 		       route);
787 
788 		if (xd && xd->state == XDOMAIN_STATE_BONDING_UUID_HIGH) {
789 			const struct tb_xdp_link_state_change *lsc =
790 				(const struct tb_xdp_link_state_change *)pkg;
791 
792 			ret = tb_xdp_link_state_change_response(ctl, route,
793 								sequence, 0);
794 			xd->target_link_width = lsc->tlw;
795 			queue_delayed_work(tb->wq, &xd->state_work,
796 					   msecs_to_jiffies(XDOMAIN_SHORT_TIMEOUT));
797 		} else {
798 			tb_xdp_error_response(ctl, route, sequence,
799 					      ERROR_NOT_READY);
800 		}
801 		break;
802 
803 	default:
804 		tb_dbg(tb, "%llx: unknown XDomain request %#x\n", route, pkg->type);
805 		tb_xdp_error_response(ctl, route, sequence,
806 				      ERROR_NOT_SUPPORTED);
807 		break;
808 	}
809 
810 	tb_xdomain_put(xd);
811 
812 	if (ret) {
813 		tb_warn(tb, "failed to send XDomain response for %#x\n",
814 			pkg->type);
815 	}
816 
817 out:
818 	kfree(xw->pkg);
819 	kfree(xw);
820 
821 	tb_domain_put(tb);
822 }
823 
824 static bool
825 tb_xdp_schedule_request(struct tb *tb, const struct tb_xdp_header *hdr,
826 			size_t size)
827 {
828 	struct xdomain_request_work *xw;
829 
830 	xw = kmalloc(sizeof(*xw), GFP_KERNEL);
831 	if (!xw)
832 		return false;
833 
834 	INIT_WORK(&xw->work, tb_xdp_handle_request);
835 	xw->pkg = kmemdup(hdr, size, GFP_KERNEL);
836 	if (!xw->pkg) {
837 		kfree(xw);
838 		return false;
839 	}
840 	xw->tb = tb_domain_get(tb);
841 
842 	schedule_work(&xw->work);
843 	return true;
844 }
845 
846 /**
847  * tb_register_service_driver() - Register XDomain service driver
848  * @drv: Driver to register
849  *
850  * Registers new service driver from @drv to the bus.
851  */
852 int tb_register_service_driver(struct tb_service_driver *drv)
853 {
854 	drv->driver.bus = &tb_bus_type;
855 	return driver_register(&drv->driver);
856 }
857 EXPORT_SYMBOL_GPL(tb_register_service_driver);
858 
859 /**
860  * tb_unregister_service_driver() - Unregister XDomain service driver
861  * @drv: Driver to unregister
862  *
863  * Unregisters XDomain service driver from the bus.
864  */
865 void tb_unregister_service_driver(struct tb_service_driver *drv)
866 {
867 	driver_unregister(&drv->driver);
868 }
869 EXPORT_SYMBOL_GPL(tb_unregister_service_driver);
870 
871 static ssize_t key_show(struct device *dev, struct device_attribute *attr,
872 			char *buf)
873 {
874 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
875 
876 	/*
877 	 * It should be null terminated but anything else is pretty much
878 	 * allowed.
879 	 */
880 	return sysfs_emit(buf, "%*pE\n", (int)strlen(svc->key), svc->key);
881 }
882 static DEVICE_ATTR_RO(key);
883 
884 static int get_modalias(const struct tb_service *svc, char *buf, size_t size)
885 {
886 	return snprintf(buf, size, "tbsvc:k%sp%08Xv%08Xr%08X", svc->key,
887 			svc->prtcid, svc->prtcvers, svc->prtcrevs);
888 }
889 
890 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
891 			     char *buf)
892 {
893 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
894 
895 	/* Full buffer size except new line and null termination */
896 	get_modalias(svc, buf, PAGE_SIZE - 2);
897 	return strlen(strcat(buf, "\n"));
898 }
899 static DEVICE_ATTR_RO(modalias);
900 
901 static ssize_t prtcid_show(struct device *dev, struct device_attribute *attr,
902 			   char *buf)
903 {
904 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
905 
906 	return sysfs_emit(buf, "%u\n", svc->prtcid);
907 }
908 static DEVICE_ATTR_RO(prtcid);
909 
910 static ssize_t prtcvers_show(struct device *dev, struct device_attribute *attr,
911 			     char *buf)
912 {
913 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
914 
915 	return sysfs_emit(buf, "%u\n", svc->prtcvers);
916 }
917 static DEVICE_ATTR_RO(prtcvers);
918 
919 static ssize_t prtcrevs_show(struct device *dev, struct device_attribute *attr,
920 			     char *buf)
921 {
922 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
923 
924 	return sysfs_emit(buf, "%u\n", svc->prtcrevs);
925 }
926 static DEVICE_ATTR_RO(prtcrevs);
927 
928 static ssize_t prtcstns_show(struct device *dev, struct device_attribute *attr,
929 			     char *buf)
930 {
931 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
932 
933 	return sysfs_emit(buf, "0x%08x\n", svc->prtcstns);
934 }
935 static DEVICE_ATTR_RO(prtcstns);
936 
937 static struct attribute *tb_service_attrs[] = {
938 	&dev_attr_key.attr,
939 	&dev_attr_modalias.attr,
940 	&dev_attr_prtcid.attr,
941 	&dev_attr_prtcvers.attr,
942 	&dev_attr_prtcrevs.attr,
943 	&dev_attr_prtcstns.attr,
944 	NULL,
945 };
946 
947 static const struct attribute_group tb_service_attr_group = {
948 	.attrs = tb_service_attrs,
949 };
950 
951 static const struct attribute_group *tb_service_attr_groups[] = {
952 	&tb_service_attr_group,
953 	NULL,
954 };
955 
956 static int tb_service_uevent(const struct device *dev, struct kobj_uevent_env *env)
957 {
958 	const struct tb_service *svc = container_of_const(dev, struct tb_service, dev);
959 	char modalias[64];
960 
961 	get_modalias(svc, modalias, sizeof(modalias));
962 	return add_uevent_var(env, "MODALIAS=%s", modalias);
963 }
964 
965 static void tb_service_release(struct device *dev)
966 {
967 	struct tb_service *svc = container_of(dev, struct tb_service, dev);
968 	struct tb_xdomain *xd = tb_service_parent(svc);
969 
970 	tb_service_debugfs_remove(svc);
971 	ida_simple_remove(&xd->service_ids, svc->id);
972 	kfree(svc->key);
973 	kfree(svc);
974 }
975 
976 struct device_type tb_service_type = {
977 	.name = "thunderbolt_service",
978 	.groups = tb_service_attr_groups,
979 	.uevent = tb_service_uevent,
980 	.release = tb_service_release,
981 };
982 EXPORT_SYMBOL_GPL(tb_service_type);
983 
984 static int remove_missing_service(struct device *dev, void *data)
985 {
986 	struct tb_xdomain *xd = data;
987 	struct tb_service *svc;
988 
989 	svc = tb_to_service(dev);
990 	if (!svc)
991 		return 0;
992 
993 	if (!tb_property_find(xd->remote_properties, svc->key,
994 			      TB_PROPERTY_TYPE_DIRECTORY))
995 		device_unregister(dev);
996 
997 	return 0;
998 }
999 
1000 static int find_service(struct device *dev, void *data)
1001 {
1002 	const struct tb_property *p = data;
1003 	struct tb_service *svc;
1004 
1005 	svc = tb_to_service(dev);
1006 	if (!svc)
1007 		return 0;
1008 
1009 	return !strcmp(svc->key, p->key);
1010 }
1011 
1012 static int populate_service(struct tb_service *svc,
1013 			    struct tb_property *property)
1014 {
1015 	struct tb_property_dir *dir = property->value.dir;
1016 	struct tb_property *p;
1017 
1018 	/* Fill in standard properties */
1019 	p = tb_property_find(dir, "prtcid", TB_PROPERTY_TYPE_VALUE);
1020 	if (p)
1021 		svc->prtcid = p->value.immediate;
1022 	p = tb_property_find(dir, "prtcvers", TB_PROPERTY_TYPE_VALUE);
1023 	if (p)
1024 		svc->prtcvers = p->value.immediate;
1025 	p = tb_property_find(dir, "prtcrevs", TB_PROPERTY_TYPE_VALUE);
1026 	if (p)
1027 		svc->prtcrevs = p->value.immediate;
1028 	p = tb_property_find(dir, "prtcstns", TB_PROPERTY_TYPE_VALUE);
1029 	if (p)
1030 		svc->prtcstns = p->value.immediate;
1031 
1032 	svc->key = kstrdup(property->key, GFP_KERNEL);
1033 	if (!svc->key)
1034 		return -ENOMEM;
1035 
1036 	return 0;
1037 }
1038 
1039 static void enumerate_services(struct tb_xdomain *xd)
1040 {
1041 	struct tb_service *svc;
1042 	struct tb_property *p;
1043 	struct device *dev;
1044 	int id;
1045 
1046 	/*
1047 	 * First remove all services that are not available anymore in
1048 	 * the updated property block.
1049 	 */
1050 	device_for_each_child_reverse(&xd->dev, xd, remove_missing_service);
1051 
1052 	/* Then re-enumerate properties creating new services as we go */
1053 	tb_property_for_each(xd->remote_properties, p) {
1054 		if (p->type != TB_PROPERTY_TYPE_DIRECTORY)
1055 			continue;
1056 
1057 		/* If the service exists already we are fine */
1058 		dev = device_find_child(&xd->dev, p, find_service);
1059 		if (dev) {
1060 			put_device(dev);
1061 			continue;
1062 		}
1063 
1064 		svc = kzalloc(sizeof(*svc), GFP_KERNEL);
1065 		if (!svc)
1066 			break;
1067 
1068 		if (populate_service(svc, p)) {
1069 			kfree(svc);
1070 			break;
1071 		}
1072 
1073 		id = ida_simple_get(&xd->service_ids, 0, 0, GFP_KERNEL);
1074 		if (id < 0) {
1075 			kfree(svc->key);
1076 			kfree(svc);
1077 			break;
1078 		}
1079 		svc->id = id;
1080 		svc->dev.bus = &tb_bus_type;
1081 		svc->dev.type = &tb_service_type;
1082 		svc->dev.parent = &xd->dev;
1083 		dev_set_name(&svc->dev, "%s.%d", dev_name(&xd->dev), svc->id);
1084 
1085 		tb_service_debugfs_init(svc);
1086 
1087 		if (device_register(&svc->dev)) {
1088 			put_device(&svc->dev);
1089 			break;
1090 		}
1091 	}
1092 }
1093 
1094 static int populate_properties(struct tb_xdomain *xd,
1095 			       struct tb_property_dir *dir)
1096 {
1097 	const struct tb_property *p;
1098 
1099 	/* Required properties */
1100 	p = tb_property_find(dir, "deviceid", TB_PROPERTY_TYPE_VALUE);
1101 	if (!p)
1102 		return -EINVAL;
1103 	xd->device = p->value.immediate;
1104 
1105 	p = tb_property_find(dir, "vendorid", TB_PROPERTY_TYPE_VALUE);
1106 	if (!p)
1107 		return -EINVAL;
1108 	xd->vendor = p->value.immediate;
1109 
1110 	p = tb_property_find(dir, "maxhopid", TB_PROPERTY_TYPE_VALUE);
1111 	/*
1112 	 * USB4 inter-domain spec suggests using 15 as HopID if the
1113 	 * other end does not announce it in a property. This is for
1114 	 * TBT3 compatibility.
1115 	 */
1116 	xd->remote_max_hopid = p ? p->value.immediate : XDOMAIN_DEFAULT_MAX_HOPID;
1117 
1118 	kfree(xd->device_name);
1119 	xd->device_name = NULL;
1120 	kfree(xd->vendor_name);
1121 	xd->vendor_name = NULL;
1122 
1123 	/* Optional properties */
1124 	p = tb_property_find(dir, "deviceid", TB_PROPERTY_TYPE_TEXT);
1125 	if (p)
1126 		xd->device_name = kstrdup(p->value.text, GFP_KERNEL);
1127 	p = tb_property_find(dir, "vendorid", TB_PROPERTY_TYPE_TEXT);
1128 	if (p)
1129 		xd->vendor_name = kstrdup(p->value.text, GFP_KERNEL);
1130 
1131 	return 0;
1132 }
1133 
1134 static int tb_xdomain_update_link_attributes(struct tb_xdomain *xd)
1135 {
1136 	bool change = false;
1137 	struct tb_port *port;
1138 	int ret;
1139 
1140 	port = tb_port_at(xd->route, tb_xdomain_parent(xd));
1141 
1142 	ret = tb_port_get_link_speed(port);
1143 	if (ret < 0)
1144 		return ret;
1145 
1146 	if (xd->link_speed != ret)
1147 		change = true;
1148 
1149 	xd->link_speed = ret;
1150 
1151 	ret = tb_port_get_link_width(port);
1152 	if (ret < 0)
1153 		return ret;
1154 
1155 	if (xd->link_width != ret)
1156 		change = true;
1157 
1158 	xd->link_width = ret;
1159 
1160 	if (change)
1161 		kobject_uevent(&xd->dev.kobj, KOBJ_CHANGE);
1162 
1163 	return 0;
1164 }
1165 
1166 static int tb_xdomain_get_uuid(struct tb_xdomain *xd)
1167 {
1168 	struct tb *tb = xd->tb;
1169 	uuid_t uuid;
1170 	u64 route;
1171 	int ret;
1172 
1173 	dev_dbg(&xd->dev, "requesting remote UUID\n");
1174 
1175 	ret = tb_xdp_uuid_request(tb->ctl, xd->route, xd->state_retries, &uuid,
1176 				  &route);
1177 	if (ret < 0) {
1178 		if (xd->state_retries-- > 0) {
1179 			dev_dbg(&xd->dev, "failed to request UUID, retrying\n");
1180 			return -EAGAIN;
1181 		}
1182 		dev_dbg(&xd->dev, "failed to read remote UUID\n");
1183 		return ret;
1184 	}
1185 
1186 	dev_dbg(&xd->dev, "got remote UUID %pUb\n", &uuid);
1187 
1188 	if (uuid_equal(&uuid, xd->local_uuid)) {
1189 		if (route == xd->route)
1190 			dev_dbg(&xd->dev, "loop back detected\n");
1191 		else
1192 			dev_dbg(&xd->dev, "intra-domain loop detected\n");
1193 
1194 		/* Don't bond lanes automatically for loops */
1195 		xd->bonding_possible = false;
1196 	}
1197 
1198 	/*
1199 	 * If the UUID is different, there is another domain connected
1200 	 * so mark this one unplugged and wait for the connection
1201 	 * manager to replace it.
1202 	 */
1203 	if (xd->remote_uuid && !uuid_equal(&uuid, xd->remote_uuid)) {
1204 		dev_dbg(&xd->dev, "remote UUID is different, unplugging\n");
1205 		xd->is_unplugged = true;
1206 		return -ENODEV;
1207 	}
1208 
1209 	/* First time fill in the missing UUID */
1210 	if (!xd->remote_uuid) {
1211 		xd->remote_uuid = kmemdup(&uuid, sizeof(uuid_t), GFP_KERNEL);
1212 		if (!xd->remote_uuid)
1213 			return -ENOMEM;
1214 	}
1215 
1216 	return 0;
1217 }
1218 
1219 static int tb_xdomain_get_link_status(struct tb_xdomain *xd)
1220 {
1221 	struct tb *tb = xd->tb;
1222 	u8 slw, tlw, sls, tls;
1223 	int ret;
1224 
1225 	dev_dbg(&xd->dev, "sending link state status request to %pUb\n",
1226 		xd->remote_uuid);
1227 
1228 	ret = tb_xdp_link_state_status_request(tb->ctl, xd->route,
1229 					       xd->state_retries, &slw, &tlw, &sls,
1230 					       &tls);
1231 	if (ret) {
1232 		if (ret != -EOPNOTSUPP && xd->state_retries-- > 0) {
1233 			dev_dbg(&xd->dev,
1234 				"failed to request remote link status, retrying\n");
1235 			return -EAGAIN;
1236 		}
1237 		dev_dbg(&xd->dev, "failed to receive remote link status\n");
1238 		return ret;
1239 	}
1240 
1241 	dev_dbg(&xd->dev, "remote link supports width %#x speed %#x\n", slw, sls);
1242 
1243 	if (slw < LANE_ADP_CS_0_SUPPORTED_WIDTH_DUAL) {
1244 		dev_dbg(&xd->dev, "remote adapter is single lane only\n");
1245 		return -EOPNOTSUPP;
1246 	}
1247 
1248 	return 0;
1249 }
1250 
1251 static int tb_xdomain_link_state_change(struct tb_xdomain *xd,
1252 					unsigned int width)
1253 {
1254 	struct tb_switch *sw = tb_to_switch(xd->dev.parent);
1255 	struct tb_port *port = tb_port_at(xd->route, sw);
1256 	struct tb *tb = xd->tb;
1257 	u8 tlw, tls;
1258 	u32 val;
1259 	int ret;
1260 
1261 	if (width == 2)
1262 		tlw = LANE_ADP_CS_1_TARGET_WIDTH_DUAL;
1263 	else if (width == 1)
1264 		tlw = LANE_ADP_CS_1_TARGET_WIDTH_SINGLE;
1265 	else
1266 		return -EINVAL;
1267 
1268 	/* Use the current target speed */
1269 	ret = tb_port_read(port, &val, TB_CFG_PORT, port->cap_phy + LANE_ADP_CS_1, 1);
1270 	if (ret)
1271 		return ret;
1272 	tls = val & LANE_ADP_CS_1_TARGET_SPEED_MASK;
1273 
1274 	dev_dbg(&xd->dev, "sending link state change request with width %#x speed %#x\n",
1275 		tlw, tls);
1276 
1277 	ret = tb_xdp_link_state_change_request(tb->ctl, xd->route,
1278 					       xd->state_retries, tlw, tls);
1279 	if (ret) {
1280 		if (ret != -EOPNOTSUPP && xd->state_retries-- > 0) {
1281 			dev_dbg(&xd->dev,
1282 				"failed to change remote link state, retrying\n");
1283 			return -EAGAIN;
1284 		}
1285 		dev_err(&xd->dev, "failed request link state change, aborting\n");
1286 		return ret;
1287 	}
1288 
1289 	dev_dbg(&xd->dev, "received link state change response\n");
1290 	return 0;
1291 }
1292 
1293 static int tb_xdomain_bond_lanes_uuid_high(struct tb_xdomain *xd)
1294 {
1295 	struct tb_port *port;
1296 	int ret, width;
1297 
1298 	if (xd->target_link_width == LANE_ADP_CS_1_TARGET_WIDTH_SINGLE) {
1299 		width = 1;
1300 	} else if (xd->target_link_width == LANE_ADP_CS_1_TARGET_WIDTH_DUAL) {
1301 		width = 2;
1302 	} else {
1303 		if (xd->state_retries-- > 0) {
1304 			dev_dbg(&xd->dev,
1305 				"link state change request not received yet, retrying\n");
1306 			return -EAGAIN;
1307 		}
1308 		dev_dbg(&xd->dev, "timeout waiting for link change request\n");
1309 		return -ETIMEDOUT;
1310 	}
1311 
1312 	port = tb_port_at(xd->route, tb_xdomain_parent(xd));
1313 
1314 	/*
1315 	 * We can't use tb_xdomain_lane_bonding_enable() here because it
1316 	 * is the other side that initiates lane bonding. So here we
1317 	 * just set the width to both lane adapters and wait for the
1318 	 * link to transition bonded.
1319 	 */
1320 	ret = tb_port_set_link_width(port->dual_link_port, width);
1321 	if (ret) {
1322 		tb_port_warn(port->dual_link_port,
1323 			     "failed to set link width to %d\n", width);
1324 		return ret;
1325 	}
1326 
1327 	ret = tb_port_set_link_width(port, width);
1328 	if (ret) {
1329 		tb_port_warn(port, "failed to set link width to %d\n", width);
1330 		return ret;
1331 	}
1332 
1333 	ret = tb_port_wait_for_link_width(port, width, XDOMAIN_BONDING_TIMEOUT);
1334 	if (ret) {
1335 		dev_warn(&xd->dev, "error waiting for link width to become %d\n",
1336 			 width);
1337 		return ret;
1338 	}
1339 
1340 	port->bonded = width == 2;
1341 	port->dual_link_port->bonded = width == 2;
1342 
1343 	tb_port_update_credits(port);
1344 	tb_xdomain_update_link_attributes(xd);
1345 
1346 	dev_dbg(&xd->dev, "lane bonding %s\n", str_enabled_disabled(width == 2));
1347 	return 0;
1348 }
1349 
1350 static int tb_xdomain_get_properties(struct tb_xdomain *xd)
1351 {
1352 	struct tb_property_dir *dir;
1353 	struct tb *tb = xd->tb;
1354 	bool update = false;
1355 	u32 *block = NULL;
1356 	u32 gen = 0;
1357 	int ret;
1358 
1359 	dev_dbg(&xd->dev, "requesting remote properties\n");
1360 
1361 	ret = tb_xdp_properties_request(tb->ctl, xd->route, xd->local_uuid,
1362 					xd->remote_uuid, xd->state_retries,
1363 					&block, &gen);
1364 	if (ret < 0) {
1365 		if (xd->state_retries-- > 0) {
1366 			dev_dbg(&xd->dev,
1367 				"failed to request remote properties, retrying\n");
1368 			return -EAGAIN;
1369 		}
1370 		/* Give up now */
1371 		dev_err(&xd->dev, "failed read XDomain properties from %pUb\n",
1372 			xd->remote_uuid);
1373 
1374 		return ret;
1375 	}
1376 
1377 	mutex_lock(&xd->lock);
1378 
1379 	/* Only accept newer generation properties */
1380 	if (xd->remote_properties && gen <= xd->remote_property_block_gen) {
1381 		ret = 0;
1382 		goto err_free_block;
1383 	}
1384 
1385 	dir = tb_property_parse_dir(block, ret);
1386 	if (!dir) {
1387 		dev_err(&xd->dev, "failed to parse XDomain properties\n");
1388 		ret = -ENOMEM;
1389 		goto err_free_block;
1390 	}
1391 
1392 	ret = populate_properties(xd, dir);
1393 	if (ret) {
1394 		dev_err(&xd->dev, "missing XDomain properties in response\n");
1395 		goto err_free_dir;
1396 	}
1397 
1398 	/* Release the existing one */
1399 	if (xd->remote_properties) {
1400 		tb_property_free_dir(xd->remote_properties);
1401 		update = true;
1402 	}
1403 
1404 	xd->remote_properties = dir;
1405 	xd->remote_property_block_gen = gen;
1406 
1407 	tb_xdomain_update_link_attributes(xd);
1408 
1409 	mutex_unlock(&xd->lock);
1410 
1411 	kfree(block);
1412 
1413 	/*
1414 	 * Now the device should be ready enough so we can add it to the
1415 	 * bus and let userspace know about it. If the device is already
1416 	 * registered, we notify the userspace that it has changed.
1417 	 */
1418 	if (!update) {
1419 		/*
1420 		 * Now disable lane 1 if bonding was not enabled. Do
1421 		 * this only if bonding was possible at the beginning
1422 		 * (that is we are the connection manager and there are
1423 		 * two lanes).
1424 		 */
1425 		if (xd->bonding_possible) {
1426 			struct tb_port *port;
1427 
1428 			port = tb_port_at(xd->route, tb_xdomain_parent(xd));
1429 			if (!port->bonded)
1430 				tb_port_disable(port->dual_link_port);
1431 		}
1432 
1433 		if (device_add(&xd->dev)) {
1434 			dev_err(&xd->dev, "failed to add XDomain device\n");
1435 			return -ENODEV;
1436 		}
1437 		dev_info(&xd->dev, "new host found, vendor=%#x device=%#x\n",
1438 			 xd->vendor, xd->device);
1439 		if (xd->vendor_name && xd->device_name)
1440 			dev_info(&xd->dev, "%s %s\n", xd->vendor_name,
1441 				 xd->device_name);
1442 
1443 		tb_xdomain_debugfs_init(xd);
1444 	} else {
1445 		kobject_uevent(&xd->dev.kobj, KOBJ_CHANGE);
1446 	}
1447 
1448 	enumerate_services(xd);
1449 	return 0;
1450 
1451 err_free_dir:
1452 	tb_property_free_dir(dir);
1453 err_free_block:
1454 	kfree(block);
1455 	mutex_unlock(&xd->lock);
1456 
1457 	return ret;
1458 }
1459 
1460 static void tb_xdomain_queue_uuid(struct tb_xdomain *xd)
1461 {
1462 	xd->state = XDOMAIN_STATE_UUID;
1463 	xd->state_retries = XDOMAIN_RETRIES;
1464 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1465 			   msecs_to_jiffies(XDOMAIN_SHORT_TIMEOUT));
1466 }
1467 
1468 static void tb_xdomain_queue_link_status(struct tb_xdomain *xd)
1469 {
1470 	xd->state = XDOMAIN_STATE_LINK_STATUS;
1471 	xd->state_retries = XDOMAIN_RETRIES;
1472 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1473 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1474 }
1475 
1476 static void tb_xdomain_queue_link_status2(struct tb_xdomain *xd)
1477 {
1478 	xd->state = XDOMAIN_STATE_LINK_STATUS2;
1479 	xd->state_retries = XDOMAIN_RETRIES;
1480 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1481 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1482 }
1483 
1484 static void tb_xdomain_queue_bonding(struct tb_xdomain *xd)
1485 {
1486 	if (memcmp(xd->local_uuid, xd->remote_uuid, UUID_SIZE) > 0) {
1487 		dev_dbg(&xd->dev, "we have higher UUID, other side bonds the lanes\n");
1488 		xd->state = XDOMAIN_STATE_BONDING_UUID_HIGH;
1489 	} else {
1490 		dev_dbg(&xd->dev, "we have lower UUID, bonding lanes\n");
1491 		xd->state = XDOMAIN_STATE_LINK_STATE_CHANGE;
1492 	}
1493 
1494 	xd->state_retries = XDOMAIN_RETRIES;
1495 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1496 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1497 }
1498 
1499 static void tb_xdomain_queue_bonding_uuid_low(struct tb_xdomain *xd)
1500 {
1501 	xd->state = XDOMAIN_STATE_BONDING_UUID_LOW;
1502 	xd->state_retries = XDOMAIN_RETRIES;
1503 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1504 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1505 }
1506 
1507 static void tb_xdomain_queue_properties(struct tb_xdomain *xd)
1508 {
1509 	xd->state = XDOMAIN_STATE_PROPERTIES;
1510 	xd->state_retries = XDOMAIN_RETRIES;
1511 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1512 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1513 }
1514 
1515 static void tb_xdomain_queue_properties_changed(struct tb_xdomain *xd)
1516 {
1517 	xd->properties_changed_retries = XDOMAIN_RETRIES;
1518 	queue_delayed_work(xd->tb->wq, &xd->properties_changed_work,
1519 			   msecs_to_jiffies(XDOMAIN_SHORT_TIMEOUT));
1520 }
1521 
1522 static void tb_xdomain_state_work(struct work_struct *work)
1523 {
1524 	struct tb_xdomain *xd = container_of(work, typeof(*xd), state_work.work);
1525 	int ret, state = xd->state;
1526 
1527 	if (WARN_ON_ONCE(state < XDOMAIN_STATE_INIT ||
1528 			 state > XDOMAIN_STATE_ERROR))
1529 		return;
1530 
1531 	dev_dbg(&xd->dev, "running state %s\n", state_names[state]);
1532 
1533 	switch (state) {
1534 	case XDOMAIN_STATE_INIT:
1535 		if (xd->needs_uuid) {
1536 			tb_xdomain_queue_uuid(xd);
1537 		} else {
1538 			tb_xdomain_queue_properties_changed(xd);
1539 			tb_xdomain_queue_properties(xd);
1540 		}
1541 		break;
1542 
1543 	case XDOMAIN_STATE_UUID:
1544 		ret = tb_xdomain_get_uuid(xd);
1545 		if (ret) {
1546 			if (ret == -EAGAIN)
1547 				goto retry_state;
1548 			xd->state = XDOMAIN_STATE_ERROR;
1549 		} else {
1550 			tb_xdomain_queue_properties_changed(xd);
1551 			if (xd->bonding_possible)
1552 				tb_xdomain_queue_link_status(xd);
1553 			else
1554 				tb_xdomain_queue_properties(xd);
1555 		}
1556 		break;
1557 
1558 	case XDOMAIN_STATE_LINK_STATUS:
1559 		ret = tb_xdomain_get_link_status(xd);
1560 		if (ret) {
1561 			if (ret == -EAGAIN)
1562 				goto retry_state;
1563 
1564 			/*
1565 			 * If any of the lane bonding states fail we skip
1566 			 * bonding completely and try to continue from
1567 			 * reading properties.
1568 			 */
1569 			tb_xdomain_queue_properties(xd);
1570 		} else {
1571 			tb_xdomain_queue_bonding(xd);
1572 		}
1573 		break;
1574 
1575 	case XDOMAIN_STATE_LINK_STATE_CHANGE:
1576 		ret = tb_xdomain_link_state_change(xd, 2);
1577 		if (ret) {
1578 			if (ret == -EAGAIN)
1579 				goto retry_state;
1580 			tb_xdomain_queue_properties(xd);
1581 		} else {
1582 			tb_xdomain_queue_link_status2(xd);
1583 		}
1584 		break;
1585 
1586 	case XDOMAIN_STATE_LINK_STATUS2:
1587 		ret = tb_xdomain_get_link_status(xd);
1588 		if (ret) {
1589 			if (ret == -EAGAIN)
1590 				goto retry_state;
1591 			tb_xdomain_queue_properties(xd);
1592 		} else {
1593 			tb_xdomain_queue_bonding_uuid_low(xd);
1594 		}
1595 		break;
1596 
1597 	case XDOMAIN_STATE_BONDING_UUID_LOW:
1598 		tb_xdomain_lane_bonding_enable(xd);
1599 		tb_xdomain_queue_properties(xd);
1600 		break;
1601 
1602 	case XDOMAIN_STATE_BONDING_UUID_HIGH:
1603 		if (tb_xdomain_bond_lanes_uuid_high(xd) == -EAGAIN)
1604 			goto retry_state;
1605 		tb_xdomain_queue_properties(xd);
1606 		break;
1607 
1608 	case XDOMAIN_STATE_PROPERTIES:
1609 		ret = tb_xdomain_get_properties(xd);
1610 		if (ret) {
1611 			if (ret == -EAGAIN)
1612 				goto retry_state;
1613 			xd->state = XDOMAIN_STATE_ERROR;
1614 		} else {
1615 			xd->state = XDOMAIN_STATE_ENUMERATED;
1616 		}
1617 		break;
1618 
1619 	case XDOMAIN_STATE_ENUMERATED:
1620 		tb_xdomain_queue_properties(xd);
1621 		break;
1622 
1623 	case XDOMAIN_STATE_ERROR:
1624 		break;
1625 
1626 	default:
1627 		dev_warn(&xd->dev, "unexpected state %d\n", state);
1628 		break;
1629 	}
1630 
1631 	return;
1632 
1633 retry_state:
1634 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1635 			   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1636 }
1637 
1638 static void tb_xdomain_properties_changed(struct work_struct *work)
1639 {
1640 	struct tb_xdomain *xd = container_of(work, typeof(*xd),
1641 					     properties_changed_work.work);
1642 	int ret;
1643 
1644 	dev_dbg(&xd->dev, "sending properties changed notification\n");
1645 
1646 	ret = tb_xdp_properties_changed_request(xd->tb->ctl, xd->route,
1647 				xd->properties_changed_retries, xd->local_uuid);
1648 	if (ret) {
1649 		if (xd->properties_changed_retries-- > 0) {
1650 			dev_dbg(&xd->dev,
1651 				"failed to send properties changed notification, retrying\n");
1652 			queue_delayed_work(xd->tb->wq,
1653 					   &xd->properties_changed_work,
1654 					   msecs_to_jiffies(XDOMAIN_DEFAULT_TIMEOUT));
1655 		}
1656 		dev_err(&xd->dev, "failed to send properties changed notification\n");
1657 		return;
1658 	}
1659 
1660 	xd->properties_changed_retries = XDOMAIN_RETRIES;
1661 }
1662 
1663 static ssize_t device_show(struct device *dev, struct device_attribute *attr,
1664 			   char *buf)
1665 {
1666 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1667 
1668 	return sysfs_emit(buf, "%#x\n", xd->device);
1669 }
1670 static DEVICE_ATTR_RO(device);
1671 
1672 static ssize_t
1673 device_name_show(struct device *dev, struct device_attribute *attr, char *buf)
1674 {
1675 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1676 	int ret;
1677 
1678 	if (mutex_lock_interruptible(&xd->lock))
1679 		return -ERESTARTSYS;
1680 	ret = sysfs_emit(buf, "%s\n", xd->device_name ?: "");
1681 	mutex_unlock(&xd->lock);
1682 
1683 	return ret;
1684 }
1685 static DEVICE_ATTR_RO(device_name);
1686 
1687 static ssize_t maxhopid_show(struct device *dev, struct device_attribute *attr,
1688 			     char *buf)
1689 {
1690 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1691 
1692 	return sysfs_emit(buf, "%d\n", xd->remote_max_hopid);
1693 }
1694 static DEVICE_ATTR_RO(maxhopid);
1695 
1696 static ssize_t vendor_show(struct device *dev, struct device_attribute *attr,
1697 			   char *buf)
1698 {
1699 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1700 
1701 	return sysfs_emit(buf, "%#x\n", xd->vendor);
1702 }
1703 static DEVICE_ATTR_RO(vendor);
1704 
1705 static ssize_t
1706 vendor_name_show(struct device *dev, struct device_attribute *attr, char *buf)
1707 {
1708 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1709 	int ret;
1710 
1711 	if (mutex_lock_interruptible(&xd->lock))
1712 		return -ERESTARTSYS;
1713 	ret = sysfs_emit(buf, "%s\n", xd->vendor_name ?: "");
1714 	mutex_unlock(&xd->lock);
1715 
1716 	return ret;
1717 }
1718 static DEVICE_ATTR_RO(vendor_name);
1719 
1720 static ssize_t unique_id_show(struct device *dev, struct device_attribute *attr,
1721 			      char *buf)
1722 {
1723 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1724 
1725 	return sysfs_emit(buf, "%pUb\n", xd->remote_uuid);
1726 }
1727 static DEVICE_ATTR_RO(unique_id);
1728 
1729 static ssize_t speed_show(struct device *dev, struct device_attribute *attr,
1730 			  char *buf)
1731 {
1732 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1733 
1734 	return sysfs_emit(buf, "%u.0 Gb/s\n", xd->link_speed);
1735 }
1736 
1737 static DEVICE_ATTR(rx_speed, 0444, speed_show, NULL);
1738 static DEVICE_ATTR(tx_speed, 0444, speed_show, NULL);
1739 
1740 static ssize_t lanes_show(struct device *dev, struct device_attribute *attr,
1741 			  char *buf)
1742 {
1743 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1744 
1745 	return sysfs_emit(buf, "%u\n", xd->link_width);
1746 }
1747 
1748 static DEVICE_ATTR(rx_lanes, 0444, lanes_show, NULL);
1749 static DEVICE_ATTR(tx_lanes, 0444, lanes_show, NULL);
1750 
1751 static struct attribute *xdomain_attrs[] = {
1752 	&dev_attr_device.attr,
1753 	&dev_attr_device_name.attr,
1754 	&dev_attr_maxhopid.attr,
1755 	&dev_attr_rx_lanes.attr,
1756 	&dev_attr_rx_speed.attr,
1757 	&dev_attr_tx_lanes.attr,
1758 	&dev_attr_tx_speed.attr,
1759 	&dev_attr_unique_id.attr,
1760 	&dev_attr_vendor.attr,
1761 	&dev_attr_vendor_name.attr,
1762 	NULL,
1763 };
1764 
1765 static const struct attribute_group xdomain_attr_group = {
1766 	.attrs = xdomain_attrs,
1767 };
1768 
1769 static const struct attribute_group *xdomain_attr_groups[] = {
1770 	&xdomain_attr_group,
1771 	NULL,
1772 };
1773 
1774 static void tb_xdomain_release(struct device *dev)
1775 {
1776 	struct tb_xdomain *xd = container_of(dev, struct tb_xdomain, dev);
1777 
1778 	put_device(xd->dev.parent);
1779 
1780 	kfree(xd->local_property_block);
1781 	tb_property_free_dir(xd->remote_properties);
1782 	ida_destroy(&xd->out_hopids);
1783 	ida_destroy(&xd->in_hopids);
1784 	ida_destroy(&xd->service_ids);
1785 
1786 	kfree(xd->local_uuid);
1787 	kfree(xd->remote_uuid);
1788 	kfree(xd->device_name);
1789 	kfree(xd->vendor_name);
1790 	kfree(xd);
1791 }
1792 
1793 static void start_handshake(struct tb_xdomain *xd)
1794 {
1795 	xd->state = XDOMAIN_STATE_INIT;
1796 	queue_delayed_work(xd->tb->wq, &xd->state_work,
1797 			   msecs_to_jiffies(XDOMAIN_SHORT_TIMEOUT));
1798 }
1799 
1800 static void stop_handshake(struct tb_xdomain *xd)
1801 {
1802 	cancel_delayed_work_sync(&xd->properties_changed_work);
1803 	cancel_delayed_work_sync(&xd->state_work);
1804 	xd->properties_changed_retries = 0;
1805 	xd->state_retries = 0;
1806 }
1807 
1808 static int __maybe_unused tb_xdomain_suspend(struct device *dev)
1809 {
1810 	stop_handshake(tb_to_xdomain(dev));
1811 	return 0;
1812 }
1813 
1814 static int __maybe_unused tb_xdomain_resume(struct device *dev)
1815 {
1816 	start_handshake(tb_to_xdomain(dev));
1817 	return 0;
1818 }
1819 
1820 static const struct dev_pm_ops tb_xdomain_pm_ops = {
1821 	SET_SYSTEM_SLEEP_PM_OPS(tb_xdomain_suspend, tb_xdomain_resume)
1822 };
1823 
1824 struct device_type tb_xdomain_type = {
1825 	.name = "thunderbolt_xdomain",
1826 	.release = tb_xdomain_release,
1827 	.pm = &tb_xdomain_pm_ops,
1828 };
1829 EXPORT_SYMBOL_GPL(tb_xdomain_type);
1830 
1831 /**
1832  * tb_xdomain_alloc() - Allocate new XDomain object
1833  * @tb: Domain where the XDomain belongs
1834  * @parent: Parent device (the switch through the connection to the
1835  *	    other domain is reached).
1836  * @route: Route string used to reach the other domain
1837  * @local_uuid: Our local domain UUID
1838  * @remote_uuid: UUID of the other domain (optional)
1839  *
1840  * Allocates new XDomain structure and returns pointer to that. The
1841  * object must be released by calling tb_xdomain_put().
1842  */
1843 struct tb_xdomain *tb_xdomain_alloc(struct tb *tb, struct device *parent,
1844 				    u64 route, const uuid_t *local_uuid,
1845 				    const uuid_t *remote_uuid)
1846 {
1847 	struct tb_switch *parent_sw = tb_to_switch(parent);
1848 	struct tb_xdomain *xd;
1849 	struct tb_port *down;
1850 
1851 	/* Make sure the downstream domain is accessible */
1852 	down = tb_port_at(route, parent_sw);
1853 	tb_port_unlock(down);
1854 
1855 	xd = kzalloc(sizeof(*xd), GFP_KERNEL);
1856 	if (!xd)
1857 		return NULL;
1858 
1859 	xd->tb = tb;
1860 	xd->route = route;
1861 	xd->local_max_hopid = down->config.max_in_hop_id;
1862 	ida_init(&xd->service_ids);
1863 	ida_init(&xd->in_hopids);
1864 	ida_init(&xd->out_hopids);
1865 	mutex_init(&xd->lock);
1866 	INIT_DELAYED_WORK(&xd->state_work, tb_xdomain_state_work);
1867 	INIT_DELAYED_WORK(&xd->properties_changed_work,
1868 			  tb_xdomain_properties_changed);
1869 
1870 	xd->local_uuid = kmemdup(local_uuid, sizeof(uuid_t), GFP_KERNEL);
1871 	if (!xd->local_uuid)
1872 		goto err_free;
1873 
1874 	if (remote_uuid) {
1875 		xd->remote_uuid = kmemdup(remote_uuid, sizeof(uuid_t),
1876 					  GFP_KERNEL);
1877 		if (!xd->remote_uuid)
1878 			goto err_free_local_uuid;
1879 	} else {
1880 		xd->needs_uuid = true;
1881 		xd->bonding_possible = !!down->dual_link_port;
1882 	}
1883 
1884 	device_initialize(&xd->dev);
1885 	xd->dev.parent = get_device(parent);
1886 	xd->dev.bus = &tb_bus_type;
1887 	xd->dev.type = &tb_xdomain_type;
1888 	xd->dev.groups = xdomain_attr_groups;
1889 	dev_set_name(&xd->dev, "%u-%llx", tb->index, route);
1890 
1891 	dev_dbg(&xd->dev, "local UUID %pUb\n", local_uuid);
1892 	if (remote_uuid)
1893 		dev_dbg(&xd->dev, "remote UUID %pUb\n", remote_uuid);
1894 
1895 	/*
1896 	 * This keeps the DMA powered on as long as we have active
1897 	 * connection to another host.
1898 	 */
1899 	pm_runtime_set_active(&xd->dev);
1900 	pm_runtime_get_noresume(&xd->dev);
1901 	pm_runtime_enable(&xd->dev);
1902 
1903 	return xd;
1904 
1905 err_free_local_uuid:
1906 	kfree(xd->local_uuid);
1907 err_free:
1908 	kfree(xd);
1909 
1910 	return NULL;
1911 }
1912 
1913 /**
1914  * tb_xdomain_add() - Add XDomain to the bus
1915  * @xd: XDomain to add
1916  *
1917  * This function starts XDomain discovery protocol handshake and
1918  * eventually adds the XDomain to the bus. After calling this function
1919  * the caller needs to call tb_xdomain_remove() in order to remove and
1920  * release the object regardless whether the handshake succeeded or not.
1921  */
1922 void tb_xdomain_add(struct tb_xdomain *xd)
1923 {
1924 	/* Start exchanging properties with the other host */
1925 	start_handshake(xd);
1926 }
1927 
1928 static int unregister_service(struct device *dev, void *data)
1929 {
1930 	device_unregister(dev);
1931 	return 0;
1932 }
1933 
1934 /**
1935  * tb_xdomain_remove() - Remove XDomain from the bus
1936  * @xd: XDomain to remove
1937  *
1938  * This will stop all ongoing configuration work and remove the XDomain
1939  * along with any services from the bus. When the last reference to @xd
1940  * is released the object will be released as well.
1941  */
1942 void tb_xdomain_remove(struct tb_xdomain *xd)
1943 {
1944 	tb_xdomain_debugfs_remove(xd);
1945 
1946 	stop_handshake(xd);
1947 
1948 	device_for_each_child_reverse(&xd->dev, xd, unregister_service);
1949 
1950 	/*
1951 	 * Undo runtime PM here explicitly because it is possible that
1952 	 * the XDomain was never added to the bus and thus device_del()
1953 	 * is not called for it (device_del() would handle this otherwise).
1954 	 */
1955 	pm_runtime_disable(&xd->dev);
1956 	pm_runtime_put_noidle(&xd->dev);
1957 	pm_runtime_set_suspended(&xd->dev);
1958 
1959 	if (!device_is_registered(&xd->dev)) {
1960 		put_device(&xd->dev);
1961 	} else {
1962 		dev_info(&xd->dev, "host disconnected\n");
1963 		device_unregister(&xd->dev);
1964 	}
1965 }
1966 
1967 /**
1968  * tb_xdomain_lane_bonding_enable() - Enable lane bonding on XDomain
1969  * @xd: XDomain connection
1970  *
1971  * Lane bonding is disabled by default for XDomains. This function tries
1972  * to enable bonding by first enabling the port and waiting for the CL0
1973  * state.
1974  *
1975  * Return: %0 in case of success and negative errno in case of error.
1976  */
1977 int tb_xdomain_lane_bonding_enable(struct tb_xdomain *xd)
1978 {
1979 	struct tb_port *port;
1980 	int ret;
1981 
1982 	port = tb_port_at(xd->route, tb_xdomain_parent(xd));
1983 	if (!port->dual_link_port)
1984 		return -ENODEV;
1985 
1986 	ret = tb_port_enable(port->dual_link_port);
1987 	if (ret)
1988 		return ret;
1989 
1990 	ret = tb_wait_for_port(port->dual_link_port, true);
1991 	if (ret < 0)
1992 		return ret;
1993 	if (!ret)
1994 		return -ENOTCONN;
1995 
1996 	ret = tb_port_lane_bonding_enable(port);
1997 	if (ret) {
1998 		tb_port_warn(port, "failed to enable lane bonding\n");
1999 		return ret;
2000 	}
2001 
2002 	ret = tb_port_wait_for_link_width(port, 2, XDOMAIN_BONDING_TIMEOUT);
2003 	if (ret) {
2004 		tb_port_warn(port, "failed to enable lane bonding\n");
2005 		return ret;
2006 	}
2007 
2008 	tb_port_update_credits(port);
2009 	tb_xdomain_update_link_attributes(xd);
2010 
2011 	dev_dbg(&xd->dev, "lane bonding enabled\n");
2012 	return 0;
2013 }
2014 EXPORT_SYMBOL_GPL(tb_xdomain_lane_bonding_enable);
2015 
2016 /**
2017  * tb_xdomain_lane_bonding_disable() - Disable lane bonding
2018  * @xd: XDomain connection
2019  *
2020  * Lane bonding is disabled by default for XDomains. If bonding has been
2021  * enabled, this function can be used to disable it.
2022  */
2023 void tb_xdomain_lane_bonding_disable(struct tb_xdomain *xd)
2024 {
2025 	struct tb_port *port;
2026 
2027 	port = tb_port_at(xd->route, tb_xdomain_parent(xd));
2028 	if (port->dual_link_port) {
2029 		tb_port_lane_bonding_disable(port);
2030 		if (tb_port_wait_for_link_width(port, 1, 100) == -ETIMEDOUT)
2031 			tb_port_warn(port, "timeout disabling lane bonding\n");
2032 		tb_port_disable(port->dual_link_port);
2033 		tb_port_update_credits(port);
2034 		tb_xdomain_update_link_attributes(xd);
2035 
2036 		dev_dbg(&xd->dev, "lane bonding disabled\n");
2037 	}
2038 }
2039 EXPORT_SYMBOL_GPL(tb_xdomain_lane_bonding_disable);
2040 
2041 /**
2042  * tb_xdomain_alloc_in_hopid() - Allocate input HopID for tunneling
2043  * @xd: XDomain connection
2044  * @hopid: Preferred HopID or %-1 for next available
2045  *
2046  * Returns allocated HopID or negative errno. Specifically returns
2047  * %-ENOSPC if there are no more available HopIDs. Returned HopID is
2048  * guaranteed to be within range supported by the input lane adapter.
2049  * Call tb_xdomain_release_in_hopid() to release the allocated HopID.
2050  */
2051 int tb_xdomain_alloc_in_hopid(struct tb_xdomain *xd, int hopid)
2052 {
2053 	if (hopid < 0)
2054 		hopid = TB_PATH_MIN_HOPID;
2055 	if (hopid < TB_PATH_MIN_HOPID || hopid > xd->local_max_hopid)
2056 		return -EINVAL;
2057 
2058 	return ida_alloc_range(&xd->in_hopids, hopid, xd->local_max_hopid,
2059 			       GFP_KERNEL);
2060 }
2061 EXPORT_SYMBOL_GPL(tb_xdomain_alloc_in_hopid);
2062 
2063 /**
2064  * tb_xdomain_alloc_out_hopid() - Allocate output HopID for tunneling
2065  * @xd: XDomain connection
2066  * @hopid: Preferred HopID or %-1 for next available
2067  *
2068  * Returns allocated HopID or negative errno. Specifically returns
2069  * %-ENOSPC if there are no more available HopIDs. Returned HopID is
2070  * guaranteed to be within range supported by the output lane adapter.
2071  * Call tb_xdomain_release_in_hopid() to release the allocated HopID.
2072  */
2073 int tb_xdomain_alloc_out_hopid(struct tb_xdomain *xd, int hopid)
2074 {
2075 	if (hopid < 0)
2076 		hopid = TB_PATH_MIN_HOPID;
2077 	if (hopid < TB_PATH_MIN_HOPID || hopid > xd->remote_max_hopid)
2078 		return -EINVAL;
2079 
2080 	return ida_alloc_range(&xd->out_hopids, hopid, xd->remote_max_hopid,
2081 			       GFP_KERNEL);
2082 }
2083 EXPORT_SYMBOL_GPL(tb_xdomain_alloc_out_hopid);
2084 
2085 /**
2086  * tb_xdomain_release_in_hopid() - Release input HopID
2087  * @xd: XDomain connection
2088  * @hopid: HopID to release
2089  */
2090 void tb_xdomain_release_in_hopid(struct tb_xdomain *xd, int hopid)
2091 {
2092 	ida_free(&xd->in_hopids, hopid);
2093 }
2094 EXPORT_SYMBOL_GPL(tb_xdomain_release_in_hopid);
2095 
2096 /**
2097  * tb_xdomain_release_out_hopid() - Release output HopID
2098  * @xd: XDomain connection
2099  * @hopid: HopID to release
2100  */
2101 void tb_xdomain_release_out_hopid(struct tb_xdomain *xd, int hopid)
2102 {
2103 	ida_free(&xd->out_hopids, hopid);
2104 }
2105 EXPORT_SYMBOL_GPL(tb_xdomain_release_out_hopid);
2106 
2107 /**
2108  * tb_xdomain_enable_paths() - Enable DMA paths for XDomain connection
2109  * @xd: XDomain connection
2110  * @transmit_path: HopID we are using to send out packets
2111  * @transmit_ring: DMA ring used to send out packets
2112  * @receive_path: HopID the other end is using to send packets to us
2113  * @receive_ring: DMA ring used to receive packets from @receive_path
2114  *
2115  * The function enables DMA paths accordingly so that after successful
2116  * return the caller can send and receive packets using high-speed DMA
2117  * path. If a transmit or receive path is not needed, pass %-1 for those
2118  * parameters.
2119  *
2120  * Return: %0 in case of success and negative errno in case of error
2121  */
2122 int tb_xdomain_enable_paths(struct tb_xdomain *xd, int transmit_path,
2123 			    int transmit_ring, int receive_path,
2124 			    int receive_ring)
2125 {
2126 	return tb_domain_approve_xdomain_paths(xd->tb, xd, transmit_path,
2127 					       transmit_ring, receive_path,
2128 					       receive_ring);
2129 }
2130 EXPORT_SYMBOL_GPL(tb_xdomain_enable_paths);
2131 
2132 /**
2133  * tb_xdomain_disable_paths() - Disable DMA paths for XDomain connection
2134  * @xd: XDomain connection
2135  * @transmit_path: HopID we are using to send out packets
2136  * @transmit_ring: DMA ring used to send out packets
2137  * @receive_path: HopID the other end is using to send packets to us
2138  * @receive_ring: DMA ring used to receive packets from @receive_path
2139  *
2140  * This does the opposite of tb_xdomain_enable_paths(). After call to
2141  * this the caller is not expected to use the rings anymore. Passing %-1
2142  * as path/ring parameter means don't care. Normally the callers should
2143  * pass the same values here as they do when paths are enabled.
2144  *
2145  * Return: %0 in case of success and negative errno in case of error
2146  */
2147 int tb_xdomain_disable_paths(struct tb_xdomain *xd, int transmit_path,
2148 			     int transmit_ring, int receive_path,
2149 			     int receive_ring)
2150 {
2151 	return tb_domain_disconnect_xdomain_paths(xd->tb, xd, transmit_path,
2152 						  transmit_ring, receive_path,
2153 						  receive_ring);
2154 }
2155 EXPORT_SYMBOL_GPL(tb_xdomain_disable_paths);
2156 
2157 struct tb_xdomain_lookup {
2158 	const uuid_t *uuid;
2159 	u8 link;
2160 	u8 depth;
2161 	u64 route;
2162 };
2163 
2164 static struct tb_xdomain *switch_find_xdomain(struct tb_switch *sw,
2165 	const struct tb_xdomain_lookup *lookup)
2166 {
2167 	struct tb_port *port;
2168 
2169 	tb_switch_for_each_port(sw, port) {
2170 		struct tb_xdomain *xd;
2171 
2172 		if (port->xdomain) {
2173 			xd = port->xdomain;
2174 
2175 			if (lookup->uuid) {
2176 				if (xd->remote_uuid &&
2177 				    uuid_equal(xd->remote_uuid, lookup->uuid))
2178 					return xd;
2179 			} else {
2180 				if (lookup->link && lookup->link == xd->link &&
2181 				    lookup->depth == xd->depth)
2182 					return xd;
2183 				if (lookup->route && lookup->route == xd->route)
2184 					return xd;
2185 			}
2186 		} else if (tb_port_has_remote(port)) {
2187 			xd = switch_find_xdomain(port->remote->sw, lookup);
2188 			if (xd)
2189 				return xd;
2190 		}
2191 	}
2192 
2193 	return NULL;
2194 }
2195 
2196 /**
2197  * tb_xdomain_find_by_uuid() - Find an XDomain by UUID
2198  * @tb: Domain where the XDomain belongs to
2199  * @uuid: UUID to look for
2200  *
2201  * Finds XDomain by walking through the Thunderbolt topology below @tb.
2202  * The returned XDomain will have its reference count increased so the
2203  * caller needs to call tb_xdomain_put() when it is done with the
2204  * object.
2205  *
2206  * This will find all XDomains including the ones that are not yet added
2207  * to the bus (handshake is still in progress).
2208  *
2209  * The caller needs to hold @tb->lock.
2210  */
2211 struct tb_xdomain *tb_xdomain_find_by_uuid(struct tb *tb, const uuid_t *uuid)
2212 {
2213 	struct tb_xdomain_lookup lookup;
2214 	struct tb_xdomain *xd;
2215 
2216 	memset(&lookup, 0, sizeof(lookup));
2217 	lookup.uuid = uuid;
2218 
2219 	xd = switch_find_xdomain(tb->root_switch, &lookup);
2220 	return tb_xdomain_get(xd);
2221 }
2222 EXPORT_SYMBOL_GPL(tb_xdomain_find_by_uuid);
2223 
2224 /**
2225  * tb_xdomain_find_by_link_depth() - Find an XDomain by link and depth
2226  * @tb: Domain where the XDomain belongs to
2227  * @link: Root switch link number
2228  * @depth: Depth in the link
2229  *
2230  * Finds XDomain by walking through the Thunderbolt topology below @tb.
2231  * The returned XDomain will have its reference count increased so the
2232  * caller needs to call tb_xdomain_put() when it is done with the
2233  * object.
2234  *
2235  * This will find all XDomains including the ones that are not yet added
2236  * to the bus (handshake is still in progress).
2237  *
2238  * The caller needs to hold @tb->lock.
2239  */
2240 struct tb_xdomain *tb_xdomain_find_by_link_depth(struct tb *tb, u8 link,
2241 						 u8 depth)
2242 {
2243 	struct tb_xdomain_lookup lookup;
2244 	struct tb_xdomain *xd;
2245 
2246 	memset(&lookup, 0, sizeof(lookup));
2247 	lookup.link = link;
2248 	lookup.depth = depth;
2249 
2250 	xd = switch_find_xdomain(tb->root_switch, &lookup);
2251 	return tb_xdomain_get(xd);
2252 }
2253 
2254 /**
2255  * tb_xdomain_find_by_route() - Find an XDomain by route string
2256  * @tb: Domain where the XDomain belongs to
2257  * @route: XDomain route string
2258  *
2259  * Finds XDomain by walking through the Thunderbolt topology below @tb.
2260  * The returned XDomain will have its reference count increased so the
2261  * caller needs to call tb_xdomain_put() when it is done with the
2262  * object.
2263  *
2264  * This will find all XDomains including the ones that are not yet added
2265  * to the bus (handshake is still in progress).
2266  *
2267  * The caller needs to hold @tb->lock.
2268  */
2269 struct tb_xdomain *tb_xdomain_find_by_route(struct tb *tb, u64 route)
2270 {
2271 	struct tb_xdomain_lookup lookup;
2272 	struct tb_xdomain *xd;
2273 
2274 	memset(&lookup, 0, sizeof(lookup));
2275 	lookup.route = route;
2276 
2277 	xd = switch_find_xdomain(tb->root_switch, &lookup);
2278 	return tb_xdomain_get(xd);
2279 }
2280 EXPORT_SYMBOL_GPL(tb_xdomain_find_by_route);
2281 
2282 bool tb_xdomain_handle_request(struct tb *tb, enum tb_cfg_pkg_type type,
2283 			       const void *buf, size_t size)
2284 {
2285 	const struct tb_protocol_handler *handler, *tmp;
2286 	const struct tb_xdp_header *hdr = buf;
2287 	unsigned int length;
2288 	int ret = 0;
2289 
2290 	/* We expect the packet is at least size of the header */
2291 	length = hdr->xd_hdr.length_sn & TB_XDOMAIN_LENGTH_MASK;
2292 	if (length != size / 4 - sizeof(hdr->xd_hdr) / 4)
2293 		return true;
2294 	if (length < sizeof(*hdr) / 4 - sizeof(hdr->xd_hdr) / 4)
2295 		return true;
2296 
2297 	/*
2298 	 * Handle XDomain discovery protocol packets directly here. For
2299 	 * other protocols (based on their UUID) we call registered
2300 	 * handlers in turn.
2301 	 */
2302 	if (uuid_equal(&hdr->uuid, &tb_xdp_uuid)) {
2303 		if (type == TB_CFG_PKG_XDOMAIN_REQ)
2304 			return tb_xdp_schedule_request(tb, hdr, size);
2305 		return false;
2306 	}
2307 
2308 	mutex_lock(&xdomain_lock);
2309 	list_for_each_entry_safe(handler, tmp, &protocol_handlers, list) {
2310 		if (!uuid_equal(&hdr->uuid, handler->uuid))
2311 			continue;
2312 
2313 		mutex_unlock(&xdomain_lock);
2314 		ret = handler->callback(buf, size, handler->data);
2315 		mutex_lock(&xdomain_lock);
2316 
2317 		if (ret)
2318 			break;
2319 	}
2320 	mutex_unlock(&xdomain_lock);
2321 
2322 	return ret > 0;
2323 }
2324 
2325 static int update_xdomain(struct device *dev, void *data)
2326 {
2327 	struct tb_xdomain *xd;
2328 
2329 	xd = tb_to_xdomain(dev);
2330 	if (xd) {
2331 		queue_delayed_work(xd->tb->wq, &xd->properties_changed_work,
2332 				   msecs_to_jiffies(50));
2333 	}
2334 
2335 	return 0;
2336 }
2337 
2338 static void update_all_xdomains(void)
2339 {
2340 	bus_for_each_dev(&tb_bus_type, NULL, NULL, update_xdomain);
2341 }
2342 
2343 static bool remove_directory(const char *key, const struct tb_property_dir *dir)
2344 {
2345 	struct tb_property *p;
2346 
2347 	p = tb_property_find(xdomain_property_dir, key,
2348 			     TB_PROPERTY_TYPE_DIRECTORY);
2349 	if (p && p->value.dir == dir) {
2350 		tb_property_remove(p);
2351 		return true;
2352 	}
2353 	return false;
2354 }
2355 
2356 /**
2357  * tb_register_property_dir() - Register property directory to the host
2358  * @key: Key (name) of the directory to add
2359  * @dir: Directory to add
2360  *
2361  * Service drivers can use this function to add new property directory
2362  * to the host available properties. The other connected hosts are
2363  * notified so they can re-read properties of this host if they are
2364  * interested.
2365  *
2366  * Return: %0 on success and negative errno on failure
2367  */
2368 int tb_register_property_dir(const char *key, struct tb_property_dir *dir)
2369 {
2370 	int ret;
2371 
2372 	if (WARN_ON(!xdomain_property_dir))
2373 		return -EAGAIN;
2374 
2375 	if (!key || strlen(key) > 8)
2376 		return -EINVAL;
2377 
2378 	mutex_lock(&xdomain_lock);
2379 	if (tb_property_find(xdomain_property_dir, key,
2380 			     TB_PROPERTY_TYPE_DIRECTORY)) {
2381 		ret = -EEXIST;
2382 		goto err_unlock;
2383 	}
2384 
2385 	ret = tb_property_add_dir(xdomain_property_dir, key, dir);
2386 	if (ret)
2387 		goto err_unlock;
2388 
2389 	xdomain_property_block_gen++;
2390 
2391 	mutex_unlock(&xdomain_lock);
2392 	update_all_xdomains();
2393 	return 0;
2394 
2395 err_unlock:
2396 	mutex_unlock(&xdomain_lock);
2397 	return ret;
2398 }
2399 EXPORT_SYMBOL_GPL(tb_register_property_dir);
2400 
2401 /**
2402  * tb_unregister_property_dir() - Removes property directory from host
2403  * @key: Key (name) of the directory
2404  * @dir: Directory to remove
2405  *
2406  * This will remove the existing directory from this host and notify the
2407  * connected hosts about the change.
2408  */
2409 void tb_unregister_property_dir(const char *key, struct tb_property_dir *dir)
2410 {
2411 	int ret = 0;
2412 
2413 	mutex_lock(&xdomain_lock);
2414 	if (remove_directory(key, dir))
2415 		xdomain_property_block_gen++;
2416 	mutex_unlock(&xdomain_lock);
2417 
2418 	if (!ret)
2419 		update_all_xdomains();
2420 }
2421 EXPORT_SYMBOL_GPL(tb_unregister_property_dir);
2422 
2423 int tb_xdomain_init(void)
2424 {
2425 	xdomain_property_dir = tb_property_create_dir(NULL);
2426 	if (!xdomain_property_dir)
2427 		return -ENOMEM;
2428 
2429 	/*
2430 	 * Initialize standard set of properties without any service
2431 	 * directories. Those will be added by service drivers
2432 	 * themselves when they are loaded.
2433 	 *
2434 	 * Rest of the properties are filled dynamically based on these
2435 	 * when the P2P connection is made.
2436 	 */
2437 	tb_property_add_immediate(xdomain_property_dir, "vendorid",
2438 				  PCI_VENDOR_ID_INTEL);
2439 	tb_property_add_text(xdomain_property_dir, "vendorid", "Intel Corp.");
2440 	tb_property_add_immediate(xdomain_property_dir, "deviceid", 0x1);
2441 	tb_property_add_immediate(xdomain_property_dir, "devicerv", 0x80000100);
2442 
2443 	xdomain_property_block_gen = get_random_u32();
2444 	return 0;
2445 }
2446 
2447 void tb_xdomain_exit(void)
2448 {
2449 	tb_property_free_dir(xdomain_property_dir);
2450 }
2451