Revision 409dbce5 hw/mips_malta.c

b/hw/mips_malta.c
46 46

  
47 47
//#define DEBUG_BOARD_INIT
48 48

  
49
#ifdef TARGET_MIPS64
50
#define PHYS_TO_VIRT(x) ((x) | ~0x7fffffffULL)
51
#else
52
#define PHYS_TO_VIRT(x) ((x) | ~0x7fffffffU)
53
#endif
54

  
55
#define ENVP_ADDR (int32_t)0x80002000
56
#define VIRT_TO_PHYS_ADDEND (-((int64_t)(int32_t)0x80000000))
57

  
49
#define ENVP_ADDR		0x80002000l
58 50
#define ENVP_NB_ENTRIES	 	16
59 51
#define ENVP_ENTRY_SIZE	 	256
60 52

  
......
681 673
/* Kernel */
682 674
static int64_t load_kernel (void)
683 675
{
684
    int64_t kernel_entry, kernel_low, kernel_high;
676
    int64_t kernel_entry, kernel_high;
685 677
    long initrd_size;
686 678
    ram_addr_t initrd_offset;
687 679
    int big_endian;
......
695 687
    big_endian = 0;
696 688
#endif
697 689

  
698
    if (load_elf(loaderparams.kernel_filename, VIRT_TO_PHYS_ADDEND,
699
                 (uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,
700
                 (uint64_t *)&kernel_high, big_endian, ELF_MACHINE, 1) < 0) {
690
    if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,
691
                 (uint64_t *)&kernel_entry, NULL, (uint64_t *)&kernel_high,
692
                 big_endian, ELF_MACHINE, 1) < 0) {
701 693
        fprintf(stderr, "qemu: could not load kernel '%s'\n",
702 694
                loaderparams.kernel_filename);
703 695
        exit(1);
......
733 725

  
734 726
    prom_set(prom_buf, prom_index++, loaderparams.kernel_filename);
735 727
    if (initrd_size > 0) {
736
        prom_set(prom_buf, prom_index++, "rd_start=0x" TARGET_FMT_lx " rd_size=%li %s",
737
                 PHYS_TO_VIRT(initrd_offset), initrd_size,
728
        prom_set(prom_buf, prom_index++, "rd_start=0x%" PRIx64 " rd_size=%li %s",
729
                 cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size,
738 730
                 loaderparams.kernel_cmdline);
739 731
    } else {
740 732
        prom_set(prom_buf, prom_index++, loaderparams.kernel_cmdline);
......
747 739
    prom_set(prom_buf, prom_index++, NULL);
748 740

  
749 741
    rom_add_blob_fixed("prom", prom_buf, prom_size,
750
                       ENVP_ADDR + VIRT_TO_PHYS_ADDEND);
742
                       cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
751 743

  
752 744
    return kernel_entry;
753 745
}

Also available in: Unified diff