📄 proc-xscale.s
字号:
* Errata 40: must set memory to write-through for user read-only pages. */ .align 5ENTRY(cpu_xscale_set_pte) str r1, [r0], #-2048 @ linux version bic r2, r1, #0xff0 orr r2, r2, #PTE_TYPE_EXT @ extended page eor r3, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY tst r3, #L_PTE_USER @ User? orrne r2, r2, #PTE_EXT_AP_URO_SRW @ yes -> user r/o, system r/w tst r3, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? orreq r2, r2, #PTE_EXT_AP_UNO_SRW @ yes -> user n/a, system r/w @ combined with user -> user r/w @ @ Handle the X bit. We want to set this bit for the minicache @ (U = E = B = W = 0, C = 1) or when write allocate is enabled, @ and we have a writeable, cacheable region. If we ignore the @ U and E bits, we can allow user space to use the minicache as @ well. @ @ X = (C & ~W & ~B) | (C & W & B & write_allocate) @ eor ip, r1, #L_PTE_CACHEABLE tst ip, #L_PTE_CACHEABLE | L_PTE_WRITE | L_PTE_BUFFERABLE#if PTE_CACHE_WRITE_ALLOCATE eorne ip, r1, #L_PTE_CACHEABLE | L_PTE_WRITE | L_PTE_BUFFERABLE tstne ip, #L_PTE_CACHEABLE | L_PTE_WRITE | L_PTE_BUFFERABLE#endif orreq r2, r2, #PTE_EXT_TEX(1) @ @ Erratum 40: The B bit must be cleared for a user read-only @ cacheable page. @ @ B = B & ~(U & C & ~W) @ and ip, r1, #L_PTE_USER | L_PTE_WRITE | L_PTE_CACHEABLE teq ip, #L_PTE_USER | L_PTE_CACHEABLE biceq r2, r2, #PTE_BUFFERABLE tst r3, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? movne r2, #0 @ no -> fault str r2, [r0] @ hardware version mov ip, #0 mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer mov pc, lr .ltorg .align __INIT .type __xscale_setup, #function__xscale_setup: mcr p15, 0, ip, c7, c7, 0 @ invalidate I, D caches & BTB mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer mcr p15, 0, ip, c8, c7, 0 @ invalidate I, D TLBs#ifdef CONFIG_IWMMXT mov r0, #0 @ initially disallow access to CP0/CP1#else mov r0, #1 @ Allow access to CP0#endif orr r0, r0, #1 << 6 @ cp6 for IOP3xx and Bulverde orr r0, r0, #1 << 13 @ Its undefined whether this mcr p15, 0, r0, c15, c1, 0 @ affects USR or SVC modes mrc p15, 0, r0, c1, c0, 0 @ get control register ldr r5, xscale_cr1_clear bic r0, r0, r5 ldr r5, xscale_cr1_set orr r0, r0, r5 mov pc, lr .size __xscale_setup, . - __xscale_setup /* * R * .RVI ZFRS BLDP WCAM * ..11 1.01 .... .101 * */ .type xscale_cr1_clear, #object .type xscale_cr1_set, #objectxscale_cr1_clear: .word 0x3b07xscale_cr1_set: .word 0x3905 __INITDATA/* * Purpose : Function pointers used to access above functions - all calls * come through these */ .type xscale_processor_functions, #objectENTRY(xscale_processor_functions) .word v5t_early_abort .word cpu_xscale_proc_init .word cpu_xscale_proc_fin .word cpu_xscale_reset .word cpu_xscale_do_idle .word cpu_xscale_dcache_clean_area .word cpu_xscale_switch_mm .word cpu_xscale_set_pte .size xscale_processor_functions, . - xscale_processor_functions .section ".rodata" .type cpu_arch_name, #objectcpu_arch_name: .asciz "armv5te" .size cpu_arch_name, . - cpu_arch_name .type cpu_elf_name, #objectcpu_elf_name: .asciz "v5" .size cpu_elf_name, . - cpu_elf_name .type cpu_80200_name, #objectcpu_80200_name: .asciz "XScale-80200" .size cpu_80200_name, . - cpu_80200_name .type cpu_8032x_name, #objectcpu_8032x_name: .asciz "XScale-IOP8032x Family" .size cpu_8032x_name, . - cpu_8032x_name .type cpu_8033x_name, #objectcpu_8033x_name: .asciz "XScale-IOP8033x Family" .size cpu_8033x_name, . - cpu_8033x_name .type cpu_pxa250_name, #objectcpu_pxa250_name: .asciz "XScale-PXA250" .size cpu_pxa250_name, . - cpu_pxa250_name .type cpu_pxa210_name, #objectcpu_pxa210_name: .asciz "XScale-PXA210" .size cpu_pxa210_name, . - cpu_pxa210_name .type cpu_ixp42x_name, #objectcpu_ixp42x_name: .asciz "XScale-IXP42x Family" .size cpu_ixp42x_name, . - cpu_ixp42x_name .type cpu_ixp46x_name, #objectcpu_ixp46x_name: .asciz "XScale-IXP46x Family" .size cpu_ixp46x_name, . - cpu_ixp46x_name .type cpu_ixp2400_name, #objectcpu_ixp2400_name: .asciz "XScale-IXP2400" .size cpu_ixp2400_name, . - cpu_ixp2400_name .type cpu_ixp2800_name, #objectcpu_ixp2800_name: .asciz "XScale-IXP2800" .size cpu_ixp2800_name, . - cpu_ixp2800_name .type cpu_pxa255_name, #objectcpu_pxa255_name: .asciz "XScale-PXA255" .size cpu_pxa255_name, . - cpu_pxa255_name .type cpu_pxa270_name, #objectcpu_pxa270_name: .asciz "XScale-PXA270" .size cpu_pxa270_name, . - cpu_pxa270_name .align .section ".proc.info.init", #alloc, #execinstr .type __80200_proc_info,#object__80200_proc_info: .long 0x69052000 .long 0xfffffff0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_80200_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __80200_proc_info, . - __80200_proc_info .type __8032x_proc_info,#object__8032x_proc_info: .long 0x69052420 .long 0xfffff5e0 @ mask should accomodate IOP80219 also .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_8032x_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __8032x_proc_info, . - __8032x_proc_info .type __8033x_proc_info,#object__8033x_proc_info: .long 0x69054010 .long 0xffffff30 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_8033x_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __8033x_proc_info, . - __8033x_proc_info .type __pxa250_proc_info,#object__pxa250_proc_info: .long 0x69052100 .long 0xfffff7f0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_pxa250_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __pxa250_proc_info, . - __pxa250_proc_info .type __pxa210_proc_info,#object__pxa210_proc_info: .long 0x69052120 .long 0xfffff3f0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_pxa210_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __pxa210_proc_info, . - __pxa210_proc_info .type __ixp2400_proc_info, #object__ixp2400_proc_info: .long 0x69054190 .long 0xfffffff0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_ixp2400_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __ixp2400_proc_info, . - __ixp2400_proc_info .type __ixp2800_proc_info, #object__ixp2800_proc_info: .long 0x690541a0 .long 0xfffffff0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_ixp2800_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __ixp2800_proc_info, . - __ixp2800_proc_info .type __ixp42x_proc_info, #object__ixp42x_proc_info: .long 0x690541c0 .long 0xffffffc0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_ixp42x_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __ixp42x_proc_info, . - __ixp42x_proc_info .type __ixp46x_proc_info, #object__ixp46x_proc_info: .long 0x69054200 .long 0xffffff00 .long 0x00000c0e b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_ixp46x_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __ixp46x_proc_info, . - __ixp46x_proc_info .type __pxa255_proc_info,#object__pxa255_proc_info: .long 0x69052d00 .long 0xfffffff0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_pxa255_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __pxa255_proc_info, . - __pxa255_proc_info .type __pxa270_proc_info,#object__pxa270_proc_info: .long 0x69054110 .long 0xfffffff0 .long PMD_TYPE_SECT | \ PMD_SECT_BUFFERABLE | \ PMD_SECT_CACHEABLE | \ PMD_SECT_AP_WRITE | \ PMD_SECT_AP_READ b __xscale_setup .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long cpu_pxa270_name .long xscale_processor_functions .long v4wbi_tlb_fns .long xscale_mc_user_fns .long xscale_cache_fns .size __pxa270_proc_info, . - __pxa270_proc_info
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -