|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2 1/2] xen: arm: introduce Cortex-A7 support
Hi, Ian
>>>Wrote "Ian Campbell <Ian.Campbell@xxxxxxxxxx>"> On Tue,
Tue, 2013-07-02 at 21:11 +0800, Bamvor Jian Zhang wrote:
> > Introduce Cortex-A7 with a scalable proc_info_list which including cpu id
> > and cpu initialize function.
> > In head.S, search cpu specific MIDR in procinfo and call such initialize
> > function. Currently, support Cortex-A7 and Cortex-A15.
>
> I like the general shape of it, thanks!
> A few comments below.
>
> > Signed-off-by: Bamvor Jian Zhang <bjzhang@xxxxxxxx>
>
> > diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
> > index 0588d54..d62401d 100644
> > --- a/xen/arch/arm/arm32/head.S
> > +++ b/xen/arch/arm/arm32/head.S
> > @@ -20,6 +20,7 @@
> > #include <asm/config.h>
> > #include <asm/page.h>
> > #include <asm/processor-ca15.h>
> > +#include <asm/processor-ca7.h>
> > #include <asm/asm_defns.h>
> >
> > #define ZIMAGE_MAGIC_NUMBER 0x016f2818
> > @@ -188,15 +189,33 @@ skip_bss:
> >
> > PRINT("- Setting up control registers -\r\n")
> >
> > - /* Read CPU ID */
> > + /* Get processor specific proc info */
> > 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
> > + ldr r1, = __proc_info_start
> > + add r1, r1, r10
> > + ldr r2, = __proc_info_end
> > + add r2, r2, r10
> > +1: ldr r3, [r1]
> > + teq r0, r3
> > + beq 2f
> > + add r1, r1, #PROCINFO_sizeof
> > + cmp r1, r2
> > + blo 1b
> > + mov r4, r0
> > + PRINT("- Missing processor info: ")
> > + mov r0, r4
> > + bl putn
> > + PRINT(" -\r\n")
> > + b fail
> > +2:
>
> At the end of all this r1 == physical address of the platform
> information?
yes
> Can the initial comment say "Get processor specific proc info into rX" please.
sure
> If you could also follow the lead of other code in this file and
> obsessively comment what it is doing that would be great. e.g. comments
> like "r1 := physical address of start of table", "r2 := physical address
> of end of table" etc.
ok. i will
>
> >
> > + /* Set return address(PIC) */
> > + /* XXX: it only work while thumb2 is not enable in xen */
>
> That's true of lots/all of our asm. Lets ignore that for now (no need to
> comment).
ok
> Since we already have physoffset in r10 would it be clearer to make use
> of that?
sorry if i am wrong. do u mean change "adr lr, 1f" to something like
"add lr, pc, r10"?
>
> > + adr lr, 1f
> > + add pc, r1, #PROCINFO_cpu_init
> > +1:
> > /* Set up memory attribute type tables */
> > ldr r0, =MAIR0VAL
> > ldr r1, =MAIR1VAL
>
> > diff --git a/xen/arch/arm/arm32/proc-v7.S b/xen/arch/arm/arm32/proc-v7.S
> > new file mode 100644
> > index 0000000..2d46dca
> > --- /dev/null
> > +++ b/xen/arch/arm/arm32/proc-v7.S
> > @@ -0,0 +1,36 @@
> [...]
> > +#include <asm/asm_defns.h>
> > +#include <asm/arm32/processor.h>
> > +
> > +.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
>
> Lets put the __v7_ca7mp_proc_info and __v7_ca15mp_proc_info here,
> calling v7_init directly and do away with proc-ca15.S and proc-ca7.S.
Ok.
So, i will remove proc-ca15.S and proc-ca7.S?
>
> > +
> > +/*
> > + * Local variables:
> > + * mode: ASM
> > + * indent-tabs-mode: nil
> > + * End:
> > + */
>
> > diff --git a/xen/include/asm-arm/arm32/procinfo.h
> > b/xen/include/asm-arm/arm32/procinfo.h
> > new file mode 100644
> > index 0000000..7e7a775
> > --- /dev/null
> > +++ b/xen/include/asm-arm/arm32/procinfo.h
> > @@ -0,0 +1,30 @@
> > +/*
> > + * include/asm-arm/arm32/procinfo.h
>
> I suggest to put this in just include/asm-arm/procinfo.h. The same
> struct should eventually apply to 64-bit too.
ok.
>
> [...]
> > +#ifndef __ASM_ARM_ARM32_PROCINFO_H
> > +#define __ASM_ARM_ARM32_PROCINFO_H
> > +
> > +struct proc_info_list {
> > + unsigned int cpu_val;
>
> I think we should include "unsigned int cpu_mask" here too and remove
> MIDR_MASK. Will need equivalent changes in head.S as well.
yes, i need to do this for Aarch64 extesion in future.
>
> > + unsigned long cpu_init; /* used by head.S */
> > +};
> > +
> > +#endif
> > diff --git a/xen/include/asm-arm/processor-ca15.h
> > b/xen/include/asm-arm/processor-ca15.h
> > index 06cdbdd..96438f0 100644
> > --- a/xen/include/asm-arm/processor-ca15.h
> > +++ b/xen/include/asm-arm/processor-ca15.h
> > @@ -1,9 +1,6 @@
> > #ifndef __ASM_ARM_PROCESSOR_CA15_H
> > #define __ASM_ARM_PROCESSOR_CA15_H
> >
> > -
> > -#define CORTEX_A15_ID (0x410FC0F0)
> > -
> > /* ACTLR Auxiliary Control Register, Cortex A15 */
> > #define ACTLR_CA15_SNOOP_DELAYED (1<<31)
> > #define ACTLR_CA15_MAIN_CLOCK (1<<30)
> > @@ -26,7 +23,6 @@
> > #define ACTLR_CA15_OPT (1<<9)
> > #define ACTLR_CA15_WFI (1<<8)
> > #define ACTLR_CA15_WFE (1<<7)
> > -#define ACTLR_CA15_SMP (1<<6)
>
> Lets leave this for completeness even if we aren't using it.
i was thinking about it. if i define the following
#define ACTLR_CA15_SMP ACTLR_V7_SMP
i need include asm/arm/processor.h which including CP micros.
Bamvor
>
> > #define ACTLR_CA15_PLD (1<<5)
> > #define ACTLR_CA15_IP (1<<4)
> > #define ACTLR_CA15_MICRO_BTB (1<<3)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |