cregit-Linux how code gets into the kernel

Release 4.14 drivers/hwtracing/coresight/of_coresight.c

/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <linux/types.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/clk.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_graph.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/amba/bus.h>
#include <linux/coresight.h>
#include <linux/cpumask.h>
#include <asm/smp_plat.h>



static int of_dev_node_match(struct device *dev, void *data) { return dev->of_node == data; }

Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel22100.00%1100.00%
Total22100.00%1100.00%


static struct device * of_coresight_get_endpoint_device(struct device_node *endpoint) { struct device *dev = NULL; /* * If we have a non-configurable replicator, it will be found on the * platform bus. */ dev = bus_find_device(&platform_bus_type, NULL, endpoint, of_dev_node_match); if (dev) return dev; /* * We have a configurable component - circle through the AMBA bus * looking for the device that matches the endpoint node. */ return bus_find_device(&amba_bustype, NULL, endpoint, of_dev_node_match); }

Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel5598.21%150.00%
Pankaj Dubey11.79%150.00%
Total56100.00%2100.00%


static void of_coresight_get_ports(const struct device_node *node, int *nr_inport, int *nr_outport) { struct device_node *ep = NULL; int in = 0, out = 0; do { ep = of_graph_get_next_endpoint(node, ep); if (!ep) break; if (of_property_read_bool(ep, "slave-mode")) in++; else out++; } while (ep); *nr_inport = in; *nr_outport = out; }

Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel8397.65%133.33%
Leo Yan11.18%133.33%
Philipp Zabel11.18%133.33%
Total85100.00%3100.00%


static int of_coresight_alloc_memory(struct device *dev, struct coresight_platform_data *pdata) { /* List of output port on this component */ pdata->outports = devm_kzalloc(dev, pdata->nr_outport * sizeof(*pdata->outports), GFP_KERNEL); if (!pdata->outports) return -ENOMEM; /* Children connected to this component via @outports */ pdata->child_names = devm_kzalloc(dev, pdata->nr_outport * sizeof(*pdata->child_names), GFP_KERNEL); if (!pdata->child_names) return -ENOMEM; /* Port number on the child this component is connected to */ pdata->child_ports = devm_kzalloc(dev, pdata->nr_outport * sizeof(*pdata->child_ports), GFP_KERNEL); if (!pdata->child_ports) return -ENOMEM; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel12399.19%150.00%
Xia Kaixu10.81%150.00%
Total124100.00%2100.00%


int of_coresight_get_cpu(const struct device_node *node) { int cpu; bool found; struct device_node *dn, *np; dn = of_parse_phandle(node, "cpu", 0); /* Affinity defaults to CPU0 */ if (!dn) return 0; for_each_possible_cpu(cpu) { np = of_cpu_device_node_get(cpu); found = (dn == np); of_node_put(np); if (found) break; } of_node_put(dn); /* Affinity to CPU0 if no cpu nodes are found */ return found ? cpu : 0; }

Contributors

PersonTokensPropCommitsCommitProp
Leo Yan89100.00%1100.00%
Total89100.00%1100.00%

EXPORT_SYMBOL_GPL(of_coresight_get_cpu);
struct coresight_platform_data * of_get_coresight_platform_data(struct device *dev, const struct device_node *node) { int i = 0, ret = 0; struct coresight_platform_data *pdata; struct of_endpoint endpoint, rendpoint; struct device *rdev; struct device_node *ep = NULL; struct device_node *rparent = NULL; struct device_node *rport = NULL; pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return ERR_PTR(-ENOMEM); /* Use device name as sysfs handle */ pdata->name = dev_name(dev); /* Get the number of input and output port for this component */ of_coresight_get_ports(node, &pdata->nr_inport, &pdata->nr_outport); if (pdata->nr_outport) { ret = of_coresight_alloc_memory(dev, pdata); if (ret) return ERR_PTR(ret); /* Iterate through each port to discover topology */ do { /* Get a handle on a port */ ep = of_graph_get_next_endpoint(node, ep); if (!ep) break; /* * No need to deal with input ports, processing for as * processing for output ports will deal with them. */ if (of_find_property(ep, "slave-mode", NULL)) continue; /* Get a handle on the local endpoint */ ret = of_graph_parse_endpoint(ep, &endpoint); if (ret) continue; /* The local out port number */ pdata->outports[i] = endpoint.port; /* * Get a handle on the remote port and parent * attached to it. */ rparent = of_graph_get_remote_port_parent(ep); rport = of_graph_get_remote_port(ep); if (!rparent || !rport) continue; if (of_graph_parse_endpoint(rport, &rendpoint)) continue; rdev = of_coresight_get_endpoint_device(rparent); if (!rdev) return ERR_PTR(-EPROBE_DEFER); pdata->child_names[i] = dev_name(rdev); pdata->child_ports[i] = rendpoint.id; i++; } while (ep); } pdata->cpu = of_coresight_get_cpu(node); return pdata; }

Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel28193.05%111.11%
Mathieu J. Poirier72.32%111.11%
Suzuki K. Poulose51.66%111.11%
Leo Yan51.66%222.22%
Xia Kaixu20.66%222.22%
Mike Leach10.33%111.11%
Philipp Zabel10.33%111.11%
Total302100.00%9100.00%

EXPORT_SYMBOL_GPL(of_get_coresight_platform_data);

Overall Contributors

PersonTokensPropCommitsCommitProp
Pratik Patel60683.24%18.33%
Leo Yan10013.74%216.67%
Mathieu J. Poirier101.37%216.67%
Suzuki K. Poulose50.69%18.33%
Xia Kaixu30.41%325.00%
Philipp Zabel20.27%18.33%
Pankaj Dubey10.14%18.33%
Mike Leach10.14%18.33%
Total728100.00%12100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.