[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3] xen: arm: introduce Cortex-A7 support
Hi, At 17:47 +0800 on 09 Jul (1373392034), Bamvor Jian Zhang wrote: > PRINT("- Setting up control registers -\r\n") > > - /* Read CPU ID */ > - mrc CP32(r0, MIDR) > - ldr r1, =(MIDR_MASK) > - and r0, r0, r1 > - /* Is this a Cortex A15? */ > - ldr r1, =(CORTEX_A15_ID) > - teq r0, r1 > - bleq cortex_a15_init > + /* Get processor specific proc info into r1 */ > + mrc CP32(r0, MIDR) /* r0 := our cpu id */ > + ldr r1, = __proc_info_start > + add r1, r1, r10 /* r1 := paddr of table (start) > */ > + ldr r2, = __proc_info_end > + add r2, r2, r10 /* r2 := paddr of table (end) */ > +1: ldr r3, [r1, #PROCINFO_cpu_mask] > + and r0, r0, r3 This mask clobbers the only copy of the CPU ID, so the second and subsequent checks will be wrong. You need to keep a copy of the original around or read MIDR inside the loop. > + ldr r3, [r1, #PROCINFO_cpu_val] /* r3 := cpu val in current proc > info */ > + teq r0, r3 > + beq 2f /* Match => exit, or try next > proc info */ > + add r1, r1, #PROCINFO_sizeof > + cmp r1, r2 > + blo 1b > + mov r4, r0 > + PRINT("- Missing processor info: ") > + mov r0, r4 It would be good to print the un-masked ID here too. > + bl putn > + PRINT(" -\r\n") > + b fail > + > +2: > + /* Jump to cpu_init */ > + ldr r1, [r1, #PROCINFO_cpu_init] /* r1 := vaddr(init func) */ > + adr lr, cpu_init_done /* Save return address */ > + add pc, r1, r10 /* Call paddr(init func) */ > > +cpu_init_done: [...] > +.globl v7_init > +v7_init: > + /* Set up the SMP bit in ACTLR */ > + mrc CP32(r0, ACTLR) > + orr r0, r0, #(ACTLR_V7_SMP) /* enable SMP bit */ > + mcr CP32(r0, ACTLR) > + mov pc, lr > + > + .section ".init.proc.info", #alloc, #execinstr > + .type __v7_ca15mp_proc_info, #object > +__v7_ca15mp_proc_info: > + .long 0x410FC0F0 /* Cortex-A15 */ > + .long 0xFF0FFFF0 /* Mask */ > + .long v7_init > + .size __v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info > + > + .section ".init.proc.info", #alloc, #execinstr > + .type __v7_ca7mp_proc_info, #object > +__v7_ca7mp_proc_info: > + .long 0x410FC070 /* Cortex-A7 */ > + .long 0xFF0FFFF0 /* Mask */ > + .long v7_init > + .size __v7_ca7mp_proc_info, . - __v7_ca7mp_proc_info > + I'd asked for these to be defined in C -- that way all the OFFSET_ macros in head.S are guaranteed to be right. But OTOH it's nice to have them here in the same file as the code they reference, so I guess it's OK this way too. The rest of this looks good to me. Cheers, Tim. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |