Index: Makefile.target =================================================================== --- Makefile.target (revision 6290) +++ Makefile.target (working copy) @@ -716,6 +716,7 @@ OBJS+= tsc2005.o bt-hci-csr.o OBJS+= mst_fpga.o mainstone.o OBJS+= musicpal.o pflash_cfi02.o +OBJS+= palmpxa.o CPPFLAGS += -DHAS_AUDIO endif ifeq ($(TARGET_BASE_ARCH), sh4) Index: hw/boards.h =================================================================== --- hw/boards.h (revision 6290) +++ hw/boards.h (working copy) @@ -95,6 +95,9 @@ /* palm.c */ extern QEMUMachine palmte_machine; +/* palmpxa.c */ +extern QEMUMachine palmtc_machine; + /* nseries.c */ extern QEMUMachine n800_machine; extern QEMUMachine n810_machine; Index: target-arm/machine.c =================================================================== --- target-arm/machine.c (revision 6290) +++ target-arm/machine.c (working copy) @@ -14,6 +14,7 @@ qemu_register_machine(&sx1_machine_v1); qemu_register_machine(&sx1_machine_v2); qemu_register_machine(&palmte_machine); + qemu_register_machine(&palmtc_machine); qemu_register_machine(&n800_machine); qemu_register_machine(&n810_machine); qemu_register_machine(&lm3s811evb_machine); Index: hw/palmpxa.c =================================================================== --- hw/palmpxa.c (revision 0) +++ hw/palmpxa.c (revision 0) @@ -0,0 +1,64 @@ +/* + * Intel PXA2xx-based Palm PDA Platforms + * + * Copyright (c) 2009 by Marek Vasut + * + * Code based on spitz platform by Andrzej Zaborowski + * + * This code is licensed under the GNU GPL v2. + */ + +#include "hw.h" +#include "pxa.h" +#include "net.h" +#include "flash.h" +#include "sysemu.h" +#include "devices.h" +#include "boards.h" + +/* Platform specific */ +#define PALMTC_ROM (0x01000000) /* 16 Mb of ROM */ +#define PALMTC_RAM (0x04000000) /* 64 Mb of RAM */ + +/* GPIOs */ +#define PALMTC_GPIO_nPOWER 9 + +static const int sector_len = 128 * 1024; + +static void palmtc_init(ram_addr_t ram_size, int vga_ram_size, + const char *boot_device, DisplayState *ds, + const char *kernel_filename, const char *kernel_cmdline, + const char *initrd_filename, const char *cpu_model) +{ + struct pxa2xx_state_s *cpu; + int index; + + /* CPU */ + cpu = pxa255_init(PALMTC_RAM, ds); + + /* Onboard FlashROM */ + index = drive_get_index(IF_PFLASH, 0, 0); + if (index == -1) { + fprintf(stderr, "A flash image must be given with the " + "'pflash' parameter\n"); + exit(1); + } + + if (!pflash_cfi01_register(0x00000000, qemu_ram_alloc(PALMTC_ROM), + drives_table[index].bdrv, sector_len, PALMTC_ROM / sector_len, + 2, 0, 0, 0, 0)) { + fprintf(stderr, "qemu: Error registering flash memory.\n"); + exit(1); + } + + /* Deassert power button */ + qemu_set_irq(pxa2xx_gpio_in_get(cpu->gpio)[PALMTC_GPIO_nPOWER], 1); +} + +QEMUMachine palmtc_machine = { + .name = "palmtc", + .desc = "Palm Tungsten|C (PXA255)", + .init = palmtc_init, + .ram_require = (PALMTC_RAM + PALMTC_ROM + PXA2XX_INTERNAL_SIZE) | + RAMSIZE_FIXED, +};