Add Broadcom's code for bcm63xx support
[project/bcm63xx/atf.git] / plat / bcm / include / platform_def.h
diff --git a/plat/bcm/include/platform_def.h b/plat/bcm/include/platform_def.h
new file mode 100644 (file)
index 0000000..2509e82
--- /dev/null
@@ -0,0 +1,339 @@
+/*
+ * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef __PLATFORM_DEF_H__
+#define __PLATFORM_DEF_H__
+
+/* Following two defines needed to makes use of shared PMC driver code */
+#define _CFE_
+#define _ATF_
+
+#include <arch.h>
+#include <common_def.h>
+#include <tbbr_img_def.h>
+#include <bcm_map_part.h>
+#include <bcm_mem_reserve.h>
+
+#define PLAT_ARM_NS_IMAGE_BASE 0x0
+
+#define PLATFORM_STACK_SIZE 0x1000
+
+#define PLATFORM_MAX_CPUS_PER_CLUSTER  4
+#define PLATFORM_CLUSTER_COUNT         1
+#define PLATFORM_CLUSTER0_CORE_COUNT   PLATFORM_MAX_CPUS_PER_CLUSTER
+#define PLATFORM_CLUSTER1_CORE_COUNT   0
+#define PLATFORM_CORE_COUNT            (PLATFORM_CLUSTER0_CORE_COUNT + \
+                                        PLATFORM_CLUSTER1_CORE_COUNT)
+
+#define BRCM_PRIMARY_CPU               0
+
+#define PLAT_NUM_PWR_DOMAINS           (PLATFORM_CLUSTER_COUNT + \
+                                       PLATFORM_CORE_COUNT)
+#define PLAT_MAX_PWR_LVL               MPIDR_AFFLVL1
+
+#define PLAT_MAX_RET_STATE             1
+#define PLAT_MAX_OFF_STATE             2
+
+/* Local power state for power domains in Run state. */
+#define PLAT_LOCAL_STATE_RUN           0
+/* Local power state for retention. Valid only for CPU power domains */
+#define PLAT_LOCAL_STATE_RET           1
+/*
+ * Local power state for OFF/power-down. Valid for CPU and cluster power
+ * domains.
+ */
+#define PLAT_LOCAL_STATE_OFF           2
+
+/*
+ * Macros used to parse state information from State-ID if it is using the
+ * recommended encoding for State-ID.
+ */
+#define PLAT_LOCAL_PSTATE_WIDTH                4
+#define PLAT_LOCAL_PSTATE_MASK         ((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1)
+
+/*
+ * Some data must be aligned on the biggest cache line size in the platform.
+ * This is known only to the platform as it might have a combination of
+ * integrated and external caches.
+ */
+#define CACHE_WRITEBACK_SHIFT          6
+#define CACHE_WRITEBACK_GRANULE                (1 << CACHE_WRITEBACK_SHIFT)
+
+
+/*
+ * BL3-1 specific defines.
+ *
+ * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the
+ * current BL3-1 debug size plus a little space for growth.
+ */
+#define BL31_BASE                      (CFG_ATF_AREA_ADDR)
+#define BL31_LIMIT                     (CFG_ATF_AREA_ADDR + CFG_ATF_AREA_SIZE)
+
+
+#define PLAT_ARM_NS_IMAGE_OFFSET       (0x0)
+#define PLAT_PHY_ADDR_SPACE_SIZE       (1ULL << 32)
+#define PLAT_VIRT_ADDR_SPACE_SIZE      (1ULL << 32)
+
+/*
+ * BL3-2 specific defines.
+ *
+ */
+#if defined(AARCH32)
+#define BL32_BASE                      BL31_BASE
+#define BL32_SIZE                      CFG_ATF_AREA_SIZE
+#define BL32_LIMIT                     BL31_LIMIT
+#define BL322_BASE                     (CFG_OPTEE_AREA_ADDR)
+#else
+#define BL32_BASE                      (CFG_OPTEE_AREA_ADDR)
+#define BL32_SIZE                      (CFG_OPTEE_AREA_SIZE)
+#define BL32_LIMIT                     (CFG_OPTEE_AREA_ADDR + CFG_OPTEE_AREA_SIZE)
+#endif
+
+#define ADDR_SPACE_SIZE                        (1ull << 32)
+#define MAX_MMAP_REGIONS               10
+#define MAX_XLAT_TABLES                        16
+#define MAX_IO_DEVICES                 3
+#define MAX_IO_HANDLES                 4
+
+#if defined BOOTLUT_PHYS_BASE
+#undef BOOTLUT_BASE
+#define BOOTLUT_BASE                   BOOTLUT_PHYS_BASE
+#else
+#define BOOTLUT_BASE                   0xffff0000
+#endif
+
+#if !defined(BOOTLUT_SIZE)
+#define BOOTLUT_SIZE                   0x1000
+#endif
+
+#if defined (BIUCFG_BASE)
+#undef  BIUCFG_BASE
+#define BIUCFG_BASE                    (BIUCFG_PHYS_BASE + BIUCFG_OFFSET)
+#elif defined (BIUCTRL_BASE)
+#undef  BIUCTRL_BASE
+#define BIUCTRL_BASE                   (URB_PHYS_BASE + URB_BIUCTRL_OFFSET)
+#define BIUCTRL_SIZE                   URB_SIZE
+#endif
+
+#if defined (B15_CTRL_BASE)
+#undef B15_CTRL_BASE
+#define B15_CTRL_BASE B15_CTRL_PHYS_BASE
+#define B15_CTRL_SIZE 0x3000
+#endif
+
+#undef TIMR_BASE
+#if defined (PLATFORM_FLAVOR_63158) || defined (PLATFORM_FLAVOR_63178) || defined (PLATFORM_FLAVOR_47622) || defined (PLATFORM_FLAVOR_6878) || defined (PLATFORM_FLAVOR_63146) || defined (PLATFORM_FLAVOR_4912) || defined (PLATFORM_FLAVOR_6756)
+#define UART0_BASE                     0xff812000
+#elif defined (PLATFORM_FLAVOR_6858) || defined (PLATFORM_FLAVOR_6856) || defined (PLATFORM_FLAVOR_4908) || defined (PLATFORM_FLAVOR_6846)
+#define UART0_BASE                     0xff800000
+#elif defined (PLATFORM_FLAVOR_63138) || defined (PLATFORM_FLAVOR_63148)
+#define TIMR_BASE      PERF_PHYS_BASE
+#define TIMR_SIZE      0x10000
+#define TIMR_OFFSET    0x80
+
+#undef UART0_BASE
+/* 63138 and 63148 do not support PL011 UART.
+   UART is needed only for debug print.
+   For now, just use JTAG to debug these platforms.
+*/
+#define UART0_BASE                     0x0
+#endif
+#define UART0_SIZE                     0x1000
+#define UART0_CLK_IN_HZ                        (50 * 1000 * 1000)
+
+
+#undef  PMC_BASE
+#if defined (PMC_OFFSET)
+#define PMC_BASE                       (PMC_PHYS_BASE + PMC_OFFSET)
+#else
+#define PMC_BASE                       (PMC_PHYS_BASE)
+#endif
+
+#if defined(PROC_MON_BASE)
+#undef PROC_MON_BASE
+#if defined(PROC_MON_PHYS_BASE)
+#define PROC_MON_BASE          (PROC_MON_PHYS_BASE)
+#else
+#define PROC_MON_BASE          (PMC_PHYS_BASE + PROC_MON_OFFSET)
+#endif
+#endif
+
+#undef PMC_SIZE
+#define PMC_SIZE                       0x00200000
+
+#define PLAT_BCM_CRASH_UART_BASE       UART0_BASE
+#define PLAT_BCM_CRASH_UART_CLK_IN_HZ  UART0_CLK_IN_HZ
+#define PLAT_BCM_CONSOLE_BAUDRATE      115200
+
+#define PLAT_ARM_CRASH_UART_BASE       PLAT_BCM_CRASH_UART_BASE
+#define PLAT_ARM_CRASH_UART_CLK_IN_HZ  PLAT_BCM_CRASH_UART_CLK_IN_HZ
+#define ARM_CONSOLE_BAUDRATE   PLAT_BCM_CONSOLE_BAUDRATE
+
+#define DEVICE0_BASE                   0x08000000
+#define DEVICE0_SIZE                   0x00021000
+#define DEVICE1_BASE                   0x09000000
+#define DEVICE1_SIZE                   0x00011000
+
+
+#if defined(WDTIMR0_BASE)
+#undef WDTIMR0_BASE
+#define WDTIMR0_BASE (PERF_PHYS_BASE+WDTIMR0_OFFSET)
+#define WDTIMR_BASE  (PERF_PHYS_BASE)
+#define WDTIMR_SIZE  0x4000
+#endif
+
+/*
+ * GIC related constants
+ */
+
+#undef GICD_BASE
+#undef GICC_BASE
+#undef SCU_BASE
+#if defined (PLATFORM_FLAVOR_63138) || defined (PLATFORM_FLAVOR_63148)
+#define GICD_BASE                      GICD_PHYS_BASE
+#define GICC_BASE                      GICC_PHYS_BASE
+#if defined (PLATFORM_FLAVOR_63138)
+#define SCU_BASE                       SCU_PHYS_BASE
+#endif
+#else
+#define GICD_BASE                      (GIC_PHYS_BASE + GICD_OFFSET)
+#define GICC_BASE                      (GIC_PHYS_BASE + GICC_OFFSET)
+#endif
+
+#define GICR_BASE                      0
+
+
+#define BRCM_IRQ_SEC_SGI_0             8
+#define BRCM_IRQ_SEC_SGI_1             9
+#define BRCM_IRQ_SEC_SGI_2             10
+#define BRCM_IRQ_SEC_SGI_3             11
+#define BRCM_IRQ_SEC_SGI_4             12
+#define BRCM_IRQ_SEC_SGI_5             13
+#define BRCM_IRQ_SEC_SGI_6             14
+#define BRCM_IRQ_SEC_SGI_7             15
+
+#if defined (PLATFORM_FLAVOR_63138)
+#define PL310_BASE             0x8001D000
+#define PL310_MAP_SIZE 0x00002000
+
+#undef  SCU_BASE
+#define SCU_BASE               0x8001E000
+#define SCU_ERRATA744369       0x30
+
+#define BIT32(nr)              (1 << (nr))
+/*
+ * Outer cache iomem
+ */
+#define PL310_LINE_SIZE                32
+#define PL310_8_WAYS           8
+
+/* reg1 */
+#define PL310_CTRL             0x100
+#define PL310_AUX_CTRL         0x104
+#define PL310_TAG_RAM_CTRL     0x108
+#define PL310_DATA_RAM_CTRL    0x10C
+/* reg7 */
+#define PL310_SYNC             0x730
+#define PL310_INV_BY_WAY       0x77C
+#define PL310_CLEAN_BY_WAY     0x7BC
+#define PL310_FLUSH_BY_WAY     0x7FC
+#define PL310_INV_BY_PA                0x770
+#define PL310_CLEAN_BY_PA      0x7B0
+#define PL310_FLUSH_BY_PA      0x7F0
+#define PL310_FLUSH_BY_INDEXWAY        0x7F8
+/* reg9 */
+#define PL310_DCACHE_LOCKDOWN_BASE 0x900
+#define PL310_ICACHE_LOCKDOWN_BASE 0x904
+/* reg12 */
+#define PL310_ADDR_FILT_START  0xC00
+#define PL310_ADDR_FILT_END    0xC04
+/* reg15 */
+#define PL310_DEBUG_CTRL       0xF40
+#define PL310_PREFETCH_CTRL    0xF60
+#define PL310_POWER_CTRL       0xF80
+
+#define PL310_CTRL_ENABLE_BIT  BIT32(0)
+#define PL310_AUX_16WAY_BIT    BIT32(16)
+
+/*
+ * PL310 TAG RAM Control Register
+ *
+ * bit[10:8]:1 - 2 cycle of write accesses latency
+ * bit[6:4]:1 - 2 cycle of read accesses latency
+ * bit[2:0]:1 - 2 cycle of setup latency
+ */
+#ifndef PL310_TAG_RAM_CTRL_INIT
+#define PL310_TAG_RAM_CTRL_INIT                0x00000111
+#endif
+
+/*
+ * PL310 DATA RAM Control Register
+ *
+ * bit[10:8]:2 - 3 cycle of write accesses latency
+ * bit[6:4]:2 - 3 cycle of read accesses latency
+ * bit[2:0]:2 - 3 cycle of setup latency
+ */
+#ifndef PL310_DATA_RAM_CTRL_INIT
+#define PL310_DATA_RAM_CTRL_INIT       0x00000111
+#endif
+
+/*
+ * PL310 Auxiliary Control Register
+ *
+ * I/Dcache prefetch enabled (bit29:28=2b11)
+ * NS can access interrupts (bit27=1)
+ * NS can lockown cache lines (bit26=1)
+ * Pseudo-random replacement policy (bit25=0)
+ * Force write allocated (default)
+ * Shared attribute internally ignored (bit22=1, bit13=0)
+ * Parity disabled (bit21=0)
+ * Event monitor disabled (bit20=0)
+ * Platform fmavor specific way config (dual / quad):
+ * - 64kb way size (bit19:17=3b011)
+ * - 16-way associciativity (bit16=1)
+ * Platform fmavor specific way config (dual lite / solo):
+ * - 32kb way size (bit19:17=3b010)
+ * - no 16-way associciativity (bit16=0)
+ * Store buffer device limitation enabled (bit11=1)
+ * Cacheable accesses have high prio (bit10=0)
+ * Full Line Zero (FLZ) disabled (bit0=0)
+ */
+
+#define PL310_AUX_CTRL_INIT            0x4e450001
+
+/*
+ * PL310 Prefetch Control Register
+ *
+ * Double linefill disabled (bit30=0)
+ * I/D prefetch enabled (bit29:28=2b11)
+ * Prefetch drop enabled (bit24=1)
+ * Incr double linefill disable (bit23=0)
+ * Prefetch offset = 7 (bit4:0)
+ */
+#define PL310_PREFETCH_CTRL_INIT       0x31000007
+
+/*
+ * PL310 Power Register
+ *
+ * Dynamic clock gating enabled
+ * Standby mode enabled
+ */
+#define PL310_POWER_CTRL_INIT          0x00000003
+
+#define GICC_CTLR_OFFSET               0x0
+#define GICC_PMR_OFFSET                        0x4
+#define GICD_CTLR_OFFSET               0x0
+#define GICD_TYPER_OFFSET              0x4
+#define GICD_IGROUPR0_OFFSET           0x80
+
+#endif
+
+/*
+ * System counter
+ */
+#define SYS_COUNTER_FREQ_IN_TICKS      (50 * 1000 * 1000)
+
+#endif /* __PLATFORM_DEF_H__ */