On 13-Mar-2014, at 3:57 pm, Andre Przywara <andre.przyw...@arm.com> wrote:
> Hi, > > sorry for the double post. Please don't use the Gmail address, this is > just my ML catching account. I got a denial from our SMTP server > regarding the u-boot ML recipient, so I had to send it again. We are using google services gmail for all external mailing lists. > Thanks, > Andre. > > On 13/03/14 09:29, Reinhard Moselbach wrote: >> Hi, >> >> > We are able to figure out the issue. PERIPHBASE returned on ARNDALE >> > board was 0x10500000 and adding GIC offset was creating an incorrect >> > address. >> >> please see: >> https://github.com/apritzel/u-boot-hypmode/commit/5d9c4209907c6d67dadd033887a30c2f10efeb4c >> >> >>> >>> Setting CONFIG_ARM_GIC_BASE_ADDRESS as 0x10480000 in arndale.h solves >>> the issue. >> >> Yes, I spotted that before and deliberately introduced that variable for >> the Exynos SoCs. >> >>> The u-boot code needs to be fixed for arndale right ? Please confirm >> >> I could get the Arndale to boot with this above patch. But only after a >> warm reboot: >> 1) boot the board up, load the kernel and launch it: Linux will reboot >> very early (before any useful output via earlyprintk) >> 2) (back in u-boot:) load the kernel again and launch it: works >> >> I got both cores in HYP mode and KVM initialized fine. >> >> I lost access to my board, so if you could debug this I would be grateful. >> >> Thanks, >> Andre. >> >>> >>> Regards >>> Manish >>> armdev Team @FTM >>> >>> On 13-Mar-2014, at 11:20 am, armdev <armdev....@gmail.com> wrote: >>> >>>> Got a mail that Andre is not with linaro, Adding Christoffer Dall >>>> >>>> On 13-Mar-2014, at 11:17 am, armdev <armdev....@gmail.com> wrote: >>>> >>>>> Hi Andrey , >>>>> >>>>> This is wrt your patch set which enabled the switch to non-sec and >>>>> hip mode in armv7. >>>>> We have a small piece of code which we run in hypmode using the >>>>> bootm command on arndale board >>>>> >>>>> While this code was trying to access the GICD_ISENABLR0 >>>>> (0x10481100), read was always returning 0, while as per the reset >>>>> value it should be 0x0000ffff. Debugged more in u-boot and added >>>>> prints. >>>>> >>>>> This is the log, our observation is that in _nonsec_init() there is >>>>> something that is causing the issue. Now It can be an issue or a gap >>>>> in our understanding. Ideally we should be able to read the >>>>> GICD_ISENABLR value as 0xffff. >>>>> Can you please help us in find out how to read GIC values properly >>>>> in hyp mode. >>>>> >>>>> armv7_switch_nonsec >>>>> cpsr =600001d3 >>>>> REGS ffff >>>>> Before write to group regs >>>>> cpsr =600001d3 >>>>> REGS ffff >>>>> Before _nonsec_init() >>>>> cpsr =600001d3 >>>>> REGS ffff >>>>> After _nonsec_init() >>>>> cpsr =600001d3 >>>>> REGS 0 >>>>> >>>>> HYP mode: successful. >>>>> armv7_switch_hyp >>>>> cpsr =600001da >>>>> REGS 0 >>>>> >>>>> Here is the diff of our modifications. (just added prints) >>>>> diff --git a/arch/arm/cpu/armv7/virt-v7.c >>>>> b/arch/arm/cpu/armv7/virt-v7.c >>>>> index 2cd604f..f38f125 100644 >>>>> --- a/arch/arm/cpu/armv7/virt-v7.c >>>>> +++ b/arch/arm/cpu/armv7/virt-v7.c >>>>> @@ -107,6 +107,10 @@ int armv7_switch_hyp(void) >>>>> printf("HYP mode: switch not successful.\n"); >>>>> return -1; >>>>> } >>>>> + printf("HYP mode: successful.\n"); >>>>> + printf("%s \r\n",__FUNCTION__); >>>>> + printf("cpsr =%x\n", read_cpsr()); >>>>> + printf("REGS %x \n", *(uint32_t*)0x10481100); >>>>> >>>>> return 0; >>>>> } >>>>> @@ -116,6 +120,10 @@ int armv7_switch_nonsec(void) >>>>> unsigned int reg; >>>>> unsigned itlinesnr, i; >>>>> >>>>> + printf("%s \r\n",__FUNCTION__); >>>>> + printf("cpsr =%x\n", read_cpsr()); >>>>> + printf("REGS %x \n", *(uint32_t*)0x10481100); >>>>> + >>>>> /* check whether the CPU supports the security extensions */ >>>>> reg = read_id_pfr1(); >>>>> if ((reg & 0xF0) == 0) { >>>>> @@ -140,6 +148,9 @@ int armv7_switch_nonsec(void) >>>>> /* TYPER[4:0] contains an encoded number of available interrupts */ >>>>> itlinesnr = readl(gic_dist_addr + GICD_TYPER) & 0x1f; >>>>> >>>>> + printf("Before write to group regs \r\n"); >>>>> + printf("cpsr =%x\n", read_cpsr()); >>>>> + printf("REGS %x \n", *(uint32_t*)0x10481100); >>>>> /* set all bits in the GIC group registers to one to allow access >>>>> * from non-secure state. The first 32 interrupts are private per >>>>> * CPU and will be set later when enabling the GIC for each core >>>>> @@ -147,11 +158,19 @@ int armv7_switch_nonsec(void) >>>>> for (i = 1; i <= itlinesnr; i++) >>>>> writel((unsigned)-1, gic_dist_addr + GICD_IGROUPRn + 4 * i); >>>>> >>>>> - smp_set_core_boot_addr((unsigned long)_smp_pen, -1); >>>>> - smp_kick_all_cpus(); >>>>> + //smp_set_core_boot_addr((unsigned long)_smp_pen, -1); >>>>> + //smp_kick_all_cpus(); >>>>> >>>>> + printf("Before _nonsec_init() \r\n"); >>>>> + printf("cpsr =%x\n", read_cpsr()); >>>>> + printf("REGS %x \n", *(uint32_t*)0x10481100); >>>>> /* call the non-sec switching code on this CPU also */ >>>>> _nonsec_init(); >>>>> >>>>> + printf("After _nonsec_init() \r\n"); >>>>> + printf("cpsr =%x\n", read_cpsr()); >>>>> + printf("REGS %x \n", *(uint32_t*)0x10481100); >>>>> + >>>>> + >>>>> return 0; >>>>> } >>>>> diff --git a/include/configs/arndale.h b/include/configs/arndale.h >>>>> index 515facf..53a1212 100644 >>>>> --- a/include/configs/arndale.h >>>>> +++ b/include/configs/arndale.h >>>>> @@ -62,7 +62,6 @@ >>>>> /* select serial console configuration */ >>>>> #define CONFIG_BAUDRATE 115200 >>>>> #define EXYNOS5_DEFAULT_UART_OFFSET 0x010000 >>>>> -#define CONFIG_SILENT_CONSOLE >>>>> >>>>> /* Console configuration */ >>>>> #define CONFIG_CONSOLE_MUX >>>>> @@ -249,4 +248,7 @@ >>>>> /* Enable Time Command */ >>>>> #define CONFIG_CMD_TIME >>>>> >>>>> +/* Enable jump to hypervisor */ >>>>> +#define CONFIG_ARMV7_VIRT >>>>> +#define CONFIG_SMP_PEN_ADDR 0x0 >>>>> #endif /* __CONFIG_H */ >>>>> >>>> >>> >>> _______________________________________________ >>> U-Boot mailing list >>> u-b...@lists.denx.de >>> http://lists.denx.de/mailman/listinfo/u-boot >>> > > -- IMPORTANT NOTICE: The contents of this email and any attachments are > confidential and may also be privileged. If you are not the intended > recipient, please notify the sender immediately and do not disclose the > contents to any other person, use it for any purpose, or store or copy the > information in any medium. Thank you. > > ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, > Registered in England & Wales, Company No: 2557590 > ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, > Registered in England & Wales, Company No: 2548782 > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html