summaryrefslogtreecommitdiffstats
path: root/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-13 08:31:46 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-23 09:24:07 +0200
commitde5791b34591b88911c350d835d8b45d274cc852 (patch)
tree20fda544699545de464a9ffcf5ad5716208c0b4a /linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
parentdpaa: Add "libbsd,dequeue" to QMan portals (diff)
downloadrtems-libbsd-de5791b34591b88911c350d835d8b45d274cc852.tar.bz2
dpaa: Add "libbsd,dedicated-portal" to QMan portals
By default, the network interfaces use a pool channel, see dpaa_get_channel() in dpaa_eth_priv_probe(). To enable a dedicated QMan software portal, use libbsd,dedicated-portal = "enabled";. This option is useful for special purpose 10Gbit/s Ethernet processing. / { soc: soc@ffe000000 { fman0: fman@400000 { enet7: ethernet@f2000 { libbsd,dedicated-portal = "enabled"; }; }; }; };
Diffstat (limited to 'linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c')
-rw-r--r--linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
index c2e9b378..3861420e 100644
--- a/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
+++ b/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
@@ -3078,6 +3078,17 @@ dpaa_eth_priv_probe(struct platform_device *pdev, struct mac_device *mac_dev)
priv->mac_dev = mac_dev;
+#ifdef __rtems__
+ if (mac_dev->use_dedicated_portal) {
+ struct qman_portal *portal;
+
+ portal = qman_get_dedicated_portal(0);
+ BSD_ASSERT(portal != NULL);
+ mac_dev->portal = portal;
+ channel = qman_portal_get_channel(portal);
+ priv->channel = (u16)channel;
+ } else {
+#endif /* __rtems__ */
channel = dpaa_get_channel();
if (channel < 0) {
dev_err(dev, "dpaa_get_channel() failed\n");
@@ -3091,6 +3102,9 @@ dpaa_eth_priv_probe(struct platform_device *pdev, struct mac_device *mac_dev)
* and add this pool channel to each's dequeue mask.
*/
dpaa_eth_add_channel(priv->channel);
+#ifdef __rtems__
+ }
+#endif /* __rtems__ */
dpaa_fq_setup(priv, &dpaa_fq_cbs, priv->mac_dev->port[TX]);