Changeset 327f4e1 in rtems-libbsd


Ignore:
Timestamp:
01/11/18 13:30:49 (5 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5, 5-freebsd-12, 6-freebsd-12, master
Children:
8b3da13
Parents:
d62a3df
git-author:
Sebastian Huber <sebastian.huber@…> (01/11/18 13:30:49)
git-committer:
Sebastian Huber <sebastian.huber@…> (01/23/18 13:55:35)
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • linux/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_macless.c

    rd62a3df r327f4e1  
    476476#else /* __rtems__ */
    477477        list_for_each_entry_safe(dpaa_fq, tmp, &priv->dpaa_fq_list, list) {
    478                 err = dpaa_fq_init(dpaa_fq, true);
     478                err = dpaa_fq_init(dpaa_fq, false);
    479479                if (err < 0)
    480480                        goto fq_alloc_failed;
Note: See TracChangeset for help on using the changeset viewer.