[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC 27/29] xen/arm: Add platform specific code for the exynos5
On 04/30/2013 11:00 AM, Ian Campbell wrote: > On Mon, 2013-04-29 at 00:02 +0100, Julien Grall wrote: >> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> >> --- >> xen/arch/arm/platforms/Makefile | 1 + >> xen/arch/arm/platforms/exynos5.c | 105 >> +++++++++++++++++++++++++++++++ >> xen/include/asm-arm/platforms/exynos5.h | 40 ++++++++++++ >> 3 files changed, 146 insertions(+) >> create mode 100644 xen/arch/arm/platforms/exynos5.c >> create mode 100644 xen/include/asm-arm/platforms/exynos5.h >> >> diff --git a/xen/arch/arm/platforms/Makefile >> b/xen/arch/arm/platforms/Makefile >> index 4313e95..ff2b65b 100644 >> --- a/xen/arch/arm/platforms/Makefile >> +++ b/xen/arch/arm/platforms/Makefile >> @@ -1 +1,2 @@ >> obj-y += vexpress.o >> +obj-y += exynos5.o >> diff --git a/xen/arch/arm/platforms/exynos5.c >> b/xen/arch/arm/platforms/exynos5.c >> new file mode 100644 >> index 0000000..01e12b7 >> --- /dev/null >> +++ b/xen/arch/arm/platforms/exynos5.c >> @@ -0,0 +1,105 @@ >> +/* >> + * xen/arch/arm/platforms/exynos5.c >> + * >> + * Exynos5 specific settings >> + * >> + * Julien Grall <julien.grall@xxxxxxxxxx> >> + * Copyright (c) 2013 Linaro Limited. >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + */ >> + >> +#include <asm/p2m.h> >> +#include <xen/config.h> >> +#include <xen/device_tree.h> >> +#include <xen/domain_page.h> >> +#include <xen/mm.h> >> +#include <asm/platforms/exynos5.h> >> +#include <asm/platform.h> >> + >> +static int exynos5_init_time(void) >> +{ >> + uint32_t reg; >> + >> + // enable timer on exynos5 arndale board >> + // should probably be done by u-boot > > /* */ please. > >> + reg = platform_read_register(EXYNOS5_MCT_G_TCON); >> + platform_write_register(EXYNOS5_MCT_G_TCON, reg | >> EXYNOS5_MCT_G_TCON_START); >> + >> + return 0; >> +} >> + >> +/* Additionnal mapping for dom0 (Not in the DTS) */ > > "Additional mappings" > >> +static int exynos5_specific_mapping(struct domain *d) >> +{ >> + paddr_t ma = 0; >> + uint32_t *dst; >> + int res; >> + >> + /* >> + * Set temporary guest traps with 0xe14fff7c which is hvc(0xfffc) >> + * a hyp panic! >> + * TODO: Find why: >> + * 1) Xen abort directly after local_abort_enable when >> + * the p2m_populate_ram is not here. > > It will actually be aborting here somewhere but that abort can't be > delivered until the point aborts are enabled. My patch "xen: arm: enable > aborts on all physical processors." will enable aborts much earlier so > you might get a better indication of exactly where it goes wrong. My comment is wrong. In fact, I try to map domain memory before the guest page table is loaded on the CPU. >> + * 2) Linux doesn't start without this trick > > Ouch. I presume it doesn't actually end up calling hvc 0xfffc? Does it > work if you just map/unmap without writing anything? > > What does Linux do without the trick? Touches address 0x0 perhaps? Would > anything be mapped there on a real Exynos? Not even. (XEN) Guest data abort: Translation fault at level 2 (XEN) gva=40004000 (XEN) gpa=0000000040004000 (XEN) instruction syndrome invalid (XEN) eat=0 cm=0 s1ptw=0 dfsc=6 (XEN) dom0 IPA 0x0000000040004000 (XEN) P2M @ 02ffbfc0 mfn:0xbfdfe (XEN) 1ST[0x1] = 0x00000000bfdfb6ff (XEN) 2ND[0x0] = 0x0000000000000000 (XEN) ----[ Xen-4.3-unstable arm32 debug=y Tainted: C ]---- (XEN) CPU: 0 (XEN) PC: 50008338 (XEN) CPSR: 800001d3 MODE:32-bit Guest SVC (XEN) R0: 40004000 R1: 00000c12 R2: 40008000 R3: 40004000 (XEN) R4: 40008000 R5: 00000000 R6: 0000000e R7: ffffffff (XEN) R8: 501bf8e0 R9: 40000000 R10:50000000 R11:10201105 R12:500080a8 (XEN) USR: SP: 00000000 LR: 00000000 (XEN) SVC: SP: 00000000 LR: 500083cc SPSR:000001d3 (XEN) ABT: SP: 00000000 LR: 00000000 SPSR:00000000 (XEN) UND: SP: 00000000 LR: 00000000 SPSR:00000000 (XEN) IRQ: SP: 00000000 LR: 00000000 SPSR:00000000 (XEN) FIQ: SP: 00000000 LR: 00000000 SPSR:00000000 (XEN) FIQ: R8: 00000000 R9: 00000000 R10:00000000 R11:00000000 R12:00000000 (XEN) (XEN) TTBR0 0000000000 TTBR1 0000000000 TCR 00000000 (XEN) SCTLR 00c50078 (XEN) IFAR 00000000 DFAR 00000000 (XEN) (XEN) HTTBR bfed2000 (XEN) HDFAR 40004000 (XEN) HIFAR 0 (XEN) HPFAR 400040 (XEN) HCR 00002835 (XEN) HSR 90000046 (XEN) VTTBR 10000bfdfe000 (XEN) (XEN) DFSR 0 DFAR 0 (XEN) IFSR 0 IFAR 0 (XEN) (XEN) GUEST STACK GOES HERE (XEN) domain_crash_sync called from traps.c:968 FYI the kernel is loaded at 0x50008000. > I had a weird one running on the v8 foundation model where I had to add > a NOP hypercall to Linux's head.S before a certain point -- I wonder if > this is related? I did some test and noticed this code is at the wrong place. I didn't find the issue because with/without this trick linux 3.9 will boot. It's only happened on the linux 3.7 tree. The code should be done after the kernel is loading in the memory. But I think I should remove this code and patch the kernel. What do you think? By the way, which kernel version do you use? What is your modification? > It'll be a missing flush or barrier of course, the question is where ;-) Before the unmap_domain_page, right? >> + */ >> + p2m_populate_ram(d, 0x0, 0x1000 - 1); >> + >> + res = gvirt_to_maddr(0, &ma); >> + if ( res ) >> + { >> + printk(XENLOG_ERR "Unable to translate guest address\n"); >> + return -EFAULT; >> + } >> + >> + dst = map_domain_page(ma >> PAGE_SHIFT); >> + dst[2] = 0xe14fff7c; >> + unmap_domain_page(dst); >> + >> + /* Map the chip ID */ >> + map_mmio_regions(d, EXYNOS5_PA_CHIPID, EXYNOS5_PA_CHIPID + PAGE_SIZE - >> 1, >> + EXYNOS5_PA_CHIPID); >> + >> + /* Map the PWM region */ >> + map_mmio_regions(d, EXYNOS5_PA_TIMER, >> + EXYNOS5_PA_TIMER + (PAGE_SIZE * 2) - 1, >> + EXYNOS5_PA_TIMER); >> + >> + return 0; >> +} >> + >> +static void exynos5_reset(void) >> +{ >> + platform_write_register(EXYNOS5_SWRESET, 1); >> +} >> + >> +static const char const *exynos5_dt_compat[] __initdata = >> +{ >> + "samsung,exynos5250", >> + NULL >> +}; >> + >> +PLATFORM_START(exynos5, "SAMSUNG EXYNOS5") >> + .compatible = exynos5_dt_compat, >> + .init_time = exynos5_init_time, >> + .specific_mapping = exynos5_specific_mapping, >> + .reset = exynos5_reset, >> +PLATFORM_END >> + >> +/* >> + * Local variables: >> + * mode: C >> + * c-file-style: "BSD" >> + * c-basic-offset: 4 >> + * indent-tabs-mode: nil >> + * End: >> + */ >> diff --git a/xen/include/asm-arm/platforms/exynos5.h >> b/xen/include/asm-arm/platforms/exynos5.h >> new file mode 100644 >> index 0000000..d77623c >> --- /dev/null >> +++ b/xen/include/asm-arm/platforms/exynos5.h >> @@ -0,0 +1,40 @@ >> +#ifndef __ASM_ARM_PLATFORMS_EXYNOS5_H >> +#define __ASM_ASM_PLATFORMS_EXYSNO5_H >> + >> +#define EXYNOS5_MCT_BASE 0x101c0000 >> +#define EXYNOS5_MCTREG(x) (EXYNOS5_MCT_BASE + (x)) >> +#define EXYNOS5_MCT_G_TCON EXYNOS5_MCTREG(0x240) >> +#define EXYNOS5_MCT_G_TCON_START (1 << 8) >> + >> +#define EXYNOS5_PA_CHIPID 0x10000000 >> +#define EXYNOS5_PA_TIMER 0x12dd0000 >> +/* Base address of system controller */ >> +#define EXYNOS5_PA_PMU 0x10040000 >> + >> +#define EXYNOS5_SWRESET (EXYNOS5_PA_PMU + 0x0400) >> + >> +#define S5P_PA_SYSRAM 0x02020000 >> + >> +/* Constants below is only used in assembly because the DTS is not yet >> parsed */ >> +#ifdef __ASSEMBLY__ >> + >> +/* GIC Base Address */ >> +#define EXYNOS5_GIC_BASE_ADDRESS 0x10480000 >> + >> +/* Timer's frequency */ >> +#define EXYNOS5_TIMER_FREQUENCY (24 * 1000 * 1000) /* 24 MHz */ >> + >> +/* Arndale machine ID */ >> +#define MACH_TYPE_SMDK5250 3774 >> + >> +#endif /* __ASSEMBLY__ */ >> + >> +#endif /* __ASM_ARM_PLATFORMS_EXYNOS5_H */ >> +/* >> + * Local variables: >> + * mode: C >> + * c-file-style: "BSD" >> + * c-basic-offset: 4 >> + * indent-tabs-mode: nil >> + * End: >> + */ > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |