Revision 5c130f65

b/hw/nseries.c
1342 1342

  
1343 1343
    if (option_rom[0] && (boot_device[0] == 'n' || !kernel_filename)) {
1344 1344
        int rom_size;
1345
        uint8_t nolo_tags[0x10000];
1345 1346
        /* No, wait, better start at the ROM.  */
1346 1347
        s->cpu->env->regs[15] = OMAP2_Q2_BASE + 0x400000;
1347 1348

  
......
1359 1360
                                       sdram_size - 0x400000);
1360 1361
        printf("%i bytes of image loaded\n", rom_size);
1361 1362

  
1362
        n800_setup_nolo_tags(phys_ram_base + sdram_size);
1363
        n800_setup_nolo_tags(nolo_tags);
1364
        cpu_physical_memory_write(OMAP2_SRAM_BASE, nolo_tags, 0x10000);
1363 1365
    }
1364 1366
    /* FIXME: We shouldn't really be doing this here.  The LCD controller
1365 1367
       will set the size once configured, so this just sets an initial
......
1412 1414
    .name = "n800",
1413 1415
    .desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)",
1414 1416
    .init = n800_init,
1415
    .ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) |
1417
    .ram_require = (0x08000000 + 0x00018000 + OMAP242X_SRAM_SIZE) |
1416 1418
            RAMSIZE_FIXED,
1417 1419
};
1418 1420

  
......
1420 1422
    .name = "n810",
1421 1423
    .desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)",
1422 1424
    .init = n810_init,
1423
    .ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) |
1425
    .ram_require = (0x08000000 + 0x00018000 + OMAP242X_SRAM_SIZE) |
1424 1426
            RAMSIZE_FIXED,
1425 1427
};
b/hw/omap_dss.c
582 582
    omap_disc_write,
583 583
};
584 584

  
585
static void *omap_rfbi_get_buffer(struct omap_dss_s *s)
586
{
587
    target_phys_addr_t fb;
588
    uint32_t pd;
589

  
590
    /* TODO */
591
    fb = s->dispc.l[0].addr[0];
592

  
593
    pd = cpu_get_physical_page_desc(fb);
594
    if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM)
595
        /* TODO */
596
        cpu_abort(cpu_single_env, "%s: framebuffer outside RAM!\n",
597
                        __FUNCTION__);
598
    else
599
        return phys_ram_base +
600
                (pd & TARGET_PAGE_MASK) +
601
                (fb & ~TARGET_PAGE_MASK);
602
}
603

  
604 585
static void omap_rfbi_transfer_stop(struct omap_dss_s *s)
605 586
{
606 587
    if (!s->rfbi.busy)
......
614 595
static void omap_rfbi_transfer_start(struct omap_dss_s *s)
615 596
{
616 597
    void *data;
617
    size_t len;
598
    target_phys_addr_t len;
599
    target_phys_addr_t data_addr;
618 600
    int pitch;
601
    static void *bounce_buffer;
602
    static target_phys_addr_t bounce_len;
619 603

  
620 604
    if (!s->rfbi.enable || s->rfbi.busy)
621 605
        return;
......
633 617

  
634 618
    s->rfbi.busy = 1;
635 619

  
636
    data = omap_rfbi_get_buffer(s);
620
    len = s->rfbi.pixels * 2;
621

  
622
    data_addr = s->dispc.l[0].addr[0];
623
    data = cpu_physical_memory_map(data_addr, &len, 0);
624
    if (data && len != s->rfbi.pixels * 2) {
625
        cpu_physical_memory_unmap(data, len, 0, 0);
626
        data = NULL;
627
        len = s->rfbi.pixels * 2;
628
    }
629
    if (!data) {
630
        if (len > bounce_len) {
631
            bounce_buffer = qemu_realloc(bounce_buffer, len);
632
        }
633
        data = bounce_buffer;
634
        cpu_physical_memory_read(data_addr, data, len);
635
    }
637 636

  
638 637
    /* TODO bpp */
639
    len = s->rfbi.pixels * 2;
640 638
    s->rfbi.pixels = 0;
641 639

  
642 640
    /* TODO: negative values */
......
647 645
    if ((s->rfbi.control & (1 << 3)) && s->rfbi.chip[1])
648 646
        s->rfbi.chip[1]->block(s->rfbi.chip[1]->opaque, 1, data, len, pitch);
649 647

  
648
    if (data != bounce_buffer) {
649
        cpu_physical_memory_unmap(data, len, 0, len);
650
    }
651

  
650 652
    omap_rfbi_transfer_stop(s);
651 653

  
652 654
    /* TODO */
b/hw/onenand.c
642 642
    s->otp = memset(qemu_malloc((64 + 2) << PAGE_SHIFT),
643 643
                    0xff, (64 + 2) << PAGE_SHIFT);
644 644
    s->ram = qemu_ram_alloc(0xc000 << s->shift);
645
    ram = phys_ram_base + s->ram;
645
    ram = qemu_get_ram_ptr(s->ram);
646 646
    s->boot[0] = ram + (0x0000 << s->shift);
647 647
    s->boot[1] = ram + (0x8000 << s->shift);
648 648
    s->data[0][0] = ram + ((0x0200 + (0 << (PAGE_SHIFT - 1))) << s->shift);
b/hw/pflash_cfi01.c
519 519

  
520 520
    pfl = qemu_mallocz(sizeof(pflash_t));
521 521

  
522
    pfl->storage = phys_ram_base + off;
522
    /* FIXME: Allocate ram ourselves.  */
523
    pfl->storage = qemu_get_ram_ptr(off);
523 524
    pfl->fl_mem = cpu_register_io_memory(0,
524 525
                    pflash_read_ops, pflash_write_ops, pfl);
525 526
    pfl->off = off;
b/hw/pflash_cfi02.c
557 557
        return NULL;
558 558
#endif
559 559
    pfl = qemu_mallocz(sizeof(pflash_t));
560
    pfl->storage = phys_ram_base + off;
560
    /* FIXME: Allocate ram ourselves.  */
561
    pfl->storage = qemu_get_ram_ptr(off);
561 562
    pfl->fl_mem = cpu_register_io_memory(0, pflash_read_ops, pflash_write_ops,
562 563
                                         pfl);
563 564
    pfl->off = off;
b/hw/ppc.c
1257 1257
    NVRAM_set_lword(nvram,  0x3C, kernel_size);
1258 1258
    if (cmdline) {
1259 1259
        /* XXX: put the cmdline in NVRAM too ? */
1260
        strcpy((char *)(phys_ram_base + CMDLINE_ADDR), cmdline);
1260
        pstrcpy_targphys(CMDLINE_ADDR, RAM_size - CMDLINE_ADDR, cmdline);
1261 1261
        NVRAM_set_lword(nvram,  0x40, CMDLINE_ADDR);
1262 1262
        NVRAM_set_lword(nvram,  0x44, strlen(cmdline));
1263 1263
    } else {
b/hw/ppc405.h
78 78
                         target_phys_addr_t offset, qemu_irq irq,
79 79
                         CharDriverState *chr);
80 80
/* On Chip Memory */
81
void ppc405_ocm_init (CPUState *env, unsigned long offset);
81
void ppc405_ocm_init (CPUState *env);
82 82
/* I2C controller */
83 83
void ppc405_i2c_init (CPUState *env, ppc4xx_mmio_t *mmio,
84 84
                      target_phys_addr_t offset, qemu_irq irq);
......
91 91
CPUState *ppc405cr_init (target_phys_addr_t ram_bases[4],
92 92
                         target_phys_addr_t ram_sizes[4],
93 93
                         uint32_t sysclk, qemu_irq **picp,
94
                         ram_addr_t *offsetp, int do_init);
94
                         int do_init);
95 95
CPUState *ppc405ep_init (target_phys_addr_t ram_bases[2],
96 96
                         target_phys_addr_t ram_sizes[2],
97 97
                         uint32_t sysclk, qemu_irq **picp,
98
                         ram_addr_t *offsetp, int do_init);
98
                         int do_init);
99 99
/* IBM STBxxx microcontrollers */
100 100
CPUState *ppc_stb025_init (target_phys_addr_t ram_bases[2],
101 101
                           target_phys_addr_t ram_sizes[2],
b/hw/ppc405_boards.c
192 192
    int index;
193 193

  
194 194
    /* XXX: fix this */
195
    ram_bases[0] = 0x00000000;
195
    ram_bases[0] = qemu_ram_alloc(0x08000000);
196 196
    ram_sizes[0] = 0x08000000;
197 197
    ram_bases[1] = 0x00000000;
198 198
    ram_sizes[1] = 0x00000000;
......
200 200
#ifdef DEBUG_BOARD_INIT
201 201
    printf("%s: register cpu\n", __func__);
202 202
#endif
203
    env = ppc405ep_init(ram_bases, ram_sizes, 33333333, &pic, &sram_offset,
203
    env = ppc405ep_init(ram_bases, ram_sizes, 33333333, &pic,
204 204
                        kernel_filename == NULL ? 0 : 1);
205 205
    /* allocate SRAM */
206
    sram_size = 512 * 1024;
207
    sram_offset = qemu_ram_alloc(sram_size);
206 208
#ifdef DEBUG_BOARD_INIT
207 209
    printf("%s: register SRAM at offset %08lx\n", __func__, sram_offset);
208 210
#endif
209
    sram_size = 512 * 1024;
210 211
    cpu_register_physical_memory(0xFFF00000, sram_size,
211 212
                                 sram_offset | IO_MEM_RAM);
212 213
    /* allocate and load BIOS */
213 214
#ifdef DEBUG_BOARD_INIT
214 215
    printf("%s: register BIOS\n", __func__);
215 216
#endif
216
    bios_offset = sram_offset + sram_size;
217 217
    fl_idx = 0;
218 218
#ifdef USE_FLASH_BIOS
219 219
    index = drive_get_index(IF_PFLASH, 0, fl_idx);
220 220
    if (index != -1) {
221 221
        bios_size = bdrv_getlength(drives_table[index].bdrv);
222
        bios_offset = qemu_ram_alloc(bios_size);
222 223
        fl_sectors = (bios_size + 65535) >> 16;
223 224
#ifdef DEBUG_BOARD_INIT
224 225
        printf("Register parallel flash %d size " ADDRX " at offset %08lx "
......
239 240
        if (bios_name == NULL)
240 241
            bios_name = BIOS_FILENAME;
241 242
        snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name);
242
        bios_size = load_image(buf, phys_ram_base + bios_offset);
243
        bios_offset = qemu_ram_alloc(BIOS_SIZE);
244
        bios_size = load_image(buf, qemu_get_ram_ptr(bios_offset));
243 245
        if (bios_size < 0 || bios_size > BIOS_SIZE) {
244 246
            fprintf(stderr, "qemu: could not load PowerPC bios '%s'\n", buf);
245 247
            exit(1);
......
248 250
        cpu_register_physical_memory((uint32_t)(-bios_size),
249 251
                                     bios_size, bios_offset | IO_MEM_ROM);
250 252
    }
251
    bios_offset += bios_size;
252 253
    /* Register FPGA */
253 254
#ifdef DEBUG_BOARD_INIT
254 255
    printf("%s: register FPGA\n", __func__);
......
294 295
        env->gpr[3] = bdloc;
295 296
        kernel_base = KERNEL_LOAD_ADDR;
296 297
        /* now we can load the kernel */
297
        kernel_size = load_image(kernel_filename, phys_ram_base + kernel_base);
298
        kernel_size = load_image_targphys(kernel_filename, kernel_base,
299
                                          ram_size - kernel_base);
298 300
        if (kernel_size < 0) {
299 301
            fprintf(stderr, "qemu: could not load kernel '%s'\n",
300 302
                    kernel_filename);
301 303
            exit(1);
302 304
        }
303
        printf("Load kernel size " TARGET_FMT_ld " at " TARGET_FMT_lx
304
               " %02x %02x %02x %02x\n", kernel_size, kernel_base,
305
               *(char *)(phys_ram_base + kernel_base),
306
               *(char *)(phys_ram_base + kernel_base + 1),
307
               *(char *)(phys_ram_base + kernel_base + 2),
308
               *(char *)(phys_ram_base + kernel_base + 3));
305
        printf("Load kernel size " TARGET_FMT_ld " at " TARGET_FMT_lx,
306
               kernel_size, kernel_base);
309 307
        /* load initrd */
310 308
        if (initrd_filename) {
311 309
            initrd_base = INITRD_LOAD_ADDR;
312
            initrd_size = load_image(initrd_filename,
313
                                     phys_ram_base + initrd_base);
310
            initrd_size = load_image_targphys(initrd_filename, initrd_base,
311
                                              ram_size - initrd_base);
314 312
            if (initrd_size < 0) {
315 313
                fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",
316 314
                        initrd_filename);
......
326 324
        if (kernel_cmdline != NULL) {
327 325
            len = strlen(kernel_cmdline);
328 326
            bdloc -= ((len + 255) & ~255);
329
            memcpy(phys_ram_base + bdloc, kernel_cmdline, len + 1);
327
            cpu_physical_memory_write(bdloc, (void *)kernel_cmdline, len + 1);
330 328
            env->gpr[6] = bdloc;
331 329
            env->gpr[7] = bdloc + len;
332 330
        } else {
......
344 342
#ifdef DEBUG_BOARD_INIT
345 343
    printf("%s: Done\n", __func__);
346 344
#endif
347
    printf("bdloc %016lx %s\n",
348
           (unsigned long)bdloc, (char *)(phys_ram_base + bdloc));
345
    printf("bdloc %016lx\n", (unsigned long)bdloc);
349 346
}
350 347

  
351 348
QEMUMachine ref405ep_machine = {
......
511 508
    int index;
512 509

  
513 510
    /* RAM is soldered to the board so the size cannot be changed */
514
    ram_bases[0] = 0x00000000;
511
    ram_bases[0] = qemu_ram_alloc(0x04000000);
515 512
    ram_sizes[0] = 0x04000000;
516
    ram_bases[1] = 0x04000000;
513
    ram_bases[1] = qemu_ram_alloc(0x04000000);
517 514
    ram_sizes[1] = 0x04000000;
518 515
#ifdef DEBUG_BOARD_INIT
519 516
    printf("%s: register cpu\n", __func__);
520 517
#endif
521
    env = ppc405ep_init(ram_bases, ram_sizes, 33333333, &pic, &bios_offset,
518
    env = ppc405ep_init(ram_bases, ram_sizes, 33333333, &pic,
522 519
                        kernel_filename == NULL ? 0 : 1);
523 520
    /* allocate and load BIOS */
524 521
#ifdef DEBUG_BOARD_INIT
......
532 529
        /* XXX: should check that size is 2MB */
533 530
        //        bios_size = 2 * 1024 * 1024;
534 531
        fl_sectors = (bios_size + 65535) >> 16;
532
        bios_offset = qemu_ram_alloc(bios_size);
535 533
#ifdef DEBUG_BOARD_INIT
536 534
        printf("Register parallel flash %d size " ADDRX " at offset %08lx "
537 535
               " addr " ADDRX " '%s' %d\n",
......
550 548
#endif
551 549
        if (bios_name == NULL)
552 550
            bios_name = BIOS_FILENAME;
551
        bios_offset = qemu_ram_alloc(BIOS_SIZE);
553 552
        snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name);
554
        bios_size = load_image(buf, phys_ram_base + bios_offset);
553
        bios_size = load_image(buf, qemu_get_ram_ptr(bios_offset));
555 554
        if (bios_size < 0 || bios_size > BIOS_SIZE) {
556 555
            fprintf(stderr, "qemu: could not load PowerPC bios '%s'\n", buf);
557 556
            exit(1);
......
560 559
        cpu_register_physical_memory((uint32_t)(-bios_size),
561 560
                                     bios_size, bios_offset | IO_MEM_ROM);
562 561
    }
563
    bios_offset += bios_size;
564 562
    /* Register Linux flash */
565 563
    index = drive_get_index(IF_PFLASH, 0, fl_idx);
566 564
    if (index != -1) {
......
574 572
               fl_idx, bios_size, bios_offset, (target_ulong)0xfc000000,
575 573
               bdrv_get_device_name(drives_table[index].bdrv));
576 574
#endif
575
        bios_offset = qemu_ram_alloc(bios_size);
577 576
        pflash_cfi02_register(0xfc000000, bios_offset,
578 577
                              drives_table[index].bdrv, 65536, fl_sectors, 1,
579 578
                              4, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 0x2AA);
......
592 591
#endif
593 592
        kernel_base = KERNEL_LOAD_ADDR;
594 593
        /* now we can load the kernel */
595
        kernel_size = load_image(kernel_filename, phys_ram_base + kernel_base);
594
        kernel_size = load_image_targphys(kernel_filename, kernel_base,
595
                                          ram_size - kernel_base);
596 596
        if (kernel_size < 0) {
597 597
            fprintf(stderr, "qemu: could not load kernel '%s'\n",
598 598
                    kernel_filename);
......
601 601
        /* load initrd */
602 602
        if (initrd_filename) {
603 603
            initrd_base = INITRD_LOAD_ADDR;
604
            initrd_size = load_image(initrd_filename,
605
                                     phys_ram_base + initrd_base);
604
            initrd_size = load_image_targphys(initrd_filename, initrd_base,
605
                                              ram_size - initrd_base);
606 606
            if (initrd_size < 0) {
607 607
                fprintf(stderr,
608 608
                        "qemu: could not load initial ram disk '%s'\n",
b/hw/ppc405_uc.c
51 51
        bdloc = 0x01000000UL - sizeof(struct ppc4xx_bd_info_t);
52 52
    else
53 53
        bdloc = bd->bi_memsize - sizeof(struct ppc4xx_bd_info_t);
54
    stl_raw(phys_ram_base + bdloc + 0x00, bd->bi_memstart);
55
    stl_raw(phys_ram_base + bdloc + 0x04, bd->bi_memsize);
56
    stl_raw(phys_ram_base + bdloc + 0x08, bd->bi_flashstart);
57
    stl_raw(phys_ram_base + bdloc + 0x0C, bd->bi_flashsize);
58
    stl_raw(phys_ram_base + bdloc + 0x10, bd->bi_flashoffset);
59
    stl_raw(phys_ram_base + bdloc + 0x14, bd->bi_sramstart);
60
    stl_raw(phys_ram_base + bdloc + 0x18, bd->bi_sramsize);
61
    stl_raw(phys_ram_base + bdloc + 0x1C, bd->bi_bootflags);
62
    stl_raw(phys_ram_base + bdloc + 0x20, bd->bi_ipaddr);
54
    stl_phys(bdloc + 0x00, bd->bi_memstart);
55
    stl_phys(bdloc + 0x04, bd->bi_memsize);
56
    stl_phys(bdloc + 0x08, bd->bi_flashstart);
57
    stl_phys(bdloc + 0x0C, bd->bi_flashsize);
58
    stl_phys(bdloc + 0x10, bd->bi_flashoffset);
59
    stl_phys(bdloc + 0x14, bd->bi_sramstart);
60
    stl_phys(bdloc + 0x18, bd->bi_sramsize);
61
    stl_phys(bdloc + 0x1C, bd->bi_bootflags);
62
    stl_phys(bdloc + 0x20, bd->bi_ipaddr);
63 63
    for (i = 0; i < 6; i++)
64
        stb_raw(phys_ram_base + bdloc + 0x24 + i, bd->bi_enetaddr[i]);
65
    stw_raw(phys_ram_base + bdloc + 0x2A, bd->bi_ethspeed);
66
    stl_raw(phys_ram_base + bdloc + 0x2C, bd->bi_intfreq);
67
    stl_raw(phys_ram_base + bdloc + 0x30, bd->bi_busfreq);
68
    stl_raw(phys_ram_base + bdloc + 0x34, bd->bi_baudrate);
64
        stb_phys(bdloc + 0x24 + i, bd->bi_enetaddr[i]);
65
    stw_phys(bdloc + 0x2A, bd->bi_ethspeed);
66
    stl_phys(bdloc + 0x2C, bd->bi_intfreq);
67
    stl_phys(bdloc + 0x30, bd->bi_busfreq);
68
    stl_phys(bdloc + 0x34, bd->bi_baudrate);
69 69
    for (i = 0; i < 4; i++)
70
        stb_raw(phys_ram_base + bdloc + 0x38 + i, bd->bi_s_version[i]);
70
        stb_phys(bdloc + 0x38 + i, bd->bi_s_version[i]);
71 71
    for (i = 0; i < 32; i++)
72
        stb_raw(phys_ram_base + bdloc + 0x3C + i, bd->bi_s_version[i]);
73
    stl_raw(phys_ram_base + bdloc + 0x5C, bd->bi_plb_busfreq);
74
    stl_raw(phys_ram_base + bdloc + 0x60, bd->bi_pci_busfreq);
72
        stb_phys(bdloc + 0x3C + i, bd->bi_s_version[i]);
73
    stl_phys(bdloc + 0x5C, bd->bi_plb_busfreq);
74
    stl_phys(bdloc + 0x60, bd->bi_pci_busfreq);
75 75
    for (i = 0; i < 6; i++)
76
        stb_raw(phys_ram_base + bdloc + 0x64 + i, bd->bi_pci_enetaddr[i]);
76
        stb_phys(bdloc + 0x64 + i, bd->bi_pci_enetaddr[i]);
77 77
    n = 0x6A;
78 78
    if (flags & 0x00000001) {
79 79
        for (i = 0; i < 6; i++)
80
            stb_raw(phys_ram_base + bdloc + n++, bd->bi_pci_enetaddr2[i]);
80
            stb_phys(bdloc + n++, bd->bi_pci_enetaddr2[i]);
81 81
    }
82
    stl_raw(phys_ram_base + bdloc + n, bd->bi_opbfreq);
82
    stl_phys(bdloc + n, bd->bi_opbfreq);
83 83
    n += 4;
84 84
    for (i = 0; i < 2; i++) {
85
        stl_raw(phys_ram_base + bdloc + n, bd->bi_iic_fast[i]);
85
        stl_phys(bdloc + n, bd->bi_iic_fast[i]);
86 86
        n += 4;
87 87
    }
88 88

  
......
1021 1021
    ocm->dsacntl = dsacntl;
1022 1022
}
1023 1023

  
1024
void ppc405_ocm_init (CPUState *env, unsigned long offset)
1024
void ppc405_ocm_init (CPUState *env)
1025 1025
{
1026 1026
    ppc405_ocm_t *ocm;
1027 1027

  
1028 1028
    ocm = qemu_mallocz(sizeof(ppc405_ocm_t));
1029
    ocm->offset = offset;
1029
    ocm->offset = qemu_ram_alloc(4096);
1030 1030
    ocm_reset(ocm);
1031 1031
    qemu_register_reset(&ocm_reset, ocm);
1032 1032
    ppc_dcr_register(env, OCM0_ISARC,
......
2178 2178
CPUState *ppc405cr_init (target_phys_addr_t ram_bases[4],
2179 2179
                         target_phys_addr_t ram_sizes[4],
2180 2180
                         uint32_t sysclk, qemu_irq **picp,
2181
                         ram_addr_t *offsetp, int do_init)
2181
                         int do_init)
2182 2182
{
2183 2183
    clk_setup_t clk_setup[PPC405CR_CLK_NB];
2184 2184
    qemu_irq dma_irqs[4];
2185 2185
    CPUState *env;
2186 2186
    ppc4xx_mmio_t *mmio;
2187 2187
    qemu_irq *pic, *irqs;
2188
    ram_addr_t offset;
2189
    int i;
2190 2188

  
2191 2189
    memset(clk_setup, 0, sizeof(clk_setup));
2192 2190
    env = ppc4xx_init("405cr", &clk_setup[PPC405CR_CPU_CLK],
......
2209 2207
    *picp = pic;
2210 2208
    /* SDRAM controller */
2211 2209
    ppc4xx_sdram_init(env, pic[14], 1, ram_bases, ram_sizes, do_init);
2212
    offset = 0;
2213
    for (i = 0; i < 4; i++)
2214
        offset += ram_sizes[i];
2215 2210
    /* External bus controller */
2216 2211
    ppc405_ebc_init(env);
2217 2212
    /* DMA controller */
......
2233 2228
    ppc405_gpio_init(env, mmio, 0x700);
2234 2229
    /* CPU control */
2235 2230
    ppc405cr_cpc_init(env, clk_setup, sysclk);
2236
    *offsetp = offset;
2237 2231

  
2238 2232
    return env;
2239 2233
}
......
2529 2523
CPUState *ppc405ep_init (target_phys_addr_t ram_bases[2],
2530 2524
                         target_phys_addr_t ram_sizes[2],
2531 2525
                         uint32_t sysclk, qemu_irq **picp,
2532
                         ram_addr_t *offsetp, int do_init)
2526
                         int do_init)
2533 2527
{
2534 2528
    clk_setup_t clk_setup[PPC405EP_CLK_NB], tlb_clk_setup;
2535 2529
    qemu_irq dma_irqs[4], gpt_irqs[5], mal_irqs[4];
2536 2530
    CPUState *env;
2537 2531
    ppc4xx_mmio_t *mmio;
2538 2532
    qemu_irq *pic, *irqs;
2539
    ram_addr_t offset;
2540
    int i;
2541 2533

  
2542 2534
    memset(clk_setup, 0, sizeof(clk_setup));
2543 2535
    /* init CPUs */
......
2565 2557
    /* SDRAM controller */
2566 2558
	/* XXX 405EP has no ECC interrupt */
2567 2559
    ppc4xx_sdram_init(env, pic[17], 2, ram_bases, ram_sizes, do_init);
2568
    offset = 0;
2569
    for (i = 0; i < 2; i++)
2570
        offset += ram_sizes[i];
2571 2560
    /* External bus controller */
2572 2561
    ppc405_ebc_init(env);
2573 2562
    /* DMA controller */
......
2588 2577
        ppc405_serial_init(env, mmio, 0x400, pic[1], serial_hds[1]);
2589 2578
    }
2590 2579
    /* OCM */
2591
    ppc405_ocm_init(env, ram_sizes[0] + ram_sizes[1]);
2592
    offset += 4096;
2580
    ppc405_ocm_init(env);
2593 2581
    /* GPT */
2594 2582
    gpt_irqs[0] = pic[19];
2595 2583
    gpt_irqs[1] = pic[20];
......
2609 2597
    /* Uses pic[9], pic[15], pic[17] */
2610 2598
    /* CPU control */
2611 2599
    ppc405ep_cpc_init(env, clk_setup, sysclk);
2612
    *offsetp = offset;
2613 2600

  
2614 2601
    return env;
2615 2602
}
b/hw/ppc4xx_devs.c
855 855
                               target_phys_addr_t ram_sizes[],
856 856
                               const unsigned int sdram_bank_sizes[])
857 857
{
858
    ram_addr_t ram_end = 0;
858
    ram_addr_t size_left = ram_size;
859 859
    int i;
860 860
    int j;
861 861

  
......
863 863
        for (j = 0; sdram_bank_sizes[j] != 0; j++) {
864 864
            unsigned int bank_size = sdram_bank_sizes[j];
865 865

  
866
            if (bank_size <= ram_size) {
867
                ram_bases[i] = ram_end;
866
            if (bank_size <= size_left) {
867
                ram_bases[i] = qemu_ram_alloc(bank_size);
868 868
                ram_sizes[i] = bank_size;
869
                ram_end += bank_size;
870
                ram_size -= bank_size;
869
                size_left -= bank_size;
871 870
                break;
872 871
            }
873 872
        }
874 873

  
875
        if (!ram_size) {
874
        if (!size_left) {
876 875
            /* No need to use the remaining banks. */
877 876
            break;
878 877
        }
879 878
    }
880 879

  
880
    ram_size -= size_left;
881 881
    if (ram_size)
882 882
        printf("Truncating memory to %d MiB to fit SDRAM controller limits.\n",
883
               (int)(ram_end >> 20));
883
               (int)(ram_size >> 20));
884 884

  
885
    return ram_end;
885
    return ram_size;
886 886
}
b/hw/soc_dma.h
110 110
static inline void soc_dma_port_add_mem_ram(struct soc_dma_s *dma,
111 111
                ram_addr_t offset, target_phys_addr_t virt_base, size_t size)
112 112
{
113
    return soc_dma_port_add_mem(dma, phys_ram_base + offset, virt_base, size);
113
    return soc_dma_port_add_mem(dma, qemu_get_ram_ptr(offset), virt_base, size);
114 114
}
b/hw/virtio-balloon.c
94 94
            if ((addr & ~TARGET_PAGE_MASK) != IO_MEM_RAM)
95 95
                continue;
96 96

  
97
            balloon_page(phys_ram_base + addr, !!(vq == s->dvq));
97
            /* Using qemu_get_ram_ptr is bending the rules a bit, but
98
               should be OK because we only want a single page.  */
99
            balloon_page(qemu_get_ram_ptr(addr), !!(vq == s->dvq));
98 100
        }
99 101

  
100 102
        virtqueue_push(vq, &elem, offset);

Also available in: Unified diff