[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v01 2/3] xen/arm: add platform specific definitions for DRA7 evm board
Signed-off-by: Andrii Tseglytskyi <andrii.tseglytskyi@xxxxxxxxxxxxxxx> --- xen/arch/arm/platforms/Makefile | 1 + xen/arch/arm/platforms/dra7xx.c | 158 +++++++++++++++++++++++++++++++ xen/include/asm-arm/platforms/dra7xx.h | 163 ++++++++++++++++++++++++++++++++ 3 files changed, 322 insertions(+) create mode 100644 xen/arch/arm/platforms/dra7xx.c create mode 100644 xen/include/asm-arm/platforms/dra7xx.h diff --git a/xen/arch/arm/platforms/Makefile b/xen/arch/arm/platforms/Makefile index 680364f..080ea9a 100644 --- a/xen/arch/arm/platforms/Makefile +++ b/xen/arch/arm/platforms/Makefile @@ -2,5 +2,6 @@ obj-y += vexpress.o obj-$(CONFIG_ARM_32) += exynos5.o obj-$(CONFIG_ARM_32) += midway.o obj-$(CONFIG_ARM_32) += omap5.o +obj-$(CONFIG_ARM_32) += dra7xx.o obj-$(CONFIG_ARM_32) += sunxi.o obj-$(CONFIG_ARM_64) += xgene-storm.o diff --git a/xen/arch/arm/platforms/dra7xx.c b/xen/arch/arm/platforms/dra7xx.c new file mode 100644 index 0000000..590d313 --- /dev/null +++ b/xen/arch/arm/platforms/dra7xx.c @@ -0,0 +1,158 @@ +/* + * xen/arch/arm/platforms/dra7.c + * + * TI DRA7 specific settings + * + * Andrii Anisov <andrii.anisov@xxxxxxxxxxxxxxx> + * Andrii Tseglytskyi <andrii.tseglytskyi@xxxxxxxxxxxxxxx> + * Alexander Savchenko <oleksandr.savchenko@xxxxxxxxxxxxxxx> + * + * 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. + */ + +#include <xen/mm.h> +#include <xen/vmap.h> +#include <asm/platforms/dra7xx.h> +#include <asm/platform.h> +#include <asm/io.h> + +static uint16_t num_den[8][2] = { + { 0, 0 }, /* not used */ + { 26 * 64, 26 * 125 }, /* 12.0 Mhz */ + { 2 * 768, 2 * 1625 }, /* 13.0 Mhz */ + { 0, 0 }, /* not used */ + { 130 * 8, 130 * 25 }, /* 19.2 Mhz */ + { 2 * 384, 2 * 1625 }, /* 26.0 Mhz */ + { 3 * 256, 3 * 1125 }, /* 27.0 Mhz */ + { 130 * 4, 130 * 25 }, /* 38.4 Mhz */ +}; + +/* + * The realtime counter also called master counter, is a free-running + * counter, which is related to real time. It produces the count used + * by the CPU local timer peripherals in the MPU cluster. The timer counts + * at a rate of 6.144 MHz. Because the device operates on different clocks + * in different power modes, the master counter shifts operation between + * clocks, adjusting the increment per clock in hardware accordingly to + * maintain a constant count rate. + */ +static int dra7_init_time(void) +{ + void __iomem *ckgen_prm_base; + void __iomem *rt_ct_base; + unsigned int sys_clksel; + unsigned int num, den, frac1, frac2; + + ckgen_prm_base = ioremap_nocache(DRA7_CKGEN_PRM_BASE, 0x20); + if ( !ckgen_prm_base ) + { + dprintk(XENLOG_ERR, "%s: PRM_BASE ioremap failed\n", __func__); + return -ENOMEM; + } + + sys_clksel = readl(ckgen_prm_base + DRA7_CM_CLKSEL_SYS) & + ~SYS_CLKSEL_MASK; + + iounmap(ckgen_prm_base); + + rt_ct_base = ioremap_nocache(REALTIME_COUNTER_BASE, 0x20); + if ( !rt_ct_base ) + { + dprintk(XENLOG_ERR, "%s: REALTIME_COUNTER_BASE ioremap failed\n", __func__); + return -ENOMEM; + } + + frac1 = readl(rt_ct_base + INCREMENTER_NUMERATOR_OFFSET); + num = frac1 & ~NUMERATOR_DENUMERATOR_MASK; + if ( num_den[sys_clksel][0] != num ) + { + frac1 &= NUMERATOR_DENUMERATOR_MASK; + frac1 |= num_den[sys_clksel][0]; + } + + frac2 = readl(rt_ct_base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET); + den = frac2 & ~NUMERATOR_DENUMERATOR_MASK; + if ( num_den[sys_clksel][1] != num ) + { + frac2 &= NUMERATOR_DENUMERATOR_MASK; + frac2 |= num_den[sys_clksel][1]; + } + + writel(frac1, rt_ct_base + INCREMENTER_NUMERATOR_OFFSET); + writel(frac2 | PRM_FRAC_INCREMENTER_DENUMERATOR_RELOAD, + rt_ct_base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET); + + iounmap(rt_ct_base); + + return 0; +} + +static int __init dra7_smp_init(void) +{ + void __iomem *wugen_base; + + wugen_base = ioremap_nocache(DRA7_WKUPGEN_BASE, PAGE_SIZE); + if ( !wugen_base ) + { + dprintk(XENLOG_ERR, "Unable to map omap5 MMIO\n"); + return -EFAULT; + } +#ifndef NDEBUG + printk("Set AuxCoreBoot1 to %"PRIpaddr" (%p)\n", + __pa(init_secondary), init_secondary); +#endif + writel(__pa(init_secondary), wugen_base + DRA7_AUX_CORE_BOOT_1_OFFSET); +#ifndef NDEBUG + printk("Set AuxCoreBoot0 to 0x20\n"); +#endif + writel(0x20, wugen_base + DRA7_AUX_CORE_BOOT_0_OFFSET); + + iounmap(wugen_base); + + return 0; +} + +static const char const *dra7_dt_compat[] __initdata = +{ + "ti,dra7", + NULL +}; + +static const struct dt_device_match dra7xx_blacklist_dev[] __initconst = +{ + /* OMAP Linux kernel handles devices with status "disabled" in a + * weird manner - tries to reset them. While their memory ranges + * are not mapped, this leads to data aborts, so skip these devices + * from DT for dom0. + */ + DT_MATCH_NOT_AVAILABLE(), + { /* sentinel */ }, +}; + +PLATFORM_START(dra7, "TI DRA7") + .compatible = dra7_dt_compat, + .init_time = dra7_init_time, + .cpu_up = cpu_up_send_sgi, + .smp_init = dra7_smp_init, + + .dom0_gnttab_start = 0x4b000000, + .dom0_gnttab_size = 0x20000, + .blacklist_dev = dra7xx_blacklist_dev, +PLATFORM_END + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/include/asm-arm/platforms/dra7xx.h b/xen/include/asm-arm/platforms/dra7xx.h new file mode 100644 index 0000000..4dec09d --- /dev/null +++ b/xen/include/asm-arm/platforms/dra7xx.h @@ -0,0 +1,163 @@ +#ifndef __ASM_ARM_PLATFORMS_DRA7XX_H +#define __ASM_ASM_PLATFORMS_DRA7XX_H + +#define DRA7_MPU_BOOT_ROM 0x40038000 +#define DRA7_MPU_BOOT_ROM_END 0x40043FFF +#define DRA7_MPU_BOOT_SRAM 0x402F0000 +#define DRA7_MPU_BOOT_SRAM_END 0x402FFFFF +#define DRA7_OCMC_RAM1 0x40300000 +#define DRA7_OCMC_RAM1_END 0x4037FFFF +#define DRA7_OCMC_RAM2 0x40400000 +#define DRA7_OCMC_RAM2_END 0x404FFFFF +#define DRA7_OCMC_RAM3 0x40500000 +#define DRA7_OCMC_RAM3_END 0x405FFFFF +#define DRA7_DSP1_L2_RAM 0x40800000 +#define DRA7_DSP1_L2_RAM_END 0x40847FFF +#define DRA7_DSP1 0x40D00000 +#define DRA7_DSP1_END 0x40D07FFF +#define DRA7_DSP1_EDMA_CC 0x40D10000 +#define DRA7_DSP1_EDMA_CC_END 0x40D17FFF +#define DRA7_DSP1_L1P_CACHE 0x40E00000 +#define DRA7_DSP1_L1P_CACHE_END 0x40E07FFF +#define DRA7_DSP1_L1D_CACHE 0x40F00000 +#define DRA7_DSP1_L1D_CACHE_END 0x40F07FFF +#define DRA7_DSP2_L2_RAM 0x41000000 +#define DRA7_DSP2_L2_RAM_END 0x41047FFF +#define DRA7_DSP2 0x41500000 +#define DRA7_DSP2_END 0x41507FFF +#define DRA7_DSP2_EDMA_CC 0x41510000 +#define DRA7_DSP2_EDMA_CC_END 0x41517FFF +#define DRA7_DSP2_L1P_CACHE 0x41600000 +#define DRA7_DSP2_L1P_CACHE_END 0x41607FFF +#define DRA7_DSP2_L1D_CACHE 0x41700000 +#define DRA7_DSP2_L1D_CACHE_END 0x41707FFF +#define DRA7_OCMC_RAM1_CBUF 0x41800000 +#define DRA7_OCMC_RAM1_CBUF_END 0x41FFFFFF +#define DRA7_EVE1 0x42000000 +#define DRA7_EVE1_END 0x420FFFFF +#define DRA7_EVE2 0x42100000 +#define DRA7_EVE2_END 0x421FFFFF +#define DRA7_EDMA 0x43300000 +#define DRA7_EDMA_END 0x435FFFFF +#define DRA7_L3_MAIN 0x44000000 +#define DRA7_L3_MAIN_END 0x457FFFFF +#define DRA7_MCASP1 0x45800000 +#define DRA7_MCASP1_END 0x45BFFFFF +#define DRA7_MCASP2 0x45C00000 +#define DRA7_MCASP2_END 0x45CFFFFF +#define DRA7_MCASP3 0x46000000 +#define DRA7_MCASP3_END 0x463FFFFF +#define DRA7_VCP1 0x46400000 +#define DRA7_VCP1_END 0x4640FFFF +#define DRA7_VCP2 0x46800000 +#define DRA7_VCP2_END 0x4680FFFF +#define DRA7_MPU_SYS_TRACE 0x47000000 +#define DRA7_MPU_SYS_TRACE_END 0x47FFFFFF +#define DRA7_L4_PER1 0x48000000 +#define DRA7_L4_PER1_END 0x481FFFFF +#define DRA7_MPU_PRM_BASE 0x48243000 +#define DRA7_MPU_PRM_BASE_END 0x48243FFF +#define DRA7_WKUPGEN_BASE 0x48281000 +#define DRA7_WKUPGEN_BASE_END 0x48281FFF +#define DRA7_MPU_CMU 0x48290000 +#define DRA7_MPU_CMU_END 0x4829FFFF +#define DRA7_MPU_AXI2OCP 0x482A0000 +#define DRA7_MPU_AXI2OCP_END 0x482AEFFF +#define DRA7_MPU_MA 0x482AF000 +#define DRA7_MPU_MA_END 0x482AFFFF +#define DRA7_L4_PER2 0x48400000 +#define DRA7_L4_PER2_END 0x487FFFFF +#define DRA7_L4_PER3 0x48800000 +#define DRA7_L4_PER3_END 0x48FFFFFF +#define DRA7_OCMC_RAM2_CBUF 0x49000000 +#define DRA7_OCMC_RAM2_CBUF_END 0x497FFFFF +#define DRA7_OCMC_RAM3_CBUF 0x49800000 +#define DRA7_OCMC_RAM3_CBUF_END 0x49FFFFFF +#define DRA7_L4_CFG 0x4A000000 +#define DRA7_L4_CFG_END 0x4ADFFFFF +#define DRA7_L4_WKUP 0x4AE00000 +#define DRA7_L4_WKUP_END 0x4AFFFFFF +#define DRA7_QSPI_0_SPACE 0x4B300000 +#define DRA7_QSPI_0_SPACE_END 0x4B3FFFFF +#define DRA7_EMIF1_CONFIG 0x4C000000 +#define DRA7_EMIF1_CONFIG_END 0x4CFFFFFF +#define DRA7_EMIF2_CONFIG 0x4D000000 +#define DRA7_EMIF2_CONFIG_END 0x4DFFFFFF +#define DRA7_DMM_CONFIG 0x4E000000 +#define DRA7_DMM_CONFIG_END 0x4FFFFFFF +#define DRA7_GPMC_CONFIG 0x50000000 +#define DRA7_GPMC_CONFIG_END 0x50FFFFFF +#define DRA7_PCIE_SS1 0x51000000 +#define DRA7_PCIE_SS1_END 0x517FFFFF +#define DRA7_PCIE_SS2 0x51800000 +#define DRA7_PCIE_SS2_END 0x51FFFFFF +#define DRA7_L3_INSTR 0x54000000 +#define DRA7_L3_INSTR_END 0x547FFFFF +#define DRA7_DEBUGSS 0x54800000 +#define DRA7_DEBUGSS_END 0x54FFFFFF +#define DRA7_IPU2_TARGET 0x55000000 +#define DRA7_IPU2_TARGET_END 0x557FFFFF +#define DRA7_GPU_3D_DOMAIN 0x56000000 +#define DRA7_GPU_3D_DOMAIN_END 0x57FFFFFF +#define DRA7_DSS_DOMAIN 0x58000000 +#define DRA7_DSS_DOMAIN_END 0x587FFFFF +#define DRA7_BB2D 0x59000000 +#define DRA7_BB2D_END 0x59FFFFFF +#define DRA7_IVA_CONFIG_DOMAIN 0x5A000000 +#define DRA7_IVA_CONFIG_DOMAIN_END 0x5A3FFFFF +#define DRA7_IVA_SL2IF_DOMAIN 0x5B000000 +#define DRA7_IVA_SL2IF_DOMAIN_END 0x5B3FFFFF +#define DRA7_QSPI_1_SPACE 0x5C000000 +#define DRA7_QSPI_1_SPACE_END 0x5FFFFFFF +#define DRA7_SDRAM_DMM 0x60000000 +#define DRA7_SDRAM_DMM_END 0x7FFFFFFF + + +#define DRA7_AUX_CORE_BOOT_0_OFFSET 0x800 +#define DRA7_AUX_CORE_BOOT_1_OFFSET 0x804 + +#define DRA7_L3_PRM_MPU 0x48243000 +#define DRA7_L3_PRM_MPU_S 0x1000 + +#define DRA7_L4CFG_TP_CM_CORE_AON_TARG 0x4A004000 +#define DRA7_L4CFG_TP_CM_CORE_AON_TARG_S 0x1000 + +#define DRA7_L3_WKUGEN_MPU 0x48281000 +#define DRA7_L3_WKUGEN_MPU_S 0x1000 + +#define DRA7_L4CFG_TP_CM_CORE_TARG 0x4a008000 +#define DRA7_L4CFG_TP_CM_CORE_TARG_S 0x2000 + +#define DRA7_L4WKUP_TP_PRM_TARG 0x4AE06000 +#define DRA7_L4WKUP_TP_PRM_TARG_S 0x3000 + +#define DRA7_L4WKUP_TP_SCRM_TARG 0x4AE0A000 +#define DRA7_L4WKUP_TP_SCRM_TARG_S 0x1000 + +#define DRA7_L3_UART3 0x48020000 +#define DRA7_L3_UART3_S 0x1000 + +#define DRA7_L3_UART1 0x4806A000 +#define DRA7_L3_UART1_S 0x1000 + +#define REALTIME_COUNTER_BASE 0x48243200 +#define INCREMENTER_NUMERATOR_OFFSET 0x10 +#define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14 +#define NUMERATOR_DENUMERATOR_MASK 0xfffff000 +#define PRM_FRAC_INCREMENTER_DENUMERATOR_RELOAD 0x00010000 + +#define DRA7_CKGEN_PRM_BASE DRA7_L4WKUP_TP_PRM_TARG + 0x100 +#define DRA7_CM_CLKSEL_SYS 0x10 +#define SYS_CLKSEL_MASK 0xfffffff8 + + +#endif /* __ASM_ARM_PLATFORMS_DRA7XX_H */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |