static void tosa_gpio_setup(PXA2xxState *cpu, DeviceState *scp0, DeviceState *scp1, TC6393xbState *tmio) { qemu_irq *outsignals = qemu_allocate_irqs(tosa_out_switch, cpu, 4); /* MMC/SD host */ pxa2xx_mmci_handlers(cpu->mmc, qdev_get_gpio_in(scp0, TOSA_GPIO_SD_WP), qemu_irq_invert(qdev_get_gpio_in(cpu->gpio, TOSA_GPIO_nSD_DETECT))); /* Handle reset */ qdev_connect_gpio_out(cpu->gpio, TOSA_GPIO_ON_RESET, cpu->reset); /* PCMCIA signals: card's IRQ and Card-Detect */ pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[0], qdev_get_gpio_in(cpu->gpio, TOSA_GPIO_CF_IRQ), qdev_get_gpio_in(cpu->gpio, TOSA_GPIO_CF_CD)); pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[1], qdev_get_gpio_in(cpu->gpio, TOSA_GPIO_JC_CF_IRQ), NULL); qdev_connect_gpio_out(scp1, TOSA_GPIO_BT_LED, outsignals[0]); qdev_connect_gpio_out(scp1, TOSA_GPIO_NOTE_LED, outsignals[1]); qdev_connect_gpio_out(scp1, TOSA_GPIO_CHRG_ERR_LED, outsignals[2]); qdev_connect_gpio_out(scp1, TOSA_GPIO_WLAN_LED, outsignals[3]); qdev_connect_gpio_out(scp1, TOSA_GPIO_TC6393XB_L3V_ON, tc6393xb_l3v_get(tmio)); /* UDC Vbus */ qemu_irq_raise(qdev_get_gpio_in(cpu->gpio, TOSA_GPIO_USB_IN)); }
static void tosa_gpio_setup(PXA2xxState *cpu, ScoopInfo *scp0, ScoopInfo *scp1, TC6393xbState *tmio) { qemu_irq *outsignals = qemu_allocate_irqs(tosa_out_switch, cpu, 4); /* MMC/SD host */ pxa2xx_mmci_handlers(cpu->mmc, scoop_gpio_in_get(scp0)[TOSA_GPIO_SD_WP], qemu_irq_invert(pxa2xx_gpio_in_get(cpu->gpio)[TOSA_GPIO_nSD_DETECT])); /* Handle reset */ pxa2xx_gpio_out_set(cpu->gpio, TOSA_GPIO_ON_RESET, cpu->reset); /* PCMCIA signals: card's IRQ and Card-Detect */ pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[0], pxa2xx_gpio_in_get(cpu->gpio)[TOSA_GPIO_CF_IRQ], pxa2xx_gpio_in_get(cpu->gpio)[TOSA_GPIO_CF_CD]); pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[1], pxa2xx_gpio_in_get(cpu->gpio)[TOSA_GPIO_JC_CF_IRQ], NULL); scoop_gpio_out_set(scp1, TOSA_GPIO_BT_LED, outsignals[0]); scoop_gpio_out_set(scp1, TOSA_GPIO_NOTE_LED, outsignals[1]); scoop_gpio_out_set(scp1, TOSA_GPIO_CHRG_ERR_LED, outsignals[2]); scoop_gpio_out_set(scp1, TOSA_GPIO_WLAN_LED, outsignals[3]); scoop_gpio_out_set(scp1, TOSA_GPIO_TC6393XB_L3V_ON, tc6393xb_l3v_get(tmio)); }
static void tc_gpio_setup(struct pxa2xx_state_s *cpu) { qemu_irq *pcmcia_cb; int g; /* PCMCIA signals: card's IRQ and Card-Detect*/ pcmcia_cb = qemu_allocate_irqs(tc_pcmcia_cb, cpu, 2); pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[0], pcmcia_cb[0], pcmcia_cb[1]); /* Input pins levels */ pxa2xx_gpio_set(cpu->gpio, 0, 1); pxa2xx_gpio_set(cpu->gpio, 1, 0); pxa2xx_gpio_set(cpu->gpio, 2, 1); pxa2xx_gpio_set(cpu->gpio, 3, 0); pxa2xx_gpio_set(cpu->gpio, 4, 1); pxa2xx_gpio_set(cpu->gpio, 5, 0); pxa2xx_gpio_set(cpu->gpio, 6, 1); pxa2xx_gpio_set(cpu->gpio, 7, 1); pxa2xx_gpio_set(cpu->gpio, 8, 1); pxa2xx_gpio_set(cpu->gpio, 9, 1); pxa2xx_gpio_set(cpu->gpio, 10, 1); pxa2xx_gpio_set(cpu->gpio, 11, 0); pxa2xx_gpio_set(cpu->gpio, 12, 0); pxa2xx_gpio_set(cpu->gpio, 13, 0); pxa2xx_gpio_set(cpu->gpio, 14, 0); pxa2xx_gpio_set(cpu->gpio, 15, 0); pxa2xx_gpio_set(cpu->gpio, 16, 1); pxa2xx_gpio_set(cpu->gpio, 17, 0); pxa2xx_gpio_set(cpu->gpio, 18, 0); pxa2xx_gpio_set(cpu->gpio, 19, 0); pxa2xx_gpio_set(cpu->gpio, 20, 0); pxa2xx_gpio_set(cpu->gpio, 21, 0); pxa2xx_gpio_set(cpu->gpio, 22, 0); pxa2xx_gpio_set(cpu->gpio, 23, 0); pxa2xx_gpio_set(cpu->gpio, 24, 0); pxa2xx_gpio_set(cpu->gpio, 25, 0); pxa2xx_gpio_set(cpu->gpio, 26, 0); pxa2xx_gpio_set(cpu->gpio, 27, 0); pxa2xx_gpio_set(cpu->gpio, 28, 1); pxa2xx_gpio_set(cpu->gpio, 29, 0); pxa2xx_gpio_set(cpu->gpio, 30, 0); pxa2xx_gpio_set(cpu->gpio, 31, 0); pxa2xx_gpio_set(cpu->gpio, 32, 1); pxa2xx_gpio_set(cpu->gpio, 33, 0); pxa2xx_gpio_set(cpu->gpio, 34, 1); pxa2xx_gpio_set(cpu->gpio, 35, 1); pxa2xx_gpio_set(cpu->gpio, 36, 0); pxa2xx_gpio_set(cpu->gpio, 37, 0); pxa2xx_gpio_set(cpu->gpio, 38, 1); pxa2xx_gpio_set(cpu->gpio, 39, 1); pxa2xx_gpio_set(cpu->gpio, 40, 1); pxa2xx_gpio_set(cpu->gpio, 41, 1); pxa2xx_gpio_set(cpu->gpio, 42, 1); pxa2xx_gpio_set(cpu->gpio, 43, 1); pxa2xx_gpio_set(cpu->gpio, 44, 1); pxa2xx_gpio_set(cpu->gpio, 45, 0); pxa2xx_gpio_set(cpu->gpio, 46, 1); pxa2xx_gpio_set(cpu->gpio, 47, 0); pxa2xx_gpio_set(cpu->gpio, 48, 1); pxa2xx_gpio_set(cpu->gpio, 49, 1); pxa2xx_gpio_set(cpu->gpio, 50, 1); pxa2xx_gpio_set(cpu->gpio, 51, 1); pxa2xx_gpio_set(cpu->gpio, 52, 1); pxa2xx_gpio_set(cpu->gpio, 53, 1); pxa2xx_gpio_set(cpu->gpio, 54, 0); pxa2xx_gpio_set(cpu->gpio, 55, 1); pxa2xx_gpio_set(cpu->gpio, 56, 0); pxa2xx_gpio_set(cpu->gpio, 57, 0); pxa2xx_gpio_set(cpu->gpio, 58, 0); pxa2xx_gpio_set(cpu->gpio, 59, 0); pxa2xx_gpio_set(cpu->gpio, 60, 0); pxa2xx_gpio_set(cpu->gpio, 61, 0); pxa2xx_gpio_set(cpu->gpio, 62, 0); pxa2xx_gpio_set(cpu->gpio, 63, 0); pxa2xx_gpio_set(cpu->gpio, 64, 0); pxa2xx_gpio_set(cpu->gpio, 65, 0); pxa2xx_gpio_set(cpu->gpio, 66, 0); pxa2xx_gpio_set(cpu->gpio, 67, 0); pxa2xx_gpio_set(cpu->gpio, 68, 0); pxa2xx_gpio_set(cpu->gpio, 69, 0); pxa2xx_gpio_set(cpu->gpio, 70, 0); pxa2xx_gpio_set(cpu->gpio, 71, 0); pxa2xx_gpio_set(cpu->gpio, 72, 0); pxa2xx_gpio_set(cpu->gpio, 73, 0); pxa2xx_gpio_set(cpu->gpio, 74, 1); pxa2xx_gpio_set(cpu->gpio, 75, 1); pxa2xx_gpio_set(cpu->gpio, 76, 0); pxa2xx_gpio_set(cpu->gpio, 77, 1); pxa2xx_gpio_set(cpu->gpio, 78, 0); pxa2xx_gpio_set(cpu->gpio, 79, 0); pxa2xx_gpio_set(cpu->gpio, 80, 0); pxa2xx_gpio_set(cpu->gpio, 81, 1); pxa2xx_gpio_set(cpu->gpio, 82, 1); pxa2xx_gpio_set(cpu->gpio, 83, 1); pxa2xx_gpio_set(cpu->gpio, 84, 1); pxa2xx_gpio_set(cpu->gpio, 85, 1); pxa2xx_gpio_set(cpu->gpio, 86, 1); pxa2xx_gpio_set(cpu->gpio, 87, 1); pxa2xx_gpio_set(cpu->gpio, 88, 1); pxa2xx_gpio_set(cpu->gpio, 89, 1); pxa2xx_gpio_set(cpu->gpio, 90, 0); pxa2xx_gpio_set(cpu->gpio, 91, 0); pxa2xx_gpio_set(cpu->gpio, 92, 0); pxa2xx_gpio_set(cpu->gpio, 93, 0); pxa2xx_gpio_set(cpu->gpio, 94, 0); pxa2xx_gpio_set(cpu->gpio, 95, 0); pxa2xx_gpio_set(cpu->gpio, 96, 1); pxa2xx_gpio_set(cpu->gpio, 97, 1); pxa2xx_gpio_set(cpu->gpio, 98, 1); pxa2xx_gpio_set(cpu->gpio, 99, 0); pxa2xx_gpio_set(cpu->gpio, 100, 1); pxa2xx_gpio_set(cpu->gpio, 101, 0); pxa2xx_gpio_set(cpu->gpio, 102, 1); pxa2xx_gpio_set(cpu->gpio, 103, 1); pxa2xx_gpio_set(cpu->gpio, 104, 1); pxa2xx_gpio_set(cpu->gpio, 105, 1); pxa2xx_gpio_set(cpu->gpio, 106, 1); pxa2xx_gpio_set(cpu->gpio, 107, 0); pxa2xx_gpio_set(cpu->gpio, 108, 0); pxa2xx_gpio_set(cpu->gpio, 109, 0); pxa2xx_gpio_set(cpu->gpio, 110, 0); pxa2xx_gpio_set(cpu->gpio, 111, 0); pxa2xx_gpio_set(cpu->gpio, 112, 1); pxa2xx_gpio_set(cpu->gpio, 113, 0); pxa2xx_gpio_set(cpu->gpio, 114, 0); pxa2xx_gpio_set(cpu->gpio, 115, 0); pxa2xx_gpio_set(cpu->gpio, 116, 0); pxa2xx_gpio_set(cpu->gpio, 117, 0); pxa2xx_gpio_set(cpu->gpio, 118, 0); pxa2xx_gpio_set(cpu->gpio, 119, 0); pxa2xx_gpio_set(cpu->gpio, 120, 0); for (g=0;g<=120;g++) pxa2xx_gpio_handler_set(cpu->gpio, g, tc_gpio_switch, cpu); }
static void ld_gpio_setup(struct pxa2xx_state_s *cpu) { int g; qemu_irq *pcmcia_cb; /* PCMCIA signals: card's IRQ and Card-Detect*/ pcmcia_cb = qemu_allocate_irqs(ld_pcmcia_cb, cpu, 2); pxa2xx_pcmcia_set_irq_cb(cpu->pcmcia[0], pcmcia_cb[0], pcmcia_cb[1]); /* Input pins levels */ pxa2xx_gpio_set(cpu->gpio, 0, 1); pxa2xx_gpio_set(cpu->gpio, 1, 1); pxa2xx_gpio_set(cpu->gpio, 2, 1); pxa2xx_gpio_set(cpu->gpio, 3, 1); pxa2xx_gpio_set(cpu->gpio, 4, 1); pxa2xx_gpio_set(cpu->gpio, 5, 1); pxa2xx_gpio_set(cpu->gpio, 6, 1); pxa2xx_gpio_set(cpu->gpio, 7, 1); pxa2xx_gpio_set(cpu->gpio, 8, 1); pxa2xx_gpio_set(cpu->gpio, 9, 0); pxa2xx_gpio_set(cpu->gpio, 10, 0); /* hotsync, deassert for recovery console */ pxa2xx_gpio_set(cpu->gpio, 11, 0); pxa2xx_gpio_set(cpu->gpio, 12, 0); /* <--- power switch, for hard reset :D */ pxa2xx_gpio_set(cpu->gpio, 13, 0); pxa2xx_gpio_set(cpu->gpio, 14, 0); pxa2xx_gpio_set(cpu->gpio, 15, 0); pxa2xx_gpio_set(cpu->gpio, 18, 1); pxa2xx_gpio_set(cpu->gpio, 20, 1); pxa2xx_gpio_set(cpu->gpio, 23, 1); pxa2xx_gpio_set(cpu->gpio, 24, 1); pxa2xx_gpio_set(cpu->gpio, 26, 1); pxa2xx_gpio_set(cpu->gpio, 27, 0); pxa2xx_gpio_set(cpu->gpio, 28, 1); pxa2xx_gpio_set(cpu->gpio, 29, 0); pxa2xx_gpio_set(cpu->gpio, 34, 1); pxa2xx_gpio_set(cpu->gpio, 35, 1); pxa2xx_gpio_set(cpu->gpio, 37, 1); pxa2xx_gpio_set(cpu->gpio, 38, 1); pxa2xx_gpio_set(cpu->gpio, 39, 1); pxa2xx_gpio_set(cpu->gpio, 40, 0); pxa2xx_gpio_set(cpu->gpio, 42, 1); pxa2xx_gpio_set(cpu->gpio, 44, 1); pxa2xx_gpio_set(cpu->gpio, 46, 1); pxa2xx_gpio_set(cpu->gpio, 53, 0); pxa2xx_gpio_set(cpu->gpio, 56, 1); pxa2xx_gpio_set(cpu->gpio, 57, 0); pxa2xx_gpio_set(cpu->gpio, 80, 1); pxa2xx_gpio_set(cpu->gpio, 82, 1); pxa2xx_gpio_set(cpu->gpio, 86, 1); pxa2xx_gpio_set(cpu->gpio, 90, 1); pxa2xx_gpio_set(cpu->gpio, 95, 0); pxa2xx_gpio_set(cpu->gpio, 97, 0); pxa2xx_gpio_set(cpu->gpio, 100, 0); pxa2xx_gpio_set(cpu->gpio, 101, 0); pxa2xx_gpio_set(cpu->gpio, 102, 0); pxa2xx_gpio_set(cpu->gpio, 104, 0); pxa2xx_gpio_set(cpu->gpio, 106, 0); pxa2xx_gpio_set(cpu->gpio, 107, 0); pxa2xx_gpio_set(cpu->gpio, 116, 0); pxa2xx_gpio_set(cpu->gpio, 119, 1); pxa2xx_gpio_set(cpu->gpio, 120, 1); /* Misc */ pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_BT1_PWR, ld_btpwr1_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_LCD1_PWR, ld_lcdpwr1_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_WLAN_PWR, ld_wlanpwr_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_GREEN_LED, ld_greenled_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_WLAN_RST, ld_wlan_reset, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_BT2_PWR, ld_btpwr2_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_BL_PWR, ld_blpwr_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_UART_PWR, ld_serialpwr_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_ORANGE_LED, ld_orangeled_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_LCD2_PWR, ld_lcdpwr2_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_HDD_RST, ld_hdd_reset, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_USB_PWR, ld_usbpwr_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_IR_PWR, ld_irpwr_switch, cpu); pxa2xx_gpio_handler_set(cpu->gpio, LD_GPIO_HDD_PWR, ld_hddpwr_switch, cpu); /* Uncomment this to monitor all GPIOs */ /* for (g=0;g<=120;g++) pxa2xx_gpio_handler_set(cpu->gpio, g, ld_gpio_switch, cpu); */ }
static void mainstone_common_init(MemoryRegion *address_space_mem, ram_addr_t ram_size, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum mainstone_model_e model, int arm_id) { uint32_t sector_len = 256 * 1024; hwaddr mainstone_flash_base[] = { MST_FLASH_0, MST_FLASH_1 }; PXA2xxState *mpu; DeviceState *mst_irq; DriveInfo *dinfo; int i; int be; MemoryRegion *rom = g_new(MemoryRegion, 1); if (!cpu_model) cpu_model = "pxa270-c5"; /* Setup CPU & memory */ mpu = pxa270_init(address_space_mem, mainstone_binfo.ram_size, cpu_model); memory_region_init_ram(rom, "mainstone.rom", MAINSTONE_ROM); vmstate_register_ram_global(rom); memory_region_set_readonly(rom, true); memory_region_add_subregion(address_space_mem, 0, rom); #ifdef TARGET_WORDS_BIGENDIAN be = 1; #else be = 0; #endif /* There are two 32MiB flash devices on the board */ for (i = 0; i < 2; i ++) { dinfo = drive_get(IF_PFLASH, 0, i); if (!dinfo) { fprintf(stderr, "Two flash images must be given with the " "'pflash' parameter\n"); exit(1); } if (!pflash_cfi01_register(mainstone_flash_base[i], NULL, i ? "mainstone.flash1" : "mainstone.flash0", MAINSTONE_FLASH, dinfo->bdrv, sector_len, MAINSTONE_FLASH / sector_len, 4, 0, 0, 0, 0, be)) { fprintf(stderr, "qemu: Error registering flash memory.\n"); exit(1); } } mst_irq = sysbus_create_simple("mainstone-fpga", MST_FPGA_PHYS, qdev_get_gpio_in(mpu->gpio, 0)); /* setup keypad */ printf("map addr %p\n", &map); pxa27x_register_keypad(mpu->kp, map, 0xe0); /* MMC/SD host */ pxa2xx_mmci_handlers(mpu->mmc, NULL, qdev_get_gpio_in(mst_irq, MMC_IRQ)); pxa2xx_pcmcia_set_irq_cb(mpu->pcmcia[0], qdev_get_gpio_in(mst_irq, S0_IRQ), qdev_get_gpio_in(mst_irq, S0_CD_IRQ)); pxa2xx_pcmcia_set_irq_cb(mpu->pcmcia[1], qdev_get_gpio_in(mst_irq, S1_IRQ), qdev_get_gpio_in(mst_irq, S1_CD_IRQ)); smc91c111_init(&nd_table[0], MST_ETH_PHYS, qdev_get_gpio_in(mst_irq, ETHERNET_IRQ)); mainstone_binfo.kernel_filename = kernel_filename; mainstone_binfo.kernel_cmdline = kernel_cmdline; mainstone_binfo.initrd_filename = initrd_filename; mainstone_binfo.board_id = arm_id; arm_load_kernel(mpu->cpu, &mainstone_binfo); }