svn commit: r312679 - head/sys/arm/freescale/imx
Yoshiro MIHIRA
sanpei.ml at gmail.com
Wed Feb 15 10:31:23 UTC 2017
Hi.
Ian
Thank you for your strong effort to support imx6 board.
I have SolidRun HummingBoard-i2(imx6dl-hummingboard).
I have reboot issue(never reset after reboot) and if I use Linux, I
reproduce this issue So I reported this issue to SolidRun Forum.
http://forum.solid-run.com/linux-on-cubox-i-and-hummingboard-f8/need-to-push-reset-button-to-reboot-linux-system-t3122.html
But I could not get any information.
I tested latest kernel(r313280) unfortunately it was not solved.
Do you know other information about reset issue, please let me know.
Currently I need to push reset button when I restart system...
Yours
Yoshiro MIHIRA
2017年1月24日(火) 11:09 Ian Lepore <ian at freebsd.org>:
> Author: ian
> Date: Tue Jan 24 02:09:30 2017
> New Revision: 312679
> URL: https://svnweb.freebsd.org/changeset/base/312679
>
> Log:
> Handle imx6 erratum ERR004346... to reboot, clear the SRS bit twice
> within
> the same cycle of the 32khz clock.
>
> I've never actually noticed this error happening, but it's an easy fix.
>
> Modified:
> head/sys/arm/freescale/imx/imx_machdep.c
>
> Modified: head/sys/arm/freescale/imx/imx_machdep.c
>
> ==============================================================================
> --- head/sys/arm/freescale/imx/imx_machdep.c Tue Jan 24 01:39:40 2017
> (r312678)
> +++ head/sys/arm/freescale/imx/imx_machdep.c Tue Jan 24 02:09:30 2017
> (r312679)
> @@ -69,11 +69,18 @@ imx_wdog_cpu_reset(vm_offset_t wdcr_phys
> * Trigger an immediate reset by clearing the SRS bit in the
> watchdog
> * control register. The reset happens on the next cycle of the
> wdog
> * 32KHz clock, so hang out in a spin loop until the reset takes
> effect.
> + *
> + * Imx6 erratum ERR004346 says the SRS bit has to be cleared twice
> + * within the same cycle of the 32khz clock to reliably trigger the
> + * reset. Writing it 3 times in a row ensures at least 2 of the
> writes
> + * happen in the same 32k clock cycle.
> */
> if ((pcr = devmap_ptov(wdcr_physaddr, sizeof(*pcr))) == NULL) {
> printf("cpu_reset() can't find its control register...
> locking up now.");
> } else {
> *pcr &= ~WDOG_CR_SRS;
> + *pcr &= ~WDOG_CR_SRS;
> + *pcr &= ~WDOG_CR_SRS;
> }
> for (;;)
> continue;
>
>
More information about the svn-src-all
mailing list