Commit fd0bbb12c3de53b52f2ac7bf6e55fd7233c6f476
1 parent
f2aa58c6
cmdline init fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@956 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
26 additions
and
9 deletions
hw/ppc.c
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 | * THE SOFTWARE. |
| 23 | 23 | */ |
| 24 | 24 | #include "vl.h" |
| 25 | +#include "m48t59.h" | |
| 25 | 26 | |
| 26 | 27 | /*****************************************************************************/ |
| 27 | 28 | /* PPC time base and decrementer emulation */ |
| ... | ... | @@ -109,7 +110,7 @@ uint32_t cpu_ppc_load_decr (CPUState *env) |
| 109 | 110 | |
| 110 | 111 | decr = muldiv64(tb_env->decr_next - qemu_get_clock(vm_clock), |
| 111 | 112 | tb_env->tb_freq, ticks_per_sec); |
| 112 | -#ifdef DEBUG_TB | |
| 113 | +#if defined(DEBUG_TB) | |
| 113 | 114 | printf("%s: 0x%08x\n", __func__, decr); |
| 114 | 115 | #endif |
| 115 | 116 | |
| ... | ... | @@ -257,7 +258,7 @@ CPUReadMemoryFunc *PPC_io_read[] = { |
| 257 | 258 | |
| 258 | 259 | /*****************************************************************************/ |
| 259 | 260 | /* Debug port */ |
| 260 | -void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val) | |
| 261 | +void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val) | |
| 261 | 262 | { |
| 262 | 263 | addr &= 0xF; |
| 263 | 264 | switch (addr) { |
| ... | ... | @@ -270,7 +271,7 @@ void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val) |
| 270 | 271 | break; |
| 271 | 272 | case 2: |
| 272 | 273 | printf("Set loglevel to %04x\n", val); |
| 273 | - cpu_set_log(val); | |
| 274 | + cpu_set_log(val | 0x100); | |
| 274 | 275 | break; |
| 275 | 276 | } |
| 276 | 277 | } |
| ... | ... | @@ -397,13 +398,16 @@ uint16_t NVRAM_compute_crc (m48t59_t *nvram, uint32_t start, uint32_t count) |
| 397 | 398 | return crc; |
| 398 | 399 | } |
| 399 | 400 | |
| 401 | +#define CMDLINE_ADDR 0x017ff000 | |
| 402 | + | |
| 400 | 403 | int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, |
| 401 | 404 | const unsigned char *arch, |
| 402 | 405 | uint32_t RAM_size, int boot_device, |
| 403 | 406 | uint32_t kernel_image, uint32_t kernel_size, |
| 404 | - uint32_t cmdline, uint32_t cmdline_size, | |
| 407 | + const char *cmdline, | |
| 405 | 408 | uint32_t initrd_image, uint32_t initrd_size, |
| 406 | - uint32_t NVRAM_image) | |
| 409 | + uint32_t NVRAM_image, | |
| 410 | + int width, int height, int depth) | |
| 407 | 411 | { |
| 408 | 412 | uint16_t crc; |
| 409 | 413 | |
| ... | ... | @@ -416,13 +420,24 @@ int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, |
| 416 | 420 | NVRAM_set_byte(nvram, 0x34, boot_device); |
| 417 | 421 | NVRAM_set_lword(nvram, 0x38, kernel_image); |
| 418 | 422 | NVRAM_set_lword(nvram, 0x3C, kernel_size); |
| 419 | - NVRAM_set_lword(nvram, 0x40, cmdline); | |
| 420 | - NVRAM_set_lword(nvram, 0x44, cmdline_size); | |
| 423 | + if (cmdline) { | |
| 424 | + /* XXX: put the cmdline in NVRAM too ? */ | |
| 425 | + strcpy(phys_ram_base + CMDLINE_ADDR, cmdline); | |
| 426 | + NVRAM_set_lword(nvram, 0x40, CMDLINE_ADDR); | |
| 427 | + NVRAM_set_lword(nvram, 0x44, strlen(cmdline)); | |
| 428 | + } else { | |
| 429 | + NVRAM_set_lword(nvram, 0x40, 0); | |
| 430 | + NVRAM_set_lword(nvram, 0x44, 0); | |
| 431 | + } | |
| 421 | 432 | NVRAM_set_lword(nvram, 0x48, initrd_image); |
| 422 | 433 | NVRAM_set_lword(nvram, 0x4C, initrd_size); |
| 423 | 434 | NVRAM_set_lword(nvram, 0x50, NVRAM_image); |
| 424 | - crc = NVRAM_compute_crc(nvram, 0x00, 0x5C); | |
| 425 | - NVRAM_set_word(nvram, 0x5C, crc); | |
| 435 | + | |
| 436 | + NVRAM_set_word(nvram, 0x54, width); | |
| 437 | + NVRAM_set_word(nvram, 0x56, height); | |
| 438 | + NVRAM_set_word(nvram, 0x58, depth); | |
| 439 | + crc = NVRAM_compute_crc(nvram, 0x00, 0xF8); | |
| 440 | + NVRAM_set_word(nvram, 0xFC, crc); | |
| 426 | 441 | |
| 427 | 442 | return 0; |
| 428 | 443 | } |
| ... | ... | @@ -442,4 +457,6 @@ void ppc_init (int ram_size, int vga_ram_size, int boot_device, |
| 442 | 457 | snapshot, kernel_filename, kernel_cmdline, |
| 443 | 458 | initrd_filename); |
| 444 | 459 | } |
| 460 | + /* Special port to get debug messages from Open-Firmware */ | |
| 461 | + register_ioport_write(0x0F00, 4, 1, &PPC_debug_write, NULL); | |
| 445 | 462 | } | ... | ... |