gpi_dev
dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n",
dev_err(gpii->gpi_dev->dev, "Event without a pending descriptor!\n");
dev_err(gpii->gpi_dev->dev,
dev_err(gpii->gpi_dev->dev, "Error in Transaction\n");
dev_dbg(gpii->gpi_dev->dev, "Transaction Success\n");
dev_dbg(gpii->gpi_dev->dev, "Residue %d\n", result.residue);
dev_dbg(gpii->gpi_dev->dev,
dev_dbg(gpii->gpi_dev->dev, "stale event, not processing\n");
dev_dbg(gpii->gpi_dev->dev, "QUP_NOTIF_EV_TYPE\n");
dev_dbg(gpii->gpi_dev->dev,
dev_err(gpii->gpi_dev->dev, "not processing any events, pm_state:%s\n",
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
dev_err(gpii->gpi_dev->dev, "error with cmd:%s ret:%d\n",
dma_free_coherent(gpii->gpi_dev->dev, ring->alloc_size,
dev_dbg(gpii->gpi_dev->dev,
ring->pre_aligned = dma_alloc_coherent(gpii->gpi_dev->dev,
dev_err(gpii->gpi_dev->dev, "could not alloc size:%zu mem for ring\n",
dev_dbg(gpii->gpi_dev->dev,
dev_err(gpii->gpi_dev->dev, "Error adding ring element to xfer ring\n");
dev_err(gpii->gpi_dev->dev, "Error resetting channel ret:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "Error alloc_channel ret:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "Error Starting Channel ret:%d\n", ret);
dev_dbg(gpii->gpi_dev->dev, "channel is already paused\n");
dev_dbg(gpii->gpi_dev->dev, "channel is already active\n");
dev_err(gpii->gpi_dev->dev, "Error starting chan, ret:%d\n", ret);
struct device *dev = chan->gpii->gpi_dev->dev;
struct device *dev = chan->gpii->gpi_dev->dev;
struct device *dev = gpii->gpi_dev->dev;
dev_err(gpii->gpi_dev->dev, "invalid dma direction: %d\n", direction);
const int ev_factor = gpii->gpi_dev->ev_factor;
dev_err(gpii->gpi_dev->dev, "protocol did not match protocol %u != %u\n",
dev_err(gpii->gpi_dev->dev, "error config. interrupts, ret:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "error alloc_ev_chan:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "Error allocating chan:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "Error start chan:%d\n", ret);
dev_err(gpii->gpi_dev->dev, "error resetting channel:%d\n", ret);
static int gpi_find_avail_gpii(struct gpi_dev *gpi_dev, u32 seid)
for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) {
if (!((1 << gpii) & gpi_dev->gpii_mask))
tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) {
if (!((1 << gpii) & gpi_dev->gpii_mask))
tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
struct gpi_dev *gpi_dev = (struct gpi_dev *)of_dma->of_dma_data;
dev_err(gpi_dev->dev, "gpii require minimum 2 args, client passed:%d args\n",
dev_err(gpi_dev->dev, "gpii channel:%d not valid\n", chid);
gpii = gpi_find_avail_gpii(gpi_dev, seid);
dev_err(gpi_dev->dev, "no available gpii instances\n");
gchan = &gpi_dev->gpiis[gpii].gchan[chid];
dev_err(gpi_dev->dev, "gpii:%d chid:%d seid:%d already configured\n",
struct gpi_dev *gpi_dev;
gpi_dev = devm_kzalloc(&pdev->dev, sizeof(*gpi_dev), GFP_KERNEL);
if (!gpi_dev)
gpi_dev->dev = &pdev->dev;
gpi_dev->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &gpi_dev->res);
if (IS_ERR(gpi_dev->regs))
return PTR_ERR(gpi_dev->regs);
gpi_dev->ee_base = gpi_dev->regs;
ret = of_property_read_u32(gpi_dev->dev->of_node, "dma-channels",
&gpi_dev->max_gpii);
dev_err(gpi_dev->dev, "missing 'max-no-gpii' DT node\n");
ret = of_property_read_u32(gpi_dev->dev->of_node, "dma-channel-mask",
&gpi_dev->gpii_mask);
dev_err(gpi_dev->dev, "missing 'gpii-mask' DT node\n");
ee_offset = (uintptr_t)device_get_match_data(gpi_dev->dev);
gpi_dev->ee_base = gpi_dev->ee_base - ee_offset;
gpi_dev->ev_factor = EV_FACTOR;
ret = dma_set_mask(gpi_dev->dev, DMA_BIT_MASK(64));
dev_err(gpi_dev->dev, "Error setting dma_mask to 64, ret:%d\n", ret);
gpi_dev->gpiis = devm_kzalloc(gpi_dev->dev, sizeof(*gpi_dev->gpiis) *
gpi_dev->max_gpii, GFP_KERNEL);
if (!gpi_dev->gpiis)
INIT_LIST_HEAD(&gpi_dev->dma_device.channels);
for (i = 0; i < gpi_dev->max_gpii; i++) {
struct gpii *gpii = &gpi_dev->gpiis[i];
if (!((1 << i) & gpi_dev->gpii_mask))
gpii->ev_cntxt_base_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_CNTXT_0_OFFS(i, 0);
gpii->ev_cntxt_db_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_DOORBELL_0_OFFS(i, 0);
gpii->ev_cmd_reg = gpi_dev->ee_base + GPII_n_EV_CH_CMD_OFFS(i);
gpii->ieob_clr_reg = gpi_dev->ee_base + GPII_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS(i);
gchan->ch_cntxt_base_reg = gpi_dev->ee_base +
gchan->ch_cntxt_db_reg = gpi_dev->ee_base +
gchan->ch_cmd_reg = gpi_dev->ee_base + GPII_n_CH_CMD_OFFS(i);
vchan_init(&gchan->vc, &gpi_dev->dma_device);
gpii->regs = gpi_dev->ee_base;
gpii->gpi_dev = gpi_dev;
platform_set_drvdata(pdev, gpi_dev);
dma_cap_zero(gpi_dev->dma_device.cap_mask);
dma_cap_set(DMA_SLAVE, gpi_dev->dma_device.cap_mask);
gpi_dev->dma_device.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
gpi_dev->dma_device.residue_granularity = DMA_RESIDUE_GRANULARITY_DESCRIPTOR;
gpi_dev->dma_device.src_addr_widths = DMA_SLAVE_BUSWIDTH_8_BYTES;
gpi_dev->dma_device.dst_addr_widths = DMA_SLAVE_BUSWIDTH_8_BYTES;
gpi_dev->dma_device.device_alloc_chan_resources = gpi_alloc_chan_resources;
gpi_dev->dma_device.device_free_chan_resources = gpi_free_chan_resources;
gpi_dev->dma_device.device_tx_status = dma_cookie_status;
gpi_dev->dma_device.device_issue_pending = gpi_issue_pending;
gpi_dev->dma_device.device_prep_slave_sg = gpi_prep_slave_sg;
gpi_dev->dma_device.device_config = gpi_peripheral_config;
gpi_dev->dma_device.device_terminate_all = gpi_terminate_all;
gpi_dev->dma_device.dev = gpi_dev->dev;
gpi_dev->dma_device.device_pause = gpi_pause;
gpi_dev->dma_device.device_resume = gpi_resume;
ret = dma_async_device_register(&gpi_dev->dma_device);
dev_err(gpi_dev->dev, "async_device_register failed ret:%d", ret);
ret = of_dma_controller_register(gpi_dev->dev->of_node,
gpi_of_dma_xlate, gpi_dev);
dev_err(gpi_dev->dev, "of_dma_controller_reg failed ret:%d", ret);
struct gpi_dev *gpi_dev;
devm_free_irq(gpii->gpi_dev->dev, gpii->irq, gpii);
ret = devm_request_irq(gpii->gpi_dev->dev, gpii->irq,
dev_err(gpii->gpi_dev->dev, "error request irq:%d ret:%d\n",
dev_dbg(gpii->gpi_dev->dev,
dev_err(gpii->gpi_dev->dev, "cmd: %s completion timeout:%u\n",
dev_dbg(gpii->gpi_dev->dev, "irq_stts:0x%x\n", irq_stts);
dev_err(gpii->gpi_dev->dev, "invalid error status:0x%x\n", irq_stts);
dev_err(gpii->gpi_dev->dev, "receive interrupt while in %s state\n",
dev_dbg(gpii->gpi_dev->dev,
dev_dbg(gpii->gpi_dev->dev, "setting EV state to %s\n",
dev_dbg(gpii->gpi_dev->dev, "process CH CTRL interrupts\n");
dev_err(gpii->gpi_dev->dev, "Unhandled interrupt status:0x%x\n", type);
dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n",
dev_dbg(gpii->gpi_dev->dev, "event without a pending descriptor!\n");
dev_dbg(gpii->gpi_dev->dev,
dev_dbg(gpii->gpi_dev->dev,