New upstream version 18.11-rc1
[deb_dpdk.git] / drivers / bus / dpaa / base / qbman / qman_driver.c
index 7cfa8ee..ba15339 100644 (file)
@@ -20,9 +20,9 @@ u16 qm_channel_caam = QMAN_CHANNEL_CAAM;
 u16 qm_channel_pme = QMAN_CHANNEL_PME;
 
 /* Ccsr map address to access ccsrbased register */
-void *qman_ccsr_map;
+static void *qman_ccsr_map;
 /* The qman clock frequency */
-u32 qman_clk;
+static u32 qman_clk;
 
 static __thread int qmfd = -1;
 static __thread struct qm_portal_config qpcfg;
@@ -113,6 +113,11 @@ static int fsl_qman_portal_finish(void)
        return ret;
 }
 
+int qman_thread_fd(void)
+{
+       return qmfd;
+}
+
 int qman_thread_init(void)
 {
        /* Convert from contiguous/virtual cpu numbering to real cpu when
@@ -135,7 +140,7 @@ void qman_thread_irq(void)
         * rather than breaking that encapsulation I am simply hard-coding the
         * offset to the inhibit register here.
         */
-       out_be32(qpcfg.addr_virt[DPAA_PORTAL_CI] + 0xe0c, 0);
+       out_be32(qpcfg.addr_virt[DPAA_PORTAL_CI] + 0x36C0, 0);
 }
 
 struct qman_portal *fsl_qman_portal_create(void)
@@ -160,6 +165,7 @@ struct qman_portal *fsl_qman_portal_create(void)
                                     &cpuset);
        if (ret) {
                error(0, ret, "pthread_getaffinity_np()");
+               kfree(q_pcfg);
                return NULL;
        }
 
@@ -168,12 +174,14 @@ struct qman_portal *fsl_qman_portal_create(void)
                if (CPU_ISSET(loop, &cpuset)) {
                        if (q_pcfg->cpu != -1) {
                                pr_err("Thread is not affine to 1 cpu\n");
+                               kfree(q_pcfg);
                                return NULL;
                        }
                        q_pcfg->cpu = loop;
                }
        if (q_pcfg->cpu == -1) {
                pr_err("Bug in getaffinity handling!\n");
+               kfree(q_pcfg);
                return NULL;
        }
 
@@ -183,6 +191,7 @@ struct qman_portal *fsl_qman_portal_create(void)
        ret = process_portal_map(&q_map);
        if (ret) {
                error(0, ret, "process_portal_map()");
+               kfree(q_pcfg);
                return NULL;
        }
        q_pcfg->channel = q_map.channel;
@@ -217,6 +226,7 @@ err2:
        close(q_fd);
 err1:
        process_portal_unmap(&q_map.addr);
+       kfree(q_pcfg);
        return NULL;
 }
 
@@ -246,7 +256,6 @@ int fsl_qman_portal_destroy(struct qman_portal *qp)
 int qman_global_init(void)
 {
        const struct device_node *dt_node;
-       int ret = 0;
        size_t lenp;
        const u32 *chanid;
        static int ccsr_map_fd;
@@ -352,9 +361,7 @@ int qman_global_init(void)
                qman_clk = be32_to_cpu(*clk);
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
-       ret = qman_setup_fq_lookup_table(CONFIG_FSL_QMAN_FQ_LOOKUP_MAX);
-       if (ret)
-               return ret;
+       return qman_setup_fq_lookup_table(CONFIG_FSL_QMAN_FQ_LOOKUP_MAX);
 #endif
        return 0;
 }