Commit 996cdfaf authored by Sai Prakash Ranjan's avatar Sai Prakash Ranjan Committed by Greg Kroah-Hartman
Browse files

coresight: Do not default to CPU0 for missing CPU phandle



Coresight platform support assumes that a missing "cpu" phandle
defaults to CPU0. This could be problematic and unnecessarily binds
components to CPU0, where they may not be. In coresight etm and
cpu-debug drivers, abort the probe for such cases.

Signed-off-by: default avatarSai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Reviewed-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Tested-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/f1955ea19c714cf64ea54ec356a9aa85f3cd17b8.1562229018.git.saiprakash.ranjan@codeaurora.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1141301c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -579,6 +579,9 @@ static int debug_probe(struct amba_device *adev, const struct amba_id *id)
		return -ENOMEM;

	drvdata->cpu = coresight_get_cpu(dev);
	if (drvdata->cpu < 0)
		return drvdata->cpu;

	if (per_cpu(debug_drvdata, drvdata->cpu)) {
		dev_err(dev, "CPU%d drvdata has already been initialized\n",
			drvdata->cpu);
+3 −0
Original line number Diff line number Diff line
@@ -816,6 +816,9 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id)
	}

	drvdata->cpu = coresight_get_cpu(dev);
	if (drvdata->cpu < 0)
		return drvdata->cpu;

	desc.name  = devm_kasprintf(dev, GFP_KERNEL, "etm%d", drvdata->cpu);
	if (!desc.name)
		return -ENOMEM;
+3 −0
Original line number Diff line number Diff line
@@ -1101,6 +1101,9 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
	spin_lock_init(&drvdata->spinlock);

	drvdata->cpu = coresight_get_cpu(dev);
	if (drvdata->cpu < 0)
		return drvdata->cpu;

	desc.name = devm_kasprintf(dev, GFP_KERNEL, "etm%d", drvdata->cpu);
	if (!desc.name)
		return -ENOMEM;
+10 −10
Original line number Diff line number Diff line
@@ -159,16 +159,16 @@ static int of_coresight_get_cpu(struct device *dev)
	struct device_node *dn;

	if (!dev->of_node)
		return 0;
		return -ENODEV;

	dn = of_parse_phandle(dev->of_node, "cpu", 0);
	/* Affinity defaults to CPU0 */
	if (!dn)
		return 0;
		return -ENODEV;

	cpu = of_cpu_node_to_id(dn);
	of_node_put(dn);

	/* Affinity to CPU0 if no cpu nodes are found */
	return (cpu < 0) ? 0 : cpu;
	return cpu;
}

/*
@@ -310,7 +310,7 @@ of_get_coresight_platform_data(struct device *dev,

static inline int of_coresight_get_cpu(struct device *dev)
{
	return 0;
	return -ENODEV;
}
#endif

@@ -734,14 +734,14 @@ static int acpi_coresight_get_cpu(struct device *dev)
	struct acpi_device *adev = ACPI_COMPANION(dev);

	if (!adev)
		return 0;
		return -ENODEV;
	status = acpi_get_parent(adev->handle, &cpu_handle);
	if (ACPI_FAILURE(status))
		return 0;
		return -ENODEV;

	cpu = acpi_handle_to_logical_cpuid(cpu_handle);
	if (cpu >= nr_cpu_ids)
		return 0;
		return -ENODEV;
	return cpu;
}

@@ -769,7 +769,7 @@ acpi_get_coresight_platform_data(struct device *dev,

static inline int acpi_coresight_get_cpu(struct device *dev)
{
	return 0;
	return -ENODEV;
}
#endif