可以在这里用WFE替换WFI

时间:2017-07-31 12:39:00

标签: assembly arm linux-device-driver arm64

我们有以下片段用于使用RMR寄存器从AARCH32切换到AARCH64。

http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/include/asm/arch-sunxi/boot0.h;hb=HEAD

/*
 * Configuration settings for the Allwinner A64 (sun50i) CPU
 *
 * SPDX-License-Identifier: GPL-2.0+
*/

#if defined(CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER) && !defined(CONFIG_SPL_BUILD)
/* reserve space for BOOT0 header information */
     b  reset
    .space  1532
#elif defined(CONFIG_ARM_BOOT_HOOK_RMR)
/*
* Switch into AArch64 if needed.
* Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source.
*/
  tst     x0, x0                  // this is "b #0x84" in ARM
  b       reset
. space  0x7c
.word   0xe59f1024  // ldr     r1, [pc, #36] ; 0x170000a0
.word   0xe59f0024  // ldr     r0, [pc, #36] ; CONFIG_*_TEXT_BASE
.word   0xe5810000  // str     r0, [r1]
.word   0xf57ff04f  // dsb     sy
.word   0xf57ff06f  // isb     sy
.word   0xee1c0f50  // mrc     15, 0, r0, cr12, cr0, {2} ; RMR
.word   0xe3800003  // orr     r0, r0, #3
.word   0xee0c0f50  // mcr     15, 0, r0, cr12, cr0, {2} ; RMR
.word   0xf57ff06f  // isb     sy
.word   0xe320f003  // wfi
.word   0xeafffffd  // b       @wfi
.word   0x017000a0  // writeable RVBAR mapping address
 #ifdef CONFIG_SPL_BUILD
.word   CONFIG_SPL_TEXT_BASE
 #else
.word   CONFIG_SYS_TEXT_BASE
 #endif
 #else
/* normal execution */
 b  reset
 #endif

在第27和28行,wfi用于将内核置于低功耗状态,当某些中断发生时,内核将被唤醒。

我几乎没有疑问:

  1. wfib .之后的说明会按原样执行吗?

  2. 是否可以使用WFE代替wfi类似的工作,并在B之后被SEVL唤醒?

0 个答案:

没有答案