Lines Matching full:rt

23 	struct tb_retimer *rt = tb_to_retimer(nvm->dev);  in tb_retimer_nvm_read()  local
26 pm_runtime_get_sync(&rt->dev); in tb_retimer_nvm_read()
28 if (!mutex_trylock(&rt->tb->lock)) { in tb_retimer_nvm_read()
33 ret = usb4_port_retimer_nvm_read(rt->port, rt->index, offset, val, bytes); in tb_retimer_nvm_read()
34 mutex_unlock(&rt->tb->lock); in tb_retimer_nvm_read()
37 pm_runtime_mark_last_busy(&rt->dev); in tb_retimer_nvm_read()
38 pm_runtime_put_autosuspend(&rt->dev); in tb_retimer_nvm_read()
47 struct tb_retimer *rt = tb_to_retimer(nvm->dev); in tb_retimer_nvm_write() local
50 if (!mutex_trylock(&rt->tb->lock)) in tb_retimer_nvm_write()
54 mutex_unlock(&rt->tb->lock); in tb_retimer_nvm_write()
59 static int tb_retimer_nvm_add(struct tb_retimer *rt) in tb_retimer_nvm_add() argument
65 nvm = tb_nvm_alloc(&rt->dev); in tb_retimer_nvm_add()
69 ret = usb4_port_retimer_nvm_read(rt->port, rt->index, NVM_VERSION, &val, in tb_retimer_nvm_add()
77 ret = usb4_port_retimer_nvm_read(rt->port, rt->index, NVM_FLASH_SIZE, in tb_retimer_nvm_add()
93 rt->nvm = nvm; in tb_retimer_nvm_add()
101 static int tb_retimer_nvm_validate_and_write(struct tb_retimer *rt) in tb_retimer_nvm_validate_and_write() argument
104 const u8 *buf = rt->nvm->buf; in tb_retimer_nvm_validate_and_write()
108 image_size = rt->nvm->buf_data_size; in tb_retimer_nvm_validate_and_write()
137 if (device != rt->device) in tb_retimer_nvm_validate_and_write()
144 ret = usb4_port_retimer_nvm_write(rt->port, rt->index, 0, buf, in tb_retimer_nvm_validate_and_write()
147 rt->nvm->flushed = true; in tb_retimer_nvm_validate_and_write()
152 static int tb_retimer_nvm_authenticate(struct tb_retimer *rt, bool auth_only) in tb_retimer_nvm_authenticate() argument
158 ret = usb4_port_retimer_nvm_set_offset(rt->port, rt->index, 0); in tb_retimer_nvm_authenticate()
163 ret = usb4_port_retimer_nvm_authenticate(rt->port, rt->index); in tb_retimer_nvm_authenticate()
173 ret = usb4_port_retimer_nvm_authenticate_status(rt->port, rt->index, in tb_retimer_nvm_authenticate()
176 rt->auth_status = status; in tb_retimer_nvm_authenticate()
186 struct tb_retimer *rt = tb_to_retimer(dev); in device_show() local
188 return sprintf(buf, "%#x\n", rt->device); in device_show()
195 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_authenticate_show() local
198 if (!mutex_trylock(&rt->tb->lock)) in nvm_authenticate_show()
201 if (!rt->nvm) in nvm_authenticate_show()
204 ret = sprintf(buf, "%#x\n", rt->auth_status); in nvm_authenticate_show()
206 mutex_unlock(&rt->tb->lock); in nvm_authenticate_show()
214 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_authenticate_store() local
217 pm_runtime_get_sync(&rt->dev); in nvm_authenticate_store()
219 if (!mutex_trylock(&rt->tb->lock)) { in nvm_authenticate_store()
224 if (!rt->nvm) { in nvm_authenticate_store()
234 rt->auth_status = 0; in nvm_authenticate_store()
238 ret = tb_retimer_nvm_authenticate(rt, true); in nvm_authenticate_store()
240 if (!rt->nvm->flushed) { in nvm_authenticate_store()
241 if (!rt->nvm->buf) { in nvm_authenticate_store()
246 ret = tb_retimer_nvm_validate_and_write(rt); in nvm_authenticate_store()
251 ret = tb_retimer_nvm_authenticate(rt, false); in nvm_authenticate_store()
256 mutex_unlock(&rt->tb->lock); in nvm_authenticate_store()
258 pm_runtime_mark_last_busy(&rt->dev); in nvm_authenticate_store()
259 pm_runtime_put_autosuspend(&rt->dev); in nvm_authenticate_store()
270 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_version_show() local
273 if (!mutex_trylock(&rt->tb->lock)) in nvm_version_show()
276 if (!rt->nvm) in nvm_version_show()
279 ret = sprintf(buf, "%x.%x\n", rt->nvm->major, rt->nvm->minor); in nvm_version_show()
281 mutex_unlock(&rt->tb->lock); in nvm_version_show()
289 struct tb_retimer *rt = tb_to_retimer(dev); in vendor_show() local
291 return sprintf(buf, "%#x\n", rt->vendor); in vendor_show()
314 struct tb_retimer *rt = tb_to_retimer(dev); in tb_retimer_release() local
316 kfree(rt); in tb_retimer_release()
328 struct tb_retimer *rt; in tb_retimer_add() local
366 rt = kzalloc(sizeof(*rt), GFP_KERNEL); in tb_retimer_add()
367 if (!rt) in tb_retimer_add()
370 rt->index = index; in tb_retimer_add()
371 rt->vendor = vendor; in tb_retimer_add()
372 rt->device = device; in tb_retimer_add()
373 rt->auth_status = auth_status; in tb_retimer_add()
374 rt->port = port; in tb_retimer_add()
375 rt->tb = port->sw->tb; in tb_retimer_add()
377 rt->dev.parent = &usb4->dev; in tb_retimer_add()
378 rt->dev.bus = &tb_bus_type; in tb_retimer_add()
379 rt->dev.type = &tb_retimer_type; in tb_retimer_add()
380 dev_set_name(&rt->dev, "%s:%u.%u", dev_name(&port->sw->dev), in tb_retimer_add()
383 ret = device_register(&rt->dev); in tb_retimer_add()
385 dev_err(&rt->dev, "failed to register retimer: %d\n", ret); in tb_retimer_add()
386 put_device(&rt->dev); in tb_retimer_add()
390 ret = tb_retimer_nvm_add(rt); in tb_retimer_add()
392 dev_err(&rt->dev, "failed to add NVM devices: %d\n", ret); in tb_retimer_add()
393 device_unregister(&rt->dev); in tb_retimer_add()
397 dev_info(&rt->dev, "new retimer found, vendor=%#x device=%#x\n", in tb_retimer_add()
398 rt->vendor, rt->device); in tb_retimer_add()
400 pm_runtime_no_callbacks(&rt->dev); in tb_retimer_add()
401 pm_runtime_set_active(&rt->dev); in tb_retimer_add()
402 pm_runtime_enable(&rt->dev); in tb_retimer_add()
403 pm_runtime_set_autosuspend_delay(&rt->dev, TB_AUTOSUSPEND_DELAY); in tb_retimer_add()
404 pm_runtime_mark_last_busy(&rt->dev); in tb_retimer_add()
405 pm_runtime_use_autosuspend(&rt->dev); in tb_retimer_add()
410 static void tb_retimer_remove(struct tb_retimer *rt) in tb_retimer_remove() argument
412 dev_info(&rt->dev, "retimer disconnected\n"); in tb_retimer_remove()
413 tb_nvm_free(rt->nvm); in tb_retimer_remove()
414 device_unregister(&rt->dev); in tb_retimer_remove()
425 struct tb_retimer *rt = tb_to_retimer(dev); in retimer_match() local
427 return rt && rt->port == lookup->port && rt->index == lookup->index; in retimer_match()
458 * Send broadcast RT to make sure retimer indices facing this in tb_retimer_scan()
498 struct tb_retimer *rt; in tb_retimer_scan() local
500 rt = tb_port_find_retimer(port, i); in tb_retimer_scan()
501 if (rt) { in tb_retimer_scan()
502 put_device(&rt->dev); in tb_retimer_scan()
515 struct tb_retimer *rt = tb_to_retimer(dev); in remove_retimer() local
518 if (rt && rt->port == port) in remove_retimer()
519 tb_retimer_remove(rt); in remove_retimer()