blob: 1e7c4b91ff0fb8e91f3a89b70ce8a4657bf67151 [file] [log] [blame]
/*
* arch/arm/arch-comcerto/include/mach/comcerto-2000.h
*
* Copyright (C) 2011 Mindspeed Technologies, Inc.
*
* 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
*/
#ifndef __ASM_ARCH_HARDWARE_H
#error "Do not include this directly, instead #include <asm/hardware.h>"
#endif
#ifndef __ASM_ARCH_COMCERTO2000_H__
#define __ASM_ARCH_COMCERTO2000_H__
/*
* System Clock Frequencies
*/
#ifdef CONFIG_RTSM_C2K
#define COMCERTO_DEFAULTAXICLK (600000000/3) /* Hz */
#else
#define COMCERTO_DEFAULTAXICLK 200000000 /* Hz */
#endif
/*
* SCU registers
*/
#define COMCERTO_SCU_BASE 0xFFF00000
#define COMCERTO_GIC_CPU_BASE (COMCERTO_SCU_BASE + 0x100)
#define COMCERTO_TWD_BASE (COMCERTO_SCU_BASE + 0x600)
#define COMCERTO_TWD_PERCPU_BASE (COMCERTO_SCU_BASE + 0x700)
#define COMCERTO_GIC_DIST_BASE (COMCERTO_SCU_BASE + 0x1000)
#define COMCERTO_L310_BASE (COMCERTO_SCU_BASE + 0x10000)
#define COMCERTO_L2CC_ASSOCIATIVITY_SHIFT 16
#define COMCERTO_L2CC_ASSOCIATIVITY_MASK 0x00010000
#define COMCERTO_L2CC_ASSOCIATIVITY_8WAY 0x0
#define COMCERTO_L2CC_ASSOCIATIVITY_16WAY 0x1
#define COMCERTO_L2CC_WAYSIZE_SHIFT 17
#define COMCERTO_L2CC_WAYSIZE_MASK 0x000E0000
#define COMCERTO_L2CC_ASSOCIATIVITY_32KB 0x2
#define COMCERTO_L2CC_WR_LAT_SHIFT 8
#define COMCERTO_L2CC_RD_LAT_SHIFT 4
/*
* Physical address of IO on APB Bus
*/
#define COMCERTO_APB_TDM_BASE 0x90400000
#define COMCERTO_APB_USBPHY_SERDES_STAT_BASE 0x90410000
#define COMCERTO_APB_TDMA_BASE 0x90420000
#define COMCERTO_APB_TIMER_BASE 0x90450000
#define COMCERTO_APB_PCI_SATA_USB_CTRL_BASE 0x90460000
#define COMCERTO_APB_GPIO_BASE 0x90470000
#define COMCERTO_APB_UART0_BASE 0x90490000
#define COMCERTO_APB_SPI_BASE 0x90498000
#define COMCERTO_APB_I2C_BASE 0x9049C000
#define COMCERTO_APB_USB3_BASE 0x904A0000
#define COMCERTO_APB_CLK_BASE 0x904B0000
#define COMCERTO_APB_RTC_BASE 0x904E0000
#define COMCERTO_APB_OTP_BASE 0x904F0000
#define COMCERTO_APB_PFE_BASE 0x90500000
#define COMCERTO_APB_SERDES_CONF_BASE 0x90590000
#define COMCERTO_APB_EXPBUS_BASE 0x905A0000
#define COMCERTO_APB_DDRPHY_BASE 0x905B0000
#define COMCERTO_APB_TDMA2_BASE 0x905D0000
#define COMCERTO_APB_MDMA_BASE 0x905E0000
#define COMCERTO_APB_A9CS_BASE 0x90600000
/*
* Physical address on AXI Bus
*/
#define COMCERTO_AXI_HIGHMEMDDR_BASE 0xFFFF0000
#define COMCERTO_AXI_DDR_BASE 0x00000000
#define COMCERTO_AXI_ACP_BASE 0x80000000 /* 48MB */
#define COMCERTO_AXI_IRAM_BASE 0x83000000
#define COMCERTO_AXI_IBR_BASE 0x90000000
#define COMCERTO_AXI_APB_BASE 0x90400000 /* 12MB */
#define COMCERTO_AXI_SEMA_BASE 0x91000000 /* 16MB */
#define COMCERTO_AXI_USB2P0_BASE 0x92000000
#define COMCERTO_AXI_TRUSTZONE_BASE 0x93000000
#define COMCERTO_AXI_DPI0_BASE 0x94000000 /* 16MB */
#define COMCERTO_AXI_DPI1_BASE 0x95000000 /* 16MB */
#define COMCERTO_AXI_UART_SPI_BASE 0x96000000 /* 16MB */
#define COMCERTO_AXI_UART0_BASE (COMCERTO_AXI_UART_SPI_BASE + 0x00300000)
#define COMCERTO_AXI_UART1_BASE (COMCERTO_AXI_UART_SPI_BASE + 0x00400000)
#define COMCERTO_AXI_SPI_BASE (COMCERTO_AXI_UART_SPI_BASE + 0x00500000)
#define COMCERTO_AXI_DDRCONFIG_BASE 0x97000000
#define COMCERTO_AXI_PCIe1_BASE 0x99000000
#define COMCERTO_AXI_PCIe0_BASE 0x98000000
#define COMCERTO_AXI_IPSEC_BASE 0x9A000000
#define COMCERTO_AXI_SPACC_PDU_BASE 0x9B000000 /* 16MB */
#define COMCERTO_AXI_PFE_BASE 0x9C000000 /* 16MB */
#define COMCERTO_AXI_SATA_BASE 0x9D000000 /* 16MB */
#define COMCERTO_AXI_DECT_BASE 0x9E000000 /* 16MB */
#define COMCERTO_AXI_USB3P0_BASE 0x9F000000 /* 16MB */
#define COMCERTO_AXI_PCIe0_SLAVE_BASE 0xA0000000
#define COMCERTO_AXI_PCIe1_SLAVE_BASE 0xB0000000
#define COMCERTO_AXI_EXP_BASE 0xC0000000
#define COMCERTO_AXI_EXP_ECC_BASE 0xCFFF0000 /* 64KB */
#define COMCERTO_AXI_ACP_SIZE (1 << 24)
#define COMCERTO_DDR_SHARED_BASE (COMCERTO_AXI_DDR_BASE + 0x2C00000)
#define COMCERTO_DDR_SHARED_SIZE (SZ_16M + SZ_4M)
/* MSP memory map */
#define COMCERTO_MSP_DDR_BASE COMCERTO_DDR_SHARED_BASE
#define COMCERTO_MSP_DDR_SIZE_CB (SZ_1M * 5)
#define COMCERTO_MSP_DDR_SIZE_NCNB (SZ_1M * 3)
#define COMCERTO_MSP_DDR_SIZE (COMCERTO_MSP_DDR_SIZE_CB + COMCERTO_MSP_DDR_SIZE_NCNB)
/* PFE memory map */
#define COMCERTO_APB_PFE_SIZE SZ_64K
#define COMCERTO_AXI_PFE_SIZE SZ_16M
#define COMCERTO_AXI_IPSEC_SIZE SZ_16M
#define COMCERTO_PFE_DDR_BASE (COMCERTO_DDR_SHARED_BASE + SZ_8M)
#define COMCERTO_PFE_DDR_SIZE (SZ_8M + SZ_4M)
#define COMCERTO_PFE_IRAM_BASE (COMCERTO_AXI_IRAM_BASE + 0x0000)
#define COMCERTO_PFE_IRAM_SIZE SZ_8K
/* MDMA memory map */
#define COMCERTO_APB_MDMA_SIZE SZ_1K+SZ_4
/*
* Virtual address mapping
*/
#define COMCERTO_MSP_VADDR 0xf0000000
#define COMCERTO_PFE_VADDR 0xfa000000
#define COMCERTO_PFE_AXI_VADDR 0xfc000000
// TODO: #define COMCERTO_SCU_VADDR COMCERTO_SCU_BASE
#define COMCERTO_SCU_VADDR 0xf0000000
#define COMCERTO_GIC_CPU_VADDR (COMCERTO_SCU_VADDR + 0x100)
#define COMCERTO_GIC_GLOBAL_TIMER_VADDR (COMCERTO_SCU_VADDR + 0x200)
#define COMCERTO_TWD_VADDR (COMCERTO_SCU_VADDR + 0x600)
#define COMCERTO_GIC_DIST_VADDR (COMCERTO_SCU_VADDR + 0x1000)
#define COMCERTO_L310_VADDR (COMCERTO_SCU_VADDR + 0x10000)
#define COMCERTO_DISTR_INT_SET_PENDING (COMCERTO_GIC_DIST_VADDR + 0x200)
#define COMCERTO_DISTR_INT_SET_PENDING_OFFSET_4 (COMCERTO_DISTR_INT_SET_PENDING + 0x4)
#define COMCERTO_DISTR_INT_SET_PENDING_OFFSET_8 (COMCERTO_DISTR_INT_SET_PENDING + 0x8)
#define IRAM_MEMORY_VADDR 0xf0800000
#define COMCERTO_APB_VADDR 0xf0900000 /* VA of IO on APB bus */
#define COMCERTO_APB_SIZE 0x00C00000
#define COMCERTO_AXI_UART_SPI_VADDR 0xF1600000
#define COMCERTO_AXI_UART_SPI_SIZE 0x01000000
#define COMCERTO_AXI_DMA_VADDR (COMCERTO_AXI_UART_SPI_VADDR+0x00000000)
#define COMCERTO_AXI_UART0_VADDR (COMCERTO_AXI_UART_SPI_VADDR+0x00300000)
#define COMCERTO_AXI_UART1_VADDR (COMCERTO_AXI_UART_SPI_VADDR+0x00400000)
#define COMCERTO_AXI_SSI_VADDR (COMCERTO_AXI_UART_SPI_VADDR+0x00500000)
#define COMCERTO_SEMA_VADDR 0xf4000000
#define COMCERTO_AXI_PCIe0_VADDR_BASE 0xf5000000
#define COMCERTO_AXI_PCIe1_VADDR_BASE 0xf6000000
#define COMCERTO_DECT_VADDR 0xf7000000
/*
* Reference Clock Option in Boot Strap Register
*
* BIT [9:8] System PLL Refclk Select
* '00' - USB XTAL
* '01' - Serdes #0 Refclk
* '10' - Serdes #1 Refclk
* '11' - Serdes XTAL
*
* BIT[7] Serdes OSC PAD - Reference clock frequency selection bootstrap (inverted value of SF1)
* '0' - 30MHz ~ 50MHz
* '1' - 15MHz ~ 30MHz
* Note: SF0 is tied to 1 in GPIO block and might later on be controlled during DFT
*
* BIT[5] USB/Sys PLL OSC PAD - Reference clock frequency selection bootstrap (inverted value of SF1)
*'0' - 30MHz ~ 50MHz
* '1' - 15MHz ~ 30MHz
* Note: SF0 is tied to 1 in GPIO block and might later on be controlled during DFT
*
*/
#define GPIO_SYS_PLL_REF_CLK_MASK (0x00000100 | 0x00000200)
#define GPIO_SYS_PLL_REF_CLK_SHIFT 8
#define USB_XTAL_REF_CLK 0
#define SERDES_0_REF_CLK 1
#define SERDES_2_REF_CLK 2
#define SERDES_XTAL_REF_CLK 3
#define GPIO_SERDES_OSC_PAD_MASK (0x00000080)
#define GPIO_SERDES_OSC_PAD_SHIFT 7
#define GPIO_USB_OSC_PAD_MASK (0x00000020)
#define GPIO_USB_OSC_PAD_SHIFT 5
#define REF_CLK_24MHZ 24000000 /* 24 MHz */
#define REF_CLK_48MHZ 48000000 /* 48 MHz */
/* USB 2.0 */
#define USB2_PHY_BASE APB_VADDR(COMCERTO_APB_PCI_SATA_USB_CTRL_BASE)
/* USB 3.0 */
#define USB3_PHY_BASE APB_VADDR(COMCERTO_APB_USB3_BASE)
#define USBPHY_SERDES_STAT_BASE APB_VADDR(COMCERTO_APB_USBPHY_SERDES_STAT_BASE)
/* Includes */
#include <mach/comcerto-2000/clk-rst.h>
#include <mach/comcerto-2000/timer.h>
#include <mach/comcerto-2000/memory.h>
#define comcerto_timer4_set(hbound) __raw_writel((hbound), COMCERTO_TIMER4_HIGH_BOUND)
#define comcerto_timer4_get() __raw_readl(COMCERTO_TIMER4_CURRENT_COUNT)
#define comcerto_timer5_set(lbound, hbound, ctrl) do { \
__raw_writel((ctrl) & 0x1, COMCERTO_TIMER5_CTRL); \
__raw_writel((lbound), COMCERTO_TIMER5_LOW_BOUND); \
__raw_writel((hbound), COMCERTO_TIMER5_HIGH_BOUND); \
} while(0)
#define comcerto_timer5_get() __raw_readl(COMCERTO_TIMER5_CURRENT_COUNT)
/* Number of gemacs supported in comcerto 2000 */
#define NUM_GEMAC_SUPPORT 3
#endif