From patchwork Sun Nov 13 12:43:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 9424819 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D7FE8600CA for ; Sun, 13 Nov 2016 12:43:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC24428937 for ; Sun, 13 Nov 2016 12:43:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BF43128960; Sun, 13 Nov 2016 12:43:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, URIBL_RED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 317C828937 for ; Sun, 13 Nov 2016 12:43:58 +0000 (UTC) Received: from localhost ([::1]:33439 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c5u8b-0000ic-GC for patchwork-qemu-devel@patchwork.kernel.org; Sun, 13 Nov 2016 07:43:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37739) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c5u87-0000gT-5N for qemu-devel@nongnu.org; Sun, 13 Nov 2016 07:43:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c5u82-0001Jv-Sa for qemu-devel@nongnu.org; Sun, 13 Nov 2016 07:43:27 -0500 Received: from mail-out.m-online.net ([212.18.0.9]:33204) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c5u82-0001Jd-Jw for qemu-devel@nongnu.org; Sun, 13 Nov 2016 07:43:22 -0500 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 3tGtc81g8Qz3hjMg; Sun, 13 Nov 2016 13:43:20 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.68]) by mail.m-online.net (Postfix) with ESMTP id 3tGtc76s3Mzvkdf; Sun, 13 Nov 2016 13:43:19 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.68]) (amavisd-new, port 10024) with ESMTP id MIm03hFoQ9sq; Sun, 13 Nov 2016 13:43:18 +0100 (CET) X-Auth-Info: yPfn85VxF9mIRAxecPP2BpngDtbjKVHpvqBJZpebwBA= Received: from [IPv6:::1] (unknown [195.140.253.167]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sun, 13 Nov 2016 13:43:18 +0100 (CET) To: Guenter Roeck References: <20161025195743.4558-1-marex@denx.de> <20161107035825.GA26942@roeck-us.net> <142d063a-4061-803d-b12c-0d17c8832c11@denx.de> <4ad504d5-9ba3-5216-8693-c731ce5b0bc9@roeck-us.net> <0419991c-a23f-8f2e-77c3-0401503dae17@denx.de> <62733dfe-5ccc-4d84-cc6e-92c100a1447e@roeck-us.net> From: Marek Vasut Message-ID: Date: Sun, 13 Nov 2016 13:43:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 212.18.0.9 Subject: Re: [Qemu-devel] [V6, 2/7] nios2: Add architecture emulation support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jeff Da Silva , Chris Wulff , qemu-devel@nongnu.org, Sandra Loosemore , Yves Vandervennet , Ley Foon Tan , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP On 11/13/2016 01:01 PM, Marek Vasut wrote: > On 11/13/2016 12:25 AM, Guenter Roeck wrote: >> Hi Marek, > > Hi! > >> On 11/12/2016 01:50 PM, Marek Vasut wrote: >>> On 11/07/2016 08:54 PM, Guenter Roeck wrote: >>>> Hi Marek, >>>> >>>> On 11/07/2016 10:14 AM, Marek Vasut wrote: >>>>> On 11/07/2016 04:58 AM, Guenter Roeck wrote: >>>>>> On Tue, Oct 25, 2016 at 09:57:43PM +0200, Marek Vasut wrote: >>>>>>> From: Chris Wulff >>>>>>> >>>>>>> Add support for emulating Altera NiosII R1 architecture into qemu. >>>>>>> This patch is based on previous work by Chris Wulff from 2012 and >>>>>>> updated to latest mainline QEMU. >>>>>>> >>>>>>> Signed-off-by: Marek Vasut >>>>>>> Cc: Chris Wulff >>>>>>> Cc: Jeff Da Silva >>>>>>> Cc: Ley Foon Tan >>>>>>> Cc: Sandra Loosemore >>>>>>> Cc: Yves Vandervennet >>>>>>> --- >>>>>>> V3: Thorough cleanup, deal with the review comments all over the >>>>>>> place >>>>>>> V4: - Use extract32() >>>>>>> - Fix gen_goto_tb() , suppress tcg_gen_goto_tb() >>>>>>> - Clean up gen_check_supervisor() helper >>>>>>> - Use TCGMemOp type for flags >>>>>>> - Drop jump labels from wrctl/rdctl >>>>>>> - More TCG cleanup >>>>>>> V5: - Simplify load/store handling >>>>>>> - Handle loads into R_ZERO from protected page, add comment >>>>>>> V6: - Fix division opcode handling >>>>>>> - Add missing disas handling >>>>>>> - V5 review comments cleanup >>>>>>> --- >>>>>> [ ... ] >>>>>> >>>>>>> diff --git a/target-nios2/cpu.h b/target-nios2/cpu.h >>>>>>> new file mode 100644 >>>>>>> index 0000000..17c9a0f >>>>>> [ ... ] >>>>>> >>>>>>> +static inline void cpu_get_tb_cpu_state(CPUNios2State *env, >>>>>>> target_ulong *pc, >>>>>>> + target_ulong *cs_base, >>>>>>> uint32_t *flags) >>>>>>> +{ >>>>>>> + *pc = env->regs[R_PC]; >>>>>>> + *cs_base = 0; >>>>>>> + *flags = (env->regs[CR_STATUS] & (CR_STATUS_EH | CR_STATUS_U)); >>>>>>> +} >>>>>>> + >>>>>>> +#endif /* CPU_NIOS2_H */ >>>>>>> + >>>>>> >>>>>> The empty line at the end results in a whitespace message from git. >>>>> >>>>> Dropped, thanks. Is there anything else or is this patchset starting to >>>>> become acceptable ? >>>>> >>>> >>>> Hard for me to say. I tried to build and run the series with the latest >>>> linux >>>> kernel (v4.9-rc4), but it is stuck in early boot. I tried with >>>> 10m50_defconfig >>>> and 10m50_devboard.dtb. gcc is 6.1.0 built with buildroot, though I also >>>> tried >>>> with toolchains from CodeSourcery. Obviously I have no idea if there >>>> is a >>>> kernel bug or a qemu bug or a problem with the command line I used. >>>> >>>> Here is my command line: >>>> >>>> qemu-system-nios2 -M 10m50-ghrd -kernel vmlinux -dtb >>>> 10m50_devboard.dtb \ >>>> -append "earlycon=uart8250,mmio32,0x18001600,115200n8 console=ttyS0" >>>> >>>> This may be wrong, but the boot is stuck in an endless loop in >>>> mark_bootmem(), >>>> which seems early and odd. I tried with both vmlinux and >>>> arch/nios2/boot/vmImage, >>>> with the same results. >>>> >>>> Can you provide a working command line and kernel version, and/or >>>> directions how >>>> to create a working image if I need to run the image, for example, from >>>> u-boot ? >>>> Sorry if that is posted somewhere and I missed it. >>> >>> I guess Romain gave you something since I see you made some progress. >>> I'll have to look into that fdt loader issue. >>> >> >> Yes, WFM after >> >> diff --git a/hw/nios2/boot.c b/hw/nios2/boot.c >> index 564dbae..e0a9aff 100644 >> --- a/hw/nios2/boot.c >> +++ b/hw/nios2/boot.c >> @@ -73,6 +73,11 @@ static void main_cpu_reset(void *opaque) >> } >> } >> >> +static uint64_t translate_kernel_address(void *opaque, uint64_t addr) >> +{ >> + return addr - 0xc0000000LL; >> +} >> + >> static int nios2_load_dtb(struct nios2_boot_info bi, const uint32_t >> ramsize, >> const char *kernel_cmdline, const char >> *dtb_filename) >> { >> @@ -97,21 +102,16 @@ static int nios2_load_dtb(struct nios2_boot_info >> bi, const uint32_t ramsize, >> >> if (bi.initrd_start) { >> qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-start", >> - bi.initrd_start); >> + translate_kernel_address(NULL, >> bi.initrd_start)); >> >> qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end", >> - bi.initrd_end); >> + translate_kernel_address(NULL, >> bi.initrd_end)); >> } >> >> cpu_physical_memory_write(bi.fdt, fdt, fdt_size); >> return fdt_size; >> } >> >> -static uint64_t translate_kernel_address(void *opaque, uint64_t addr) >> -{ >> - return addr - 0xc0000000LL; >> -} >> - >> void nios2_load_kernel(Nios2CPU *cpu, hwaddr ddr_base, >> >> >> This is my command line, running your patch series plus the above fixup >> on top of >> the qemu master branch: > > Uhm, how could that patch fix the DT passing for you ? I am still > looking into the DT passing, that's quite odd. > This patch makes the DT passing work for me, but I cannot put my finger on why. It moves the DT a bit further in memory, that's all. if (initrd_filename) { diff --git a/hw/nios2/boot.c b/hw/nios2/boot.c index 564dbae..c9e3e69 100644 --- a/hw/nios2/boot.c +++ b/hw/nios2/boot.c @@ -178,7 +183,7 @@ void nios2_load_kernel(Nios2CPU *cpu, hwaddr ddr_base, high = ddr_base + kernel_size; } - high = ROUND_UP(high, 1024 * 1024); + high = ROUND_UP(high, 1024 * 1024) + 0x10000; /* If initrd is available, it goes after the kernel, aligned to 1M. */