[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 3/3] xen/arm: Introduce support for Renesas R-Car Gen2 platform
Hi, Julien.
On Fri, Jan 16, 2015 at 4:08 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote: > Hi Iurii, > > On 16/01/15 12:50, Iurii Konovalenko wrote: >> From: Iurii Konovalenko <iurii.konovalenko@xxxxxxxxxxxxxxx> >> >> Signed-off-by: Iurii Konovalenko <iurii.konovalenko@xxxxxxxxxxxxxxx> >> --- >> Âxen/arch/arm/platforms/Makefile     Â|  1 + >> Âxen/arch/arm/platforms/shmobile.c    Â| 149 +++++++++++++++++++++++++++++++ >> Âxen/include/asm-arm/platforms/shmobile.h | Â24 +++++ > > We are trying to avoid introduce new platform header. If you don't need > it in other files, please move the defines in the platform code. No problem, will move all defines to shmobile.c. > > [..] > >> +#include <asm/p2m.h> >> +#include <xen/config.h> >> +#include <xen/device_tree.h> >> +#include <xen/domain_page.h> >> +#include <xen/mm.h> >> +#include <xen/vmap.h> >> +#include <asm/platforms/shmobile.h> >> +#include <asm/platform.h> >> +#include <asm/io.h> > > The convention is to first include <xen/*.h> then <asm/*.h>. > > Futhermore, I think most of the includes are not necessary here. > > The following includes should be enough: > > #include <xen/mm.h> > #include <xen/vmap.h> > #include <asm/platform.h> > #include <asm/io.h> > Yes, sure. Will fix it. > >> + >> +u32 shmobile_read_mode_pins(void) > > static OK, will add it. > >> +{ >> +  Âstatic uint32_t mode; > > Why the static here? Sorry, migrated here as static from Linux kernel. Will fix it. > >> + >> +  Âvoid __iomem *modemr = ioremap_nocache(SHMOBILE_MODEMR, 4); > > Missing a blank here between the variable declaration and the code. OK > >> +  Âif( !modemr ) >> +  Â{ >> +    Âdprintk( XENLOG_ERR, "Unable to map shmobile Mode MR\n"); >> +    Âreturn 0; >> +  Â} >> + >> +  Âmode = readl_relaxed(modemr); >> +  Âiounmap(modemr); >> + >> +  Âreturn mode; >> +} >> + >> +static int shmobile_init_time(void) > > I know the other platform code doesn't do it. But this function is only > call during Xen boot. So it should be __init. I used xen/arch/arm/platforms/omap5.c file as a reference. In that file this function has no such attribute. But I agree with you and will add this attribute. > >> +{ >> +  Âuint32_t freq; >> +  Âvoid __iomem *tmu; >> +  Âint extal_mhz = 0; >> +  Âuint32_t mode = shmobile_read_mode_pins(); >> + >> +  Â/* At Linux boot time the Renesas R-Car Gen2 arch timer comes > > The coding style for multiline comment block is: > > /* > Â* My comment > Â* line 2 > Â*/ > OK, will fix it. >> +   * up with the counter disabled. Moreover, it may also report >> +   * a potentially incorrect fixed 13 MHz frequency. To be >> +   * correct these registers need to be updated to use the >> +   * frequency EXTAL / 2 which can be determined by the MD pins. >> +   */ >> + >> +  Âswitch ( mode & (MD(14) | MD(13)) ) { > > The coding style require the bracket to be on a separate line. > > > switch > { > OK, will fix it. >> +  Âcase 0: >> +    Âextal_mhz = 15; >> +    Âbreak; >> +  Âcase MD(13): >> +    Âextal_mhz = 20; >> +    Âbreak; >> +  Âcase MD(14): >> +    Âextal_mhz = 26; >> +    Âbreak; >> +  Âcase MD(13) | MD(14): >> +    Âextal_mhz = 30; >> +    Âbreak; >> +  Â} >> + >> +  Â/* The arch timer frequency equals EXTAL / 2 */ >> +  Âfreq = extal_mhz * (1000000 / 2); >> + >> +  Â/* Remap "armgcnt address map" space */ >> +  Âtmu = ioremap_attr(SHMOBILE_ARCH_TIMER_BASE, PAGE_SIZE, >> +      ÂPAGE_HYPERVISOR_NOCACHE); > > ioremap_nocache > OK, will use this API. >> +  Âif ( !tmu ) >> +  Â{ >> +    Âdprintk(XENLOG_ERR, "Unable to map TMU\n"); >> +    Âreturn -ENOMEM; >> +  Â} >> +  Â/* >> +   * Update the timer if it is either not running, or is not at the >> +   * right frequency. The timer is only configurable in secure mode >> +   * so this avoids an abort if the loader started the timer and >> +   * entered the kernel in non-secure mode. >> +   */ >> + >> +  Âif ( (readl_relaxed(tmu + SHMOBILE_ARCH_TIMER_CNTCR) & 1) == 0 || >> +      Âreadl_relaxed(tmu + SHMOBILE_ARCH_TIMER_CNTFID0) != freq ) { > > if > { > OK, will fix it. >> +    Â/* Update registers with correct frequency */ >> +    Âwritel_relaxed(freq, tmu + SHMOBILE_ARCH_TIMER_CNTFID0); >> + >> +    Â/* make sure arch timer is started by setting bit 0 of CNTCR */ >> +    Âwritel_relaxed(1, tmu + SHMOBILE_ARCH_TIMER_CNTCR); >> +  Â} > > AFAIU, this code is based on the Linux version, right? If so some part > of the code differs from upstream: >     - Linux is using iowrite32 (i.e writel on Xen) Agree, I will use writel/readl API >     - Linux is update CNTFRQ > > Is there any reason that this code diverge? > Linux kernel 3.14-ltsi, which I used as a reference, use CNTFID0 in file arch/arm/mach-shmobile/setup-rcar-gen2.c: iowrite32(freq, base + CNTFID0); >> + >> +  Âiounmap(tmu); >> + >> +  Âreturn 0; >> +} >> + >> +static int __init shmobile_smp_init(void) >> +{ >> +  Âvoid __iomem *p; > > Missing blank line here. > OK, will fix it. >> +  Â/* setup reset vectors */ >> +  Âp = ioremap_nocache(SHMOBILE_RAM, 0x1000); >> +  Âif( !p ) >> +  Â{ >> +    Âdprintk( XENLOG_ERR, "Unable to map shmobile ICRAM\n"); >> +    Âreturn -ENOMEM; >> +  Â} >> + >> +  Âwritel_relaxed(__pa(init_secondary), p + SHMOBILE_SMP_START_OFFSET); >> +  Âiounmap(p); >> + >> +  Âasm("sev;"); > > This sev can be reordered by the compiler. We have a macro sev() which > should avoid this issue. > OK, will use this API. > Regards, > > -- > Julien Grall Thanks a lot for valuable advices. Best regards. Iurii Konovalenko | Senior Software Engineer GlobalLogic P +3.8044.492.9695 M +38.099.932.2909  S yufuntik _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |