1 // Copyright 2017 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 // Display Related Registers 8 #define S912_PRESET_BASE 0xC1104000 9 #define S912_PRESET_LENGTH 0x1000 10 #define S912_CBUS_REG_BASE 0xC8834000 11 #define S912_CBUS_REG_LENGTH 0x1000 12 #define S912_DMC_REG_BASE 0xC8838000 13 #define S912_DMC_REG_LENGTH 0x1000 14 #define S912_HDMITX_BASE 0xC883A000 15 #define S912_HDMITX_LENGTH 0x2000 16 #define S912_HIU_BASE 0xC883C000 17 #define S912_HIU_LENGTH 0x2000 18 #define S912_MALI_BASE 0xD00C0000 19 #define S912_MALI_LENGTH 0x40000 20 #define S912_VPU_BASE 0xD0100000 21 #define S912_VPU_LENGTH 0x40000 22 #define S912_HDMITX_SEC_BASE 0xDA83A000 23 #define S912_HDMITX_SEC_LENGTH 0x2000 24 25 #define S912_AOBUS_BASE 0xc8100000 26 #define S912_AOBUS_LENGTH 0x100000 27 28 #define S912_GPIO_BASE 0xc8834400 29 #define S912_GPIO_LENGTH 0x1C00 30 #define S912_GPIO_AO_BASE 0xc8100000 31 #define S912_GPIO_AO_LENGTH 0x1000 32 #define S912_GPIO_INTERRUPT_BASE 0xC1100000 33 #define S912_GPIO_INTERRUPT_LENGTH 0x10000 34 35 #define S912_I2C_A_BASE 0xc1108500 36 #define S912_I2C_A_LENGTH 0x20 37 #define S912_I2C_B_BASE 0xc11087c0 38 #define S912_I2C_B_LENGTH 0x20 39 #define S912_I2C_C_BASE 0xc11087e0 40 #define S912_I2C_C_LENGTH 0x20 41 #define S912_I2C_D_BASE 0xc1108d20 42 #define S912_I2C_D_LENGTH 0x20 43 44 #define S912_USB0_BASE 0xc9000000 45 #define S912_USB0_LENGTH 0x100000 46 #define S912_USB1_BASE 0xc9100000 47 #define S912_USB1_LENGTH 0x100000 48 49 #define S912_USB_PHY_BASE 0xd0078000 50 #define S912_USB_PHY_LENGTH 0x1000 51 52 #define S912_UART_A_BASE 0xc11084c0 53 #define S912_UART_A_LENGTH 0x18 54 #define S912_UART_AO_B_BASE 0xc81004e0 55 #define S912_UART_AO_B_LENGTH 0x18 56 57 #define S912_DOS_BASE 0xc8820000 58 #define S912_DOS_LENGTH 0x10000 59 60 #define S912_HIU_MAILBOX_BASE 0xc883C400 61 #define S912_HIU_MAILBOX_LENGTH 0x1000 62 63 #define S912_MAILBOX_PAYLOAD_BASE 0xc8013000 64 #define S912_MAILBOX_PAYLOAD_LENGTH 0x1000 65 66 #define S912_FULL_CBUS_BASE 0xC1100000 67 #define S912_FULL_CBUS_LENGTH 0x100000 68 69 // IRQs 70 #define S912_VIU1_VSYNC_IRQ 35 71 #define S912_ETH_GMAC_IRQ 40 72 #define S912_M_I2C_0_IRQ 53 73 #define S912_DEMUX_IRQ 55 74 #define S912_UART_A_IRQ 58 75 #define S912_USBH_IRQ 62 76 #define S912_USBD_IRQ 63 77 #define S912_PARSER_IRQ 64 78 #define S912_M_I2C_3_IRQ 71 79 #define S912_DOS_MBOX_0_IRQ 75 80 #define S912_DOS_MBOX_1_IRQ 76 81 #define S912_DOS_MBOX_2_IRQ 77 82 #define S912_GPIO_IRQ_0 96 83 #define S912_GPIO_IRQ_1 97 84 #define S912_GPIO_IRQ_2 98 85 #define S912_GPIO_IRQ_3 99 86 #define S912_GPIO_IRQ_4 100 87 #define S912_GPIO_IRQ_5 101 88 #define S912_GPIO_IRQ_6 102 89 #define S912_GPIO_IRQ_7 103 90 #define S912_RDMA_DONE_IRQ 121 91 #define S912_MALI_IRQ_GP 192 92 #define S912_MALI_IRQ_GPMMU 193 93 #define S912_MALI_IRQ_PP 194 94 #define S912_UART_AO_B_IRQ 229 95 #define S912_AO_GPIO_IRQ_0 232 96 #define S912_AO_GPIO_IRQ_1 233 97 #define S912_MBOX_IRQ_RECEIV0 240 98 #define S912_MBOX_IRQ_RECEIV1 241 99 #define S912_MBOX_IRQ_RECEIV2 242 100 #define S912_MBOX_IRQ_SEND3 243 101 #define S912_MBOX_IRQ_SEND4 244 102 #define S912_MBOX_IRQ_SEND5 245 103 #define S912_M_I2C_1_IRQ 246 104 #define S912_M_I2C_2_IRQ 247 105 106 // DMC registers 107 #define DMC_REG_BASE 0xc8838000 108 109 #define PERIPHS_REG_BASE (0xc8834000) 110 #define PERIPHS_REG_SIZE (0x2000) 111 //Offsets of peripheral control registers 112 #define PER_ETH_REG0 (0x400 + (0x50 << 2)) 113 #define PER_ETH_REG1 (0x400 + (0x51 << 2)) 114 #define PER_ETH_REG2 (0x400 + (0x56 << 2)) 115 #define PER_ETH_REG3 (0x400 + (0x57 << 2)) 116 #define PER_ETH_REG4 (0x400 + (0x58 << 2)) 117 118 119 #define HHI_REG_BASE (0xc883c000) 120 #define HHI_REG_SIZE (0x2000) 121 //Offsets of HHI registers 122 #define HHI_SCR (0x0B << 2) 123 #define HHI_TIMEOUT_VALUE (0x0F << 2) 124 #define HHI_GP0_PLL_CNTL (0x10 << 2) 125 #define HHI_GP0_PLL_CNTL2 (0x11 << 2) 126 #define HHI_GP0_PLL_CNTL3 (0x12 << 2) 127 #define HHI_GP0_PLL_CNTL4 (0x13 << 2) 128 #define HHI_GP0_PLL_CNTL5 (0x14 << 2) 129 #define HHI_GP0_PLL_STS (0x15 << 2) 130 #define HHI_GP0_PLL_CNTL1 (0x16 << 2) 131 #define HHI_XTAL_DIVN_CNTL (0x2F << 2) 132 #define HHI_GCLK2_MPEG0 (0x30 << 2) 133 #define HHI_GCLK2_MPEG1 (0x31 << 2) 134 #define HHI_GCLK2_MPEG2 (0x32 << 2) 135 #define HHI_GCLK2_OTHER (0x34 << 2) 136 #define HHI_GCLK2_AO (0x35 << 2) 137 #define HHI_TIMER90K (0x3B << 2) 138 #define HHI_MEM_PD_REG0 (0x40 << 2) 139 #define HHI_VPU_MEM_PD_REG0 (0x41 << 2) 140 #define HHI_VPU_MEM_PD_REG1 (0x42 << 2) 141 #define HHI_VIID_CLK_DIV (0x4A << 2) 142 #define HHI_VIID_CLK_CNTL (0x4B << 2) 143 #define HHI_GCLK_MPEG0 (0x50 << 2) 144 #define HHI_GCLK_MPEG1 (0x51 << 2) 145 #define HHI_GCLK_MPEG2 (0x52 << 2) 146 #define HHI_GCLK_OTHER (0x54 << 2) 147 #define HHI_GCLK_AO (0x55 << 2) 148 #define HHI_SYS_CPU_CLK_CNTL1 (0x57 << 2) 149 #define HHI_SYS_CPU_RESET_CNTL (0x58 << 2) 150 #define HHI_VID_CLK_DIV (0x59 << 2) 151 #define HHI_MPEG_CLK_CNTL (0x5D << 2) 152 #define HHI_AUD_CLK_CNTL (0x5E << 2) 153 #define HHI_VID_CLK_CNTL (0x5F << 2) 154 #define HHI_AUD_CLK_CNTL2 (0x64 << 2) 155 #define HHI_VID_CLK_CNTL2 (0x65 << 2) 156 #define HHI_SYS_CPU_CLK_CNTL0 (0x67 << 2) 157 #define HHI_VID_PLL_CLK_DIV (0x68 << 2) 158 #define HHI_AUD_CLK_CNTL3 (0x69 << 2) 159 #define HHI_MALI_CLK_CNTL (0x6C << 2) 160 #define HHI_VPU_CLK_CNTL (0x6F << 2) 161 #define HHI_HDMI_CLK_CNTL (0x73 << 2) 162 #define HHI_VDEC_CLK_CNTL (0x78 << 2) 163 #define HHI_VDEC2_CLK_CNTL (0x79 << 2) 164 #define HHI_VDEC3_CLK_CNTL (0x7a << 2) 165 #define HHI_VDEC4_CLK_CNTL (0x7b << 2) 166 #define HHI_HDCP22_CLK_CNTL (0x7c << 2) 167 #define HHI_VAPBCLK_CNTL (0x7d << 2) 168 #define HHI_VPU_CLKB_CNTL (0x83 << 2) 169 #define HHI_USB_CLK_CNTL (0x88 << 2) 170 #define HHI_32K_CLK_CNTL (0x89 << 2) 171 #define HHI_GEN_CLK_CNTL (0x8A << 2) 172 #define HHI_PCM_CLK_CNTL (0x96 << 2) 173 #define HHI_NAND_CLK_CNTL (0x97 << 2) 174 #define HHI_SD_EMMC_CLK_CNTL (0x99 << 2) 175 #define HHI_MPLL_CNTL (0xA0 << 2) 176 #define HHI_MPLL_CNTL2 (0xA1 << 2) 177 #define HHI_MPLL_CNTL3 (0xA2 << 2) 178 #define HHI_MPLL_CNTL4 (0xA3 << 2) 179 #define HHI_MPLL_CNTL5 (0xA4 << 2) 180 #define HHI_MPLL_CNTL6 (0xA5 << 2) 181 #define HHI_MPLL_CNTL7 (0xA6 << 2) 182 #define HHI_MPLL_CNTL8 (0xA7 << 2) 183 #define HHI_MPLL_CNTL9 (0xA8 << 2) 184 #define HHI_MPLL_CNTL10 (0xA9 << 2) 185 #define HHI_MPLL3_CNTL0 (0xB8 << 2) 186 #define HHI_MPLL3_CNTL1 (0xB9 << 2) 187 #define HHI_VDAC_CNTL0 (0xBD << 2) 188 #define HHI_VDAC_CNTL1 (0xBE << 2) 189 #define HHI_SYS_PLL_CNTL1 (0xBF << 2) 190 #define HHI_SYS_PLL_CNTL (0xC0 << 2) 191 #define HHI_SYS_PLL_CNTL2 (0xC1 << 2) 192 #define HHI_SYS_PLL_CNTL3 (0xC2 << 2) 193 #define HHI_SYS_PLL_CNTL4 (0xC3 << 2) 194 #define HHI_SYS_PLL_CNTL5 (0xC4 << 2) 195 #define HHI_SYS_PLL_STS (0xC5 << 2) 196 #define HHI_DPLL_TOP_I (0xC6 << 2) 197 #define HHI_DPLL_TOP2_I (0xC7 << 2) 198 #define HHI_HDMI_PLL_CNTL (0xC8 << 2) 199 #define HHI_HDMI_PLL_CNTL1 (0xC9 << 2) 200 #define HHI_HDMI_PLL_CNTL2 (0xCA << 2) 201 #define HHI_HDMI_PLL_CNTL3 (0xCB << 2) 202 #define HHI_HDMI_PLL_CNTL4 (0xCC << 2) 203 #define HHI_HDMI_PLL_CNTL5 (0xCD << 2) 204 #define HHI_HDMI_PLL_STS (0xCE << 2) 205 #define HHI_HDMI_PHY_CNTL0 (0xE8 << 2) 206 #define HHI_HDMI_PHY_CNTL1 (0xE9 << 2) 207 #define HHI_HDMI_PHY_CNTL2 (0xEA << 2) 208 #define HHI_HDMI_PHY_CNTL3 (0xEB << 2) 209 #define HHI_HDMI_PHY_CNTL4 (0xEC << 2) 210 #define HHI_HDMI_PHY_STATUS (0xED << 2) 211 #define HHI_VID_LOCK_CLK_CNTL (0xF2 << 2) 212 #define HHI_BT656_CLK_CNTL (0xF5 << 2) 213 #define HHI_SAR_CLK_CNTL (0xF6 << 2) 214 215 #define ETH_MAC_REG_BASE (0xc9410000) 216 #define ETH_MAC_REG_SIZE (0x00010000) 217 218 #define DMC_CAV_LUT_DATAL (0x12 << 2) 219 #define DMC_CAV_LUT_DATAH (0x13 << 2) 220 #define DC_CAV_LUT_ADDR (0x14 << 2) 221 222 #define DC_CAV_LUT_ADDR_INDEX_MASK 0x7 223 #define DC_CAV_LUT_ADDR_RD_EN (1 << 8) 224 #define DC_CAV_LUT_ADDR_WR_EN (2 << 8) 225 // Alternate Functions for Ethernet 226 #define S912_ETH_MDIO S912_GPIOZ(0) 227 #define S912_ETH_MDIO_FN 1 228 #define S912_ETH_MDC S912_GPIOZ(1) 229 #define S912_ETH_MDC_FN 1 230 231 #define S912_ETH_RGMII_RX_CLK S912_GPIOZ(2) 232 #define S912_ETH_RGMII_RX_CLK_FN 1 233 #define S912_ETH_RX_DV S912_GPIOZ(3) 234 #define S912_ETH_RX_DV_FN 1 235 #define S912_ETH_RXD0 S912_GPIOZ(4) 236 #define S912_ETH_RXD0_FN 1 237 #define S912_ETH_RXD1 S912_GPIOZ(5) 238 #define S912_ETH_RXD1_FN 1 239 #define S912_ETH_RXD2 S912_GPIOZ(6) 240 #define S912_ETH_RXD2_FN 1 241 #define S912_ETH_RXD3 S912_GPIOZ(7) 242 #define S912_ETH_RXD3_FN 1 243 244 #define S912_ETH_RGMII_TX_CLK S912_GPIOZ(8) 245 #define S912_ETH_RGMII_TX_CLK_FN 1 246 #define S912_ETH_TX_EN S912_GPIOZ(9) 247 #define S912_ETH_TX_EN_FN 1 248 #define S912_ETH_TXD0 S912_GPIOZ(10) 249 #define S912_ETH_TXD0_FN 1 250 #define S912_ETH_TXD1 S912_GPIOZ(11) 251 #define S912_ETH_TXD1_FN 1 252 #define S912_ETH_TXD2 S912_GPIOZ(12) 253 #define S912_ETH_TXD2_FN 1 254 #define S912_ETH_TXD3 S912_GPIOZ(13) 255 #define S912_ETH_TXD3_FN 1 256 257 // Alternate Functions for I2C 258 #define S912_I2C_SDA_A S912_GPIODV(24) 259 #define S912_I2C_SDA_A_FN 2 260 #define S912_I2C_SCK_A S912_GPIODV(25) 261 #define S912_I2C_SCK_A_FN 2 262 263 #define S912_I2C_SDA_B S912_GPIODV(26) 264 #define S912_I2C_SDA_B_FN 2 265 #define S912_I2C_SCK_B S912_GPIODV(27) 266 #define S912_I2C_SCK_B_FN 2 267 268 #define S912_I2C_SDA_C S912_GPIODV(28) 269 #define S912_I2C_SDA_C_FN 2 270 #define S912_I2C_SCK_C S912_GPIODV(29) 271 #define S912_I2C_SCK_C_FN 2 272 273 #define S912_I2C_SDA_D S912_GPIOX(10) 274 #define S912_I2C_SDA_D_FN 3 275 #define S912_I2C_SCK_D S912_GPIOX(11) 276 #define S912_I2C_SCK_D_FN 3 277 278 #define S912_I2C_SDA_AO S912_GPIOAO(4) 279 #define S912_I2C_SDA_AO_FN 2 280 #define S912_I2C_SCK_AO S912_GPIOAO(5) 281 #define S912_I2C_SCK_AO_FN 2 282 283 // Alternate functions for UARTs 284 #define S912_UART_TX_A S912_GPIOX(12) 285 #define S912_UART_TX_A_FN 1 286 #define S912_UART_RX_A S912_GPIOX(13) 287 #define S912_UART_RX_A_FN 1 288 #define S912_UART_CTS_A S912_GPIOX(14) 289 #define S912_UART_CTS_A_FN 1 290 #define S912_UART_RTS_A S912_GPIOX(15) 291 #define S912_UART_RTS_A_FN 1 292 293 #define S912_UART_TX_B S912_GPIODV(24) 294 #define S912_UART_TX_B_FN 2 295 #define S912_UART_RX_B S912_GPIODV(25) 296 #define S912_UART_RX_B_FN 2 297 #define S912_UART_CTS_B S912_GPIODV(26) 298 #define S912_UART_CTS_B_FN 2 299 #define S912_UART_RTS_B S912_GPIODV(27) 300 #define S912_UART_RTS_B_FN 2 301 302 #define S912_UART_TX_C S912_GPIOX(8) 303 #define S912_UART_TX_C_FN 2 304 #define S912_UART_RX_C S912_GPIOX(9) 305 #define S912_UART_RX_C_FN 2 306 #define S912_UART_CTS_C S912_GPIOX(10) 307 #define S912_UART_CTS_C_FN 2 308 #define S912_UART_RTS_C S912_GPIOX(11) 309 #define S912_UART_RTS_C_FN 2 310 311 #define S912_UART_TX_AO_A S912_GPIOAO(0) 312 #define S912_UART_TX_AO_A_FN 1 313 #define S912_UART_RX_AO_A S912_GPIOAO(1) 314 #define S912_UART_RX_AO_A_FN 1 315 #define S912_UART_CTS_AO_A S912_GPIOAO(2) 316 #define S912_UART_CTS_AO_A_FN 1 317 #define S912_UART_RTS_AO_A S912_GPIOAO(3) 318 #define S912_UART_RTS_AO_A_FN 1 319 320 // CTS/RTS cannot be used for UART_AO_B without interfering with UART_AO_A 321 #define S912_UART_TX_AO_B S912_GPIOAO(4) 322 #define S912_UART_TX_AO_B_FN 1 323 #define S912_UART_RX_AO_B S912_GPIOAO(5) 324 #define S912_UART_RX_AO_B_FN 1 325 326 #define S912_PWM_BASE 0xc1100000 327 #define S912_AO_PWM_BASE 0xc8100400 328 329 // PWM register offsets 330 // These are relative to base address 0xc1100000 and in sizeof(uint32_t) 331 #define S912_PWM_PWM_A 0x2154 332 #define S912_PWM_PWM_B 0x2155 333 #define S912_PWM_MISC_REG_AB 0x2156 334 #define S912_DS_A_B 0x2157 335 #define S912_PWM_TIME_AB 0x2158 336 #define S912_PWM_A2 0x2159 337 #define S912_PWM_PWM_C 0x2194 338 #define S912_PWM_PWM_D 0x2195 339 #define S912_PWM_MISC_REG_CD 0x2196 340 #define S912_PWM_DELTA_SIGMA_CD 0x2197 341 #define S912_PWM_PWM_E 0x21b0 342 #define S912_PWM_PWM_F 0x21b1 343 #define S912_PWM_MISC_REG_EF 0x21b2 344 #define S912_PWM_DELTA_SIGMA_EF 0x21b3 345 #define S912_PWM_TIME_EF 0x21b4 346 #define S912_PWM_E2 0x21b5 347 348 // These are relative to base address 0xc8100400 and in sizeof(uint32_t) 349 #define S912_AO_PWM_PWM_A 0x54 350 #define S912_AO_PWM_PWM_B 0x55 351 #define S912_AO_PWM_MISC_REG_AB 0x56 352 #define S912_AO_PWM_DELTA_SIGMA_AB 0x57 353 354 // Alternate Functions for EMMC/NAND 355 #define S912_EMMC_NAND_D0 S912_GPIOBOOT(0) 356 #define S912_EMMC_NAND_D0_FN 1 357 #define S912_EMMC_NAND_D1 S912_GPIOBOOT(1) 358 #define S912_EMMC_NAND_D1_FN 1 359 #define S912_EMMC_NAND_D2 S912_GPIOBOOT(2) 360 #define S912_EMMC_NAND_D2_FN 1 361 #define S912_EMMC_NAND_D3 S912_GPIOBOOT(3) 362 #define S912_EMMC_NAND_D3_FN 1 363 #define S912_EMMC_NAND_D4 S912_GPIOBOOT(4) 364 #define S912_EMMC_NAND_D4_FN 1 365 #define S912_EMMC_NAND_D5 S912_GPIOBOOT(5) 366 #define S912_EMMC_NAND_D5_FN 1 367 #define S912_EMMC_NAND_D6 S912_GPIOBOOT(6) 368 #define S912_EMMC_NAND_D6_FN 1 369 #define S912_EMMC_NAND_D7 S912_GPIOBOOT(7) 370 #define S912_EMMC_NAND_D7_FN 1 371 #define S912_EMMC_CLK S912_GPIOBOOT(8) 372 #define S912_EMMC_CLK_FN 1 373 #define S912_EMMC_RST S912_GPIOBOOT(9) 374 #define S912_EMMC_RST_FN 1 375 #define S912_EMMC_CMD S912_GPIOBOOT(10) 376 #define S912_EMMC_CMD_FN 1 377 #define S912_EMMC_DS S912_GPIOBOOT(15) 378 #define S912_EMMC_DS_FN 1 379 380 // Reset register offsets 381 #define S912_RESET0_MASK 0x110 382 #define S912_RESET2_MASK 0x112 383 #define S912_RESET0_LEVEL 0x120 384 #define S912_RESET2_LEVEL 0x122 385 386 // Audio register blocks 387 #define S912_AUDIN_BASE ((uint32_t)0xC110A000) 388 #define S912_AUDIN_LEN ((uint32_t)0x1000) 389 #define S912_AUDOUT_BASE ((uint32_t)0xC1105400) 390 #define S912_AUDOUT_LEN ((uint32_t)0x400) 391 392 // Pin defs and alt functions for SPDIF in/out 393 #define S912_SPDIF_H4 S912_GPIOH(4) 394 #define S912_SPDIF_H4_OUT_FN (1u) 395 #define S912_SPDIF_H4_IN_FN (1u) 396 #define S912_SPDIF_AO6 S912_GPIOAO(6) 397 #define S912_SPDIF_AO6_OUT_FN (3u) 398 #define S912_SPDIF_AO9 S912_GPIOAO(9) 399 #define S912_SPDIF_AO9_OUT_FN (2u) 400 #define S912_SPDIF_Z14 S912_GPIOZ14(14) 401 #define S912_SPDIF_Z14_IN_FN (2u) 402