Lines Matching refs:rt

21  * @rt: Retimer device
29 int tb_retimer_nvm_read(struct tb_retimer *rt, unsigned int address, void *buf,
32 return usb4_port_retimer_nvm_read(rt->port, rt->index, address, buf, size);
38 struct tb_retimer *rt = tb_to_retimer(nvm->dev);
41 pm_runtime_get_sync(&rt->dev);
43 if (!mutex_trylock(&rt->tb->lock)) {
48 ret = tb_retimer_nvm_read(rt, offset, val, bytes);
49 mutex_unlock(&rt->tb->lock);
52 pm_runtime_mark_last_busy(&rt->dev);
53 pm_runtime_put_autosuspend(&rt->dev);
61 struct tb_retimer *rt = tb_to_retimer(nvm->dev);
64 if (!mutex_trylock(&rt->tb->lock))
68 mutex_unlock(&rt->tb->lock);
73 static int tb_retimer_nvm_add(struct tb_retimer *rt)
78 nvm = tb_nvm_alloc(&rt->dev);
96 rt->nvm = nvm;
97 dev_dbg(&rt->dev, "NVM version %x.%x\n", nvm->major, nvm->minor);
101 dev_dbg(&rt->dev, "NVM upgrade disabled\n");
108 static int tb_retimer_nvm_validate_and_write(struct tb_retimer *rt)
114 ret = tb_nvm_validate(rt->nvm);
118 buf = rt->nvm->buf_data_start;
119 image_size = rt->nvm->buf_data_size;
121 ret = usb4_port_retimer_nvm_write(rt->port, rt->index, 0, buf,
126 rt->nvm->flushed = true;
130 static int tb_retimer_nvm_authenticate(struct tb_retimer *rt, bool auth_only)
136 ret = usb4_port_retimer_nvm_set_offset(rt->port, rt->index, 0);
141 ret = usb4_port_retimer_nvm_authenticate(rt->port, rt->index);
151 ret = usb4_port_retimer_nvm_authenticate_status(rt->port, rt->index,
154 rt->auth_status = status;
164 struct tb_retimer *rt = tb_to_retimer(dev);
166 return sysfs_emit(buf, "%#x\n", rt->device);
173 struct tb_retimer *rt = tb_to_retimer(dev);
176 if (!mutex_trylock(&rt->tb->lock))
179 if (!rt->nvm)
181 else if (rt->no_nvm_upgrade)
184 ret = sysfs_emit(buf, "%#x\n", rt->auth_status);
186 mutex_unlock(&rt->tb->lock);
244 struct tb_retimer *rt = tb_to_retimer(dev);
247 pm_runtime_get_sync(&rt->dev);
249 if (!mutex_trylock(&rt->tb->lock)) {
254 if (!rt->nvm) {
264 rt->auth_status = 0;
274 tb_retimer_set_inbound_sbtx(rt->port);
276 ret = tb_retimer_nvm_authenticate(rt, true);
278 if (!rt->nvm->flushed) {
279 if (!rt->nvm->buf) {
284 ret = tb_retimer_nvm_validate_and_write(rt);
289 ret = tb_retimer_nvm_authenticate(rt, false);
295 tb_retimer_unset_inbound_sbtx(rt->port);
296 mutex_unlock(&rt->tb->lock);
298 pm_runtime_mark_last_busy(&rt->dev);
299 pm_runtime_put_autosuspend(&rt->dev);
310 struct tb_retimer *rt = tb_to_retimer(dev);
313 if (!mutex_trylock(&rt->tb->lock))
316 if (!rt->nvm)
319 ret = sysfs_emit(buf, "%x.%x\n", rt->nvm->major, rt->nvm->minor);
321 mutex_unlock(&rt->tb->lock);
329 struct tb_retimer *rt = tb_to_retimer(dev);
331 return sysfs_emit(buf, "%#x\n", rt->vendor);
354 struct tb_retimer *rt = tb_to_retimer(dev);
356 kfree(rt);
367 struct tb_retimer *rt;
395 rt = kzalloc(sizeof(*rt), GFP_KERNEL);
396 if (!rt)
399 rt->index = index;
400 rt->vendor = vendor;
401 rt->device = device;
402 rt->auth_status = auth_status;
403 rt->port = port;
404 rt->tb = port->sw->tb;
406 rt->dev.parent = &port->usb4->dev;
407 rt->dev.bus = &tb_bus_type;
408 rt->dev.type = &tb_retimer_type;
409 dev_set_name(&rt->dev, "%s:%u.%u", dev_name(&port->sw->dev),
412 ret = device_register(&rt->dev);
414 dev_err(&rt->dev, "failed to register retimer: %d\n", ret);
415 put_device(&rt->dev);
419 ret = tb_retimer_nvm_add(rt);
421 dev_err(&rt->dev, "failed to add NVM devices: %d\n", ret);
422 device_unregister(&rt->dev);
426 dev_info(&rt->dev, "new retimer found, vendor=%#x device=%#x\n",
427 rt->vendor, rt->device);
429 pm_runtime_no_callbacks(&rt->dev);
430 pm_runtime_set_active(&rt->dev);
431 pm_runtime_enable(&rt->dev);
432 pm_runtime_set_autosuspend_delay(&rt->dev, TB_AUTOSUSPEND_DELAY);
433 pm_runtime_mark_last_busy(&rt->dev);
434 pm_runtime_use_autosuspend(&rt->dev);
439 static void tb_retimer_remove(struct tb_retimer *rt)
441 dev_info(&rt->dev, "retimer disconnected\n");
442 tb_nvm_free(rt->nvm);
443 device_unregister(&rt->dev);
454 struct tb_retimer *rt = tb_to_retimer(dev);
456 return rt && rt->port == lookup->port && rt->index == lookup->index;
527 struct tb_retimer *rt;
529 rt = tb_port_find_retimer(port, i);
530 if (rt) {
531 put_device(&rt->dev);
544 struct tb_retimer *rt = tb_to_retimer(dev);
547 if (rt && rt->port == port)
548 tb_retimer_remove(rt);