Changeset 0f6ff4a in rtems-libbsd for linux/drivers/soc/fsl/qbman/qman_portal.c


Ignore:
Timestamp:
Jan 10, 2018, 2:08:19 PM (22 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
c1e05b9ea378b2971e3d7704779112b4bc4296da, 4a77611a223ea883fb548679b516d326a020d447
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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 */
Note: See TracChangeset for help on using the changeset viewer.