Skip to content

Commit

Permalink
soc: fsl: qbman: allow registering a device link for the portal user
Browse files Browse the repository at this point in the history
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: Madalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Madalin Bucur authored and David S. Miller committed Oct 31, 2019
1 parent e414696 commit a2d00f3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/soc/fsl/qbman/qman.c
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,19 @@ struct qman_portal *qman_get_affine_portal(int cpu)
}
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)
{
return __poll_portal_fast(p, limit);
Expand Down
18 changes: 18 additions & 0 deletions include/soc/fsl/qman.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#define __FSL_QMAN_H

#include <linux/bitops.h>
#include <linux/device.h>

/* Hardware constants */
#define QM_CHANNEL_SWPORTAL0 0
Expand Down Expand Up @@ -914,6 +915,23 @@ u16 qman_affine_channel(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
* @limit: the maximum number of DQRR entries to process
Expand Down

0 comments on commit a2d00f3

Please sign in to comment.