quark_se: Save/restore debug registers.

In order to set breakpoints after waking up from sleep,
it is needed to save DR0/DR1/DR2/DR3 and DR6/DR7.

As DR4/DR5 are reserved or mapped to DR6/DR7, they are not saved.

Patch2 : Added compile time checks for debug build or soc_watch
build for Intel Energy analysis.

Patch3 : Avoid clobbering of edx.

JIRA: ZEP-1681

Change-Id: I62fbedca16953d57196420ecae4fb93c785bb4a5
Signed-off-by: Sarath R Nair <sarath.nandu.ramachandran.nair@intel.com>
This commit is contained in:
Sarath R Nair 2017-02-08 11:43:53 -06:00 committed by Andrew Boie
commit 8ac992bfcd

View file

@ -21,6 +21,21 @@ SECTION_FUNC(TEXT, save_cpu_context)
pushf /* save flags */ pushf /* save flags */
pusha /* save GPRs */ pusha /* save GPRs */
#if defined (CONFIG_DEBUG) || defined (CONFIG_SOC_WATCH)
/* save the debug registers */
movl %dr0, %edx
pushl %edx
movl %dr1, %edx
pushl %edx
movl %dr2, %edx
pushl %edx
movl %dr3, %edx
pushl %edx
movl %dr6, %edx
pushl %edx
movl %dr7, %edx
pushl %edx
#endif
movl %esp, _pm_save_esp /* save stack ptr */ movl %esp, _pm_save_esp /* save stack ptr */
sidtl _pm_save_idtr /* save idtr */ sidtl _pm_save_idtr /* save idtr */
sgdtl _pm_save_gdtr /* save gdtr */ sgdtl _pm_save_gdtr /* save gdtr */
@ -32,6 +47,21 @@ SECTION_FUNC(TEXT, _power_restore_cpu_context)
lgdtl _pm_save_gdtr /* restore gdtr */ lgdtl _pm_save_gdtr /* restore gdtr */
lidtl _pm_save_idtr /* restore idtr */ lidtl _pm_save_idtr /* restore idtr */
movl _pm_save_esp, %esp /* restore saved stack ptr */ movl _pm_save_esp, %esp /* restore saved stack ptr */
#if defined (CONFIG_DEBUG) || defined (CONFIG_SOC_WATCH)
/* restore the debug registers */
popl %edx
movl %edx, %dr7
popl %edx
movl %edx, %dr6
popl %edx
movl %edx, %dr3
popl %edx
movl %edx, %dr2
popl %edx
movl %edx, %dr1
popl %edx
movl %edx, %dr0
#endif
popa /* restore saved GPRs */ popa /* restore saved GPRs */
popf /* restore saved flags */ popf /* restore saved flags */