From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0121.outbound.protection.outlook.com [104.47.36.121]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 40hwkf5DpvzF2Cn for ; Fri, 11 May 2018 13:36:58 +1000 (AEST) From: Yinbo Zhu To: , Rob Herring , Mark Rutland , "Catalin Marinas )" , "Will Deacon )" , "Lorenzo Pieralisi )" , Li Yang CC: , , Daniel Lezcano , Thomas Gleixner , Shawn Guo , Madalin Bucur , Hou Zhiqiang , Changming Huang , Minghuan Lian , Zhao Qiang , Fabio Estevam , "jiaheng . fan" , Po Liu , Nipun Gupta , =?UTF-8?q?Horia=20Geant=C4=83?= , Priyanka Jain , Sumit Garg , costi , Bogdan Purcareata , Meng Yi , Wang Dongsheng , "open list:CLOCKSOURCE, CLOCKEVENT DRIVERS" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , , "open list:FREESCALE SOC DRIVERS" , Tang Yuantian , Subject: [PATCH 2/9] armv8: pm: Fix issue of rcpm driver wrongly program other IP control bits Date: Fri, 11 May 2018 11:35:23 +0800 Message-ID: <20180511033530.7931-2-yinbo.zhu@nxp.com> In-Reply-To: <20180511033530.7931-1-yinbo.zhu@nxp.com> References: <20180511033530.7931-1-yinbo.zhu@nxp.com> MIME-Version: 1.0 Content-Type: text/plain List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Ran Wang When rcpm driver get target register data from DTS property 'fsl, rcpm-wakeup' (second value), it directly write that data to register RCPM_IPPDEXPCRx rather than 'OR' the value read from it before. This operation will over-write those non-related IP control bit which might have been programmed, should be prevented. Signed-off-by: Ran Wang Signed-off-by: Yinbo Zhu --- drivers/soc/fsl/rcpm.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c index ff0477b..39eabfb 100644 --- a/drivers/soc/fsl/rcpm.c +++ b/drivers/soc/fsl/rcpm.c @@ -75,6 +75,7 @@ static void rcpm_wakeup_fixup(struct device *dev, void *data) static int rcpm_suspend_prepare(void) { int i; + u32 val; WARN_ON(!rcpm); @@ -84,9 +85,12 @@ static int rcpm_suspend_prepare(void) dpm_for_each_dev(NULL, rcpm_wakeup_fixup); for (i = 0; i < rcpm->ipp_num; i++) { - rcpm_reg_write(rcpm->ippdexpcr_offset + 4 * i, - rcpm->ippdexpcr[i]); - pr_debug("ippdexpcr%d = 0x%x\n", i, rcpm->ippdexpcr[i]); + if (rcpm->ippdexpcr[i]) { + val = rcpm_reg_read(rcpm->ippdexpcr_offset + 4 * i); + rcpm_reg_write(rcpm->ippdexpcr_offset + 4 * i, + val | rcpm->ippdexpcr[i]); + pr_debug("ippdexpcr%d = 0x%x\n", i, rcpm->ippdexpcr[i]); + } } return 0; -- 1.7.1