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