Re: [PATCH] firmware: qcom: scm: Convert to platform driver
From: Andy Gross <hidden>
Date: 2015-09-04 20:34:34
Also in:
linux-arm-kernel, linux-arm-msm, lkml
On Thu, Sep 03, 2015 at 02:33:22PM -0700, Stephen Boyd wrote:
On 07/20, Andy Gross wrote:quoted
This patch creates a platform driver for the SCM so that we can adequately manage resources. This removes clients having to carry the necessary clocks to use the SCM resources. Signed-off-by: Andy Gross <redacted> ---It would be nice if we could use this platform device for doing the DMAish memory allocations that we do in this driver too. I guess one complication there is that we would need to allocate memory with the DMA APIs before CPUs are brought up (early_initcall level).
Yeah that's one thing we could do but we'd have to defer the memory stuff until it's used the first time (specific calls require it).
quoted
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 45c008d..5dd0514 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c@@ -15,14 +15,57 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - +#include <linux/platform_device.h> +#include <linux/module.h> +#include <linux/platform_device.h>This include is here twice.quoted
#include <linux/cpumask.h> #include <linux/export.h> #include <linux/types.h> #include <linux/qcom_scm.h> +#include <linux/of.h> +#include <linux/clk.h>[...]quoted
+ +/** + * qcom_scm_is_available() - Checks if SCM is available + */ +bool qcom_scm_is_available(void) +{ + return !!__scm; +} +EXPORT_SYMBOL(qcom_scm_is_available); + +static int qcom_scm_remove(struct platform_device *pdev) +{ + __scm = NULL; + + return 0; +}Maybe we just shouldn't allow this? The firmware isn't going anywhere at runtime, and this driver is currently marked as bool in the Kconfig.
Fair enough.
quoted
+ +static const struct of_device_id qcom_scm_dt_match[] = { + { .compatible = "qcom,scm",}, + {}, +}; + +MODULE_DEVICE_TABLE(of, qcom_scm_dt_match); + +static struct platform_driver qcom_scm_driver = { + .driver = { + .name = "scm",Maybe 'qcom_scm' ?
yeah i should have used that.
quoted
+ .of_match_table = qcom_scm_dt_match, + }, + .probe = qcom_scm_probe, + .remove = qcom_scm_remove, +}; + +module_platform_driver(qcom_scm_driver);Isn't there some sort of builtin_platform_driver() macro for builtin modules?
I'll take a look and convert. -- Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project