Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44a1003b authored by Mathieu Poirier's avatar Mathieu Poirier
Browse files

coresight: fixing CPU hwid lookup in device tree



Some DT specification will represent CPU nodes with address
cells greater than one, making the current code fail.  Using
the proper retrieval helper function ensure the correct hwid
for CPUs is read properly with different address cell size.

Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 34a03c1d30f04ca7439c685c0ea9b7d79c353705)
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
parent 86eb6c8d
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ struct coresight_platform_data *of_get_coresight_platform_data(
	struct coresight_platform_data *pdata;
	struct of_endpoint endpoint, rendpoint;
	struct device *rdev;
	struct device_node *cpu;
	struct device_node *dn;
	struct device_node *ep = NULL;
	struct device_node *rparent = NULL;
	struct device_node *rport = NULL;
@@ -186,14 +186,16 @@ struct coresight_platform_data *of_get_coresight_platform_data(

	/* Affinity defaults to CPU0 */
	pdata->cpu = 0;
	cpu = of_parse_phandle(node, "cpu", 0);
	if (cpu) {
		const u32 *mpidr;
	dn = of_parse_phandle(node, "cpu", 0);
	if (dn) {
		const u32 *cell;
		int len, index;
		u64 hwid;

		mpidr = of_get_property(cpu, "reg", &len);
		if (mpidr && len == 4) {
			index = get_logical_index(be32_to_cpup(mpidr));
		cell = of_get_property(dn, "reg", &len);
		if (cell) {
			hwid = of_read_number(cell, of_n_addr_cells(dn));
			index = get_logical_index(hwid);
			if (index != -EINVAL)
				pdata->cpu = index;
		}