Set the base address of translation table 0.
This fixes operation on Qualcomm Snapdragon and some other platforms. During boot time on subsystems initialization we have some amount of kernel threads created, then scheduler gives CPU time to each thread. Eventually scheduler returns CPU execution back to thread 0. In this case writing zero to ttbr0 in cpu_switch leads Qualcomm board to reboot (asynchronously, CPU continues execution). Similar to other kernel threads install a valid physical address (kernel pmap) to user page table base register ttbr0. Reviewed by: andrew Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D13536
This commit is contained in:
parent
77258f226e
commit
8673b42398
@ -715,6 +715,9 @@ init_proc0(vm_offset_t kstack)
|
||||
thread0.td_pcb->pcb_vfpcpu = UINT_MAX;
|
||||
thread0.td_frame = &proc0_tf;
|
||||
pcpup->pc_curpcb = thread0.td_pcb;
|
||||
|
||||
/* Set the base address of translation table 0. */
|
||||
thread0.td_proc->p_md.md_l0addr = READ_SPECIALREG(ttbr0_el1);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
Loading…
Reference in New Issue
Block a user