Merge commit 'origin/upstream' into juha-devel
[qemu] / hw / omap.h
index 1fc534c..41fef42 100644 (file)
--- a/hw/omap.h
+++ b/hw/omap.h
 # define OMAP3_Q3_BASE      0xc0000000
 # define OMAP_MPUI_BASE                0xe1000000
 
-# define OMAP730_SRAM_SIZE     0x00032000
-# define OMAP15XX_SRAM_SIZE    0x00030000
-# define OMAP16XX_SRAM_SIZE    0x00004000
-# define OMAP1611_SRAM_SIZE    0x0003e800
-# define OMAP242X_SRAM_SIZE    0x000a0000
-# define OMAP243X_SRAM_SIZE    0x00010000
-# define OMAP3530_SRAM_SIZE 0x00010000
-# define OMAP_CS0_SIZE         0x04000000
-# define OMAP_CS1_SIZE         0x04000000
-# define OMAP_CS2_SIZE         0x04000000
-# define OMAP_CS3_SIZE         0x04000000
+# define OMAP730_SRAM_SIZE      0x00032000
+# define OMAP15XX_SRAM_SIZE     0x00030000
+# define OMAP16XX_SRAM_SIZE     0x00004000
+# define OMAP1611_SRAM_SIZE     0x0003e800
+# define OMAP242X_SRAM_SIZE     0x000a0000
+# define OMAP243X_SRAM_SIZE     0x00010000
+# define OMAP3XXX_SRAM_SIZE     0x00010000
+# define OMAP3XXX_BOOTROM_SIZE  0x00008000
+# define OMAP_CS0_SIZE          0x04000000
+# define OMAP_CS1_SIZE          0x04000000
+# define OMAP_CS2_SIZE          0x04000000
+# define OMAP_CS3_SIZE          0x04000000
 
 /* omap_clk.c */
 struct omap_mpu_state_s;
@@ -75,9 +76,10 @@ struct omap_l3_s;
 struct omap_l4_s *omap_l4_init(target_phys_addr_t base, int ta_num);
 
 struct omap_target_agent_s;
-struct omap_target_agent_s *omap_l4ta_get(struct omap_l4_s *bus, int cs);
 target_phys_addr_t omap_l4_attach(struct omap_target_agent_s *ta, int region,
                 int iotype);
+target_phys_addr_t omap_l4_base(struct omap_target_agent_s *ta, int region);
+uint32_t omap_l4_size(struct omap_target_agent_s *ta, int region);
 # define l4_register_io_memory cpu_register_io_memory
 
 struct omap_intr_handler_s;
@@ -96,16 +98,6 @@ struct omap_prcm_s *omap_prcm_init(struct omap_target_agent_s *ta,
                 qemu_irq mpu_int, qemu_irq dsp_int, qemu_irq iva_int,
                 struct omap_mpu_state_s *mpu);
 
-struct omap3_prm_s;
-struct omap3_prm_s *omap3_prm_init(struct omap_target_agent_s *ta,
-                                   qemu_irq mpu_int, qemu_irq iva_int,
-                                   struct omap_mpu_state_s *mpu);
-
-struct omap3_cm_s;
-struct omap3_cm_s *omap3_cm_init(struct omap_target_agent_s *ta,
-                qemu_irq mpu_int, qemu_irq dsp_int, qemu_irq iva_int,
-                struct omap_mpu_state_s *mpu);
-
 struct omap_sysctl_s;
 struct omap_sysctl_s *omap_sysctl_init(struct omap_target_agent_s *ta,
                 omap_clk iclk, struct omap_mpu_state_s *mpu);
@@ -115,13 +107,12 @@ struct omap_sdrc_s *omap_sdrc_init(target_phys_addr_t base);
 void omap_sdrc_write_mcfg(struct omap_sdrc_s *s, uint32_t value, uint32_t cs);
 
 struct omap_gpmc_s;
+struct nand_flash_s;
 struct omap_gpmc_s *omap_gpmc_init(struct omap_mpu_state_s *mpu,
                                    target_phys_addr_t base, qemu_irq irq);
 void omap_gpmc_attach(struct omap_gpmc_s *s, int cs, int iomemtype,
                 void (*base_upd)(void *opaque, target_phys_addr_t new),
-                void (*unmap)(void *opaque), void *opaque,
-                CPUReadMemoryFunc **nand_readfn,
-                CPUWriteMemoryFunc **nand_writefn);
+                void (*unmap)(void *opaque), void *opaque, int devicetype);
 
 /*
  * Common IRQ numbers for level 1 interrupt handler
@@ -432,69 +423,104 @@ void omap_gpmc_attach(struct omap_gpmc_s *s, int cs, int iomemtype,
 # define OMAP_INT_34XX_GPTIMER12       95
 
 /*
- * OMAP-35XX common IRQ numbers
+ * OMAP-3XXX common IRQ numbers
  */
-# define OMAP_INT_35XX_SYS_NIRQ                7
-# define OMAP_INT_35XX_PRCM_MPU_IRQ    11
-# define OMAP_INT_35XX_SDMA_IRQ0       12
-# define OMAP_INT_35XX_SDMA_IRQ1       13
-# define OMAP_INT_35XX_SDMA_IRQ2       14
-# define OMAP_INT_35XX_SDMA_IRQ3       15
-# define OMAP_INT_35XX_MCBSP1_IRQ      16
-# define OMAP_INT_35XX_MCBSP2_IRQ      17
-# define OMAP_INT_35XX_GPMC_IRQ                20
-# define OMAP_INT_35XX_MCBSP3_IRQ      22
-# define OMAP_INT_35XX_MCBSP4_IRQ      23
-# define OMAP_INT_35XX_CAM_IRQ         24
-# define OMAP_INT_35XX_DSS_IRQ         25
-# define OMAP_INT_35XX_MAIL_U0_MPU     26
-# define OMAP_INT_35XX_MCBSP5_IRQ      27
-# define OMAP_INT_35XX_DSP_MMU         28
-# define OMAP_INT_35XX_GPIO_BANK1      29
-# define OMAP_INT_35XX_GPIO_BANK2      30
-# define OMAP_INT_35XX_GPIO_BANK3      31
-# define OMAP_INT_35XX_GPIO_BANK4      32
-# define OMAP_INT_35XX_GPIO_BANK5      33
-# define OMAP_INT_35XX_GPIO_BANK6      34
-# define OMAP_INT_35XX_WDT3            36
-# define OMAP_INT_35XX_GPTIMER1                37
-# define OMAP_INT_35XX_GPTIMER2                38
-# define OMAP_INT_35XX_GPTIMER3                39
-# define OMAP_INT_35XX_GPTIMER4                40
-# define OMAP_INT_35XX_GPTIMER5                41
-# define OMAP_INT_35XX_GPTIMER6                42
-# define OMAP_INT_35XX_GPTIMER7                43
-# define OMAP_INT_35XX_GPTIMER8                44
-# define OMAP_INT_35XX_GPTIMER9                45
-# define OMAP_INT_35XX_GPTIMER10       46
-# define OMAP_INT_35XX_GPTIMER11       47
-# define OMAP_INT_35XX_MG_IRQ          53
-# define OMAP_INT_35XX_MCBSP4_IRQ_TX   54
-# define OMAP_INT_35XX_MCBSP4_IRQ_RX   55
-# define OMAP_INT_35XX_I2C1_IRQ                56
-# define OMAP_INT_35XX_I2C2_IRQ                57
-# define OMAP_INT_35XX_MCBSP1_IRQ_TX   59
-# define OMAP_INT_35XX_MCBSP1_IRQ_RX   60
-# define OMAP_INT_35XX_I2C3_IRQ                61
-# define OMAP_INT_35XX_MCBSP2_IRQ_TX   62
-# define OMAP_INT_35XX_MCBSP2_IRQ_RX   63
-# define OMAP_INT_35XX_MCSPI1_IRQ      65
-# define OMAP_INT_35XX_MCSPI2_IRQ      66
-# define OMAP_INT_35XX_UART1_IRQ       72
-# define OMAP_INT_35XX_UART2_IRQ       73
-# define OMAP_INT_35XX_UART3_IRQ       74
-# define OMAP_INT_35XX_MCBSP5_IRQ_TX   81
-# define OMAP_INT_35XX_MCBSP5_IRQ_RX   82
-# define OMAP_INT_35XX_MMC1_IRQ                83
-# define OMAP_INT_35XX_MS_IRQ          84
-# define OMAP_INT_35XX_MMC2_IRQ                86
-# define OMAP_INT_35XX_MCBSP3_IRQ_TX   89
-# define OMAP_INT_35XX_MCBSP3_IRQ_RX   90
-# define OMAP_INT_35XX_MCSPI3_IRQ      91
-# define OMAP_INT_35XX_HS_USB_MC       92
-# define OMAP_INT_35XX_HS_USB_DMA      93
-# define OMAP_INT_35XX_MMC3_IRQ                94
-# define OMAP_INT_35XX_GPTIMER12       95
+#define OMAP_INT_3XXX_EMUINT        0  /* MPU emulation */
+#define OMAP_INT_3XXX_COMMTX        1  /* MPU emulation */
+#define OMAP_INT_3XXX_COMMRX        2  /* MPU emulation */
+#define OMAP_INT_3XXX_BENCH         3  /* MPU emulation */
+#define OMAP_INT_3XXX_MCBSP2_ST_IRQ 4  /* Sidetone MCBSP2 overflow */
+#define OMAP_INT_3XXX_MCBSP3_ST_IRQ 5  /* Sidetone MCBSP3 overflow */
+#define OMAP_INT_3XXX_SSM_ABORT_IRQ 6
+#define OMAP_INT_3XXX_SYS_NIRQ      7  /* External source (active low) */
+#define OMAP_INT_3XXX_D2D_FW_IRQ    8
+#define OMAP_INT_3XXX_SMX_DBG_IRQ   9  /* L3 interconnect error for debug */
+#define OMAP_INT_3XXX_SMX_APP_IRQ   10 /* L3 interconnect error for application */
+#define OMAP_INT_3XXX_PRCM_MPU_IRQ  11 /* PRCM module IRQ */
+#define OMAP_INT_3XXX_SDMA_IRQ0     12 /* System DMA request 0 */ 
+#define OMAP_INT_3XXX_SDMA_IRQ1     13 /* System DMA request 1 */
+#define OMAP_INT_3XXX_SDMA_IRQ2     14 /* System DMA request 2 */
+#define OMAP_INT_3XXX_SDMA_IRQ3     15 /* System DMA request 3 */
+#define OMAP_INT_3XXX_MCBSP1_IRQ    16 /* MCBSP module 1 IRQ */
+#define OMAP_INT_3XXX_MCBSP2_IRQ    17 /* MCBSP module 2 IRQ */
+/* IRQ18 is reserved */
+/* IRQ19 is reserved */
+#define OMAP_INT_3XXX_GPMC_IRQ      20 /* General-purpose memory controller module */ 
+#define OMAP_INT_3XXX_SGX_IRQ       21 /* 2D/3D graphics module */
+#define OMAP_INT_3XXX_MCBSP3_IRQ    22 /* MCBSP module 3 */
+#define OMAP_INT_3XXX_MCBSP4_IRQ    23 /* MCBSP module 4 */
+#define OMAP_INT_3XXX_CAM_IRQ0      24 /* Camera interface request 0 */
+#define OMAP_INT_3XXX_DSS_IRQ       25 /* Display subsystem module */
+#define OMAP_INT_3XXX_MAIL_U0_MPU   26 /* Mailbox user 0 request */
+#define OMAP_INT_3XXX_MCBSP5_IRQ    27 /* MCBSP module 5 */
+#define OMAP_INT_3XXX_IVA2_MMU_IRQ  28 /* IVA2 MMU */
+#define OMAP_INT_3XXX_GPIO1_MPU_IRQ 29 /* GPIO module 1 */
+#define OMAP_INT_3XXX_GPIO2_MPU_IRQ 30 /* GPIO module 2 */
+#define OMAP_INT_3XXX_GPIO3_MPU_IRQ 31 /* GPIO module 3 */
+#define OMAP_INT_3XXX_GPIO4_MPU_IRQ 32 /* GPIO module 4 */
+#define OMAP_INT_3XXX_GPIO5_MPU_IRQ 33 /* GPIO module 5 */
+#define OMAP_INT_3XXX_GPIO6_MPU_IRQ 34 /* GPIO module 6 */
+#define OMAP_INT_3XXX_USIM_IRQ      35
+#define OMAP_INT_3XXX_WDT3_IRQ      36 /* Watchdog timer module 3 overflow */
+#define OMAP_INT_3XXX_GPT1_IRQ      37 /* General-purpose timer module 1 */
+#define OMAP_INT_3XXX_GPT2_IRQ      38 /* General-purpose timer module 2 */
+#define OMAP_INT_3XXX_GPT3_IRQ      39 /* General-purpose timer module 3 */
+#define OMAP_INT_3XXX_GPT4_IRQ      40 /* General-purpose timer module 4 */
+#define OMAP_INT_3XXX_GPT5_IRQ      41 /* General-purpose timer module 5 */
+#define OMAP_INT_3XXX_GPT6_IRQ      42 /* General-purpose timer module 6 */
+#define OMAP_INT_3XXX_GPT7_IRQ      43 /* General-purpose timer module 7 */
+#define OMAP_INT_3XXX_GPT8_IRQ      44 /* General-purpose timer module 8 */
+#define OMAP_INT_3XXX_GPT9_IRQ      45 /* General-purpose timer module 9 */
+#define OMAP_INT_3XXX_GPT10_IRQ     46 /* General-purpose timer module 10 */
+#define OMAP_INT_3XXX_GPT11_IRQ     47 /* General-purpose timer module 11 */
+#define OMAP_INT_3XXX_MCSPI4_IRQ    48 /* MCSPI module 4 */
+#define OMAP_INT_3XXX_SHA1MD52_IRQ  49
+#define OMAP_INT_3XXX_FPKA_READY    50
+#define OMAP_INT_3XXX_SHA1MD51_IRQ  51
+#define OMAP_INT_3XXX_RNG_IRQ       52
+#define OMAP_INT_3XXX_MG_IRQ        53
+#define OMAP_INT_3XXX_MCBSP4_IRQ_TX 54 /* MCBSP module 4 transmit */
+#define OMAP_INT_3XXX_MCBSP4_IRQ_RX 55 /* MCBSP module 4 receive */
+#define OMAP_INT_3XXX_I2C1_IRQ      56 /* I2C module 1 */
+#define OMAP_INT_3XXX_I2C2_IRQ      57 /* I2C module 2 */
+#define OMAP_INT_3XXX_HDQ_IRQ       58 /* HDQ/1-Wire */
+#define OMAP_INT_3XXX_MCBSP1_IRQ_TX 59 /* MCBSP module 1 transmit */
+#define OMAP_INT_3XXX_MCBSP1_IRQ_RX 60 /* MCBSP module 1 receive */
+#define OMAP_INT_3XXX_I2C3_IRQ      61 /* I2C module 3 */
+#define OMAP_INT_3XXX_MCBSP2_IRQ_TX 62 /* MCBSP module 2 transmit */
+#define OMAP_INT_3XXX_MCBSP2_IRQ_RX 63 /* MCBSP module 2 receive */
+#define OMAP_INT_3XXX_FPKA_ERROR    64
+#define OMAP_INT_3XXX_MCSPI1_IRQ    65 /* MCSPI module 1 */
+#define OMAP_INT_3XXX_MCSPI2_IRQ    66 /* MCSPI module 2 */
+/* IRQ67 is reserved */
+/* IRQ68 is reserved */
+/* IRQ69 is reserved */
+/* IRQ70 is reserved */
+/* IRQ71 is reserved */
+#define OMAP_INT_3XXX_UART1_IRQ     72 /* UART module 1 */
+#define OMAP_INT_3XXX_UART2_IRQ     73 /* UART module 2 */
+#define OMAP_INT_3XXX_UART3_IRQ     74 /* UART module 3 (also infrared)*/
+#define OMAP_INT_3XXX_PBIAS_IRQ     75 /* Merged interrupt for PBIASlite1 and 2 */
+#define OMAP_INT_3XXX_OHCI_IRQ      76 /* OHCI controller HSUSB MP Host interrupt */
+#define OMAP_INT_3XXX_EHCI_IRQ      77 /* EHCI controller HSUSB MP Host interrupt */
+#define OMAP_INT_3XXX_TLL_IRQ       78 /* HSUSB MP TLL interrupt */
+/* IRQ79 is reserved */
+/* IRQ80 is reserved */
+#define OMAP_INT_3XXX_MCBSP5_IRQ_TX 81 /* MCBSP module 5 transmit */
+#define OMAP_INT_3XXX_MCBSP5_IRQ_RX 82 /* MCBSP module 5 receive */
+#define OMAP_INT_3XXX_MMC1_IRQ      83 /* MMC/SD module 1 */
+#define OMAP_INT_3XXX_MS_IRQ           84
+/* IRQ85 is reserved */
+#define OMAP_INT_3XXX_MMC2_IRQ         86 /* MMC/SD module 2 */
+#define OMAP_INT_3XXX_MPU_ICR_IRQ   87 /* MPU ICR */
+#define OMAP_INT_3XXX_D2DFRINT      88 /* 3G coprocessor */
+#define OMAP_INT_3XXX_MCBSP3_IRQ_TX 89 /* MCBSP module 3 transmit */
+#define OMAP_INT_3XXX_MCBSP3_IRQ_RX 90 /* MCBSP module 3 receive */
+#define OMAP_INT_3XXX_MCSPI3_IRQ    91 /* MCSPI module 3 */
+#define OMAP_INT_3XXX_HSUSB_MC      92 /* High-Speed USB OTG controller */
+#define OMAP_INT_3XXX_HSUSB_DMA     93 /* High-Speed USB OTG DMA controller */
+#define OMAP_INT_3XXX_MMC3_IRQ      94 /* MMC/SD module 3 */
+#define OMAP_INT_3XXX_GPT12_IRQ     95 /* General-purpose timer module 12 */
 
 /* omap_dma.c */
 enum omap_dma_model {
@@ -511,6 +537,10 @@ struct soc_dma_s *omap_dma_init(target_phys_addr_t base, qemu_irq *irqs,
 struct soc_dma_s *omap_dma4_init(target_phys_addr_t base, qemu_irq *irqs,
                 struct omap_mpu_state_s *mpu, int fifo,
                 int chans, omap_clk iclk, omap_clk fclk);
+struct soc_dma_s *omap3_dma4_init(struct omap_target_agent_s *ta,
+                                  struct omap_mpu_state_s *mpu,
+                                  qemu_irq *irqs, int chans,
+                                  omap_clk iclk, omap_clk fclk);
 void omap_dma_reset(struct soc_dma_s *s);
 
 struct dma_irq_map {
@@ -578,7 +608,7 @@ struct omap_dma_lcd_channel_s {
     int dual;
 
     int current_frame;
-    ram_addr_t phys_framebuffer[2];
+    target_phys_addr_t phys_framebuffer[2];
     qemu_irq irq;
     struct omap_mpu_state_s *mpu;
 } *omap_dma_get_lcdch(struct soc_dma_s *s);
@@ -722,70 +752,76 @@ struct omap_dma_lcd_channel_s {
  * number plus one! Zero is a reserved value (defined as
  * NO_DEVICE here). Other missing values are reserved.
  */
-#define OMAP35XX_DMA_NO_DEVICE        0
-
-#define OMAP35XX_DMA_EXT_DMAREQ0      2
-#define OMAP35XX_DMA_EXT_DMAREQ1      3
-#define OMAP35XX_DMA_GPMC             4
-
-#define OMAP35XX_DMA_DSS_LINETRIGGER  6
-#define OMAP35XX_DMA_EXT_DMAREQ2      7
-
-#define OMAP35XX_DMA_SPI3_TX0         15
-#define OMAP35XX_DMA_SPI3_RX0         16
-#define OMAP35XX_DMA_MCBSP3_TX        17
-#define OMAP35XX_DMA_MCBSP3_RX        18
-#define OMAP35XX_DMA_MCBSP4_TX        19
-#define OMAP35XX_DMA_MCBSP4_RX        20
-#define OMAP35XX_DMA_MCBSP5_TX        21
-#define OMAP35XX_DMA_MCBSP5_RX        22
-#define OMAP35XX_DMA_SPI3_TX1         23
-#define OMAP35XX_DMA_SPI3_RX1         24
-#define OMAP35XX_DMA_I2C3_TX          25
-#define OMAP35XX_DMA_I2C3_RX          26
-#define OMAP35XX_DMA_I2C1_TX          27
-#define OMAP35XX_DMA_I2C1_RX          28
-#define OMAP35XX_DMA_I2C2_TX          29
-#define OMAP35XX_DMA_I2C2_RX          30
-#define OMAP35XX_DMA_MCBSP1_TX        31
-#define OMAP35XX_DMA_MCBSP1_RX        32
-#define OMAP35XX_DMA_MCBSP2_TX        33
-#define OMAP35XX_DMA_MCBSP2_RX        34
-#define OMAP35XX_DMA_SPI1_TX0         35
-#define OMAP35XX_DMA_SPI1_RX0         36
-#define OMAP35XX_DMA_SPI1_TX1         37
-#define OMAP35XX_DMA_SPI1_RX1         38
-#define OMAP35XX_DMA_SPI1_TX2         39
-#define OMAP35XX_DMA_SPI1_RX2         40
-#define OMAP35XX_DMA_SPI1_TX3         41
-#define OMAP35XX_DMA_SPI1_RX4         42
-#define OMAP35XX_DMA_SPI2_TX0         43
-#define OMAP35XX_DMA_SPI2_RX0         44
-#define OMAP35XX_DMA_SPI2_TX1         45
-#define OMAP35XX_DMA_SPI2_RX1         46
-#define OMAP35XX_DMA_MMC2_TX          47
-#define OMAP35XX_DMA_MMC2_RX          48
-#define OMAP35XX_DMA_UART1_TX         49
-#define OMAP35XX_DMA_UART1_RX         50
-#define OMAP35XX_DMA_UART2_TX         51
-#define OMAP35XX_DMA_UART2_RX         52
-#define OMAP35XX_DMA_UART3_TX         53
-#define OMAP35XX_DMA_UART3_RX         54
-
-#define OMAP35XX_DMA_MMC1_TX          61
-#define OMAP35XX_DMA_MMC1_RX          62
-#define OMAP35XX_DMA_MS               63
-#define OMAP35XX_DMA_EXT_DMAREQ3      64
-
-#define OMAP35XX_DMA_SPI4_TX0         70
-#define OMAP35XX_DMA_SPI4_RX0         71
-#define OMAP35XX_DMA_DSS0             72
-#define OMAP35XX_DMA_DSS1             73
-#define OMAP35XX_DMA_DSS2             74
-#define OMAP35XX_DMA_DSS3             75
-
-#define OMAP35XX_DMA_MMC3_TX          77
-#define OMAP35XX_DMA_MMC3_RX          78
+#define OMAP3XXX_DMA_NO_DEVICE        0
+
+#define OMAP3XXX_DMA_EXT_DMAREQ0      2
+#define OMAP3XXX_DMA_EXT_DMAREQ1      3
+#define OMAP3XXX_DMA_GPMC             4
+
+#define OMAP3XXX_DMA_DSS_LINETRIGGER  6
+#define OMAP3XXX_DMA_EXT_DMAREQ2      7
+
+#define OMAP3XXX_DMA_SPI3_TX0         15
+#define OMAP3XXX_DMA_SPI3_RX0         16
+#define OMAP3XXX_DMA_MCBSP3_TX        17
+#define OMAP3XXX_DMA_MCBSP3_RX        18
+#define OMAP3XXX_DMA_MCBSP4_TX        19
+#define OMAP3XXX_DMA_MCBSP4_RX        20
+#define OMAP3XXX_DMA_MCBSP5_TX        21
+#define OMAP3XXX_DMA_MCBSP5_RX        22
+#define OMAP3XXX_DMA_SPI3_TX1         23
+#define OMAP3XXX_DMA_SPI3_RX1         24
+#define OMAP3XXX_DMA_I2C3_TX          25
+#define OMAP3XXX_DMA_I2C3_RX          26
+#define OMAP3XXX_DMA_I2C1_TX          27
+#define OMAP3XXX_DMA_I2C1_RX          28
+#define OMAP3XXX_DMA_I2C2_TX          29
+#define OMAP3XXX_DMA_I2C2_RX          30
+#define OMAP3XXX_DMA_MCBSP1_TX        31
+#define OMAP3XXX_DMA_MCBSP1_RX        32
+#define OMAP3XXX_DMA_MCBSP2_TX        33
+#define OMAP3XXX_DMA_MCBSP2_RX        34
+#define OMAP3XXX_DMA_SPI1_TX0         35
+#define OMAP3XXX_DMA_SPI1_RX0         36
+#define OMAP3XXX_DMA_SPI1_TX1         37
+#define OMAP3XXX_DMA_SPI1_RX1         38
+#define OMAP3XXX_DMA_SPI1_TX2         39
+#define OMAP3XXX_DMA_SPI1_RX2         40
+#define OMAP3XXX_DMA_SPI1_TX3         41
+#define OMAP3XXX_DMA_SPI1_RX3         42
+#define OMAP3XXX_DMA_SPI2_TX0         43
+#define OMAP3XXX_DMA_SPI2_RX0         44
+#define OMAP3XXX_DMA_SPI2_TX1         45
+#define OMAP3XXX_DMA_SPI2_RX1         46
+#define OMAP3XXX_DMA_MMC2_TX          47
+#define OMAP3XXX_DMA_MMC2_RX          48
+#define OMAP3XXX_DMA_UART1_TX         49
+#define OMAP3XXX_DMA_UART1_RX         50
+#define OMAP3XXX_DMA_UART2_TX         51
+#define OMAP3XXX_DMA_UART2_RX         52
+#define OMAP3XXX_DMA_UART3_TX         53
+#define OMAP3XXX_DMA_UART3_RX         54
+
+#define OMAP3XXX_DMA_MMC1_TX          61
+#define OMAP3XXX_DMA_MMC1_RX          62
+#define OMAP3XXX_DMA_MS               63
+#define OMAP3XXX_DMA_EXT_DMAREQ3      64
+#define OMAP3XXX_DMA_AES2_TX          65
+#define OMAP3XXX_DMA_AES2_RX          66
+#define OMAP3XXX_DMA_DES2_TX          67
+#define OMAP3XXX_DMA_DES2_RX          68
+#define OMAP3XXX_DMA_SHA1MD5_RX       69
+#define OMAP3XXX_DMA_SPI4_TX0         70
+#define OMAP3XXX_DMA_SPI4_RX0         71
+#define OMAP3XXX_DMA_DSS0             72
+#define OMAP3XXX_DMA_DSS1             73
+#define OMAP3XXX_DMA_DSS2             74
+#define OMAP3XXX_DMA_DSS3             75
+
+#define OMAP3XXX_DMA_MMC3_TX          77
+#define OMAP3XXX_DMA_MMC3_RX          78
+#define OMAP3XXX_DMA_USIM_TX          79
+#define OMAP3XXX_DMA_USIM_RX          80
 
 
 /* omap[123].c */
@@ -844,7 +880,7 @@ struct omap_gpif_s *omap2_gpio_init(struct omap_mpu_state_s *mpu,
 struct omap_gpif_s *omap3_gpif_init(void);
 void omap3_gpio_init(struct omap_mpu_state_s *mpu,
                      struct omap_gpif_s *s, struct omap_target_agent_s *ta,
-                     qemu_irq *irq, omap_clk *fclk, omap_clk iclk, int module_index);
+                     qemu_irq irq, omap_clk *fclk, omap_clk iclk, int module_index);
 qemu_irq *omap2_gpio_in_get(struct omap_gpif_s *s, int start);
 void omap2_gpio_out_set(struct omap_gpif_s *s, int line, qemu_irq handler);
 
@@ -859,13 +895,6 @@ struct omap_uwire_s *omap_uwire_init(target_phys_addr_t base,
 void omap_uwire_attach(struct omap_uwire_s *s,
                 struct uwire_slave_s *slave, int chipselect);
 
-struct omap_mcspi_s;
-struct omap_mcspi_s *omap_mcspi_init(struct omap_target_agent_s *ta, int chnum,
-                qemu_irq irq, qemu_irq *drq, omap_clk fclk, omap_clk iclk);
-void omap_mcspi_attach(struct omap_mcspi_s *s,
-                uint32_t (*txrx)(void *opaque, uint32_t, int), void *opaque,
-                int chipselect);
-
 struct omap_rtc_s;
 struct omap_rtc_s *omap_rtc_init(target_phys_addr_t base,
                 qemu_irq *irq, omap_clk clk);
@@ -951,8 +980,10 @@ void omap_mmc_enable(struct omap_mmc_s *s, int enable);
 /* omap3_mmc.c */
 struct omap3_mmc_s;
 struct omap3_mmc_s *omap3_mmc_init(struct omap_target_agent_s *ta,
-                BlockDriverState *bd, qemu_irq irq, qemu_irq dma[],
-                omap_clk fclk, omap_clk iclk);
+                                   qemu_irq irq, qemu_irq dma[],
+                                   omap_clk fclk, omap_clk iclk);
+void omap3_mmc_attach(struct omap3_mmc_s *s,
+                      BlockDriverState *bd);
 
 /* omap_i2c.c */
 struct omap_i2c_s;
@@ -966,6 +997,32 @@ struct omap_i2c_s *omap3_i2c_init(struct omap_target_agent_s *ta,
 void omap_i2c_reset(struct omap_i2c_s *s);
 i2c_bus *omap_i2c_bus(struct omap_i2c_s *s);
 
+/* omap_spi.c */
+struct omap_mcspi_s;
+struct omap_mcspi_s *omap_mcspi_init(struct omap_target_agent_s *ta,
+                                     struct omap_mpu_state_s *mpu,
+                                     int chnum, qemu_irq irq, qemu_irq *drq,
+                                     omap_clk fclk, omap_clk iclk);
+void omap_mcspi_attach(struct omap_mcspi_s *s,
+                       uint32_t (*txrx)(void *opaque, uint32_t, int),
+                       void *opaque, int chipselect);
+void omap_mcspi_reset(struct omap_mcspi_s *s);
+
+/* omap3_usb.c */
+struct omap3_hsusb_s;
+struct omap3_hsusb_s *omap3_hsusb_init(struct omap_target_agent_s *otg_ta,
+                                       struct omap_target_agent_s *host_ta,
+                                       struct omap_target_agent_s *tll_ta,
+                                       qemu_irq mc_irq,
+                                       qemu_irq dma_irq,
+                                       qemu_irq ohci_irq,
+                                       qemu_irq ehci_irq,
+                                       qemu_irq tll_irq);
+
+/* usb-ohci.c */
+int usb_ohci_init_omap(target_phys_addr_t base, uint32_t region_size,
+                       int num_ports, qemu_irq irq);
+
 
 # define cpu_is_omap310(cpu)           (cpu->mpu_model == omap310)
 # define cpu_is_omap1510(cpu)          (cpu->mpu_model == omap1510)
@@ -1132,7 +1189,7 @@ struct omap_mpu_state_s {
 
     struct omap_gpif_s *gpif;
 
-    struct omap_mcspi_s *mcspi[2];
+    struct omap_mcspi_s *mcspi[4];
 
     struct omap_dss_s *dss;
 
@@ -1146,6 +1203,7 @@ struct omap_mpu_state_s {
     struct omap3_scm_s *omap3_scm;
     struct omap3_sms_s *omap3_sms;
     struct omap3_mmc_s *omap3_mmc[3];
+    struct omap3_hsusb_s *omap3_usb;
 };
 
 struct omap_target_agent_s {
@@ -1188,10 +1246,13 @@ struct omap_mpu_state_s *omap2420_mpu_init(unsigned long sdram_size,
 
 /* omap3.c */
 struct omap_mpu_state_s *omap3530_mpu_init(unsigned long sdram_size,
-                const char *core);
+                                           CharDriverState *chr_uart1,
+                                           CharDriverState *chr_uart2,
+                                           CharDriverState *chr_uart3);
 void omap3_set_mem_type(struct omap_mpu_state_s *s, int bootfrom);
-void omap3_set_device_type(struct omap_mpu_state_s *s, int device_type);
-int omap3_mmc_boot(struct omap_mpu_state_s *s);
+
+/* omap3_boot.c */
+void omap3_boot_rom_emu(struct omap_mpu_state_s *s);
 
 # if TARGET_PHYS_ADDR_BITS == 32
 #  define OMAP_FMT_plx "0x%08x"
@@ -1217,13 +1278,13 @@ void omap_mpu_wakeup(void *opaque, int irq, int req);
         fprintf(stderr, "%s: Bad register " OMAP_FMT_plx "\n", \
                         __FUNCTION__, paddr)
 # define OMAP_BAD_REGV(paddr, value) \
-        fprintf(stderr, "%s: Bad register " OMAP_FMT_plx " (value " OMAP_FMT_plx ")\n", \
+        fprintf(stderr, "%s: Bad register " OMAP_FMT_plx " (value 0x%08x)\n", \
                 __FUNCTION__, paddr, value)
 # define OMAP_RO_REG(paddr)            \
         fprintf(stderr, "%s: Read-only register " OMAP_FMT_plx "\n",   \
                         __FUNCTION__, paddr)
 # define OMAP_RO_REGV(paddr, value) \
-        fprintf(stderr, "%s: Read-only register " OMAP_FMT_plx " (value " OMAP_FMT_plx ")\n", \
+        fprintf(stderr, "%s: Read-only register " OMAP_FMT_plx " (value 0x%08x)\n", \
                 __FUNCTION__, paddr, value)
 
 /* OMAP-specific Linux bootloader tags for the ATAG_BOARD area