Commit 7fd7b91fac396fcc3d72ecadbcb49f5736755d23
1 parent
d927637d
amd64 port
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@764 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
22 additions
and
20 deletions
hw/ppc_prep.c
| ... | ... | @@ -55,7 +55,6 @@ do { \ |
| 55 | 55 | #endif |
| 56 | 56 | |
| 57 | 57 | #define BIOS_FILENAME "ppc_rom.bin" |
| 58 | -#define LINUX_BOOT_FILENAME "linux_boot.bin" | |
| 59 | 58 | |
| 60 | 59 | #define KERNEL_LOAD_ADDR 0x00000000 |
| 61 | 60 | #define KERNEL_STACK_ADDR 0x00400000 |
| ... | ... | @@ -677,13 +676,18 @@ static void VGA_init (void) |
| 677 | 676 | |
| 678 | 677 | extern CPUPPCState *global_env; |
| 679 | 678 | |
| 679 | +static uint32_t get_le32 (void *addr) | |
| 680 | +{ | |
| 681 | + return le32_to_cpu(*((uint32_t *)addr)); | |
| 682 | +} | |
| 683 | + | |
| 680 | 684 | void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 681 | 685 | uint32_t kernel_addr, uint32_t kernel_size, |
| 682 | 686 | uint32_t stack_addr, int boot_device, |
| 683 | 687 | const unsigned char *initrd_file) |
| 684 | 688 | { |
| 685 | 689 | CPUPPCState *env = global_env; |
| 686 | - char *p; | |
| 690 | + uint8_t *p; | |
| 687 | 691 | #if !defined (USE_OPEN_FIRMWARE) |
| 688 | 692 | char *tmp; |
| 689 | 693 | uint32_t tmpi[2]; |
| ... | ... | @@ -697,8 +701,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 697 | 701 | /* Fake bootloader */ |
| 698 | 702 | { |
| 699 | 703 | #if 1 |
| 700 | - uint32_t offset = | |
| 701 | - *((uint32_t *)(phys_ram_base + kernel_addr)); | |
| 704 | + uint32_t offset = get_le32(phys_ram_base + kernel_addr); | |
| 702 | 705 | #else |
| 703 | 706 | uint32_t offset = 12; |
| 704 | 707 | #endif |
| ... | ... | @@ -723,7 +726,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 723 | 726 | * it's not ready to handle it... |
| 724 | 727 | */ |
| 725 | 728 | env->decr = 0xFFFFFFFF; |
| 726 | - p = (void *)(phys_ram_base + kernel_addr); | |
| 729 | + p = phys_ram_base + kernel_addr; | |
| 727 | 730 | #if !defined (USE_OPEN_FIRMWARE) |
| 728 | 731 | /* Let's register the whole memory available only in supervisor mode */ |
| 729 | 732 | setup_BAT(env, 0, 0x00000000, 0x00000000, mem_size, 1, 0, 2); |
| ... | ... | @@ -732,7 +735,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 732 | 735 | */ |
| 733 | 736 | put_long(p, 0xdeadc0de); |
| 734 | 737 | /* Build a real stack room */ |
| 735 | - p = (void *)(phys_ram_base + stack_addr); | |
| 738 | + p = phys_ram_base + stack_addr; | |
| 736 | 739 | put_long(p, stack_addr); |
| 737 | 740 | p -= 32; |
| 738 | 741 | env->gpr[1] -= 32; |
| ... | ... | @@ -742,7 +745,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 742 | 745 | int size; |
| 743 | 746 | env->gpr[4] = (kernel_addr + kernel_size + 4095) & ~4095; |
| 744 | 747 | size = load_initrd(initrd_file, |
| 745 | - (void *)((uint32_t)phys_ram_base + env->gpr[4])); | |
| 748 | + phys_ram_base + env->gpr[4]); | |
| 746 | 749 | if (size < 0) { |
| 747 | 750 | /* No initrd */ |
| 748 | 751 | env->gpr[4] = env->gpr[5] = 0; |
| ... | ... | @@ -759,17 +762,17 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 759 | 762 | * The BSS starts after the kernel end. |
| 760 | 763 | */ |
| 761 | 764 | #if 0 |
| 762 | - p = (void *)(((uint32_t)phys_ram_base + kernel_addr + | |
| 763 | - kernel_size + (1 << 20) - 1) & ~((1 << 20) - 1)); | |
| 765 | + p = phys_ram_base + kernel_addr + | |
| 766 | + kernel_size + (1 << 20) - 1) & ~((1 << 20) - 1); | |
| 764 | 767 | #else |
| 765 | - p = (void *)((uint32_t)phys_ram_base + kernel_addr + 0x400000); | |
| 768 | + p = phys_ram_base + kernel_addr + 0x400000; | |
| 766 | 769 | #endif |
| 767 | 770 | if (loglevel > 0) { |
| 768 | 771 | fprintf(logfile, "bootinfos: %p 0x%08x\n", |
| 769 | - p, (uint32_t)p - (uint32_t)phys_ram_base); | |
| 772 | + p, (int)(p - phys_ram_base)); | |
| 770 | 773 | } else { |
| 771 | 774 | printf("bootinfos: %p 0x%08x\n", |
| 772 | - p, (uint32_t)p - (uint32_t)phys_ram_base); | |
| 775 | + p, (int)(p - phys_ram_base)); | |
| 773 | 776 | } |
| 774 | 777 | /* Command line: let's put it after bootinfos */ |
| 775 | 778 | #if 0 |
| ... | ... | @@ -782,7 +785,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 782 | 785 | boot_devs[boot_device - 'a'].name, |
| 783 | 786 | mem_size >> 20); |
| 784 | 787 | #endif |
| 785 | - env->gpr[6] = (uint32_t)p + 0x1000 - (uint32_t)phys_ram_base; | |
| 788 | + env->gpr[6] = p + 0x1000 - phys_ram_base; | |
| 786 | 789 | env->gpr[7] = env->gpr[6] + strlen(p + 0x1000); |
| 787 | 790 | if (loglevel > 0) { |
| 788 | 791 | fprintf(logfile, "cmdline: %p 0x%08x [%s]\n", |
| ... | ... | @@ -795,7 +798,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 795 | 798 | p = set_bootinfo_tag(p, 0x1010, 0, 0); |
| 796 | 799 | /* BI_CMD_LINE */ |
| 797 | 800 | p = set_bootinfo_tag(p, 0x1012, env->gpr[7] - env->gpr[6], |
| 798 | - (void *)(env->gpr[6] + (uint32_t)phys_ram_base)); | |
| 801 | + env->gpr[6] + phys_ram_base); | |
| 799 | 802 | /* BI_MEM_SIZE */ |
| 800 | 803 | tmp = (void *)tmpi; |
| 801 | 804 | tmp[0] = (mem_size >> 24) & 0xFF; |
| ... | ... | @@ -823,8 +826,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 823 | 826 | setup_BAT(env, 0, 0x01000000, kernel_addr, 0x00400000, 1, 0, 2); |
| 824 | 827 | { |
| 825 | 828 | #if 0 |
| 826 | - uint32_t offset = | |
| 827 | - *((uint32_t *)(phys_ram_base + kernel_addr)); | |
| 829 | + uint32_t offset = get_le32(phys_ram_base + kernel_addr); | |
| 828 | 830 | #else |
| 829 | 831 | uint32_t offset = 12; |
| 830 | 832 | #endif |
| ... | ... | @@ -832,7 +834,7 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 832 | 834 | printf("Start address: 0x%08x\n", env->nip); |
| 833 | 835 | } |
| 834 | 836 | env->gpr[1] = env->nip + (1 << 22); |
| 835 | - p = (void *)(phys_ram_base + stack_addr); | |
| 837 | + p = phys_ram_base + stack_addr; | |
| 836 | 838 | put_long(p - 32, stack_addr); |
| 837 | 839 | env->gpr[1] -= 32; |
| 838 | 840 | printf("Kernel starts at 0x%08x stack 0x%08x\n", env->nip, env->gpr[1]); |
| ... | ... | @@ -869,10 +871,10 @@ void PPC_init_hw (/*CPUPPCState *env,*/ uint32_t mem_size, |
| 869 | 871 | /* Command line: let's put it just over the stack */ |
| 870 | 872 | #if 0 |
| 871 | 873 | #if 0 |
| 872 | - p = (void *)(((uint32_t)phys_ram_base + kernel_addr + | |
| 873 | - kernel_size + (1 << 20) - 1) & ~((1 << 20) - 1)); | |
| 874 | + p = phys_ram_base + kernel_addr + | |
| 875 | + kernel_size + (1 << 20) - 1) & ~((1 << 20) - 1); | |
| 874 | 876 | #else |
| 875 | - p = (void *)((uint32_t)phys_ram_base + kernel_addr + 0x400000); | |
| 877 | + p = phys_ram_base + kernel_addr + 0x400000; | |
| 876 | 878 | #endif |
| 877 | 879 | #if 1 |
| 878 | 880 | sprintf(p, "console=ttyS0,9600 root=%02x%02x mem=%dM", | ... | ... |