Changeset 0f6ff4a in rtems-libbsd


Ignore:
Timestamp:
Jan 10, 2018, 2:08:19 PM (18 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5283630d2c9d40deb0183696d278e02644fe4326, bc2ba9a9cdc7381c2a4f2ae6ee303be636f31368
Children:
f5ed3aa
Parents:
a7d252c
git-author:
Sebastian Huber <sebastian.huber@…> (01/10/18 14:08:19)
git-committer:
Sebastian Huber <sebastian.huber@…> (01/23/18 13:55:24)
Message:

dpaa: QMan portal only initialization

Update #3277.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • linux/drivers/soc/fsl/qbman/qman_ccsr.c

    ra7d252c r0f6ff4a  
    5050EXPORT_SYMBOL(qm_channel_caam);
    5151
     52#ifdef CONFIG_FSL_QMAN_CONFIG
    5253/* Register offsets */
    5354#define REG_QCSP_LIO_CFG(n)     (0x0000 + ((n) * 0x10))
     
    284285/* Pointer to the start of the QMan's CCSR space */
    285286static u32 __iomem *qm_ccsr_start;
     287#endif /* CONFIG_FSL_QMAN_CONFIG */
    286288/* A SDQCR mask comprising all the available/visible pool channels */
    287289static u32 qm_pools_sdqcr;
    288290
     291#ifdef CONFIG_FSL_QMAN_CONFIG
    289292static inline u32 qm_ccsr_in(u32 offset)
    290293{
     
    296299        iowrite32be(val, qm_ccsr_start + offset/4);
    297300}
     301#endif /* CONFIG_FSL_QMAN_CONFIG */
    298302
    299303u32 qm_get_pools_sdqcr(void)
     
    302306}
    303307
     308#ifdef CONFIG_FSL_QMAN_CONFIG
    304309enum qm_dc_portal {
    305310        qm_dc_portal_fman0 = 0,
     
    662667        }
    663668}
     669#else /* !CONFIG_FSL_QMAN_CONFIG */
     670static unsigned int qm_get_fqid_maxcnt(void)
     671{
     672        return 1U << 16;
     673}
     674
     675void qman_liodn_fixup(u16 channel)
     676{
     677}
     678
     679void qman_set_sdest(u16 channel, unsigned int cpu_idx)
     680{
     681}
     682#endif /* CONFIG_FSL_QMAN_CONFIG */
    664683
    665684static int qman_resource_init(struct device *dev)
     
    712731}
    713732
     733#ifdef CONFIG_FSL_QMAN_CONFIG
    714734static int fsl_qman_probe(struct platform_device *pdev)
    715735{
     
    830850        return 0;
    831851}
     852#endif /* CONFIG_FSL_QMAN_CONFIG */
    832853
    833854#ifndef __rtems__
     
    858879{
    859880        const char *fdt = bsp_fdt_get();
     881        const char *name;
     882        int node;
     883        int ret;
     884#ifdef CONFIG_FSL_QMAN_CONFIG
    860885        struct {
    861886                struct platform_device pdev;
    862887                struct device_node of_node;
    863888        } dev;
    864         const char *name;
    865         int node;
    866         int ret;
     889#endif
    867890
    868891        name = "fsl,qman";
    869         node = fdt_node_offset_by_compatible(fdt, 0, name);
    870         if (node < 0)
    871                 panic("qman: no qman in FDT");
     892        node = fdt_node_offset_by_compatible(fdt, -1, name);
     893#ifdef CONFIG_FSL_QMAN_CONFIG
     894        BSD_ASSERT(node >= 0);
    872895
    873896        memset(&dev, 0, sizeof(dev));
     
    877900
    878901        ret = fsl_qman_probe(&dev.pdev);
    879         if (ret != 0)
    880                 panic("qman: init failed");
     902        BSD_ASSERT(ret == 0);
     903#else /* !CONFIG_FSL_QMAN_CONFIG */
     904        BSD_ASSERT(node < 0);
     905        BSD_ASSERT(fdt_node_offset_by_compatible(fdt, -1,
     906            "fsl,qman-portal-3.1.2") >= 0);
     907
     908        qman_ip_rev = QMAN_REV31;
     909        qm_channel_pool1 = QMAN_CHANNEL_POOL1_REV3;
     910        qm_channel_caam = QMAN_CHANNEL_CAAM_REV3;
     911
     912        qm_fqalloc = devm_gen_pool_create(NULL, 0, -1, "qman-fqalloc");
     913        BSD_ASSERT(!IS_ERR(qm_fqalloc));
     914
     915        qm_qpalloc = devm_gen_pool_create(NULL, 0, -1, "qman-qpalloc");
     916        BSD_ASSERT(!IS_ERR(qm_qpalloc));
     917
     918        qm_cgralloc = devm_gen_pool_create(NULL, 0, -1, "qman-cgralloc");
     919        BSD_ASSERT(!IS_ERR(qm_cgralloc));
     920
     921        ret = qman_resource_init(NULL);
     922        BSD_ASSERT(ret == 0);
     923
     924        ret = qman_alloc_fq_table(qm_get_fqid_maxcnt());
     925        BSD_ASSERT(ret == 0);
     926
     927        ret = qman_wq_alloc();
     928        BSD_ASSERT(ret == 0);
     929#endif /* CONFIG_FSL_QMAN_CONFIG */
    881930
    882931        qman_sysinit_portals();
  • linux/drivers/soc/fsl/qbman/qman_portal.c

    ra7d252c r0f6ff4a  
    404404                return (NULL);
    405405
    406         list_del(&pcfg->node);
     406        list_del_init(&pcfg->node);
    407407
    408408        irq_sources = QM_PIRQ_EQCI | QM_PIRQ_EQRI | QM_PIRQ_MRI | QM_PIRQ_CSCI
     
    434434        if (ret != 0)
    435435                panic("qman: no portal CE address");
    436 #if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT)
    437         pcfg->addr_virt[0] = (__iomem void *)
    438             ((uintptr_t)&qoriq_qman_portal[0][0] + (uintptr_t)res.start);
     436        pcfg->addr_virt[0] = (__iomem void *)(uintptr_t)res.start;
     437#if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT) && \
     438    !defined(QORIQ_IS_HYPERVISOR_GUEST)
    439439        BSD_ASSERT((uintptr_t)pcfg->addr_virt[0] >=
    440440            (uintptr_t)&qoriq_qman_portal[0][0]);
     
    446446        if (ret != 0)
    447447                panic("qman: no portal CI address");
    448 #if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT)
    449         pcfg->addr_virt[1] = (__iomem void *)
    450             ((uintptr_t)&qoriq_qman_portal[0][0] + (uintptr_t)res.start);
     448        pcfg->addr_virt[1] = (__iomem void *)(uintptr_t)res.start;
     449#if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT) && \
     450    !defined(QORIQ_IS_HYPERVISOR_GUEST)
    451451        BSD_ASSERT((uintptr_t)pcfg->addr_virt[1] >=
    452452            (uintptr_t)&qoriq_qman_portal[1][0]);
     
    472472
    473473                portal = init_pcfg(pcfg);
    474                 if (portal == NULL)
    475                         panic("qman: cannot create portal");
     474                BSD_ASSERT(portal != NULL);
    476475
    477476                qman_portal_update_sdest(pcfg, val);
     
    491490        int i;
    492491        int node;
    493         int parent;
    494 
    495         memset(&dn, 0, sizeof(dn));
    496 
    497         name = "fsl,qman-portal";
    498         node = fdt_node_offset_by_compatible(fdt, 0, name);
    499         if (node < 0)
    500                 panic("qman: no portals in FDT");
    501         parent = fdt_parent_offset(fdt, node);
    502         if (parent < 0)
    503                 panic("qman: no parent of portals in FDT");
    504         node = fdt_first_subnode(fdt, parent);
    505 
    506         dn.full_name = name;
    507         dn.offset = node;
    508 
    509 #if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT)
     492
     493#if QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT) && \
     494    !defined(QORIQ_IS_HYPERVISOR_GUEST)
    510495        qoriq_clear_ce_portal(&qoriq_qman_portal[0][0],
    511496            sizeof(qoriq_qman_portal[0]));
     
    514499#endif
    515500
     501        memset(&dn, 0, sizeof(dn));
     502        name = "fsl,qman-portal";
     503        node = -1;
     504        dn.full_name = name;
    516505        i = 0;
    517         while (node >= 0 && i < MAX_QMAN_PORTALS) {
    518                 if (fdt_node_check_compatible(fdt, node, name) == 0) {
    519                         do_init_pcfg(&dn, &qman_configs[i], cpu_count);
    520                         ++i;
     506
     507        while (i < MAX_QMAN_PORTALS) {
     508                node = fdt_node_offset_by_compatible(fdt, node, name);
     509                if (node < 0)
     510                        break;
     511
     512                dn.offset = node;
     513                do_init_pcfg(&dn, &qman_configs[i], cpu_count);
     514                ++i;
     515        }
     516
     517        if (i < cpu_count)
     518                panic("qman: not enough affine portals");
     519
     520        /*
     521         * We try to use the "cell-index" for the affine portal processor
     522         * index.  This is not always possible, so equip the remaining
     523         * processors with portals from the free list.  Ignore the
     524         * "libbsd,dequeue" property.
     525         */
     526        for (i = 0; i < cpu_count; ++i) {
     527                struct qman_portal *p;
     528
     529                p = affine_portals[i];
     530                if (p == NULL) {
     531                        struct qm_portal_config *pcfg;
     532                        struct qman_portal *portal;
     533
     534                        if (list_empty(&qman_free_portals))
     535                                panic("qman: no free affine portal");
     536
     537                        pcfg = list_first_entry(&qman_free_portals,
     538                            struct qm_portal_config, node);
     539                        list_del_init(&pcfg->node);
     540
     541                        pcfg->cpu = i;
     542                        pcfg->pools = qm_get_pools_sdqcr();
     543
     544                        portal = init_pcfg(pcfg);
     545                        BSD_ASSERT(portal != NULL);
     546
     547                        qman_portal_update_sdest(pcfg, i);
     548
    521549                }
    522 
    523                 node = fdt_next_subnode(fdt, node);
    524                 dn.offset = node;
    525         }
    526 
    527         if (i < cpu_count)
    528                 panic("qman: not enough portals in FDT");
     550        }
    529551
    530552        /* all assigned portals are initialized now */
  • rtemsbsd/include/rtems/bsd/local/opt_dpaa.h

    ra7d252c r0f6ff4a  
    1919
    2020#define KBUILD_MODNAME "dpaa"
     21
     22#ifndef QORIQ_IS_HYPERVISOR_GUEST
     23#define CONFIG_FSL_QMAN_CONFIG
     24#endif
Note: See TracChangeset for help on using the changeset viewer.