2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-23 04:34:11 +08:00

coresight: configuring ETF in FIFO mode when acting as link

When part of a path but not identified as a sink, the EFT has to
be configured as a link and placed in HW FIFO mode.  As such when
enabling a path, call the right configuration function based on
the role the ETF if playing in this trace run.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Mathieu Poirier 2016-05-03 11:34:00 -06:00 committed by Greg Kroah-Hartman
parent 2e499bbc1a
commit dc2c4ef141

View File

@ -265,15 +265,27 @@ static void coresight_disable_source(struct coresight_device *csdev)
void coresight_disable_path(struct list_head *path) void coresight_disable_path(struct list_head *path)
{ {
u32 type;
struct coresight_node *nd; struct coresight_node *nd;
struct coresight_device *csdev, *parent, *child; struct coresight_device *csdev, *parent, *child;
list_for_each_entry(nd, path, link) { list_for_each_entry(nd, path, link) {
csdev = nd->csdev; csdev = nd->csdev;
type = csdev->type;
switch (csdev->type) { /*
* ETF devices are tricky... They can be a link or a sink,
* depending on how they are configured. If an ETF has been
* "activated" it will be configured as a sink, otherwise
* go ahead with the link configuration.
*/
if (type == CORESIGHT_DEV_TYPE_LINKSINK)
type = (csdev == coresight_get_sink(path)) ?
CORESIGHT_DEV_TYPE_SINK :
CORESIGHT_DEV_TYPE_LINK;
switch (type) {
case CORESIGHT_DEV_TYPE_SINK: case CORESIGHT_DEV_TYPE_SINK:
case CORESIGHT_DEV_TYPE_LINKSINK:
coresight_disable_sink(csdev); coresight_disable_sink(csdev);
break; break;
case CORESIGHT_DEV_TYPE_SOURCE: case CORESIGHT_DEV_TYPE_SOURCE:
@ -294,15 +306,27 @@ int coresight_enable_path(struct list_head *path, u32 mode)
{ {
int ret = 0; int ret = 0;
u32 type;
struct coresight_node *nd; struct coresight_node *nd;
struct coresight_device *csdev, *parent, *child; struct coresight_device *csdev, *parent, *child;
list_for_each_entry_reverse(nd, path, link) { list_for_each_entry_reverse(nd, path, link) {
csdev = nd->csdev; csdev = nd->csdev;
type = csdev->type;
switch (csdev->type) { /*
* ETF devices are tricky... They can be a link or a sink,
* depending on how they are configured. If an ETF has been
* "activated" it will be configured as a sink, otherwise
* go ahead with the link configuration.
*/
if (type == CORESIGHT_DEV_TYPE_LINKSINK)
type = (csdev == coresight_get_sink(path)) ?
CORESIGHT_DEV_TYPE_SINK :
CORESIGHT_DEV_TYPE_LINK;
switch (type) {
case CORESIGHT_DEV_TYPE_SINK: case CORESIGHT_DEV_TYPE_SINK:
case CORESIGHT_DEV_TYPE_LINKSINK:
ret = coresight_enable_sink(csdev, mode); ret = coresight_enable_sink(csdev, mode);
if (ret) if (ret)
goto err; goto err;