[PATCH v2] qcom: scm: Add qcom_scm_set_warm_boot_addr function

Kumar Gala galak at codeaurora.org
Fri Feb 27 14:01:50 PST 2015


On Feb 27, 2015, at 3:51 PM, Lina Iyer <lina.iyer at linaro.org> wrote:

> On Fri, Feb 27 2015 at 14:33 -0700, Kumar Gala wrote:
>> 
>> On Feb 27, 2015, at 2:47 PM, Lina Iyer <lina.iyer at linaro.org> wrote:
>> 
>>> A core can be powered down for cpuidle or when it is hotplugged off. In
>>> either case, the warmboot return address would be different. Allow
>>> setting the warmboot address for a specific cpu, optimize and write to
>>> the firmware, if the address is different than the previously set
>>> address.
>>> 
>>> Export qcom_scm_set_warm_boot_addr function move the warm boot flags to
>>> implementation.
>>> 
>>> Signed-off-by: Lina Iyer <lina.iyer at linaro.org>
>>> ---
>>> drivers/firmware/qcom_scm.c | 36 ++++++++++++++++++++++++++++++++++++
>>> include/linux/qcom_scm.h    |  5 +----
>>> 2 files changed, 37 insertions(+), 4 deletions(-)
>>> 
>>> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
>>> index 6e7a72b..19133ca 100644
>>> --- a/drivers/firmware/qcom_scm.c
>>> +++ b/drivers/firmware/qcom_scm.c
>>> @@ -34,6 +34,23 @@
>>> #define QCOM_SCM_ERROR		-1
>>> #define QCOM_SCM_INTERRUPTED	1
>>> 
>>> +#define QCOM_SCM_FLAG_WARMBOOT_CPU0	0x04
>>> +#define QCOM_SCM_FLAG_WARMBOOT_CPU1	0x02
>>> +#define QCOM_SCM_FLAG_WARMBOOT_CPU2	0x10
>>> +#define QCOM_SCM_FLAG_WARMBOOT_CPU3	0x40
>>> +
>>> +struct scm_warmboot {
>>> +	int flag;
>>> +	void *entry;
>>> +};
>>> +
>>> +static struct scm_warmboot scm_flags[] = {
>>> +	{ .flag = QCOM_SCM_FLAG_WARMBOOT_CPU0 },
>>> +	{ .flag = QCOM_SCM_FLAG_WARMBOOT_CPU1 },
>>> +	{ .flag = QCOM_SCM_FLAG_WARMBOOT_CPU2 },
>>> +	{ .flag = QCOM_SCM_FLAG_WARMBOOT_CPU3 },
>>> +};
>>> +
>>> static DEFINE_MUTEX(qcom_scm_lock);
>>> 
>>> /**
>>> @@ -342,3 +359,22 @@ int qcom_scm_set_boot_addr(u32 addr, int flags)
>>> 			&cmd, sizeof(cmd), NULL, 0);
>>> }
>>> EXPORT_SYMBOL(qcom_scm_set_boot_addr);
>>> +
>> 
>> Since you are adding a new interface, can you add Kdoc style comment header.  I need to do this for the other interfaces as well.
> 
> OK.
> 
>> 
>>> +int qcom_scm_set_warm_boot_addr(void *entry, int cpu)
>> 
>> I’d really like to see if we could make the set_boot_addr and set_warm_boot_addr have the same interfaces.
> 
> I am working on making the interfaces similar. There is some check in
> the platsmp.c that uses the cold boot flag array to determine the
> present cpus. Do you think, we can ignore that check over there? If that
> can be done, I will change the interface for cold boot too.

I don’t see any reason we can’t add qcom_scm_set_cold_boot_addr() move the flags such that they only exist in qcom_scm_set_boot_addr and make qcom_scm_set_boot_addr static.

- k

-- 
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project




More information about the linux-arm-kernel mailing list