Commit a2d00f3d authored by Madalin Bucur's avatar Madalin Bucur Committed by David S. Miller

soc: fsl: qbman: allow registering a device link for the portal user

Introduce the API required to make sure that the devices that use
the QMan portal are unbound when the portal is unbound.
Signed-off-by: default avatarMadalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e414696d
...@@ -1749,6 +1749,19 @@ struct qman_portal *qman_get_affine_portal(int cpu) ...@@ -1749,6 +1749,19 @@ struct qman_portal *qman_get_affine_portal(int cpu)
} }
EXPORT_SYMBOL(qman_get_affine_portal); EXPORT_SYMBOL(qman_get_affine_portal);
int qman_start_using_portal(struct qman_portal *p, struct device *dev)
{
return (!device_link_add(dev, p->config->dev,
DL_FLAG_AUTOREMOVE_CONSUMER)) ? -EINVAL : 0;
}
EXPORT_SYMBOL(qman_start_using_portal);
void qman_stop_using_portal(struct qman_portal *p, struct device *dev)
{
device_link_remove(dev, p->config->dev);
}
EXPORT_SYMBOL(qman_stop_using_portal);
int qman_p_poll_dqrr(struct qman_portal *p, unsigned int limit) int qman_p_poll_dqrr(struct qman_portal *p, unsigned int limit)
{ {
return __poll_portal_fast(p, limit); return __poll_portal_fast(p, limit);
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#define __FSL_QMAN_H #define __FSL_QMAN_H
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/device.h>
/* Hardware constants */ /* Hardware constants */
#define QM_CHANNEL_SWPORTAL0 0 #define QM_CHANNEL_SWPORTAL0 0
...@@ -914,6 +915,23 @@ u16 qman_affine_channel(int cpu); ...@@ -914,6 +915,23 @@ u16 qman_affine_channel(int cpu);
*/ */
struct qman_portal *qman_get_affine_portal(int cpu); struct qman_portal *qman_get_affine_portal(int cpu);
/**
* qman_start_using_portal - register a device link for the portal user
* @p: the portal that will be in use
* @dev: the device that will use the portal
*
* Makes sure that the devices that use the portal are unbound when the
* portal is unbound
*/
int qman_start_using_portal(struct qman_portal *p, struct device *dev);
/**
* qman_stop_using_portal - deregister a device link for the portal user
* @p: the portal that will no longer be in use
* @dev: the device that uses the portal
*/
void qman_stop_using_portal(struct qman_portal *p, struct device *dev);
/** /**
* qman_p_poll_dqrr - process DQRR (fast-path) entries * qman_p_poll_dqrr - process DQRR (fast-path) entries
* @limit: the maximum number of DQRR entries to process * @limit: the maximum number of DQRR entries to process
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment