Revision 409dbce5 hw/mips_r4k.c

b/hw/mips_r4k.c
21 21
#include "loader.h"
22 22
#include "elf.h"
23 23

  
24
#define PHYS_TO_VIRT(x) ((x) | ~(target_ulong)0x7fffffff)
25

  
26
#define VIRT_TO_PHYS_ADDEND (-((int64_t)(int32_t)0x80000000))
27

  
28 24
#define MAX_IDE_BUS 2
29 25

  
30 26
static const int ide_iobase[2] = { 0x1f0, 0x170 };
......
77 73

  
78 74
static int64_t load_kernel(void)
79 75
{
80
    int64_t entry, kernel_low, kernel_high;
76
    int64_t entry, kernel_high;
81 77
    long kernel_size, initrd_size, params_size;
82 78
    ram_addr_t initrd_offset;
83 79
    uint32_t *params_buf;
......
88 84
#else
89 85
    big_endian = 0;
90 86
#endif
91
    kernel_size = load_elf(loaderparams.kernel_filename, VIRT_TO_PHYS_ADDEND,
92
                           (uint64_t *)&entry, (uint64_t *)&kernel_low,
93
                           (uint64_t *)&kernel_high, big_endian, ELF_MACHINE, 1);
87
    kernel_size = load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys,
88
                           NULL, (uint64_t *)&entry, NULL,
89
                           (uint64_t *)&kernel_high, big_endian,
90
                           ELF_MACHINE, 1);
94 91
    if (kernel_size >= 0) {
95 92
        if ((entry & ~0x7fffffffULL) == 0x80000000)
96 93
            entry = (int32_t)entry;
......
132 129
    params_buf[1] = tswap32(0x12345678);
133 130

  
134 131
    if (initrd_size > 0) {
135
        snprintf((char *)params_buf + 8, 256, "rd_start=0x" TARGET_FMT_lx " rd_size=%li %s",
136
                 PHYS_TO_VIRT((uint32_t)initrd_offset),
132
        snprintf((char *)params_buf + 8, 256, "rd_start=0x%" PRIx64 " rd_size=%li %s",
133
                 cpu_mips_phys_to_kseg0(NULL, initrd_offset),
137 134
                 initrd_size, loaderparams.kernel_cmdline);
138 135
    } else {
139 136
        snprintf((char *)params_buf + 8, 256, "%s", loaderparams.kernel_cmdline);

Also available in: Unified diff