lkml.org 
[lkml]   [2019]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 24/36] coresight: Reuse platform data structure for connection tracking
    Date
    The platform specific information describes the connections and
    the ports of a given coresigh device. This information is also
    recorded in the coresight device as separate fields. Let us reuse
    the original platform description to streamline the handling
    of the data.

    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    ---
    drivers/hwtracing/coresight/coresight-tmc-etr.c | 4 +--
    drivers/hwtracing/coresight/coresight.c | 46 ++++++++++++-------------
    include/linux/coresight.h | 8 ++---
    3 files changed, 27 insertions(+), 31 deletions(-)

    diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
    index 0911f9c..d3ff2c7 100644
    --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
    +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
    @@ -747,8 +747,8 @@ tmc_etr_get_catu_device(struct tmc_drvdata *drvdata)
    if (!IS_ENABLED(CONFIG_CORESIGHT_CATU))
    return NULL;

    - for (i = 0; i < etr->nr_outport; i++) {
    - tmp = etr->conns[i].child_dev;
    + for (i = 0; i < etr->pdata->nr_outport; i++) {
    + tmp = etr->pdata->conns[i].child_dev;
    if (tmp && coresight_is_catu_device(tmp))
    return tmp;
    }
    diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
    index 530ad69..f6c5244 100644
    --- a/drivers/hwtracing/coresight/coresight.c
    +++ b/drivers/hwtracing/coresight/coresight.c
    @@ -100,8 +100,8 @@ static int coresight_find_link_inport(struct coresight_device *csdev,
    int i;
    struct coresight_connection *conn;

    - for (i = 0; i < parent->nr_outport; i++) {
    - conn = &parent->conns[i];
    + for (i = 0; i < parent->pdata->nr_outport; i++) {
    + conn = &parent->pdata->conns[i];
    if (conn->child_dev == csdev)
    return conn->child_port;
    }
    @@ -118,8 +118,8 @@ static int coresight_find_link_outport(struct coresight_device *csdev,
    int i;
    struct coresight_connection *conn;

    - for (i = 0; i < csdev->nr_outport; i++) {
    - conn = &csdev->conns[i];
    + for (i = 0; i < csdev->pdata->nr_outport; i++) {
    + conn = &csdev->pdata->conns[i];
    if (conn->child_dev == child)
    return conn->outport;
    }
    @@ -304,10 +304,10 @@ static void coresight_disable_link(struct coresight_device *csdev,

    if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_MERG) {
    refport = inport;
    - nr_conns = csdev->nr_inport;
    + nr_conns = csdev->pdata->nr_inport;
    } else if (link_subtype == CORESIGHT_DEV_SUBTYPE_LINK_SPLIT) {
    refport = outport;
    - nr_conns = csdev->nr_outport;
    + nr_conns = csdev->pdata->nr_outport;
    } else {
    refport = 0;
    nr_conns = 1;
    @@ -593,9 +593,10 @@ static void coresight_grab_device(struct coresight_device *csdev)
    {
    int i;

    - for (i = 0; i < csdev->nr_outport; i++) {
    - struct coresight_device *child = csdev->conns[i].child_dev;
    + for (i = 0; i < csdev->pdata->nr_outport; i++) {
    + struct coresight_device *child;

    + child = csdev->pdata->conns[i].child_dev;
    if (child && child->type == CORESIGHT_DEV_TYPE_HELPER)
    pm_runtime_get_sync(child->dev.parent);
    }
    @@ -611,9 +612,10 @@ static void coresight_drop_device(struct coresight_device *csdev)
    int i;

    pm_runtime_put(csdev->dev.parent);
    - for (i = 0; i < csdev->nr_outport; i++) {
    - struct coresight_device *child = csdev->conns[i].child_dev;
    + for (i = 0; i < csdev->pdata->nr_outport; i++) {
    + struct coresight_device *child;

    + child = csdev->pdata->conns[i].child_dev;
    if (child && child->type == CORESIGHT_DEV_TYPE_HELPER)
    pm_runtime_put(child->dev.parent);
    }
    @@ -643,9 +645,10 @@ static int _coresight_build_path(struct coresight_device *csdev,
    goto out;

    /* Not a sink - recursively explore each port found on this element */
    - for (i = 0; i < csdev->nr_outport; i++) {
    - struct coresight_device *child_dev = csdev->conns[i].child_dev;
    + for (i = 0; i < csdev->pdata->nr_outport; i++) {
    + struct coresight_device *child_dev;

    + child_dev = csdev->pdata->conns[i].child_dev;
    if (child_dev &&
    _coresight_build_path(child_dev, sink, path) == 0) {
    found = true;
    @@ -998,8 +1001,8 @@ static int coresight_orphan_match(struct device *dev, void *data)
    * Circle throuch all the connection of that component. If we find
    * an orphan connection whose name matches @csdev, link it.
    */
    - for (i = 0; i < i_csdev->nr_outport; i++) {
    - conn = &i_csdev->conns[i];
    + for (i = 0; i < i_csdev->pdata->nr_outport; i++) {
    + conn = &i_csdev->pdata->conns[i];

    /* We have found at least one orphan connection */
    if (conn->child_dev == NULL) {
    @@ -1038,8 +1041,8 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev)
    {
    int i;

    - for (i = 0; i < csdev->nr_outport; i++) {
    - struct coresight_connection *conn = &csdev->conns[i];
    + for (i = 0; i < csdev->pdata->nr_outport; i++) {
    + struct coresight_connection *conn = &csdev->pdata->conns[i];
    struct device *dev = NULL;

    if (conn->child_name)
    @@ -1073,8 +1076,8 @@ static int coresight_remove_match(struct device *dev, void *data)
    * Circle throuch all the connection of that component. If we find
    * a connection whose name matches @csdev, remove it.
    */
    - for (i = 0; i < iterator->nr_outport; i++) {
    - conn = &iterator->conns[i];
    + for (i = 0; i < iterator->pdata->nr_outport; i++) {
    + conn = &iterator->pdata->conns[i];

    if (conn->child_dev == NULL)
    continue;
    @@ -1106,7 +1109,7 @@ static void coresight_remove_conns(struct coresight_device *csdev)
    * doesn't have at least one input port, there is no point
    * in searching all the devices.
    */
    - if (csdev->nr_inport)
    + if (csdev->pdata->nr_inport)
    bus_for_each_dev(&coresight_bustype, NULL,
    csdev, coresight_remove_match);
    }
    @@ -1193,10 +1196,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)

    csdev->refcnt = refcnts;

    - csdev->nr_inport = desc->pdata->nr_inport;
    - csdev->nr_outport = desc->pdata->nr_outport;
    -
    - csdev->conns = desc->pdata->conns;
    + csdev->pdata = desc->pdata;

    csdev->type = desc->type;
    csdev->subtype = desc->subtype;
    diff --git a/include/linux/coresight.h b/include/linux/coresight.h
    index 84a2137..8c10def 100644
    --- a/include/linux/coresight.h
    +++ b/include/linux/coresight.h
    @@ -140,9 +140,7 @@ struct coresight_connection {

    /**
    * struct coresight_device - representation of a device as used by the framework
    - * @conns: array of coresight_connections associated to this component.
    - * @nr_inport: number of input port associated to this component.
    - * @nr_outport: number of output port associated to this component.
    + * @pdata: Platform data with device connections associated to this device.
    * @type: as defined by @coresight_dev_type.
    * @subtype: as defined by @coresight_dev_subtype.
    * @ops: generic operations for this component, as defined
    @@ -157,9 +155,7 @@ struct coresight_connection {
    * @ea: Device attribute for sink representation under PMU directory.
    */
    struct coresight_device {
    - struct coresight_connection *conns;
    - int nr_inport;
    - int nr_outport;
    + struct coresight_platform_data *pdata;
    enum coresight_dev_type type;
    union coresight_dev_subtype subtype;
    const struct coresight_ops *ops;
    --
    2.7.4
    \
     
     \ /
      Last update: 2019-04-15 18:08    [W:2.619 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site