Lines Matching full:rt

25  * @rt: Retimer device
34 int tb_retimer_nvm_read(struct tb_retimer *rt, unsigned int address, void *buf, in tb_retimer_nvm_read() argument
37 return usb4_port_retimer_nvm_read(rt->port, rt->index, address, buf, size); in tb_retimer_nvm_read()
43 struct tb_retimer *rt = tb_to_retimer(nvm->dev); in nvm_read() local
46 pm_runtime_get_sync(&rt->dev); in nvm_read()
48 if (!mutex_trylock(&rt->tb->lock)) { in nvm_read()
53 ret = tb_retimer_nvm_read(rt, offset, val, bytes); in nvm_read()
54 mutex_unlock(&rt->tb->lock); in nvm_read()
57 pm_runtime_mark_last_busy(&rt->dev); in nvm_read()
58 pm_runtime_put_autosuspend(&rt->dev); in nvm_read()
66 struct tb_retimer *rt = tb_to_retimer(nvm->dev); in nvm_write() local
69 if (!mutex_trylock(&rt->tb->lock)) in nvm_write()
73 mutex_unlock(&rt->tb->lock); in nvm_write()
78 static int tb_retimer_nvm_add(struct tb_retimer *rt) in tb_retimer_nvm_add() argument
83 nvm = tb_nvm_alloc(&rt->dev); in tb_retimer_nvm_add()
97 if (!rt->no_nvm_upgrade) { in tb_retimer_nvm_add()
103 rt->nvm = nvm; in tb_retimer_nvm_add()
104 dev_dbg(&rt->dev, "NVM version %x.%x\n", nvm->major, nvm->minor); in tb_retimer_nvm_add()
108 dev_dbg(&rt->dev, "NVM upgrade disabled\n"); in tb_retimer_nvm_add()
109 rt->no_nvm_upgrade = true; in tb_retimer_nvm_add()
116 static int tb_retimer_nvm_validate_and_write(struct tb_retimer *rt) in tb_retimer_nvm_validate_and_write() argument
122 ret = tb_nvm_validate(rt->nvm); in tb_retimer_nvm_validate_and_write()
126 buf = rt->nvm->buf_data_start; in tb_retimer_nvm_validate_and_write()
127 image_size = rt->nvm->buf_data_size; in tb_retimer_nvm_validate_and_write()
129 ret = usb4_port_retimer_nvm_write(rt->port, rt->index, 0, buf, in tb_retimer_nvm_validate_and_write()
134 rt->nvm->flushed = true; in tb_retimer_nvm_validate_and_write()
138 static int tb_retimer_nvm_authenticate(struct tb_retimer *rt, bool auth_only) in tb_retimer_nvm_authenticate() argument
144 ret = usb4_port_retimer_nvm_set_offset(rt->port, rt->index, 0); in tb_retimer_nvm_authenticate()
149 ret = usb4_port_retimer_nvm_authenticate(rt->port, rt->index); in tb_retimer_nvm_authenticate()
159 ret = usb4_port_retimer_nvm_authenticate_status(rt->port, rt->index, in tb_retimer_nvm_authenticate()
162 rt->auth_status = status; in tb_retimer_nvm_authenticate()
172 struct tb_retimer *rt = tb_to_retimer(dev); in device_show() local
174 return sysfs_emit(buf, "%#x\n", rt->device); in device_show()
181 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_authenticate_show() local
184 if (!mutex_trylock(&rt->tb->lock)) in nvm_authenticate_show()
187 if (!rt->nvm) in nvm_authenticate_show()
190 ret = sysfs_emit(buf, "%#x\n", rt->auth_status); in nvm_authenticate_show()
192 mutex_unlock(&rt->tb->lock); in nvm_authenticate_show()
254 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_authenticate_store() local
257 pm_runtime_get_sync(&rt->dev); in nvm_authenticate_store()
259 if (!mutex_trylock(&rt->tb->lock)) { in nvm_authenticate_store()
264 if (!rt->nvm) { in nvm_authenticate_store()
274 rt->auth_status = 0; in nvm_authenticate_store()
284 tb_retimer_set_inbound_sbtx(rt->port); in nvm_authenticate_store()
286 ret = tb_retimer_nvm_authenticate(rt, true); in nvm_authenticate_store()
288 if (!rt->nvm->flushed) { in nvm_authenticate_store()
289 if (!rt->nvm->buf) { in nvm_authenticate_store()
294 ret = tb_retimer_nvm_validate_and_write(rt); in nvm_authenticate_store()
299 ret = tb_retimer_nvm_authenticate(rt, false); in nvm_authenticate_store()
305 tb_retimer_unset_inbound_sbtx(rt->port); in nvm_authenticate_store()
306 mutex_unlock(&rt->tb->lock); in nvm_authenticate_store()
308 pm_runtime_mark_last_busy(&rt->dev); in nvm_authenticate_store()
309 pm_runtime_put_autosuspend(&rt->dev); in nvm_authenticate_store()
320 struct tb_retimer *rt = tb_to_retimer(dev); in nvm_version_show() local
323 if (!mutex_trylock(&rt->tb->lock)) in nvm_version_show()
326 if (!rt->nvm) in nvm_version_show()
329 ret = sysfs_emit(buf, "%x.%x\n", rt->nvm->major, rt->nvm->minor); in nvm_version_show()
331 mutex_unlock(&rt->tb->lock); in nvm_version_show()
339 struct tb_retimer *rt = tb_to_retimer(dev); in vendor_show() local
341 return sysfs_emit(buf, "%#x\n", rt->vendor); in vendor_show()
349 struct tb_retimer *rt = tb_to_retimer(dev); in retimer_is_visible() local
353 return rt->no_nvm_upgrade ? 0 : attr->mode; in retimer_is_visible()
378 struct tb_retimer *rt = tb_to_retimer(dev); in tb_retimer_release() local
380 kfree(rt); in tb_retimer_release()
392 struct tb_retimer *rt; in tb_retimer_add() local
413 rt = kzalloc(sizeof(*rt), GFP_KERNEL); in tb_retimer_add()
414 if (!rt) in tb_retimer_add()
417 rt->index = index; in tb_retimer_add()
418 rt->vendor = vendor; in tb_retimer_add()
419 rt->device = device; in tb_retimer_add()
420 rt->auth_status = auth_status; in tb_retimer_add()
421 rt->port = port; in tb_retimer_add()
422 rt->tb = port->sw->tb; in tb_retimer_add()
429 rt->no_nvm_upgrade = true; in tb_retimer_add()
431 rt->dev.parent = &port->usb4->dev; in tb_retimer_add()
432 rt->dev.bus = &tb_bus_type; in tb_retimer_add()
433 rt->dev.type = &tb_retimer_type; in tb_retimer_add()
434 dev_set_name(&rt->dev, "%s:%u.%u", dev_name(&port->sw->dev), in tb_retimer_add()
437 ret = device_register(&rt->dev); in tb_retimer_add()
439 dev_err(&rt->dev, "failed to register retimer: %d\n", ret); in tb_retimer_add()
440 put_device(&rt->dev); in tb_retimer_add()
444 ret = tb_retimer_nvm_add(rt); in tb_retimer_add()
446 dev_err(&rt->dev, "failed to add NVM devices: %d\n", ret); in tb_retimer_add()
447 device_unregister(&rt->dev); in tb_retimer_add()
451 dev_info(&rt->dev, "new retimer found, vendor=%#x device=%#x\n", in tb_retimer_add()
452 rt->vendor, rt->device); in tb_retimer_add()
454 pm_runtime_no_callbacks(&rt->dev); in tb_retimer_add()
455 pm_runtime_set_active(&rt->dev); in tb_retimer_add()
456 pm_runtime_enable(&rt->dev); in tb_retimer_add()
457 pm_runtime_set_autosuspend_delay(&rt->dev, TB_AUTOSUSPEND_DELAY); in tb_retimer_add()
458 pm_runtime_mark_last_busy(&rt->dev); in tb_retimer_add()
459 pm_runtime_use_autosuspend(&rt->dev); in tb_retimer_add()
461 tb_retimer_debugfs_init(rt); in tb_retimer_add()
465 static void tb_retimer_remove(struct tb_retimer *rt) in tb_retimer_remove() argument
467 dev_info(&rt->dev, "retimer disconnected\n"); in tb_retimer_remove()
468 tb_retimer_debugfs_remove(rt); in tb_retimer_remove()
469 tb_nvm_free(rt->nvm); in tb_retimer_remove()
470 device_unregister(&rt->dev); in tb_retimer_remove()
481 struct tb_retimer *rt = tb_to_retimer(dev); in retimer_match() local
483 return rt && rt->port == lookup->port && rt->index == lookup->index; in retimer_match()
516 * Send broadcast RT to make sure retimer indices facing this in tb_retimer_scan()
556 struct tb_retimer *rt; in tb_retimer_scan() local
562 rt = tb_port_find_retimer(port, i); in tb_retimer_scan()
563 if (rt) { in tb_retimer_scan()
564 put_device(&rt->dev); in tb_retimer_scan()
578 struct tb_retimer *rt = tb_to_retimer(dev); in remove_retimer() local
581 if (rt && rt->port == port) in remove_retimer()
582 tb_retimer_remove(rt); in remove_retimer()