forked from mirrors/linux
		
	rtc: imx-sc: add rtc set time support
This patch adds i.MX system controller RTC set time support, the RTC set time is implemented via SIP(silicon provider) runtime service call and ARM-Trusted-Firmware will communicate with system controller via MU(message unit) IPC to set RTC time. Signed-off-by: Anson Huang <Anson.Huang@nxp.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
		
							parent
							
								
									761acdda5c
								
							
						
					
					
						commit
						13a929f38a
					
				
					 1 changed files with 19 additions and 0 deletions
				
			
		|  | @ -3,6 +3,7 @@ | |||
|  * Copyright 2018 NXP. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/arm-smccc.h> | ||||
| #include <linux/firmware/imx/sci.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/of.h> | ||||
|  | @ -12,6 +13,9 @@ | |||
| #define IMX_SC_TIMER_FUNC_GET_RTC_SEC1970	9 | ||||
| #define IMX_SC_TIMER_FUNC_SET_RTC_TIME		6 | ||||
| 
 | ||||
| #define IMX_SIP_SRTC			0xC2000002 | ||||
| #define IMX_SIP_SRTC_SET_TIME		0x0 | ||||
| 
 | ||||
| static struct imx_sc_ipc *rtc_ipc_handle; | ||||
| static struct rtc_device *imx_sc_rtc; | ||||
| 
 | ||||
|  | @ -42,8 +46,23 @@ static int imx_sc_rtc_read_time(struct device *dev, struct rtc_time *tm) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int imx_sc_rtc_set_time(struct device *dev, struct rtc_time *tm) | ||||
| { | ||||
| 	struct arm_smccc_res res; | ||||
| 
 | ||||
| 	/* pack 2 time parameters into 1 register, 16 bits for each */ | ||||
| 	arm_smccc_smc(IMX_SIP_SRTC, IMX_SIP_SRTC_SET_TIME, | ||||
| 		      ((tm->tm_year + 1900) << 16) | (tm->tm_mon + 1), | ||||
| 		      (tm->tm_mday << 16) | tm->tm_hour, | ||||
| 		      (tm->tm_min << 16) | tm->tm_sec, | ||||
| 		      0, 0, 0, &res); | ||||
| 
 | ||||
| 	return res.a0; | ||||
| } | ||||
| 
 | ||||
| static const struct rtc_class_ops imx_sc_rtc_ops = { | ||||
| 	.read_time = imx_sc_rtc_read_time, | ||||
| 	.set_time = imx_sc_rtc_set_time, | ||||
| }; | ||||
| 
 | ||||
| static int imx_sc_rtc_probe(struct platform_device *pdev) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Anson Huang
						Anson Huang