drivers/dma/qcom/gpi.c
1010
dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n",
drivers/dma/qcom/gpi.c
1021
dev_err(gpii->gpi_dev->dev, "Event without a pending descriptor!\n");
drivers/dma/qcom/gpi.c
1023
dev_err(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1046
if (compl_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) {
drivers/dma/qcom/gpi.c
1054
dev_err(gpii->gpi_dev->dev, "Error in Transaction\n");
drivers/dma/qcom/gpi.c
1057
dev_dbg(gpii->gpi_dev->dev, "Transaction Success\n");
drivers/dma/qcom/gpi.c
1061
dev_dbg(gpii->gpi_dev->dev, "Residue %d\n", result.residue);
drivers/dma/qcom/gpi.c
1075
static void gpi_process_events(struct gpii *gpii)
drivers/dma/qcom/gpi.c
1077
struct gpi_ring *ev_ring = &gpii->ev_ring;
drivers/dma/qcom/gpi.c
1084
cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg);
drivers/dma/qcom/gpi.c
1093
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1101
gchan = &gpii->gchan[chid];
drivers/dma/qcom/gpi.c
1106
dev_dbg(gpii->gpi_dev->dev, "stale event, not processing\n");
drivers/dma/qcom/gpi.c
1109
gchan = &gpii->gchan[chid];
drivers/dma/qcom/gpi.c
1114
dev_dbg(gpii->gpi_dev->dev, "QUP_NOTIF_EV_TYPE\n");
drivers/dma/qcom/gpi.c
1117
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1122
gpi_write_ev_db(gpii, ev_ring, ev_ring->wp);
drivers/dma/qcom/gpi.c
1125
gpi_write_reg(gpii, gpii->ieob_clr_reg, BIT(0));
drivers/dma/qcom/gpi.c
1127
cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg);
drivers/dma/qcom/gpi.c
1136
struct gpii *gpii = (struct gpii *)data;
drivers/dma/qcom/gpi.c
1138
read_lock(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1139
if (!REG_ACCESS_VALID(gpii->pm_state)) {
drivers/dma/qcom/gpi.c
1140
read_unlock(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1141
dev_err(gpii->gpi_dev->dev, "not processing any events, pm_state:%s\n",
drivers/dma/qcom/gpi.c
1142
TO_GPI_PM_STR(gpii->pm_state));
drivers/dma/qcom/gpi.c
1147
gpi_process_events(gpii);
drivers/dma/qcom/gpi.c
1150
gpi_config_interrupts(gpii, MASK_IEOB_SETTINGS, 1);
drivers/dma/qcom/gpi.c
1151
read_unlock(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1157
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1158
struct gpi_ring *ev_ring = &gpii->ev_ring;
drivers/dma/qcom/gpi.c
1162
cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg);
drivers/dma/qcom/gpi.c
1175
cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg);
drivers/dma/qcom/gpi.c
1183
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1188
ret = gpi_send_cmd(gpii, gchan, gpi_cmd);
drivers/dma/qcom/gpi.c
1190
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
drivers/dma/qcom/gpi.c
1203
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1210
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1218
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1221
ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_START);
drivers/dma/qcom/gpi.c
1223
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
drivers/dma/qcom/gpi.c
1229
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1231
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1238
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1241
ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_STOP);
drivers/dma/qcom/gpi.c
1243
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
drivers/dma/qcom/gpi.c
1254
struct gpii *gpii = chan->gpii;
drivers/dma/qcom/gpi.c
1257
u32 id = gpii->gpii_id;
drivers/dma/qcom/gpi.c
1262
ret = gpi_send_cmd(gpii, chan, GPI_CH_CMD_ALLOCATE);
drivers/dma/qcom/gpi.c
1264
dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n",
drivers/dma/qcom/gpi.c
1270
gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_0_CONFIG,
drivers/dma/qcom/gpi.c
1272
gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_1_R_LENGTH, ring->len);
drivers/dma/qcom/gpi.c
1273
gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_2_RING_BASE_LSB, ring->phys_addr);
drivers/dma/qcom/gpi.c
1274
gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_3_RING_BASE_MSB,
drivers/dma/qcom/gpi.c
1276
gpi_write_reg(gpii, chan->ch_cntxt_db_reg + CNTXT_5_RING_RP_MSB - CNTXT_4_RING_RP_LSB,
drivers/dma/qcom/gpi.c
1278
gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_0_OFFS(id, chid),
drivers/dma/qcom/gpi.c
1280
gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_1_OFFS(id, chid), 0);
drivers/dma/qcom/gpi.c
1281
gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_2_OFFS(id, chid), 0);
drivers/dma/qcom/gpi.c
1282
gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_3_OFFS(id, chid), 0);
drivers/dma/qcom/gpi.c
1283
gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_QOS_OFFS(id, chid), 1);
drivers/dma/qcom/gpi.c
1291
static int gpi_alloc_ev_chan(struct gpii *gpii)
drivers/dma/qcom/gpi.c
1293
struct gpi_ring *ring = &gpii->ev_ring;
drivers/dma/qcom/gpi.c
1294
void __iomem *base = gpii->ev_cntxt_base_reg;
drivers/dma/qcom/gpi.c
1297
ret = gpi_send_cmd(gpii, NULL, GPI_EV_CMD_ALLOCATE);
drivers/dma/qcom/gpi.c
1299
dev_err(gpii->gpi_dev->dev, "error with cmd:%s ret:%d\n",
drivers/dma/qcom/gpi.c
1305
gpi_write_reg(gpii, base + CNTXT_0_CONFIG,
drivers/dma/qcom/gpi.c
1307
gpi_write_reg(gpii, base + CNTXT_1_R_LENGTH, ring->len);
drivers/dma/qcom/gpi.c
1308
gpi_write_reg(gpii, base + CNTXT_2_RING_BASE_LSB, lower_32_bits(ring->phys_addr));
drivers/dma/qcom/gpi.c
1309
gpi_write_reg(gpii, base + CNTXT_3_RING_BASE_MSB, upper_32_bits(ring->phys_addr));
drivers/dma/qcom/gpi.c
1310
gpi_write_reg(gpii, gpii->ev_cntxt_db_reg + CNTXT_5_RING_RP_MSB - CNTXT_4_RING_RP_LSB,
drivers/dma/qcom/gpi.c
1312
gpi_write_reg(gpii, base + CNTXT_8_RING_INT_MOD, 0);
drivers/dma/qcom/gpi.c
1313
gpi_write_reg(gpii, base + CNTXT_10_RING_MSI_LSB, 0);
drivers/dma/qcom/gpi.c
1314
gpi_write_reg(gpii, base + CNTXT_11_RING_MSI_MSB, 0);
drivers/dma/qcom/gpi.c
1315
gpi_write_reg(gpii, base + CNTXT_8_RING_INT_MOD, 0);
drivers/dma/qcom/gpi.c
1316
gpi_write_reg(gpii, base + CNTXT_12_RING_RP_UPDATE_LSB, 0);
drivers/dma/qcom/gpi.c
1317
gpi_write_reg(gpii, base + CNTXT_13_RING_RP_UPDATE_MSB, 0);
drivers/dma/qcom/gpi.c
1326
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1327
gpii->pm_state = ACTIVE_STATE;
drivers/dma/qcom/gpi.c
1328
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1329
gpi_write_ev_db(gpii, ring, ring->wp);
drivers/dma/qcom/gpi.c
1382
struct gpii *gpii)
drivers/dma/qcom/gpi.c
1384
dma_free_coherent(gpii->gpi_dev->dev, ring->alloc_size,
drivers/dma/qcom/gpi.c
1391
u32 el_size, struct gpii *gpii)
drivers/dma/qcom/gpi.c
1402
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1407
ring->pre_aligned = dma_alloc_coherent(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1411
dev_err(gpii->gpi_dev->dev, "could not alloc size:%zu mem for ring\n",
drivers/dma/qcom/gpi.c
1430
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
1439
static void gpi_queue_xfer(struct gpii *gpii, struct gchan *gchan,
drivers/dma/qcom/gpi.c
1448
dev_err(gpii->gpi_dev->dev, "Error adding ring element to xfer ring\n");
drivers/dma/qcom/gpi.c
1461
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1465
mutex_lock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1476
gchan = &gpii->gchan[i];
drivers/dma/qcom/gpi.c
1479
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1481
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1489
gchan = &gpii->gchan[i];
drivers/dma/qcom/gpi.c
1493
dev_err(gpii->gpi_dev->dev, "Error resetting channel ret:%d\n", ret);
drivers/dma/qcom/gpi.c
1500
dev_err(gpii->gpi_dev->dev, "Error alloc_channel ret:%d\n", ret);
drivers/dma/qcom/gpi.c
1507
gchan = &gpii->gchan[i];
drivers/dma/qcom/gpi.c
1511
dev_err(gpii->gpi_dev->dev, "Error Starting Channel ret:%d\n", ret);
drivers/dma/qcom/gpi.c
1517
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1525
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1528
mutex_lock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1534
if (gpii->pm_state == PAUSE_STATE) {
drivers/dma/qcom/gpi.c
1535
dev_dbg(gpii->gpi_dev->dev, "channel is already paused\n");
drivers/dma/qcom/gpi.c
1536
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1542
ret = gpi_stop_chan(&gpii->gchan[i]);
drivers/dma/qcom/gpi.c
1544
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1549
disable_irq(gpii->irq);
drivers/dma/qcom/gpi.c
1552
tasklet_kill(&gpii->ev_task);
drivers/dma/qcom/gpi.c
1554
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1555
gpii->pm_state = PAUSE_STATE;
drivers/dma/qcom/gpi.c
1556
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1557
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1566
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1569
mutex_lock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1570
if (gpii->pm_state == ACTIVE_STATE) {
drivers/dma/qcom/gpi.c
1571
dev_dbg(gpii->gpi_dev->dev, "channel is already active\n");
drivers/dma/qcom/gpi.c
1572
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1576
enable_irq(gpii->irq);
drivers/dma/qcom/gpi.c
1580
ret = gpi_send_cmd(gpii, &gpii->gchan[i], GPI_CH_CMD_START);
drivers/dma/qcom/gpi.c
1582
dev_err(gpii->gpi_dev->dev, "Error starting chan, ret:%d\n", ret);
drivers/dma/qcom/gpi.c
1583
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1588
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1589
gpii->pm_state = ACTIVE_STATE;
drivers/dma/qcom/gpi.c
1590
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1591
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1628
struct device *dev = chan->gpii->gpi_dev->dev;
drivers/dma/qcom/gpi.c
1706
struct device *dev = chan->gpii->gpi_dev->dev;
drivers/dma/qcom/gpi.c
1803
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1804
struct device *dev = gpii->gpi_dev->dev;
drivers/dma/qcom/gpi.c
1811
gpii->ieob_set = false;
drivers/dma/qcom/gpi.c
1813
dev_err(gpii->gpi_dev->dev, "invalid dma direction: %d\n", direction);
drivers/dma/qcom/gpi.c
1866
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1874
read_lock_irqsave(&gpii->pm_lock, pm_lock_flags);
drivers/dma/qcom/gpi.c
1885
read_unlock_irqrestore(&gpii->pm_lock, pm_lock_flags);
drivers/dma/qcom/gpi.c
1892
gpi_queue_xfer(gpii, gchan, tre, &wp);
drivers/dma/qcom/gpi.c
1897
read_unlock_irqrestore(&gpii->pm_lock, pm_lock_flags);
drivers/dma/qcom/gpi.c
1902
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1903
const int ev_factor = gpii->gpi_dev->ev_factor;
drivers/dma/qcom/gpi.c
1911
if (gpii->gchan[i].pm_state != CONFIG_STATE)
drivers/dma/qcom/gpi.c
1915
if (gpii->gchan[0].protocol != gpii->gchan[1].protocol) {
drivers/dma/qcom/gpi.c
1916
dev_err(gpii->gpi_dev->dev, "protocol did not match protocol %u != %u\n",
drivers/dma/qcom/gpi.c
1917
gpii->gchan[0].protocol, gpii->gchan[1].protocol);
drivers/dma/qcom/gpi.c
1924
ret = gpi_alloc_ring(&gpii->ev_ring, elements,
drivers/dma/qcom/gpi.c
1925
sizeof(union gpi_event), gpii);
drivers/dma/qcom/gpi.c
1930
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1931
gpii->pm_state = PREPARE_HARDWARE;
drivers/dma/qcom/gpi.c
1932
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1933
ret = gpi_config_interrupts(gpii, DEFAULT_IRQ_SETTINGS, 0);
drivers/dma/qcom/gpi.c
1935
dev_err(gpii->gpi_dev->dev, "error config. interrupts, ret:%d\n", ret);
drivers/dma/qcom/gpi.c
1940
ret = gpi_alloc_ev_chan(gpii);
drivers/dma/qcom/gpi.c
1942
dev_err(gpii->gpi_dev->dev, "error alloc_ev_chan:%d\n", ret);
drivers/dma/qcom/gpi.c
1948
ret = gpi_alloc_chan(&gpii->gchan[i], true);
drivers/dma/qcom/gpi.c
1950
dev_err(gpii->gpi_dev->dev, "Error allocating chan:%d\n", ret);
drivers/dma/qcom/gpi.c
1957
ret = gpi_start_chan(&gpii->gchan[i]);
drivers/dma/qcom/gpi.c
1959
dev_err(gpii->gpi_dev->dev, "Error start chan:%d\n", ret);
drivers/dma/qcom/gpi.c
1967
gpi_stop_chan(&gpii->gchan[i]);
drivers/dma/qcom/gpi.c
1968
gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET);
drivers/dma/qcom/gpi.c
1975
gpi_disable_interrupts(gpii);
drivers/dma/qcom/gpi.c
1977
gpi_free_ring(&gpii->ev_ring, gpii);
drivers/dma/qcom/gpi.c
1986
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
1990
mutex_lock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
1995
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
1997
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2003
ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET);
drivers/dma/qcom/gpi.c
2005
dev_err(gpii->gpi_dev->dev, "error resetting channel:%d\n", ret);
drivers/dma/qcom/gpi.c
2011
gpi_free_ring(&gchan->ch_ring, gpii);
drivers/dma/qcom/gpi.c
2015
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2017
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2021
if (gpii->gchan[i].ch_ring.configured)
drivers/dma/qcom/gpi.c
2025
cur_state = gpii->pm_state;
drivers/dma/qcom/gpi.c
2026
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2027
gpii->pm_state = PREPARE_TERMINATE;
drivers/dma/qcom/gpi.c
2028
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2031
tasklet_kill(&gpii->ev_task);
drivers/dma/qcom/gpi.c
2035
gpi_send_cmd(gpii, NULL, GPI_EV_CMD_DEALLOC);
drivers/dma/qcom/gpi.c
2037
gpi_free_ring(&gpii->ev_ring, gpii);
drivers/dma/qcom/gpi.c
2041
gpi_disable_interrupts(gpii);
drivers/dma/qcom/gpi.c
2044
write_lock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2045
gpii->pm_state = DISABLE_STATE;
drivers/dma/qcom/gpi.c
2046
write_unlock_irq(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2049
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
2056
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
2059
mutex_lock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
2063
sizeof(struct gpi_tre), gpii);
drivers/dma/qcom/gpi.c
2069
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
2073
mutex_unlock(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
2081
unsigned int gpii;
drivers/dma/qcom/gpi.c
2084
for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) {
drivers/dma/qcom/gpi.c
2085
if (!((1 << gpii) & gpi_dev->gpii_mask))
drivers/dma/qcom/gpi.c
2088
tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
drivers/dma/qcom/gpi.c
2089
rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
drivers/dma/qcom/gpi.c
2092
return gpii;
drivers/dma/qcom/gpi.c
2094
return gpii;
drivers/dma/qcom/gpi.c
2098
for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) {
drivers/dma/qcom/gpi.c
2099
if (!((1 << gpii) & gpi_dev->gpii_mask))
drivers/dma/qcom/gpi.c
2102
tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
drivers/dma/qcom/gpi.c
2103
rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
drivers/dma/qcom/gpi.c
2111
return gpii;
drivers/dma/qcom/gpi.c
2124
int gpii;
drivers/dma/qcom/gpi.c
2142
gpii = gpi_find_avail_gpii(gpi_dev, seid);
drivers/dma/qcom/gpi.c
2143
if (gpii < 0) {
drivers/dma/qcom/gpi.c
2148
gchan = &gpi_dev->gpiis[gpii].gchan[chid];
drivers/dma/qcom/gpi.c
2151
gpii, chid, gchan->seid);
drivers/dma/qcom/gpi.c
2211
struct gpii *gpii = &gpi_dev->gpiis[i];
drivers/dma/qcom/gpi.c
2218
gpii->ev_cntxt_base_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_CNTXT_0_OFFS(i, 0);
drivers/dma/qcom/gpi.c
2219
gpii->ev_cntxt_db_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_DOORBELL_0_OFFS(i, 0);
drivers/dma/qcom/gpi.c
2220
gpii->ev_ring_rp_lsb_reg = gpii->ev_cntxt_base_reg + CNTXT_4_RING_RP_LSB;
drivers/dma/qcom/gpi.c
2221
gpii->ev_cmd_reg = gpi_dev->ee_base + GPII_n_EV_CH_CMD_OFFS(i);
drivers/dma/qcom/gpi.c
2222
gpii->ieob_clr_reg = gpi_dev->ee_base + GPII_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS(i);
drivers/dma/qcom/gpi.c
2228
gpii->irq = ret;
drivers/dma/qcom/gpi.c
2232
struct gchan *gchan = &gpii->gchan[chan];
drivers/dma/qcom/gpi.c
2245
gchan->gpii = gpii;
drivers/dma/qcom/gpi.c
2248
mutex_init(&gpii->ctrl_lock);
drivers/dma/qcom/gpi.c
2249
rwlock_init(&gpii->pm_lock);
drivers/dma/qcom/gpi.c
2250
tasklet_init(&gpii->ev_task, gpi_ev_tasklet,
drivers/dma/qcom/gpi.c
2251
(unsigned long)gpii);
drivers/dma/qcom/gpi.c
2252
init_completion(&gpii->cmd_completion);
drivers/dma/qcom/gpi.c
2253
gpii->gpii_id = i;
drivers/dma/qcom/gpi.c
2254
gpii->regs = gpi_dev->ee_base;
drivers/dma/qcom/gpi.c
2255
gpii->gpi_dev = gpi_dev;
drivers/dma/qcom/gpi.c
478
struct gpii *gpiis;
drivers/dma/qcom/gpi.c
486
struct gpii *gpii;
drivers/dma/qcom/gpi.c
539
static void gpi_process_events(struct gpii *gpii);
drivers/dma/qcom/gpi.c
562
static inline u32 gpi_read_reg(struct gpii *gpii, void __iomem *addr)
drivers/dma/qcom/gpi.c
567
static inline void gpi_write_reg(struct gpii *gpii, void __iomem *addr, u32 val)
drivers/dma/qcom/gpi.c
573
gpi_update_reg(struct gpii *gpii, u32 offset, u32 mask, u32 val)
drivers/dma/qcom/gpi.c
575
void __iomem *addr = gpii->regs + offset;
drivers/dma/qcom/gpi.c
576
u32 tmp = gpi_read_reg(gpii, addr);
drivers/dma/qcom/gpi.c
581
gpi_write_reg(gpii, addr, tmp);
drivers/dma/qcom/gpi.c
584
static void gpi_disable_interrupts(struct gpii *gpii)
drivers/dma/qcom/gpi.c
586
gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
588
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_IEOB_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
590
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_CH_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
592
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_EV_CH_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
594
gpi_update_reg(gpii, GPII_n_CNTXT_GLOB_IRQ_EN_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
596
gpi_update_reg(gpii, GPII_n_CNTXT_GPII_IRQ_EN_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
598
gpi_update_reg(gpii, GPII_n_CNTXT_INTSET_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
601
gpii->cntxt_type_irq_msk = 0;
drivers/dma/qcom/gpi.c
602
devm_free_irq(gpii->gpi_dev->dev, gpii->irq, gpii);
drivers/dma/qcom/gpi.c
603
gpii->configured_irq = false;
drivers/dma/qcom/gpi.c
607
static int gpi_config_interrupts(struct gpii *gpii, enum gpii_irq_settings settings, bool mask)
drivers/dma/qcom/gpi.c
616
if (!gpii->configured_irq) {
drivers/dma/qcom/gpi.c
617
ret = devm_request_irq(gpii->gpi_dev->dev, gpii->irq,
drivers/dma/qcom/gpi.c
619
"gpi-dma", gpii);
drivers/dma/qcom/gpi.c
621
dev_err(gpii->gpi_dev->dev, "error request irq:%d ret:%d\n",
drivers/dma/qcom/gpi.c
622
gpii->irq, ret);
drivers/dma/qcom/gpi.c
633
gpii->cntxt_type_irq_msk |= GPII_n_CNTXT_TYPE_IRQ_MSK_IEOB;
drivers/dma/qcom/gpi.c
635
gpii->cntxt_type_irq_msk &= ~(GPII_n_CNTXT_TYPE_IRQ_MSK_IEOB);
drivers/dma/qcom/gpi.c
636
gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
637
GPII_n_CNTXT_TYPE_IRQ_MSK_BMSK, gpii->cntxt_type_irq_msk);
drivers/dma/qcom/gpi.c
639
gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
641
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_IEOB_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
644
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_CH_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
647
gpi_update_reg(gpii, GPII_n_CNTXT_SRC_EV_CH_IRQ_MSK_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
650
gpi_update_reg(gpii, GPII_n_CNTXT_GLOB_IRQ_EN_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
653
gpi_update_reg(gpii, GPII_n_CNTXT_GPII_IRQ_EN_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
655
gpi_update_reg(gpii, GPII_n_CNTXT_MSI_BASE_LSB_OFFS(gpii->gpii_id), U32_MAX, 0);
drivers/dma/qcom/gpi.c
656
gpi_update_reg(gpii, GPII_n_CNTXT_MSI_BASE_MSB_OFFS(gpii->gpii_id), U32_MAX, 0);
drivers/dma/qcom/gpi.c
657
gpi_update_reg(gpii, GPII_n_CNTXT_SCRATCH_0_OFFS(gpii->gpii_id), U32_MAX, 0);
drivers/dma/qcom/gpi.c
658
gpi_update_reg(gpii, GPII_n_CNTXT_SCRATCH_1_OFFS(gpii->gpii_id), U32_MAX, 0);
drivers/dma/qcom/gpi.c
659
gpi_update_reg(gpii, GPII_n_CNTXT_INTSET_OFFS(gpii->gpii_id),
drivers/dma/qcom/gpi.c
661
gpi_update_reg(gpii, GPII_n_ERROR_LOG_OFFS(gpii->gpii_id), U32_MAX, 0);
drivers/dma/qcom/gpi.c
663
gpii->cntxt_type_irq_msk = enable;
drivers/dma/qcom/gpi.c
666
gpii->configured_irq = true;
drivers/dma/qcom/gpi.c
671
static int gpi_send_cmd(struct gpii *gpii, struct gchan *gchan,
drivers/dma/qcom/gpi.c
684
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
688
reinit_completion(&gpii->cmd_completion);
drivers/dma/qcom/gpi.c
689
gpii->gpi_cmd = gpi_cmd;
drivers/dma/qcom/gpi.c
691
cmd_reg = IS_CHAN_CMD(gpi_cmd) ? gchan->ch_cmd_reg : gpii->ev_cmd_reg;
drivers/dma/qcom/gpi.c
694
gpi_write_reg(gpii, cmd_reg, cmd);
drivers/dma/qcom/gpi.c
695
timeout = wait_for_completion_timeout(&gpii->cmd_completion,
drivers/dma/qcom/gpi.c
698
dev_err(gpii->gpi_dev->dev, "cmd: %s completion timeout:%u\n",
drivers/dma/qcom/gpi.c
710
if (!IS_CHAN_CMD(gpi_cmd) && gpii->ev_state == gpi_cmd_info[gpi_cmd].state)
drivers/dma/qcom/gpi.c
720
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
724
gpi_write_reg(gpii, gchan->ch_cntxt_db_reg, p_wp);
drivers/dma/qcom/gpi.c
728
static inline void gpi_write_ev_db(struct gpii *gpii,
drivers/dma/qcom/gpi.c
734
gpi_write_reg(gpii, gpii->ev_cntxt_db_reg, p_wp);
drivers/dma/qcom/gpi.c
738
static void gpi_process_ieob(struct gpii *gpii)
drivers/dma/qcom/gpi.c
740
gpi_write_reg(gpii, gpii->ieob_clr_reg, BIT(0));
drivers/dma/qcom/gpi.c
742
gpi_config_interrupts(gpii, MASK_IEOB_SETTINGS, 0);
drivers/dma/qcom/gpi.c
743
tasklet_hi_schedule(&gpii->ev_task);
drivers/dma/qcom/gpi.c
747
static void gpi_process_ch_ctrl_irq(struct gpii *gpii)
drivers/dma/qcom/gpi.c
749
u32 gpii_id = gpii->gpii_id;
drivers/dma/qcom/gpi.c
751
u32 ch_irq = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
757
gpi_write_reg(gpii, gpii->regs + offset, (u32)ch_irq);
drivers/dma/qcom/gpi.c
763
gchan = &gpii->gchan[chid];
drivers/dma/qcom/gpi.c
764
state = gpi_read_reg(gpii, gchan->ch_cntxt_base_reg +
drivers/dma/qcom/gpi.c
773
if (gpii->gpi_cmd == GPI_CH_CMD_DE_ALLOC)
drivers/dma/qcom/gpi.c
783
complete_all(&gpii->cmd_completion);
drivers/dma/qcom/gpi.c
788
static void gpi_process_gen_err_irq(struct gpii *gpii)
drivers/dma/qcom/gpi.c
790
u32 gpii_id = gpii->gpii_id;
drivers/dma/qcom/gpi.c
792
u32 irq_stts = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
795
dev_dbg(gpii->gpi_dev->dev, "irq_stts:0x%x\n", irq_stts);
drivers/dma/qcom/gpi.c
799
gpi_write_reg(gpii, gpii->regs + offset, irq_stts);
drivers/dma/qcom/gpi.c
803
static void gpi_process_glob_err_irq(struct gpii *gpii)
drivers/dma/qcom/gpi.c
805
u32 gpii_id = gpii->gpii_id;
drivers/dma/qcom/gpi.c
807
u32 irq_stts = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
810
gpi_write_reg(gpii, gpii->regs + offset, irq_stts);
drivers/dma/qcom/gpi.c
814
dev_err(gpii->gpi_dev->dev, "invalid error status:0x%x\n", irq_stts);
drivers/dma/qcom/gpi.c
819
gpi_write_reg(gpii, gpii->regs + offset, 0);
drivers/dma/qcom/gpi.c
825
struct gpii *gpii = data;
drivers/dma/qcom/gpi.c
826
u32 gpii_id = gpii->gpii_id;
drivers/dma/qcom/gpi.c
830
read_lock_irqsave(&gpii->pm_lock, flags);
drivers/dma/qcom/gpi.c
836
if (!REG_ACCESS_VALID(gpii->pm_state)) {
drivers/dma/qcom/gpi.c
837
dev_err(gpii->gpi_dev->dev, "receive interrupt while in %s state\n",
drivers/dma/qcom/gpi.c
838
TO_GPI_PM_STR(gpii->pm_state));
drivers/dma/qcom/gpi.c
842
offset = GPII_n_CNTXT_TYPE_IRQ_OFFS(gpii->gpii_id);
drivers/dma/qcom/gpi.c
843
type = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
848
gpi_process_glob_err_irq(gpii);
drivers/dma/qcom/gpi.c
854
gpi_process_ieob(gpii);
drivers/dma/qcom/gpi.c
863
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
866
ev_ch_irq = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
870
gpi_write_reg(gpii, gpii->regs + offset, ev_ch_irq);
drivers/dma/qcom/gpi.c
871
ev_state = gpi_read_reg(gpii, gpii->ev_cntxt_base_reg +
drivers/dma/qcom/gpi.c
880
if (gpii->gpi_cmd == GPI_EV_CMD_DEALLOC)
drivers/dma/qcom/gpi.c
883
gpii->ev_state = ev_state;
drivers/dma/qcom/gpi.c
884
dev_dbg(gpii->gpi_dev->dev, "setting EV state to %s\n",
drivers/dma/qcom/gpi.c
885
TO_GPI_EV_STATE_STR(gpii->ev_state));
drivers/dma/qcom/gpi.c
886
complete_all(&gpii->cmd_completion);
drivers/dma/qcom/gpi.c
892
dev_dbg(gpii->gpi_dev->dev, "process CH CTRL interrupts\n");
drivers/dma/qcom/gpi.c
893
gpi_process_ch_ctrl_irq(gpii);
drivers/dma/qcom/gpi.c
898
dev_err(gpii->gpi_dev->dev, "Unhandled interrupt status:0x%x\n", type);
drivers/dma/qcom/gpi.c
899
gpi_process_gen_err_irq(gpii);
drivers/dma/qcom/gpi.c
903
offset = GPII_n_CNTXT_TYPE_IRQ_OFFS(gpii->gpii_id);
drivers/dma/qcom/gpi.c
904
type = gpi_read_reg(gpii, gpii->regs + offset);
drivers/dma/qcom/gpi.c
908
read_unlock_irqrestore(&gpii->pm_lock, flags);
drivers/dma/qcom/gpi.c
917
struct gpii *gpii = gchan->gpii;
drivers/dma/qcom/gpi.c
930
dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n",
drivers/dma/qcom/gpi.c
942
dev_dbg(gpii->gpi_dev->dev, "event without a pending descriptor!\n");
drivers/dma/qcom/gpi.c
944
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
949
dev_dbg(gpii->gpi_dev->dev,
drivers/dma/qcom/gpi.c
971
if (imed_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) {
drivers/dma/qcom/gpi.c
999
struct gpii *gpii = gchan->gpii;