Lines Matching refs:hci
18 #include "hci.h"
40 #define rhs_reg_read(r) readl(hci->RHS_regs + (RHS_##r))
41 #define rhs_reg_write(r, v) writel(v, hci->RHS_regs + (RHS_##r))
165 static void hci_dma_cleanup(struct i3c_hci *hci)
167 struct hci_rings_data *rings = hci->io_data;
183 dma_free_coherent(&hci->master.dev,
187 dma_free_coherent(&hci->master.dev,
192 dma_free_coherent(&hci->master.dev,
196 dma_unmap_single(&hci->master.dev, rh->ibi_data_dma,
205 hci->io_data = NULL;
208 static int hci_dma_init(struct i3c_hci *hci)
219 dev_info(&hci->master.dev, "%d DMA rings available\n", nr_rings);
221 dev_err(&hci->master.dev, "number of rings should be <= 8\n");
229 hci->io_data = rings;
235 dev_info(&hci->master.dev, "Ring %d at offset %#x\n", i, offset);
240 rh->regs = hci->base_regs + offset;
254 rh->xfer = dma_alloc_coherent(&hci->master.dev, xfers_sz,
256 rh->resp = dma_alloc_coherent(&hci->master.dev, resps_sz,
300 dma_alloc_coherent(&hci->master.dev, ibi_status_ring_sz,
307 dma_map_single(&hci->master.dev, rh->ibi_data,
309 if (dma_mapping_error(&hci->master.dev, rh->ibi_data_dma)) {
336 hci_dma_cleanup(hci);
340 static void hci_dma_unmap_xfer(struct i3c_hci *hci,
348 dma_unmap_single(&hci->master.dev,
354 static int hci_dma_queue_xfer(struct i3c_hci *hci,
357 struct hci_rings_data *rings = hci->io_data;
375 if (hci->cmd == &mipi_i3c_hci_cmd_v2) {
390 dma_map_single(&hci->master.dev,
396 if (dma_mapping_error(&hci->master.dev,
398 hci_dma_unmap_xfer(hci, xfer_list, i);
423 hci_dma_unmap_xfer(hci, xfer_list, i + 1);
439 static bool hci_dma_dequeue_xfer(struct i3c_hci *hci,
442 struct hci_rings_data *rings = hci->io_data;
455 dev_crit(&hci->master.dev, "unable to abort the ring\n");
474 if (hci->cmd == &mipi_i3c_hci_cmd_v2) {
483 hci_dma_unmap_xfer(hci, xfer, 1);
495 static void hci_dma_xfer_done(struct i3c_hci *hci, struct hci_rh_data *rh)
515 hci_dma_unmap_xfer(hci, xfer, 1);
519 dev_err(&hci->master.dev,
541 static int hci_dma_request_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev,
562 static void hci_dma_free_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev)
572 static void hci_dma_recycle_ibi_slot(struct i3c_hci *hci,
582 static void hci_dma_process_ibi(struct i3c_hci *hci, struct hci_rh_data *rh)
650 dev_err(&hci->master.dev, "IBI error from %#x\n", ibi_addr);
655 dev = i3c_hci_addr_to_dev(hci, ibi_addr);
657 dev_err(&hci->master.dev,
665 dev_err(&hci->master.dev, "IBI payload too big (%d > %d)\n",
682 dev_err(&hci->master.dev, "no free slot for IBI\n");
694 dma_sync_single_for_cpu(&hci->master.dev, ring_ibi_data_dma,
703 dma_sync_single_for_cpu(&hci->master.dev, ring_ibi_data_dma,
731 static bool hci_dma_irq_handler(struct i3c_hci *hci, unsigned int mask)
733 struct hci_rings_data *rings = hci->io_data;
753 hci_dma_process_ibi(hci, rh);
755 hci_dma_xfer_done(hci, rh);
760 dev_notice_ratelimited(&hci->master.dev,
763 dev_warn_ratelimited(&hci->master.dev,
766 dev_err_ratelimited(&hci->master.dev,