|
|
|
@ -2180,7 +2180,6 @@ static void omap2_mpu_reset(void *opaque) |
|
|
|
{ |
|
|
|
struct omap_mpu_state_s *mpu = (struct omap_mpu_state_s *) opaque; |
|
|
|
|
|
|
|
omap_inth_reset(mpu->ih[0]); |
|
|
|
omap_dma_reset(mpu->dma); |
|
|
|
omap_prcm_reset(mpu->prcm); |
|
|
|
omap_sysctl_reset(mpu->sysc); |
|
|
|
@ -2264,20 +2263,27 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
|
|
|
|
/* Actually mapped at any 2K boundary in the ARM11 private-peripheral if */ |
|
|
|
cpu_irq = arm_pic_init_cpu(s->env); |
|
|
|
s->ih[0] = omap2_inth_init(0x480fe000, 0x1000, 3, &s->irq[0], |
|
|
|
cpu_irq[ARM_PIC_CPU_IRQ], cpu_irq[ARM_PIC_CPU_FIQ], |
|
|
|
omap_findclk(s, "mpu_intc_fclk"), |
|
|
|
omap_findclk(s, "mpu_intc_iclk")); |
|
|
|
|
|
|
|
s->ih[0] = qdev_create(NULL, "omap2-intc"); |
|
|
|
qdev_prop_set_uint8(s->ih[0], "revision", 0x21); |
|
|
|
qdev_prop_set_ptr(s->ih[0], "fclk", omap_findclk(s, "mpu_intc_fclk")); |
|
|
|
qdev_prop_set_ptr(s->ih[0], "iclk", omap_findclk(s, "mpu_intc_iclk")); |
|
|
|
qdev_init_nofail(s->ih[0]); |
|
|
|
busdev = sysbus_from_qdev(s->ih[0]); |
|
|
|
sysbus_connect_irq(busdev, 0, cpu_irq[ARM_PIC_CPU_IRQ]); |
|
|
|
sysbus_connect_irq(busdev, 1, cpu_irq[ARM_PIC_CPU_FIQ]); |
|
|
|
sysbus_mmio_map(busdev, 0, 0x480fe000); |
|
|
|
s->prcm = omap_prcm_init(omap_l4tao(s->l4, 3), |
|
|
|
s->irq[0][OMAP_INT_24XX_PRCM_MPU_IRQ], NULL, NULL, s); |
|
|
|
qdev_get_gpio_in(s->ih[0], |
|
|
|
OMAP_INT_24XX_PRCM_MPU_IRQ), |
|
|
|
NULL, NULL, s); |
|
|
|
|
|
|
|
s->sysc = omap_sysctl_init(omap_l4tao(s->l4, 1), |
|
|
|
omap_findclk(s, "omapctrl_iclk"), s); |
|
|
|
|
|
|
|
for (i = 0; i < 4; i ++) |
|
|
|
dma_irqs[i] = |
|
|
|
s->irq[omap2_dma_irq_map[i].ih][omap2_dma_irq_map[i].intr]; |
|
|
|
for (i = 0; i < 4; i++) { |
|
|
|
dma_irqs[i] = qdev_get_gpio_in(s->ih[omap2_dma_irq_map[i].ih], |
|
|
|
omap2_dma_irq_map[i].intr); |
|
|
|
} |
|
|
|
s->dma = omap_dma4_init(0x48056000, dma_irqs, s, 256, 32, |
|
|
|
omap_findclk(s, "sdma_iclk"), |
|
|
|
omap_findclk(s, "sdma_fclk")); |
|
|
|
@ -2290,7 +2296,8 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
OMAP2_SRAM_BASE, s->sram_size); |
|
|
|
|
|
|
|
s->uart[0] = omap2_uart_init(omap_l4ta(s->l4, 19), |
|
|
|
s->irq[0][OMAP_INT_24XX_UART1_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], |
|
|
|
OMAP_INT_24XX_UART1_IRQ), |
|
|
|
omap_findclk(s, "uart1_fclk"), |
|
|
|
omap_findclk(s, "uart1_iclk"), |
|
|
|
s->drq[OMAP24XX_DMA_UART1_TX], |
|
|
|
@ -2298,7 +2305,8 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
"uart1", |
|
|
|
serial_hds[0]); |
|
|
|
s->uart[1] = omap2_uart_init(omap_l4ta(s->l4, 20), |
|
|
|
s->irq[0][OMAP_INT_24XX_UART2_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], |
|
|
|
OMAP_INT_24XX_UART2_IRQ), |
|
|
|
omap_findclk(s, "uart2_fclk"), |
|
|
|
omap_findclk(s, "uart2_iclk"), |
|
|
|
s->drq[OMAP24XX_DMA_UART2_TX], |
|
|
|
@ -2306,7 +2314,8 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
"uart2", |
|
|
|
serial_hds[0] ? serial_hds[1] : NULL); |
|
|
|
s->uart[2] = omap2_uart_init(omap_l4ta(s->l4, 21), |
|
|
|
s->irq[0][OMAP_INT_24XX_UART3_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], |
|
|
|
OMAP_INT_24XX_UART3_IRQ), |
|
|
|
omap_findclk(s, "uart3_fclk"), |
|
|
|
omap_findclk(s, "uart3_iclk"), |
|
|
|
s->drq[OMAP24XX_DMA_UART3_TX], |
|
|
|
@ -2315,51 +2324,51 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
serial_hds[0] && serial_hds[1] ? serial_hds[2] : NULL); |
|
|
|
|
|
|
|
s->gptimer[0] = omap_gp_timer_init(omap_l4ta(s->l4, 7), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER1], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER1), |
|
|
|
omap_findclk(s, "wu_gpt1_clk"), |
|
|
|
omap_findclk(s, "wu_l4_iclk")); |
|
|
|
s->gptimer[1] = omap_gp_timer_init(omap_l4ta(s->l4, 8), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER2], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER2), |
|
|
|
omap_findclk(s, "core_gpt2_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[2] = omap_gp_timer_init(omap_l4ta(s->l4, 22), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER3], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER3), |
|
|
|
omap_findclk(s, "core_gpt3_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[3] = omap_gp_timer_init(omap_l4ta(s->l4, 23), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER4], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER4), |
|
|
|
omap_findclk(s, "core_gpt4_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[4] = omap_gp_timer_init(omap_l4ta(s->l4, 24), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER5], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER5), |
|
|
|
omap_findclk(s, "core_gpt5_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[5] = omap_gp_timer_init(omap_l4ta(s->l4, 25), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER6], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER6), |
|
|
|
omap_findclk(s, "core_gpt6_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[6] = omap_gp_timer_init(omap_l4ta(s->l4, 26), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER7], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER7), |
|
|
|
omap_findclk(s, "core_gpt7_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[7] = omap_gp_timer_init(omap_l4ta(s->l4, 27), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER8], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER8), |
|
|
|
omap_findclk(s, "core_gpt8_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[8] = omap_gp_timer_init(omap_l4ta(s->l4, 28), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER9], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER9), |
|
|
|
omap_findclk(s, "core_gpt9_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[9] = omap_gp_timer_init(omap_l4ta(s->l4, 29), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER10], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER10), |
|
|
|
omap_findclk(s, "core_gpt10_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[10] = omap_gp_timer_init(omap_l4ta(s->l4, 30), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER11], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER11), |
|
|
|
omap_findclk(s, "core_gpt11_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
s->gptimer[11] = omap_gp_timer_init(omap_l4ta(s->l4, 31), |
|
|
|
s->irq[0][OMAP_INT_24XX_GPTIMER12], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPTIMER12), |
|
|
|
omap_findclk(s, "core_gpt12_clk"), |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
|
|
|
|
@ -2370,12 +2379,12 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
omap_findclk(s, "core_l4_iclk")); |
|
|
|
|
|
|
|
s->i2c[0] = omap2_i2c_init(omap_l4tao(s->l4, 5), |
|
|
|
s->irq[0][OMAP_INT_24XX_I2C1_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_I2C1_IRQ), |
|
|
|
&s->drq[OMAP24XX_DMA_I2C1_TX], |
|
|
|
omap_findclk(s, "i2c1.fclk"), |
|
|
|
omap_findclk(s, "i2c1.iclk")); |
|
|
|
s->i2c[1] = omap2_i2c_init(omap_l4tao(s->l4, 6), |
|
|
|
s->irq[0][OMAP_INT_24XX_I2C2_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_I2C2_IRQ), |
|
|
|
&s->drq[OMAP24XX_DMA_I2C2_TX], |
|
|
|
omap_findclk(s, "i2c2.fclk"), |
|
|
|
omap_findclk(s, "i2c2.iclk")); |
|
|
|
@ -2392,10 +2401,14 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
} |
|
|
|
qdev_init_nofail(s->gpio); |
|
|
|
busdev = sysbus_from_qdev(s->gpio); |
|
|
|
sysbus_connect_irq(busdev, 0, s->irq[0][OMAP_INT_24XX_GPIO_BANK1]); |
|
|
|
sysbus_connect_irq(busdev, 3, s->irq[0][OMAP_INT_24XX_GPIO_BANK2]); |
|
|
|
sysbus_connect_irq(busdev, 6, s->irq[0][OMAP_INT_24XX_GPIO_BANK3]); |
|
|
|
sysbus_connect_irq(busdev, 9, s->irq[0][OMAP_INT_24XX_GPIO_BANK4]); |
|
|
|
sysbus_connect_irq(busdev, 0, |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK1)); |
|
|
|
sysbus_connect_irq(busdev, 3, |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK2)); |
|
|
|
sysbus_connect_irq(busdev, 6, |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK3)); |
|
|
|
sysbus_connect_irq(busdev, 9, |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPIO_BANK4)); |
|
|
|
ta = omap_l4ta(s->l4, 3); |
|
|
|
sysbus_mmio_map(busdev, 0, omap_l4_region_base(ta, 1)); |
|
|
|
sysbus_mmio_map(busdev, 1, omap_l4_region_base(ta, 0)); |
|
|
|
@ -2404,7 +2417,8 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
sysbus_mmio_map(busdev, 4, omap_l4_region_base(ta, 5)); |
|
|
|
|
|
|
|
s->sdrc = omap_sdrc_init(0x68009000); |
|
|
|
s->gpmc = omap_gpmc_init(s, 0x6800a000, s->irq[0][OMAP_INT_24XX_GPMC_IRQ], |
|
|
|
s->gpmc = omap_gpmc_init(s, 0x6800a000, |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_GPMC_IRQ), |
|
|
|
s->drq[OMAP24XX_DMA_GPMC]); |
|
|
|
|
|
|
|
dinfo = drive_get(IF_SD, 0, 0); |
|
|
|
@ -2413,36 +2427,38 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size, |
|
|
|
exit(1); |
|
|
|
} |
|
|
|
s->mmc = omap2_mmc_init(omap_l4tao(s->l4, 9), dinfo->bdrv, |
|
|
|
s->irq[0][OMAP_INT_24XX_MMC_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MMC_IRQ), |
|
|
|
&s->drq[OMAP24XX_DMA_MMC1_TX], |
|
|
|
omap_findclk(s, "mmc_fclk"), omap_findclk(s, "mmc_iclk")); |
|
|
|
|
|
|
|
s->mcspi[0] = omap_mcspi_init(omap_l4ta(s->l4, 35), 4, |
|
|
|
s->irq[0][OMAP_INT_24XX_MCSPI1_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MCSPI1_IRQ), |
|
|
|
&s->drq[OMAP24XX_DMA_SPI1_TX0], |
|
|
|
omap_findclk(s, "spi1_fclk"), |
|
|
|
omap_findclk(s, "spi1_iclk")); |
|
|
|
s->mcspi[1] = omap_mcspi_init(omap_l4ta(s->l4, 36), 2, |
|
|
|
s->irq[0][OMAP_INT_24XX_MCSPI2_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MCSPI2_IRQ), |
|
|
|
&s->drq[OMAP24XX_DMA_SPI2_TX0], |
|
|
|
omap_findclk(s, "spi2_fclk"), |
|
|
|
omap_findclk(s, "spi2_iclk")); |
|
|
|
|
|
|
|
s->dss = omap_dss_init(omap_l4ta(s->l4, 10), 0x68000800, |
|
|
|
/* XXX wire M_IRQ_25, D_L2_IRQ_30 and I_IRQ_13 together */ |
|
|
|
s->irq[0][OMAP_INT_24XX_DSS_IRQ], s->drq[OMAP24XX_DMA_DSS], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_DSS_IRQ), |
|
|
|
s->drq[OMAP24XX_DMA_DSS], |
|
|
|
omap_findclk(s, "dss_clk1"), omap_findclk(s, "dss_clk2"), |
|
|
|
omap_findclk(s, "dss_54m_clk"), |
|
|
|
omap_findclk(s, "dss_l3_iclk"), |
|
|
|
omap_findclk(s, "dss_l4_iclk")); |
|
|
|
|
|
|
|
omap_sti_init(omap_l4ta(s->l4, 18), 0x54000000, |
|
|
|
s->irq[0][OMAP_INT_24XX_STI], omap_findclk(s, "emul_ck"), |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_STI), |
|
|
|
omap_findclk(s, "emul_ck"), |
|
|
|
serial_hds[0] && serial_hds[1] && serial_hds[2] ? |
|
|
|
serial_hds[3] : NULL); |
|
|
|
|
|
|
|
s->eac = omap_eac_init(omap_l4ta(s->l4, 32), |
|
|
|
s->irq[0][OMAP_INT_24XX_EAC_IRQ], |
|
|
|
qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_EAC_IRQ), |
|
|
|
/* Ten consecutive lines */ |
|
|
|
&s->drq[OMAP24XX_DMA_EAC_AC_RD], |
|
|
|
omap_findclk(s, "func_96m_clk"), |
|
|
|
|