[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 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. [..] > +#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> > + > +u32 shmobile_read_mode_pins(void) static > +{ > + static uint32_t mode; Why the static here? > + > + void __iomem *modemr = ioremap_nocache(SHMOBILE_MODEMR, 4); Missing a blank here between the variable declaration and the code. > + 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. > +{ > + 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 */ > + * 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 { > + 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 > + 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 { > + /* 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) - Linux is update CNTFRQ Is there any reason that this code diverge? > + > + iounmap(tmu); > + > + return 0; > +} > + > +static int __init shmobile_smp_init(void) > +{ > + void __iomem *p; Missing blank line here. > + /* 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. Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |