X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=hw%2Fnseries.c;h=2f84f5305b71b5cec12301482d99b85de8ee480c;hb=3dc345d5874475a05794e7e1688f133b35384a9a;hp=63a1c336ead634d5d643d314bd1986523b8dd7f2;hpb=fbe1b5953d061c77c07b91e4eb555c92195308d0;p=qemu.git diff --git a/hw/nseries.c b/hw/nseries.c index 63a1c336e..2f84f5305 100644 --- a/hw/nseries.c +++ b/hw/nseries.c @@ -15,8 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * with this program; if not, see . */ #include "qemu-common.h" @@ -31,6 +30,7 @@ #include "flash.h" #include "hw.h" #include "bt.h" +#include "loader.h" /* Nokia N8x0 support */ struct n800_s { @@ -179,19 +179,19 @@ static void n8x0_nand_setup(struct n800_s *s) static void n8x0_i2c_setup(struct n800_s *s) { + DeviceState *dev; qemu_irq tmp_irq = omap2_gpio_in_get(s->cpu->gpif, N8X0_TMP105_GPIO)[0]; /* Attach the CPU on one end of our I2C bus. */ s->i2c = omap_i2c_bus(s->cpu->i2c[0]); /* Attach a menelaus PM chip */ - i2c_set_slave_address( - twl92230_init(s->i2c, - s->cpu->irq[0][OMAP_INT_24XX_SYS_NIRQ]), - N8X0_MENELAUS_ADDR); + dev = i2c_create_slave(s->i2c, "twl92230", N8X0_MENELAUS_ADDR); + qdev_connect_gpio_out(dev, 3, s->cpu->irq[0][OMAP_INT_24XX_SYS_NIRQ]); /* Attach a TMP105 PM chip (A0 wired to ground) */ - i2c_set_slave_address(tmp105_init(s->i2c, tmp_irq), N8X0_TMP105_ADDR); + dev = i2c_create_slave(s->i2c, "tmp105", N8X0_TMP105_ADDR); + qdev_connect_gpio_out(dev, 0, tmp_irq); } /* Touchscreen and keypad controller */ @@ -248,7 +248,7 @@ static void n800_tsc_kbd_setup(struct n800_s *s) /* XXX: are the three pins inverted inside the chip between the * tsc and the cpu (N4111)? */ - qemu_irq penirq = 0; /* NC */ + qemu_irq penirq = NULL; /* NC */ qemu_irq kbirq = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_KP_IRQ_GPIO)[0]; qemu_irq dav = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_TS_GPIO)[0]; @@ -362,6 +362,7 @@ static int n810_keys[0x80] = { static void n810_kbd_setup(struct n800_s *s) { qemu_irq kbd_irq = omap2_gpio_in_get(s->cpu->gpif, N810_KEYBOARD_GPIO)[0]; + DeviceState *dev; int i; for (i = 0; i < 0x80; i ++) @@ -374,8 +375,8 @@ static void n810_kbd_setup(struct n800_s *s) /* Attach the LM8322 keyboard to the I2C bus, * should happen in n8x0_i2c_setup and s->kbd be initialised here. */ - s->kbd = lm8323_init(s->i2c, kbd_irq); - i2c_set_slave_address(s->kbd, N810_LM8323_ADDR); + dev = i2c_create_slave(s->i2c, "lm8323", N810_LM8323_ADDR); + qdev_connect_gpio_out(dev, 0, kbd_irq); } /* LCD MIPI DBI-C controller (URAL) */ @@ -710,12 +711,12 @@ static void n800_dss_init(struct rfbi_chip_s *chip) fb_blank = memset(qemu_malloc(800 * 480 * 2), 0xff, 800 * 480 * 2); /* Display Memory Data Port */ chip->block(chip->opaque, 1, fb_blank, 800 * 480 * 2, 800); - free(fb_blank); + qemu_free(fb_blank); } static void n8x0_dss_setup(struct n800_s *s) { - s->blizzard.opaque = s1d13745_init(0); + s->blizzard.opaque = s1d13745_init(NULL); s->blizzard.block = s1d13745_write_block; s->blizzard.write = s1d13745_write; s->blizzard.read = s1d13745_read; @@ -768,9 +769,9 @@ static void n8x0_usb_setup(struct n800_s *s) /* Using the NOR interface */ omap_gpmc_attach(s->cpu->gpmc, N8X0_USB_ASYNC_CS, - tusb6010_async_io(tusb), 0, 0, tusb); + tusb6010_async_io(tusb), NULL, NULL, tusb); omap_gpmc_attach(s->cpu->gpmc, N8X0_USB_SYNC_CS, - tusb6010_sync_io(tusb), 0, 0, tusb); + tusb6010_sync_io(tusb), NULL, NULL, tusb); s->usb = tusb; omap2_gpio_out_set(s->cpu->gpif, N8X0_TUSB_ENABLE_GPIO, tusb_pwr); @@ -1015,7 +1016,6 @@ static void n8x0_boot_init(void *opaque) n800_dss_init(&s->blizzard); /* CPU setup */ - s->cpu->env->regs[15] = s->cpu->env->boot_info->loader_start; s->cpu->env->GE = 0x5; /* If the machine has a slided keyboard, open it */ @@ -1046,7 +1046,7 @@ static struct omap_gpiosw_info_s { "headphone", N8X0_HEADPHONE_GPIO, OMAP_GPIOSW_TYPE_CONNECTION | OMAP_GPIOSW_INVERTED, }, - { 0 } + { NULL } }, n810_gpiosw_info[] = { { "gps_reset", N810_GPS_RESET_GPIO, @@ -1067,7 +1067,7 @@ static struct omap_gpiosw_info_s { "slide", N810_SLIDE_GPIO, OMAP_GPIOSW_TYPE_COVER | OMAP_GPIOSW_INVERTED, }, - { 0 } + { NULL } }; static struct omap_partition_info_s { @@ -1082,7 +1082,7 @@ static struct omap_partition_info_s { { 0x00280000, 0x00200000, 0x3, "initfs" }, { 0x00480000, 0x0fb80000, 0x3, "rootfs" }, - { 0, 0, 0, 0 } + { 0, 0, 0, NULL } }, n810_part_info[] = { { 0x00000000, 0x00020000, 0x3, "bootloader" }, { 0x00020000, 0x00060000, 0x0, "config" }, @@ -1090,7 +1090,7 @@ static struct omap_partition_info_s { { 0x002a0000, 0x00400000, 0x0, "initfs" }, { 0x006a0000, 0x0f960000, 0x0, "rootfs" }, - { 0, 0, 0, 0 } + { 0, 0, 0, NULL } }; static bdaddr_t n8x0_bd_addr = {{ N8X0_BD_ADDR }}; @@ -1254,12 +1254,12 @@ static int n8x0_atag_setup(void *p, int model) return (void *) w - p; } -static int n800_atag_setup(struct arm_boot_info *info, void *p) +static int n800_atag_setup(const struct arm_boot_info *info, void *p) { return n8x0_atag_setup(p, 800); } -static int n810_atag_setup(struct arm_boot_info *info, void *p) +static int n810_atag_setup(const struct arm_boot_info *info, void *p) { return n8x0_atag_setup(p, 810); } @@ -1316,11 +1316,6 @@ static void n8x0_init(ram_addr_t ram_size, const char *boot_device, if (usb_enabled) n8x0_usb_setup(s); - /* Setup initial (reset) machine state */ - - /* Start at the OneNAND bootloader. */ - s->cpu->env->regs[15] = 0; - if (kernel_filename) { /* Or at the linux loader. */ binfo->kernel_filename = kernel_filename; @@ -1329,10 +1324,9 @@ static void n8x0_init(ram_addr_t ram_size, const char *boot_device, arm_load_kernel(s->cpu->env, binfo); qemu_register_reset(n8x0_boot_init, s); - n8x0_boot_init(s); } - if (option_rom[0] && (boot_device[0] == 'n' || !kernel_filename)) { + if (option_rom[0].name && (boot_device[0] == 'n' || !kernel_filename)) { int rom_size; uint8_t nolo_tags[0x10000]; /* No, wait, better start at the ROM. */ @@ -1347,7 +1341,7 @@ static void n8x0_init(ram_addr_t ram_size, const char *boot_device, * * The code above is for loading the `zImage' file from Nokia * images. */ - rom_size = load_image_targphys(option_rom[0], + rom_size = load_image_targphys(option_rom[0].name, OMAP2_Q2_BASE + 0x400000, sdram_size - 0x400000); printf("%i bytes of image loaded\n", rom_size); @@ -1402,14 +1396,22 @@ static void n810_init(ram_addr_t ram_size, cpu_model, &n810_binfo, 810); } -QEMUMachine n800_machine = { +static QEMUMachine n800_machine = { .name = "n800", .desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)", .init = n800_init, }; -QEMUMachine n810_machine = { +static QEMUMachine n810_machine = { .name = "n810", .desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)", .init = n810_init, }; + +static void nseries_machine_init(void) +{ + qemu_register_machine(&n800_machine); + qemu_register_machine(&n810_machine); +} + +machine_init(nseries_machine_init);