[PATCH] powerpc/85xx: add sleep and deep sleep support

Chenhui Zhao chenhui.zhao at freescale.com
Mon Aug 3 21:10:32 AEST 2015



On Sat, Aug 1, 2015 at 10:57 AM, Scott Wood <scottwood at freescale.com> 
wrote:
> On Fri, 2015-07-24 at 20:46 +0800, Chenhui Zhao wrote:
>>  +static void mpc85xx_pmc_set_wake(struct device *dev, void *enable)
>>   {
>>        int ret;
>>  +     u32 value[2];
>>  +
>>  +     if (!device_may_wakeup(dev))
>>  +             return;
>>  +
>>  +     if (!pmc_regs) {
>>  +             dev_err(dev, "%s: PMC is unavailable\n", __func__);
>>  +             return;
>>  +     }
>>  +
>>  +     ret = of_property_read_u32_array(dev->of_node, "sleep", 
>> value, 2);
> 
> This will crash on any device without an of_node.

Add this before this line:
if (!dev->of_node)
	return;

> 
> 
>>  +     if (ret) {
>>  +             dev_dbg(dev, "%s: Can not find the \"sleep\" 
>> property.\n",
>>  +                     __func__);
>>  +             return;
>>  +     }
>>  +
>>  +     if (*(int *)enable)
>>  +             pmc_pmcdr_mask &= ~value[1];
>>  +     else
>>  +             pmc_pmcdr_mask |= value[1];
>>  +
>>  +     if ((value[1] & 0xe0) && (pmc_flag & PMC_LOSSLESS))
>>  +             pmc_powmgtcsr = POWMGTCSR_LOSSLESS;
>>  +}
> 
> What is 0xe0?
> 
> -Scott

This is a mask value for the register PMCDR, which includes all bits 
corresponding to eTSEC. Will use a macro instead.

-Chenhui



More information about the Linuxppc-dev mailing list