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