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:
parent
720400372b
commit
8ac992bfcd
1 changed files with 30 additions and 0 deletions
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue