[RTEMS Project] #3277: QorIQ: Add MAC-less DPAA driver to libbsd

RTEMS trac trac at rtems.org
Tue Jan 23 14:00:01 UTC 2018


#3277: QorIQ: Add MAC-less DPAA driver to libbsd
-----------------------------+------------------------------
 Reporter:  Sebastian Huber  |       Owner:  Sebastian Huber
     Type:  enhancement      |      Status:  assigned
 Priority:  normal           |   Milestone:  5.1
Component:  network/libbsd   |     Version:  5
 Severity:  normal           |  Resolution:
 Keywords:                   |  Blocked By:
 Blocking:                   |
-----------------------------+------------------------------

Comment (by Sebastian Huber <sebastian.huber@…>):

 In [changeset:"327f4e1029ae2b332fa7f9fd2521dead00d401e1/rtems-libbsd"
 327f4e1/rtems-libbsd]:
 {{{
 #!CommitTicketReference repository="rtems-libbsd"
 revision="327f4e1029ae2b332fa7f9fd2521dead00d401e1"
 sdk_dpaa: What to do with tail queue drop?

 The issue is this:

 static int dpaa_eth_macless_probe(struct platform_device *_of_dev)
 {
 [...]
     INIT_LIST_HEAD(&priv->dpa_fq_list);

     err = dpa_fq_probe_macless(dev, &priv->dpa_fq_list, RX);
     if (!err)
         err = dpa_fq_probe_macless(dev, &priv->dpa_fq_list,
                        TX);
     if (err < 0)
         goto fq_probe_failed;
 [...]
     /* Add the FQs to the interface, and make them active */
     /* For MAC-less devices we only get here for RX frame queues
      * initialization, which are the TX queues of the other
      * partition.
      * It is safe to rely on one partition to set the FQ taildrop
      * threshold for the TX queues of the other partition
      * because the ERN notifications will be received by the
      * partition doing qman_enqueue.
      */
     err = dpa_fqs_init(dev,  &priv->dpa_fq_list, true);
     if (err < 0)
         goto fq_alloc_failed;
 [...]

 The priv->dpa_fq_list contains a list of FQ_TYPE_RX_PCD  and FQ_TYPE_TX
 items.  I don't understand what the "For MAC-less devices we only get
 here for RX frame queues initialization" means in this context.  The
 td_enable == true in dpa_fqs_init().  So, we have:

 int dpa_fq_init(struct dpa_fq *dpa_fq, bool td_enable)
 {
 [...]
         if (dpa_fq->fq_type == FQ_TYPE_TX ||
                 dpa_fq->fq_type == FQ_TYPE_TX_CONFIRM ||
                 dpa_fq->fq_type == FQ_TYPE_TX_CONF_MQ) {
 [...]
             initfq.we_mask |= QM_INITFQ_WE_OAC;
 [...]
         }

         if (td_enable) {
             initfq.we_mask |= QM_INITFQ_WE_TDTHRESH;
             qm_fqd_taildrop_set(&initfq.fqd.td,
                     DPA_FQ_TD, 1);
             initfq.fqd.fq_ctrl = QM_FQCTRL_TDE;
         }

 The td_enable == true && dpa_fq->fq_type == FQ_TYPE_TX causes later:

 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq
 *opts)
 {
 [...]
     if (opts && (opts->we_mask & QM_INITFQ_WE_OAC)) {
         /* And can't be set at the same time as TDTHRESH */
         if (opts->we_mask & QM_INITFQ_WE_TDTHRESH)
             return -EINVAL;
     }

 This aborts the  initialization of the MAC-less driver.  I don't
 understand why this path doesn't happen on the SDK Linux system.

 Update #3277.
 }}}

--
Ticket URL: <http://devel.rtems.org/ticket/3277#comment:20>
RTEMS Project <http://www.rtems.org/>
RTEMS Project


More information about the bugs mailing list