Commit 7fd7b91fac396fcc3d72ecadbcb49f5736755d23

Authored by bellard
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",