|
|
1.1 ! root 1: /* ! 2: * Texas Instruments OMAP processors. ! 3: * ! 4: * Copyright (C) 2006-2007 Andrzej Zaborowski <[email protected]> ! 5: * ! 6: * This program is free software; you can redistribute it and/or ! 7: * modify it under the terms of the GNU General Public License as ! 8: * published by the Free Software Foundation; either version 2 of ! 9: * the License, or (at your option) any later version. ! 10: * ! 11: * This program is distributed in the hope that it will be useful, ! 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: * GNU General Public License for more details. ! 15: * ! 16: * You should have received a copy of the GNU General Public License ! 17: * along with this program; if not, write to the Free Software ! 18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ! 19: * MA 02111-1307 USA ! 20: */ ! 21: #ifndef hw_omap_h ! 22: # define hw_omap_h "omap.h" ! 23: ! 24: # define OMAP_EMIFS_BASE 0x00000000 ! 25: # define OMAP_CS0_BASE 0x00000000 ! 26: # define OMAP_CS1_BASE 0x04000000 ! 27: # define OMAP_CS2_BASE 0x08000000 ! 28: # define OMAP_CS3_BASE 0x0c000000 ! 29: # define OMAP_EMIFF_BASE 0x10000000 ! 30: # define OMAP_IMIF_BASE 0x20000000 ! 31: # define OMAP_LOCALBUS_BASE 0x30000000 ! 32: # define OMAP_MPUI_BASE 0xe1000000 ! 33: ! 34: # define OMAP730_SRAM_SIZE 0x00032000 ! 35: # define OMAP15XX_SRAM_SIZE 0x00030000 ! 36: # define OMAP16XX_SRAM_SIZE 0x00004000 ! 37: # define OMAP1611_SRAM_SIZE 0x0003e800 ! 38: # define OMAP_CS0_SIZE 0x04000000 ! 39: # define OMAP_CS1_SIZE 0x04000000 ! 40: # define OMAP_CS2_SIZE 0x04000000 ! 41: # define OMAP_CS3_SIZE 0x04000000 ! 42: ! 43: /* omap1_clk.c */ ! 44: struct omap_mpu_state_s; ! 45: typedef struct clk *omap_clk; ! 46: omap_clk omap_findclk(struct omap_mpu_state_s *mpu, const char *name); ! 47: void omap_clk_init(struct omap_mpu_state_s *mpu); ! 48: void omap_clk_adduser(struct clk *clk, qemu_irq user); ! 49: void omap_clk_get(omap_clk clk); ! 50: void omap_clk_put(omap_clk clk); ! 51: void omap_clk_onoff(omap_clk clk, int on); ! 52: void omap_clk_canidle(omap_clk clk, int can); ! 53: void omap_clk_setrate(omap_clk clk, int divide, int multiply); ! 54: int64_t omap_clk_getrate(omap_clk clk); ! 55: void omap_clk_reparent(omap_clk clk, omap_clk parent); ! 56: ! 57: /* omap.c */ ! 58: struct omap_intr_handler_s; ! 59: struct omap_intr_handler_s *omap_inth_init(target_phys_addr_t base, ! 60: unsigned long size, unsigned char nbanks, ! 61: qemu_irq parent_irq, qemu_irq parent_fiq, omap_clk clk); ! 62: ! 63: /* ! 64: * Common IRQ numbers for level 1 interrupt handler ! 65: * See /usr/include/asm-arm/arch-omap/irqs.h in Linux. ! 66: */ ! 67: # define OMAP_INT_CAMERA 1 ! 68: # define OMAP_INT_FIQ 3 ! 69: # define OMAP_INT_RTDX 6 ! 70: # define OMAP_INT_DSP_MMU_ABORT 7 ! 71: # define OMAP_INT_HOST 8 ! 72: # define OMAP_INT_ABORT 9 ! 73: # define OMAP_INT_BRIDGE_PRIV 13 ! 74: # define OMAP_INT_GPIO_BANK1 14 ! 75: # define OMAP_INT_UART3 15 ! 76: # define OMAP_INT_TIMER3 16 ! 77: # define OMAP_INT_DMA_CH0_6 19 ! 78: # define OMAP_INT_DMA_CH1_7 20 ! 79: # define OMAP_INT_DMA_CH2_8 21 ! 80: # define OMAP_INT_DMA_CH3 22 ! 81: # define OMAP_INT_DMA_CH4 23 ! 82: # define OMAP_INT_DMA_CH5 24 ! 83: # define OMAP_INT_DMA_LCD 25 ! 84: # define OMAP_INT_TIMER1 26 ! 85: # define OMAP_INT_WD_TIMER 27 ! 86: # define OMAP_INT_BRIDGE_PUB 28 ! 87: # define OMAP_INT_TIMER2 30 ! 88: # define OMAP_INT_LCD_CTRL 31 ! 89: ! 90: /* ! 91: * Common OMAP-15xx IRQ numbers for level 1 interrupt handler ! 92: */ ! 93: # define OMAP_INT_15XX_IH2_IRQ 0 ! 94: # define OMAP_INT_15XX_LB_MMU 17 ! 95: # define OMAP_INT_15XX_LOCAL_BUS 29 ! 96: ! 97: /* ! 98: * OMAP-1510 specific IRQ numbers for level 1 interrupt handler ! 99: */ ! 100: # define OMAP_INT_1510_SPI_TX 4 ! 101: # define OMAP_INT_1510_SPI_RX 5 ! 102: # define OMAP_INT_1510_DSP_MAILBOX1 10 ! 103: # define OMAP_INT_1510_DSP_MAILBOX2 11 ! 104: ! 105: /* ! 106: * OMAP-310 specific IRQ numbers for level 1 interrupt handler ! 107: */ ! 108: # define OMAP_INT_310_McBSP2_TX 4 ! 109: # define OMAP_INT_310_McBSP2_RX 5 ! 110: # define OMAP_INT_310_HSB_MAILBOX1 12 ! 111: # define OMAP_INT_310_HSAB_MMU 18 ! 112: ! 113: /* ! 114: * OMAP-1610 specific IRQ numbers for level 1 interrupt handler ! 115: */ ! 116: # define OMAP_INT_1610_IH2_IRQ 0 ! 117: # define OMAP_INT_1610_IH2_FIQ 2 ! 118: # define OMAP_INT_1610_McBSP2_TX 4 ! 119: # define OMAP_INT_1610_McBSP2_RX 5 ! 120: # define OMAP_INT_1610_DSP_MAILBOX1 10 ! 121: # define OMAP_INT_1610_DSP_MAILBOX2 11 ! 122: # define OMAP_INT_1610_LCD_LINE 12 ! 123: # define OMAP_INT_1610_GPTIMER1 17 ! 124: # define OMAP_INT_1610_GPTIMER2 18 ! 125: # define OMAP_INT_1610_SSR_FIFO_0 29 ! 126: ! 127: /* ! 128: * OMAP-730 specific IRQ numbers for level 1 interrupt handler ! 129: */ ! 130: # define OMAP_INT_730_IH2_FIQ 0 ! 131: # define OMAP_INT_730_IH2_IRQ 1 ! 132: # define OMAP_INT_730_USB_NON_ISO 2 ! 133: # define OMAP_INT_730_USB_ISO 3 ! 134: # define OMAP_INT_730_ICR 4 ! 135: # define OMAP_INT_730_EAC 5 ! 136: # define OMAP_INT_730_GPIO_BANK1 6 ! 137: # define OMAP_INT_730_GPIO_BANK2 7 ! 138: # define OMAP_INT_730_GPIO_BANK3 8 ! 139: # define OMAP_INT_730_McBSP2TX 10 ! 140: # define OMAP_INT_730_McBSP2RX 11 ! 141: # define OMAP_INT_730_McBSP2RX_OVF 12 ! 142: # define OMAP_INT_730_LCD_LINE 14 ! 143: # define OMAP_INT_730_GSM_PROTECT 15 ! 144: # define OMAP_INT_730_TIMER3 16 ! 145: # define OMAP_INT_730_GPIO_BANK5 17 ! 146: # define OMAP_INT_730_GPIO_BANK6 18 ! 147: # define OMAP_INT_730_SPGIO_WR 29 ! 148: ! 149: /* ! 150: * Common IRQ numbers for level 2 interrupt handler ! 151: */ ! 152: # define OMAP_INT_KEYBOARD 1 ! 153: # define OMAP_INT_uWireTX 2 ! 154: # define OMAP_INT_uWireRX 3 ! 155: # define OMAP_INT_I2C 4 ! 156: # define OMAP_INT_MPUIO 5 ! 157: # define OMAP_INT_USB_HHC_1 6 ! 158: # define OMAP_INT_McBSP3TX 10 ! 159: # define OMAP_INT_McBSP3RX 11 ! 160: # define OMAP_INT_McBSP1TX 12 ! 161: # define OMAP_INT_McBSP1RX 13 ! 162: # define OMAP_INT_UART1 14 ! 163: # define OMAP_INT_UART2 15 ! 164: # define OMAP_INT_USB_W2FC 20 ! 165: # define OMAP_INT_1WIRE 21 ! 166: # define OMAP_INT_OS_TIMER 22 ! 167: # define OMAP_INT_OQN 23 ! 168: # define OMAP_INT_GAUGE_32K 24 ! 169: # define OMAP_INT_RTC_TIMER 25 ! 170: # define OMAP_INT_RTC_ALARM 26 ! 171: # define OMAP_INT_DSP_MMU 28 ! 172: ! 173: /* ! 174: * OMAP-1510 specific IRQ numbers for level 2 interrupt handler ! 175: */ ! 176: # define OMAP_INT_1510_BT_MCSI1TX 16 ! 177: # define OMAP_INT_1510_BT_MCSI1RX 17 ! 178: # define OMAP_INT_1510_SoSSI_MATCH 19 ! 179: # define OMAP_INT_1510_MEM_STICK 27 ! 180: # define OMAP_INT_1510_COM_SPI_RO 31 ! 181: ! 182: /* ! 183: * OMAP-310 specific IRQ numbers for level 2 interrupt handler ! 184: */ ! 185: # define OMAP_INT_310_FAC 0 ! 186: # define OMAP_INT_310_USB_HHC_2 7 ! 187: # define OMAP_INT_310_MCSI1_FE 16 ! 188: # define OMAP_INT_310_MCSI2_FE 17 ! 189: # define OMAP_INT_310_USB_W2FC_ISO 29 ! 190: # define OMAP_INT_310_USB_W2FC_NON_ISO 30 ! 191: # define OMAP_INT_310_McBSP2RX_OF 31 ! 192: ! 193: /* ! 194: * OMAP-1610 specific IRQ numbers for level 2 interrupt handler ! 195: */ ! 196: # define OMAP_INT_1610_FAC 0 ! 197: # define OMAP_INT_1610_USB_HHC_2 7 ! 198: # define OMAP_INT_1610_USB_OTG 8 ! 199: # define OMAP_INT_1610_SoSSI 9 ! 200: # define OMAP_INT_1610_BT_MCSI1TX 16 ! 201: # define OMAP_INT_1610_BT_MCSI1RX 17 ! 202: # define OMAP_INT_1610_SoSSI_MATCH 19 ! 203: # define OMAP_INT_1610_MEM_STICK 27 ! 204: # define OMAP_INT_1610_McBSP2RX_OF 31 ! 205: # define OMAP_INT_1610_STI 32 ! 206: # define OMAP_INT_1610_STI_WAKEUP 33 ! 207: # define OMAP_INT_1610_GPTIMER3 34 ! 208: # define OMAP_INT_1610_GPTIMER4 35 ! 209: # define OMAP_INT_1610_GPTIMER5 36 ! 210: # define OMAP_INT_1610_GPTIMER6 37 ! 211: # define OMAP_INT_1610_GPTIMER7 38 ! 212: # define OMAP_INT_1610_GPTIMER8 39 ! 213: # define OMAP_INT_1610_GPIO_BANK2 40 ! 214: # define OMAP_INT_1610_GPIO_BANK3 41 ! 215: # define OMAP_INT_1610_MMC2 42 ! 216: # define OMAP_INT_1610_CF 43 ! 217: # define OMAP_INT_1610_WAKE_UP_REQ 46 ! 218: # define OMAP_INT_1610_GPIO_BANK4 48 ! 219: # define OMAP_INT_1610_SPI 49 ! 220: # define OMAP_INT_1610_DMA_CH6 53 ! 221: # define OMAP_INT_1610_DMA_CH7 54 ! 222: # define OMAP_INT_1610_DMA_CH8 55 ! 223: # define OMAP_INT_1610_DMA_CH9 56 ! 224: # define OMAP_INT_1610_DMA_CH10 57 ! 225: # define OMAP_INT_1610_DMA_CH11 58 ! 226: # define OMAP_INT_1610_DMA_CH12 59 ! 227: # define OMAP_INT_1610_DMA_CH13 60 ! 228: # define OMAP_INT_1610_DMA_CH14 61 ! 229: # define OMAP_INT_1610_DMA_CH15 62 ! 230: # define OMAP_INT_1610_NAND 63 ! 231: ! 232: /* ! 233: * OMAP-730 specific IRQ numbers for level 2 interrupt handler ! 234: */ ! 235: # define OMAP_INT_730_HW_ERRORS 0 ! 236: # define OMAP_INT_730_NFIQ_PWR_FAIL 1 ! 237: # define OMAP_INT_730_CFCD 2 ! 238: # define OMAP_INT_730_CFIREQ 3 ! 239: # define OMAP_INT_730_I2C 4 ! 240: # define OMAP_INT_730_PCC 5 ! 241: # define OMAP_INT_730_MPU_EXT_NIRQ 6 ! 242: # define OMAP_INT_730_SPI_100K_1 7 ! 243: # define OMAP_INT_730_SYREN_SPI 8 ! 244: # define OMAP_INT_730_VLYNQ 9 ! 245: # define OMAP_INT_730_GPIO_BANK4 10 ! 246: # define OMAP_INT_730_McBSP1TX 11 ! 247: # define OMAP_INT_730_McBSP1RX 12 ! 248: # define OMAP_INT_730_McBSP1RX_OF 13 ! 249: # define OMAP_INT_730_UART_MODEM_IRDA_2 14 ! 250: # define OMAP_INT_730_UART_MODEM_1 15 ! 251: # define OMAP_INT_730_MCSI 16 ! 252: # define OMAP_INT_730_uWireTX 17 ! 253: # define OMAP_INT_730_uWireRX 18 ! 254: # define OMAP_INT_730_SMC_CD 19 ! 255: # define OMAP_INT_730_SMC_IREQ 20 ! 256: # define OMAP_INT_730_HDQ_1WIRE 21 ! 257: # define OMAP_INT_730_TIMER32K 22 ! 258: # define OMAP_INT_730_MMC_SDIO 23 ! 259: # define OMAP_INT_730_UPLD 24 ! 260: # define OMAP_INT_730_USB_HHC_1 27 ! 261: # define OMAP_INT_730_USB_HHC_2 28 ! 262: # define OMAP_INT_730_USB_GENI 29 ! 263: # define OMAP_INT_730_USB_OTG 30 ! 264: # define OMAP_INT_730_CAMERA_IF 31 ! 265: # define OMAP_INT_730_RNG 32 ! 266: # define OMAP_INT_730_DUAL_MODE_TIMER 33 ! 267: # define OMAP_INT_730_DBB_RF_EN 34 ! 268: # define OMAP_INT_730_MPUIO_KEYPAD 35 ! 269: # define OMAP_INT_730_SHA1_MD5 36 ! 270: # define OMAP_INT_730_SPI_100K_2 37 ! 271: # define OMAP_INT_730_RNG_IDLE 38 ! 272: # define OMAP_INT_730_MPUIO 39 ! 273: # define OMAP_INT_730_LLPC_LCD_CTRL_OFF 40 ! 274: # define OMAP_INT_730_LLPC_OE_FALLING 41 ! 275: # define OMAP_INT_730_LLPC_OE_RISING 42 ! 276: # define OMAP_INT_730_LLPC_VSYNC 43 ! 277: # define OMAP_INT_730_WAKE_UP_REQ 46 ! 278: # define OMAP_INT_730_DMA_CH6 53 ! 279: # define OMAP_INT_730_DMA_CH7 54 ! 280: # define OMAP_INT_730_DMA_CH8 55 ! 281: # define OMAP_INT_730_DMA_CH9 56 ! 282: # define OMAP_INT_730_DMA_CH10 57 ! 283: # define OMAP_INT_730_DMA_CH11 58 ! 284: # define OMAP_INT_730_DMA_CH12 59 ! 285: # define OMAP_INT_730_DMA_CH13 60 ! 286: # define OMAP_INT_730_DMA_CH14 61 ! 287: # define OMAP_INT_730_DMA_CH15 62 ! 288: # define OMAP_INT_730_NAND 63 ! 289: ! 290: /* ! 291: * OMAP-24xx common IRQ numbers ! 292: */ ! 293: # define OMAP_INT_24XX_SYS_NIRQ 7 ! 294: # define OMAP_INT_24XX_SDMA_IRQ0 12 ! 295: # define OMAP_INT_24XX_SDMA_IRQ1 13 ! 296: # define OMAP_INT_24XX_SDMA_IRQ2 14 ! 297: # define OMAP_INT_24XX_SDMA_IRQ3 15 ! 298: # define OMAP_INT_24XX_CAM_IRQ 24 ! 299: # define OMAP_INT_24XX_DSS_IRQ 25 ! 300: # define OMAP_INT_24XX_MAIL_U0_MPU 26 ! 301: # define OMAP_INT_24XX_DSP_UMA 27 ! 302: # define OMAP_INT_24XX_DSP_MMU 28 ! 303: # define OMAP_INT_24XX_GPIO_BANK1 29 ! 304: # define OMAP_INT_24XX_GPIO_BANK2 30 ! 305: # define OMAP_INT_24XX_GPIO_BANK3 31 ! 306: # define OMAP_INT_24XX_GPIO_BANK4 32 ! 307: # define OMAP_INT_24XX_GPIO_BANK5 33 ! 308: # define OMAP_INT_24XX_MAIL_U3_MPU 34 ! 309: # define OMAP_INT_24XX_GPTIMER1 37 ! 310: # define OMAP_INT_24XX_GPTIMER2 38 ! 311: # define OMAP_INT_24XX_GPTIMER3 39 ! 312: # define OMAP_INT_24XX_GPTIMER4 40 ! 313: # define OMAP_INT_24XX_GPTIMER5 41 ! 314: # define OMAP_INT_24XX_GPTIMER6 42 ! 315: # define OMAP_INT_24XX_GPTIMER7 43 ! 316: # define OMAP_INT_24XX_GPTIMER8 44 ! 317: # define OMAP_INT_24XX_GPTIMER9 45 ! 318: # define OMAP_INT_24XX_GPTIMER10 46 ! 319: # define OMAP_INT_24XX_GPTIMER11 47 ! 320: # define OMAP_INT_24XX_GPTIMER12 48 ! 321: # define OMAP_INT_24XX_MCBSP1_IRQ_TX 59 ! 322: # define OMAP_INT_24XX_MCBSP1_IRQ_RX 60 ! 323: # define OMAP_INT_24XX_MCBSP2_IRQ_TX 62 ! 324: # define OMAP_INT_24XX_MCBSP2_IRQ_RX 63 ! 325: # define OMAP_INT_24XX_UART1_IRQ 72 ! 326: # define OMAP_INT_24XX_UART2_IRQ 73 ! 327: # define OMAP_INT_24XX_UART3_IRQ 74 ! 328: # define OMAP_INT_24XX_USB_IRQ_GEN 75 ! 329: # define OMAP_INT_24XX_USB_IRQ_NISO 76 ! 330: # define OMAP_INT_24XX_USB_IRQ_ISO 77 ! 331: # define OMAP_INT_24XX_USB_IRQ_HGEN 78 ! 332: # define OMAP_INT_24XX_USB_IRQ_HSOF 79 ! 333: # define OMAP_INT_24XX_USB_IRQ_OTG 80 ! 334: # define OMAP_INT_24XX_MMC_IRQ 83 ! 335: # define OMAP_INT_243X_HS_USB_MC 92 ! 336: # define OMAP_INT_243X_HS_USB_DMA 93 ! 337: # define OMAP_INT_243X_CARKIT 94 ! 338: ! 339: enum omap_dma_model { ! 340: omap_dma_3_1 = 0, ! 341: omap_dma_3_2 ! 342: }; ! 343: ! 344: struct omap_dma_s; ! 345: struct omap_dma_s *omap_dma_init(target_phys_addr_t base, qemu_irq *irqs, ! 346: qemu_irq lcd_irq, struct omap_mpu_state_s *mpu, omap_clk clk, ! 347: enum omap_dma_model model); ! 348: ! 349: enum omap_dma_port { ! 350: emiff = 0, ! 351: emifs, ! 352: imif, /* omap16xx: ocp_t1 */ ! 353: tipb, ! 354: local, /* omap16xx: ocp_t2 */ ! 355: tipb_mpui, ! 356: omap_dma_port_last, ! 357: }; ! 358: ! 359: typedef enum { ! 360: constant = 0, ! 361: post_incremented, ! 362: single_index, ! 363: double_index, ! 364: } omap_dma_addressing_t; ! 365: ! 366: struct omap_dma_lcd_channel_s { ! 367: enum omap_dma_port src; ! 368: target_phys_addr_t src_f1_top; ! 369: target_phys_addr_t src_f1_bottom; ! 370: target_phys_addr_t src_f2_top; ! 371: target_phys_addr_t src_f2_bottom; ! 372: ! 373: /* Used in OMAP DMA 3.2 gigacell */ ! 374: unsigned char brust_f1; ! 375: unsigned char pack_f1; ! 376: unsigned char data_type_f1; ! 377: unsigned char brust_f2; ! 378: unsigned char pack_f2; ! 379: unsigned char data_type_f2; ! 380: unsigned char end_prog; ! 381: unsigned char repeat; ! 382: unsigned char auto_init; ! 383: unsigned char priority; ! 384: unsigned char fs; ! 385: unsigned char running; ! 386: unsigned char bs; ! 387: unsigned char omap_3_1_compatible_disable; ! 388: unsigned char dst; ! 389: unsigned char lch_type; ! 390: int16_t element_index_f1; ! 391: int16_t element_index_f2; ! 392: int32_t frame_index_f1; ! 393: int32_t frame_index_f2; ! 394: uint16_t elements_f1; ! 395: uint16_t frames_f1; ! 396: uint16_t elements_f2; ! 397: uint16_t frames_f2; ! 398: omap_dma_addressing_t mode_f1; ! 399: omap_dma_addressing_t mode_f2; ! 400: ! 401: /* Destination port is fixed. */ ! 402: int interrupts; ! 403: int condition; ! 404: int dual; ! 405: ! 406: int current_frame; ! 407: ram_addr_t phys_framebuffer[2]; ! 408: qemu_irq irq; ! 409: struct omap_mpu_state_s *mpu; ! 410: }; ! 411: ! 412: /* ! 413: * DMA request numbers for OMAP1 ! 414: * See /usr/include/asm-arm/arch-omap/dma.h in Linux. ! 415: */ ! 416: # define OMAP_DMA_NO_DEVICE 0 ! 417: # define OMAP_DMA_MCSI1_TX 1 ! 418: # define OMAP_DMA_MCSI1_RX 2 ! 419: # define OMAP_DMA_I2C_RX 3 ! 420: # define OMAP_DMA_I2C_TX 4 ! 421: # define OMAP_DMA_EXT_NDMA_REQ0 5 ! 422: # define OMAP_DMA_EXT_NDMA_REQ1 6 ! 423: # define OMAP_DMA_UWIRE_TX 7 ! 424: # define OMAP_DMA_MCBSP1_TX 8 ! 425: # define OMAP_DMA_MCBSP1_RX 9 ! 426: # define OMAP_DMA_MCBSP3_TX 10 ! 427: # define OMAP_DMA_MCBSP3_RX 11 ! 428: # define OMAP_DMA_UART1_TX 12 ! 429: # define OMAP_DMA_UART1_RX 13 ! 430: # define OMAP_DMA_UART2_TX 14 ! 431: # define OMAP_DMA_UART2_RX 15 ! 432: # define OMAP_DMA_MCBSP2_TX 16 ! 433: # define OMAP_DMA_MCBSP2_RX 17 ! 434: # define OMAP_DMA_UART3_TX 18 ! 435: # define OMAP_DMA_UART3_RX 19 ! 436: # define OMAP_DMA_CAMERA_IF_RX 20 ! 437: # define OMAP_DMA_MMC_TX 21 ! 438: # define OMAP_DMA_MMC_RX 22 ! 439: # define OMAP_DMA_NAND 23 /* Not in OMAP310 */ ! 440: # define OMAP_DMA_IRQ_LCD_LINE 24 /* Not in OMAP310 */ ! 441: # define OMAP_DMA_MEMORY_STICK 25 /* Not in OMAP310 */ ! 442: # define OMAP_DMA_USB_W2FC_RX0 26 ! 443: # define OMAP_DMA_USB_W2FC_RX1 27 ! 444: # define OMAP_DMA_USB_W2FC_RX2 28 ! 445: # define OMAP_DMA_USB_W2FC_TX0 29 ! 446: # define OMAP_DMA_USB_W2FC_TX1 30 ! 447: # define OMAP_DMA_USB_W2FC_TX2 31 ! 448: ! 449: /* These are only for 1610 */ ! 450: # define OMAP_DMA_CRYPTO_DES_IN 32 ! 451: # define OMAP_DMA_SPI_TX 33 ! 452: # define OMAP_DMA_SPI_RX 34 ! 453: # define OMAP_DMA_CRYPTO_HASH 35 ! 454: # define OMAP_DMA_CCP_ATTN 36 ! 455: # define OMAP_DMA_CCP_FIFO_NOT_EMPTY 37 ! 456: # define OMAP_DMA_CMT_APE_TX_CHAN_0 38 ! 457: # define OMAP_DMA_CMT_APE_RV_CHAN_0 39 ! 458: # define OMAP_DMA_CMT_APE_TX_CHAN_1 40 ! 459: # define OMAP_DMA_CMT_APE_RV_CHAN_1 41 ! 460: # define OMAP_DMA_CMT_APE_TX_CHAN_2 42 ! 461: # define OMAP_DMA_CMT_APE_RV_CHAN_2 43 ! 462: # define OMAP_DMA_CMT_APE_TX_CHAN_3 44 ! 463: # define OMAP_DMA_CMT_APE_RV_CHAN_3 45 ! 464: # define OMAP_DMA_CMT_APE_TX_CHAN_4 46 ! 465: # define OMAP_DMA_CMT_APE_RV_CHAN_4 47 ! 466: # define OMAP_DMA_CMT_APE_TX_CHAN_5 48 ! 467: # define OMAP_DMA_CMT_APE_RV_CHAN_5 49 ! 468: # define OMAP_DMA_CMT_APE_TX_CHAN_6 50 ! 469: # define OMAP_DMA_CMT_APE_RV_CHAN_6 51 ! 470: # define OMAP_DMA_CMT_APE_TX_CHAN_7 52 ! 471: # define OMAP_DMA_CMT_APE_RV_CHAN_7 53 ! 472: # define OMAP_DMA_MMC2_TX 54 ! 473: # define OMAP_DMA_MMC2_RX 55 ! 474: # define OMAP_DMA_CRYPTO_DES_OUT 56 ! 475: ! 476: struct omap_mpu_timer_s; ! 477: struct omap_mpu_timer_s *omap_mpu_timer_init(target_phys_addr_t base, ! 478: qemu_irq irq, omap_clk clk); ! 479: ! 480: struct omap_watchdog_timer_s; ! 481: struct omap_watchdog_timer_s *omap_wd_timer_init(target_phys_addr_t base, ! 482: qemu_irq irq, omap_clk clk); ! 483: ! 484: struct omap_32khz_timer_s; ! 485: struct omap_32khz_timer_s *omap_os_timer_init(target_phys_addr_t base, ! 486: qemu_irq irq, omap_clk clk); ! 487: ! 488: struct omap_tipb_bridge_s; ! 489: struct omap_tipb_bridge_s *omap_tipb_bridge_init(target_phys_addr_t base, ! 490: qemu_irq abort_irq, omap_clk clk); ! 491: ! 492: struct omap_uart_s; ! 493: struct omap_uart_s *omap_uart_init(target_phys_addr_t base, ! 494: qemu_irq irq, omap_clk clk, CharDriverState *chr); ! 495: ! 496: struct omap_mpuio_s; ! 497: struct omap_mpuio_s *omap_mpuio_init(target_phys_addr_t base, ! 498: qemu_irq kbd_int, qemu_irq gpio_int, qemu_irq wakeup, ! 499: omap_clk clk); ! 500: qemu_irq *omap_mpuio_in_get(struct omap_mpuio_s *s); ! 501: void omap_mpuio_out_set(struct omap_mpuio_s *s, int line, qemu_irq handler); ! 502: void omap_mpuio_key(struct omap_mpuio_s *s, int row, int col, int down); ! 503: ! 504: struct omap_gpio_s; ! 505: struct omap_gpio_s *omap_gpio_init(target_phys_addr_t base, ! 506: qemu_irq irq, omap_clk clk); ! 507: qemu_irq *omap_gpio_in_get(struct omap_gpio_s *s); ! 508: void omap_gpio_out_set(struct omap_gpio_s *s, int line, qemu_irq handler); ! 509: ! 510: struct uwire_slave_s { ! 511: uint16_t (*receive)(void *opaque); ! 512: void (*send)(void *opaque, uint16_t data); ! 513: void *opaque; ! 514: }; ! 515: struct omap_uwire_s; ! 516: struct omap_uwire_s *omap_uwire_init(target_phys_addr_t base, ! 517: qemu_irq *irq, qemu_irq dma, omap_clk clk); ! 518: void omap_uwire_attach(struct omap_uwire_s *s, ! 519: struct uwire_slave_s *slave, int chipselect); ! 520: ! 521: struct omap_rtc_s; ! 522: struct omap_rtc_s *omap_rtc_init(target_phys_addr_t base, ! 523: qemu_irq *irq, omap_clk clk); ! 524: ! 525: struct i2s_codec_s { ! 526: void *opaque; ! 527: ! 528: /* The CPU can call this if it is generating the clock signal on the ! 529: * i2s port. The CODEC can ignore it if it is set up as a clock ! 530: * master and generates its own clock. */ ! 531: void (*set_rate)(void *opaque, int in, int out); ! 532: ! 533: void (*tx_swallow)(void *opaque); ! 534: qemu_irq rx_swallow; ! 535: qemu_irq tx_start; ! 536: ! 537: int tx_rate; ! 538: int cts; ! 539: int rx_rate; ! 540: int rts; ! 541: ! 542: struct i2s_fifo_s { ! 543: uint8_t *fifo; ! 544: int len; ! 545: int start; ! 546: int size; ! 547: } in, out; ! 548: }; ! 549: struct omap_mcbsp_s; ! 550: struct omap_mcbsp_s *omap_mcbsp_init(target_phys_addr_t base, ! 551: qemu_irq *irq, qemu_irq *dma, omap_clk clk); ! 552: void omap_mcbsp_i2s_attach(struct omap_mcbsp_s *s, struct i2s_codec_s *slave); ! 553: ! 554: struct omap_lpg_s; ! 555: struct omap_lpg_s *omap_lpg_init(target_phys_addr_t base, omap_clk clk); ! 556: ! 557: /* omap_lcdc.c */ ! 558: struct omap_lcd_panel_s; ! 559: void omap_lcdc_reset(struct omap_lcd_panel_s *s); ! 560: struct omap_lcd_panel_s *omap_lcdc_init(target_phys_addr_t base, qemu_irq irq, ! 561: struct omap_dma_lcd_channel_s *dma, DisplayState *ds, ! 562: ram_addr_t imif_base, ram_addr_t emiff_base, omap_clk clk); ! 563: ! 564: /* omap_mmc.c */ ! 565: struct omap_mmc_s; ! 566: struct omap_mmc_s *omap_mmc_init(target_phys_addr_t base, ! 567: BlockDriverState *bd, ! 568: qemu_irq irq, qemu_irq dma[], omap_clk clk); ! 569: void omap_mmc_reset(struct omap_mmc_s *s); ! 570: void omap_mmc_handlers(struct omap_mmc_s *s, qemu_irq ro, qemu_irq cover); ! 571: ! 572: /* omap_i2c.c */ ! 573: struct omap_i2c_s; ! 574: struct omap_i2c_s *omap_i2c_init(target_phys_addr_t base, ! 575: qemu_irq irq, qemu_irq *dma, omap_clk clk); ! 576: void omap_i2c_reset(struct omap_i2c_s *s); ! 577: i2c_bus *omap_i2c_bus(struct omap_i2c_s *s); ! 578: ! 579: # define cpu_is_omap310(cpu) (cpu->mpu_model == omap310) ! 580: # define cpu_is_omap1510(cpu) (cpu->mpu_model == omap1510) ! 581: # define cpu_is_omap15xx(cpu) \ ! 582: (cpu_is_omap310(cpu) || cpu_is_omap1510(cpu)) ! 583: # define cpu_class_omap1(cpu) 1 ! 584: ! 585: struct omap_mpu_state_s { ! 586: enum omap1_mpu_model { ! 587: omap310, ! 588: omap1510, ! 589: } mpu_model; ! 590: ! 591: CPUState *env; ! 592: ! 593: qemu_irq *irq[2]; ! 594: qemu_irq *drq; ! 595: ! 596: qemu_irq wakeup; ! 597: ! 598: struct omap_dma_port_if_s { ! 599: uint32_t (*read[3])(struct omap_mpu_state_s *s, ! 600: target_phys_addr_t offset); ! 601: void (*write[3])(struct omap_mpu_state_s *s, ! 602: target_phys_addr_t offset, uint32_t value); ! 603: int (*addr_valid)(struct omap_mpu_state_s *s, ! 604: target_phys_addr_t addr); ! 605: } port[omap_dma_port_last]; ! 606: ! 607: unsigned long sdram_size; ! 608: unsigned long sram_size; ! 609: ! 610: /* MPUI-TIPB peripherals */ ! 611: struct omap_uart_s *uart[3]; ! 612: ! 613: struct omap_gpio_s *gpio; ! 614: ! 615: struct omap_mcbsp_s *mcbsp1; ! 616: struct omap_mcbsp_s *mcbsp3; ! 617: ! 618: /* MPU public TIPB peripherals */ ! 619: struct omap_32khz_timer_s *os_timer; ! 620: ! 621: struct omap_mmc_s *mmc; ! 622: ! 623: struct omap_mpuio_s *mpuio; ! 624: ! 625: struct omap_uwire_s *microwire; ! 626: ! 627: struct { ! 628: uint8_t output; ! 629: uint8_t level; ! 630: uint8_t enable; ! 631: int clk; ! 632: } pwl; ! 633: ! 634: struct { ! 635: uint8_t frc; ! 636: uint8_t vrc; ! 637: uint8_t gcr; ! 638: omap_clk clk; ! 639: } pwt; ! 640: ! 641: struct omap_i2c_s *i2c; ! 642: ! 643: struct omap_rtc_s *rtc; ! 644: ! 645: struct omap_mcbsp_s *mcbsp2; ! 646: ! 647: struct omap_lpg_s *led[2]; ! 648: ! 649: /* MPU private TIPB peripherals */ ! 650: struct omap_intr_handler_s *ih[2]; ! 651: ! 652: struct omap_dma_s *dma; ! 653: ! 654: struct omap_mpu_timer_s *timer[3]; ! 655: struct omap_watchdog_timer_s *wdt; ! 656: ! 657: struct omap_lcd_panel_s *lcd; ! 658: ! 659: target_phys_addr_t ulpd_pm_base; ! 660: uint32_t ulpd_pm_regs[21]; ! 661: int64_t ulpd_gauge_start; ! 662: ! 663: target_phys_addr_t pin_cfg_base; ! 664: uint32_t func_mux_ctrl[14]; ! 665: uint32_t comp_mode_ctrl[1]; ! 666: uint32_t pull_dwn_ctrl[4]; ! 667: uint32_t gate_inh_ctrl[1]; ! 668: uint32_t voltage_ctrl[1]; ! 669: uint32_t test_dbg_ctrl[1]; ! 670: uint32_t mod_conf_ctrl[1]; ! 671: int compat1509; ! 672: ! 673: uint32_t mpui_ctrl; ! 674: target_phys_addr_t mpui_base; ! 675: ! 676: struct omap_tipb_bridge_s *private_tipb; ! 677: struct omap_tipb_bridge_s *public_tipb; ! 678: ! 679: target_phys_addr_t tcmi_base; ! 680: uint32_t tcmi_regs[17]; ! 681: ! 682: struct dpll_ctl_s { ! 683: target_phys_addr_t base; ! 684: uint16_t mode; ! 685: omap_clk dpll; ! 686: } dpll[3]; ! 687: ! 688: omap_clk clks; ! 689: struct { ! 690: target_phys_addr_t mpu_base; ! 691: target_phys_addr_t dsp_base; ! 692: ! 693: int cold_start; ! 694: int clocking_scheme; ! 695: uint16_t arm_ckctl; ! 696: uint16_t arm_idlect1; ! 697: uint16_t arm_idlect2; ! 698: uint16_t arm_ewupct; ! 699: uint16_t arm_rstct1; ! 700: uint16_t arm_rstct2; ! 701: uint16_t arm_ckout1; ! 702: int dpll1_mode; ! 703: uint16_t dsp_idlect1; ! 704: uint16_t dsp_idlect2; ! 705: uint16_t dsp_rstct2; ! 706: } clkm; ! 707: } *omap310_mpu_init(unsigned long sdram_size, ! 708: DisplayState *ds, const char *core); ! 709: ! 710: # if TARGET_PHYS_ADDR_BITS == 32 ! 711: # define OMAP_FMT_plx "%#08x" ! 712: # elif TARGET_PHYS_ADDR_BITS == 64 ! 713: # define OMAP_FMT_plx "%#08" PRIx64 ! 714: # else ! 715: # error TARGET_PHYS_ADDR_BITS undefined ! 716: # endif ! 717: ! 718: uint32_t omap_badwidth_read8(void *opaque, target_phys_addr_t addr); ! 719: void omap_badwidth_write8(void *opaque, target_phys_addr_t addr, ! 720: uint32_t value); ! 721: uint32_t omap_badwidth_read16(void *opaque, target_phys_addr_t addr); ! 722: void omap_badwidth_write16(void *opaque, target_phys_addr_t addr, ! 723: uint32_t value); ! 724: uint32_t omap_badwidth_read32(void *opaque, target_phys_addr_t addr); ! 725: void omap_badwidth_write32(void *opaque, target_phys_addr_t addr, ! 726: uint32_t value); ! 727: ! 728: # define OMAP_BAD_REG(paddr) \ ! 729: printf("%s: Bad register " OMAP_FMT_plx "\n", __FUNCTION__, paddr) ! 730: # define OMAP_RO_REG(paddr) \ ! 731: printf("%s: Read-only register " OMAP_FMT_plx "\n", \ ! 732: __FUNCTION__, paddr) ! 733: ! 734: # define TCMI_VERBOSE 1 ! 735: //# define MEM_VERBOSE 1 ! 736: ! 737: # ifdef TCMI_VERBOSE ! 738: # define OMAP_8B_REG(paddr) \ ! 739: printf("%s: 8-bit register " OMAP_FMT_plx "\n", \ ! 740: __FUNCTION__, paddr) ! 741: # define OMAP_16B_REG(paddr) \ ! 742: printf("%s: 16-bit register " OMAP_FMT_plx "\n", \ ! 743: __FUNCTION__, paddr) ! 744: # define OMAP_32B_REG(paddr) \ ! 745: printf("%s: 32-bit register " OMAP_FMT_plx "\n", \ ! 746: __FUNCTION__, paddr) ! 747: # else ! 748: # define OMAP_8B_REG(paddr) ! 749: # define OMAP_16B_REG(paddr) ! 750: # define OMAP_32B_REG(paddr) ! 751: # endif ! 752: ! 753: # define OMAP_MPUI_REG_MASK 0x000007ff ! 754: ! 755: # ifdef MEM_VERBOSE ! 756: struct io_fn { ! 757: CPUReadMemoryFunc **mem_read; ! 758: CPUWriteMemoryFunc **mem_write; ! 759: void *opaque; ! 760: int in; ! 761: }; ! 762: ! 763: static uint32_t io_readb(void *opaque, target_phys_addr_t addr) ! 764: { ! 765: struct io_fn *s = opaque; ! 766: uint32_t ret; ! 767: ! 768: s->in ++; ! 769: ret = s->mem_read[0](s->opaque, addr); ! 770: s->in --; ! 771: if (!s->in) ! 772: fprintf(stderr, "%08x ---> %02x\n", (uint32_t) addr, ret); ! 773: return ret; ! 774: } ! 775: static uint32_t io_readh(void *opaque, target_phys_addr_t addr) ! 776: { ! 777: struct io_fn *s = opaque; ! 778: uint32_t ret; ! 779: ! 780: s->in ++; ! 781: ret = s->mem_read[1](s->opaque, addr); ! 782: s->in --; ! 783: if (!s->in) ! 784: fprintf(stderr, "%08x ---> %04x\n", (uint32_t) addr, ret); ! 785: return ret; ! 786: } ! 787: static uint32_t io_readw(void *opaque, target_phys_addr_t addr) ! 788: { ! 789: struct io_fn *s = opaque; ! 790: uint32_t ret; ! 791: ! 792: s->in ++; ! 793: ret = s->mem_read[2](s->opaque, addr); ! 794: s->in --; ! 795: if (!s->in) ! 796: fprintf(stderr, "%08x ---> %08x\n", (uint32_t) addr, ret); ! 797: return ret; ! 798: } ! 799: static void io_writeb(void *opaque, target_phys_addr_t addr, uint32_t value) ! 800: { ! 801: struct io_fn *s = opaque; ! 802: ! 803: if (!s->in) ! 804: fprintf(stderr, "%08x <--- %02x\n", (uint32_t) addr, value); ! 805: s->in ++; ! 806: s->mem_write[0](s->opaque, addr, value); ! 807: s->in --; ! 808: } ! 809: static void io_writeh(void *opaque, target_phys_addr_t addr, uint32_t value) ! 810: { ! 811: struct io_fn *s = opaque; ! 812: ! 813: if (!s->in) ! 814: fprintf(stderr, "%08x <--- %04x\n", (uint32_t) addr, value); ! 815: s->in ++; ! 816: s->mem_write[1](s->opaque, addr, value); ! 817: s->in --; ! 818: } ! 819: static void io_writew(void *opaque, target_phys_addr_t addr, uint32_t value) ! 820: { ! 821: struct io_fn *s = opaque; ! 822: ! 823: if (!s->in) ! 824: fprintf(stderr, "%08x <--- %08x\n", (uint32_t) addr, value); ! 825: s->in ++; ! 826: s->mem_write[2](s->opaque, addr, value); ! 827: s->in --; ! 828: } ! 829: ! 830: static CPUReadMemoryFunc *io_readfn[] = { io_readb, io_readh, io_readw, }; ! 831: static CPUWriteMemoryFunc *io_writefn[] = { io_writeb, io_writeh, io_writew, }; ! 832: ! 833: inline static int debug_register_io_memory(int io_index, ! 834: CPUReadMemoryFunc **mem_read, CPUWriteMemoryFunc **mem_write, ! 835: void *opaque) ! 836: { ! 837: struct io_fn *s = qemu_malloc(sizeof(struct io_fn)); ! 838: ! 839: s->mem_read = mem_read; ! 840: s->mem_write = mem_write; ! 841: s->opaque = opaque; ! 842: s->in = 0; ! 843: return cpu_register_io_memory(io_index, io_readfn, io_writefn, s); ! 844: } ! 845: # define cpu_register_io_memory debug_register_io_memory ! 846: # endif ! 847: ! 848: /* Not really omap specific, but is the only thing that uses the ! 849: uwire interface. */ ! 850: /* tsc210x.c */ ! 851: struct uwire_slave_s *tsc2102_init(qemu_irq pint, AudioState *audio); ! 852: struct i2s_codec_s *tsc210x_codec(struct uwire_slave_s *chip); ! 853: ! 854: #endif /* hw_omap_h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.