| /* |
| * (C) Copyright 2010 Quantenna Communications Inc. |
| * |
| * See file CREDITS for list of people who contributed to this |
| * project. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| */ |
| |
| /* |
| * Header file which describes Ruby platform. |
| * Has to be used by both kernel and bootloader. |
| */ |
| |
| #ifndef __RUBY_PLATFORM_H |
| #define __RUBY_PLATFORM_H |
| |
| #include "ruby_config.h" |
| |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* Common */ |
| /*****************************************************************************/ |
| #define RUBY_BIT(x) (1 << (x)) |
| /*****************************************************************************/ |
| /* DRAM registers */ |
| /*****************************************************************************/ |
| #define RUBY_DDR_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF6000000, 0xE40E0000) |
| #define RUBY_DDR_CONTROL (RUBY_DDR_BASE_ADDR + 0x0) |
| #define RUBY_DDR_CONTROL_POWERDOWN_EN RUBY_BIT(1) |
| #define RUBY_DDR_SETTLE_US (4) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* GPIO constants */ |
| /*****************************************************************************/ |
| #define RUBY_GPIO_MAX (32) |
| #define RUBY_GPIO_MODE1_MAX (11) |
| #define RUBY_GPIO_MODE2_MAX (22) |
| #define RUBY_GPIO_IRQ_MAX (16) |
| /*****************************************************************************/ |
| /* GPIO registers */ |
| /*****************************************************************************/ |
| #define RUBY_GPIO_REGS_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF1000000, 0xE4090000) |
| #define RUBY_GPIO_INPUT (RUBY_GPIO_REGS_ADDR + 0x00) |
| #define GPIO_INPUT RUBY_GPIO_INPUT |
| #define RUBY_GPIO_OMASK (RUBY_GPIO_REGS_ADDR + 0x04) |
| #define GPIO_OUTPUT_MASK RUBY_GPIO_OMASK |
| #define RUBY_GPIO_OUTPUT (RUBY_GPIO_REGS_ADDR + 0x08) |
| #define GPIO_OUTPUT RUBY_GPIO_OUTPUT |
| #define RUBY_GPIO_MODE1 (RUBY_GPIO_REGS_ADDR + 0x0c) |
| #define GPIO_MODE1 RUBY_GPIO_MODE1 |
| #define RUBY_GPIO_MODE2 (RUBY_GPIO_REGS_ADDR + 0x10) |
| #define GPIO_MODE2 RUBY_GPIO_MODE2 |
| #define RUBY_GPIO_AFSEL (RUBY_GPIO_REGS_ADDR + 0x14) |
| #define GPIO_ALTFN RUBY_GPIO_AFSEL |
| #define RUBY_GPIO_DEF (RUBY_GPIO_REGS_ADDR + 0x18) |
| #define RUBY_GPIO1_PWM0 (RUBY_GPIO_REGS_ADDR + 0x20) /* AFSEL: UART1 (input) */ |
| #define RUBY_GPIO9_PWM2 (RUBY_GPIO_REGS_ADDR + 0x28) /* AFSEL: UART1 (output) */ |
| /*****************************************************************************/ |
| /* GPIO pins */ |
| /*****************************************************************************/ |
| #define RUBY_GPIO_PIN0 (0) |
| #define RUBY_GPIO_PIN1 (1) |
| #define RUBY_GPIO_PIN2 (2) |
| #define RUBY_GPIO_PIN3 (3) |
| #define RUBY_GPIO_PIN4 (4) |
| #define RUBY_GPIO_PIN5 (5) |
| #define RUBY_GPIO_PIN6 (6) |
| #define RUBY_GPIO_PIN7 (7) |
| #define RUBY_GPIO_PIN8 (8) |
| #define RUBY_GPIO_PIN9 (9) |
| #define RUBY_GPIO_PIN10 (10) |
| #define RUBY_GPIO_PIN11 (11) |
| #define RUBY_GPIO_PIN12 (12) |
| #define RUBY_GPIO_PIN13 (13) |
| #define RUBY_GPIO_PIN14 (14) |
| #define RUBY_GPIO_PIN15 (15) |
| #define RUBY_GPIO_PIN16 (16) |
| |
| #define RUBY_GPIO_UART0_SI (0) |
| #define RUBY_GPIO_UART0_SO (8) |
| #define RUBY_GPIO_UART1_SI (1) |
| #define RUBY_GPIO_UART1_SO (9) |
| /* these are for spi1, bga has dedicated spi0 pins */ |
| #define RUBY_GPIO_SPI_MISO (2) |
| #define RUBY_GPIO_SPI_SCK (6) |
| #define RUBY_GPIO_SPI_MOSI (5) |
| #define RUBY_GPIO_SPI_nCS (4) |
| |
| #define RUBY_GPIO_LNA_TOGGLE (7) |
| |
| #define RUBY_GPIO_RTD (3) /* Reset to default */ |
| #define RUBY_GPIO_WPS (7) |
| #define RUBY_GPIO_I2C_SCL (10) |
| #define RUBY_GPIO_I2C_SDA (11) |
| #define RUBY_GPIO_WLAN_DISABLE (12) |
| #define RUBY_GPIO_LED1 (13) |
| #define RUBY_GPIO_RFIC_INTR (14) |
| #define RUBY_GPIO_RFIC_RESET (15) |
| #define RUBY_GPIO_LED2 (16) |
| |
| /*****************************************************************************/ |
| /* GPIO function constants */ |
| /*****************************************************************************/ |
| #define RUBY_GPIO_MODE_INPUT (0) |
| #define GPIO_MODE_INPUT RUBY_GPIO_MODE_INPUT |
| #define RUBY_GPIO_MODE_OUTPUT (1) |
| #define GPIO_MODE_OUTPUT RUBY_GPIO_MODE_OUTPUT |
| #define RUBY_GPIO_MODE_OPEN_SOURCE (2) |
| #define RUBY_GPIO_MODE_OPEN_DRAIN (3) |
| #define RUBY_GPIO_ALT_INPUT (4) |
| #define RUBY_GPIO_ALT_OUTPUT (5) |
| #define RUBY_GPIO_ALT_OPEN_SOURCE (6) |
| #define RUBY_GPIO_ALT_OPEN_DRAIN (7) |
| #define GPIO_PIN(x) (x) |
| #define GPIO_OUTPUT_LO (0) |
| #define GPIO_OUTPUT_HI (1) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* UART FIFO size */ |
| /*****************************************************************************/ |
| #define RUBY_UART_FIFO_SIZE (16) |
| /*****************************************************************************/ |
| /* UART register addresses */ |
| /*****************************************************************************/ |
| #define RUBY_UART0_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF0000000, 0xE4080000) |
| #define RUBY_UART0_RBR_THR_DLL (RUBY_UART0_BASE_ADDR + 0x00) |
| #define RUBY_UART0_DLH_IER (RUBY_UART0_BASE_ADDR + 0x04) |
| #define RUBY_UART0_IIR_FCR_LCR (RUBY_UART0_BASE_ADDR + 0x08) |
| #define RUBY_UART0_LCR (RUBY_UART0_BASE_ADDR + 0x0c) |
| #define RUBY_UART0_MCR (RUBY_UART0_BASE_ADDR + 0x10) |
| #define RUBY_UART0_LSR (RUBY_UART0_BASE_ADDR + 0x14) |
| #define RUBY_UART0_MSR (RUBY_UART0_BASE_ADDR + 0x18) |
| #define RUBY_UART0_SCR (RUBY_UART0_BASE_ADDR + 0x1c) |
| #define RUBY_UART0_LPDLL (RUBY_UART0_BASE_ADDR + 0x20) |
| #define RUBY_UART0_LPDLH (RUBY_UART0_BASE_ADDR + 0x24) |
| #define RUBY_UART0_SRBR (RUBY_UART0_BASE_ADDR + 0x30) |
| #define RUBY_UART0_STHR (RUBY_UART0_BASE_ADDR + 0x34) |
| #define RUBY_UART0_FAR (RUBY_UART0_BASE_ADDR + 0x70) |
| #define RUBY_UART0_TFR (RUBY_UART0_BASE_ADDR + 0x74) |
| #define RUBY_UART0_RFW (RUBY_UART0_BASE_ADDR + 0x78) |
| #define RUBY_UART0_USR (RUBY_UART0_BASE_ADDR + 0x7c) |
| #define RUBY_UART0_TFL (RUBY_UART0_BASE_ADDR + 0x80) |
| #define RUBY_UART0_RFL (RUBY_UART0_BASE_ADDR + 0x84) |
| #define RUBY_UART0_SRR (RUBY_UART0_BASE_ADDR + 0x88) |
| #define RUBY_UART0_SRTS (RUBY_UART0_BASE_ADDR + 0x8c) |
| #define RUBY_UART0_SBCR (RUBY_UART0_BASE_ADDR + 0x90) |
| #define RUBY_UART0_SDMAM (RUBY_UART0_BASE_ADDR + 0x94) |
| #define RUBY_UART0_SFE (RUBY_UART0_BASE_ADDR + 0x98) |
| #define RUBY_UART0_SRT (RUBY_UART0_BASE_ADDR + 0x9c) |
| #define RUBY_UART0_STET (RUBY_UART0_BASE_ADDR + 0xa0) |
| #define RUBY_UART0_HTX (RUBY_UART0_BASE_ADDR + 0xa4) |
| #define RUBY_UART0_DMASA (RUBY_UART0_BASE_ADDR + 0xa8) |
| #define RUBY_UART0_CPR (RUBY_UART0_BASE_ADDR + 0xf4) |
| #define RUBY_UART0_UCV (RUBY_UART0_BASE_ADDR + 0xf8) |
| #define RUBY_UART0_CTR (RUBY_UART0_BASE_ADDR + 0xfc) |
| |
| #define RUBY_UART1_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF5000000, 0xE40D0000) |
| #define RUBY_UART1_RBR_THR_DLL (RUBY_UART1_BASE_ADDR + 0x00) |
| #define RUBY_UART1_DLH_IER (RUBY_UART1_BASE_ADDR + 0x04) |
| #define RUBY_UART1_IIR_FCR_LCR (RUBY_UART1_BASE_ADDR + 0x08) |
| #define RUBY_UART1_LCR (RUBY_UART1_BASE_ADDR + 0x0c) |
| #define RUBY_UART1_MCR (RUBY_UART1_BASE_ADDR + 0x10) |
| #define RUBY_UART1_LSR (RUBY_UART1_BASE_ADDR + 0x14) |
| #define RUBY_UART1_MSR (RUBY_UART1_BASE_ADDR + 0x18) |
| #define RUBY_UART1_SCR (RUBY_UART1_BASE_ADDR + 0x1c) |
| #define RUBY_UART1_LPDLL (RUBY_UART1_BASE_ADDR + 0x20) |
| #define RUBY_UART1_LPDLH (RUBY_UART1_BASE_ADDR + 0x24) |
| #define RUBY_UART1_SRBR (RUBY_UART1_BASE_ADDR + 0x30) |
| #define RUBY_UART1_STHR (RUBY_UART1_BASE_ADDR + 0x34) |
| #define RUBY_UART1_FAR (RUBY_UART1_BASE_ADDR + 0x70) |
| #define RUBY_UART1_TFR (RUBY_UART1_BASE_ADDR + 0x74) |
| #define RUBY_UART1_RFW (RUBY_UART1_BASE_ADDR + 0x78) |
| #define RUBY_UART1_USR (RUBY_UART1_BASE_ADDR + 0x7c) |
| #define RUBY_UART1_TFL (RUBY_UART1_BASE_ADDR + 0x80) |
| #define RUBY_UART1_RFL (RUBY_UART1_BASE_ADDR + 0x84) |
| #define RUBY_UART1_SRR (RUBY_UART1_BASE_ADDR + 0x88) |
| #define RUBY_UART1_SRTS (RUBY_UART1_BASE_ADDR + 0x8c) |
| #define RUBY_UART1_SBCR (RUBY_UART1_BASE_ADDR + 0x90) |
| #define RUBY_UART1_SDMAM (RUBY_UART1_BASE_ADDR + 0x94) |
| #define RUBY_UART1_SFE (RUBY_UART1_BASE_ADDR + 0x98) |
| #define RUBY_UART1_SRT (RUBY_UART1_BASE_ADDR + 0x9c) |
| #define RUBY_UART1_STET (RUBY_UART1_BASE_ADDR + 0xa0) |
| #define RUBY_UART1_HTX (RUBY_UART1_BASE_ADDR + 0xa4) |
| #define RUBY_UART1_DMASA (RUBY_UART1_BASE_ADDR + 0xa8) |
| #define RUBY_UART1_CPR (RUBY_UART1_BASE_ADDR + 0xf4) |
| #define RUBY_UART1_UCV (RUBY_UART1_BASE_ADDR + 0xf8) |
| #define RUBY_UART1_CTR (RUBY_UART1_BASE_ADDR + 0xfc) |
| |
| /*****************************************************************************/ |
| /* UART Status Register - USR */ |
| /*****************************************************************************/ |
| #define RUBY_USR_TX_Fifo_Empty 0x04 |
| #define RUBY_USR_RX_Fifo_Full 0x10 |
| #define RUBY_USR_TX_Fifo_nFull 0x02 |
| #define RUBY_USR_RX_Fifo_nEmpty 0x08 |
| #define RUBY_USR_Busy 0x01 |
| /*****************************************************************************/ |
| /* Line Status Register - LSR */ |
| /*****************************************************************************/ |
| #define RUBY_LSR_TX_Empty 0x40 |
| #define RUBY_LSR_RX_Ready 0x01 |
| /*****************************************************************************/ |
| /* Line Control Register - LCR */ |
| /*****************************************************************************/ |
| #define RUBY_LCR_Data_Word_Length_5 0x0 |
| #define RUBY_LCR_Data_Word_Length_6 0x1 |
| #define RUBY_LCR_Data_Word_Length_7 0x2 |
| #define RUBY_LCR_Data_Word_Length_8 0x3 |
| #define RUBY_LCR_Stop_Bit_1 0x0 |
| #define RUBY_LCR_Stop_Bit_2 0x4 |
| #define RUBY_LCR_No_Parity 0x0 |
| #define RUBY_LCR_Odd_Parity 0x8 |
| #define RUBY_LCR_Even_Parity 0x18 |
| #define RUBY_LCR_High_Parity 0x28 |
| #define RUBY_LCR_Low_Parity 0x38 |
| #define RUBY_LCR_Break_Disable 0x0 |
| #define RUBY_LCR_Break_Enable 0x40 |
| #define RUBY_LCR_DLAB 0x80 |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* Timer constants */ |
| /*****************************************************************************/ |
| #define RUBY_TIMER_INT_MASK (RUBY_BIT(2)) |
| #define RUBY_TIMER_SINGLE (RUBY_BIT(1)) |
| #define RUBY_TIMER_ENABLE (RUBY_BIT(0)) |
| /*****************************************************************************/ |
| #define RUBY_CPU_TIMERS (2) |
| #define RUBY_NUM_TIMERS (4) |
| #define RUBY_TIMER_MUC_CCA (3) |
| #define RUBY_TIMER_FREQ 125000000 |
| |
| #define RUBY_TIMER_MUC_CCA_FREQ_SHIFT 2 /* shift from 1ms base */ |
| #define RUBY_TIMER_MUC_CCA_FREQ (1000 << RUBY_TIMER_MUC_CCA_FREQ_SHIFT) |
| #define RUBY_TIMER_MUC_CCA_LIMIT (RUBY_TIMER_FREQ / RUBY_TIMER_MUC_CCA_FREQ) |
| #define RUBY_TIMER_MUC_CCA_INTV (1000 >> RUBY_TIMER_MUC_CCA_FREQ_SHIFT) /* microseconds */ |
| #define RUBY_TIMER_MUC_CCA_CNT2MS(_v) ((_v) >> RUBY_TIMER_MUC_CCA_FREQ_SHIFT) |
| /*****************************************************************************/ |
| #define RUBY_TIMER_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF3000000, 0xE40B0000) |
| #define RUBY_TIMER_CHANNEL (0x14) |
| #define RUBY_TIMER_LOAD_COUNT(x) (RUBY_TIMER_BASE_ADDR + ((x)*RUBY_TIMER_CHANNEL) + 0) |
| #define RUBY_TIMER_VALUE(x) (RUBY_TIMER_BASE_ADDR + ((x)*RUBY_TIMER_CHANNEL) + 4) |
| #define RUBY_TIMER_CONTROL(x) (RUBY_TIMER_BASE_ADDR + ((x)*RUBY_TIMER_CHANNEL) + 8) |
| #define RUBY_TIMER_EOI(x) (RUBY_TIMER_BASE_ADDR + ((x)*RUBY_TIMER_CHANNEL) + 12) |
| #define RUBY_TIMER_INTSTAT(x) (RUBY_TIMER_BASE_ADDR + ((x)*RUBY_TIMER_CHANNEL) + 16) |
| /*****************************************************************************/ |
| #define RUBY_TIMER_GLOBAL_INT_STATUS (RUBY_TIMER_BASE_ADDR + 0xa0) |
| #define RUBY_TIMER_GLOBAL_EOI (RUBY_TIMER_BASE_ADDR + 0xa4) |
| #define RUBY_TIMER_GLOBAL_RAW_STATUS (RUBY_TIMER_BASE_ADDR + 0xa8) |
| #define RUBY_TIMER_GLOBAL_COMP_VER (RUBY_TIMER_BASE_ADDR + 0xac) |
| /*****************************************************************************/ |
| #define RUBY_TIMER_ORINT_EN(x) (1 << (18 + (x))) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* ENET registers */ |
| /*****************************************************************************/ |
| #define RUBY_ENET0_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xED000000, 0xE4070000) |
| #define RUBY_ENET1_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xE8000000, 0xE4040000) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* System controller registers */ |
| /*****************************************************************************/ |
| #define RUBY_SYS_CTL_BASE_ADDR_NOMAP 0xE0000000 |
| #define RUBY_SYS_CTL_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(RUBY_SYS_CTL_BASE_ADDR_NOMAP, 0xE4000000) |
| #define RUBY_SYS_CTL_CPU_VEC_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x00) |
| #define RUBY_SYS_CTL_CPU_VEC (RUBY_SYS_CTL_BASE_ADDR + 0x04) |
| #define RUBY_SYS_CTL_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x08) |
| #define RUBY_SYS_CTL_CTRL (RUBY_SYS_CTL_BASE_ADDR + 0x0c) |
| #define RUBY_SYS_CTL_RESET_CAUSE (RUBY_SYS_CTL_BASE_ADDR + 0x10) |
| #define RUBY_SYS_CTL_CSR (RUBY_SYS_CTL_BASE_ADDR + 0x14) |
| #define RUBY_SYS_CTL_DEBUG_SEL (RUBY_SYS_CTL_BASE_ADDR + 0x18) |
| #define RUBY_SYS_CTL_L2M_INT (RUBY_SYS_CTL_BASE_ADDR + 0x1C) |
| #define RUBY_SYS_CTL_L2M_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x20) |
| #define RUBY_SYS_CTL_L2D_INT (RUBY_SYS_CTL_BASE_ADDR + PLATFORM_REG_SWITCH(0x24, 0x34)) |
| #define RUBY_SYS_CTL_L2D_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + PLATFORM_REG_SWITCH(0x28, 0x38)) |
| #define RUBY_SYS_CTL_M2L_INT (RUBY_SYS_CTL_BASE_ADDR + 0x2C) |
| #define RUBY_SYS_CTL_M2L_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x30) |
| #define RUBY_SYS_CTL_M2D_INT (RUBY_SYS_CTL_BASE_ADDR + PLATFORM_REG_SWITCH(0x34, 0x24)) |
| #define RUBY_SYS_CTL_M2D_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + PLATFORM_REG_SWITCH(0x38, 0x28)) |
| #define RUBY_SYS_CTL_D2L_INT (RUBY_SYS_CTL_BASE_ADDR + 0x3C) |
| #define RUBY_SYS_CTL_D2L_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x40) |
| #define RUBY_SYS_CTL_D2M_INT (RUBY_SYS_CTL_BASE_ADDR + 0x44) |
| #define RUBY_SYS_CTL_D2M_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x48) |
| #define RUBY_SYS_CTL_LHOST_INT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x4C) |
| #define RUBY_SYS_CTL_MUC_INT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x50) |
| #define RUBY_SYS_CTL_DSP_INT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x54) |
| #define RUBY_SYS_CTL_LHOST_ORINT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x58) |
| #define RUBY_SYS_CTL_MUC_ORINT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x5C) |
| #define RUBY_SYS_CTL_DSP_ORINT_EN (RUBY_SYS_CTL_BASE_ADDR + 0x60) |
| #define RUBY_SYS_CTL_MUC_REMAP (RUBY_SYS_CTL_BASE_ADDR + 0x64) |
| #define RUBY_SYS_CTL_DSP_REMAP (RUBY_SYS_CTL_BASE_ADDR + 0x68) |
| #define RUBY_SYS_CTL_PCIE_CFG0 (RUBY_SYS_CTL_BASE_ADDR + 0x6C) |
| #define RUBY_SYS_CTL_PCIE_CFG1 (RUBY_SYS_CTL_BASE_ADDR + 0x70) |
| #define RUBY_SYS_CTL_PCIE_CFG2 (RUBY_SYS_CTL_BASE_ADDR + 0x74) |
| #define RUBY_SYS_CTL_PCIE_CFG3 (RUBY_SYS_CTL_BASE_ADDR + 0x78) |
| #define RUBY_SYS_CTL_PCIE_CFG4 (RUBY_SYS_CTL_BASE_ADDR + 0x7C) |
| #define RUBY_SYS_CTL_PLL0_CTRL (RUBY_SYS_CTL_BASE_ADDR + 0x80) |
| #define RUBY_SYS_CTL_PLL1_CTRL (RUBY_SYS_CTL_BASE_ADDR + 0x84) |
| #define RUBY_SYS_CTL_LHOST_ID (RUBY_SYS_CTL_BASE_ADDR + 0x88) |
| #define RUBY_SYS_CTL_PLL2_CTRL (RUBY_SYS_CTL_BASE_ADDR + 0x8C) |
| #define RUBY_SYS_CTL_MUC_ID (RUBY_SYS_CTL_BASE_ADDR + 0x90) |
| #define RUBY_SYS_CTL_L2M_SEM (RUBY_SYS_CTL_BASE_ADDR + 0x94) |
| #define RUBY_SYS_CTL_M2L_SEM (RUBY_SYS_CTL_BASE_ADDR + 0x98) |
| #define RUBY_SYS_CTL_L2D_SEM (RUBY_SYS_CTL_BASE_ADDR + 0x9C) |
| #define RUBY_SYS_CTL_D2L_SEM (RUBY_SYS_CTL_BASE_ADDR + 0xA0) |
| #define RUBY_SYS_CTL_M2D_SEM (RUBY_SYS_CTL_BASE_ADDR + 0xA4) |
| #define RUBY_SYS_CTL_D2M_SEM (RUBY_SYS_CTL_BASE_ADDR + 0xA8) |
| #define RUBY_SYS_CTL_INTR_INV0 (RUBY_SYS_CTL_BASE_ADDR + 0xAC) |
| #define RUBY_SYS_CTL_INTR_INV1 (RUBY_SYS_CTL_BASE_ADDR + 0xB0) |
| #define RUBY_SYS_CTL_GMII_CLKDLL (RUBY_SYS_CTL_BASE_ADDR + 0xB4) |
| #define RUBY_SYS_CTL_DEBUG_BUS (RUBY_SYS_CTL_BASE_ADDR + 0xB8) |
| #define RUBY_SYS_CTL_SPARE (RUBY_SYS_CTL_BASE_ADDR + 0xBC) |
| #define RUBY_SYS_CTL_PCIE_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0xC0) |
| #define RUBY_SYS_CTL_GPIO_IRQ_SEL (RUBY_SYS_CTL_BASE_ADDR + 0xc4) |
| #define RUBY_SYS_CTL_PCIE_SLV_REQ_MISC_INFO (RUBY_SYS_CTL_BASE_ADDR + 0xCC) |
| #define RUBY_SYS_CTL_DDR_CTRL (RUBY_SYS_CTL_BASE_ADDR + 0xE8) |
| #define RUBY_SYS_CTL_GPIO_INT_STATUS (RUBY_SYS_CTL_BASE_ADDR + 0x154) |
| #define RUBY_SYS_AHB_MON_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0x160) |
| #define RUBY_SYS_CTL_BOND_OPT (RUBY_SYS_CTL_BASE_ADDR + 0x16C) |
| |
| /*****************************************************************************/ |
| /* System controller constants */ |
| /*****************************************************************************/ |
| #define RUBY_SYS_CTL_REMAP(x) (((x) & 0x3) << 3) |
| #define RUBY_SYS_CTL_LINUX_MAP(x) (((x) & 0x1) << 31) |
| #define RUBY_SYS_CTL_SPICLK(x) (((x) & 0x3) << 15) |
| #define RUBY_SYS_CTL_CLKSEL(x) (((x) & 0x3) << 5) |
| #define RUBY_SYS_CTL_MUC_REMAP_SHIFT 15 |
| #define RUBY_SYS_CTL_MUC_REMAP_VAL(x) (RUBY_BIT(31) | ((x) >> RUBY_SYS_CTL_MUC_REMAP_SHIFT)) |
| #define RUBY_SYS_CTL_DSP_REMAP_SHIFT 15 |
| #define RUBY_SYS_CTL_DSP_REMAP_VAL(x) (RUBY_BIT(31) | ((x) >> RUBY_SYS_CTL_DSP_REMAP_SHIFT)) |
| /* reset bits - names match rtl */ |
| #define RUBY_SYS_CTL_RESET_LHOST_CORE (RUBY_BIT(0)) |
| #define RUBY_SYS_CTL_RESET_LHOST_BUS (RUBY_BIT(1)) |
| #define RUBY_SYS_CTL_RESET_DDR (RUBY_BIT(2)) |
| #define RUBY_SYS_CTL_RESET_SRAM (RUBY_BIT(3)) |
| #define RUBY_SYS_CTL_RESET_DSP (RUBY_BIT(4)) |
| #define RUBY_SYS_CTL_RESET_IOSS (RUBY_BIT(5)) |
| #define RUBY_SYS_CTL_RESET_NETSS (RUBY_BIT(7)) |
| #define RUBY_SYS_CTL_RESET_MAC (RUBY_BIT(8)) |
| #define RUBY_SYS_CTL_RESET_ENET0 (RUBY_BIT(9)) |
| #define RUBY_SYS_CTL_RESET_MUC (RUBY_BIT(11)) |
| #define RUBY_SYS_CTL_RESET_ENET1 (RUBY_BIT(12)) |
| #define RUBY_SYS_CTL_RESET_PCIE (RUBY_BIT(13)) |
| #define RUBY_SYS_CTL_RESET_BB (RUBY_BIT(14)) |
| #define RUBY_SYS_CTL_RESET_EXT (RUBY_BIT(15)) |
| /* reset useful constants */ |
| #define RUBY_SYS_CTL_RESET_ALL (~0x0) |
| #define RUBY_SYS_CTL_RESET_MUC_ALL RUBY_SYS_CTL_RESET_MUC |
| #define RUBY_SYS_CTL_RESET_DSP_ALL RUBY_SYS_CTL_RESET_DSP |
| /* reset cause definitions */ |
| #define RUBY_SYS_CTL_RESET_CAUSE_PO (RUBY_BIT(0)) |
| #define RUBY_SYS_CTL_RESET_CAUSE_SR (RUBY_BIT(1)) |
| #define RUBY_SYS_CTL_RESET_CAUSE_WD (RUBY_BIT(2)) |
| #define RUBY_SYS_CTL_INTR_TIMER_MSK(t) (1 << (20 + (t))) |
| /* sysctl vector/mask bit definitions */ |
| #define RUBY_SYS_CTL_MASK_BOOTMODE (0x7 << 0) |
| #define RUBY_SYS_CTL_MASK_REMAP (0x3 << 3) |
| #define RUBY_SYS_CTL_MASK_CLKSEL (0x3 << 5) |
| /* clksel: 00 = cpu(400) bus(200) */ |
| #define RUBY_SYS_CTL_CLKSEL_00_BUS_FREQ 200000000 |
| /* clksel: 01 = cpu(320) bus(160) */ |
| #define RUBY_SYS_CTL_CLKSEL_01_BUS_FREQ 160000000 |
| /* clksel: 10 = cpu(250) bus(125) */ |
| #define RUBY_SYS_CTL_CLKSEL_10_BUS_FREQ 125000000 |
| /* clksel: 11 = cpu(200) bus(100) */ |
| #define RUBY_SYS_CTL_CLKSEL_11_BUS_FREQ 100000000 |
| #define RUBY_SYS_CTL_MASK_DDRDRV (0x1 << 7) |
| #define RUBY_SYS_CTL_MASK_DDRODT (0x3 << 8) |
| #define RUBY_SYS_CTL_MASK_NODDR (0x1 << 12) |
| #define RUBY_SYS_CTL_MASK_MII (0x3 << 13) |
| #define RUBY_SYS_CTL_MASK_MII_EMAC0 (0x1 << 13) |
| #define RUBY_SYS_CTL_MASK_MII_EMAC1 (0x1 << 14) |
| #define RUBY_SYS_CTL_MASK_SPICLK (0x3 << 15) |
| #define RUBY_SYS_CTL_MASK_JTAGCHAIN (0x1 << 17) |
| |
| #define RUBY_SYS_CTL_MASK_GMII0_TXCLK (0x3 << 18) |
| #define RUBY_SYS_CTL_MASK_GMII0_10M (0x0 << 18) |
| #define RUBY_SYS_CTL_MASK_GMII0_100M (0x1 << 18) |
| #define RUBY_SYS_CTL_MASK_GMII0_1000M (0x2 << 18) |
| |
| #define RUBY_SYS_CTL_MASK_GMII1_TXCLK (0x3 << 20) |
| #define RUBY_SYS_CTL_MASK_GMII1_10M (0x0 << 20) |
| #define RUBY_SYS_CTL_MASK_GMII1_100M (0x1 << 20) |
| #define RUBY_SYS_CTL_MASK_GMII1_1000M (0x2 << 20) |
| |
| #define RUBY_SYS_CTL_MASK_GMII_10M (0) |
| #define RUBY_SYS_CTL_MASK_GMII_100M (1) |
| #define RUBY_SYS_CTL_MASK_GMII_1000M (2) |
| #define RUBY_SYS_CTL_MASK_GMII_TXCLK (3) |
| #define RUBY_SYS_CTL_MASK_GMII0_SHIFT (18) |
| #define RUBY_SYS_CTL_MASK_GMII1_SHIFT (20) |
| |
| #define RUBY_SYS_CTL_MASK_DDRCLK (0x7 << 22) |
| #define RUBY_SYS_CTL_MASK_LINUX_MAP (0x1 << 31) |
| |
| #if !TOPAZ_FPGA_PLATFORM |
| #define RUBY_SYS_CTL_CFG0_PCIE_RC (0x4) |
| #else |
| #define RUBY_SYS_CTL_CFG0_PCIE_RC (0x14) |
| #endif |
| |
| #if defined(TOPAZ_PLATFORM) |
| # define RUBY_RESET_CAUSE_UART_SHIFT (7) |
| #else |
| # define RUBY_RESET_CAUSE_UART_SHIFT (24) |
| #endif |
| #define RUBY_RESET_CAUSE_UART(x) (1 << (RUBY_RESET_CAUSE_UART_SHIFT + x)) |
| |
| /* global[30:25,11] unused */ |
| /* for compatibility */ |
| #define SYSCTRL_CTRL_MASK (RUBY_SYS_CTL_MASK - RUBY_SYS_CTL_BASE_ADDR) |
| #define SYSCTRL_CTRL (RUBY_SYS_CTL_CTRL - RUBY_SYS_CTL_BASE_ADDR) |
| #define SYSCTRL_RESET_MASK (RUBY_SYS_CTL_CPU_VEC_MASK - RUBY_SYS_CTL_BASE_ADDR) |
| #define SYSCTRL_RESET (RUBY_SYS_CTL_CPU_VEC - RUBY_SYS_CTL_BASE_ADDR) |
| #define SYSCTRL_REV_NUMBER (RUBY_SYS_CTL_CSR - RUBY_SYS_CTL_BASE_ADDR) |
| #define SYSCTRL_RGMII_DLL (RUBY_SYS_CTL_GMII_CLKDLL - RUBY_SYS_CTL_BASE_ADDR) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* Watchdog registers */ |
| /*****************************************************************************/ |
| #define RUBY_WDT_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF4000000, 0xE40C0000) |
| #define RUBY_WDT_CTL (RUBY_WDT_BASE_ADDR + 0x00) |
| #define RUBY_WDT_TIMEOUT_RANGE (RUBY_WDT_BASE_ADDR + 0x04) |
| #define RUBY_WDT_CURRENT_VALUE (RUBY_WDT_BASE_ADDR + 0x08) |
| #define RUBY_WDT_COUNTER_RESTART (RUBY_WDT_BASE_ADDR + 0x0c) |
| #define RUBY_WDT_INT_STAT (RUBY_WDT_BASE_ADDR + 0x10) |
| #define RUBY_WDT_INT_CLEAR (RUBY_WDT_BASE_ADDR + 0x14) |
| /*****************************************************************************/ |
| /* Watchdog constants */ |
| /*****************************************************************************/ |
| #define RUBY_WDT_ENABLE_IRQ_WARN (RUBY_BIT(1)) |
| #define RUBY_WDT_ENABLE (RUBY_BIT(0)) |
| #define RUBY_WDT_MAGIC_NUMBER (0x76) |
| #define RUBY_WDT_MAX_TIMEOUT (0xF) |
| #define RUBY_WDT_RESET_TIMEOUT (0x8) |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* SPI registers */ |
| /*****************************************************************************/ |
| #define RUBY_SPI_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xE2000000, 0xE4030000) |
| #define RUBY_SPI_COMMIT (RUBY_SPI_BASE_ADDR + 0x0000) |
| #define RUBY_SPI_CONTROL (RUBY_SPI_BASE_ADDR + 0x0004) |
| #define RUBY_SPI_WRITE_STATUS (RUBY_SPI_BASE_ADDR + 0x0100) |
| #define RUBY_SPI_PAGE_PROGRAM (RUBY_SPI_BASE_ADDR + 0x0200) |
| #define RUBY_SPI_WRITE_DIS (RUBY_SPI_BASE_ADDR + 0x0400) |
| #define RUBY_SPI_READ_STATUS (RUBY_SPI_BASE_ADDR + 0x0500) |
| #define RUBY_SPI_WRITE_EN (RUBY_SPI_BASE_ADDR + 0x0600) |
| #define RUBY_SPI_FAST_READ (RUBY_SPI_BASE_ADDR + 0x0B00) |
| #define RUBY_SPI_WRITE_REG3 (RUBY_SPI_BASE_ADDR + 0x1100) |
| #define RUBY_SPI_READ_REG3 (RUBY_SPI_BASE_ADDR + 0x1500) |
| #define RUBY_SPI_SECTOR_ERASE_20 (RUBY_SPI_BASE_ADDR + 0x2000) |
| #define RUBY_SPI_READ_SCUR (RUBY_SPI_BASE_ADDR + 0x2b00) |
| #define RUBY_SPI_WRITE_IBUP (RUBY_SPI_BASE_ADDR + 0x3900) |
| #define RUBY_SPI_WRITE_PRO_SEL (RUBY_SPI_BASE_ADDR + 0x6800) |
| #define RUBY_SPI_GBLOCK_LOCK (RUBY_SPI_BASE_ADDR + 0x7e00) |
| #define RUBY_SPI_GBLOCK_UNLOCK (RUBY_SPI_BASE_ADDR + 0x9800) |
| #define TOPAZ_SPI_GBLOCK_UNLOCK (RUBY_SPI_BASE_ADDR + 0x9800) |
| #define RUBY_SPI_READ_ID (RUBY_SPI_BASE_ADDR + 0x9F00) |
| #define RUBY_SPI_BULK_ERASE (RUBY_SPI_BASE_ADDR + 0xC700) |
| #define RUBY_SPI_SECTOR_ERASE_D8 (RUBY_SPI_BASE_ADDR + 0xD800) |
| #define RUBY_SPI_READ_DPB (RUBY_SPI_BASE_ADDR + 0xe000) |
| #define RUBY_SPI_WRITE_DPB (RUBY_SPI_BASE_ADDR + 0xe100) |
| |
| /* |
| * UBOOT_VERSION_LOCATION: |
| * This is hardwired in u-boot's start.S; the first instruction generates a |
| * 32 bit branch instruction. The next several locations holds a human |
| * readable ascii version string that is visible in the file and in memory. |
| * The branch target of the first instruction is the next 4 byte aligned |
| * address following the version string. |
| * |
| */ |
| #define UBOOT_VERSION_LOCATION (RUBY_SPI_FLASH_ADDR + 4) |
| |
| /*****************************************************************************/ |
| /* SPI constants */ |
| /*****************************************************************************/ |
| #define RUBY_SPI_WR_IN_PROGRESS (RUBY_BIT(0)) |
| #define RUBY_SPI_PROTECTION (0x3C) |
| |
| /*****************************************************************************/ |
| /* SPI1 registers */ |
| /*****************************************************************************/ |
| #define RUBY_SPI1_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF2000000, 0xE40A0000) |
| #define RUBY_SPI1_SPCR (RUBY_SPI1_BASE_ADDR + 0x0000) |
| #define RUBY_SPI1_SPSR (RUBY_SPI1_BASE_ADDR + 0x0004) |
| #define RUBY_SPI1_SPDR (RUBY_SPI1_BASE_ADDR + 0x0008) |
| #define RUBY_SPI1_SPER (RUBY_SPI1_BASE_ADDR + 0x000C) |
| #define RUBY_SPI1_SLVN (RUBY_SPI1_BASE_ADDR + 0x0010) |
| /*****************************************************************************/ |
| /* SPI1 constants */ |
| /*****************************************************************************/ |
| #define RUBY_SPI1_SPCR_SPIE_BIT 7 |
| #define RUBY_SPI1_SPCR_SPIE (RUBY_BIT(RUBY_SPI1_SPCR_SPIE_BIT)) |
| #define RUBY_SPI1_SPCR_SPE (RUBY_BIT(6)) |
| #define RUBY_SPI1_SPCR_MSTR (RUBY_BIT(4)) |
| #define RUBY_SPI1_SPCR_CPOL (RUBY_BIT(3)) |
| #define RUBY_SPI1_SPCR_CPHA (RUBY_BIT(2)) |
| #define RUBY_SPI1_SPCR_SPR(x) ((x) & 0x3) |
| #define RUBY_SPI1_SPSR_SPIF (RUBY_BIT(7)) |
| #define RUBY_SPI1_SPSR_WCOL (RUBY_BIT(6)) |
| #define RUBY_SPI1_SPSR_WFFULL (RUBY_BIT(3)) |
| #define RUBY_SPI1_SPSR_WFEMPTY (RUBY_BIT(2)) |
| #define RUBY_SPI1_SPSR_RFFULL (RUBY_BIT(1)) |
| #define RUBY_SPI1_SPSR_RFEMPTY (RUBY_BIT(0)) |
| #define RUBY_SPI1_SPER_ICNT(x) (((x) & 0x3) << 6) |
| #define RUBY_SPI1_SPER_ESPR(x) ((x) & 0x3) |
| /*****************************************************************************/ |
| |
| /*****************************************************************************/ |
| /* I2C constants */ |
| /*****************************************************************************/ |
| #define RUBY_I2C_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xF9000000, 0xE40F0000) |
| #define RUBY_I2C_MEM_SIZE (0x0A08) |
| #define RUBY_I2C_ADAPTER_NUM (0) |
| |
| /*****************************************************************************/ |
| /* Interrupts */ |
| /*****************************************************************************/ |
| #define RUBY_IRQ_RESET (0) |
| #define RUBY_IRQ_MEM_ERR (1) |
| #define RUBY_IRQ_INS_ERR (2) |
| #define RUBY_IRQ_CPUTIMER0 (3) |
| #define RUBY_IRQ_CPUTIMER1 (4) |
| #define RUBY_IRQ_WATCHDOG (5) |
| #define RUBY_IRQ_DMA0 (6) |
| #define RUBY_IRQ_BB (7) |
| #define RUBY_IRQ_IPC_LO (8) |
| #define IRQ_MAC0_0 RUBY_IRQ_IPC_LO |
| #define RUBY_IRQ_DSP (9) |
| #define RUBY_IRQ_IPC_HI (10) |
| #define RUBY_IRQ_MAC_TX_DONE (11) |
| #define RUBY_IRQ_MAC_TX_ALERT (12) |
| #define RUBY_IRQ_MAC_RX_DONE (13) |
| #define RUBY_IRQ_MAC_RX_TYPE (14) |
| #define RUBY_IRQ_MAC_MIB (15) |
| #define RUBY_IRQ_MAC_0 (16) |
| #define RUBY_IRQ_MAC_1 (17) |
| #define RUBY_IRQ_PCIE (18) |
| #define RUBY_IRQ_ENET0 (19) |
| #define RUBY_IRQ_ENET1 (20) |
| #define RUBY_IRQ_DMA1 (21) |
| #define RUBY_IRQ_DMA2 (22) |
| #define RUBY_IRQ_DMA3 (23) |
| #define RUBY_IRQ_UART (24) |
| #define RUBY_IRQ_GPIO (25) |
| #define RUBY_IRQ_TIMER (26) |
| #define RUBY_IRQ_MISC (27) |
| #if defined(TOPAZ_PLATFORM) |
| /* Combined PCIe Interrupt IRQ 28 */ |
| #define RUBY_IRQ_MSI (28) |
| #define RUBY_IRQ_INTA (28) |
| /* Combined PCIe DMA Legacy/MSI Interrupt IRQ 22 */ |
| #define TOPAZ_IRQ_PCIE_DMA_INT (22) |
| #define TOPAZ_IRQ_PCIE_IPC4_INT (29) |
| /* Combined PCIe Legacy/MSI Interrupt IRQ 28 */ |
| #define TOPAZ_IRQ_PCIE_INT RUBY_IRQ_INTA |
| #else |
| #define RUBY_IRQ_MSI (28) |
| #define RUBY_IRQ_INTA (29) |
| #endif |
| #define RUBY_IRQ_SPI (30) |
| #define RUBY_IRQ_BB_PER_PACKET (31) |
| #define RUBY_MAX_IRQ_VECTOR (31) |
| #define RUBY_IRQ_VECTORS_NUM (RUBY_MAX_IRQ_VECTOR + 1) |
| /* these are extended (shared) irqs */ |
| #define GPIO2IRQ(x) ((x) + RUBY_IRQ_GPIO0) |
| #define RUBY_IRQ_GPIO0 (32) |
| #define RUBY_IRQ_GPIO1 (33) |
| #define RUBY_IRQ_GPIO2 (34) |
| #define RUBY_IRQ_GPIO3 (35) |
| #define RUBY_IRQ_GPIO4 (36) |
| #define RUBY_IRQ_GPIO5 (37) |
| #define RUBY_IRQ_GPIO6 (38) |
| #define RUBY_IRQ_GPIO7 (39) |
| #define RUBY_IRQ_GPIO8 (40) |
| #define RUBY_IRQ_GPIO9 (41) |
| #define RUBY_IRQ_GPIO10 (42) |
| #define RUBY_IRQ_GPIO11 (43) |
| #define RUBY_IRQ_GPIO12 (44) |
| #define RUBY_IRQ_GPIO13 (45) |
| #define RUBY_IRQ_GPIO14 (46) |
| #define RUBY_IRQ_GPIO15 (47) |
| #define RUBY_IRQ_UART0 (48) |
| #define RUBY_IRQ_UART1 (49) |
| #define RUBY_IRQ_TIMER0 (50) |
| #define RUBY_IRQ_TIMER1 (51) |
| #define RUBY_IRQ_TIMER2 (52) |
| #define RUBY_IRQ_TIMER3 (53) |
| #define RUBY_IRQ_MISC_I2C (56) |
| #define RUBY_IRQ_MISC_SRAM (57) |
| #define RUBY_IRQ_MISC_NETSS (58) |
| #define RUBY_IRQ_MISC_PLL1 (59) |
| #define RUBY_IRQ_MISC_PLL2 (60) |
| #define RUBY_IRQ_MISC_EXT_IRQ_COUNT (5) |
| #define RUBY_IRQ_MISC_EXT_IRQ_START (56) |
| #define RUBY_IRQ_MISC_RST_CAUSE_START (26) |
| |
| #if defined(TOPAZ_PLATFORM) |
| #define QTN_IRQ_MISC_EXT_IRQ_COUNT TOPAZ_IRQ_MISC_EXT_IRQ_COUNT |
| #define QTN_IRQ_MISC_RST_CAUSE_START TOPAZ_IRQ_MISC_RST_CAUSE_START |
| #else |
| #define QTN_IRQ_MISC_EXT_IRQ_COUNT RUBY_IRQ_MISC_EXT_IRQ_COUNT |
| #define QTN_IRQ_MISC_RST_CAUSE_START RUBY_IRQ_MISC_RST_CAUSE_START |
| #endif |
| |
| #define RUBY_MAX_IRQ_EXT_VECTOR (63) |
| #define RUBY_IRQ_EXT_VECTORS_NUM (RUBY_MAX_IRQ_EXT_VECTOR + 1) |
| |
| /* M2L interrupt register is [31:16] high prio, [15:0] low prio */ |
| #define RUBY_M2L_IRQ_NUM_HI (16) |
| #define RUBY_M2L_IRQ_NUM_LO (16) |
| /* M2L High priority interrupts, sent to RUBY_IRQ_IPC_HI */ |
| #define RUBY_M2L_IRQ_HI_REBOOT RUBY_M2L_IPC_HI_IRQ(13) |
| #define RUBY_M2L_IRQ_HI_DIE RUBY_M2L_IPC_HI_IRQ(14) |
| /* M2L Low priority interrupts, sent to RUBY_IRQ_IPC_LO */ |
| #define RUBY_M2L_IRQ_LO_MEAS (8) |
| #define RUBY_M2L_IRQ_LO_OCAC (9) |
| #define RUBY_M2L_IRQ_LO_CSA (10) |
| #define RUBY_M2L_IRQ_LO_SCS (11) |
| #define RUBY_M2L_IRQ_LO_SCAN (12) |
| #define RUBY_M2L_IRQ_LO_VSP (13) |
| #define RUBY_M2L_IRQ_LO_PRINT (14) |
| #define RUBY_M2L_IRQ_LO_HLINK (15) |
| |
| /* these are DSP interrupts */ |
| #define RUBY_DSP_IRQ_TIMER0 (3) |
| #define RUBY_DSP_IRQ_TIMER1 (5) |
| #define RUBY_DSP_IRQ_IPC_MUC2DSP (10) |
| #define RUBY_DSP_IRQ_IPC_LHOST2DSP (11) |
| #define RUBY_DSP_IRQ_IPC_MUC2DSP_HI (17) |
| #define RUBY_DSP_IRQ_WMAC_COMBINED (20) |
| |
| /* M2D High priority interrupts, sent to RUBY_DSP_IRQ_IPC_MUC2DSP_HI */ |
| #define RUBY_M2D_IRQ_HI_DIE PLATFORM_REG_SWITCH(RUBY_IPC_HI_IRQ(7), 0) |
| |
| /* L2M Low priority interrupts */ |
| #define RUBY_L2M_IRQ_HLINK (6) |
| #define RUBY_L2M_IRQ_HIGH (7) |
| |
| /*****************************************************************************/ |
| /*****************************************************************************/ |
| /* BB registers */ |
| /*****************************************************************************/ |
| #define RUBY_BB_BASE_ADDR 0xE6000000 |
| /* FIXME: no BB2 on Ruby - this should expand to something else */ |
| #define UMS_REGS_BB2 RUBY_BB_BASE_ADDR |
| #define RUBY_QT3_BB_GLBL_PREG_RIF_ENABLE (RUBY_BB_BASE_ADDR + 0x1F4) |
| #define RUBY_QT3_BB_GLBL_PREG_RIF_ENABLE_ON 0x1 |
| #define RUBY_QT3_BB_GLBL_PREG_RIF_ENABLE_OFF 0x0 |
| #define RUBY_QT3_BB_GLBL_PREG_INTR_STATUS (RUBY_BB_BASE_ADDR + 0x320) |
| #define RUBY_QT3_BB_FFT_INTR (0x1000) |
| #define RUBY_QT3_BB_MIMO_PREG_RX_IPG_RST_ENABLE (RUBY_BB_BASE_ADDR + 0x50268) |
| #define RUBY_QT3_BB_MIMO_BF_RX (RUBY_BB_BASE_ADDR + 0x501FC) |
| #define RUBY_QT3_BB_MIMO_BF_RX_DUMP_ENABLE (1 << 1) /*11n HT-LF dump enable*/ |
| |
| #define RUBY_QT3_BB_GLBL_SOFT_RST (RUBY_BB_BASE_ADDR + 0x0008) |
| #define RUBY_QT3_BB_GLBL_SPI_CTRL (RUBY_BB_BASE_ADDR + 0x0024) |
| #define RUBY_QT3_BB_TD_BASE_ADDR (RUBY_BB_BASE_ADDR + 0x90000) |
| |
| #define RUBY_QT3_BB_RF1_BASE_ADDR 0xE6080000 |
| #define RUBY_QT3_BB_BONDING_4SS 0x01 |
| |
| #define RUBY_QT3_BB_TD_SPARE_0 (RUBY_QT3_BB_TD_BASE_ADDR + 0x5f4) |
| #define RUBY_QT3_BB_TD_SPARE_1 (RUBY_QT3_BB_TD_BASE_ADDR + 0x5f8) |
| #define RUBY_QT3_BB_TD_MAX_GAIN (RUBY_QT3_BB_TD_BASE_ADDR + 0x36c) |
| |
| /*****************************************************************************/ |
| /* Radar registers */ |
| /*****************************************************************************/ |
| #define RUBY_RADAR_CNT_L 0xE6090558 |
| |
| /*****************************************************************************/ |
| /* ARC addresses */ |
| /*****************************************************************************/ |
| #define RUBY_ARC_TLB_BYPASS 0x80000000 |
| #define RUBY_ARC_CACHE_BYPASS 0xC0000000 |
| |
| /*****************************************************************************/ |
| /* DMA registers and bit defines. */ |
| /*****************************************************************************/ |
| #define RUBY_DMA_NUM_CHANNELS (4) |
| #define RUBY_DMA_BASE_ADDR TOPAZ_ALIAS_MAP_SWITCH(0xEA000000, 0xE4060000) |
| #define RUBY_DMA_SAR(x) (RUBY_DMA_BASE_ADDR + 0x00 + (x)*0x58) |
| #define RUBY_DMA_DAR(x) (RUBY_DMA_BASE_ADDR + 0x08 + (x)*0x58) |
| #define RUBY_DMA_LLP(x) (RUBY_DMA_BASE_ADDR + 0x10 + (x)*0x58) |
| #define RUBY_DMA_CTL(x) (RUBY_DMA_BASE_ADDR + 0x18 + (x)*0x58) |
| #define RUBY_DMA_SIZE(x) (RUBY_DMA_BASE_ADDR + 0x1c + (x)*0x58) |
| #define RUBY_DMA_SSTAT(x) (RUBY_DMA_BASE_ADDR + 0x20 + (x)*0x58) |
| #define RUBY_DMA_DSTAT(x) (RUBY_DMA_BASE_ADDR + 0x28 + (x)*0x58) |
| #define RUBY_DMA_SSTATAR(x) (RUBY_DMA_BASE_ADDR + 0x30 + (x)*0x58) |
| #define RUBY_DMA_DSTATAR(x) (RUBY_DMA_BASE_ADDR + 0x38 + (x)*0x58) |
| #define RUBY_DMA_CFG(x) (RUBY_DMA_BASE_ADDR + 0x40 + (x)*0x58) |
| #define RUBY_DMA_SGR(x) (RUBY_DMA_BASE_ADDR + 0x48 + (x)*0x58) |
| #define RUBY_DMA_DSR(x) (RUBY_DMA_BASE_ADDR + 0x50 + (x)*0x58) |
| |
| #define RUBY_DMA_MASK_BLK (RUBY_DMA_BASE_ADDR + 0x318) |
| #define RUBY_DMA_BLK_CLR (RUBY_DMA_BASE_ADDR + 0x340) |
| #define RUBY_DMA_DMA_CFG (RUBY_DMA_BASE_ADDR + 0x398) |
| #define RUBY_DMA_CH_EN (RUBY_DMA_BASE_ADDR + 0x3a0) |
| /************** RUBY_DMA_CTL(x) bit defines. *********************************/ |
| #define RUBY_DMA_CTL_INT_EN RUBY_BIT(0) |
| #define RUBY_DMA_CTL_DINC (0) |
| #define RUBY_DMA_CTL_DDEC RUBY_BIT(7) |
| #define RUBY_DMA_CTL_DNOCHNG RUBY_BIT(8) |
| #define RUBY_DMA_CTL_SINC (0) |
| #define RUBY_DMA_CTL_SDEC RUBY_BIT(9) |
| #define RUBY_DMA_CTL_SNOCHNG RUBY_BIT(10) |
| #define RUBY_DMA_CTL_DMS_LHOST (0) |
| #define RUBY_DMA_CTL_DMS_MUC RUBY_BIT(23) |
| #define RUBY_DMA_CTL_SMS_LHOST (0) // ahb master bus 1 |
| #define RUBY_DMA_CTL_SMS_MUC RUBY_BIT(25) // ahb master bus 2 |
| |
| /************** RUBY_DMA_CFG(x) bit defines. *********************************/ |
| #define RUBY_DMA_CFG_ENABLE RUBY_BIT(0) |
| |
| /*****************************************************************************/ |
| /* PCI registers & memory regions for target driver. */ |
| /*****************************************************************************/ |
| #define RUBY_PCIE_REG_BASE TOPAZ_ALIAS_MAP_SWITCH(0xE9000000, 0xE4050000) |
| #define RUBY_PCIE_CONFIG_REGION (0xCF000000) |
| |
| #define RUBY_PCIE_CMD_REG (RUBY_PCIE_REG_BASE + 0x0004) |
| #define RUBY_PCIE_BAR_NUM (6) |
| #define RUBY_PCIE_BAR_BASE (RUBY_PCIE_REG_BASE + 0x0010) |
| #define RUBY_PCIE_BAR(n) (RUBY_PCIE_BAR_BASE + (n << 2)) |
| #define RUBY_PCIE_BAR_MASK_ADDR (RUBY_PCIE_REG_BASE + 0x1010) |
| #define RUBY_PCIE_BAR_MASK(n) (RUBY_PCIE_BAR_MASK_ADDR + (n << 2)) |
| |
| #define RUBY_PCIE_ATU_VIEW (RUBY_PCIE_REG_BASE + 0x0900) |
| #define RUBY_PCIE_ATU_CTL1 (RUBY_PCIE_REG_BASE + 0x0904) |
| #define RUBY_PCIE_ATU_CTL2 (RUBY_PCIE_REG_BASE + 0x0908) |
| #define RUBY_PCIE_ATU_BASE_LO (RUBY_PCIE_REG_BASE + 0x090c) |
| #define RUBY_PCIE_ATU_BASE_HI (RUBY_PCIE_REG_BASE + 0x0910) |
| #define RUBY_PCIE_ATU_BASE_LIMIT (RUBY_PCIE_REG_BASE + 0x0914) |
| #define RUBY_PCIE_ATU_TARGET_LO (RUBY_PCIE_REG_BASE + 0x0918) |
| #define RUBY_PCIE_ATU_TARGET_HI (RUBY_PCIE_REG_BASE + 0x091c) |
| |
| #define RUBY_PCIE_ATU_OB_REGION(n) (0x0 + n) |
| #define RUBY_PCIE_ATU_IB_REGION(n) (0x80000000 + n) |
| #define RUBY_PCIE_ATU_CFG_SHIFT RUBY_BIT(28) |
| #define RUBY_PCIE_ATU_OB_ENABLE RUBY_BIT(31) |
| |
| #define RUBY_PCI_RC_MEM_WINDOW (32 << 20) /* 32MB MEMORY window in Root Complex for pcie tree */ |
| #define RUBY_PCI_RC_CFG_SIZE (64 << 10) /* 64KB CFG size in Root Complex for pcie tree */ |
| #define RUBY_PCI_RC_MEM_START (0xc0000000) /* PCI memory region in Root Complex's kernel address space */ |
| |
| #define RUBY_PCIE_INT_MASK (RUBY_SYS_CTL_BASE_ADDR + 0xC0) |
| #define RUBY_PCIE_MSI_ENABLE RUBY_BIT(16) |
| #define MSI_CTL_OFFSET (0x50) |
| #define RUBY_MSI_ADDR_LOWER (RUBY_PCIE_REG_BASE + 0x820) |
| #define RUBY_MSI_ADDR_UPPER (RUBY_PCIE_REG_BASE + 0x824) |
| #define RUBY_MSI_INT_ENABLE (RUBY_PCIE_REG_BASE + 0x828) |
| #define RUBY_PCIE_MSI_MASK (RUBY_PCIE_REG_BASE + 0x82c) |
| #define RUBY_PCIE_MSI_STATUS (RUBY_PCIE_REG_BASE + 0x830) |
| #define RUBY_PCIE_MSI_REGION (0xce000000) /* msi message address */ |
| #define RUBY_MSI_DATA (0x0) /* msi message data */ |
| #define RUBY_PCIE_MSI_CLEAR RUBY_BIT(0) /* clear msi intr */ |
| |
| #define TOPAZ_PCIE_STAT (RUBY_SYS_CTL_BASE_ADDR + 0x017C) |
| #if TOPAZ_FPGA_PLATFORM |
| #define TOPAZ_PCIE_LINKUP (0xe) |
| #else |
| #define TOPAZ_PCIE_LINKUP (0x7) |
| #endif |
| |
| #define PCIE_LINK_STAT (RUBY_PCIE_REG_BASE + 0x80) |
| #define PCIE_LINK_CTL2 (RUBY_PCIE_REG_BASE + 0xa0) |
| #define PCIE_ASPM_L1_CTRL (RUBY_PCIE_REG_BASE + 0x70c) |
| #define PCIE_ASPM_LINK_CTRL (PCIE_LINK_STAT) |
| #define PCIE_PORT_LINK_CTL (RUBY_PCIE_REG_BASE + 0x710) |
| #define PCIE_ASPM_L1_SUBSTATE_TIMING (RUBY_PCIE_REG_BASE + 0xB44) |
| #define PCIE_L1SUB_CTRL1 (RUBY_PCIE_REG_BASE + 0x150) |
| #define PCIE_PMCSR (RUBY_PCIE_REG_BASE + 0x44) |
| |
| /* PCIe link defines */ |
| #define PCIE_LINK_GEN1 (BIT(0)) |
| #define PCIE_LINK_GEN2 (BIT(1)) |
| #define PCIE_LINK_GEN3 (BIT(2)) |
| #define PCIE_LINK_MODE(x) (((x) >> 16) & 0x7) |
| |
| /* ATU setting for Host Buffer Descriptor Mapping */ |
| #define PCIE_HOSTBD_REGION (RUBY_PCIE_ATU_OB_REGION(2)) |
| #define PCIE_ATU_BAR_MIN_SIZE 0x00010000 /* 64k */ |
| #define PCIE_HOSTBD_SIZE (2 * PCIE_ATU_BAR_MIN_SIZE) |
| #define PCIE_HOSTBD_SIZE_MASK (PCIE_HOSTBD_SIZE - 1) |
| #define PCIE_HOSTBD_START_HI 0x00000000 |
| #define PCIE_HOSTBD_REGION_ENABLE RUBY_PCIE_ATU_OB_ENABLE |
| |
| /* Extra system controller bits */ |
| #define TOPAZ_SYS_CTL_PLLCLKOUT_EN (RUBY_BIT(10)) |
| |
| /* Board platform and revision */ |
| #define TOPAZ_BOARD_REVA 0x40 |
| #define TOPAZ_BOARD_REVB 0x41 |
| #define TOPAZ_BOARD_REVA2 0x43 |
| |
| /* |
| * WOWLAN GPIO assignment |
| * On RGMII module - GPIO_B_10 (set as output for WoWLAN) |
| * On RGMII host board - GPIO_B_10 (set as input to wake up the host) |
| * |
| * On PCIe module - WAKE# or GPIO_B_12 ( set as output for WoWLAN, use WAKE# by default) |
| * On PCIe host board - GPIO_B_14 (set as input to wake up the host) |
| */ |
| #ifdef CONFIG_TOPAZ_PCIE_TARGET |
| #define WOWLAN_GPIO_OUTPUT_PIN 12 |
| #else |
| #define WOWLAN_GPIO_OUTPUT_PIN 10 |
| #endif |
| #endif // #ifndef __RUBY_PLATFORM_H |
| |