Commit f5a5cca35b3d8d198b7f41de3fc543f9bf25d0a6
1 parent
8ab94444
ETRAX-FS: Add support for passing kernel command lines
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5516 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
15 additions
and
2 deletions
hw/etraxfs.c
| @@ -119,11 +119,13 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, | @@ -119,11 +119,13 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, | ||
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | if (kernel_filename) { | 121 | if (kernel_filename) { |
| 122 | - uint64_t entry; | 122 | + uint64_t entry, high; |
| 123 | + int kcmdline_len; | ||
| 124 | + | ||
| 123 | /* Boots a kernel elf binary, os/linux-2.6/vmlinux from the axis | 125 | /* Boots a kernel elf binary, os/linux-2.6/vmlinux from the axis |
| 124 | devboard SDK. */ | 126 | devboard SDK. */ |
| 125 | kernel_size = load_elf(kernel_filename, -0x80000000LL, | 127 | kernel_size = load_elf(kernel_filename, -0x80000000LL, |
| 126 | - &entry, NULL, NULL); | 128 | + &entry, NULL, &high); |
| 127 | bootstrap_pc = entry; | 129 | bootstrap_pc = entry; |
| 128 | if (kernel_size < 0) { | 130 | if (kernel_size < 0) { |
| 129 | /* Takes a kimage from the axis devboard SDK. */ | 131 | /* Takes a kimage from the axis devboard SDK. */ |
| @@ -132,6 +134,17 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, | @@ -132,6 +134,17 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, | ||
| 132 | env->regs[9] = 0x40004000 + kernel_size; | 134 | env->regs[9] = 0x40004000 + kernel_size; |
| 133 | } | 135 | } |
| 134 | env->regs[8] = 0x56902387; /* RAM init magic. */ | 136 | env->regs[8] = 0x56902387; /* RAM init magic. */ |
| 137 | + | ||
| 138 | + if (kernel_cmdline && (kcmdline_len = strlen(kernel_cmdline))) { | ||
| 139 | + if (kcmdline_len > 256) { | ||
| 140 | + fprintf(stderr, "Too long CRIS kernel cmdline (max 256)\n"); | ||
| 141 | + exit(1); | ||
| 142 | + } | ||
| 143 | + pstrcpy_targphys(high, 256, kernel_cmdline); | ||
| 144 | + /* Let the kernel know we are modifying the cmdline. */ | ||
| 145 | + env->regs[10] = 0x87109563; | ||
| 146 | + env->regs[11] = high; | ||
| 147 | + } | ||
| 135 | } | 148 | } |
| 136 | env->pc = bootstrap_pc; | 149 | env->pc = bootstrap_pc; |
| 137 | 150 |