static int alloc_rsp_fq_cpu(struct device *qidev, unsigned int cpu) { struct qm_mcc_initfq opts; struct qman_fq *fq; int ret; u32 flags; fq = &per_cpu(pcpu_qipriv.rsp_fq, cpu); fq->cb.dqrr = caam_rsp_fq_dqrr_cb; flags = QMAN_FQ_FLAG_NO_ENQUEUE | QMAN_FQ_FLAG_DYNAMIC_FQID; ret = qman_create_fq(0, flags, fq); if (ret) { dev_err(qidev, "Rsp FQ create failed\n"); return -ENODEV; } flags = QMAN_INITFQ_FLAG_SCHED; opts.we_mask = QM_INITFQ_WE_FQCTRL | QM_INITFQ_WE_DESTWQ | QM_INITFQ_WE_CONTEXTB | QM_INITFQ_WE_CONTEXTA | QM_INITFQ_WE_CGID | QMAN_INITFQ_FLAG_LOCAL; opts.fqd.fq_ctrl = QM_FQCTRL_CTXASTASHING | QM_FQCTRL_CPCSTASH | QM_FQCTRL_CGE; opts.fqd.dest.channel = qman_affine_channel(cpu); opts.fqd.cgid = qipriv.rsp_cgr.cgrid; opts.fqd.dest.wq = 2; opts.fqd.context_a.stashing.exclusive = QM_STASHING_EXCL_CTX | QM_STASHING_EXCL_DATA; opts.fqd.context_a.stashing.data_cl = 1; opts.fqd.context_a.stashing.context_cl = 1; ret = qman_init_fq(fq, flags, &opts); if (ret) { dev_err(qidev, "Rsp FQ init failed\n"); return -ENODEV; } #ifdef DEBUG dev_info(qidev, "Allocated response FQ %u for CPU %u", fq->fqid, cpu); #endif return 0; }
static int alloc_rsp_fq_cpu(struct device *qidev, unsigned int cpu) { struct qm_mcc_initfq opts; struct qman_fq *fq; int ret; fq = kzalloc(sizeof(*fq), GFP_KERNEL | GFP_DMA); if (!fq) return -ENOMEM; fq->cb.dqrr = caam_rsp_fq_dqrr_cb; ret = qman_create_fq(0, QMAN_FQ_FLAG_NO_ENQUEUE | QMAN_FQ_FLAG_DYNAMIC_FQID, fq); if (ret) { dev_err(qidev, "Rsp FQ create failed\n"); kfree(fq); return -ENODEV; } memset(&opts, 0, sizeof(opts)); opts.we_mask = cpu_to_be16(QM_INITFQ_WE_FQCTRL | QM_INITFQ_WE_DESTWQ | QM_INITFQ_WE_CONTEXTB | QM_INITFQ_WE_CONTEXTA | QM_INITFQ_WE_CGID); opts.fqd.fq_ctrl = cpu_to_be16(QM_FQCTRL_CTXASTASHING | QM_FQCTRL_CPCSTASH | QM_FQCTRL_CGE); qm_fqd_set_destwq(&opts.fqd, qman_affine_channel(cpu), 3); opts.fqd.cgid = qipriv.cgr.cgrid; opts.fqd.context_a.stashing.exclusive = QM_STASHING_EXCL_CTX | QM_STASHING_EXCL_DATA; qm_fqd_set_stashing(&opts.fqd, 0, 1, 1); ret = qman_init_fq(fq, QMAN_INITFQ_FLAG_SCHED, &opts); if (ret) { dev_err(qidev, "Rsp FQ init failed\n"); kfree(fq); return -ENODEV; } per_cpu(pcpu_qipriv.rsp_fq, cpu) = fq; dev_info(qidev, "Allocated response FQ %u for CPU %u", fq->fqid, cpu); return 0; }