Lines Matching full:master

12 #include <linux/i3c/master.h>
414 to_cdns_i3c_master(struct i3c_master_controller *master) in to_cdns_i3c_master() argument
416 return container_of(master, struct cdns_i3c_master, base); in to_cdns_i3c_master()
419 static void cdns_i3c_master_wr_to_tx_fifo(struct cdns_i3c_master *master, in cdns_i3c_master_wr_to_tx_fifo() argument
422 writesl(master->regs + TX_FIFO, bytes, nbytes / 4); in cdns_i3c_master_wr_to_tx_fifo()
427 writesl(master->regs + TX_FIFO, &tmp, 1); in cdns_i3c_master_wr_to_tx_fifo()
431 static void cdns_i3c_master_rd_from_rx_fifo(struct cdns_i3c_master *master, in cdns_i3c_master_rd_from_rx_fifo() argument
434 readsl(master->regs + RX_FIFO, bytes, nbytes / 4); in cdns_i3c_master_rd_from_rx_fifo()
438 readsl(master->regs + RX_FIFO, &tmp, 1); in cdns_i3c_master_rd_from_rx_fifo()
484 static int cdns_i3c_master_disable(struct cdns_i3c_master *master) in cdns_i3c_master_disable() argument
488 writel(readl(master->regs + CTRL) & ~CTRL_DEV_EN, master->regs + CTRL); in cdns_i3c_master_disable()
490 return readl_poll_timeout(master->regs + MST_STATUS0, status, in cdns_i3c_master_disable()
494 static void cdns_i3c_master_enable(struct cdns_i3c_master *master) in cdns_i3c_master_enable() argument
496 writel(readl(master->regs + CTRL) | CTRL_DEV_EN, master->regs + CTRL); in cdns_i3c_master_enable()
500 cdns_i3c_master_alloc_xfer(struct cdns_i3c_master *master, unsigned int ncmds) in cdns_i3c_master_alloc_xfer() argument
520 static void cdns_i3c_master_start_xfer_locked(struct cdns_i3c_master *master) in cdns_i3c_master_start_xfer_locked() argument
522 struct cdns_i3c_xfer *xfer = master->xferqueue.cur; in cdns_i3c_master_start_xfer_locked()
528 writel(MST_INT_CMDD_EMP, master->regs + MST_ICR); in cdns_i3c_master_start_xfer_locked()
532 cdns_i3c_master_wr_to_tx_fifo(master, cmd->tx_buf, in cdns_i3c_master_start_xfer_locked()
540 master->regs + CMD1_FIFO); in cdns_i3c_master_start_xfer_locked()
541 writel(cmd->cmd0, master->regs + CMD0_FIFO); in cdns_i3c_master_start_xfer_locked()
544 writel(readl(master->regs + CTRL) | CTRL_MCS, in cdns_i3c_master_start_xfer_locked()
545 master->regs + CTRL); in cdns_i3c_master_start_xfer_locked()
546 writel(MST_INT_CMDD_EMP, master->regs + MST_IER); in cdns_i3c_master_start_xfer_locked()
549 static void cdns_i3c_master_end_xfer_locked(struct cdns_i3c_master *master, in cdns_i3c_master_end_xfer_locked() argument
552 struct cdns_i3c_xfer *xfer = master->xferqueue.cur; in cdns_i3c_master_end_xfer_locked()
562 writel(MST_INT_CMDD_EMP, master->regs + MST_IDR); in cdns_i3c_master_end_xfer_locked()
564 for (status0 = readl(master->regs + MST_STATUS0); in cdns_i3c_master_end_xfer_locked()
566 status0 = readl(master->regs + MST_STATUS0)) { in cdns_i3c_master_end_xfer_locked()
570 cmdr = readl(master->regs + CMDR); in cdns_i3c_master_end_xfer_locked()
579 cdns_i3c_master_rd_from_rx_fifo(master, cmd->rx_buf, rx_len); in cdns_i3c_master_end_xfer_locked()
614 xfer = list_first_entry_or_null(&master->xferqueue.list, in cdns_i3c_master_end_xfer_locked()
619 master->xferqueue.cur = xfer; in cdns_i3c_master_end_xfer_locked()
620 cdns_i3c_master_start_xfer_locked(master); in cdns_i3c_master_end_xfer_locked()
623 static void cdns_i3c_master_queue_xfer(struct cdns_i3c_master *master, in cdns_i3c_master_queue_xfer() argument
629 spin_lock_irqsave(&master->xferqueue.lock, flags); in cdns_i3c_master_queue_xfer()
630 if (master->xferqueue.cur) { in cdns_i3c_master_queue_xfer()
631 list_add_tail(&xfer->node, &master->xferqueue.list); in cdns_i3c_master_queue_xfer()
633 master->xferqueue.cur = xfer; in cdns_i3c_master_queue_xfer()
634 cdns_i3c_master_start_xfer_locked(master); in cdns_i3c_master_queue_xfer()
636 spin_unlock_irqrestore(&master->xferqueue.lock, flags); in cdns_i3c_master_queue_xfer()
639 static void cdns_i3c_master_unqueue_xfer(struct cdns_i3c_master *master, in cdns_i3c_master_unqueue_xfer() argument
644 spin_lock_irqsave(&master->xferqueue.lock, flags); in cdns_i3c_master_unqueue_xfer()
645 if (master->xferqueue.cur == xfer) { in cdns_i3c_master_unqueue_xfer()
648 writel(readl(master->regs + CTRL) & ~CTRL_DEV_EN, in cdns_i3c_master_unqueue_xfer()
649 master->regs + CTRL); in cdns_i3c_master_unqueue_xfer()
650 readl_poll_timeout_atomic(master->regs + MST_STATUS0, status, in cdns_i3c_master_unqueue_xfer()
653 master->xferqueue.cur = NULL; in cdns_i3c_master_unqueue_xfer()
656 master->regs + FLUSH_CTRL); in cdns_i3c_master_unqueue_xfer()
657 writel(MST_INT_CMDD_EMP, master->regs + MST_IDR); in cdns_i3c_master_unqueue_xfer()
658 writel(readl(master->regs + CTRL) | CTRL_DEV_EN, in cdns_i3c_master_unqueue_xfer()
659 master->regs + CTRL); in cdns_i3c_master_unqueue_xfer()
663 spin_unlock_irqrestore(&master->xferqueue.lock, flags); in cdns_i3c_master_unqueue_xfer()
689 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_send_ccc_cmd() local
694 xfer = cdns_i3c_master_alloc_xfer(master, 1); in cdns_i3c_master_send_ccc_cmd()
715 cdns_i3c_master_queue_xfer(master, xfer); in cdns_i3c_master_send_ccc_cmd()
717 cdns_i3c_master_unqueue_xfer(master, xfer); in cdns_i3c_master_send_ccc_cmd()
731 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_priv_xfers() local
743 if (nxfers > master->caps.cmdfifodepth || in cdns_i3c_master_priv_xfers()
744 nxfers > master->caps.cmdrfifodepth) in cdns_i3c_master_priv_xfers()
758 if (rxslots > master->caps.rxfifodepth || in cdns_i3c_master_priv_xfers()
759 txslots > master->caps.txfifodepth) in cdns_i3c_master_priv_xfers()
762 cdns_xfer = cdns_i3c_master_alloc_xfer(master, nxfers); in cdns_i3c_master_priv_xfers()
792 cdns_i3c_master_queue_xfer(master, cdns_xfer); in cdns_i3c_master_priv_xfers()
795 cdns_i3c_master_unqueue_xfer(master, cdns_xfer); in cdns_i3c_master_priv_xfers()
811 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_i2c_xfers() local
816 if (nxfers > master->caps.cmdfifodepth) in cdns_i3c_master_i2c_xfers()
829 if (ntxwords > master->caps.txfifodepth || in cdns_i3c_master_i2c_xfers()
830 nrxwords > master->caps.rxfifodepth) in cdns_i3c_master_i2c_xfers()
833 xfer = cdns_i3c_master_alloc_xfer(master, nxfers); in cdns_i3c_master_i2c_xfers()
857 cdns_i3c_master_queue_xfer(master, xfer); in cdns_i3c_master_i2c_xfers()
859 cdns_i3c_master_unqueue_xfer(master, xfer); in cdns_i3c_master_i2c_xfers()
893 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_upd_i3c_addr() local
900 writel(DEV_ID_RR0_IS_I3C | rr, master->regs + DEV_ID_RR0(data->id)); in cdns_i3c_master_upd_i3c_addr()
903 static int cdns_i3c_master_get_rr_slot(struct cdns_i3c_master *master, in cdns_i3c_master_get_rr_slot() argument
911 if (!master->free_rr_slots) in cdns_i3c_master_get_rr_slot()
914 return ffs(master->free_rr_slots) - 1; in cdns_i3c_master_get_rr_slot()
917 activedevs = readl(master->regs + DEVS_CTRL) & DEVS_CTRL_DEVS_ACTIVE_MASK; in cdns_i3c_master_get_rr_slot()
920 for_each_set_bit(i, &activedevs, master->maxdevs + 1) { in cdns_i3c_master_get_rr_slot()
921 rr = readl(master->regs + DEV_ID_RR0(i)); in cdns_i3c_master_get_rr_slot()
943 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_attach_i3c_dev() local
951 slot = cdns_i3c_master_get_rr_slot(master, dev->info.dyn_addr); in cdns_i3c_master_attach_i3c_dev()
960 master->free_rr_slots &= ~BIT(slot); in cdns_i3c_master_attach_i3c_dev()
964 writel(readl(master->regs + DEVS_CTRL) | in cdns_i3c_master_attach_i3c_dev()
966 master->regs + DEVS_CTRL); in cdns_i3c_master_attach_i3c_dev()
975 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_detach_i3c_dev() local
978 writel(readl(master->regs + DEVS_CTRL) | in cdns_i3c_master_detach_i3c_dev()
980 master->regs + DEVS_CTRL); in cdns_i3c_master_detach_i3c_dev()
983 master->free_rr_slots |= BIT(data->id); in cdns_i3c_master_detach_i3c_dev()
990 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_attach_i2c_dev() local
994 slot = cdns_i3c_master_get_rr_slot(master, 0); in cdns_i3c_master_attach_i2c_dev()
1003 master->free_rr_slots &= ~BIT(slot); in cdns_i3c_master_attach_i2c_dev()
1007 master->regs + DEV_ID_RR0(data->id)); in cdns_i3c_master_attach_i2c_dev()
1008 writel(dev->lvr, master->regs + DEV_ID_RR2(data->id)); in cdns_i3c_master_attach_i2c_dev()
1009 writel(readl(master->regs + DEVS_CTRL) | in cdns_i3c_master_attach_i2c_dev()
1011 master->regs + DEVS_CTRL); in cdns_i3c_master_attach_i2c_dev()
1019 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_detach_i2c_dev() local
1022 writel(readl(master->regs + DEVS_CTRL) | in cdns_i3c_master_detach_i2c_dev()
1024 master->regs + DEVS_CTRL); in cdns_i3c_master_detach_i2c_dev()
1025 master->free_rr_slots |= BIT(data->id); in cdns_i3c_master_detach_i2c_dev()
1033 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_bus_cleanup() local
1035 cdns_i3c_master_disable(master); in cdns_i3c_master_bus_cleanup()
1038 static void cdns_i3c_master_dev_rr_to_info(struct cdns_i3c_master *master, in cdns_i3c_master_dev_rr_to_info() argument
1045 rr = readl(master->regs + DEV_ID_RR0(slot)); in cdns_i3c_master_dev_rr_to_info()
1047 rr = readl(master->regs + DEV_ID_RR2(slot)); in cdns_i3c_master_dev_rr_to_info()
1051 info->pid |= (u64)readl(master->regs + DEV_ID_RR1(slot)) << 16; in cdns_i3c_master_dev_rr_to_info()
1054 static void cdns_i3c_master_upd_i3c_scl_lim(struct cdns_i3c_master *master) in cdns_i3c_master_upd_i3c_scl_lim() argument
1056 struct i3c_master_controller *m = &master->base; in cdns_i3c_master_upd_i3c_scl_lim()
1093 if (new_i3c_scl_lim == master->i3c_scl_lim) in cdns_i3c_master_upd_i3c_scl_lim()
1095 master->i3c_scl_lim = new_i3c_scl_lim; in cdns_i3c_master_upd_i3c_scl_lim()
1101 prescl1 = readl(master->regs + PRESCL_CTRL1) & in cdns_i3c_master_upd_i3c_scl_lim()
1103 ctrl = readl(master->regs + CTRL); in cdns_i3c_master_upd_i3c_scl_lim()
1105 i3c_lim_period = DIV_ROUND_UP(1000000000, master->i3c_scl_lim); in cdns_i3c_master_upd_i3c_scl_lim()
1114 /* Disable I3C master before updating PRESCL_CTRL1. */ in cdns_i3c_master_upd_i3c_scl_lim()
1116 cdns_i3c_master_disable(master); in cdns_i3c_master_upd_i3c_scl_lim()
1118 writel(prescl1, master->regs + PRESCL_CTRL1); in cdns_i3c_master_upd_i3c_scl_lim()
1121 cdns_i3c_master_enable(master); in cdns_i3c_master_upd_i3c_scl_lim()
1126 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_do_daa() local
1132 olddevs = readl(master->regs + DEVS_CTRL) & DEVS_CTRL_DEVS_ACTIVE_MASK; in cdns_i3c_master_do_daa()
1136 for_each_clear_bit(slot, &olddevs, master->maxdevs + 1) { in cdns_i3c_master_do_daa()
1144 master->regs + DEV_ID_RR0(slot)); in cdns_i3c_master_do_daa()
1145 writel(0, master->regs + DEV_ID_RR1(slot)); in cdns_i3c_master_do_daa()
1146 writel(0, master->regs + DEV_ID_RR2(slot)); in cdns_i3c_master_do_daa()
1149 ret = i3c_master_entdaa_locked(&master->base); in cdns_i3c_master_do_daa()
1153 newdevs = readl(master->regs + DEVS_CTRL) & DEVS_CTRL_DEVS_ACTIVE_MASK; in cdns_i3c_master_do_daa()
1160 for_each_set_bit(slot, &newdevs, master->maxdevs + 1) in cdns_i3c_master_do_daa()
1169 writel(readl(master->regs + DEVS_CTRL) | in cdns_i3c_master_do_daa()
1170 master->free_rr_slots << DEVS_CTRL_DEV_CLR_SHIFT, in cdns_i3c_master_do_daa()
1171 master->regs + DEVS_CTRL); in cdns_i3c_master_do_daa()
1173 i3c_master_defslvs_locked(&master->base); in cdns_i3c_master_do_daa()
1175 cdns_i3c_master_upd_i3c_scl_lim(master); in cdns_i3c_master_do_daa()
1186 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_bus_init() local
1210 sysclk_rate = clk_get_rate(master->sysclk); in cdns_i3c_master_bus_init()
1234 writel(prescl0, master->regs + PRESCL_CTRL0); in cdns_i3c_master_bus_init()
1242 writel(prescl1, master->regs + PRESCL_CTRL1); in cdns_i3c_master_bus_init()
1244 /* Get an address for the master. */ in cdns_i3c_master_bus_init()
1250 master->regs + DEV_ID_RR0(0)); in cdns_i3c_master_bus_init()
1252 cdns_i3c_master_dev_rr_to_info(master, 0, &info); in cdns_i3c_master_bus_init()
1256 ret = i3c_master_set_info(&master->base, &info); in cdns_i3c_master_bus_init()
1267 writel(ctrl, master->regs + CTRL); in cdns_i3c_master_bus_init()
1269 cdns_i3c_master_enable(master); in cdns_i3c_master_bus_init()
1274 static void cdns_i3c_master_handle_ibi(struct cdns_i3c_master *master, in cdns_i3c_master_handle_ibi() argument
1289 if (id >= master->ibi.num_slots || (ibir & IBIR_ERROR)) in cdns_i3c_master_handle_ibi()
1292 dev = master->ibi.slots[id]; in cdns_i3c_master_handle_ibi()
1293 spin_lock(&master->ibi.lock); in cdns_i3c_master_handle_ibi()
1303 readsl(master->regs + IBI_DATA_FIFO, buf, nbytes / 4); in cdns_i3c_master_handle_ibi()
1305 u32 tmp = __raw_readl(master->regs + IBI_DATA_FIFO); in cdns_i3c_master_handle_ibi()
1316 spin_unlock(&master->ibi.lock); in cdns_i3c_master_handle_ibi()
1324 readl(master->regs + IBI_DATA_FIFO); in cdns_i3c_master_handle_ibi()
1328 static void cnds_i3c_master_demux_ibis(struct cdns_i3c_master *master) in cnds_i3c_master_demux_ibis() argument
1332 writel(MST_INT_IBIR_THR, master->regs + MST_ICR); in cnds_i3c_master_demux_ibis()
1334 for (status0 = readl(master->regs + MST_STATUS0); in cnds_i3c_master_demux_ibis()
1336 status0 = readl(master->regs + MST_STATUS0)) { in cnds_i3c_master_demux_ibis()
1337 u32 ibir = readl(master->regs + IBIR); in cnds_i3c_master_demux_ibis()
1341 cdns_i3c_master_handle_ibi(master, ibir); in cnds_i3c_master_demux_ibis()
1346 queue_work(master->base.wq, &master->hj_work); in cnds_i3c_master_demux_ibis()
1359 struct cdns_i3c_master *master = data; in cdns_i3c_master_interrupt() local
1362 status = readl(master->regs + MST_ISR); in cdns_i3c_master_interrupt()
1363 if (!(status & readl(master->regs + MST_IMR))) in cdns_i3c_master_interrupt()
1366 spin_lock(&master->xferqueue.lock); in cdns_i3c_master_interrupt()
1367 cdns_i3c_master_end_xfer_locked(master, status); in cdns_i3c_master_interrupt()
1368 spin_unlock(&master->xferqueue.lock); in cdns_i3c_master_interrupt()
1371 cnds_i3c_master_demux_ibis(master); in cdns_i3c_master_interrupt()
1379 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_disable_ibi() local
1390 spin_lock_irqsave(&master->ibi.lock, flags); in cdns_i3c_master_disable_ibi()
1391 sirmap = readl(master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_disable_ibi()
1395 writel(sirmap, master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_disable_ibi()
1396 spin_unlock_irqrestore(&master->ibi.lock, flags); in cdns_i3c_master_disable_ibi()
1404 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_enable_ibi() local
1410 spin_lock_irqsave(&master->ibi.lock, flags); in cdns_i3c_master_enable_ibi()
1411 sirmap = readl(master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_enable_ibi()
1422 writel(sirmap, master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_enable_ibi()
1423 spin_unlock_irqrestore(&master->ibi.lock, flags); in cdns_i3c_master_enable_ibi()
1428 spin_lock_irqsave(&master->ibi.lock, flags); in cdns_i3c_master_enable_ibi()
1429 sirmap = readl(master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_enable_ibi()
1433 writel(sirmap, master->regs + SIR_MAP_DEV_REG(data->ibi)); in cdns_i3c_master_enable_ibi()
1434 spin_unlock_irqrestore(&master->ibi.lock, flags); in cdns_i3c_master_enable_ibi()
1444 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_request_ibi() local
1453 spin_lock_irqsave(&master->ibi.lock, flags); in cdns_i3c_master_request_ibi()
1454 for (i = 0; i < master->ibi.num_slots; i++) { in cdns_i3c_master_request_ibi()
1455 if (!master->ibi.slots[i]) { in cdns_i3c_master_request_ibi()
1457 master->ibi.slots[i] = dev; in cdns_i3c_master_request_ibi()
1461 spin_unlock_irqrestore(&master->ibi.lock, flags); in cdns_i3c_master_request_ibi()
1463 if (i < master->ibi.num_slots) in cdns_i3c_master_request_ibi()
1475 struct cdns_i3c_master *master = to_cdns_i3c_master(m); in cdns_i3c_master_free_ibi() local
1479 spin_lock_irqsave(&master->ibi.lock, flags); in cdns_i3c_master_free_ibi()
1480 master->ibi.slots[data->ibi] = NULL; in cdns_i3c_master_free_ibi()
1482 spin_unlock_irqrestore(&master->ibi.lock, flags); in cdns_i3c_master_free_ibi()
1517 struct cdns_i3c_master *master = container_of(work, in cdns_i3c_master_hj() local
1521 i3c_master_do_daa(&master->base); in cdns_i3c_master_hj()
1526 struct cdns_i3c_master *master; in cdns_i3c_master_probe() local
1531 master = devm_kzalloc(&pdev->dev, sizeof(*master), GFP_KERNEL); in cdns_i3c_master_probe()
1532 if (!master) in cdns_i3c_master_probe()
1536 master->regs = devm_ioremap_resource(&pdev->dev, res); in cdns_i3c_master_probe()
1537 if (IS_ERR(master->regs)) in cdns_i3c_master_probe()
1538 return PTR_ERR(master->regs); in cdns_i3c_master_probe()
1540 master->pclk = devm_clk_get(&pdev->dev, "pclk"); in cdns_i3c_master_probe()
1541 if (IS_ERR(master->pclk)) in cdns_i3c_master_probe()
1542 return PTR_ERR(master->pclk); in cdns_i3c_master_probe()
1544 master->sysclk = devm_clk_get(&pdev->dev, "sysclk"); in cdns_i3c_master_probe()
1545 if (IS_ERR(master->sysclk)) in cdns_i3c_master_probe()
1546 return PTR_ERR(master->sysclk); in cdns_i3c_master_probe()
1552 ret = clk_prepare_enable(master->pclk); in cdns_i3c_master_probe()
1556 ret = clk_prepare_enable(master->sysclk); in cdns_i3c_master_probe()
1560 if (readl(master->regs + DEV_ID) != DEV_ID_I3C_MASTER) { in cdns_i3c_master_probe()
1565 spin_lock_init(&master->xferqueue.lock); in cdns_i3c_master_probe()
1566 INIT_LIST_HEAD(&master->xferqueue.list); in cdns_i3c_master_probe()
1568 INIT_WORK(&master->hj_work, cdns_i3c_master_hj); in cdns_i3c_master_probe()
1569 writel(0xffffffff, master->regs + MST_IDR); in cdns_i3c_master_probe()
1570 writel(0xffffffff, master->regs + SLV_IDR); in cdns_i3c_master_probe()
1572 dev_name(&pdev->dev), master); in cdns_i3c_master_probe()
1576 platform_set_drvdata(pdev, master); in cdns_i3c_master_probe()
1578 val = readl(master->regs + CONF_STATUS0); in cdns_i3c_master_probe()
1580 /* Device ID0 is reserved to describe this master. */ in cdns_i3c_master_probe()
1581 master->maxdevs = CONF_STATUS0_DEVS_NUM(val); in cdns_i3c_master_probe()
1582 master->free_rr_slots = GENMASK(master->maxdevs, 1); in cdns_i3c_master_probe()
1584 val = readl(master->regs + CONF_STATUS1); in cdns_i3c_master_probe()
1585 master->caps.cmdfifodepth = CONF_STATUS1_CMD_DEPTH(val); in cdns_i3c_master_probe()
1586 master->caps.rxfifodepth = CONF_STATUS1_RX_DEPTH(val); in cdns_i3c_master_probe()
1587 master->caps.txfifodepth = CONF_STATUS1_TX_DEPTH(val); in cdns_i3c_master_probe()
1588 master->caps.ibirfifodepth = CONF_STATUS0_IBIR_DEPTH(val); in cdns_i3c_master_probe()
1589 master->caps.cmdrfifodepth = CONF_STATUS0_CMDR_DEPTH(val); in cdns_i3c_master_probe()
1591 spin_lock_init(&master->ibi.lock); in cdns_i3c_master_probe()
1592 master->ibi.num_slots = CONF_STATUS1_IBI_HW_RES(val); in cdns_i3c_master_probe()
1593 master->ibi.slots = devm_kcalloc(&pdev->dev, master->ibi.num_slots, in cdns_i3c_master_probe()
1594 sizeof(*master->ibi.slots), in cdns_i3c_master_probe()
1596 if (!master->ibi.slots) in cdns_i3c_master_probe()
1599 writel(IBIR_THR(1), master->regs + CMD_IBI_THR_CTRL); in cdns_i3c_master_probe()
1600 writel(MST_INT_IBIR_THR, master->regs + MST_IER); in cdns_i3c_master_probe()
1601 writel(DEVS_CTRL_DEV_CLR_ALL, master->regs + DEVS_CTRL); in cdns_i3c_master_probe()
1603 ret = i3c_master_register(&master->base, &pdev->dev, in cdns_i3c_master_probe()
1611 clk_disable_unprepare(master->sysclk); in cdns_i3c_master_probe()
1614 clk_disable_unprepare(master->pclk); in cdns_i3c_master_probe()
1621 struct cdns_i3c_master *master = platform_get_drvdata(pdev); in cdns_i3c_master_remove() local
1624 ret = i3c_master_unregister(&master->base); in cdns_i3c_master_remove()
1628 clk_disable_unprepare(master->sysclk); in cdns_i3c_master_remove()
1629 clk_disable_unprepare(master->pclk); in cdns_i3c_master_remove()
1635 { .compatible = "cdns,i3c-master" },
1643 .name = "cdns-i3c-master",
1650 MODULE_DESCRIPTION("Cadence I3C master driver");
1652 MODULE_ALIAS("platform:cdns-i3c-master");