projects/linux·blob master · refs

4051 lines · 105.3 KiB

1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2018 Cadence Design Systems Inc.
4 *
5 * Author: Boris Brezillon <[email protected]>
6 */
7
8#include <dt-bindings/i3c/i3c.h>
9#include <linux/acpi.h>
10#include <linux/atomic.h>
11#include <linux/bitmap.h>
12#include <linux/bug.h>
13#include <linux/delay.h>
14#include <linux/device.h>
15#include <linux/dma-mapping.h>
16#include <linux/err.h>
17#include <linux/export.h>
18#include <linux/i2c.h>
19#include <linux/kernel.h>
20#include <linux/list.h>
21#include <linux/of.h>
22#include <linux/of_device.h>
23#include <linux/pm_runtime.h>
24#include <linux/property.h>
25#include <linux/slab.h>
26#include <linux/spinlock.h>
27#include <linux/workqueue.h>
28
29#include "internals.h"
30
31static DEFINE_IDR(i3c_bus_idr);
32static DEFINE_MUTEX(i3c_core_lock);
33static int __i3c_first_dynamic_bus_num;
34static BLOCKING_NOTIFIER_HEAD(i3c_bus_notifier);
35
36/**
37 * i3c_bus_maintenance_lock - Lock the bus for a maintenance operation
38 * @bus: I3C bus to take the lock on
39 *
40 * This function takes the bus lock so that no other operations can occur on
41 * the bus. This is needed for all kind of bus maintenance operation, like
42 * - enabling/disabling slave events
43 * - re-triggering DAA
44 * - changing the dynamic address of a device
45 * - relinquishing mastership
46 * - ...
47 *
48 * The reason for this kind of locking is that we don't want drivers and core
49 * logic to rely on I3C device information that could be changed behind their
50 * back.
51 */
52static void i3c_bus_maintenance_lock(struct i3c_bus *bus)
53{
54 down_write(&bus->lock);
55}
56
57/**
58 * i3c_bus_maintenance_unlock - Release the bus lock after a maintenance
59 * operation
60 * @bus: I3C bus to release the lock on
61 *
62 * Should be called when the bus maintenance operation is done. See
63 * i3c_bus_maintenance_lock() for more details on what these maintenance
64 * operations are.
65 */
66static void i3c_bus_maintenance_unlock(struct i3c_bus *bus)
67{
68 up_write(&bus->lock);
69}
70
71/**
72 * i3c_bus_normaluse_lock - Lock the bus for a normal operation
73 * @bus: I3C bus to take the lock on
74 *
75 * This function takes the bus lock for any operation that is not a maintenance
76 * operation (see i3c_bus_maintenance_lock() for a non-exhaustive list of
77 * maintenance operations). Basically all communications with I3C devices are
78 * normal operations (HDR, SDR transfers or CCC commands that do not change bus
79 * state or I3C dynamic address).
80 *
81 * Note that this lock is not guaranteeing serialization of normal operations.
82 * In other words, transfer requests passed to the I3C master can be submitted
83 * in parallel and I3C master drivers have to use their own locking to make
84 * sure two different communications are not inter-mixed, or access to the
85 * output/input queue is not done while the engine is busy.
86 */
87void i3c_bus_normaluse_lock(struct i3c_bus *bus)
88{
89 down_read(&bus->lock);
90}
91
92/**
93 * i3c_bus_normaluse_unlock - Release the bus lock after a normal operation
94 * @bus: I3C bus to release the lock on
95 *
96 * Should be called when a normal operation is done. See
97 * i3c_bus_normaluse_lock() for more details on what these normal operations
98 * are.
99 */
100void i3c_bus_normaluse_unlock(struct i3c_bus *bus)
101{
102 up_read(&bus->lock);
103}
104
105static struct i3c_master_controller *dev_to_i3cmaster(struct device *dev)
106{
107 return container_of(dev, struct i3c_master_controller, dev);
108}
109
110static int __must_check i3c_master_rpm_get(struct i3c_master_controller *master)
111{
112 int ret = master->rpm_allowed ? pm_runtime_resume_and_get(master->dev.parent) : 0;
113
114 if (ret < 0) {
115 dev_err(master->dev.parent, "runtime resume failed, error %d\n", ret);
116 return ret;
117 }
118 return 0;
119}
120
121static void i3c_master_rpm_put(struct i3c_master_controller *master)
122{
123 if (master->rpm_allowed)
124 pm_runtime_put_autosuspend(master->dev.parent);
125}
126
127int i3c_bus_rpm_get(struct i3c_bus *bus)
128{
129 return i3c_master_rpm_get(i3c_bus_to_i3c_master(bus));
130}
131
132void i3c_bus_rpm_put(struct i3c_bus *bus)
133{
134 i3c_master_rpm_put(i3c_bus_to_i3c_master(bus));
135}
136
137bool i3c_bus_rpm_ibi_allowed(struct i3c_bus *bus)
138{
139 return i3c_bus_to_i3c_master(bus)->rpm_ibi_allowed;
140}
141
142static const struct device_type i3c_device_type;
143
144static struct i3c_bus *dev_to_i3cbus(struct device *dev)
145{
146 struct i3c_master_controller *master;
147
148 if (dev->type == &i3c_device_type)
149 return dev_to_i3cdev(dev)->bus;
150
151 master = dev_to_i3cmaster(dev);
152
153 return &master->bus;
154}
155
156static struct i3c_dev_desc *dev_to_i3cdesc(struct device *dev)
157{
158 struct i3c_master_controller *master;
159
160 if (dev->type == &i3c_device_type)
161 return dev_to_i3cdev(dev)->desc;
162
163 master = dev_to_i3cmaster(dev);
164
165 return master->this;
166}
167
168static ssize_t bcr_show(struct device *dev,
169 struct device_attribute *da,
170 char *buf)
171{
172 struct i3c_bus *bus = dev_to_i3cbus(dev);
173 struct i3c_dev_desc *desc;
174 ssize_t ret;
175
176 i3c_bus_normaluse_lock(bus);
177 desc = dev_to_i3cdesc(dev);
178 ret = sysfs_emit(buf, "0x%02x\n", desc->info.bcr);
179 i3c_bus_normaluse_unlock(bus);
180
181 return ret;
182}
183static DEVICE_ATTR_RO(bcr);
184
185static ssize_t dcr_show(struct device *dev,
186 struct device_attribute *da,
187 char *buf)
188{
189 struct i3c_bus *bus = dev_to_i3cbus(dev);
190 struct i3c_dev_desc *desc;
191 ssize_t ret;
192
193 i3c_bus_normaluse_lock(bus);
194 desc = dev_to_i3cdesc(dev);
195 ret = sysfs_emit(buf, "0x%02x\n", desc->info.dcr);
196 i3c_bus_normaluse_unlock(bus);
197
198 return ret;
199}
200static DEVICE_ATTR_RO(dcr);
201
202static ssize_t pid_show(struct device *dev,
203 struct device_attribute *da,
204 char *buf)
205{
206 struct i3c_bus *bus = dev_to_i3cbus(dev);
207 struct i3c_dev_desc *desc;
208 ssize_t ret;
209
210 i3c_bus_normaluse_lock(bus);
211 desc = dev_to_i3cdesc(dev);
212 ret = sysfs_emit(buf, "%llx\n", desc->info.pid);
213 i3c_bus_normaluse_unlock(bus);
214
215 return ret;
216}
217static DEVICE_ATTR_RO(pid);
218
219static ssize_t dynamic_address_show(struct device *dev,
220 struct device_attribute *da,
221 char *buf)
222{
223 struct i3c_bus *bus = dev_to_i3cbus(dev);
224 struct i3c_dev_desc *desc;
225 ssize_t ret;
226
227 i3c_bus_normaluse_lock(bus);
228 desc = dev_to_i3cdesc(dev);
229 ret = sysfs_emit(buf, "%02x\n", desc->info.dyn_addr);
230 i3c_bus_normaluse_unlock(bus);
231
232 return ret;
233}
234static DEVICE_ATTR_RO(dynamic_address);
235
236static const char * const hdrcap_strings[] = {
237 "hdr-ddr", "hdr-tsp", "hdr-tsl",
238};
239
240static ssize_t hdrcap_show(struct device *dev,
241 struct device_attribute *da,
242 char *buf)
243{
244 struct i3c_bus *bus = dev_to_i3cbus(dev);
245 struct i3c_dev_desc *desc;
246 ssize_t offset = 0, ret;
247 unsigned long caps;
248 int mode;
249
250 i3c_bus_normaluse_lock(bus);
251 desc = dev_to_i3cdesc(dev);
252 caps = desc->info.hdr_cap;
253 for_each_set_bit(mode, &caps, 8) {
254 if (mode >= ARRAY_SIZE(hdrcap_strings))
255 break;
256
257 if (!hdrcap_strings[mode])
258 continue;
259
260 ret = sysfs_emit_at(buf, offset, offset ? " %s" : "%s",
261 hdrcap_strings[mode]);
262 if (ret < 0)
263 goto out;
264
265 offset += ret;
266 }
267
268 ret = sysfs_emit_at(buf, offset, "\n");
269 if (ret < 0)
270 goto out;
271
272 ret = offset + ret;
273
274out:
275 i3c_bus_normaluse_unlock(bus);
276
277 return ret;
278}
279static DEVICE_ATTR_RO(hdrcap);
280
281static ssize_t modalias_show(struct device *dev,
282 struct device_attribute *da, char *buf)
283{
284 struct i3c_device *i3c = dev_to_i3cdev(dev);
285 struct i3c_device_info devinfo;
286 u16 manuf, part, ext;
287
288 i3c_device_get_info(i3c, &devinfo);
289 manuf = I3C_PID_MANUF_ID(devinfo.pid);
290 part = I3C_PID_PART_ID(devinfo.pid);
291 ext = I3C_PID_EXTRA_INFO(devinfo.pid);
292
293 if (I3C_PID_RND_LOWER_32BITS(devinfo.pid))
294 return sysfs_emit(buf, "i3c:dcr%02Xmanuf%04X\n", devinfo.dcr,
295 manuf);
296
297 return sysfs_emit(buf, "i3c:dcr%02Xmanuf%04Xpart%04Xext%04X\n",
298 devinfo.dcr, manuf, part, ext);
299}
300static DEVICE_ATTR_RO(modalias);
301
302static struct attribute *i3c_device_attrs[] = {
303 &dev_attr_bcr.attr,
304 &dev_attr_dcr.attr,
305 &dev_attr_pid.attr,
306 &dev_attr_dynamic_address.attr,
307 &dev_attr_hdrcap.attr,
308 &dev_attr_modalias.attr,
309 NULL,
310};
311ATTRIBUTE_GROUPS(i3c_device);
312
313static int i3c_device_uevent(const struct device *dev, struct kobj_uevent_env *env)
314{
315 const struct i3c_device *i3cdev = dev_to_i3cdev(dev);
316 struct i3c_device_info devinfo;
317 u16 manuf, part, ext;
318
319 i3c_device_get_info(i3cdev, &devinfo);
320 manuf = I3C_PID_MANUF_ID(devinfo.pid);
321 part = I3C_PID_PART_ID(devinfo.pid);
322 ext = I3C_PID_EXTRA_INFO(devinfo.pid);
323
324 if (I3C_PID_RND_LOWER_32BITS(devinfo.pid))
325 return add_uevent_var(env, "MODALIAS=i3c:dcr%02Xmanuf%04X",
326 devinfo.dcr, manuf);
327
328 return add_uevent_var(env,
329 "MODALIAS=i3c:dcr%02Xmanuf%04Xpart%04Xext%04X",
330 devinfo.dcr, manuf, part, ext);
331}
332
333static const struct device_type i3c_device_type = {
334 .groups = i3c_device_groups,
335 .uevent = i3c_device_uevent,
336};
337
338static int i3c_device_match(struct device *dev, const struct device_driver *drv)
339{
340 struct i3c_device *i3cdev;
341 const struct i3c_driver *i3cdrv;
342 u8 static_addr_method = 0;
343
344 if (dev->type != &i3c_device_type)
345 return 0;
346
347 i3cdev = dev_to_i3cdev(dev);
348 i3cdrv = drv_to_i3cdrv(drv);
349
350 i3c_bus_normaluse_lock(i3cdev->bus);
351 if (i3cdev->desc->boardinfo)
352 static_addr_method = i3cdev->desc->boardinfo->static_addr_method;
353 i3c_bus_normaluse_unlock(i3cdev->bus);
354
355 /*
356 * SETAASA-based devices need not always have a matching ID since
357 * it is not mandatory for such devices to implement deviceinfo
358 * CCC commands. Allow them to register through DT or ACPI.
359 */
360 if (i3cdrv->id_table && i3c_device_match_id(i3cdev, i3cdrv->id_table))
361 return 1;
362
363 if (static_addr_method & I3C_ADDR_METHOD_SETAASA) {
364 if (of_driver_match_device(dev, drv))
365 return 1;
366 if (acpi_driver_match_device(dev, drv))
367 return 1;
368 }
369
370 return 0;
371}
372
373static int i3c_device_probe(struct device *dev)
374{
375 struct i3c_device *i3cdev = dev_to_i3cdev(dev);
376 struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
377
378 return driver->probe(i3cdev);
379}
380
381static void i3c_device_remove(struct device *dev)
382{
383 struct i3c_device *i3cdev = dev_to_i3cdev(dev);
384 struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
385
386 if (driver->remove)
387 driver->remove(i3cdev);
388}
389
390static enum i3c_addr_slot_status
391i3c_bus_get_addr_slot_status_mask(struct i3c_bus *bus, u16 addr, u32 mask)
392{
393 unsigned long status;
394 int bitpos = addr * I3C_ADDR_SLOT_STATUS_BITS;
395
396 if (addr > I2C_MAX_ADDR)
397 return I3C_ADDR_SLOT_RSVD;
398
399 status = bus->addrslots[bitpos / BITS_PER_LONG];
400 status >>= bitpos % BITS_PER_LONG;
401
402 return status & mask;
403}
404
405static enum i3c_addr_slot_status
406i3c_bus_get_addr_slot_status(struct i3c_bus *bus, u16 addr)
407{
408 return i3c_bus_get_addr_slot_status_mask(bus, addr, I3C_ADDR_SLOT_STATUS_MASK);
409}
410
411static void i3c_bus_set_addr_slot_status_mask(struct i3c_bus *bus, u16 addr,
412 enum i3c_addr_slot_status status, u32 mask)
413{
414 int bitpos = addr * I3C_ADDR_SLOT_STATUS_BITS;
415 unsigned long *ptr;
416
417 if (addr > I2C_MAX_ADDR)
418 return;
419
420 ptr = bus->addrslots + (bitpos / BITS_PER_LONG);
421 *ptr &= ~((unsigned long)mask << (bitpos % BITS_PER_LONG));
422 *ptr |= ((unsigned long)status & mask) << (bitpos % BITS_PER_LONG);
423}
424
425static void i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr,
426 enum i3c_addr_slot_status status)
427{
428 i3c_bus_set_addr_slot_status_mask(bus, addr, status, I3C_ADDR_SLOT_STATUS_MASK);
429}
430
431static bool i3c_bus_dev_addr_is_avail(struct i3c_bus *bus, u8 addr)
432{
433 enum i3c_addr_slot_status status;
434
435 status = i3c_bus_get_addr_slot_status(bus, addr);
436
437 return status == I3C_ADDR_SLOT_FREE;
438}
439
440/*
441 * ┌────┬─────────────┬───┬─────────┬───┐
442 * │S/Sr│ 7'h7E RnW=0 │ACK│ ENTDAA │ T ├────┐
443 * └────┴─────────────┴───┴─────────┴───┘ │
444 * ┌─────────────────────────────────────────┘
445 * │ ┌──┬─────────────┬───┬─────────────────┬────────────────┬───┬─────────┐
446 * └─►│Sr│7'h7E RnW=1 │ACK│48bit UID BCR DCR│Assign 7bit Addr│PAR│ ACK/NACK│
447 * └──┴─────────────┴───┴─────────────────┴────────────────┴───┴─────────┘
448 * Some master controllers (such as HCI) need to prepare the entire above transaction before
449 * sending it out to the I3C bus. This means that a 7-bit dynamic address needs to be allocated
450 * before knowing the target device's UID information.
451 *
452 * However, some I3C targets may request specific addresses (called as "init_dyn_addr"), which is
453 * typically specified by the DT-'s assigned-address property. Lower addresses having higher IBI
454 * priority. If it is available, i3c_bus_get_free_addr() preferably return a free address that is
455 * not in the list of desired addresses (called as "init_dyn_addr"). This allows the device with
456 * the "init_dyn_addr" to switch to its "init_dyn_addr" when it hot-joins the I3C bus. Otherwise,
457 * if the "init_dyn_addr" is already in use by another I3C device, the target device will not be
458 * able to switch to its desired address.
459 *
460 * If the previous step fails, fallback returning one of the remaining unassigned address,
461 * regardless of its state in the desired list.
462 */
463static int i3c_bus_get_free_addr(struct i3c_bus *bus, u8 start_addr)
464{
465 enum i3c_addr_slot_status status;
466 u8 addr;
467
468 for (addr = start_addr; addr < I3C_MAX_ADDR; addr++) {
469 status = i3c_bus_get_addr_slot_status_mask(bus, addr,
470 I3C_ADDR_SLOT_EXT_STATUS_MASK);
471 if (status == I3C_ADDR_SLOT_FREE)
472 return addr;
473 }
474
475 for (addr = start_addr; addr < I3C_MAX_ADDR; addr++) {
476 status = i3c_bus_get_addr_slot_status_mask(bus, addr,
477 I3C_ADDR_SLOT_STATUS_MASK);
478 if (status == I3C_ADDR_SLOT_FREE)
479 return addr;
480 }
481
482 return -ENOMEM;
483}
484
485static void i3c_bus_init_addrslots(struct i3c_bus *bus)
486{
487 int i;
488
489 /* Addresses 0 to 7 are reserved. */
490 for (i = 0; i < 8; i++)
491 i3c_bus_set_addr_slot_status(bus, i, I3C_ADDR_SLOT_RSVD);
492
493 /*
494 * Reserve broadcast address and all addresses that might collide
495 * with the broadcast address when facing a single bit error.
496 */
497 i3c_bus_set_addr_slot_status(bus, I3C_BROADCAST_ADDR,
498 I3C_ADDR_SLOT_RSVD);
499 for (i = 0; i < 7; i++)
500 i3c_bus_set_addr_slot_status(bus, I3C_BROADCAST_ADDR ^ BIT(i),
501 I3C_ADDR_SLOT_RSVD);
502}
503
504static void i3c_bus_cleanup(struct i3c_bus *i3cbus)
505{
506 mutex_lock(&i3c_core_lock);
507 idr_remove(&i3c_bus_idr, i3cbus->id);
508 mutex_unlock(&i3c_core_lock);
509}
510
511static int i3c_bus_init(struct i3c_bus *i3cbus, struct fwnode_handle *fwnode)
512{
513 int ret, start, end, id = -1;
514
515 init_rwsem(&i3cbus->lock);
516 INIT_LIST_HEAD(&i3cbus->devs.i2c);
517 INIT_LIST_HEAD(&i3cbus->devs.i3c);
518 i3c_bus_init_addrslots(i3cbus);
519 i3cbus->mode = I3C_BUS_MODE_PURE;
520
521 if (fwnode && is_of_node(fwnode))
522 id = of_alias_get_id(to_of_node(fwnode), "i3c");
523
524 mutex_lock(&i3c_core_lock);
525 if (id >= 0) {
526 start = id;
527 end = start + 1;
528 } else {
529 start = __i3c_first_dynamic_bus_num;
530 end = 0;
531 }
532
533 ret = idr_alloc(&i3c_bus_idr, i3cbus, start, end, GFP_KERNEL);
534 mutex_unlock(&i3c_core_lock);
535
536 if (ret < 0)
537 return ret;
538
539 i3cbus->id = ret;
540
541 return 0;
542}
543
544void i3c_for_each_bus_locked(int (*fn)(struct i3c_bus *bus, void *data),
545 void *data)
546{
547 struct i3c_bus *bus;
548 int id;
549
550 mutex_lock(&i3c_core_lock);
551 idr_for_each_entry(&i3c_bus_idr, bus, id)
552 fn(bus, data);
553 mutex_unlock(&i3c_core_lock);
554}
555EXPORT_SYMBOL_GPL(i3c_for_each_bus_locked);
556
557int i3c_register_notifier(struct notifier_block *nb)
558{
559 return blocking_notifier_chain_register(&i3c_bus_notifier, nb);
560}
561EXPORT_SYMBOL_GPL(i3c_register_notifier);
562
563int i3c_unregister_notifier(struct notifier_block *nb)
564{
565 return blocking_notifier_chain_unregister(&i3c_bus_notifier, nb);
566}
567EXPORT_SYMBOL_GPL(i3c_unregister_notifier);
568
569static void i3c_bus_notify(struct i3c_bus *bus, unsigned int action)
570{
571 blocking_notifier_call_chain(&i3c_bus_notifier, action, bus);
572}
573
574static const char * const i3c_bus_mode_strings[] = {
575 [I3C_BUS_MODE_PURE] = "pure",
576 [I3C_BUS_MODE_MIXED_FAST] = "mixed-fast",
577 [I3C_BUS_MODE_MIXED_LIMITED] = "mixed-limited",
578 [I3C_BUS_MODE_MIXED_SLOW] = "mixed-slow",
579};
580
581static ssize_t mode_show(struct device *dev,
582 struct device_attribute *da,
583 char *buf)
584{
585 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
586 ssize_t ret;
587
588 i3c_bus_normaluse_lock(i3cbus);
589 if (i3cbus->mode < 0 ||
590 i3cbus->mode >= ARRAY_SIZE(i3c_bus_mode_strings) ||
591 !i3c_bus_mode_strings[i3cbus->mode])
592 ret = sysfs_emit(buf, "unknown\n");
593 else
594 ret = sysfs_emit(buf, "%s\n", i3c_bus_mode_strings[i3cbus->mode]);
595 i3c_bus_normaluse_unlock(i3cbus);
596
597 return ret;
598}
599static DEVICE_ATTR_RO(mode);
600
601static ssize_t current_master_show(struct device *dev,
602 struct device_attribute *da,
603 char *buf)
604{
605 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
606 ssize_t ret;
607
608 i3c_bus_normaluse_lock(i3cbus);
609 ret = sysfs_emit(buf, "%d-%llx\n", i3cbus->id,
610 i3cbus->cur_master->info.pid);
611 i3c_bus_normaluse_unlock(i3cbus);
612
613 return ret;
614}
615static DEVICE_ATTR_RO(current_master);
616
617static ssize_t i3c_scl_frequency_show(struct device *dev,
618 struct device_attribute *da,
619 char *buf)
620{
621 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
622 ssize_t ret;
623
624 i3c_bus_normaluse_lock(i3cbus);
625 ret = sysfs_emit(buf, "%ld\n", i3cbus->scl_rate.i3c);
626 i3c_bus_normaluse_unlock(i3cbus);
627
628 return ret;
629}
630static DEVICE_ATTR_RO(i3c_scl_frequency);
631
632static ssize_t i2c_scl_frequency_show(struct device *dev,
633 struct device_attribute *da,
634 char *buf)
635{
636 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
637 ssize_t ret;
638
639 i3c_bus_normaluse_lock(i3cbus);
640 ret = sysfs_emit(buf, "%ld\n", i3cbus->scl_rate.i2c);
641 i3c_bus_normaluse_unlock(i3cbus);
642
643 return ret;
644}
645static DEVICE_ATTR_RO(i2c_scl_frequency);
646
647static void i3c_master_hj_work_fn(struct work_struct *work)
648{
649 struct i3c_master_controller *master = container_of(work, typeof(*master), hj_work);
650
651 if (!master->shutting_down)
652 i3c_master_do_daa(master);
653}
654
655static int i3c_set_hotjoin(struct i3c_master_controller *master, bool enable)
656{
657 int ret;
658
659 if (!master || !master->ops)
660 return -EINVAL;
661
662 if (!master->ops->enable_hotjoin || !master->ops->disable_hotjoin)
663 return -EINVAL;
664
665 if (enable || master->rpm_ibi_allowed) {
666 ret = i3c_master_rpm_get(master);
667 if (ret)
668 return ret;
669 }
670
671 i3c_bus_maintenance_lock(&master->bus);
672
673 if (master->shutting_down)
674 ret = -ENODEV;
675 else if (enable)
676 ret = master->ops->enable_hotjoin(master);
677 else
678 ret = master->ops->disable_hotjoin(master);
679
680 if (!ret)
681 master->hotjoin = enable;
682
683 i3c_bus_maintenance_unlock(&master->bus);
684
685 if ((enable && ret) || (!enable && !ret) || master->rpm_ibi_allowed)
686 i3c_master_rpm_put(master);
687
688 return ret;
689}
690
691static ssize_t hotjoin_store(struct device *dev, struct device_attribute *attr,
692 const char *buf, size_t count)
693{
694 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
695 int ret;
696 bool res;
697
698 if (!i3cbus->cur_master)
699 return -EINVAL;
700
701 if (kstrtobool(buf, &res))
702 return -EINVAL;
703
704 ret = i3c_set_hotjoin(i3cbus->cur_master->common.master, res);
705 if (ret)
706 return ret;
707
708 return count;
709}
710
711/*
712 * i3c_master_enable_hotjoin - Enable hotjoin
713 * @master: I3C master object
714 *
715 * Return: a 0 in case of success, an negative error code otherwise.
716 */
717int i3c_master_enable_hotjoin(struct i3c_master_controller *master)
718{
719 return i3c_set_hotjoin(master, true);
720}
721EXPORT_SYMBOL_GPL(i3c_master_enable_hotjoin);
722
723/*
724 * i3c_master_disable_hotjoin - Disable hotjoin
725 * @master: I3C master object
726 *
727 * Return: a 0 in case of success, an negative error code otherwise.
728 */
729int i3c_master_disable_hotjoin(struct i3c_master_controller *master)
730{
731 return i3c_set_hotjoin(master, false);
732}
733EXPORT_SYMBOL_GPL(i3c_master_disable_hotjoin);
734
735/**
736 * i3c_master_queue_hotjoin - Queue DAA processing after a Hot-Join event
737 * @master: I3C master object
738 *
739 * Queue the hot-join worker on the master's workqueue.
740 */
741void i3c_master_queue_hotjoin(struct i3c_master_controller *master)
742{
743 queue_work(master->wq, &master->hj_work);
744}
745EXPORT_SYMBOL_GPL(i3c_master_queue_hotjoin);
746
747static ssize_t hotjoin_show(struct device *dev, struct device_attribute *da, char *buf)
748{
749 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
750 ssize_t ret;
751
752 i3c_bus_normaluse_lock(i3cbus);
753 ret = sysfs_emit(buf, "%d\n", i3cbus->cur_master->common.master->hotjoin);
754 i3c_bus_normaluse_unlock(i3cbus);
755
756 return ret;
757}
758
759static DEVICE_ATTR_RW(hotjoin);
760
761static ssize_t dev_nack_retry_count_show(struct device *dev,
762 struct device_attribute *attr, char *buf)
763{
764 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
765 ssize_t ret;
766
767 i3c_bus_normaluse_lock(i3cbus);
768 ret = sysfs_emit(buf, "%u\n", dev_to_i3cmaster(dev)->dev_nack_retry_count);
769 i3c_bus_normaluse_unlock(i3cbus);
770
771 return ret;
772}
773
774static ssize_t dev_nack_retry_count_store(struct device *dev,
775 struct device_attribute *attr,
776 const char *buf, size_t count)
777{
778 struct i3c_bus *i3cbus = dev_to_i3cbus(dev);
779 struct i3c_master_controller *master = dev_to_i3cmaster(dev);
780 unsigned int val;
781 int ret;
782
783 ret = kstrtouint(buf, 0, &val);
784 if (ret)
785 return ret;
786
787 ret = i3c_master_rpm_get(master);
788 if (ret)
789 return ret;
790
791 i3c_bus_maintenance_lock(i3cbus);
792 ret = master->ops->set_dev_nack_retry(master, val);
793 if (!ret)
794 master->dev_nack_retry_count = val;
795 i3c_bus_maintenance_unlock(i3cbus);
796
797 i3c_master_rpm_put(master);
798
799 return ret ?: count;
800}
801
802static DEVICE_ATTR_RW(dev_nack_retry_count);
803
804static ssize_t do_daa_store(struct device *dev,
805 struct device_attribute *attr,
806 const char *buf, size_t count)
807{
808 struct i3c_master_controller *master = dev_to_i3cmaster(dev);
809 bool val;
810 int ret;
811
812 if (kstrtobool(buf, &val))
813 return -EINVAL;
814
815 if (!val)
816 return -EINVAL;
817
818 if (!master->init_done)
819 return -EAGAIN;
820
821 ret = i3c_master_do_daa(master);
822 if (ret)
823 return ret;
824
825 return count;
826}
827
828static DEVICE_ATTR_WO(do_daa);
829
830static struct attribute *i3c_masterdev_attrs[] = {
831 &dev_attr_mode.attr,
832 &dev_attr_current_master.attr,
833 &dev_attr_i3c_scl_frequency.attr,
834 &dev_attr_i2c_scl_frequency.attr,
835 &dev_attr_bcr.attr,
836 &dev_attr_dcr.attr,
837 &dev_attr_pid.attr,
838 &dev_attr_dynamic_address.attr,
839 &dev_attr_hdrcap.attr,
840 &dev_attr_hotjoin.attr,
841 &dev_attr_do_daa.attr,
842 NULL,
843};
844ATTRIBUTE_GROUPS(i3c_masterdev);
845
846static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
847{
848 kfree(dev);
849}
850
851static void i3c_masterdev_release(struct device *dev)
852{
853 struct i3c_master_controller *master = dev_to_i3cmaster(dev);
854 struct i3c_bus *bus = dev_to_i3cbus(dev);
855
856 if (master->wq)
857 destroy_workqueue(master->wq);
858
859 WARN_ON(!list_empty(&bus->devs.i2c) || !list_empty(&bus->devs.i3c));
860 i3c_bus_cleanup(bus);
861
862 fwnode_handle_put(dev->fwnode);
863
864 i3c_master_free_i3c_dev(master->this);
865}
866
867static const struct device_type i3c_masterdev_type = {
868 .groups = i3c_masterdev_groups,
869};
870
871static void i3c_master_shutdown(struct i3c_master_controller *master)
872{
873 i3c_bus_maintenance_lock(&master->bus);
874 master->shutting_down = true;
875 i3c_bus_maintenance_unlock(&master->bus);
876
877 cancel_work_sync(&master->hj_work);
878 cancel_work_sync(&master->reg_work);
879}
880
881static void i3c_device_shutdown(struct device *dev)
882{
883 if (dev->type == &i3c_masterdev_type)
884 i3c_master_shutdown(dev_to_i3cmaster(dev));
885}
886
887const struct bus_type i3c_bus_type = {
888 .name = "i3c",
889 .match = i3c_device_match,
890 .probe = i3c_device_probe,
891 .remove = i3c_device_remove,
892 .shutdown = i3c_device_shutdown,
893};
894EXPORT_SYMBOL_GPL(i3c_bus_type);
895
896static int i3c_bus_set_mode(struct i3c_bus *i3cbus, enum i3c_bus_mode mode,
897 unsigned long max_i2c_scl_rate)
898{
899 struct i3c_master_controller *master = i3c_bus_to_i3c_master(i3cbus);
900
901 i3cbus->mode = mode;
902
903 switch (i3cbus->mode) {
904 case I3C_BUS_MODE_PURE:
905 if (!i3cbus->scl_rate.i3c)
906 i3cbus->scl_rate.i3c = I3C_BUS_I3C_SCL_TYP_RATE;
907 break;
908 case I3C_BUS_MODE_MIXED_FAST:
909 case I3C_BUS_MODE_MIXED_LIMITED:
910 if (!i3cbus->scl_rate.i3c)
911 i3cbus->scl_rate.i3c = I3C_BUS_I3C_SCL_TYP_RATE;
912 if (!i3cbus->scl_rate.i2c)
913 i3cbus->scl_rate.i2c = max_i2c_scl_rate;
914 break;
915 case I3C_BUS_MODE_MIXED_SLOW:
916 if (!i3cbus->scl_rate.i2c)
917 i3cbus->scl_rate.i2c = max_i2c_scl_rate;
918 if (!i3cbus->scl_rate.i3c ||
919 i3cbus->scl_rate.i3c > i3cbus->scl_rate.i2c)
920 i3cbus->scl_rate.i3c = i3cbus->scl_rate.i2c;
921 break;
922 default:
923 return -EINVAL;
924 }
925
926 dev_dbg(&master->dev, "i2c-scl = %ld Hz i3c-scl = %ld Hz\n",
927 i3cbus->scl_rate.i2c, i3cbus->scl_rate.i3c);
928
929 /*
930 * I3C/I2C frequency may have been overridden, check that user-provided
931 * values are not exceeding max possible frequency.
932 */
933 if (i3cbus->scl_rate.i3c > I3C_BUS_I3C_SCL_MAX_RATE ||
934 i3cbus->scl_rate.i2c > I3C_BUS_I2C_FM_PLUS_SCL_MAX_RATE)
935 return -EINVAL;
936
937 return 0;
938}
939
940static struct i3c_master_controller *
941i2c_adapter_to_i3c_master(struct i2c_adapter *adap)
942{
943 return container_of(adap, struct i3c_master_controller, i2c);
944}
945
946static struct i2c_adapter *
947i3c_master_to_i2c_adapter(struct i3c_master_controller *master)
948{
949 return &master->i2c;
950}
951
952static void i3c_master_free_i2c_dev(struct i2c_dev_desc *dev)
953{
954 kfree(dev);
955}
956
957static struct i2c_dev_desc *
958i3c_master_alloc_i2c_dev(struct i3c_master_controller *master,
959 u16 addr, u8 lvr)
960{
961 struct i2c_dev_desc *dev;
962
963 dev = kzalloc_obj(*dev);
964 if (!dev)
965 return ERR_PTR(-ENOMEM);
966
967 dev->common.master = master;
968 dev->addr = addr;
969 dev->lvr = lvr;
970
971 return dev;
972}
973
974static void *i3c_ccc_cmd_dest_init(struct i3c_ccc_cmd_dest *dest, u8 addr,
975 u16 payloadlen)
976{
977 dest->addr = addr;
978 dest->payload.len = payloadlen;
979 dest->payload.actual_len = 0;
980 dest->payload.optional_bytes = 0;
981 if (payloadlen)
982 dest->payload.data = kzalloc(payloadlen, GFP_KERNEL);
983 else
984 dest->payload.data = NULL;
985
986 return dest->payload.data;
987}
988
989static void i3c_ccc_cmd_dest_cleanup(struct i3c_ccc_cmd_dest *dest)
990{
991 kfree(dest->payload.data);
992}
993
994static void i3c_ccc_cmd_init_retries(struct i3c_ccc_cmd *cmd, bool rnw, u8 id,
995 struct i3c_ccc_cmd_dest *dests,
996 unsigned int ndests, unsigned int retries)
997{
998 cmd->rnw = rnw ? 1 : 0;
999 cmd->id = id;
1000 cmd->dests = dests;
1001 cmd->ndests = ndests;
1002 cmd->retries = retries;
1003 cmd->err = I3C_ERROR_UNKNOWN;
1004}
1005
1006static void i3c_ccc_cmd_init(struct i3c_ccc_cmd *cmd, bool rnw, u8 id,
1007 struct i3c_ccc_cmd_dest *dests,
1008 unsigned int ndests)
1009{
1010 i3c_ccc_cmd_init_retries(cmd, rnw, id, dests, ndests,
1011 rnw ? I3C_CCC_RETRIES : 0);
1012}
1013
1014static int i3c_ccc_validate_payload_len(struct i3c_ccc_cmd *cmd)
1015{
1016 unsigned int i;
1017
1018 if (!cmd->rnw)
1019 return 0;
1020
1021 for (i = 0; i < cmd->ndests; i++) {
1022 struct i3c_ccc_cmd_payload *p = &cmd->dests[i].payload;
1023 u16 min_len;
1024
1025 if (p->optional_bytes > p->len)
1026 return -EINVAL;
1027
1028 if (p->actual_len > p->len)
1029 return -EIO;
1030
1031 if (!p->len)
1032 continue;
1033
1034 min_len = p->len - p->optional_bytes;
1035 if (p->actual_len < min_len)
1036 return -EIO;
1037 }
1038
1039 return 0;
1040}
1041
1042/**
1043 * i3c_master_send_ccc_cmd_locked() - send a CCC (Common Command Codes)
1044 * @master: master used to send frames on the bus
1045 * @cmd: command to send
1046 *
1047 * Return: 0 in case of success, or a negative error code otherwise.
1048 * I3C Mx error codes are stored in cmd->err.
1049 */
1050static int i3c_master_send_ccc_cmd_locked(struct i3c_master_controller *master,
1051 struct i3c_ccc_cmd *cmd)
1052{
1053 unsigned int attempt, max_attempts;
1054 int ret;
1055
1056 if (!cmd || !master)
1057 return -EINVAL;
1058
1059 if (WARN_ON(master->init_done &&
1060 !rwsem_is_locked(&master->bus.lock)))
1061 return -EINVAL;
1062
1063 if (!master->ops->send_ccc_cmd)
1064 return -EOPNOTSUPP;
1065
1066 if ((cmd->rnw || (cmd->id & I3C_CCC_DIRECT)) &&
1067 (!cmd->dests || !cmd->ndests))
1068 return -EINVAL;
1069
1070 if (master->ops->supports_ccc_cmd &&
1071 !master->ops->supports_ccc_cmd(master, cmd))
1072 return -EOPNOTSUPP;
1073
1074 max_attempts = cmd->retries + 1;
1075 ret = -EIO;
1076 for (attempt = 0; attempt < max_attempts; attempt++) {
1077 unsigned int i;
1078
1079 if (cmd->rnw)
1080 for (i = 0; i < cmd->ndests; i++)
1081 cmd->dests[i].payload.actual_len = 0;
1082
1083 cmd->err = I3C_ERROR_UNKNOWN;
1084 ret = master->ops->send_ccc_cmd(master, cmd);
1085 if (!ret && cmd->err == I3C_ERROR_UNKNOWN)
1086 break;
1087 }
1088
1089 if (!ret)
1090 ret = i3c_ccc_validate_payload_len(cmd);
1091
1092 return ret;
1093}
1094
1095static struct i2c_dev_desc *
1096i3c_master_find_i2c_dev_by_addr(const struct i3c_master_controller *master,
1097 u16 addr)
1098{
1099 struct i2c_dev_desc *dev;
1100
1101 i3c_bus_for_each_i2cdev(&master->bus, dev) {
1102 if (dev->addr == addr)
1103 return dev;
1104 }
1105
1106 return NULL;
1107}
1108
1109/**
1110 * i3c_master_get_free_addr() - get a free address on the bus
1111 * @master: I3C master object
1112 * @start_addr: where to start searching
1113 *
1114 * This function must be called with the bus lock held in write mode.
1115 *
1116 * Return: the first free address starting at @start_addr (included) or -ENOMEM
1117 * if there's no more address available.
1118 */
1119int i3c_master_get_free_addr(struct i3c_master_controller *master,
1120 u8 start_addr)
1121{
1122 return i3c_bus_get_free_addr(&master->bus, start_addr);
1123}
1124EXPORT_SYMBOL_GPL(i3c_master_get_free_addr);
1125
1126static void i3c_device_release(struct device *dev)
1127{
1128 struct i3c_device *i3cdev = dev_to_i3cdev(dev);
1129
1130 WARN_ON(i3cdev->desc);
1131
1132 fwnode_handle_put(dev->fwnode);
1133 kfree(i3cdev);
1134}
1135
1136static struct i3c_dev_desc *
1137i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
1138 const struct i3c_device_info *info)
1139{
1140 struct i3c_dev_desc *dev;
1141
1142 dev = kzalloc_obj(*dev);
1143 if (!dev)
1144 return ERR_PTR(-ENOMEM);
1145
1146 dev->common.master = master;
1147 dev->info = *info;
1148 mutex_init(&dev->ibi_lock);
1149
1150 return dev;
1151}
1152
1153static int i3c_master_rstdaa_locked(struct i3c_master_controller *master,
1154 u8 addr)
1155{
1156 enum i3c_addr_slot_status addrstat;
1157 struct i3c_ccc_cmd_dest dest;
1158 struct i3c_ccc_cmd cmd;
1159 int ret;
1160
1161 if (!master)
1162 return -EINVAL;
1163
1164 addrstat = i3c_bus_get_addr_slot_status(&master->bus, addr);
1165 if (addr != I3C_BROADCAST_ADDR && addrstat != I3C_ADDR_SLOT_I3C_DEV)
1166 return -EINVAL;
1167
1168 i3c_ccc_cmd_dest_init(&dest, addr, 0);
1169 i3c_ccc_cmd_init(&cmd, false,
1170 I3C_CCC_RSTDAA(addr == I3C_BROADCAST_ADDR),
1171 &dest, 1);
1172 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1173 i3c_ccc_cmd_dest_cleanup(&dest);
1174
1175 /* No active devices on the bus. */
1176 if (ret && cmd.err == I3C_ERROR_M2)
1177 ret = 0;
1178
1179 return ret;
1180}
1181
1182/**
1183 * i3c_master_setaasa_locked() - start a SETAASA procedure (Set All Addresses to Static Address)
1184 * @master: I3C master object
1185 *
1186 * Send a SETAASA CCC command to set all attached I3C devices' dynamic addresses to
1187 * their static address.
1188 *
1189 * This function must be called with the bus lock held in write mode.
1190 *
1191 * First, the SETHID CCC command is sent, followed by the SETAASA CCC.
1192 *
1193 * Return: 0 in case of success, a positive I3C error code if the error is
1194 * one of the official Mx error codes, and a negative error code otherwise.
1195 */
1196static int i3c_master_setaasa_locked(struct i3c_master_controller *master)
1197{
1198 struct i3c_ccc_cmd_dest dest;
1199 struct i3c_ccc_cmd cmd;
1200 int ret;
1201
1202 /*
1203 * Send SETHID CCC command. Though it is a standard CCC command specified
1204 * in JESD300-5, we are not defining a separate macro to be explicit that
1205 * the value falls under the vendor specific range.
1206 */
1207 i3c_ccc_cmd_dest_init(&dest, I3C_BROADCAST_ADDR, 0);
1208 i3c_ccc_cmd_init(&cmd, false, I3C_CCC_VENDOR(0, true), &dest, 1);
1209 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1210 i3c_ccc_cmd_dest_cleanup(&dest);
1211 if (ret && cmd.err == I3C_ERROR_M2)
1212 ret = 0;
1213 if (ret)
1214 return ret;
1215
1216 /* Send SETAASA CCC command */
1217 i3c_ccc_cmd_dest_init(&dest, I3C_BROADCAST_ADDR, 0);
1218 i3c_ccc_cmd_init(&cmd, false, I3C_CCC_SETAASA, &dest, 1);
1219 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1220 i3c_ccc_cmd_dest_cleanup(&dest);
1221 if (ret && cmd.err == I3C_ERROR_M2)
1222 ret = 0;
1223
1224 return ret;
1225}
1226
1227/**
1228 * i3c_master_entdaa_locked() - start a DAA (Dynamic Address Assignment)
1229 * procedure
1230 * @master: master used to send frames on the bus
1231 *
1232 * Send a ENTDAA CCC command to start a DAA procedure.
1233 *
1234 * Note that this function only sends the ENTDAA CCC command, all the logic
1235 * behind dynamic address assignment has to be handled in the I3C master
1236 * driver.
1237 *
1238 * This function must be called with the bus lock held in write mode.
1239 *
1240 * Return: 0 in case of success, or a negative error code otherwise.
1241 */
1242int i3c_master_entdaa_locked(struct i3c_master_controller *master)
1243{
1244 struct i3c_ccc_cmd_dest dest;
1245 struct i3c_ccc_cmd cmd;
1246 int ret;
1247
1248 i3c_ccc_cmd_dest_init(&dest, I3C_BROADCAST_ADDR, 0);
1249 i3c_ccc_cmd_init(&cmd, false, I3C_CCC_ENTDAA, &dest, 1);
1250 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1251 i3c_ccc_cmd_dest_cleanup(&dest);
1252
1253 /* No active devices need an address. */
1254 if (ret && cmd.err == I3C_ERROR_M2)
1255 ret = 0;
1256
1257 return ret;
1258}
1259EXPORT_SYMBOL_GPL(i3c_master_entdaa_locked);
1260
1261/**
1262 * i3c_master_enec_disec_locked() - send an ENEC or DISEC CCC command
1263 * @master: master used to send frames on the bus
1264 * @addr: a valid I3C slave address or %I3C_BROADCAST_ADDR
1265 * @enable: true to send ENEC, false to send DISEC
1266 * @evts: events to enable or disable
1267 * @suppress_m2: if true, treat an M2 (NACK) error from the CCC as success
1268 *
1269 * Send an ENEC or DISEC CCC command to enable or disable some or all events
1270 * coming from a specific slave, or all devices if @addr is
1271 * %I3C_BROADCAST_ADDR.
1272 *
1273 * When @suppress_m2 is true, a NACK of the broadcast (which can happen when
1274 * no devices are present on the bus) is not reported as an error. This is
1275 * useful for callers that want to configure event reporting unconditionally,
1276 * regardless of whether any devices are currently on the bus.
1277 *
1278 * This function must be called with the bus lock held in write mode.
1279 *
1280 * Return: 0 in case of success, or a negative error code otherwise.
1281 */
1282int i3c_master_enec_disec_locked(struct i3c_master_controller *master, u8 addr,
1283 bool enable, u8 evts, bool suppress_m2)
1284{
1285 struct i3c_ccc_events *events;
1286 struct i3c_ccc_cmd_dest dest;
1287 struct i3c_ccc_cmd cmd;
1288 int ret;
1289
1290 events = i3c_ccc_cmd_dest_init(&dest, addr, sizeof(*events));
1291 if (!events)
1292 return -ENOMEM;
1293
1294 events->events = evts;
1295 i3c_ccc_cmd_init(&cmd, false,
1296 enable ?
1297 I3C_CCC_ENEC(addr == I3C_BROADCAST_ADDR) :
1298 I3C_CCC_DISEC(addr == I3C_BROADCAST_ADDR),
1299 &dest, 1);
1300 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1301 i3c_ccc_cmd_dest_cleanup(&dest);
1302
1303 if (suppress_m2 && ret && cmd.err == I3C_ERROR_M2)
1304 ret = 0;
1305
1306 return ret;
1307}
1308EXPORT_SYMBOL_GPL(i3c_master_enec_disec_locked);
1309
1310/**
1311 * i3c_master_disec_locked() - send a DISEC CCC command
1312 * @master: master used to send frames on the bus
1313 * @addr: a valid I3C slave address or %I3C_BROADCAST_ADDR
1314 * @evts: events to disable
1315 *
1316 * Send a DISEC CCC command to disable some or all events coming from a
1317 * specific slave, or all devices if @addr is %I3C_BROADCAST_ADDR.
1318 *
1319 * This function must be called with the bus lock held in write mode.
1320 *
1321 * Return: 0 in case of success, or a negative error code otherwise.
1322 */
1323int i3c_master_disec_locked(struct i3c_master_controller *master, u8 addr,
1324 u8 evts)
1325{
1326 return i3c_master_enec_disec_locked(master, addr, false, evts, false);
1327}
1328EXPORT_SYMBOL_GPL(i3c_master_disec_locked);
1329
1330/**
1331 * i3c_master_enec_locked() - send an ENEC CCC command
1332 * @master: master used to send frames on the bus
1333 * @addr: a valid I3C slave address or %I3C_BROADCAST_ADDR
1334 * @evts: events to disable
1335 *
1336 * Sends an ENEC CCC command to enable some or all events coming from a
1337 * specific slave, or all devices if @addr is %I3C_BROADCAST_ADDR.
1338 *
1339 * This function must be called with the bus lock held in write mode.
1340 *
1341 * Return: 0 in case of success, or a negative error code otherwise.
1342 */
1343int i3c_master_enec_locked(struct i3c_master_controller *master, u8 addr,
1344 u8 evts)
1345{
1346 return i3c_master_enec_disec_locked(master, addr, true, evts, false);
1347}
1348EXPORT_SYMBOL_GPL(i3c_master_enec_locked);
1349
1350/**
1351 * i3c_master_defslvs_locked() - send a DEFSLVS CCC command
1352 * @master: master used to send frames on the bus
1353 *
1354 * Send a DEFSLVS CCC command containing all the devices known to the @master.
1355 * This is useful when you have secondary masters on the bus to propagate
1356 * device information.
1357 *
1358 * This should be called after all I3C devices have been discovered (in other
1359 * words, after the DAA procedure has finished) and instantiated in
1360 * &i3c_master_controller_ops->bus_init().
1361 * It should also be called if a master ACKed an Hot-Join request and assigned
1362 * a dynamic address to the device joining the bus.
1363 *
1364 * This function must be called with the bus lock held in write mode.
1365 *
1366 * Return: 0 in case of success, or a negative error code otherwise.
1367 */
1368int i3c_master_defslvs_locked(struct i3c_master_controller *master)
1369{
1370 struct i3c_ccc_defslvs *defslvs;
1371 struct i3c_ccc_dev_desc *desc;
1372 struct i3c_ccc_cmd_dest dest;
1373 struct i3c_dev_desc *i3cdev;
1374 struct i2c_dev_desc *i2cdev;
1375 struct i3c_ccc_cmd cmd;
1376 struct i3c_bus *bus;
1377 bool send = false;
1378 int ndevs = 0, ret;
1379
1380 if (!master)
1381 return -EINVAL;
1382
1383 bus = i3c_master_get_bus(master);
1384 i3c_bus_for_each_i3cdev(bus, i3cdev) {
1385 ndevs++;
1386
1387 if (i3cdev == master->this)
1388 continue;
1389
1390 if (I3C_BCR_DEVICE_ROLE(i3cdev->info.bcr) ==
1391 I3C_BCR_I3C_MASTER)
1392 send = true;
1393 }
1394
1395 /* No other master on the bus, skip DEFSLVS. */
1396 if (!send)
1397 return 0;
1398
1399 i3c_bus_for_each_i2cdev(bus, i2cdev)
1400 ndevs++;
1401
1402 defslvs = i3c_ccc_cmd_dest_init(&dest, I3C_BROADCAST_ADDR,
1403 struct_size(defslvs, slaves,
1404 ndevs - 1));
1405 if (!defslvs)
1406 return -ENOMEM;
1407
1408 defslvs->count = ndevs;
1409 defslvs->master.bcr = master->this->info.bcr;
1410 defslvs->master.dcr = master->this->info.dcr;
1411 defslvs->master.dyn_addr = master->this->info.dyn_addr << 1;
1412 defslvs->master.static_addr = I3C_BROADCAST_ADDR << 1;
1413
1414 desc = defslvs->slaves;
1415 i3c_bus_for_each_i2cdev(bus, i2cdev) {
1416 desc->lvr = i2cdev->lvr;
1417 desc->static_addr = i2cdev->addr << 1;
1418 desc++;
1419 }
1420
1421 i3c_bus_for_each_i3cdev(bus, i3cdev) {
1422 /* Skip the I3C dev representing this master. */
1423 if (i3cdev == master->this)
1424 continue;
1425
1426 desc->bcr = i3cdev->info.bcr;
1427 desc->dcr = i3cdev->info.dcr;
1428 desc->dyn_addr = i3cdev->info.dyn_addr << 1;
1429 desc->static_addr = i3cdev->info.static_addr << 1;
1430 desc++;
1431 }
1432
1433 i3c_ccc_cmd_init(&cmd, false, I3C_CCC_DEFSLVS, &dest, 1);
1434 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1435 i3c_ccc_cmd_dest_cleanup(&dest);
1436
1437 return ret;
1438}
1439EXPORT_SYMBOL_GPL(i3c_master_defslvs_locked);
1440
1441static int i3c_master_setda_locked(struct i3c_master_controller *master,
1442 u8 oldaddr, u8 newaddr, bool setdasa)
1443{
1444 struct i3c_ccc_cmd_dest dest;
1445 struct i3c_ccc_setda *setda;
1446 struct i3c_ccc_cmd cmd;
1447 int ret;
1448
1449 if (!oldaddr || !newaddr)
1450 return -EINVAL;
1451
1452 setda = i3c_ccc_cmd_dest_init(&dest, oldaddr, sizeof(*setda));
1453 if (!setda)
1454 return -ENOMEM;
1455
1456 setda->addr = newaddr << 1;
1457 i3c_ccc_cmd_init(&cmd, false,
1458 setdasa ? I3C_CCC_SETDASA : I3C_CCC_SETNEWDA,
1459 &dest, 1);
1460 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1461 i3c_ccc_cmd_dest_cleanup(&dest);
1462
1463 return ret;
1464}
1465
1466static int i3c_master_setdasa_locked(struct i3c_master_controller *master,
1467 u8 static_addr, u8 dyn_addr)
1468{
1469 return i3c_master_setda_locked(master, static_addr, dyn_addr, true);
1470}
1471
1472static int i3c_master_setnewda_locked(struct i3c_master_controller *master,
1473 u8 oldaddr, u8 newaddr)
1474{
1475 return i3c_master_setda_locked(master, oldaddr, newaddr, false);
1476}
1477
1478static int i3c_master_getmrl_locked(struct i3c_master_controller *master,
1479 struct i3c_device_info *info)
1480{
1481 struct i3c_ccc_cmd_dest dest;
1482 struct i3c_ccc_mrl *mrl;
1483 struct i3c_ccc_cmd cmd;
1484 int ret;
1485
1486 mrl = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr, sizeof(*mrl));
1487 if (!mrl)
1488 return -ENOMEM;
1489
1490 /*
1491 * GETMRL returns 2 bytes (max read length) when the device does not
1492 * advertise IBI payload, or 2 or 3 bytes when it does (the optional
1493 * third byte is max IBI length). Use optional_bytes to allow either
1494 * length when IBI payload is supported.
1495 */
1496 if (info->bcr & I3C_BCR_IBI_PAYLOAD)
1497 dest.payload.optional_bytes = 1;
1498 else
1499 dest.payload.len -= 1;
1500
1501 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETMRL, &dest, 1);
1502 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1503 if (ret)
1504 goto out;
1505
1506 switch (dest.payload.actual_len) {
1507 case 3:
1508 info->max_ibi_len = mrl->ibi_len;
1509 fallthrough;
1510 case 2:
1511 info->max_read_len = be16_to_cpu(mrl->read_len);
1512 break;
1513 default:
1514 ret = -EIO;
1515 goto out;
1516 }
1517
1518out:
1519 i3c_ccc_cmd_dest_cleanup(&dest);
1520
1521 return ret;
1522}
1523
1524static int i3c_master_getmwl_locked(struct i3c_master_controller *master,
1525 struct i3c_device_info *info)
1526{
1527 struct i3c_ccc_cmd_dest dest;
1528 struct i3c_ccc_mwl *mwl;
1529 struct i3c_ccc_cmd cmd;
1530 int ret;
1531
1532 mwl = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr, sizeof(*mwl));
1533 if (!mwl)
1534 return -ENOMEM;
1535
1536 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETMWL, &dest, 1);
1537 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1538 if (ret)
1539 goto out;
1540
1541 if (dest.payload.actual_len != sizeof(*mwl)) {
1542 ret = -EIO;
1543 goto out;
1544 }
1545
1546 info->max_write_len = be16_to_cpu(mwl->len);
1547
1548out:
1549 i3c_ccc_cmd_dest_cleanup(&dest);
1550
1551 return ret;
1552}
1553
1554static int i3c_master_getmxds_locked(struct i3c_master_controller *master,
1555 struct i3c_device_info *info)
1556{
1557 struct i3c_ccc_getmxds *getmaxds;
1558 struct i3c_ccc_cmd_dest dest;
1559 struct i3c_ccc_cmd cmd;
1560 int ret;
1561
1562 getmaxds = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr,
1563 sizeof(*getmaxds));
1564 if (!getmaxds)
1565 return -ENOMEM;
1566
1567 dest.payload.optional_bytes = 3;
1568
1569 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETMXDS, &dest, 1);
1570 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1571 if (ret) {
1572 /*
1573 * optional_bytes = 3 accepts a 2-byte response on the first
1574 * attempt, so this fallback runs only when the 5-byte request
1575 * fails rather than returning a short read.
1576 */
1577 dest.payload.len -= 3;
1578 dest.payload.optional_bytes = 0;
1579 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETMXDS, &dest, 1);
1580 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1581 if (ret)
1582 goto out;
1583 }
1584
1585 if (dest.payload.actual_len != 2 && dest.payload.actual_len != 5) {
1586 ret = -EIO;
1587 goto out;
1588 }
1589
1590 info->max_read_ds = getmaxds->maxrd;
1591 info->max_write_ds = getmaxds->maxwr;
1592 if (dest.payload.actual_len == 5)
1593 info->max_read_turnaround = getmaxds->maxrdturn[0] |
1594 ((u32)getmaxds->maxrdturn[1] << 8) |
1595 ((u32)getmaxds->maxrdturn[2] << 16);
1596
1597out:
1598 i3c_ccc_cmd_dest_cleanup(&dest);
1599
1600 return ret;
1601}
1602
1603static int i3c_master_gethdrcap_locked(struct i3c_master_controller *master,
1604 struct i3c_device_info *info)
1605{
1606 struct i3c_ccc_gethdrcap *gethdrcap;
1607 struct i3c_ccc_cmd_dest dest;
1608 struct i3c_ccc_cmd cmd;
1609 int ret;
1610
1611 gethdrcap = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr,
1612 sizeof(*gethdrcap));
1613 if (!gethdrcap)
1614 return -ENOMEM;
1615
1616 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETHDRCAP, &dest, 1);
1617 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1618 if (ret)
1619 goto out;
1620
1621 if (dest.payload.actual_len != 1) {
1622 ret = -EIO;
1623 goto out;
1624 }
1625
1626 info->hdr_cap = gethdrcap->modes;
1627
1628out:
1629 i3c_ccc_cmd_dest_cleanup(&dest);
1630
1631 return ret;
1632}
1633
1634static int i3c_master_getpid_locked(struct i3c_master_controller *master,
1635 struct i3c_device_info *info)
1636{
1637 struct i3c_ccc_getpid *getpid;
1638 struct i3c_ccc_cmd_dest dest;
1639 struct i3c_ccc_cmd cmd;
1640 int ret, i;
1641
1642 getpid = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr, sizeof(*getpid));
1643 if (!getpid)
1644 return -ENOMEM;
1645
1646 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETPID, &dest, 1);
1647 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1648 if (ret)
1649 goto out;
1650
1651 info->pid = 0;
1652 for (i = 0; i < sizeof(getpid->pid); i++) {
1653 int sft = (sizeof(getpid->pid) - i - 1) * 8;
1654
1655 info->pid |= (u64)getpid->pid[i] << sft;
1656 }
1657
1658out:
1659 i3c_ccc_cmd_dest_cleanup(&dest);
1660
1661 return ret;
1662}
1663
1664static int i3c_master_getbcr_locked(struct i3c_master_controller *master,
1665 struct i3c_device_info *info)
1666{
1667 struct i3c_ccc_getbcr *getbcr;
1668 struct i3c_ccc_cmd_dest dest;
1669 struct i3c_ccc_cmd cmd;
1670 int ret;
1671
1672 getbcr = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr, sizeof(*getbcr));
1673 if (!getbcr)
1674 return -ENOMEM;
1675
1676 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETBCR, &dest, 1);
1677 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1678 if (ret)
1679 goto out;
1680
1681 info->bcr = getbcr->bcr;
1682
1683out:
1684 i3c_ccc_cmd_dest_cleanup(&dest);
1685
1686 return ret;
1687}
1688
1689static int i3c_master_getdcr_locked(struct i3c_master_controller *master,
1690 struct i3c_device_info *info)
1691{
1692 struct i3c_ccc_getdcr *getdcr;
1693 struct i3c_ccc_cmd_dest dest;
1694 struct i3c_ccc_cmd cmd;
1695 int ret;
1696
1697 getdcr = i3c_ccc_cmd_dest_init(&dest, info->dyn_addr, sizeof(*getdcr));
1698 if (!getdcr)
1699 return -ENOMEM;
1700
1701 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETDCR, &dest, 1);
1702 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1703 if (ret)
1704 goto out;
1705
1706 info->dcr = getdcr->dcr;
1707
1708out:
1709 i3c_ccc_cmd_dest_cleanup(&dest);
1710
1711 return ret;
1712}
1713
1714static int i3c_master_retrieve_dev_info(struct i3c_dev_desc *dev)
1715{
1716 struct i3c_master_controller *master = i3c_dev_get_master(dev);
1717 enum i3c_addr_slot_status slot_status;
1718 int ret;
1719
1720 if (!dev->info.dyn_addr)
1721 return -EINVAL;
1722
1723 slot_status = i3c_bus_get_addr_slot_status(&master->bus,
1724 dev->info.dyn_addr);
1725 if (slot_status == I3C_ADDR_SLOT_RSVD ||
1726 slot_status == I3C_ADDR_SLOT_I2C_DEV)
1727 return -EINVAL;
1728
1729 ret = i3c_master_getpid_locked(master, &dev->info);
1730 if (ret)
1731 return ret;
1732
1733 ret = i3c_master_getbcr_locked(master, &dev->info);
1734 if (ret)
1735 return ret;
1736
1737 ret = i3c_master_getdcr_locked(master, &dev->info);
1738 if (ret)
1739 return ret;
1740
1741 if (dev->info.bcr & I3C_BCR_MAX_DATA_SPEED_LIM) {
1742 ret = i3c_master_getmxds_locked(master, &dev->info);
1743 if (ret)
1744 return ret;
1745 }
1746
1747 if (dev->info.bcr & I3C_BCR_IBI_PAYLOAD)
1748 dev->info.max_ibi_len = 1;
1749
1750 i3c_master_getmrl_locked(master, &dev->info);
1751 i3c_master_getmwl_locked(master, &dev->info);
1752
1753 if (dev->info.bcr & I3C_BCR_HDR_CAP) {
1754 ret = i3c_master_gethdrcap_locked(master, &dev->info);
1755 if (ret && ret != -EOPNOTSUPP)
1756 return ret;
1757 }
1758
1759 return 0;
1760}
1761
1762static int i3c_master_getstatus_locked(struct i3c_master_controller *master,
1763 u8 addr, u16 *status)
1764{
1765 struct i3c_ccc_getstatus *getstatus;
1766 struct i3c_ccc_cmd_dest dest;
1767 struct i3c_ccc_cmd cmd;
1768 int ret;
1769
1770 getstatus = i3c_ccc_cmd_dest_init(&dest, addr, sizeof(*getstatus));
1771 if (!getstatus)
1772 return -ENOMEM;
1773
1774 i3c_ccc_cmd_init(&cmd, true, I3C_CCC_GETSTATUS, &dest, 1);
1775 ret = i3c_master_send_ccc_cmd_locked(master, &cmd);
1776 if (ret)
1777 goto out;
1778
1779 if (dest.payload.len != sizeof(*getstatus)) {
1780 ret = -EIO;
1781 goto out;
1782 }
1783
1784 if (status)
1785 *status = be16_to_cpu(getstatus->status);
1786out:
1787 i3c_ccc_cmd_dest_cleanup(&dest);
1788
1789 return ret;
1790}
1791
1792/* Values are chosen to give the device plenty of opportunities to respond */
1793#define I3C_DEV_PROBE_INITIAL_DELAY_US 20
1794#define I3C_DEV_PROBE_DELAY_FACTOR 2
1795#define I3C_DEV_PROBE_CNT 5
1796
1797static bool i3c_master_i3c_dev_present(struct i3c_master_controller *master, unsigned int addr)
1798{
1799 int delay = I3C_DEV_PROBE_INITIAL_DELAY_US;
1800
1801 for (int i = 0; i < I3C_DEV_PROBE_CNT; i++) {
1802 if (i) {
1803 fsleep(delay);
1804 delay *= I3C_DEV_PROBE_DELAY_FACTOR;
1805 }
1806 if (!i3c_master_getstatus_locked(master, addr, NULL))
1807 return true;
1808 }
1809
1810 return false;
1811}
1812
1813static void i3c_master_put_i3c_addrs(struct i3c_dev_desc *dev)
1814{
1815 struct i3c_master_controller *master = i3c_dev_get_master(dev);
1816
1817 if (dev->info.static_addr)
1818 i3c_bus_set_addr_slot_status(&master->bus,
1819 dev->info.static_addr,
1820 I3C_ADDR_SLOT_FREE);
1821
1822 if (dev->info.dyn_addr)
1823 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr,
1824 I3C_ADDR_SLOT_FREE);
1825
1826 if (dev->boardinfo && dev->boardinfo->init_dyn_addr)
1827 i3c_bus_set_addr_slot_status(&master->bus, dev->boardinfo->init_dyn_addr,
1828 I3C_ADDR_SLOT_FREE);
1829}
1830
1831static int i3c_master_get_i3c_addrs(struct i3c_dev_desc *dev)
1832{
1833 struct i3c_master_controller *master = i3c_dev_get_master(dev);
1834 enum i3c_addr_slot_status status;
1835
1836 if (!dev->info.static_addr && !dev->info.dyn_addr)
1837 return 0;
1838
1839 if (dev->info.static_addr) {
1840 status = i3c_bus_get_addr_slot_status(&master->bus,
1841 dev->info.static_addr);
1842 /* Since static address and assigned dynamic address can be
1843 * equal, allow this case to pass.
1844 */
1845 if (status != I3C_ADDR_SLOT_FREE &&
1846 dev->info.static_addr != dev->boardinfo->init_dyn_addr)
1847 return -EBUSY;
1848
1849 i3c_bus_set_addr_slot_status(&master->bus,
1850 dev->info.static_addr,
1851 I3C_ADDR_SLOT_I3C_DEV);
1852 }
1853
1854 /*
1855 * ->init_dyn_addr should have been reserved before that, so, if we're
1856 * trying to apply a pre-reserved dynamic address, we should not try
1857 * to reserve the address slot a second time.
1858 */
1859 if (dev->info.dyn_addr &&
1860 (!dev->boardinfo ||
1861 dev->boardinfo->init_dyn_addr != dev->info.dyn_addr)) {
1862 status = i3c_bus_get_addr_slot_status(&master->bus,
1863 dev->info.dyn_addr);
1864 if (status != I3C_ADDR_SLOT_FREE)
1865 goto err_release_static_addr;
1866
1867 i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr,
1868 I3C_ADDR_SLOT_I3C_DEV);
1869 }
1870
1871 return 0;
1872
1873err_release_static_addr:
1874 if (dev->info.static_addr)
1875 i3c_bus_set_addr_slot_status(&master->bus,
1876 dev->info.static_addr,
1877 I3C_ADDR_SLOT_FREE);
1878
1879 return -EBUSY;
1880}
1881
1882static int i3c_master_attach_i3c_dev(struct i3c_master_controller *master,
1883 struct i3c_dev_desc *dev)
1884{
1885 int ret;
1886
1887 /*
1888 * We don't attach devices to the controller until they are
1889 * addressable on the bus.
1890 */
1891 if (!dev->info.static_addr && !dev->info.dyn_addr)
1892 return 0;
1893
1894 ret = i3c_master_get_i3c_addrs(dev);
1895 if (ret)
1896 return ret;
1897
1898 /* Do not attach the master device itself. */
1899 if (master->this != dev && master->ops->attach_i3c_dev) {
1900 ret = master->ops->attach_i3c_dev(dev);
1901 if (ret) {
1902 i3c_master_put_i3c_addrs(dev);
1903 return ret;
1904 }
1905 }
1906
1907 list_add_tail(&dev->common.node, &master->bus.devs.i3c);
1908
1909 return 0;
1910}
1911
1912/**
1913 * i3c_master_reattach_i3c_dev_locked() - reattach an I3C device with a new address
1914 * @dev: I3C device descriptor to reattach
1915 * @old_dyn_addr: previous dynamic address of the device
1916 *
1917 * This function reattaches an existing I3C device to the bus when its dynamic
1918 * address has changed. It updates the bus address slot status accordingly:
1919 * - Marks the new dynamic address as occupied by an I3C device.
1920 * - Frees the old dynamic address slot if applicable.
1921 *
1922 * This function must be called with the bus lock held in write mode.
1923 *
1924 * Return: 0 on success, or a negative error code if reattachment fails
1925 * (e.g. -EBUSY if the new address slot is not free).
1926 */
1927int i3c_master_reattach_i3c_dev_locked(struct i3c_dev_desc *dev,
1928 u8 old_dyn_addr)
1929{
1930 struct i3c_master_controller *master = i3c_dev_get_master(dev);
1931 int ret;
1932
1933 if (dev->info.dyn_addr != old_dyn_addr) {
1934 i3c_bus_set_addr_slot_status(&master->bus,
1935 dev->info.dyn_addr,
1936 I3C_ADDR_SLOT_I3C_DEV);
1937 if (old_dyn_addr)
1938 i3c_bus_set_addr_slot_status(&master->bus, old_dyn_addr,
1939 I3C_ADDR_SLOT_FREE);
1940 }
1941
1942 if (master->ops->reattach_i3c_dev) {
1943 ret = master->ops->reattach_i3c_dev(dev, old_dyn_addr);
1944 if (ret) {
1945 i3c_master_put_i3c_addrs(dev);
1946 return ret;
1947 }
1948 }
1949
1950 return 0;
1951}
1952EXPORT_SYMBOL_GPL(i3c_master_reattach_i3c_dev_locked);
1953
1954static void i3c_master_detach_i3c_dev(struct i3c_dev_desc *dev)
1955{
1956 struct i3c_master_controller *master = i3c_dev_get_master(dev);
1957
1958 /* Do not detach the master device itself. */
1959 if (master->this != dev && master->ops->detach_i3c_dev)
1960 master->ops->detach_i3c_dev(dev);
1961
1962 i3c_master_put_i3c_addrs(dev);
1963 list_del(&dev->common.node);
1964}
1965
1966static int i3c_master_attach_i2c_dev(struct i3c_master_controller *master,
1967 struct i2c_dev_desc *dev)
1968{
1969 int ret;
1970
1971 if (master->ops->attach_i2c_dev) {
1972 ret = master->ops->attach_i2c_dev(dev);
1973 if (ret)
1974 return ret;
1975 }
1976
1977 list_add_tail(&dev->common.node, &master->bus.devs.i2c);
1978
1979 return 0;
1980}
1981
1982static void i3c_master_detach_i2c_dev(struct i2c_dev_desc *dev)
1983{
1984 struct i3c_master_controller *master = i2c_dev_get_master(dev);
1985
1986 list_del(&dev->common.node);
1987
1988 if (master->ops->detach_i2c_dev)
1989 master->ops->detach_i2c_dev(dev);
1990}
1991
1992static int i3c_master_early_i3c_dev_add(struct i3c_master_controller *master,
1993 struct i3c_dev_boardinfo *boardinfo)
1994{
1995 struct i3c_device_info info = {
1996 .static_addr = boardinfo->static_addr,
1997 .pid = boardinfo->pid,
1998 };
1999 struct i3c_dev_desc *i3cdev;
2000 int ret;
2001
2002 i3cdev = i3c_master_alloc_i3c_dev(master, &info);
2003 if (IS_ERR(i3cdev)) {
2004 ret = -ENOMEM;
2005 goto err_reserve_addr;
2006 }
2007
2008 i3cdev->boardinfo = boardinfo;
2009
2010 ret = i3c_master_attach_i3c_dev(master, i3cdev);
2011 if (ret)
2012 goto err_free_dev;
2013
2014 /*
2015 * For devices using SETAASA instead of ENTDAA, the address is statically
2016 * assigned. Update the dynamic address to the provided static address.
2017 * Reattach the I3C device after updating the dynamic address with the same
2018 * static address. It is not mandatory for such devices to implement CCC
2019 * commands like GETPID, GETDCR etc. Hence, we can return after reattaching.
2020 */
2021 if (i3cdev->boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA) {
2022 i3cdev->info.dyn_addr = i3cdev->boardinfo->static_addr;
2023 ret = i3c_master_reattach_i3c_dev_locked(i3cdev, 0);
2024 if (ret)
2025 goto err_detach_dev;
2026
2027 return 0;
2028 }
2029
2030 ret = i3c_master_setdasa_locked(master, i3cdev->info.static_addr,
2031 i3cdev->boardinfo->init_dyn_addr);
2032 if (ret)
2033 goto err_detach_dev;
2034
2035 i3cdev->info.dyn_addr = i3cdev->boardinfo->init_dyn_addr;
2036 ret = i3c_master_reattach_i3c_dev_locked(i3cdev, 0);
2037 if (ret)
2038 goto err_rstdaa;
2039
2040 ret = i3c_master_retrieve_dev_info(i3cdev);
2041 if (ret)
2042 goto err_rstdaa;
2043
2044 return 0;
2045
2046err_rstdaa:
2047 i3c_master_rstdaa_locked(master, i3cdev->boardinfo->init_dyn_addr);
2048err_detach_dev:
2049 i3c_master_detach_i3c_dev(i3cdev);
2050err_free_dev:
2051 i3c_master_free_i3c_dev(i3cdev);
2052err_reserve_addr:
2053 /*
2054 * A target using SETAASA may still get the static address on the
2055 * SETAASA broadcast even if attach fails here. Keep the address
2056 * reserved so that it is not assigned to another device during DAA.
2057 */
2058 if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA)
2059 i3c_bus_set_addr_slot_status(&master->bus,
2060 boardinfo->static_addr,
2061 I3C_ADDR_SLOT_RSVD);
2062
2063 return ret;
2064}
2065
2066static void
2067i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
2068{
2069 struct i3c_device *i3cdev, *tmp;
2070 struct i3c_dev_desc *desc;
2071 LIST_HEAD(i3c_unreg_devs);
2072 int ret;
2073
2074 if (!master->init_done)
2075 return;
2076
2077 i3c_bus_maintenance_lock(&master->bus);
2078
2079 if (master->shutting_down) {
2080 i3c_bus_maintenance_unlock(&master->bus);
2081 return;
2082 }
2083
2084 i3c_bus_for_each_i3cdev(&master->bus, desc) {
2085 if (desc->dev || !desc->info.dyn_addr || desc == master->this)
2086 continue;
2087
2088 desc->dev = kzalloc_obj(*desc->dev);
2089 if (!desc->dev)
2090 continue;
2091
2092 desc->dev->bus = &master->bus;
2093 desc->dev->desc = desc;
2094 desc->dev->dev.parent = &master->dev;
2095 desc->dev->dev.type = &i3c_device_type;
2096 desc->dev->dev.bus = &i3c_bus_type;
2097 desc->dev->dev.release = i3c_device_release;
2098
2099 /*
2100 * For devices without PID (e.g., SETAASA devices), use
2101 * static address for naming instead.
2102 */
2103 if (desc->info.pid)
2104 dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id,
2105 desc->info.pid);
2106 else
2107 dev_set_name(&desc->dev->dev, "%d-%02x", master->bus.id,
2108 desc->info.static_addr);
2109
2110 if (desc->boardinfo)
2111 device_set_node(&desc->dev->dev, desc->boardinfo->fwnode);
2112
2113 /* If the device has IBI capability, set as wakeup capable */
2114 if (master->ibi_wakeup && (desc->info.bcr & I3C_BCR_IBI_REQ_CAP))
2115 device_set_wakeup_capable(&desc->dev->dev, true);
2116
2117 list_add_tail(&desc->dev->node, &i3c_unreg_devs);
2118 }
2119
2120 i3c_bus_maintenance_unlock(&master->bus);
2121
2122 list_for_each_entry_safe(i3cdev, tmp, &i3c_unreg_devs, node) {
2123 ret = device_register(&i3cdev->dev);
2124 if (ret)
2125 dev_err(&master->dev, "Failed to add I3C device (err = %d)\n", ret);
2126 else
2127 list_del_init(&i3cdev->node);
2128 }
2129
2130 i3c_bus_maintenance_lock(&master->bus);
2131
2132 list_for_each_entry_safe(i3cdev, tmp, &i3c_unreg_devs, node) {
2133 list_del(&i3cdev->node);
2134 desc = i3cdev->desc;
2135 i3cdev->desc = NULL;
2136 put_device(&i3cdev->dev);
2137 desc->dev = NULL;
2138 }
2139
2140 i3c_bus_maintenance_unlock(&master->bus);
2141}
2142
2143static void i3c_master_reg_work_fn(struct work_struct *work)
2144{
2145 struct i3c_master_controller *master = container_of(work, typeof(*master), reg_work);
2146
2147 i3c_master_register_new_i3c_devs(master);
2148}
2149
2150/**
2151 * i3c_master_has_wakeup_enabled_devs() - check if any device can wake the system
2152 * @master: I3C master controller
2153 *
2154 * Iterate over devices on the bus and return true if any device has
2155 * system wakeup enabled and IBI enabled.
2156 *
2157 * Whether a device is enabled for system wakeup is user space policy,
2158 * settable at any time through the device's power/wakeup sysfs attribute,
2159 * so the answer is only stable once user space is frozen. Call this from
2160 * a system suspend callback.
2161 *
2162 * Return: true if any device may wake the system via IBI, false otherwise.
2163 */
2164bool i3c_master_has_wakeup_enabled_devs(struct i3c_master_controller *master)
2165{
2166 struct i3c_dev_desc *desc;
2167 bool wakeup = false;
2168
2169 i3c_bus_normaluse_lock(&master->bus);
2170 i3c_bus_for_each_i3cdev(&master->bus, desc) {
2171 if (!desc->dev || desc == master->this || !device_may_wakeup(&desc->dev->dev))
2172 continue;
2173 guard(mutex)(&desc->ibi_lock);
2174 if (desc->ibi && desc->ibi->enabled) {
2175 wakeup = true;
2176 break;
2177 }
2178 }
2179 i3c_bus_normaluse_unlock(&master->bus);
2180
2181 return wakeup;
2182}
2183EXPORT_SYMBOL_GPL(i3c_master_has_wakeup_enabled_devs);
2184
2185/**
2186 * i3c_master_dma_map_single() - Map buffer for single DMA transfer
2187 * @dev: device object of a device doing DMA
2188 * @buf: destination/source buffer for DMA
2189 * @len: length of transfer
2190 * @force_bounce: true, force to use a bounce buffer,
2191 * false, function will auto check is a bounce buffer required
2192 * @dir: DMA direction
2193 *
2194 * Map buffer for a DMA transfer and allocate a bounce buffer if required.
2195 *
2196 * Return: I3C DMA transfer descriptor or NULL in case of error.
2197 */
2198struct i3c_dma *i3c_master_dma_map_single(struct device *dev, void *buf,
2199 size_t len, bool force_bounce, enum dma_data_direction dir)
2200{
2201 void *bounce __free(kfree) = NULL;
2202 void *dma_buf = buf;
2203
2204 struct i3c_dma *dma_xfer __free(kfree) = kzalloc_obj(*dma_xfer);
2205 if (!dma_xfer)
2206 return NULL;
2207
2208 dma_xfer->dev = dev;
2209 dma_xfer->buf = buf;
2210 dma_xfer->dir = dir;
2211 dma_xfer->len = len;
2212 dma_xfer->map_len = len;
2213
2214 if (is_vmalloc_addr(buf))
2215 force_bounce = true;
2216
2217 if (force_bounce) {
2218 dma_xfer->map_len = ALIGN(len, cache_line_size());
2219 if (dir == DMA_FROM_DEVICE)
2220 bounce = kzalloc(dma_xfer->map_len, GFP_KERNEL);
2221 else
2222 bounce = kmemdup(buf, dma_xfer->map_len, GFP_KERNEL);
2223 if (!bounce)
2224 return NULL;
2225 dma_buf = bounce;
2226 }
2227
2228 dma_xfer->addr = dma_map_single(dev, dma_buf, dma_xfer->map_len, dir);
2229 if (dma_mapping_error(dev, dma_xfer->addr))
2230 return NULL;
2231
2232 dma_xfer->bounce_buf = no_free_ptr(bounce);
2233 return no_free_ptr(dma_xfer);
2234}
2235EXPORT_SYMBOL_GPL(i3c_master_dma_map_single);
2236
2237/**
2238 * i3c_master_dma_unmap_single() - Unmap buffer after DMA
2239 * @dma_xfer: DMA transfer and mapping descriptor
2240 *
2241 * Unmap buffer and cleanup DMA transfer descriptor.
2242 */
2243void i3c_master_dma_unmap_single(struct i3c_dma *dma_xfer)
2244{
2245 dma_unmap_single(dma_xfer->dev, dma_xfer->addr,
2246 dma_xfer->map_len, dma_xfer->dir);
2247 if (dma_xfer->bounce_buf) {
2248 if (dma_xfer->dir == DMA_FROM_DEVICE)
2249 memcpy(dma_xfer->buf, dma_xfer->bounce_buf,
2250 dma_xfer->len);
2251 kfree(dma_xfer->bounce_buf);
2252 }
2253 kfree(dma_xfer);
2254}
2255EXPORT_SYMBOL_GPL(i3c_master_dma_unmap_single);
2256
2257/**
2258 * i3c_master_set_info() - set master device information
2259 * @master: master used to send frames on the bus
2260 * @info: I3C device information
2261 *
2262 * Set master device info. This should be called from
2263 * &i3c_master_controller_ops->bus_init().
2264 *
2265 * Not all &i3c_device_info fields are meaningful for a master device.
2266 * Here is a list of fields that should be properly filled:
2267 *
2268 * - &i3c_device_info->dyn_addr
2269 * - &i3c_device_info->bcr
2270 * - &i3c_device_info->dcr
2271 * - &i3c_device_info->pid
2272 * - &i3c_device_info->hdr_cap if %I3C_BCR_HDR_CAP bit is set in
2273 * &i3c_device_info->bcr
2274 *
2275 * This function must be called with the bus lock held in maintenance mode.
2276 *
2277 * Return: 0 if @info contains valid information (not every piece of
2278 * information can be checked, but we can at least make sure @info->dyn_addr
2279 * and @info->bcr are correct), -EINVAL otherwise.
2280 */
2281int i3c_master_set_info(struct i3c_master_controller *master,
2282 const struct i3c_device_info *info)
2283{
2284 struct i3c_dev_desc *i3cdev;
2285 int ret;
2286
2287 if (!i3c_bus_dev_addr_is_avail(&master->bus, info->dyn_addr))
2288 return -EINVAL;
2289
2290 if (I3C_BCR_DEVICE_ROLE(info->bcr) == I3C_BCR_I3C_MASTER &&
2291 master->secondary)
2292 return -EINVAL;
2293
2294 if (master->this)
2295 return -EINVAL;
2296
2297 i3cdev = i3c_master_alloc_i3c_dev(master, info);
2298 if (IS_ERR(i3cdev))
2299 return PTR_ERR(i3cdev);
2300
2301 master->this = i3cdev;
2302 master->bus.cur_master = master->this;
2303
2304 ret = i3c_master_attach_i3c_dev(master, i3cdev);
2305 if (ret)
2306 goto err_free_dev;
2307
2308 return 0;
2309
2310err_free_dev:
2311 master->bus.cur_master = NULL;
2312 master->this = NULL;
2313 i3c_master_free_i3c_dev(i3cdev);
2314
2315 return ret;
2316}
2317EXPORT_SYMBOL_GPL(i3c_master_set_info);
2318
2319static void i3c_master_detach_free_devs(struct i3c_master_controller *master)
2320{
2321 struct i3c_dev_desc *i3cdev, *i3ctmp;
2322 struct i2c_dev_desc *i2cdev, *i2ctmp;
2323
2324 list_for_each_entry_safe(i3cdev, i3ctmp, &master->bus.devs.i3c,
2325 common.node) {
2326 i3c_master_detach_i3c_dev(i3cdev);
2327
2328 if (i3cdev->boardinfo && i3cdev->boardinfo->init_dyn_addr)
2329 i3c_bus_set_addr_slot_status(&master->bus,
2330 i3cdev->boardinfo->init_dyn_addr,
2331 I3C_ADDR_SLOT_FREE);
2332
2333 if (i3cdev != master->this)
2334 i3c_master_free_i3c_dev(i3cdev);
2335 }
2336
2337 list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
2338 common.node) {
2339 i3c_master_detach_i2c_dev(i2cdev);
2340 i3c_bus_set_addr_slot_status(&master->bus,
2341 i2cdev->addr,
2342 I3C_ADDR_SLOT_FREE);
2343 i3c_master_free_i2c_dev(i2cdev);
2344 }
2345}
2346
2347/**
2348 * i3c_master_bus_init() - initialize an I3C bus
2349 * @master: main master initializing the bus
2350 *
2351 * This function is following all initialisation steps described in the I3C
2352 * specification:
2353 *
2354 * 1. Attach I2C devs to the master so that the master can fill its internal
2355 * device table appropriately
2356 *
2357 * 2. Call &i3c_master_controller_ops->bus_init() method to initialize
2358 * the master controller. That's usually where the bus mode is selected
2359 * (pure bus or mixed fast/slow bus)
2360 *
2361 * 3. Instruct all devices on the bus to drop their dynamic address. This is
2362 * particularly important when the bus was previously configured by someone
2363 * else (for example the bootloader)
2364 *
2365 * 4. Disable all slave events.
2366 *
2367 * 5. Reserve address slots for I3C devices with init_dyn_addr. And if devices
2368 * also have static_addr, try to pre-assign dynamic addresses requested by
2369 * the FW with SETDASA and attach corresponding statically defined I3C
2370 * devices to the master.
2371 *
2372 * 6. Do a DAA (Dynamic Address Assignment) to assign dynamic addresses to all
2373 * remaining I3C devices
2374 *
2375 * Once this is done, all I3C and I2C devices should be usable.
2376 *
2377 * Return: a 0 in case of success, an negative error code otherwise.
2378 */
2379static int i3c_master_bus_init(struct i3c_master_controller *master)
2380{
2381 enum i3c_addr_slot_status status;
2382 struct i2c_dev_boardinfo *i2cboardinfo;
2383 struct i3c_dev_boardinfo *i3cboardinfo;
2384 struct i2c_dev_desc *i2cdev;
2385 int ret;
2386
2387 /*
2388 * First attach all devices with static definitions provided by the
2389 * FW.
2390 */
2391 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) {
2392 status = i3c_bus_get_addr_slot_status(&master->bus,
2393 i2cboardinfo->base.addr);
2394 if (status != I3C_ADDR_SLOT_FREE) {
2395 ret = -EBUSY;
2396 goto err_detach_devs;
2397 }
2398
2399 i3c_bus_set_addr_slot_status(&master->bus,
2400 i2cboardinfo->base.addr,
2401 I3C_ADDR_SLOT_I2C_DEV);
2402
2403 i2cdev = i3c_master_alloc_i2c_dev(master,
2404 i2cboardinfo->base.addr,
2405 i2cboardinfo->lvr);
2406 if (IS_ERR(i2cdev)) {
2407 ret = PTR_ERR(i2cdev);
2408 goto err_detach_devs;
2409 }
2410
2411 ret = i3c_master_attach_i2c_dev(master, i2cdev);
2412 if (ret) {
2413 i3c_master_free_i2c_dev(i2cdev);
2414 goto err_detach_devs;
2415 }
2416 }
2417
2418 /*
2419 * Now execute the controller specific ->bus_init() routine, which
2420 * might configure its internal logic to match the bus limitations.
2421 */
2422 ret = master->ops->bus_init(master);
2423 if (ret)
2424 goto err_detach_devs;
2425
2426 /*
2427 * The master device should have been instantiated in ->bus_init(),
2428 * complain if this was not the case.
2429 */
2430 if (!master->this) {
2431 dev_err(&master->dev,
2432 "master_set_info() was not called in ->bus_init()\n");
2433 ret = -EINVAL;
2434 goto err_bus_cleanup;
2435 }
2436
2437 if (master->ops->set_speed) {
2438 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED);
2439 if (ret)
2440 goto err_bus_cleanup;
2441 }
2442
2443 /*
2444 * Reset all dynamic address that may have been assigned before
2445 * (assigned by the bootloader for example).
2446 */
2447 ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
2448 if (ret)
2449 goto err_bus_cleanup;
2450
2451 if (master->ops->set_speed) {
2452 ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED);
2453 if (ret)
2454 goto err_bus_cleanup;
2455 }
2456
2457 /*
2458 * Disable all slave events before starting DAA. When no active device
2459 * is on the bus, returns Mx error code M2, this error is ignored.
2460 */
2461 ret = i3c_master_enec_disec_locked(master, I3C_BROADCAST_ADDR, false,
2462 I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
2463 I3C_CCC_EVENT_HJ, true);
2464 if (ret)
2465 goto err_bus_cleanup;
2466
2467 /*
2468 * Reserve init_dyn_addr first, and then try to pre-assign dynamic
2469 * address and retrieve device information if needed.
2470 * In case pre-assign dynamic address fails, setting dynamic address to
2471 * the requested init_dyn_addr is retried after DAA is done in
2472 * i3c_master_add_i3c_dev_locked().
2473 */
2474 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
2475
2476 /*
2477 * We don't reserve a dynamic address for devices that
2478 * don't explicitly request one.
2479 */
2480 if (!i3cboardinfo->init_dyn_addr)
2481 continue;
2482
2483 ret = i3c_bus_get_addr_slot_status(&master->bus,
2484 i3cboardinfo->init_dyn_addr);
2485 if (ret != I3C_ADDR_SLOT_FREE) {
2486 ret = -EBUSY;
2487 goto err_rstdaa;
2488 }
2489
2490 /* Do not mark as occupied until real device exist in bus */
2491 i3c_bus_set_addr_slot_status_mask(&master->bus,
2492 i3cboardinfo->init_dyn_addr,
2493 I3C_ADDR_SLOT_EXT_DESIRED,
2494 I3C_ADDR_SLOT_EXT_STATUS_MASK);
2495
2496 /*
2497 * Only try to create/attach devices that have a static
2498 * address. Other devices will be created/attached when
2499 * DAA happens, and the requested dynamic address will
2500 * be set using SETNEWDA once those devices become
2501 * addressable.
2502 */
2503
2504 if (i3cboardinfo->static_addr)
2505 i3c_master_early_i3c_dev_add(master, i3cboardinfo);
2506 }
2507
2508 /*
2509 * SETAASA is a broadcast CCC. Issue it after SETDASA so that devices
2510 * configured for SETDASA (or supporting both methods) are assigned
2511 * first, matching MIPI DISCO guidance to prefer SETDASA when both are
2512 * available. Targets that already have a dynamic address ignore the
2513 * later SETAASA broadcast.
2514 */
2515 if (master->addr_method & I3C_ADDR_METHOD_SETAASA) {
2516 ret = i3c_master_setaasa_locked(master);
2517 if (ret)
2518 goto err_rstdaa;
2519 }
2520
2521 ret = i3c_master_do_daa(master);
2522 if (ret)
2523 goto err_rstdaa;
2524
2525 return 0;
2526
2527err_rstdaa:
2528 i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
2529
2530err_bus_cleanup:
2531 if (master->ops->bus_cleanup)
2532 master->ops->bus_cleanup(master);
2533
2534err_detach_devs:
2535 i3c_master_detach_free_devs(master);
2536
2537 return ret;
2538}
2539
2540static void i3c_master_bus_cleanup(struct i3c_master_controller *master)
2541{
2542 if (master->ops->bus_cleanup) {
2543 int ret = i3c_master_rpm_get(master);
2544
2545 if (ret) {
2546 dev_err(&master->dev,
2547 "runtime resume error: master bus_cleanup() not done\n");
2548 } else {
2549 master->ops->bus_cleanup(master);
2550 i3c_master_rpm_put(master);
2551 }
2552 }
2553
2554 i3c_master_detach_free_devs(master);
2555}
2556
2557static void i3c_master_attach_boardinfo(struct i3c_dev_desc *i3cdev)
2558{
2559 struct i3c_master_controller *master = i3cdev->common.master;
2560 struct i3c_dev_boardinfo *i3cboardinfo;
2561
2562 list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
2563 /*
2564 * For devices without PID (e.g., SETAASA devices), match by
2565 * static address. For devices with PID, match by PID.
2566 */
2567 if (i3cboardinfo->pid) {
2568 if (i3cdev->info.pid != i3cboardinfo->pid)
2569 continue;
2570 } else {
2571 if (!i3cboardinfo->static_addr ||
2572 i3cdev->info.static_addr != i3cboardinfo->static_addr)
2573 continue;
2574 }
2575
2576 i3cdev->boardinfo = i3cboardinfo;
2577 i3cdev->info.static_addr = i3cboardinfo->static_addr;
2578 return;
2579 }
2580}
2581
2582static struct i3c_dev_desc *
2583i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)
2584{
2585 struct i3c_master_controller *master = i3c_dev_get_master(refdev);
2586 struct i3c_dev_desc *i3cdev;
2587
2588 if (!refdev->info.pid)
2589 return NULL;
2590
2591 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
2592 if (i3cdev != refdev && i3cdev->info.pid &&
2593 i3cdev->info.pid == refdev->info.pid &&
2594 i3cdev != master->this)
2595 return i3cdev;
2596 }
2597
2598 return NULL;
2599}
2600
2601/**
2602 * __i3c_master_add_i3c_dev_locked() - add an I3C slave to the bus
2603 * @master: master used to send frames on the bus
2604 * @addr: I3C slave dynamic address assigned to the device
2605 * @probe: probe to see if the device is really present at @addr
2606 *
2607 * This function instantiates an I3C device object and adds it to the I3C device
2608 * list. All device information is retrieved using standard CCC commands.
2609 *
2610 * This function must be called with the bus lock held in write mode.
2611 */
2612static void __i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master,
2613 u8 addr, bool probe)
2614{
2615 struct i3c_device_info info = { .dyn_addr = addr };
2616 struct i3c_dev_desc *newdev, *olddev;
2617 u8 old_dyn_addr = addr, expected_dyn_addr;
2618 struct i3c_ibi_setup ibireq = { };
2619 bool enable_ibi = false;
2620 bool no_dev = false;
2621 int ret;
2622
2623 newdev = i3c_master_alloc_i3c_dev(master, &info);
2624 if (IS_ERR(newdev)) {
2625 ret = PTR_ERR(newdev);
2626 goto err_prevent_addr_reuse;
2627 }
2628
2629 ret = i3c_master_attach_i3c_dev(master, newdev);
2630 if (ret)
2631 goto err_free_dev;
2632
2633 /*
2634 * When a dynamic address is first assigned, there is no need to check
2635 * whether it is still assigned, however, if adding the device fails,
2636 * it will be attempted again later, at which point the address may
2637 * have been lost (e.g. due to power management), so for that case,
2638 * probe to see if the device is still present at the assigned address.
2639 */
2640 if (probe && !i3c_master_i3c_dev_present(master, addr)) {
2641 no_dev = true;
2642 goto err_detach_dev;
2643 }
2644
2645 ret = i3c_master_retrieve_dev_info(newdev);
2646 if (ret)
2647 goto err_detach_dev;
2648
2649 i3c_master_attach_boardinfo(newdev);
2650
2651 olddev = i3c_master_search_i3c_dev_duplicate(newdev);
2652 if (olddev) {
2653 newdev->dev = olddev->dev;
2654 if (newdev->dev)
2655 newdev->dev->desc = newdev;
2656
2657 /*
2658 * We need to restore the IBI state too, so let's save the
2659 * IBI information and try to restore them after olddev has
2660 * been detached+released and its IBI has been stopped and
2661 * the associated resources have been freed.
2662 */
2663 mutex_lock(&olddev->ibi_lock);
2664 if (olddev->ibi) {
2665 ibireq.handler = olddev->ibi->handler;
2666 ibireq.max_payload_len = olddev->ibi->max_payload_len;
2667 ibireq.num_slots = olddev->ibi->num_slots;
2668
2669 if (olddev->ibi->enabled)
2670 enable_ibi = true;
2671 /*
2672 * The olddev should not receive any commands on the
2673 * i3c bus as it does not exist and has been assigned
2674 * a new address. This will result in NACK or timeout.
2675 * So, update the olddev->ibi->enabled flag to false
2676 * to avoid DISEC with OldAddr.
2677 */
2678 olddev->ibi->enabled = false;
2679 i3c_dev_free_ibi_locked(olddev);
2680 }
2681 mutex_unlock(&olddev->ibi_lock);
2682
2683 old_dyn_addr = olddev->info.dyn_addr;
2684
2685 i3c_master_detach_i3c_dev(olddev);
2686 i3c_master_free_i3c_dev(olddev);
2687 }
2688
2689 /*
2690 * Depending on our previous state, the expected dynamic address might
2691 * differ:
2692 * - if the device already had a dynamic address assigned, let's try to
2693 * re-apply this one
2694 * - if the device did not have a dynamic address and the firmware
2695 * requested a specific address, pick this one
2696 * - in any other case, keep the address automatically assigned by the
2697 * master
2698 */
2699 if (old_dyn_addr && old_dyn_addr != newdev->info.dyn_addr)
2700 expected_dyn_addr = old_dyn_addr;
2701 else if (newdev->boardinfo && newdev->boardinfo->init_dyn_addr)
2702 expected_dyn_addr = newdev->boardinfo->init_dyn_addr;
2703 else
2704 expected_dyn_addr = newdev->info.dyn_addr;
2705
2706 if (newdev->info.dyn_addr != expected_dyn_addr &&
2707 i3c_bus_get_addr_slot_status(&master->bus, expected_dyn_addr) == I3C_ADDR_SLOT_FREE) {
2708 /*
2709 * Try to apply the expected dynamic address. If it fails, keep
2710 * the address assigned by the master.
2711 */
2712 ret = i3c_master_setnewda_locked(master,
2713 newdev->info.dyn_addr,
2714 expected_dyn_addr);
2715 if (!ret) {
2716 old_dyn_addr = newdev->info.dyn_addr;
2717 newdev->info.dyn_addr = expected_dyn_addr;
2718 i3c_master_reattach_i3c_dev_locked(newdev, old_dyn_addr);
2719 } else {
2720 dev_err(&master->dev,
2721 "Failed to assign reserved/old address to device %d%llx",
2722 master->bus.id, newdev->info.pid);
2723 }
2724 }
2725
2726 /*
2727 * Now is time to try to restore the IBI setup. If we're lucky,
2728 * everything works as before, otherwise, all we can do is complain.
2729 * FIXME: maybe we should add callback to inform the driver that it
2730 * should request the IBI again instead of trying to hide that from
2731 * him.
2732 */
2733 if (ibireq.handler) {
2734 mutex_lock(&newdev->ibi_lock);
2735 ret = i3c_dev_request_ibi_locked(newdev, &ibireq);
2736 if (ret) {
2737 dev_err(&master->dev,
2738 "Failed to request IBI on device %d-%llx",
2739 master->bus.id, newdev->info.pid);
2740 } else if (enable_ibi) {
2741 ret = i3c_dev_enable_ibi_locked(newdev);
2742 if (ret)
2743 dev_err(&master->dev,
2744 "Failed to re-enable IBI on device %d-%llx",
2745 master->bus.id, newdev->info.pid);
2746 }
2747 mutex_unlock(&newdev->ibi_lock);
2748 }
2749
2750 return;
2751
2752err_detach_dev:
2753 if (newdev->dev && newdev->dev->desc)
2754 newdev->dev->desc = NULL;
2755
2756 i3c_master_detach_i3c_dev(newdev);
2757
2758err_free_dev:
2759 i3c_master_free_i3c_dev(newdev);
2760
2761err_prevent_addr_reuse:
2762 if (no_dev)
2763 return;
2764 /*
2765 * Although the device has not been added, the address has been
2766 * assigned. Prevent the address from being used again.
2767 */
2768 if (i3c_bus_get_addr_slot_status(&master->bus, addr) == I3C_ADDR_SLOT_FREE)
2769 i3c_bus_set_addr_slot_status(&master->bus, addr, I3C_ADDR_SLOT_I3C_DEV);
2770
2771 dev_err(&master->dev, "Failed to add I3C device at address %u, error %d\n", addr, ret);
2772}
2773
2774/**
2775 * i3c_master_add_i3c_dev_locked() - add an I3C slave to the bus
2776 * @master: master used to send frames on the bus
2777 * @addr: I3C slave dynamic address assigned to the device
2778 *
2779 * This function instantiates an I3C device object and adds it to the
2780 * I3C device list. All device information is automatically retrieved using
2781 * standard CCC commands.
2782 *
2783 * This function must be called with the bus lock held in write mode.
2784 */
2785void i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, u8 addr)
2786{
2787 __i3c_master_add_i3c_dev_locked(master, addr, false);
2788}
2789EXPORT_SYMBOL_GPL(i3c_master_add_i3c_dev_locked);
2790
2791static void i3c_master_reconcile_dyn_addrs(struct i3c_master_controller *master)
2792{
2793 DECLARE_BITMAP(dev_dyn_addrs, I2C_MAX_ADDR + 1);
2794 enum i3c_addr_slot_status status;
2795 struct i3c_dev_desc *desc;
2796
2797 /* Mark all devices' dynamic and static addresses in the bitmap */
2798 bitmap_zero(dev_dyn_addrs, I2C_MAX_ADDR + 1);
2799 i3c_bus_for_each_i3cdev(&master->bus, desc) {
2800 if (desc->info.static_addr)
2801 __set_bit(desc->info.static_addr, dev_dyn_addrs);
2802 __set_bit(desc->info.dyn_addr, dev_dyn_addrs);
2803 }
2804 /* Reconcile the bitmap with the bus address slot status */
2805 for (unsigned int addr = 0; addr <= I2C_MAX_ADDR; addr++) {
2806 status = i3c_bus_get_addr_slot_status(&master->bus, addr);
2807 if (status != I3C_ADDR_SLOT_I3C_DEV || test_bit(addr, dev_dyn_addrs))
2808 continue;
2809 i3c_bus_set_addr_slot_status(&master->bus, addr, I3C_ADDR_SLOT_FREE);
2810 /* Try to add the device, but probe to see if it is really present */
2811 __i3c_master_add_i3c_dev_locked(master, addr, true);
2812 }
2813}
2814
2815/**
2816 * i3c_master_do_daa_ext() - Dynamic Address Assignment (extended version)
2817 * @master: controller
2818 * @rstdaa: whether to first perform Reset of Dynamic Addresses (RSTDAA)
2819 *
2820 * Perform Dynamic Address Assignment with optional support for System
2821 * Hibernation (@rstdaa is true).
2822 *
2823 * After System Hibernation, Dynamic Addresses can have been reassigned at boot
2824 * time to different values. A simple strategy is followed to handle that.
2825 * Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA
2826 * procedure which has provision for reassigning addresses that differ from the
2827 * previously recorded addresses.
2828 *
2829 * Return: a 0 in case of success, an negative error code otherwise.
2830 */
2831int i3c_master_do_daa_ext(struct i3c_master_controller *master, bool rstdaa)
2832{
2833 int rstret = 0;
2834 int ret;
2835
2836 ret = i3c_master_rpm_get(master);
2837 if (ret)
2838 return ret;
2839
2840 i3c_bus_maintenance_lock(&master->bus);
2841
2842 if (master->shutting_down) {
2843 ret = -ENODEV;
2844 } else {
2845 if (rstdaa)
2846 rstret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
2847 ret = master->ops->do_daa(master);
2848 /*
2849 * Handle cases where a dynamic address was assigned but the
2850 * device was not successfully added.
2851 */
2852 i3c_master_reconcile_dyn_addrs(master);
2853 }
2854
2855 i3c_bus_maintenance_unlock(&master->bus);
2856
2857 if (ret)
2858 goto out;
2859
2860 queue_work(master->wq, &master->reg_work);
2861out:
2862 i3c_master_rpm_put(master);
2863
2864 return rstret ?: ret;
2865}
2866EXPORT_SYMBOL_GPL(i3c_master_do_daa_ext);
2867
2868/**
2869 * i3c_master_do_daa() - do a DAA (Dynamic Address Assignment)
2870 * @master: master doing the DAA
2871 *
2872 * This function instantiates I3C device objects and adds them to the
2873 * I3C device list. All device information is automatically retrieved using
2874 * standard CCC commands.
2875 *
2876 * Return: a 0 in case of success, an negative error code otherwise.
2877 */
2878int i3c_master_do_daa(struct i3c_master_controller *master)
2879{
2880 return i3c_master_do_daa_ext(master, false);
2881}
2882EXPORT_SYMBOL_GPL(i3c_master_do_daa);
2883
2884#define OF_I3C_REG1_IS_I2C_DEV BIT(31)
2885
2886#ifdef CONFIG_ACPI
2887static int i3c_acpi_get_i2c_resource(struct acpi_resource *ares, void *data)
2888{
2889 struct i2c_dev_boardinfo *boardinfo = data;
2890 struct acpi_resource_i2c_serialbus *sb;
2891
2892 if (boardinfo->base.addr || !i2c_acpi_get_i2c_resource(ares, &sb))
2893 return 1;
2894
2895 boardinfo->base.addr = sb->slave_address;
2896 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
2897 boardinfo->base.flags |= I2C_CLIENT_TEN;
2898
2899 boardinfo->lvr = sb->lvr;
2900
2901 return 1;
2902}
2903
2904static int i3c_acpi_add_i2c_boardinfo(struct i2c_dev_boardinfo *boardinfo,
2905 struct fwnode_handle *fwnode)
2906{
2907 struct acpi_device *adev = to_acpi_device_node(fwnode);
2908 LIST_HEAD(resources);
2909 int ret;
2910
2911 boardinfo->base.fwnode = acpi_fwnode_handle(adev);
2912 acpi_set_modalias(adev, dev_name(&adev->dev), boardinfo->base.type,
2913 sizeof(boardinfo->base.type));
2914
2915 ret = acpi_dev_get_resources(adev, &resources,
2916 i3c_acpi_get_i2c_resource, boardinfo);
2917 if (ret < 0)
2918 return ret;
2919
2920 acpi_dev_free_resource_list(&resources);
2921
2922 if (!boardinfo->base.addr)
2923 return -ENODEV;
2924
2925 return 0;
2926}
2927#else
2928static inline int i3c_acpi_add_i2c_boardinfo(struct i2c_dev_boardinfo *boardinfo,
2929 struct fwnode_handle *fwnode)
2930{
2931 return -ENODEV;
2932}
2933#endif
2934
2935static int
2936i3c_master_add_i2c_boardinfo(struct i3c_master_controller *master,
2937 struct fwnode_handle *fwnode, u32 *reg)
2938{
2939 struct i2c_dev_boardinfo *boardinfo;
2940 struct device *dev = &master->dev;
2941 int ret;
2942
2943 boardinfo = devm_kzalloc(dev, sizeof(*boardinfo), GFP_KERNEL);
2944 if (!boardinfo)
2945 return -ENOMEM;
2946
2947 if (is_of_node(fwnode)) {
2948 ret = of_i2c_get_board_info(dev, to_of_node(fwnode), &boardinfo->base);
2949 if (ret)
2950 return ret;
2951
2952 /* LVR is encoded in reg[2] for Device Tree. */
2953 boardinfo->lvr = reg[2];
2954 } else if (is_acpi_device_node(fwnode)) {
2955 ret = i3c_acpi_add_i2c_boardinfo(boardinfo, fwnode);
2956 if (ret) {
2957 devm_kfree(dev, boardinfo);
2958 return ret;
2959 }
2960 } else {
2961 return -EINVAL;
2962 }
2963
2964 /*
2965 * The I3C Specification does not clearly say I2C devices with 10-bit
2966 * address are supported. These devices can't be passed properly through
2967 * DEFSLVS command.
2968 */
2969 if (boardinfo->base.flags & I2C_CLIENT_TEN) {
2970 dev_err(dev, "I2C device with 10 bit address not supported.\n");
2971 return -EOPNOTSUPP;
2972 }
2973
2974 list_add_tail(&boardinfo->node, &master->boardinfo.i2c);
2975 fwnode_handle_get(fwnode);
2976
2977 return 0;
2978}
2979
2980static int
2981i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master,
2982 struct fwnode_handle *fwnode, u32 *reg)
2983{
2984 struct i3c_dev_boardinfo *boardinfo;
2985 struct device *dev = &master->dev;
2986 enum i3c_addr_slot_status addrstatus;
2987 u32 init_dyn_addr = 0, static_addr_method = 0;
2988
2989 boardinfo = devm_kzalloc(dev, sizeof(*boardinfo), GFP_KERNEL);
2990 if (!boardinfo)
2991 return -ENOMEM;
2992
2993 if (reg[0]) {
2994 if (reg[0] > I3C_MAX_ADDR)
2995 return -EINVAL;
2996
2997 addrstatus = i3c_bus_get_addr_slot_status(&master->bus,
2998 reg[0]);
2999 if (addrstatus != I3C_ADDR_SLOT_FREE)
3000 return -EINVAL;
3001 }
3002
3003 boardinfo->static_addr = reg[0];
3004
3005 if (!fwnode_property_read_u32(fwnode, "mipi-i3c-static-method", &static_addr_method))
3006 boardinfo->static_addr_method = static_addr_method &
3007 (I3C_ADDR_METHOD_SETDASA | I3C_ADDR_METHOD_SETAASA);
3008
3009 if (!fwnode_property_read_u32(fwnode, "assigned-address", &init_dyn_addr)) {
3010 /*
3011 * When a device advertises both SETDASA and SETAASA, an explicit
3012 * dynamic address selects SETDASA (MIPI DISCO prefers it); drop
3013 * SETAASA so it is not used for this device.
3014 */
3015 if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETDASA)
3016 boardinfo->static_addr_method &= ~I3C_ADDR_METHOD_SETAASA;
3017
3018 if (init_dyn_addr > I3C_MAX_ADDR)
3019 return -EINVAL;
3020
3021 addrstatus = i3c_bus_get_addr_slot_status(&master->bus,
3022 init_dyn_addr);
3023 if (addrstatus != I3C_ADDR_SLOT_FREE)
3024 return -EINVAL;
3025 }
3026
3027 if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA) {
3028 /* For SETAASA, static address is taken as the dynamic address. */
3029 init_dyn_addr = boardinfo->static_addr;
3030 }
3031
3032 /* Update the address methods required for device discovery */
3033 master->addr_method |= boardinfo->static_addr_method;
3034
3035 boardinfo->pid = ((u64)reg[1] << 32) | reg[2];
3036
3037 /* For SETAASA devices, validate the static address instead of PID */
3038 if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA) {
3039 if (!boardinfo->static_addr)
3040 return -EINVAL;
3041 } else {
3042 if (!I3C_PID_MANUF_ID(boardinfo->pid) ||
3043 (boardinfo->pid & GENMASK_ULL(63, 48)) ||
3044 I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
3045 return -EINVAL;
3046 }
3047
3048 boardinfo->init_dyn_addr = init_dyn_addr;
3049 boardinfo->fwnode = fwnode_handle_get(fwnode);
3050 list_add_tail(&boardinfo->node, &master->boardinfo.i3c);
3051
3052 return 0;
3053}
3054
3055static int i3c_master_add_of_dev(struct i3c_master_controller *master,
3056 struct fwnode_handle *fwnode)
3057{
3058 u32 reg[3];
3059 int ret;
3060
3061 if (!master)
3062 return -EINVAL;
3063
3064 ret = fwnode_property_read_u32_array(fwnode, "reg", reg, ARRAY_SIZE(reg));
3065 if (ret)
3066 return ret;
3067
3068 /*
3069 * I3C device should have either the manufacturer ID specified or the
3070 * address discovery method specified. Else treat it as an I2C device.
3071 */
3072 if (!reg[1] && !fwnode_property_present(fwnode, "mipi-i3c-static-method"))
3073 ret = i3c_master_add_i2c_boardinfo(master, fwnode, reg);
3074 else
3075 ret = i3c_master_add_i3c_boardinfo(master, fwnode, reg);
3076
3077 return ret;
3078}
3079
3080#ifdef CONFIG_ACPI
3081static int i3c_master_add_acpi_dev(struct i3c_master_controller *master,
3082 struct fwnode_handle *fwnode)
3083{
3084 struct acpi_device *adev = to_acpi_device_node(fwnode);
3085 acpi_bus_address adr;
3086 u32 reg[3] = { 0 };
3087 int ret;
3088
3089 /*
3090 * If the ACPI table entry has _ADR method, it's an I3C device.
3091 * Otherwise it may be an I2C device described by an I2cSerialBus
3092 * resource. If no I2cSerialBus resource is found, ignore the entry.
3093 */
3094 if (!acpi_has_method(adev->handle, "_ADR")) {
3095 ret = i3c_master_add_i2c_boardinfo(master, fwnode, reg);
3096 if (ret == -ENODEV)
3097 return 0;
3098
3099 return ret;
3100 }
3101
3102 adr = acpi_device_adr(adev);
3103
3104 /* For I3C devices, _ADR will have the 48 bit PID of the device */
3105 reg[1] = upper_32_bits(adr);
3106 reg[2] = lower_32_bits(adr);
3107
3108 fwnode_property_read_u32(fwnode, "mipi-i3c-static-address", &reg[0]);
3109
3110 return i3c_master_add_i3c_boardinfo(master, fwnode, reg);
3111}
3112
3113static u8 i3c_acpi_i2c_get_lvr(struct i2c_client *client)
3114{
3115 struct acpi_device *adev = to_acpi_device_node(client->dev.fwnode);
3116 struct i2c_dev_boardinfo boardinfo = {};
3117 LIST_HEAD(resources);
3118 int ret;
3119 u8 lvr;
3120
3121 lvr = I3C_LVR_I2C_INDEX(2) | I3C_LVR_I2C_FM_MODE;
3122
3123 ret = acpi_dev_get_resources(adev, &resources,
3124 i3c_acpi_get_i2c_resource, &boardinfo);
3125 if (ret < 0)
3126 return lvr;
3127
3128 if (boardinfo.base.addr)
3129 lvr = boardinfo.lvr;
3130
3131 acpi_dev_free_resource_list(&resources);
3132
3133 return lvr;
3134}
3135#else
3136static inline int i3c_master_add_acpi_dev(struct i3c_master_controller *master,
3137 struct fwnode_handle *fwnode)
3138{
3139 return -ENODEV;
3140}
3141
3142static inline u8 i3c_acpi_i2c_get_lvr(struct i2c_client *client)
3143{
3144 return I3C_LVR_I2C_INDEX(2) | I3C_LVR_I2C_FM_MODE;
3145}
3146#endif
3147
3148static int fwnode_populate_i3c_bus(struct i3c_master_controller *master)
3149{
3150 struct device *dev = &master->dev;
3151 struct fwnode_handle *fwnode = dev_fwnode(dev);
3152 int ret;
3153 u32 val;
3154
3155 if (!fwnode)
3156 return 0;
3157
3158 fwnode_for_each_available_child_node_scoped(fwnode, child) {
3159 if (is_of_node(child))
3160 ret = i3c_master_add_of_dev(master, child);
3161 else if (is_acpi_device_node(child))
3162 ret = i3c_master_add_acpi_dev(master, child);
3163 else
3164 continue;
3165
3166 if (ret)
3167 return ret;
3168 }
3169
3170 /*
3171 * The user might want to limit I2C and I3C speed in case some devices
3172 * on the bus are not supporting typical rates, or if the bus topology
3173 * prevents it from using max possible rate.
3174 */
3175 if (!device_property_read_u32(dev, "i2c-scl-hz", &val))
3176 master->bus.scl_rate.i2c = val;
3177
3178 if (!device_property_read_u32(dev, "i3c-scl-hz", &val))
3179 master->bus.scl_rate.i3c = val;
3180
3181 return 0;
3182}
3183
3184static int i3c_master_i2c_adapter_xfer(struct i2c_adapter *adap,
3185 struct i2c_msg *xfers, int nxfers)
3186{
3187 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap);
3188 struct i2c_dev_desc *dev;
3189 int i, ret;
3190 u16 addr;
3191
3192 if (!xfers || !master || nxfers <= 0)
3193 return -EINVAL;
3194
3195 if (!master->ops->i2c_xfers)
3196 return -EOPNOTSUPP;
3197
3198 /* Doing transfers to different devices is not supported. */
3199 addr = xfers[0].addr;
3200 for (i = 1; i < nxfers; i++) {
3201 if (addr != xfers[i].addr)
3202 return -EOPNOTSUPP;
3203 }
3204
3205 ret = i3c_master_rpm_get(master);
3206 if (ret)
3207 return ret;
3208
3209 i3c_bus_normaluse_lock(&master->bus);
3210 dev = i3c_master_find_i2c_dev_by_addr(master, addr);
3211 if (!dev)
3212 ret = -ENOENT;
3213 else
3214 ret = master->ops->i2c_xfers(dev, xfers, nxfers);
3215 i3c_bus_normaluse_unlock(&master->bus);
3216
3217 i3c_master_rpm_put(master);
3218
3219 return ret ? ret : nxfers;
3220}
3221
3222static u32 i3c_master_i2c_funcs(struct i2c_adapter *adapter)
3223{
3224 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C;
3225}
3226
3227static u8 i3c_master_i2c_get_lvr(struct i2c_client *client)
3228{
3229 /* Fall back to no spike filters and FM bus mode. */
3230 u8 lvr = I3C_LVR_I2C_INDEX(2) | I3C_LVR_I2C_FM_MODE;
3231 u32 reg[3];
3232
3233 if (is_of_node(client->dev.fwnode)) {
3234 if (!fwnode_property_read_u32_array(client->dev.fwnode, "reg",
3235 reg, ARRAY_SIZE(reg)))
3236 lvr = reg[2];
3237 } else if (is_acpi_device_node(client->dev.fwnode)) {
3238 lvr = i3c_acpi_i2c_get_lvr(client);
3239 }
3240
3241 return lvr;
3242}
3243
3244static int i3c_master_i2c_attach(struct i2c_adapter *adap, struct i2c_client *client)
3245{
3246 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap);
3247 enum i3c_addr_slot_status status;
3248 struct i2c_dev_desc *i2cdev;
3249 int ret;
3250
3251 /* Already added by board info? */
3252 if (i3c_master_find_i2c_dev_by_addr(master, client->addr))
3253 return 0;
3254
3255 status = i3c_bus_get_addr_slot_status(&master->bus, client->addr);
3256 if (status != I3C_ADDR_SLOT_FREE)
3257 return -EBUSY;
3258
3259 i3c_bus_set_addr_slot_status(&master->bus, client->addr,
3260 I3C_ADDR_SLOT_I2C_DEV);
3261
3262 i2cdev = i3c_master_alloc_i2c_dev(master, client->addr,
3263 i3c_master_i2c_get_lvr(client));
3264 if (IS_ERR(i2cdev)) {
3265 ret = PTR_ERR(i2cdev);
3266 goto out_clear_status;
3267 }
3268
3269 ret = i3c_master_attach_i2c_dev(master, i2cdev);
3270 if (ret)
3271 goto out_free_dev;
3272
3273 return 0;
3274
3275out_free_dev:
3276 i3c_master_free_i2c_dev(i2cdev);
3277out_clear_status:
3278 i3c_bus_set_addr_slot_status(&master->bus, client->addr,
3279 I3C_ADDR_SLOT_FREE);
3280
3281 return ret;
3282}
3283
3284static int i3c_master_i2c_detach(struct i2c_adapter *adap, struct i2c_client *client)
3285{
3286 struct i3c_master_controller *master = i2c_adapter_to_i3c_master(adap);
3287 struct i2c_dev_desc *dev;
3288
3289 dev = i3c_master_find_i2c_dev_by_addr(master, client->addr);
3290 if (!dev)
3291 return -ENODEV;
3292
3293 i3c_master_detach_i2c_dev(dev);
3294 i3c_bus_set_addr_slot_status(&master->bus, dev->addr,
3295 I3C_ADDR_SLOT_FREE);
3296 i3c_master_free_i2c_dev(dev);
3297
3298 return 0;
3299}
3300
3301static const struct i2c_algorithm i3c_master_i2c_algo = {
3302 .master_xfer = i3c_master_i2c_adapter_xfer,
3303 .functionality = i3c_master_i2c_funcs,
3304};
3305
3306static int i3c_i2c_notifier_call(struct notifier_block *nb, unsigned long action,
3307 void *data)
3308{
3309 struct i2c_adapter *adap;
3310 struct i2c_client *client;
3311 struct device *dev = data;
3312 struct i3c_master_controller *master;
3313 int ret;
3314
3315 if (dev->type != &i2c_client_type)
3316 return 0;
3317
3318 client = to_i2c_client(dev);
3319 adap = client->adapter;
3320
3321 if (adap->algo != &i3c_master_i2c_algo)
3322 return 0;
3323
3324 master = i2c_adapter_to_i3c_master(adap);
3325
3326 ret = i3c_master_rpm_get(master);
3327 if (ret)
3328 return ret;
3329
3330 i3c_bus_maintenance_lock(&master->bus);
3331 switch (action) {
3332 case BUS_NOTIFY_ADD_DEVICE:
3333 ret = i3c_master_i2c_attach(adap, client);
3334 break;
3335 case BUS_NOTIFY_DEL_DEVICE:
3336 ret = i3c_master_i2c_detach(adap, client);
3337 break;
3338 default:
3339 ret = -EINVAL;
3340 }
3341 i3c_bus_maintenance_unlock(&master->bus);
3342
3343 i3c_master_rpm_put(master);
3344
3345 return ret;
3346}
3347
3348static struct notifier_block i2cdev_notifier = {
3349 .notifier_call = i3c_i2c_notifier_call,
3350};
3351
3352static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master)
3353{
3354 struct i2c_adapter *adap = i3c_master_to_i2c_adapter(master);
3355 struct i2c_dev_desc *i2cdev;
3356 struct i2c_dev_boardinfo *i2cboardinfo;
3357 struct fwnode_handle *fwnode = dev_fwnode(&master->dev);
3358 int ret, id = -1;
3359
3360 adap->dev.parent = master->dev.parent;
3361 adap->owner = master->dev.parent->driver->owner;
3362 adap->algo = &i3c_master_i2c_algo;
3363 strscpy(adap->name, dev_name(master->dev.parent), sizeof(adap->name));
3364 adap->timeout = HZ;
3365 adap->retries = 3;
3366
3367 if (fwnode && is_of_node(fwnode))
3368 id = of_alias_get_id(to_of_node(fwnode), "i2c");
3369
3370 if (id >= 0) {
3371 adap->nr = id;
3372 ret = i2c_add_numbered_adapter(adap);
3373 } else {
3374 ret = i2c_add_adapter(adap);
3375 }
3376 if (ret)
3377 return ret;
3378
3379 /*
3380 * We silently ignore failures here. The bus should keep working
3381 * correctly even if one or more i2c devices are not registered.
3382 */
3383 list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) {
3384 i2cdev = i3c_master_find_i2c_dev_by_addr(master,
3385 i2cboardinfo->base.addr);
3386 if (WARN_ON(!i2cdev))
3387 continue;
3388 i2cdev->dev = i2c_new_client_device(adap, &i2cboardinfo->base);
3389 }
3390
3391 return 0;
3392}
3393
3394static void i3c_master_i2c_adapter_cleanup(struct i3c_master_controller *master)
3395{
3396 struct i2c_dev_desc *i2cdev;
3397
3398 i2c_del_adapter(&master->i2c);
3399
3400 i3c_bus_for_each_i2cdev(&master->bus, i2cdev)
3401 i2cdev->dev = NULL;
3402}
3403
3404static void i3c_master_unregister_i3c_devs(struct i3c_master_controller *master)
3405{
3406 struct i3c_dev_desc *i3cdev;
3407
3408 i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
3409 if (!i3cdev->dev)
3410 continue;
3411
3412 if (device_is_registered(&i3cdev->dev->dev)) {
3413 get_device(&i3cdev->dev->dev);
3414 device_unregister(&i3cdev->dev->dev);
3415 }
3416 i3cdev->dev->desc = NULL;
3417 put_device(&i3cdev->dev->dev);
3418 i3cdev->dev = NULL;
3419 }
3420}
3421
3422/* Approximate time for IBI handler to run */
3423#define I3C_WAKEUP_PROCESSING_TIME_MS 100
3424
3425/**
3426 * i3c_master_queue_ibi() - Queue an IBI
3427 * @dev: the device this IBI is coming from
3428 * @slot: the IBI slot used to store the payload
3429 *
3430 * Queue an IBI to the controller workqueue. The IBI handler attached to
3431 * the dev will be called from a workqueue context.
3432 */
3433void i3c_master_queue_ibi(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot)
3434{
3435 if (!dev->ibi || !slot)
3436 return;
3437
3438 if (device_may_wakeup(&dev->dev->dev))
3439 pm_wakeup_event(&dev->dev->dev, I3C_WAKEUP_PROCESSING_TIME_MS);
3440
3441 atomic_inc(&dev->ibi->pending_ibis);
3442 queue_work(dev->ibi->wq, &slot->work);
3443}
3444EXPORT_SYMBOL_GPL(i3c_master_queue_ibi);
3445
3446static void i3c_master_handle_ibi(struct work_struct *work)
3447{
3448 struct i3c_ibi_slot *slot = container_of(work, struct i3c_ibi_slot,
3449 work);
3450 struct i3c_dev_desc *dev = slot->dev;
3451 struct i3c_master_controller *master = i3c_dev_get_master(dev);
3452 struct i3c_ibi_payload payload;
3453
3454 payload.data = slot->data;
3455 payload.len = slot->len;
3456
3457 if (dev->dev)
3458 dev->ibi->handler(dev->dev, &payload);
3459
3460 master->ops->recycle_ibi_slot(dev, slot);
3461 if (atomic_dec_and_test(&dev->ibi->pending_ibis))
3462 complete(&dev->ibi->all_ibis_handled);
3463}
3464
3465static void i3c_master_init_ibi_slot(struct i3c_dev_desc *dev,
3466 struct i3c_ibi_slot *slot)
3467{
3468 slot->dev = dev;
3469 INIT_WORK(&slot->work, i3c_master_handle_ibi);
3470}
3471
3472struct i3c_generic_ibi_slot {
3473 struct list_head node;
3474 struct i3c_ibi_slot base;
3475};
3476
3477struct i3c_generic_ibi_pool {
3478 spinlock_t lock;
3479 unsigned int num_slots;
3480 void *payload_buf;
3481 struct list_head free_slots;
3482 struct list_head pending;
3483 struct i3c_generic_ibi_slot slots[] __counted_by(num_slots);
3484};
3485
3486/**
3487 * i3c_generic_ibi_free_pool() - Free a generic IBI pool
3488 * @pool: the IBI pool to free
3489 *
3490 * Free all IBI slots allated by a generic IBI pool.
3491 */
3492void i3c_generic_ibi_free_pool(struct i3c_generic_ibi_pool *pool)
3493{
3494 struct i3c_generic_ibi_slot *slot;
3495 unsigned int nslots = 0;
3496
3497 while (!list_empty(&pool->free_slots)) {
3498 slot = list_first_entry(&pool->free_slots,
3499 struct i3c_generic_ibi_slot, node);
3500 list_del(&slot->node);
3501 nslots++;
3502 }
3503
3504 /*
3505 * If the number of freed slots is not equal to the number of allocated
3506 * slots we have a leak somewhere.
3507 */
3508 WARN_ON(nslots != pool->num_slots);
3509
3510 kfree(pool->payload_buf);
3511 kfree(pool);
3512}
3513EXPORT_SYMBOL_GPL(i3c_generic_ibi_free_pool);
3514
3515/**
3516 * i3c_generic_ibi_alloc_pool() - Create a generic IBI pool
3517 * @dev: the device this pool will be used for
3518 * @req: IBI setup request describing what the device driver expects
3519 *
3520 * Create a generic IBI pool based on the information provided in @req.
3521 *
3522 * Return: a valid IBI pool in case of success, an ERR_PTR() otherwise.
3523 */
3524struct i3c_generic_ibi_pool *
3525i3c_generic_ibi_alloc_pool(struct i3c_dev_desc *dev,
3526 const struct i3c_ibi_setup *req)
3527{
3528 struct i3c_generic_ibi_pool *pool;
3529 struct i3c_generic_ibi_slot *slot;
3530 unsigned int i;
3531 int ret;
3532
3533 pool = kzalloc_flex(*pool, slots, req->num_slots);
3534 if (!pool)
3535 return ERR_PTR(-ENOMEM);
3536
3537 pool->num_slots = req->num_slots;
3538
3539 spin_lock_init(&pool->lock);
3540 INIT_LIST_HEAD(&pool->free_slots);
3541 INIT_LIST_HEAD(&pool->pending);
3542
3543 if (req->max_payload_len) {
3544 pool->payload_buf = kcalloc(req->num_slots,
3545 req->max_payload_len, GFP_KERNEL);
3546 if (!pool->payload_buf) {
3547 ret = -ENOMEM;
3548 goto err_free_pool;
3549 }
3550 }
3551
3552 for (i = 0; i < req->num_slots; i++) {
3553 slot = &pool->slots[i];
3554 i3c_master_init_ibi_slot(dev, &slot->base);
3555
3556 if (req->max_payload_len)
3557 slot->base.data = pool->payload_buf +
3558 (i * req->max_payload_len);
3559
3560 list_add_tail(&slot->node, &pool->free_slots);
3561 }
3562
3563 return pool;
3564
3565err_free_pool:
3566 i3c_generic_ibi_free_pool(pool);
3567 return ERR_PTR(ret);
3568}
3569EXPORT_SYMBOL_GPL(i3c_generic_ibi_alloc_pool);
3570
3571/**
3572 * i3c_generic_ibi_get_free_slot() - Get a free slot from a generic IBI pool
3573 * @pool: the pool to query an IBI slot on
3574 *
3575 * Search for a free slot in a generic IBI pool.
3576 * The slot should be returned to the pool using i3c_generic_ibi_recycle_slot()
3577 * when it's no longer needed.
3578 *
3579 * Return: a pointer to a free slot, or NULL if there's no free slot available.
3580 */
3581struct i3c_ibi_slot *
3582i3c_generic_ibi_get_free_slot(struct i3c_generic_ibi_pool *pool)
3583{
3584 struct i3c_generic_ibi_slot *slot;
3585 unsigned long flags;
3586
3587 spin_lock_irqsave(&pool->lock, flags);
3588 slot = list_first_entry_or_null(&pool->free_slots,
3589 struct i3c_generic_ibi_slot, node);
3590 if (slot)
3591 list_del(&slot->node);
3592 spin_unlock_irqrestore(&pool->lock, flags);
3593
3594 return slot ? &slot->base : NULL;
3595}
3596EXPORT_SYMBOL_GPL(i3c_generic_ibi_get_free_slot);
3597
3598/**
3599 * i3c_generic_ibi_recycle_slot() - Return a slot to a generic IBI pool
3600 * @pool: the pool to return the IBI slot to
3601 * @s: IBI slot to recycle
3602 *
3603 * Add an IBI slot back to its generic IBI pool. Should be called from the
3604 * master driver struct_master_controller_ops->recycle_ibi() method.
3605 */
3606void i3c_generic_ibi_recycle_slot(struct i3c_generic_ibi_pool *pool,
3607 struct i3c_ibi_slot *s)
3608{
3609 struct i3c_generic_ibi_slot *slot;
3610 unsigned long flags;
3611
3612 if (!s)
3613 return;
3614
3615 slot = container_of(s, struct i3c_generic_ibi_slot, base);
3616 spin_lock_irqsave(&pool->lock, flags);
3617 list_add_tail(&slot->node, &pool->free_slots);
3618 spin_unlock_irqrestore(&pool->lock, flags);
3619}
3620EXPORT_SYMBOL_GPL(i3c_generic_ibi_recycle_slot);
3621
3622static int i3c_master_check_ops(const struct i3c_master_controller_ops *ops)
3623{
3624 if (!ops || !ops->bus_init || !ops->i3c_xfers ||
3625 !ops->send_ccc_cmd || !ops->do_daa || !ops->i2c_xfers)
3626 return -EINVAL;
3627
3628 if (ops->request_ibi &&
3629 (!ops->enable_ibi || !ops->disable_ibi || !ops->free_ibi ||
3630 !ops->recycle_ibi_slot))
3631 return -EINVAL;
3632
3633 return 0;
3634}
3635
3636/**
3637 * i3c_master_register() - register an I3C master
3638 * @master: master used to send frames on the bus
3639 * @parent: the parent device (the one that provides this I3C master
3640 * controller)
3641 * @ops: the master controller operations
3642 * @secondary: true if you are registering a secondary master. Will return
3643 * -EOPNOTSUPP if set to true since secondary masters are not yet
3644 * supported
3645 *
3646 * This function takes care of everything for you:
3647 *
3648 * - creates and initializes the I3C bus
3649 * - populates the bus with static I2C devs if @parent->of_node is not
3650 * NULL
3651 * - registers all I3C devices added by the controller during bus
3652 * initialization
3653 * - registers the I2C adapter and all I2C devices
3654 *
3655 * Return: 0 in case of success, a negative error code otherwise.
3656 */
3657int i3c_master_register(struct i3c_master_controller *master,
3658 struct device *parent,
3659 const struct i3c_master_controller_ops *ops,
3660 bool secondary)
3661{
3662 unsigned long i2c_scl_rate = I3C_BUS_I2C_FM_PLUS_SCL_MAX_RATE;
3663 struct i3c_bus *i3cbus = i3c_master_get_bus(master);
3664 enum i3c_bus_mode mode = I3C_BUS_MODE_PURE;
3665 struct i2c_dev_boardinfo *i2cbi;
3666 int ret;
3667
3668 /* We do not support secondary masters yet. */
3669 if (secondary)
3670 return -EOPNOTSUPP;
3671
3672 ret = i3c_master_check_ops(ops);
3673 if (ret)
3674 return ret;
3675
3676 master->dev.parent = parent;
3677 device_set_node(&master->dev, fwnode_handle_get(dev_fwnode(parent)));
3678 master->dev.bus = &i3c_bus_type;
3679 master->dev.type = &i3c_masterdev_type;
3680 master->dev.release = i3c_masterdev_release;
3681 master->ops = ops;
3682 master->secondary = secondary;
3683 master->addr_method = I3C_ADDR_METHOD_SETDASA;
3684 INIT_LIST_HEAD(&master->boardinfo.i2c);
3685 INIT_LIST_HEAD(&master->boardinfo.i3c);
3686
3687 ret = i3c_master_rpm_get(master);
3688 if (ret)
3689 return ret;
3690
3691 device_initialize(&master->dev);
3692
3693 master->dev.dma_mask = parent->dma_mask;
3694 master->dev.coherent_dma_mask = parent->coherent_dma_mask;
3695 master->dev.dma_parms = parent->dma_parms;
3696
3697 ret = i3c_bus_init(i3cbus, dev_fwnode(&master->dev));
3698 if (ret)
3699 goto err_put_dev;
3700
3701 dev_set_name(&master->dev, "i3c-%d", i3cbus->id);
3702
3703 ret = fwnode_populate_i3c_bus(master);
3704 if (ret)
3705 goto err_put_dev;
3706
3707 list_for_each_entry(i2cbi, &master->boardinfo.i2c, node) {
3708 switch (i2cbi->lvr & I3C_LVR_I2C_INDEX_MASK) {
3709 case I3C_LVR_I2C_INDEX(0):
3710 if (mode < I3C_BUS_MODE_MIXED_FAST)
3711 mode = I3C_BUS_MODE_MIXED_FAST;
3712 break;
3713 case I3C_LVR_I2C_INDEX(1):
3714 if (mode < I3C_BUS_MODE_MIXED_LIMITED)
3715 mode = I3C_BUS_MODE_MIXED_LIMITED;
3716 break;
3717 case I3C_LVR_I2C_INDEX(2):
3718 if (mode < I3C_BUS_MODE_MIXED_SLOW)
3719 mode = I3C_BUS_MODE_MIXED_SLOW;
3720 break;
3721 default:
3722 ret = -EINVAL;
3723 goto err_put_dev;
3724 }
3725
3726 if (i2cbi->lvr & I3C_LVR_I2C_FM_MODE)
3727 i2c_scl_rate = I3C_BUS_I2C_FM_SCL_MAX_RATE;
3728 }
3729
3730 ret = i3c_bus_set_mode(i3cbus, mode, i2c_scl_rate);
3731 if (ret)
3732 goto err_put_dev;
3733
3734 master->wq = alloc_workqueue("%s", WQ_PERCPU | WQ_FREEZABLE, 0, dev_name(parent));
3735 if (!master->wq) {
3736 ret = -ENOMEM;
3737 goto err_put_dev;
3738 }
3739 INIT_WORK(&master->hj_work, i3c_master_hj_work_fn);
3740 INIT_WORK(&master->reg_work, i3c_master_reg_work_fn);
3741
3742 ret = i3c_master_bus_init(master);
3743 if (ret)
3744 goto err_put_dev;
3745
3746 ret = device_add(&master->dev);
3747 if (ret)
3748 goto err_cleanup_bus;
3749
3750 /*
3751 * Expose our I3C bus as an I2C adapter so that I2C devices are exposed
3752 * through the I2C subsystem.
3753 */
3754 ret = i3c_master_i2c_adapter_init(master);
3755 if (ret)
3756 goto err_del_dev;
3757
3758 i3c_bus_notify(i3cbus, I3C_NOTIFY_BUS_ADD);
3759
3760 pm_runtime_no_callbacks(&master->dev);
3761 pm_suspend_ignore_children(&master->dev, true);
3762 pm_runtime_enable(&master->dev);
3763
3764 /*
3765 * We're done initializing the bus and the controller, we can now
3766 * register I3C devices discovered during the initial DAA. Device
3767 * registration is done via reg_work because that keeps a single
3768 * registration code path and ensures the worker is the only writer
3769 * of desc->dev. Flush the work to preserve synchronous probe-time
3770 * behavior.
3771 */
3772 master->init_done = true;
3773 queue_work(master->wq, &master->reg_work);
3774 flush_work(&master->reg_work);
3775
3776 if (master->ops->set_dev_nack_retry)
3777 device_create_file(&master->dev, &dev_attr_dev_nack_retry_count);
3778
3779 i3c_master_rpm_put(master);
3780
3781 return 0;
3782
3783err_del_dev:
3784 device_del(&master->dev);
3785
3786err_cleanup_bus:
3787 i3c_master_bus_cleanup(master);
3788
3789err_put_dev:
3790 i3c_master_rpm_put(master);
3791 put_device(&master->dev);
3792
3793 return ret;
3794}
3795EXPORT_SYMBOL_GPL(i3c_master_register);
3796
3797/**
3798 * i3c_master_unregister() - unregister an I3C master
3799 * @master: master used to send frames on the bus
3800 *
3801 * Basically undo everything done in i3c_master_register().
3802 */
3803void i3c_master_unregister(struct i3c_master_controller *master)
3804{
3805 i3c_bus_notify(&master->bus, I3C_NOTIFY_BUS_REMOVE);
3806 i3c_master_shutdown(master);
3807
3808 if (master->ops->set_dev_nack_retry)
3809 device_remove_file(&master->dev, &dev_attr_dev_nack_retry_count);
3810
3811 i3c_master_i2c_adapter_cleanup(master);
3812 i3c_master_unregister_i3c_devs(master);
3813 i3c_master_bus_cleanup(master);
3814 pm_runtime_disable(&master->dev);
3815 device_unregister(&master->dev);
3816}
3817EXPORT_SYMBOL_GPL(i3c_master_unregister);
3818
3819int i3c_dev_setdasa_locked(struct i3c_dev_desc *dev)
3820{
3821 struct i3c_master_controller *master;
3822
3823 if (!dev)
3824 return -ENOENT;
3825
3826 master = i3c_dev_get_master(dev);
3827 if (!master)
3828 return -EINVAL;
3829
3830 if (!dev->boardinfo || !dev->boardinfo->init_dyn_addr ||
3831 !dev->boardinfo->static_addr)
3832 return -EINVAL;
3833
3834 return i3c_master_setdasa_locked(master, dev->info.static_addr,
3835 dev->boardinfo->init_dyn_addr);
3836}
3837
3838int i3c_dev_do_xfers_locked(struct i3c_dev_desc *dev, struct i3c_xfer *xfers,
3839 int nxfers, enum i3c_xfer_mode mode)
3840{
3841 struct i3c_master_controller *master;
3842
3843 if (!dev)
3844 return -ENOENT;
3845
3846 master = i3c_dev_get_master(dev);
3847 if (!master || !xfers)
3848 return -EINVAL;
3849
3850 if (mode != I3C_SDR && !(master->this->info.hdr_cap & BIT(mode)))
3851 return -EOPNOTSUPP;
3852
3853 return master->ops->i3c_xfers(dev, xfers, nxfers, mode);
3854}
3855
3856/**
3857 * i3c_dev_disable_ibi_locked() - Disable IBIs coming from a specific device
3858 * @dev: device on which IBIs should be disabled
3859 *
3860 * This function disable IBIs coming from a specific device and wait for
3861 * all pending IBIs to be processed.
3862 *
3863 * Context: Must be called with mutex_lock(&dev->desc->ibi_lock) held.
3864 * Return: 0 in case of success, a negative error core otherwise.
3865 */
3866int i3c_dev_disable_ibi_locked(struct i3c_dev_desc *dev)
3867{
3868 struct i3c_master_controller *master;
3869 int ret;
3870
3871 if (!dev->ibi)
3872 return -EINVAL;
3873
3874 master = i3c_dev_get_master(dev);
3875 ret = master->ops->disable_ibi(dev);
3876 if (ret)
3877 return ret;
3878
3879 reinit_completion(&dev->ibi->all_ibis_handled);
3880 if (atomic_read(&dev->ibi->pending_ibis))
3881 wait_for_completion(&dev->ibi->all_ibis_handled);
3882
3883 dev->ibi->enabled = false;
3884
3885 return 0;
3886}
3887EXPORT_SYMBOL_GPL(i3c_dev_disable_ibi_locked);
3888
3889/**
3890 * i3c_dev_enable_ibi_locked() - Enable IBIs from a specific device (lock held)
3891 * @dev: device on which IBIs should be enabled
3892 *
3893 * This function enable IBIs coming from a specific device and wait for
3894 * all pending IBIs to be processed. This should be called on a device
3895 * where i3c_device_request_ibi() has succeeded.
3896 *
3897 * Note that IBIs from this device might be received before this function
3898 * returns to its caller.
3899 *
3900 * Context: Must be called with mutex_lock(&dev->desc->ibi_lock) held.
3901 * Return: 0 on success, or a negative error code on failure.
3902 */
3903int i3c_dev_enable_ibi_locked(struct i3c_dev_desc *dev)
3904{
3905 struct i3c_master_controller *master = i3c_dev_get_master(dev);
3906 int ret;
3907
3908 if (!dev->ibi)
3909 return -EINVAL;
3910
3911 ret = master->ops->enable_ibi(dev);
3912 if (!ret)
3913 dev->ibi->enabled = true;
3914
3915 return ret;
3916}
3917EXPORT_SYMBOL_GPL(i3c_dev_enable_ibi_locked);
3918
3919/**
3920 * i3c_dev_request_ibi_locked() - Request an IBI
3921 * @dev: device for which we should enable IBIs
3922 * @req: setup requested for this IBI
3923 *
3924 * This function is responsible for pre-allocating all resources needed to
3925 * process IBIs coming from @dev. When this function returns, the IBI is not
3926 * enabled until i3c_device_enable_ibi() is called.
3927 *
3928 * Context: Must be called with mutex_lock(&dev->desc->ibi_lock) held.
3929 * Return: 0 in case of success, a negative error core otherwise.
3930 */
3931int i3c_dev_request_ibi_locked(struct i3c_dev_desc *dev,
3932 const struct i3c_ibi_setup *req)
3933{
3934 struct i3c_master_controller *master = i3c_dev_get_master(dev);
3935 struct i3c_device_ibi_info *ibi;
3936 int ret;
3937
3938 if (!master->ops->request_ibi)
3939 return -EOPNOTSUPP;
3940
3941 if (dev->ibi)
3942 return -EBUSY;
3943
3944 ibi = kzalloc_obj(*ibi);
3945 if (!ibi)
3946 return -ENOMEM;
3947
3948 ibi->wq = alloc_ordered_workqueue(dev_name(i3cdev_to_dev(dev->dev)), WQ_MEM_RECLAIM);
3949 if (!ibi->wq) {
3950 kfree(ibi);
3951 return -ENOMEM;
3952 }
3953
3954 atomic_set(&ibi->pending_ibis, 0);
3955 init_completion(&ibi->all_ibis_handled);
3956 ibi->handler = req->handler;
3957 ibi->max_payload_len = req->max_payload_len;
3958 ibi->num_slots = req->num_slots;
3959
3960 dev->ibi = ibi;
3961 ret = master->ops->request_ibi(dev, req);
3962 if (ret) {
3963 kfree(ibi);
3964 dev->ibi = NULL;
3965 }
3966
3967 return ret;
3968}
3969EXPORT_SYMBOL_GPL(i3c_dev_request_ibi_locked);
3970
3971/**
3972 * i3c_dev_free_ibi_locked() - Free all resources needed for IBI handling
3973 * @dev: device on which you want to release IBI resources
3974 *
3975 * This function is responsible for de-allocating resources previously
3976 * allocated by i3c_device_request_ibi(). It should be called after disabling
3977 * IBIs with i3c_device_disable_ibi().
3978 *
3979 * Context: Must be called with mutex_lock(&dev->desc->ibi_lock) held.
3980 */
3981void i3c_dev_free_ibi_locked(struct i3c_dev_desc *dev)
3982{
3983 struct i3c_master_controller *master = i3c_dev_get_master(dev);
3984
3985 if (!dev->ibi)
3986 return;
3987
3988 if (dev->ibi->enabled) {
3989 int ret;
3990
3991 dev_err(&master->dev, "Freeing IBI that is still enabled\n");
3992 ret = i3c_master_rpm_get(master);
3993 if (!ret) {
3994 ret = i3c_dev_disable_ibi_locked(dev);
3995 i3c_master_rpm_put(master);
3996 }
3997 if (ret)
3998 dev_err(&master->dev, "Failed to disable IBI before freeing\n");
3999 }
4000
4001 master->ops->free_ibi(dev);
4002
4003 if (dev->ibi->wq) {
4004 destroy_workqueue(dev->ibi->wq);
4005 dev->ibi->wq = NULL;
4006 }
4007
4008 kfree(dev->ibi);
4009 dev->ibi = NULL;
4010}
4011EXPORT_SYMBOL_GPL(i3c_dev_free_ibi_locked);
4012
4013static int __init i3c_init(void)
4014{
4015 int res;
4016
4017 res = of_alias_get_highest_id("i3c");
4018 if (res >= 0) {
4019 mutex_lock(&i3c_core_lock);
4020 __i3c_first_dynamic_bus_num = res + 1;
4021 mutex_unlock(&i3c_core_lock);
4022 }
4023
4024 res = bus_register_notifier(&i2c_bus_type, &i2cdev_notifier);
4025 if (res)
4026 return res;
4027
4028 res = bus_register(&i3c_bus_type);
4029 if (res)
4030 goto out_unreg_notifier;
4031
4032 return 0;
4033
4034out_unreg_notifier:
4035 bus_unregister_notifier(&i2c_bus_type, &i2cdev_notifier);
4036
4037 return res;
4038}
4039subsys_initcall(i3c_init);
4040
4041static void __exit i3c_exit(void)
4042{
4043 bus_unregister_notifier(&i2c_bus_type, &i2cdev_notifier);
4044 idr_destroy(&i3c_bus_idr);
4045 bus_unregister(&i3c_bus_type);
4046}
4047module_exit(i3c_exit);
4048
4049MODULE_AUTHOR("Boris Brezillon <[email protected]>");
4050MODULE_DESCRIPTION("I3C core");
4051MODULE_LICENSE("GPL v2");