Symbol: qmc
drivers/soc/fsl/qe/qmc.c
1000
dev_dbg(qmc->dev, "only one or zero ts -> disable trnsync\n");
drivers/soc/fsl/qe/qmc.c
1020
dev_dbg(qmc->dev, "chan %u: trnsync=0x%04x, rx %u/%u 0x%llx, tx %u/%u 0x%llx\n",
drivers/soc/fsl/qe/qmc.c
1043
dev_err(chan->qmc->dev, "chan %u: Enable tsa entries failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
1049
ret = qmc_setup_chan_trnsync(chan->qmc, chan);
drivers/soc/fsl/qe/qmc.c
1051
dev_err(chan->qmc->dev, "chan %u: setup TRNSYNC failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
1058
qmc_write32(chan->s_param + QMC_SPE_RPACK, chan->qmc->data->rpack);
drivers/soc/fsl/qe/qmc.c
1061
chan->qmc->data->zdstate_transp :
drivers/soc/fsl/qe/qmc.c
1062
chan->qmc->data->zdstate_hdlc);
drivers/soc/fsl/qe/qmc.c
1063
qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
drivers/soc/fsl/qe/qmc.c
1088
dev_err(chan->qmc->dev, "chan %u: Enable tsa entries failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
1094
ret = qmc_setup_chan_trnsync(chan->qmc, chan);
drivers/soc/fsl/qe/qmc.c
1096
dev_err(chan->qmc->dev, "chan %u: setup TRNSYNC failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
1209
qmc_write32(chan->s_param + QMC_SPE_TSTATE, chan->qmc->data->tstate);
drivers/soc/fsl/qe/qmc.c
1210
qmc_write32(chan->s_param + QMC_SPE_ZISTATE, chan->qmc->data->zistate);
drivers/soc/fsl/qe/qmc.c
1227
static int qmc_check_chans(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1236
ret = tsa_serial_get_info(qmc->tsa_serial, &info);
drivers/soc/fsl/qe/qmc.c
1241
dev_err(qmc->dev, "Number of TSA Tx/Rx TS assigned not supported\n");
drivers/soc/fsl/qe/qmc.c
1251
dev_err(qmc->dev, "Number of TSA Tx/Rx TS assigned are not equal\n");
drivers/soc/fsl/qe/qmc.c
1259
list_for_each_entry(chan, &qmc->chan_head, list) {
drivers/soc/fsl/qe/qmc.c
1261
dev_err(qmc->dev, "chan %u can use TSA unassigned Tx TS\n", chan->id);
drivers/soc/fsl/qe/qmc.c
1266
dev_err(qmc->dev, "chan %u can use TSA unassigned Rx TS\n", chan->id);
drivers/soc/fsl/qe/qmc.c
1274
static unsigned int qmc_nb_chans(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1279
list_for_each_entry(chan, &qmc->chan_head, list)
drivers/soc/fsl/qe/qmc.c
1285
static int qmc_of_parse_chans(struct qmc *qmc, struct device_node *np)
drivers/soc/fsl/qe/qmc.c
1296
dev_err(qmc->dev, "%pOF: failed to read reg\n", chan_np);
drivers/soc/fsl/qe/qmc.c
1300
dev_err(qmc->dev, "%pOF: Invalid chan_id\n", chan_np);
drivers/soc/fsl/qe/qmc.c
1304
chan = devm_kzalloc(qmc->dev, sizeof(*chan), GFP_KERNEL);
drivers/soc/fsl/qe/qmc.c
1315
dev_err(qmc->dev, "%pOF: failed to read fsl,tx-ts-mask\n",
drivers/soc/fsl/qe/qmc.c
1324
dev_err(qmc->dev, "%pOF: failed to read fsl,rx-ts-mask\n",
drivers/soc/fsl/qe/qmc.c
1334
dev_err(qmc->dev, "%pOF: failed to read fsl,operational-mode\n",
drivers/soc/fsl/qe/qmc.c
1343
dev_err(qmc->dev, "%pOF: Invalid fsl,operational-mode (%s)\n",
drivers/soc/fsl/qe/qmc.c
1351
list_add_tail(&chan->list, &qmc->chan_head);
drivers/soc/fsl/qe/qmc.c
1352
qmc->chans[chan->id] = chan;
drivers/soc/fsl/qe/qmc.c
1355
return qmc_check_chans(qmc);
drivers/soc/fsl/qe/qmc.c
1358
static int qmc_init_tsa_64rxtx(struct qmc *qmc, const struct tsa_serial_info *info)
drivers/soc/fsl/qe/qmc.c
1368
qmc->is_tsa_64rxtx = true;
drivers/soc/fsl/qe/qmc.c
1372
qmc_write16(qmc->scc_pram + QMC_GBL_TSATRX + (i * 2), 0x0000);
drivers/soc/fsl/qe/qmc.c
1375
qmc_setbits16(qmc->scc_pram + QMC_GBL_TSATRX + ((info->nb_rx_ts - 1) * 2),
drivers/soc/fsl/qe/qmc.c
1379
val = qmc->scc_pram_offset + QMC_GBL_TSATRX;
drivers/soc/fsl/qe/qmc.c
1380
qmc_write16(qmc->scc_pram + QMC_GBL_RX_S_PTR, val);
drivers/soc/fsl/qe/qmc.c
1381
qmc_write16(qmc->scc_pram + QMC_GBL_RXPTR, val);
drivers/soc/fsl/qe/qmc.c
1382
qmc_write16(qmc->scc_pram + QMC_GBL_TX_S_PTR, val);
drivers/soc/fsl/qe/qmc.c
1383
qmc_write16(qmc->scc_pram + QMC_GBL_TXPTR, val);
drivers/soc/fsl/qe/qmc.c
1388
static int qmc_init_tsa_32rx_32tx(struct qmc *qmc, const struct tsa_serial_info *info)
drivers/soc/fsl/qe/qmc.c
1397
qmc->is_tsa_64rxtx = false;
drivers/soc/fsl/qe/qmc.c
1401
qmc_write16(qmc->scc_pram + QMC_GBL_TSATRX + (i * 2), 0x0000);
drivers/soc/fsl/qe/qmc.c
1402
qmc_write16(qmc->scc_pram + QMC_GBL_TSATTX + (i * 2), 0x0000);
drivers/soc/fsl/qe/qmc.c
1406
qmc_setbits16(qmc->scc_pram + QMC_GBL_TSATRX + ((info->nb_rx_ts - 1) * 2),
drivers/soc/fsl/qe/qmc.c
1408
qmc_setbits16(qmc->scc_pram + QMC_GBL_TSATTX + ((info->nb_tx_ts - 1) * 2),
drivers/soc/fsl/qe/qmc.c
1412
val = qmc->scc_pram_offset + QMC_GBL_TSATRX;
drivers/soc/fsl/qe/qmc.c
1413
qmc_write16(qmc->scc_pram + QMC_GBL_RX_S_PTR, val);
drivers/soc/fsl/qe/qmc.c
1414
qmc_write16(qmc->scc_pram + QMC_GBL_RXPTR, val);
drivers/soc/fsl/qe/qmc.c
1417
val = qmc->scc_pram_offset + QMC_GBL_TSATTX;
drivers/soc/fsl/qe/qmc.c
1418
qmc_write16(qmc->scc_pram + QMC_GBL_TX_S_PTR, val);
drivers/soc/fsl/qe/qmc.c
1419
qmc_write16(qmc->scc_pram + QMC_GBL_TXPTR, val);
drivers/soc/fsl/qe/qmc.c
1424
static int qmc_init_tsa(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1430
ret = tsa_serial_get_info(qmc->tsa_serial, &info);
drivers/soc/fsl/qe/qmc.c
1439
qmc_init_tsa_64rxtx(qmc, &info) :
drivers/soc/fsl/qe/qmc.c
1440
qmc_init_tsa_32rx_32tx(qmc, &info);
drivers/soc/fsl/qe/qmc.c
1443
static int qmc_setup_chan(struct qmc *qmc, struct qmc_chan *chan)
drivers/soc/fsl/qe/qmc.c
1450
chan->qmc = qmc;
drivers/soc/fsl/qe/qmc.c
1453
chan->s_param = qmc->dpram + (chan->id * 64);
drivers/soc/fsl/qe/qmc.c
1455
chan->txbds = qmc->bd_table + (chan->id * (QMC_NB_TXBDS + QMC_NB_RXBDS));
drivers/soc/fsl/qe/qmc.c
1456
chan->rxbds = qmc->bd_table + (chan->id * (QMC_NB_TXBDS + QMC_NB_RXBDS)) + QMC_NB_TXBDS;
drivers/soc/fsl/qe/qmc.c
1472
qmc_write32(chan->s_param + QMC_SPE_TSTATE, chan->qmc->data->tstate);
drivers/soc/fsl/qe/qmc.c
1473
qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
drivers/soc/fsl/qe/qmc.c
1474
qmc_write32(chan->s_param + QMC_SPE_ZISTATE, chan->qmc->data->zistate);
drivers/soc/fsl/qe/qmc.c
1475
qmc_write32(chan->s_param + QMC_SPE_RPACK, chan->qmc->data->rpack);
drivers/soc/fsl/qe/qmc.c
1477
qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, chan->qmc->data->zdstate_transp);
drivers/soc/fsl/qe/qmc.c
1483
ret = qmc_setup_chan_trnsync(qmc, chan);
drivers/soc/fsl/qe/qmc.c
1487
qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, chan->qmc->data->zdstate_hdlc);
drivers/soc/fsl/qe/qmc.c
1521
static int qmc_setup_chans(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1526
list_for_each_entry(chan, &qmc->chan_head, list) {
drivers/soc/fsl/qe/qmc.c
1527
ret = qmc_setup_chan(qmc, chan);
drivers/soc/fsl/qe/qmc.c
1535
static int qmc_finalize_chans(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1540
list_for_each_entry(chan, &qmc->chan_head, list) {
drivers/soc/fsl/qe/qmc.c
1562
static int qmc_setup_ints(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1568
for (i = 0; i < (qmc->int_size / sizeof(u16)); i++)
drivers/soc/fsl/qe/qmc.c
1569
qmc_write16(qmc->int_table + i, 0x0000);
drivers/soc/fsl/qe/qmc.c
1572
if (qmc->int_size >= sizeof(u16)) {
drivers/soc/fsl/qe/qmc.c
1573
last = qmc->int_table + (qmc->int_size / sizeof(u16)) - 1;
drivers/soc/fsl/qe/qmc.c
1580
static void qmc_irq_gint(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1587
int_entry = qmc_read16(qmc->int_curr);
drivers/soc/fsl/qe/qmc.c
1590
qmc_write16(qmc->int_curr, int_entry & QMC_INT_W);
drivers/soc/fsl/qe/qmc.c
1593
chan = qmc->chans[chan_id];
drivers/soc/fsl/qe/qmc.c
1595
dev_err(qmc->dev, "interrupt on invalid chan %u\n", chan_id);
drivers/soc/fsl/qe/qmc.c
1603
dev_info(qmc->dev, "intr chan %u, 0x%04x (UN)\n", chan_id,
drivers/soc/fsl/qe/qmc.c
1609
dev_info(qmc->dev, "intr chan %u, 0x%04x (BSY)\n", chan_id,
drivers/soc/fsl/qe/qmc.c
1616
chan->qmc->data->rpack);
drivers/soc/fsl/qe/qmc.c
1619
chan->qmc->data->zdstate_transp :
drivers/soc/fsl/qe/qmc.c
1620
chan->qmc->data->zdstate_hdlc);
drivers/soc/fsl/qe/qmc.c
1622
chan->qmc->data->rstate);
drivers/soc/fsl/qe/qmc.c
1635
qmc->int_curr = qmc->int_table;
drivers/soc/fsl/qe/qmc.c
1637
qmc->int_curr++;
drivers/soc/fsl/qe/qmc.c
1638
int_entry = qmc_read16(qmc->int_curr);
drivers/soc/fsl/qe/qmc.c
1644
struct qmc *qmc = (struct qmc *)priv;
drivers/soc/fsl/qe/qmc.c
1647
scce = qmc_read16(qmc->scc_regs + SCC_SCCE);
drivers/soc/fsl/qe/qmc.c
1648
qmc_write16(qmc->scc_regs + SCC_SCCE, scce);
drivers/soc/fsl/qe/qmc.c
1651
dev_info(qmc->dev, "IRQ queue overflow\n");
drivers/soc/fsl/qe/qmc.c
1654
dev_err(qmc->dev, "Global transmitter underrun\n");
drivers/soc/fsl/qe/qmc.c
1657
dev_err(qmc->dev, "Global receiver overrun\n");
drivers/soc/fsl/qe/qmc.c
1661
qmc_irq_gint(qmc);
drivers/soc/fsl/qe/qmc.c
1666
static int qmc_qe_soft_qmc_init(struct qmc *qmc, struct device_node *np)
drivers/soc/fsl/qe/qmc.c
1682
dev_err(qmc->dev, "%pOF: failed to read fsl,soft-qmc\n",
drivers/soc/fsl/qe/qmc.c
1690
dev_err(qmc->dev, "Another Firmware is already loaded\n");
drivers/soc/fsl/qe/qmc.c
1693
dev_info(qmc->dev, "Firmware already loaded\n");
drivers/soc/fsl/qe/qmc.c
1697
dev_info(qmc->dev, "Using firmware %s\n", filename);
drivers/soc/fsl/qe/qmc.c
1699
ret = request_firmware(&fw, filename, qmc->dev);
drivers/soc/fsl/qe/qmc.c
1701
dev_err(qmc->dev, "Failed to request firmware %s\n", filename);
drivers/soc/fsl/qe/qmc.c
1709
dev_err(qmc->dev, "Invalid firmware %s\n", filename);
drivers/soc/fsl/qe/qmc.c
1716
dev_err(qmc->dev, "Failed to load firmware %s\n", filename);
drivers/soc/fsl/qe/qmc.c
1726
static int qmc_cpm1_init_resources(struct qmc *qmc, struct platform_device *pdev)
drivers/soc/fsl/qe/qmc.c
1730
qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
drivers/soc/fsl/qe/qmc.c
1731
if (IS_ERR(qmc->scc_regs))
drivers/soc/fsl/qe/qmc.c
1732
return PTR_ERR(qmc->scc_regs);
drivers/soc/fsl/qe/qmc.c
1737
qmc->scc_pram_offset = res->start - get_immrbase();
drivers/soc/fsl/qe/qmc.c
1738
qmc->scc_pram = devm_ioremap_resource(qmc->dev, res);
drivers/soc/fsl/qe/qmc.c
1739
if (IS_ERR(qmc->scc_pram))
drivers/soc/fsl/qe/qmc.c
1740
return PTR_ERR(qmc->scc_pram);
drivers/soc/fsl/qe/qmc.c
1742
qmc->dpram = devm_platform_ioremap_resource_byname(pdev, "dpram");
drivers/soc/fsl/qe/qmc.c
1743
if (IS_ERR(qmc->dpram))
drivers/soc/fsl/qe/qmc.c
1744
return PTR_ERR(qmc->dpram);
drivers/soc/fsl/qe/qmc.c
1749
static int qmc_qe_init_resources(struct qmc *qmc, struct platform_device *pdev)
drivers/soc/fsl/qe/qmc.c
1755
qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "ucc_regs");
drivers/soc/fsl/qe/qmc.c
1756
if (IS_ERR(qmc->scc_regs))
drivers/soc/fsl/qe/qmc.c
1757
return PTR_ERR(qmc->scc_regs);
drivers/soc/fsl/qe/qmc.c
1759
ucc_num = tsa_serial_get_num(qmc->tsa_serial);
drivers/soc/fsl/qe/qmc.c
1761
return dev_err_probe(qmc->dev, ucc_num, "Failed to get UCC num\n");
drivers/soc/fsl/qe/qmc.c
1763
qmc->qe_subblock = ucc_slow_get_qe_cr_subblock(ucc_num);
drivers/soc/fsl/qe/qmc.c
1764
if (qmc->qe_subblock == QE_CR_SUBBLOCK_INVALID) {
drivers/soc/fsl/qe/qmc.c
1765
dev_err(qmc->dev, "Unsupported ucc num %u\n", ucc_num);
drivers/soc/fsl/qe/qmc.c
1775
info = devm_qe_muram_alloc(qmc->dev, UCC_SLOW_PRAM_SIZE + 2 * 64,
drivers/soc/fsl/qe/qmc.c
1780
if (!qe_issue_cmd(QE_ASSIGN_PAGE_TO_DEVICE, qmc->qe_subblock,
drivers/soc/fsl/qe/qmc.c
1782
dev_err(qmc->dev, "QE_ASSIGN_PAGE_TO_DEVICE cmd failed");
drivers/soc/fsl/qe/qmc.c
1785
qmc->scc_pram = qe_muram_addr(info);
drivers/soc/fsl/qe/qmc.c
1786
qmc->scc_pram_offset = info;
drivers/soc/fsl/qe/qmc.c
1791
qmc->dpram_offset = res->start - qe_muram_dma(qe_muram_addr(0));
drivers/soc/fsl/qe/qmc.c
1792
qmc->dpram = devm_ioremap_resource(qmc->dev, res);
drivers/soc/fsl/qe/qmc.c
1793
if (IS_ERR(qmc->dpram))
drivers/soc/fsl/qe/qmc.c
1794
return PTR_ERR(qmc->dpram);
drivers/soc/fsl/qe/qmc.c
1799
static int qmc_init_resources(struct qmc *qmc, struct platform_device *pdev)
drivers/soc/fsl/qe/qmc.c
1801
return qmc_is_qe(qmc) ?
drivers/soc/fsl/qe/qmc.c
1802
qmc_qe_init_resources(qmc, pdev) :
drivers/soc/fsl/qe/qmc.c
1803
qmc_cpm1_init_resources(qmc, pdev);
drivers/soc/fsl/qe/qmc.c
1806
static int qmc_cpm1_init_scc(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1812
ret = tsa_serial_connect(qmc->tsa_serial);
drivers/soc/fsl/qe/qmc.c
1814
return dev_err_probe(qmc->dev, ret, "Failed to connect TSA serial\n");
drivers/soc/fsl/qe/qmc.c
1818
qmc_write32(qmc->scc_regs + SCC_GSMRH, val);
drivers/soc/fsl/qe/qmc.c
1821
qmc_write32(qmc->scc_regs + SCC_GSMRL, SCC_CPM1_GSMRL_MODE_QMC);
drivers/soc/fsl/qe/qmc.c
1824
qmc_write16(qmc->scc_regs + SCC_SCCM, 0x0000);
drivers/soc/fsl/qe/qmc.c
1825
qmc_write16(qmc->scc_regs + SCC_SCCE, 0x000F);
drivers/soc/fsl/qe/qmc.c
1830
static int qmc_qe_init_ucc(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1836
qmc_write8(qmc->scc_regs + SCC_QE_UCC_GUEMR,
drivers/soc/fsl/qe/qmc.c
1840
ret = tsa_serial_connect(qmc->tsa_serial);
drivers/soc/fsl/qe/qmc.c
1842
return dev_err_probe(qmc->dev, ret, "Failed to connect TSA serial\n");
drivers/soc/fsl/qe/qmc.c
1845
if (!qe_issue_cmd(QE_PUSHSCHED, qmc->qe_subblock,
drivers/soc/fsl/qe/qmc.c
1847
dev_err(qmc->dev, "QE_CMD_PUSH_SCHED tx cmd failed");
drivers/soc/fsl/qe/qmc.c
1853
if (!qe_issue_cmd(QE_PUSHSCHED, qmc->qe_subblock | 0x00020000,
drivers/soc/fsl/qe/qmc.c
1855
dev_err(qmc->dev, "QE_CMD_PUSH_SCHED rx cmd failed");
drivers/soc/fsl/qe/qmc.c
1864
val = qmc_read16(qmc->scc_pram + QMC_GBL_RX_S_PTR);
drivers/soc/fsl/qe/qmc.c
1865
qmc_write16(qmc->scc_pram + QMC_GBL_RXPTR, val);
drivers/soc/fsl/qe/qmc.c
1866
val = qmc_read16(qmc->scc_pram + QMC_GBL_TX_S_PTR);
drivers/soc/fsl/qe/qmc.c
1867
qmc_write16(qmc->scc_pram + QMC_GBL_TXPTR, val);
drivers/soc/fsl/qe/qmc.c
1872
qmc_write32(qmc->scc_regs + SCC_GSMRH, val);
drivers/soc/fsl/qe/qmc.c
1875
qmc_write32(qmc->scc_regs + SCC_GSMRL, SCC_QE_GSMRL_MODE_QMC);
drivers/soc/fsl/qe/qmc.c
1878
qmc_write16(qmc->scc_regs + SCC_SCCM, 0x0000);
drivers/soc/fsl/qe/qmc.c
1879
qmc_write16(qmc->scc_regs + SCC_SCCE, 0x000F);
drivers/soc/fsl/qe/qmc.c
1884
tsa_serial_disconnect(qmc->tsa_serial);
drivers/soc/fsl/qe/qmc.c
1888
static int qmc_init_xcc(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1890
return qmc_is_qe(qmc) ?
drivers/soc/fsl/qe/qmc.c
1891
qmc_qe_init_ucc(qmc) :
drivers/soc/fsl/qe/qmc.c
1892
qmc_cpm1_init_scc(qmc);
drivers/soc/fsl/qe/qmc.c
1895
static void qmc_exit_xcc(struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
1898
tsa_serial_disconnect(qmc->tsa_serial);
drivers/soc/fsl/qe/qmc.c
1905
struct qmc *qmc;
drivers/soc/fsl/qe/qmc.c
1909
qmc = devm_kzalloc(&pdev->dev, sizeof(*qmc), GFP_KERNEL);
drivers/soc/fsl/qe/qmc.c
1910
if (!qmc)
drivers/soc/fsl/qe/qmc.c
1913
qmc->dev = &pdev->dev;
drivers/soc/fsl/qe/qmc.c
1914
qmc->data = of_device_get_match_data(&pdev->dev);
drivers/soc/fsl/qe/qmc.c
1915
if (!qmc->data) {
drivers/soc/fsl/qe/qmc.c
1916
dev_err(qmc->dev, "Missing match data\n");
drivers/soc/fsl/qe/qmc.c
1919
INIT_LIST_HEAD(&qmc->chan_head);
drivers/soc/fsl/qe/qmc.c
1921
qmc->tsa_serial = devm_tsa_serial_get_byphandle(qmc->dev, np, "fsl,tsa-serial");
drivers/soc/fsl/qe/qmc.c
1922
if (IS_ERR(qmc->tsa_serial)) {
drivers/soc/fsl/qe/qmc.c
1923
return dev_err_probe(qmc->dev, PTR_ERR(qmc->tsa_serial),
drivers/soc/fsl/qe/qmc.c
1927
ret = qmc_init_resources(qmc, pdev);
drivers/soc/fsl/qe/qmc.c
1931
if (qmc_is_qe(qmc)) {
drivers/soc/fsl/qe/qmc.c
1932
ret = qmc_qe_soft_qmc_init(qmc, np);
drivers/soc/fsl/qe/qmc.c
1938
ret = qmc_of_parse_chans(qmc, np);
drivers/soc/fsl/qe/qmc.c
1942
nb_chans = qmc_nb_chans(qmc);
drivers/soc/fsl/qe/qmc.c
1948
qmc->bd_size = (nb_chans * (QMC_NB_TXBDS + QMC_NB_RXBDS)) * sizeof(cbd_t);
drivers/soc/fsl/qe/qmc.c
1949
qmc->bd_table = dmam_alloc_coherent(qmc->dev, qmc->bd_size,
drivers/soc/fsl/qe/qmc.c
1950
&qmc->bd_dma_addr, GFP_KERNEL);
drivers/soc/fsl/qe/qmc.c
1951
if (!qmc->bd_table) {
drivers/soc/fsl/qe/qmc.c
1952
dev_err(qmc->dev, "Failed to allocate bd table\n");
drivers/soc/fsl/qe/qmc.c
1955
memset(qmc->bd_table, 0, qmc->bd_size);
drivers/soc/fsl/qe/qmc.c
1957
qmc_write32(qmc->scc_pram + QMC_GBL_MCBASE, qmc->bd_dma_addr);
drivers/soc/fsl/qe/qmc.c
1960
qmc->int_size = QMC_NB_INTS * sizeof(u16);
drivers/soc/fsl/qe/qmc.c
1961
qmc->int_table = dmam_alloc_coherent(qmc->dev, qmc->int_size,
drivers/soc/fsl/qe/qmc.c
1962
&qmc->int_dma_addr, GFP_KERNEL);
drivers/soc/fsl/qe/qmc.c
1963
if (!qmc->int_table) {
drivers/soc/fsl/qe/qmc.c
1964
dev_err(qmc->dev, "Failed to allocate interrupt table\n");
drivers/soc/fsl/qe/qmc.c
1967
memset(qmc->int_table, 0, qmc->int_size);
drivers/soc/fsl/qe/qmc.c
1969
qmc->int_curr = qmc->int_table;
drivers/soc/fsl/qe/qmc.c
1970
qmc_write32(qmc->scc_pram + QMC_GBL_INTBASE, qmc->int_dma_addr);
drivers/soc/fsl/qe/qmc.c
1971
qmc_write32(qmc->scc_pram + QMC_GBL_INTPTR, qmc->int_dma_addr);
drivers/soc/fsl/qe/qmc.c
1974
qmc_write16(qmc->scc_pram + QMC_GBL_MRBLR, HDLC_MAX_MRU + 4);
drivers/soc/fsl/qe/qmc.c
1976
qmc_write16(qmc->scc_pram + QMC_GBL_GRFTHR, 1);
drivers/soc/fsl/qe/qmc.c
1977
qmc_write16(qmc->scc_pram + QMC_GBL_GRFCNT, 1);
drivers/soc/fsl/qe/qmc.c
1979
qmc_write32(qmc->scc_pram + QMC_GBL_C_MASK32, 0xDEBB20E3);
drivers/soc/fsl/qe/qmc.c
1980
qmc_write16(qmc->scc_pram + QMC_GBL_C_MASK16, 0xF0B8);
drivers/soc/fsl/qe/qmc.c
1982
if (qmc_is_qe(qmc)) {
drivers/soc/fsl/qe/qmc.c
1984
memset_io(qmc->scc_pram + QMC_QE_GBL_RSV_B0_START, 0,
drivers/soc/fsl/qe/qmc.c
1987
qmc_write32(qmc->scc_pram + QMC_QE_GBL_GCSBASE, qmc->dpram_offset);
drivers/soc/fsl/qe/qmc.c
1990
memset_io(qmc->scc_pram + UCC_SLOW_PRAM_SIZE, 0x01, 64);
drivers/soc/fsl/qe/qmc.c
1991
memset_io(qmc->scc_pram + UCC_SLOW_PRAM_SIZE + 64, 0x01, 64);
drivers/soc/fsl/qe/qmc.c
1992
qmc_write16(qmc->scc_pram + QMC_QE_GBL_RX_FRM_BASE,
drivers/soc/fsl/qe/qmc.c
1993
qmc->scc_pram_offset + UCC_SLOW_PRAM_SIZE);
drivers/soc/fsl/qe/qmc.c
1994
qmc_write16(qmc->scc_pram + QMC_QE_GBL_TX_FRM_BASE,
drivers/soc/fsl/qe/qmc.c
1995
qmc->scc_pram_offset + UCC_SLOW_PRAM_SIZE + 64);
drivers/soc/fsl/qe/qmc.c
1998
ret = qmc_init_tsa(qmc);
drivers/soc/fsl/qe/qmc.c
2002
qmc_write16(qmc->scc_pram + QMC_GBL_QMCSTATE, 0x8000);
drivers/soc/fsl/qe/qmc.c
2004
ret = qmc_setup_chans(qmc);
drivers/soc/fsl/qe/qmc.c
2009
ret = qmc_setup_ints(qmc);
drivers/soc/fsl/qe/qmc.c
2014
ret = qmc_init_xcc(qmc);
drivers/soc/fsl/qe/qmc.c
2024
ret = devm_request_irq(qmc->dev, irq, qmc_irq_handler, 0, "qmc", qmc);
drivers/soc/fsl/qe/qmc.c
2029
qmc_write16(qmc->scc_regs + SCC_SCCM,
drivers/soc/fsl/qe/qmc.c
2032
ret = qmc_finalize_chans(qmc);
drivers/soc/fsl/qe/qmc.c
2037
qmc_setbits32(qmc->scc_regs + SCC_GSMRL, SCC_GSMRL_ENR | SCC_GSMRL_ENT);
drivers/soc/fsl/qe/qmc.c
2039
platform_set_drvdata(pdev, qmc);
drivers/soc/fsl/qe/qmc.c
2042
ret = devm_of_platform_populate(qmc->dev);
drivers/soc/fsl/qe/qmc.c
2049
qmc_setbits32(qmc->scc_regs + SCC_GSMRL, 0);
drivers/soc/fsl/qe/qmc.c
2052
qmc_write16(qmc->scc_regs + SCC_SCCM, 0);
drivers/soc/fsl/qe/qmc.c
2055
qmc_exit_xcc(qmc);
drivers/soc/fsl/qe/qmc.c
2061
struct qmc *qmc = platform_get_drvdata(pdev);
drivers/soc/fsl/qe/qmc.c
2064
qmc_setbits32(qmc->scc_regs + SCC_GSMRL, 0);
drivers/soc/fsl/qe/qmc.c
2067
qmc_write16(qmc->scc_regs + SCC_SCCM, 0);
drivers/soc/fsl/qe/qmc.c
2070
qmc_exit_xcc(qmc);
drivers/soc/fsl/qe/qmc.c
208
struct qmc *qmc;
drivers/soc/fsl/qe/qmc.c
2118
struct qmc *qmc;
drivers/soc/fsl/qe/qmc.c
2127
qmc = platform_get_drvdata(pdev);
drivers/soc/fsl/qe/qmc.c
2128
if (!qmc) {
drivers/soc/fsl/qe/qmc.c
2133
if (chan_index >= ARRAY_SIZE(qmc->chans)) {
drivers/soc/fsl/qe/qmc.c
2138
qmc_chan = qmc->chans[chan_index];
drivers/soc/fsl/qe/qmc.c
2201
put_device(chan->qmc->dev);
drivers/soc/fsl/qe/qmc.c
319
static bool qmc_is_qe(const struct qmc *qmc)
drivers/soc/fsl/qe/qmc.c
322
return qmc->data->version == QMC_QE;
drivers/soc/fsl/qe/qmc.c
334
ret = tsa_serial_get_info(chan->qmc->tsa_serial, &tsa_info);
drivers/soc/fsl/qe/qmc.c
383
if (chan->qmc->is_tsa_64rxtx) {
drivers/soc/fsl/qe/qmc.c
392
dev_err(chan->qmc->dev, "Channel rx and/or tx not stopped\n");
drivers/soc/fsl/qe/qmc.c
416
qmc_write16(chan->qmc->scc_pram + QMC_GBL_MRBLR,
drivers/soc/fsl/qe/qmc.c
618
qmc_write32(chan->s_param + QMC_SPE_RPACK, chan->qmc->data->rpack);
drivers/soc/fsl/qe/qmc.c
621
chan->qmc->data->zdstate_transp :
drivers/soc/fsl/qe/qmc.c
622
chan->qmc->data->zdstate_hdlc);
drivers/soc/fsl/qe/qmc.c
623
qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
drivers/soc/fsl/qe/qmc.c
724
dev_err(chan->qmc->dev, "chan %u uses different Rx and Tx TS\n", chan->id);
drivers/soc/fsl/qe/qmc.c
735
curr = qmc_read16(chan->qmc->scc_pram + QMC_GBL_TSATRX + (i * 2));
drivers/soc/fsl/qe/qmc.c
737
dev_err(chan->qmc->dev, "chan %u TxRx entry %d already used\n",
drivers/soc/fsl/qe/qmc.c
748
qmc_clrsetbits16(chan->qmc->scc_pram + QMC_GBL_TSATRX + (i * 2),
drivers/soc/fsl/qe/qmc.c
771
curr = qmc_read16(chan->qmc->scc_pram + QMC_GBL_TSATRX + (i * 2));
drivers/soc/fsl/qe/qmc.c
773
dev_err(chan->qmc->dev, "chan %u Rx entry %d already used\n",
drivers/soc/fsl/qe/qmc.c
784
qmc_clrsetbits16(chan->qmc->scc_pram + QMC_GBL_TSATRX + (i * 2),
drivers/soc/fsl/qe/qmc.c
807
curr = qmc_read16(chan->qmc->scc_pram + QMC_GBL_TSATTX + (i * 2));
drivers/soc/fsl/qe/qmc.c
809
dev_err(chan->qmc->dev, "chan %u Tx entry %d already used\n",
drivers/soc/fsl/qe/qmc.c
820
qmc_clrsetbits16(chan->qmc->scc_pram + QMC_GBL_TSATTX + (i * 2),
drivers/soc/fsl/qe/qmc.c
833
ret = tsa_serial_get_info(chan->qmc->tsa_serial, &info);
drivers/soc/fsl/qe/qmc.c
838
if (chan->qmc->is_tsa_64rxtx)
drivers/soc/fsl/qe/qmc.c
850
ret = tsa_serial_get_info(chan->qmc->tsa_serial, &info);
drivers/soc/fsl/qe/qmc.c
855
if (chan->qmc->is_tsa_64rxtx)
drivers/soc/fsl/qe/qmc.c
868
if (!qe_issue_cmd(cmd, chan->qmc->qe_subblock, chan->id, 0))
drivers/soc/fsl/qe/qmc.c
887
ret = qmc_is_qe(chan->qmc) ?
drivers/soc/fsl/qe/qmc.c
891
dev_err(chan->qmc->dev, "chan %u: Send STOP RECEIVE failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
898
if (!chan->qmc->is_tsa_64rxtx || chan->is_tx_stopped) {
drivers/soc/fsl/qe/qmc.c
901
dev_err(chan->qmc->dev, "chan %u: Disable tsa entries failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
926
ret = qmc_is_qe(chan->qmc) ?
drivers/soc/fsl/qe/qmc.c
930
dev_err(chan->qmc->dev, "chan %u: Send STOP TRANSMIT failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
937
if (!chan->qmc->is_tsa_64rxtx || chan->is_rx_stopped) {
drivers/soc/fsl/qe/qmc.c
940
dev_err(chan->qmc->dev, "chan %u: Disable tsa entries failed (%d)\n",
drivers/soc/fsl/qe/qmc.c
984
static int qmc_setup_chan_trnsync(struct qmc *qmc, struct qmc_chan *chan)
drivers/soc/fsl/qe/qmc.c
993
ret = tsa_serial_get_info(chan->qmc->tsa_serial, &info);