qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [V6, 2/7] nios2: Add architecture emulation support


From: Marek Vasut
Subject: Re: [Qemu-devel] [V6, 2/7] nios2: Add architecture emulation support
Date: Sun, 13 Nov 2016 13:01:39 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.4.0

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 <address@hidden>
>>>>>>
>>>>>> 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 <address@hidden>
>>>>>> Cc: Chris Wulff <address@hidden>
>>>>>> Cc: Jeff Da Silva <address@hidden>
>>>>>> Cc: Ley Foon Tan <address@hidden>
>>>>>> Cc: Sandra Loosemore <address@hidden>
>>>>>> Cc: Yves Vandervennet <address@hidden>
>>>>>> ---
>>>>>> 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.

> qemu-system-nios2 -M 10m50-ghrd \
>     -kernel vmlinux -no-reboot \
>     -dtb 10m50_devboard.dtb \
>     --append "rdinit=/sbin/init" \
>     -initrd busybox-nios2.cpio \
>     -nographic -monitor none
> 
> I use 10m50_defconfig with CONFIG_NIOS2_PASS_CMDLINE=y and
> CONFIG_BLK_DEV_INITRD=y.
> 
> One boot error I get is:
> 
> cpu cpu0: Error -2 creating of_node link

This happens on real HW too, I have it on my list.

> but that doesn't seem to have an impact. Also, I see
> 
> altera_tse 400.ethernet (unnamed net_device) (uninitialized): MDIO bus
> altera_tse-0: created
> altera_tse 400.ethernet: Altera TSE MAC version 0.0 at 0x00000400 irq 3/4
> altera_tse 400.ethernet eth0: Bad PHY UID 0x00000000
> altera_tse 400.ethernet eth0: Cannot attach to PHY (error: -19)
> altera_tse 400.ethernet eth0 (unregistered): MDIO bus altera_tse-0: removed
> 
> As far as I can see the ethernet controller isn't supported in qemu, so
> I guess that
> is as expected.

Yes, ethernet is not yet supported but it looks like the hardware should
be easy enough to model.

> Also, it still gives me
> 
> qemu-system-nios2: Trying to execute code outside RAM or ROM at 0xd4000000
> 
> on reboot, suggesting something like "rom_add_blob_fixed()" might be
> useful, if I knew
> what to put there. If there is a means to get a clean reset, please let
> me know.

Will check, thanks!


-- 
Best regards,
Marek Vasut



reply via email to

[Prev in Thread] Current Thread [Next in Thread]