arm: socfpga: stratix10: Add SOCFPGA Stratix10 base address
Subsystems (5)
PATCH v4 18/29 arm: socfpga: stratix10: Add SOCFPGA Stratix10 base address
From: Tien Fong Chee <[email protected]>
Add base address header file for Stratix10 SoC
--- arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 48 ++++++++++++++++++++ 1 files changed, 48 insertions(+), 0 deletions(-) create mode 100755 arch/arm/mach-socfpga/include/mach/base_addr_s10.h
arch/arm/mach-socfpga/include/mach/base_addr_s10.h new file +48 -0
@@ -0,0 +1,48 @@ +/* +* Copyright (C) 2016, Intel Corporation +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _SOCFPGA_S10_BASE_HARDWARE_H_ +#define _SOCFPGA_S10_BASE_HARDWARE_H_ + +#define SOCFPGA_SMMU_ADDRESS 0xfa000000 +#define SOCFPGA_EMAC0_ADDRESS 0xff800000 +#define SOCFPGA_EMAC1_ADDRESS 0xff802000 +#define SOCFPGA_EMAC2_ADDRESS 0xff804000 +#define SOCFPGA_SDMMC_ADDRESS 0xff808000 +#define SOCFPGA_USB0_ADDRESS 0xffb00000 +#define SOCFPGA_USB1_ADDRESS 0xffb40000 +#define SOCFPGA_NANDREGS_ADDRESS 0xffb80000 +#define SOCFPGA_NANDDATA_ADDRESS 0xffb90000 +#define SOCFPGA_UART0_ADDRESS 0xffc02000 +#define SOCFPGA_UART1_ADDRESS 0xffc02100 +#define SOCFPGA_I2C0_ADDRESS 0xffc02800 +#define SOCFPGA_I2C1_ADDRESS 0xffc02900 +#define SOCFPGA_I2C2_ADDRESS 0xffc02a00 +#define SOCFPGA_I2C3_ADDRESS 0xffc02b00 +#define SOCFPGA_I2C4_ADDRESS 0xffc02c00 +#define SOCFPGA_SPTIMER0_ADDRESS 0xffc03000 +#define SOCFPGA_SPTIMER1_ADDRESS 0xffc03100 +#define SOCFPGA_GPIO0_ADDRESS 0xffc03200 +#define SOCFPGA_GPIO1_ADDRESS 0xffc03300 +#define SOCFPGA_SYSTIMER0_ADDRESS 0xffd00000 +#define SOCFPGA_SYSTIMER0_ADDRESS 0xffd00100 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00200 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00300 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00400 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00500 +#define SOCFPGA_CLKMGR_ADDRESS 0xffd10000 +#define SOCFPGA_RSTMGR_ADDRESS 0xffd11000 +#define SOCFPGA_SYSMGR_ADDRESS 0xffd12000 +#define SOCFPGA_PINMUX_DEDICATED_IO_ADDRESS 0xffd13000 +#define SOCFPGA_DMANONSECURE_ADDRESS 0xffda0000 +#define SOCFPGA_DMASECURE_ADDRESS 0xffda1000 +#define SOCFPGA_SPIS0_ADDRESS 0xffda2000 +#define SOCFPGA_SPIS1_ADDRESS 0xffda3000 +#define SOCFPGA_SPIM0_ADDRESS 0xffda4000 +#define SOCFPGA_SPIM1_ADDRESS 0xffda5000 +#define SOCFPGA_OCRAM_ADDRESS 0xffe00000 + +#endif /* _SOCFPGA_S10_BASE_HARDWARE_H_ */
Signature · 1 line
1.7.7.4
PATCH v4 19/29 ARM:dts: Added device tree for socfpga arria10 development kit sdmmc
From: Tien Fong Chee <[email protected]>
This is initial version of device tree for the Intel socfpga arria10 development kit with sdmmc.
--- arch/arm/dts/Makefile | 3 +- arch/arm/dts/socfpga_arria10.dtsi | 859 ++++++++++++++++++++ arch/arm/dts/socfpga_arria10_socdk_sdmmc.dts | 30 + .../dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi | 479 +++++++++++ 4 files changed, 1370 insertions(+), 1 deletions(-) create mode 100644 arch/arm/dts/socfpga_arria10.dtsi create mode 100644 arch/arm/dts/socfpga_arria10_socdk_sdmmc.dts create mode 100644 arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi
arch/arm/dts/Makefile +2 -1
@@ -137,7 +137,8 @@ dtb-$(CONFIG_ARCH_SOCFPGA) += \ socfpga_cyclone5_sockit.dtb \ socfpga_cyclone5_socrates.dtb \ socfpga_cyclone5_sr1500.dtb \ - socfpga_cyclone5_vining_fpga.dtb + socfpga_cyclone5_vining_fpga.dtb \ + socfpga_arria10_socdk_sdmmc.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \ dra72-evm-revc.dtb dra71-evm.dtb
arch/arm/dts/socfpga_arria10.dtsi new file +859 -0
859 lines not on this page · raw message
arch/arm/dts/socfpga_arria10_socdk_sdmmc.dts new file +30 -0
@@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016 Intel Corporation + * + * SPDX-License-Identifier: GPL-2.0 + */ + +/dts-v1/; +#include "socfpga_arria10_socdk_sdmmc_handoff.dtsi" + +/ { + chosen { + bootargs = "console=ttyS0,115200"; + }; +}; + +&uart1 { + u-boot,dm-pre-reloc; + status = "okay"; +}; + +&mmc { + u-boot,dm-pre-reloc; + status = "okay"; + num-slots = <1>; + cap-sd-highspeed; + broken-cd; + bus-width = <4>; + altr,dw-mshc-ciu-div = <3>; + altr,dw-mshc-sdr-timing = <0 3>; +};
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi new file +479 -0
479 lines not on this page · raw message
Signature · 1 line
1.7.7.4
PATCH v4 20/29 arm: socfpga: arria10: Enable SPL for Arria 10
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
This patch enables SPL build and implementation for Arria 10.
--- arch/arm/Kconfig | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/Kconfig +2 -2
@@ -561,9 +561,9 @@ config ARCH_SNAPDRAGON config ARCH_SOCFPGA bool "Altera SOCFPGA family" select CPU_V7 - select SUPPORT_SPL if !TARGET_SOCFPGA_ARRIA10 + select SUPPORT_SPL select OF_CONTROL - select SPL_OF_CONTROL if !TARGET_SOCFPGA_ARRIA10 + select SPL_OF_CONTROL select DM select DM_SPI_FLASH select DM_SPI
Signature · 1 line
1.7.7.4
PATCH v4 21/29 arm: socfpga: arria10: Added clock manager and pin mux compat macro
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
These compat macros would be used by clock manager and pin mux drivers to look the required HW info from DTS for hardware initialization.
--- include/fdtdec.h | 8 ++++++++ lib/fdtdec.c | 8 ++++++++ 2 files changed, 16 insertions(+), 0 deletions(-)
include/fdtdec.h +8 -0
@@ -155,6 +155,14 @@ enum fdt_compat_id {COMPAT_INTEL_BAYTRAIL_FSP_MDP ,/* Intel FSP memory-down params */ COMPAT_INTEL_IVYBRIDGE_FSP ,/* Intel Ivy Bridge FSP */ COMPAT_SUNXI_NAND ,/* SUNXI NAND controller */ +COMPAT_ALTERA_SOCFPGA_CLK ,/* SoCFPGA Clock initialization */ +COMPAT_ALTERA_SOCFPGA_PINCTRL_SINGLE ,/* pinctrl-single */ +COMPAT_ALTERA_SOCFPGA_H2F_BRG ,/* Arria10 hps2fpga bridge */ +COMPAT_ALTERA_SOCFPGA_LWH2F_BRG ,/* Arria10 lwhps2fpga bridge */ +COMPAT_ALTERA_SOCFPGA_F2H_BRG ,/* Arria10 fpga2hps bridge */ +COMPAT_ALTERA_SOCFPGA_F2SDR0 ,/* Arria10 fpga2SDRAM0 bridge */ +COMPAT_ALTERA_SOCFPGA_F2SDR1 ,/* Arria10 fpga2SDRAM1 bridge */ +COMPAT_ALTERA_SOCFPGA_F2SDR2 ,/* Arria10 fpga2SDRAM2 bridge */ COMPAT_COUNT, };
lib/fdtdec.c +8 -0
@@ -66,6 +66,14 @@ static const char * const compat_names[COMPAT_COUNT] = {COMPAT (INTEL_BAYTRAIL_FSP_MDP ,"intel,baytrail-fsp-mdp" ),COMPAT (INTEL_IVYBRIDGE_FSP ,"intel,ivybridge-fsp" ),COMPAT (COMPAT_SUNXI_NAND ,"allwinner,sun4i-a10-nand" ), +COMPAT (ALTERA_SOCFPGA_CLK ,"altr,clk-mgr" ), +COMPAT (ALTERA_SOCFPGA_PINCTRL_SINGLE ,"pinctrl-single" ), +COMPAT (ALTERA_SOCFPGA_H2F_BRG ,"altr,socfpga-hps2fpga-bridge" ), +COMPAT (ALTERA_SOCFPGA_LWH2F_BRG ,"altr,socfpga-lwhps2fpga-bridge" ), +COMPAT (ALTERA_SOCFPGA_F2H_BRG ,"altr,socfpga-fpga2hps-bridge" ), +COMPAT (ALTERA_SOCFPGA_F2SDR0 ,"altr,socfpga-fpga2sdram0-bridge" ), +COMPAT (ALTERA_SOCFPGA_F2SDR1 ,"altr,socfpga-fpga2sdram1-bridge" ), + COMPAT(ALTERA_SOCFPGA_F2SDR2, "altr,socfpga-fpga2sdram2-bridge"), };const char *fdtdec_get_compatible (enum fdt_compat_id id)
Signature · 1 line
1.7.7.4
PATCH v4 22/29 arm: socfpga: arria10: Added some hardware base address for Arria 10
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
--- arch/arm/mach-socfpga/include/mach/base_addr_a10.h | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)
arch/arm/mach-socfpga/include/mach/base_addr_a10.h +4 -1
@@ -1,5 +1,5 @@/* -* Copyright (C) 2014 Altera Corporation <www.altera.com> +* Copyright (C) 2014-2016 Altera Corporation <www.altera.com> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -36,10 +36,13 @@#define SOCFPGA_ECC_OCRAM_ADDRESS 0xff8c3000#define SOCFPGA_UART0_ADDRESS 0xffc02000#define SOCFPGA_OSC1TIMER0_ADDRESS 0xffd00000 +#define SOCFPGA_OSC1TIMER1_ADDRESS 0xffd00100#define SOCFPGA_CLKMGR_ADDRESS 0xffd04000#define SOCFPGA_RSTMGR_ADDRESS 0xffd05000#define SOCFPGA_SDR_ADDRESS 0xffcfb000 +#define SOCFPGA_NOC_L4_PRIV_FLT_OFST 0xffd11000 +#define SOCFPGA_NOC_FW_H2F_SCR_OFST 0xffd13500#define SOCFPGA_SDR_SCHEDULER_ADDRESS 0xffd12400#define SOCFPGA_SDR_FIREWALL_OCRAM_ADDRESS 0xffd13200#define SOCFPGA_SDR_FIREWALL_MPU_FPGA_ADDRESS 0xffd13300
Signature · 1 line
1.7.7.4
PATCH v4 23/29 arm: socfpga: arria10: Added support for Arria 10 socdk
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
--- arch/arm/mach-socfpga/system_manager.c | 4 ++- drivers/fpga/socfpga.c | 7 +++- include/configs/socfpga_arria10_socdk.h | 56 +++++++++++++++++++------------ include/configs/socfpga_common.h | 33 ++++++++++++++++-- 4 files changed, 71 insertions(+), 29 deletions(-)
arch/arm/mach-socfpga/system_manager.c +3 -1
@@ -1,5 +1,5 @@/* -* Copyright (C) 2013 Altera Corporation <www.altera.com> +* Copyright (C) 2013-2016 Altera Corporation <www.altera.com> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -11,8 +11,10 @@DECLARE_GLOBAL_DATA_PTR ; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )static struct socfpga_system_manager *sysmgr_regs = (struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS ; +#endif /* * Populate the value for SYSMGR.FPGAINTF.MODULE based on pinmux setting.
drivers/fpga/socfpga.c +5 -2
@@ -1,5 +1,5 @@/* -* Copyright (C) 2012 Altera Corporation <www.altera.com> +* Copyright (C) 2012-2016 Altera Corporation <www.altera.com> * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause
@@ -19,8 +19,10 @@ DECLARE_GLOBAL_DATA_PTR;static struct socfpga_fpga_manager *fpgamgr_regs = (struct socfpga_fpga_manager *)SOCFPGA_FPGAMGRREGS_ADDRESS ; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )static struct socfpga_system_manager *sysmgr_regs = (struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS ; +#endif /* Set CD ratio */ static void fpgamgr_set_cd_ratio (unsigned long ratio)
@@ -267,9 +269,10 @@ int socfpga_load(Altera_desc *desc, const void *rbf_data, size_t rbf_size) }/* Prior programming the FPGA, all bridges need to be shut off */ - +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )/* Disable all signals from hps peripheral controller to fpga */ writel (0 , &sysmgr_regs->fpgaintfgrp_module); +#endif /* Disable all signals from FPGA to HPS SDRAM */ #define SDR_CTRLGRP_FPGAPORTRST_ADDRESS 0x5080
include/configs/socfpga_arria10_socdk.h +34 -22
100 lines not on this page · raw message
include/configs/socfpga_common.h +29 -4
@@ -15,7 +15,9 @@* High level configuration */ #define CONFIG_DISPLAY_BOARDINFO_LATE +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )#define CONFIG_ARCH_MISC_INIT +#endif #define CONFIG_ARCH_EARLY_INIT_R #define CONFIG_SYS_NO_FLASH #define CONFIG_CLOCKS
@@ -37,9 +39,13 @@#define CONFIG_SYS_MALLOC_LEN (64 * 1024 * 1024)#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM_1#define CONFIG_SYS_MEMTEST_END PHYS_SDRAM_1_SIZE - +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )#define CONFIG_SYS_INIT_RAM_ADDR 0xFFFF0000#define CONFIG_SYS_INIT_RAM_SIZE 0x10000 +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#define CONFIG_SYS_INIT_RAM_ADDR 0xFFE00000 +#define CONFIG_SYS_INIT_RAM_SIZE 0x40000/* 256KB */ +#endif #define CONFIG_SYS_INIT_SP_OFFSET \ (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)#define CONFIG_SYS_INIT_SP_ADDR \
@@ -213,11 +219,14 @@ unsigned int cm_get_qspi_controller_clk_hz(void);*/ #define CONFIG_SYS_NS16550_SERIAL #define CONFIG_SYS_NS16550_REG_SIZE -4 -#define CONFIG_SYS_NS16550_COM1 SOCFPGA_UART0_ADDRESS#ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET #define CONFIG_SYS_NS16550_CLK 1000000 -#else +#elif defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +#define CONFIG_SYS_NS16550_COM1 SOCFPGA_UART0_ADDRESS#define CONFIG_SYS_NS16550_CLK 100000000 +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#define CONFIG_SYS_NS16550_COM1 SOCFPGA_UART1_ADDRESS +#define CONFIG_SYS_NS16550_CLK 50000000#endif #define CONFIG_CONS_INDEX 1#define CONFIG_BAUDRATE 115200
@@ -295,23 +304,39 @@ unsigned int cm_get_qspi_controller_clk_hz(void);/* * SPL * -* SRAM Memory layout: +* SRAM Memory layout(TARGET_SOCFPGA_GEN5): * * 0xFFFF_0000 ...... Start of SRAM * 0xFFFF_xxxx ...... Top of stack (grows down) * 0xFFFF_yyyy ...... Malloc area * 0xFFFF_zzzz ...... Global Data * 0xFFFF_FF00 ...... End of SRAM +* +* SRAM Memory layout(TARGET_SOCFPGA_ARRIA10): +* +* 0xFFE0_0000 ...... Start of SRAM +* 0xFFE0_xxxx ...... Top of stack (grows down) +* 0xFFE0_yyyy ...... Malloc area +* 0xFFE0_zzzz ...... Global Data +* 0xFFE3_FFFF ...... End of SRAM */ #define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_RAM_DEVICE #define CONFIG_SPL_TEXT_BASE CONFIG_SYS_INIT_RAM_ADDR +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )#define CONFIG_SPL_MAX_SIZE (64 * 1024) +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#define CONFIG_SPL_MAX_SIZE CONFIG_SYS_INIT_RAM_SIZE +#endif /* SPL SDMMC boot support */ #ifdef CONFIG_SPL_MMC_SUPPORT #if defined(CONFIG_SPL_FAT_SUPPORT ) || defined(CONFIG_SPL_EXT_SUPPORT ) +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 2 +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1 +#endif #define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME "u-boot-dtb.img"#else #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
Signature · 1 line
1.7.7.4
PATCH v4 24/29 arm: socfpga: arria10: Added drivers for Arria10 Reset Manager
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
Drivers for reset manager is restructured such that common functions, gen5 drivers and Arria10 drivers are moved to reset_manager.c, reset_manager_gen5.c and reset_manager_arria10.c respectively.
---
arch/arm/mach-socfpga/Makefile | 16 +-
arch/arm/mach-socfpga/include/mach/reset_manager.h | 155 ++++++--
arch/arm/mach-socfpga/reset_manager.c | 112 +------
arch/arm/mach-socfpga/reset_manager_arria10.c | 407 ++++++++++++++++++++
.../{reset_manager.c => reset_manager_gen5.c} | 94 ++---
5 files changed, 570 insertions(+), 214 deletions(-)
create mode 100644 arch/arm/mach-socfpga/reset_manager_arria10.c
copy arch/arm/mach-socfpga/{reset_manager.c => reset_manager_gen5.c} (58%)arch/arm/mach-socfpga/Makefile +11 -5
@@ -2,21 +2,27 @@ # (C) Copyright 2000-2003 # Wolfgang Denk, DENX Software Engineering, wd at denx.de. # -# Copyright (C) 2012 Altera Corporation <www.altera.com> +# Copyright (C) 2012-2016 Altera Corporation <www.altera.com> # # SPDX-License-Identifier: GPL-2.0+ # obj-y += misc.o timer.o reset_manager.o system_manager.o clock_manager.o \ fpga_manager.o board.o +obj-$(CONFIG_TARGET_SOCFPGA_ARRIA10) += reset_manager_arria10.o +obj-$(CONFIG_TARGET_SOCFPGA_GEN5) += scan_manager.o wrap_pll_config.o \ + reset_manager_gen5.o -obj-$(CONFIG_SPL_BUILD) += spl.o freeze_controller.o +ifdef CONFIG_SPL_BUILD +obj-y += spl.o +obj-$(CONFIG_TARGET_SOCFPGA_GEN5) += freeze_controller.o wrap_iocsr_config.o \ + wrap_pinmux_config.o wrap_sdram_config.o +endif +ifdef CONFIG_TARGET_SOCFPGA_GEN5 # QTS-generated config file wrappers -obj-$(CONFIG_TARGET_SOCFPGA_GEN5) += scan_manager.o wrap_pll_config.o -obj-$(CONFIG_SPL_BUILD) += wrap_iocsr_config.o wrap_pinmux_config.o \ - wrap_sdram_config.o CFLAGS_wrap_iocsr_config.o += -I$(srctree)/board/$(BOARDDIR) CFLAGS_wrap_pinmux_config.o += -I$(srctree)/board/$(BOARDDIR) CFLAGS_wrap_pll_config.o += -I$(srctree)/board/$(BOARDDIR) CFLAGS_wrap_sdram_config.o += -I$(srctree)/board/$(BOARDDIR) +endif
arch/arm/mach-socfpga/include/mach/reset_manager.h +117 -38
188 lines not on this page · raw message
arch/arm/mach-socfpga/reset_manager.c +1 -111
131 lines not on this page · raw message
arch/arm/mach-socfpga/reset_manager_arria10.c new file +407 -0
407 lines not on this page · raw message
arch/arm/mach-socfpga/reset_manager_gen5.c renamed from arch/arm/mach-socfpga/reset_manager.c +34 -60
137 lines not on this page · raw message
Signature · 1 line
1.7.7.4
PATCH v4 25/29 arm: socfpga: arria10: Added miscellaneous drivers for Arria 10
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
The drivers is restructured such common functions, gen5 functions. and arria10 functions are moved to misc.c, misc_gen5 and misc_arria10 respectively.
---
arch/arm/mach-socfpga/Makefile | 6 +-
arch/arm/mach-socfpga/include/mach/misc.h | 32 ++
arch/arm/mach-socfpga/misc.c | 427 +------------------------
arch/arm/mach-socfpga/misc_arria10.c | 255 +++++++++++++++
arch/arm/mach-socfpga/{misc.c => misc_gen5.c} | 232 ++------------
5 files changed, 337 insertions(+), 615 deletions(-)
create mode 100644 arch/arm/mach-socfpga/include/mach/misc.h
create mode 100644 arch/arm/mach-socfpga/misc_arria10.c
copy arch/arm/mach-socfpga/{misc.c => misc_gen5.c} (66%)arch/arm/mach-socfpga/Makefile +4 -2
@@ -9,9 +9,11 @@ obj-y += misc.o timer.o reset_manager.o system_manager.o clock_manager.o \ fpga_manager.o board.o -obj-$(CONFIG_TARGET_SOCFPGA_ARRIA10) += reset_manager_arria10.o +obj-$(CONFIG_TARGET_SOCFPGA_ARRIA10) += reset_manager_arria10.o misc_arria10.o \ + clock_manager_arria10.o pinmux.o obj-$(CONFIG_TARGET_SOCFPGA_GEN5) += scan_manager.o wrap_pll_config.o \ - reset_manager_gen5.o + reset_manager_gen5.o misc_gen5.o \ + clock_manager_gen5.o ifdef CONFIG_SPL_BUILD obj-y += spl.o
arch/arm/mach-socfpga/include/mach/misc.h new file +32 -0
@@ -0,0 +1,32 @@ +/* +* Copyright (C) 2016, Intel Corporation +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _MISC_H_ +#define _MISC_H_ + +extern void dwmac_deassert_reset (const unsigned int of_reset_id, +const u32 phymode); + +struct bsel { +const char *mode; +const char *name; +}; + +extern struct bsel bsel_str[]; + +#ifdef CONFIG_FPGA +extern void socfpga_fpga_add (void ); +#else +inline void socfpga_fpga_add (void ) {} +#endif + +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +unsigned int dedicated_uart_com_port (const void *blob); +unsigned int shared_uart_com_port (const void *blob); +unsigned int uart_com_port (const void *blob); +#endif + +#endif /* _MISC_H_ */
arch/arm/mach-socfpga/misc.c +15 -412
472 lines not on this page · raw message
arch/arm/mach-socfpga/misc_arria10.c new file +255 -0
255 lines not on this page · raw message
arch/arm/mach-socfpga/misc_gen5.c renamed from arch/arm/mach-socfpga/misc.c +31 -201
320 lines not on this page · raw message
Signature · 1 line
1.7.7.4
PATCH v4 26/29 arm: socfpga: arria10: Added drivers for Arria10 clock manager
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
The drivers is restructured such common functions, gen5 functions, and arria10 functions are moved to clock_manager.c, clock_manager_gen5 and clock_manager_arria10 respectively.
---
arch/arm/mach-socfpga/clock_manager.c | 752 +++++++---------
arch/arm/mach-socfpga/clock_manager_arria10.c | 954 ++++++++++++++++++++
.../{clock_manager.c => clock_manager_gen5.c} | 240 +-----
arch/arm/mach-socfpga/include/mach/clock_manager.h | 356 ++++++--
4 files changed, 1573 insertions(+), 729 deletions(-)
create mode 100644 arch/arm/mach-socfpga/clock_manager_arria10.c
copy arch/arm/mach-socfpga/{clock_manager.c => clock_manager_gen5.c} (62%)arch/arm/mach-socfpga/clock_manager.c +317 -435
@@ -1,5 +1,5 @@/* -* Copyright (C) 2013 Altera Corporation <www.altera.com> +* Copyright (C) 2013-2016 Altera Corporation <www.altera.com> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -7,416 +7,287 @@#include <common.h> #include <asm/io.h> #include <asm/arch/clock_manager.h> +#include <fdtdec.h> DECLARE_GLOBAL_DATA_PTR ; +/* Function prototypes */ +/* Common prototypes */ +unsigned int cm_get_l4_sp_clk_hz (void ); +unsigned int cm_get_qspi_controller_clk_hz (void ); +unsigned int cm_get_mmc_controller_clk_hz (void ); +unsigned int cm_get_spi_controller_clk_hz (void ); +static void cm_print_clock_quick_summary (void ); +int do_showclocks (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]); +void cm_wait_for_lock (uint32_t mask); +void cm_wait_for_fsm (void ); +unsigned int cm_get_main_vco_clk_hz (void ); +unsigned int cm_get_per_vco_clk_hz (void ); +unsigned long cm_get_mpu_clk_hz (void ); +static const struct socfpga_clock_manager *clock_manager_base = (struct socfpga_clock_manager *)SOCFPGA_CLKMGR_ADDRESS ; -static void cm_wait_for_lock (uint32_t mask) +/* Common functions */ +int set_cpu_clk_info (void ) { - registeruint32_t inter_val; -uint32_t retry =0 ; -do { - inter_val =readl (&clock_manager_base->inter) & mask; -if (inter_val == mask) - retry++; -else - retry =0 ; -if (retry >=10 ) -break ; - }while (1 ); -} +/* Calculate the clock frequencies required for drivers */ +cm_get_l4_sp_clk_hz (); +cm_get_mmc_controller_clk_hz (); -/* function to poll in the fsm busy bit */ -static void cm_wait_for_fsm (void ) -{ -while (readl (&clock_manager_base->stat) &CLKMGR_STAT_BUSY ) - ; -} + gd->bd->bi_arm_freq =cm_get_mpu_clk_hz () /1000000 ; + gd->bd->bi_dsp_freq =0 ; -/* -* function to write the bypass register which requires a poll of the -* busy bit -*/ -static void cm_write_bypass (uint32_t val) -{ -writel (val, &clock_manager_base->bypass); -cm_wait_for_fsm (); -} +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) + gd->bd->bi_ddr_freq =cm_get_sdram_clk_hz () /1000000 ; +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + gd->bd->bi_ddr_freq =0 ; +#endif -/* function to write the ctrl register which requires a poll of the busy bit */ -static void cm_write_ctrl (uint32_t val) -{ -writel (val, &clock_manager_base->ctrl); -cm_wait_for_fsm (); +return 0 ; } -/* function to write a clock register that has phase information */ -static void cm_write_with_phase (uint32_t value, -uint32_t reg_address,uint32_t mask) +unsigned int cm_get_spi_controller_clk_hz (void ) { -/* poll until phase is zero */ -while (readl (reg_address) & mask) - ; +uint32_t clock =0 ; -writel (value, reg_address); +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +uint32_t reg; + clock =cm_get_per_vco_clk_hz (); -while (readl (reg_address) & mask) - ; -} +/* get the clock prior L4 SP divider (periph_base_clk) */ + reg =readl (&clock_manager_base->per_pll.perbaseclk); + clock /= (reg +1 ); +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + clock =cm_get_l4_noc_hz (CLKMGR_MAINPLL_NOCDIV_L4MPCLK_LSB ); +#endif -/* -* Setup clocks while making no assumptions about previous state of the clocks. -* -* Start by being paranoid and gate all sw managed clocks -* Put all plls in bypass -* Put all plls VCO registers back to reset value (bandgap power down). -* Put peripheral and main pll src to reset value to avoid glitch. -* Delay 5 us. -* Deassert bandgap power down and set numerator and denominator -* Start 7 us timer. -* set internal dividers -* Wait for 7 us timer. -* Enable plls -* Set external dividers while plls are locking -* Wait for pll lock -* Assert/deassert outreset all. -* Take all pll's out of bypass -* Clear safe mode -* set source main and peripheral clocks -* Ungate clocks -*/ +return clock; +} -void cm_basic_init (const struct cm_config *const cfg) +unsigned int cm_get_qspi_controller_clk_hz (void ) { -unsigned long end; - -/* Start by being paranoid and gate all sw managed clocks */ - -/* -* We need to disable nandclk -* and then do another apb access before disabling -* gatting off the rest of the periperal clocks. -*/ -writel (~CLKMGR_PERPLLGRP_EN_NANDCLK_MASK & -readl (&clock_manager_base->per_pll.en), - &clock_manager_base->per_pll.en); - -/* DO NOT GATE OFF DEBUG CLOCKS & BRIDGE CLOCKS */ -writel (CLKMGR_MAINPLLGRP_EN_DBGTIMERCLK_MASK | -CLKMGR_MAINPLLGRP_EN_DBGTRACECLK_MASK | -CLKMGR_MAINPLLGRP_EN_DBGCLK_MASK | -CLKMGR_MAINPLLGRP_EN_DBGATCLK_MASK | -CLKMGR_MAINPLLGRP_EN_S2FUSER0CLK_MASK | -CLKMGR_MAINPLLGRP_EN_L4MPCLK_MASK , - &clock_manager_base->main_pll.en); - -writel (0 , &clock_manager_base->sdr_pll.en); - -/* now we can gate off the rest of the peripheral clocks */ -writel (0 , &clock_manager_base->per_pll.en); - -/* Put all plls in bypass */ -cm_write_bypass (CLKMGR_BYPASS_PERPLL |CLKMGR_BYPASS_SDRPLL | -CLKMGR_BYPASS_MAINPLL ); - -/* Put all plls VCO registers back to reset value. */ -writel (CLKMGR_MAINPLLGRP_VCO_RESET_VALUE & - ~CLKMGR_MAINPLLGRP_VCO_REGEXTSEL_MASK , - &clock_manager_base->main_pll.vco); -writel (CLKMGR_PERPLLGRP_VCO_RESET_VALUE & - ~CLKMGR_PERPLLGRP_VCO_REGEXTSEL_MASK , - &clock_manager_base->per_pll.vco); -writel (CLKMGR_SDRPLLGRP_VCO_RESET_VALUE & - ~CLKMGR_SDRPLLGRP_VCO_REGEXTSEL_MASK , - &clock_manager_base->sdr_pll.vco); - -/* -* The clocks to the flash devices and the L4_MAIN clocks can -* glitch when coming out of safe mode if their source values -* are different from their reset value. So the trick it to -* put them back to their reset state, and change input -* after exiting safe mode but before ungating the clocks. -*/ -writel (CLKMGR_PERPLLGRP_SRC_RESET_VALUE , - &clock_manager_base->per_pll.src); -writel (CLKMGR_MAINPLLGRP_L4SRC_RESET_VALUE , - &clock_manager_base->main_pll.l4src); - -/* read back for the required 5 us delay. */ -readl (&clock_manager_base->main_pll.vco); -readl (&clock_manager_base->per_pll.vco); -readl (&clock_manager_base->sdr_pll.vco); - - -/* -* We made sure bgpwr down was assert for 5 us. Now deassert BG PWR DN -* with numerator and denominator. -*/ -writel (cfg->main_vco_base, &clock_manager_base->main_pll.vco); -writel (cfg->peri_vco_base, &clock_manager_base->per_pll.vco); -writel (cfg->sdram_vco_base, &clock_manager_base->sdr_pll.vco); - -/* -* Time starts here. Must wait 7 us from -* BGPWRDN_SET(0) to VCO_ENABLE_SET(1). -*/ - end =timer_get_us () +7 ; - -/* main mpu */ -writel (cfg->mpuclk, &clock_manager_base->main_pll.mpuclk); - -/* main main clock */ -writel (cfg->mainclk, &clock_manager_base->main_pll.mainclk); - -/* main for dbg */ -writel (cfg->dbgatclk, &clock_manager_base->main_pll.dbgatclk); - -/* main for cfgs2fuser0clk */ -writel (cfg->cfg2fuser0clk, - &clock_manager_base->main_pll.cfgs2fuser0clk); - -/* Peri emac0 50 MHz default to RMII */ -writel (cfg->emac0clk, &clock_manager_base->per_pll.emac0clk); - -/* Peri emac1 50 MHz default to RMII */ -writel (cfg->emac1clk, &clock_manager_base->per_pll.emac1clk); - -/* Peri QSPI */ -writel (cfg->mainqspiclk, &clock_manager_base->main_pll.mainqspiclk); - -writel (cfg->perqspiclk, &clock_manager_base->per_pll.perqspiclk); - -/* Peri pernandsdmmcclk */ -writel (cfg->mainnandsdmmcclk, - &clock_manager_base->main_pll.mainnandsdmmcclk); - -writel (cfg->pernandsdmmcclk, - &clock_manager_base->per_pll.pernandsdmmcclk); - -/* Peri perbaseclk */ -writel (cfg->perbaseclk, &clock_manager_base->per_pll.perbaseclk); - -/* Peri s2fuser1clk */ -writel (cfg->s2fuser1clk, &clock_manager_base->per_pll.s2fuser1clk); - -/* 7 us must have elapsed before we can enable the VCO */ -while (timer_get_us () < end) - ; - -/* Enable vco */ -/* main pll vco */ -writel (cfg->main_vco_base |CLKMGR_MAINPLLGRP_VCO_EN , - &clock_manager_base->main_pll.vco); +uint32_t clock =0 ; -/* periferal pll */ -writel (cfg->peri_vco_base |CLKMGR_MAINPLLGRP_VCO_EN , - &clock_manager_base->per_pll.vco); - -/* sdram pll vco */ -writel (cfg->sdram_vco_base |CLKMGR_MAINPLLGRP_VCO_EN , - &clock_manager_base->sdr_pll.vco); - -/* L3 MP and L3 SP */ -writel (cfg->maindiv, &clock_manager_base->main_pll.maindiv); - -writel (cfg->dbgdiv, &clock_manager_base->main_pll.dbgdiv); - -writel (cfg->tracediv, &clock_manager_base->main_pll.tracediv); - -/* L4 MP, L4 SP, can0, and can1 */ -writel (cfg->perdiv, &clock_manager_base->per_pll.div); - -writel (cfg->gpiodiv, &clock_manager_base->per_pll.gpiodiv); - -#define LOCKED_MASK \ - (CLKMGR_INTER_SDRPLLLOCKED_MASK | \ - CLKMGR_INTER_PERPLLLOCKED_MASK | \ - CLKMGR_INTER_MAINPLLLOCKED_MASK) - -cm_wait_for_lock (LOCKED_MASK ); - -/* write the sdram clock counters before toggling outreset all */ -writel (cfg->ddrdqsclk &CLKMGR_SDRPLLGRP_DDRDQSCLK_CNT_MASK , - &clock_manager_base->sdr_pll.ddrdqsclk); +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +uint32_t reg; +/* identify the source of QSPI clock */ + reg =readl (&clock_manager_base->per_pll.src); + reg = (reg &CLKMGR_PERPLLGRP_SRC_QSPI_MASK ) >> +CLKMGR_PERPLLGRP_SRC_QSPI_OFFSET ; -writel (cfg->ddr2xdqsclk &CLKMGR_SDRPLLGRP_DDR2XDQSCLK_CNT_MASK , - &clock_manager_base->sdr_pll.ddr2xdqsclk); +if (reg ==CLKMGR_QSPI_CLK_SRC_F2S ) { + clock =cm_get_f2s_per_ref_clk_hz (); + }else if (reg ==CLKMGR_QSPI_CLK_SRC_MAIN ) { + clock =cm_get_main_vco_clk_hz (); -writel (cfg->ddrdqclk &CLKMGR_SDRPLLGRP_DDRDQCLK_CNT_MASK , - &clock_manager_base->sdr_pll.ddrdqclk); +/* get the qspi clock */ + reg =readl (&clock_manager_base->main_pll.mainqspiclk); + clock /= (reg +1 ); + }else if (reg ==CLKMGR_QSPI_CLK_SRC_PER ) { + clock =cm_get_per_vco_clk_hz (); -writel (cfg->s2fuser2clk &CLKMGR_SDRPLLGRP_S2FUSER2CLK_CNT_MASK , - &clock_manager_base->sdr_pll.s2fuser2clk); +/* get the qspi clock */ + reg =readl (&clock_manager_base->per_pll.perqspiclk); + clock /= (reg +1 ); + } +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + clock =cm_get_l4_noc_hz (CLKMGR_MAINPLL_NOCDIV_L4MAINCLK_LSB ); +#endif -/* -* after locking, but before taking out of bypass -* assert/deassert outresetall -*/ -uint32_t mainvco =readl (&clock_manager_base->main_pll.vco); +return clock; +} -/* assert main outresetall */ -writel (mainvco |CLKMGR_MAINPLLGRP_VCO_OUTRESETALL_MASK , - &clock_manager_base->main_pll.vco); +void cm_wait_for_lock (uint32_t mask) +{ + registeruint32_t inter_val; +uint32_t retry =0 ; +do { +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + inter_val =readl (&clock_manager_base->stat) & mask; +#elif defined(CONFIG_TARGET_SOCFPGA_GEN5 ) + inter_val =readl (&clock_manager_base->inter) & mask; +#endif +/* Wait for stable lock */ +if (inter_val == mask) + retry++; +else + retry =0 ; +if (retry >=10 ) +break ; + }while (1 ); +} -uint32_t periphvco =readl (&clock_manager_base->per_pll.vco); +unsigned long cm_get_mpu_clk_hz (void ) +{ +uint32_t reg, clk_hz; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) + clk_hz =cm_get_main_vco_clk_hz (); -/* assert pheriph outresetall */ -writel (periphvco |CLKMGR_PERPLLGRP_VCO_OUTRESETALL_MASK , - &clock_manager_base->per_pll.vco); +/* get the MPU clock */ + reg =readl (&clock_manager_base->altera.mpuclk); + clk_hz /= (reg +1 ); + reg =readl (&clock_manager_base->main_pll.mpuclk); + clk_hz /= (reg +1 ); +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +uint32_t clk_src, mainmpuclk_reg; -/* assert sdram outresetall */ -writel (cfg->sdram_vco_base |CLKMGR_MAINPLLGRP_VCO_EN | -CLKMGR_SDRPLLGRP_VCO_OUTRESETALL , - &clock_manager_base->sdr_pll.vco); + mainmpuclk_reg =readl (&clock_manager_base->main_pll.mpuclk); -/* deassert main outresetall */ -writel (mainvco & ~CLKMGR_MAINPLLGRP_VCO_OUTRESETALL_MASK , - &clock_manager_base->main_pll.vco); + clk_src = (mainmpuclk_reg >>CLKMGR_MAINPLL_MPUCLK_SRC_LSB ) & +CLKMGR_MAINPLL_MPUCLK_SRC_MSK ; -/* deassert pheriph outresetall */ -writel (periphvco & ~CLKMGR_PERPLLGRP_VCO_OUTRESETALL_MASK , - &clock_manager_base->per_pll.vco); + reg =readl (&clock_manager_base->altera.mpuclk); +/* Check MPU clock source: main, periph, osc1, intosc or f2s? */ +switch (clk_src) { +case CLKMGR_MAINPLL_MPUCLK_SRC_MAIN : + clk_hz =cm_get_main_vco_clk_hz (); + clk_hz /= ((reg &CLKMGR_MAINPLL_MPUCLK_CNT_MSK ) + +1 ); +break ; +case CLKMGR_MAINPLL_MPUCLK_SRC_PERI : + clk_hz =cm_get_per_vco_clk_hz (); + clk_hz /= (((reg >>CLKMGR_MAINPLL_MPUCLK_PERICNT_LSB ) & +CLKMGR_MAINPLL_MPUCLK_CNT_MSK ) +1 ); +break ; +case CLKMGR_MAINPLL_MPUCLK_SRC_OSC1 : + clk_hz = eosc1_hz; +break ; +case CLKMGR_MAINPLL_MPUCLK_SRC_INTOSC : + clk_hz = cb_intosc_hz; +break ; +case CLKMGR_MAINPLL_MPUCLK_SRC_FPGA : + clk_hz = f2s_free_hz; +break ; +default : +printf ("cm_get_mpu_clk_hz invalid clk_src %d\n" , clk_src); +return 0 ; + } -/* deassert sdram outresetall */ -writel (cfg->sdram_vco_base |CLKMGR_MAINPLLGRP_VCO_EN , - &clock_manager_base->sdr_pll.vco); + clk_hz /= ((mainmpuclk_reg &CLKMGR_MAINPLL_MPUCLK_CNT_MSK ) +1 ); +#endif -/* -* now that we've toggled outreset all, all the clocks -* are aligned nicely; so we can change any phase. -*/ -cm_write_with_phase (cfg->ddrdqsclk, - (uint32_t )&clock_manager_base->sdr_pll.ddrdqsclk, -CLKMGR_SDRPLLGRP_DDRDQSCLK_PHASE_MASK ); +return clk_hz; +} -/* SDRAM DDR2XDQSCLK */ -cm_write_with_phase (cfg->ddr2xdqsclk, - (uint32_t )&clock_manager_base->sdr_pll.ddr2xdqsclk, -CLKMGR_SDRPLLGRP_DDR2XDQSCLK_PHASE_MASK ); +unsigned int cm_get_per_vco_clk_hz (void ) +{ +uint32_t src_hz =0 ; +uint32_t clk_src =0 ; +uint32_t numer =0 ; +uint32_t denom =0 ; +uint32_t vco =0 ; -cm_write_with_phase (cfg->ddrdqclk, - (uint32_t )&clock_manager_base->sdr_pll.ddrdqclk, -CLKMGR_SDRPLLGRP_DDRDQCLK_PHASE_MASK ); +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +/* identify PER PLL clock source */ + clk_src =readl (&clock_manager_base->per_pll.vco); + clk_src = (clk_src &CLKMGR_PERPLLGRP_VCO_SSRC_MASK ) >> +CLKMGR_PERPLLGRP_VCO_SSRC_OFFSET ; +if (clk_src ==CLKMGR_VCO_SSRC_EOSC1 ) + src_hz =cm_get_osc_clk_hz (1 ); +else if (clk_src ==CLKMGR_VCO_SSRC_EOSC2 ) + src_hz =cm_get_osc_clk_hz (2 ); +else if (clk_src ==CLKMGR_VCO_SSRC_F2S ) + src_hz =cm_get_f2s_per_ref_clk_hz (); -cm_write_with_phase (cfg->s2fuser2clk, - (uint32_t )&clock_manager_base->sdr_pll.s2fuser2clk, -CLKMGR_SDRPLLGRP_S2FUSER2CLK_PHASE_MASK ); +/* get the PER VCO clock */ + vco =readl (&clock_manager_base->per_pll.vco); + + numer = (vco &CLKMGR_PERPLLGRP_VCO_NUMER_MASK ) >> +CLKMGR_PERPLLGRP_VCO_NUMER_OFFSET ; + + denom = (vco &CLKMGR_PERPLLGRP_VCO_DENOM_MASK ) >> +CLKMGR_PERPLLGRP_VCO_DENOM_OFFSET ; + +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + clk_src =readl (&clock_manager_base->per_pll.vco0); + + clk_src = (clk_src >>CLKMGR_PERPLL_VCO0_PSRC_LSB ) & +CLKMGR_PERPLL_VCO0_PSRC_MSK ; + +if (clk_src ==CLKMGR_PERPLL_VCO0_PSRC_EOSC ) { + src_hz = eosc1_hz; + }else if (clk_src ==CLKMGR_PERPLL_VCO0_PSRC_E_INTOSC ) { + src_hz = cb_intosc_hz; + }else if (clk_src ==CLKMGR_PERPLL_VCO0_PSRC_F2S ) { + src_hz = f2s_free_hz; + }else if (clk_src ==CLKMGR_PERPLL_VCO0_PSRC_MAIN ) { + src_hz =cm_get_main_vco_clk_hz (); + src_hz /= (readl + (&clock_manager_base->main_pll.cntr15clk) & +CLKMGR_MAINPLL_CNTRCLK_MSK ) +1 ; + }else { +printf ("cm_get_per_vco_clk_hz invalid clk_src %d\n" , clk_src); +return 0 ; + } -/* Take all three PLLs out of bypass when safe mode is cleared. */ -cm_write_bypass (0 ); + vco =readl (&clock_manager_base->per_pll.vco1); -/* clear safe mode */ -cm_write_ctrl (readl (&clock_manager_base->ctrl) |CLKMGR_CTRL_SAFEMODE ); + numer = vco &CLKMGR_PERPLL_VCO1_NUMER_MSK ; -/* -* now that safe mode is clear with clocks gated -* it safe to change the source mux for the flashes the the L4_MAIN -*/ -writel (cfg->persrc, &clock_manager_base->per_pll.src); -writel (cfg->l4src, &clock_manager_base->main_pll.l4src); + denom = (vco >>CLKMGR_PERPLL_VCO1_DENOM_LSB ) & +CLKMGR_PERPLL_VCO1_DENOM_MSK ; +#endif -/* Now ungate non-hw-managed clocks */ -writel (~0 , &clock_manager_base->main_pll.en); -writel (~0 , &clock_manager_base->per_pll.en); -writel (~0 , &clock_manager_base->sdr_pll.en); + vco = src_hz; + vco /= (1 + denom); + vco *= (1 + numer); -/* Clear the loss of lock bits (write 1 to clear) */ -writel (CLKMGR_INTER_SDRPLLLOST_MASK |CLKMGR_INTER_PERPLLLOST_MASK | -CLKMGR_INTER_MAINPLLLOST_MASK , - &clock_manager_base->inter); +return vco; } -static unsigned int cm_get_main_vco_clk_hz (void ) +unsigned int cm_get_main_vco_clk_hz (void ) { -uint32_t reg, clock; +uint32_t src_hz, numer, denom, vco; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )/* get the main VCO clock */ - reg =readl (&clock_manager_base->main_pll.vco); - clock =cm_get_osc_clk_hz (1 ); - clock /= ((reg &CLKMGR_MAINPLLGRP_VCO_DENOM_MASK ) >> -CLKMGR_MAINPLLGRP_VCO_DENOM_OFFSET ) +1 ; - clock *= ((reg &CLKMGR_MAINPLLGRP_VCO_NUMER_MASK ) >> -CLKMGR_MAINPLLGRP_VCO_NUMER_OFFSET ) +1 ; - -return clock; -} - -static unsigned int cm_get_per_vco_clk_hz (void ) -{ -uint32_t reg, clock =0 ; - -/* identify PER PLL clock source */ - reg =readl (&clock_manager_base->per_pll.vco); - reg = (reg &CLKMGR_PERPLLGRP_VCO_SSRC_MASK ) >> -CLKMGR_PERPLLGRP_VCO_SSRC_OFFSET ; -if (reg ==CLKMGR_VCO_SSRC_EOSC1 ) - clock =cm_get_osc_clk_hz (1 ); -else if (reg ==CLKMGR_VCO_SSRC_EOSC2 ) - clock =cm_get_osc_clk_hz (2 ); -else if (reg ==CLKMGR_VCO_SSRC_F2S ) - clock =cm_get_f2s_per_ref_clk_hz (); - -/* get the PER VCO clock */ - reg =readl (&clock_manager_base->per_pll.vco); - clock /= ((reg &CLKMGR_PERPLLGRP_VCO_DENOM_MASK ) >> -CLKMGR_PERPLLGRP_VCO_DENOM_OFFSET ) +1 ; - clock *= ((reg &CLKMGR_PERPLLGRP_VCO_NUMER_MASK ) >> -CLKMGR_PERPLLGRP_VCO_NUMER_OFFSET ) +1 ; - -return clock; -} + vco =readl (&clock_manager_base->main_pll.vco); + + numer = ((vco &CLKMGR_MAINPLLGRP_VCO_NUMER_MASK ) >> +CLKMGR_MAINPLLGRP_VCO_NUMER_OFFSET ); + denom = ((vco &CLKMGR_MAINPLLGRP_VCO_DENOM_MASK ) >> +CLKMGR_MAINPLLGRP_VCO_DENOM_OFFSET ); + + src_hz =cm_get_osc_clk_hz (1 ); +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +uint32_t clk_src =readl (&clock_manager_base->main_pll.vco0); + + clk_src = (clk_src >>CLKMGR_MAINPLL_VCO0_PSRC_LSB ) & +CLKMGR_MAINPLL_VCO0_PSRC_MSK ; + +if (clk_src ==CLKMGR_MAINPLL_VCO0_PSRC_EOSC ) { + src_hz = eosc1_hz; + }else if (clk_src ==CLKMGR_MAINPLL_VCO0_PSRC_E_INTOSC ) { + src_hz = cb_intosc_hz; + }else if (clk_src ==CLKMGR_MAINPLL_VCO0_PSRC_F2S ) { + src_hz = f2s_free_hz; + }else { +printf ("cm_get_main_vco_clk_hz invalid clk_src %d\n" , clk_src); +return 0 ; + } -unsigned long cm_get_mpu_clk_hz (void ) -{ -uint32_t reg, clock; + vco =readl (&clock_manager_base->main_pll.vco1); - clock =cm_get_main_vco_clk_hz (); + numer = vco &CLKMGR_MAINPLL_VCO1_NUMER_MSK ; -/* get the MPU clock */ - reg =readl (&clock_manager_base->altera.mpuclk); - clock /= (reg +1 ); - reg =readl (&clock_manager_base->main_pll.mpuclk); - clock /= (reg +1 ); -return clock; -} + denom = (vco >>CLKMGR_MAINPLL_VCO1_DENOM_LSB ) & +CLKMGR_MAINPLL_VCO1_DENOM_MSK ; +#endif -unsigned long cm_get_sdram_clk_hz (void ) -{ -uint32_t reg, clock =0 ; - -/* identify SDRAM PLL clock source */ - reg =readl (&clock_manager_base->sdr_pll.vco); - reg = (reg &CLKMGR_SDRPLLGRP_VCO_SSRC_MASK ) >> -CLKMGR_SDRPLLGRP_VCO_SSRC_OFFSET ; -if (reg ==CLKMGR_VCO_SSRC_EOSC1 ) - clock =cm_get_osc_clk_hz (1 ); -else if (reg ==CLKMGR_VCO_SSRC_EOSC2 ) - clock =cm_get_osc_clk_hz (2 ); -else if (reg ==CLKMGR_VCO_SSRC_F2S ) - clock =cm_get_f2s_sdr_ref_clk_hz (); - -/* get the SDRAM VCO clock */ - reg =readl (&clock_manager_base->sdr_pll.vco); - clock /= ((reg &CLKMGR_SDRPLLGRP_VCO_DENOM_MASK ) >> -CLKMGR_SDRPLLGRP_VCO_DENOM_OFFSET ) +1 ; - clock *= ((reg &CLKMGR_SDRPLLGRP_VCO_NUMER_MASK ) >> -CLKMGR_SDRPLLGRP_VCO_NUMER_OFFSET ) +1 ; - -/* get the SDRAM (DDR_DQS) clock */ - reg =readl (&clock_manager_base->sdr_pll.ddrdqsclk); - reg = (reg &CLKMGR_SDRPLLGRP_DDRDQSCLK_CNT_MASK ) >> -CLKMGR_SDRPLLGRP_DDRDQSCLK_CNT_OFFSET ; - clock /= (reg +1 ); + vco = src_hz; + vco /= (1 + denom); + vco *= (1 + numer); -return clock; +return vco; }unsigned int cm_get_l4_sp_clk_hz (void ) { -uint32_t reg, clock =0 ; +uint32_t clock =0 ; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +uint32_t reg;/* identify the source of L4 SP clock */ reg =readl (&clock_manager_base->main_pll.l4src); reg = (reg & CLKMGR_MAINPLLGRP_L4SRC_L4SP) >>
@@ -443,106 +314,117 @@ unsigned int cm_get_l4_sp_clk_hz(void) reg = (reg &CLKMGR_MAINPLLGRP_MAINDIV_L4SPCLK_MASK ) >>CLKMGR_MAINPLLGRP_MAINDIV_L4SPCLK_OFFSET ; clock = clock / (1 << reg); - +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + clock =cm_get_l4_noc_hz (CLKMGR_MAINPLL_NOCDIV_L4SPCLK_LSB ); +#endif return clock; } -unsigned int cm_get_mmc_controller_clk_hz (void ) +/* function to poll in the fsm busy bit */ +void cm_wait_for_fsm (void ) { -uint32_t reg, clock =0 ; - -/* identify the source of MMC clock */ - reg =readl (&clock_manager_base->per_pll.src); - reg = (reg &CLKMGR_PERPLLGRP_SRC_SDMMC_MASK ) >> -CLKMGR_PERPLLGRP_SRC_SDMMC_OFFSET ; - -if (reg ==CLKMGR_SDMMC_CLK_SRC_F2S ) { - clock =cm_get_f2s_per_ref_clk_hz (); - }else if (reg ==CLKMGR_SDMMC_CLK_SRC_MAIN ) { - clock =cm_get_main_vco_clk_hz (); - -/* get the SDMMC clock */ - reg =readl (&clock_manager_base->main_pll.mainnandsdmmcclk); - clock /= (reg +1 ); - }else if (reg ==CLKMGR_SDMMC_CLK_SRC_PER ) { - clock =cm_get_per_vco_clk_hz (); - -/* get the SDMMC clock */ - reg =readl (&clock_manager_base->per_pll.pernandsdmmcclk); - clock /= (reg +1 ); - } - -/* further divide by 4 as we have fixed divider at wrapper */ - clock /=4 ; -return clock; +while (readl (&clock_manager_base->stat) & +CLKMGR_CLKMGR_STAT_BUSY_SET_MSK ); } -unsigned int cm_get_qspi_controller_clk_hz (void ) +unsigned int cm_get_mmc_controller_clk_hz (void ) { -uint32_t reg, clock =0 ; - -/* identify the source of QSPI clock */ - reg =readl (&clock_manager_base->per_pll.src); - reg = (reg &CLKMGR_PERPLLGRP_SRC_QSPI_MASK ) >> -CLKMGR_PERPLLGRP_SRC_QSPI_OFFSET ; +uint32_t clk_hz =0 ; +uint32_t clk_input =0 ; + +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) + clk_input =readl (&clock_manager_base->per_pll.cntr6clk); + clk_input = (clk_input >>CLKMGR_PERPLL_CNTR6CLK_SRC_LSB ) & +CLKMGR_PERPLLGRP_SRC_MSK ; +#elif defined(CONFIG_TARGET_SOCFPGA_GEN5 ) + clk_input =readl (&clock_manager_base->per_pll.src); + clk_input = (clk_input &CLKMGR_PERPLLGRP_SRC_SDMMC_MASK ) >> +CLKMGR_PERPLLGRP_SRC_SDMMC_OFFSET ; +#endif + +switch (clk_input) { +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +case CLKMGR_PERPLLGRP_SRC_MAIN : + clk_hz =cm_get_main_vco_clk_hz (); + clk_hz /=1 + + (readl + (&clock_manager_base->main_pll.cntr6clk) & +CLKMGR_MAINPLL_CNTRCLK_MSK ); +break ; + +case CLKMGR_PERPLLGRP_SRC_PERI : + clk_hz =cm_get_per_vco_clk_hz (); + clk_hz /=1 + (readl + (&clock_manager_base->per_pll.cntr6clk) & +CLKMGR_PERPLL_CNTRCLK_MSK ); +break ; + +case CLKMGR_PERPLLGRP_SRC_OSC1 : + clk_hz = eosc1_hz; +break ; + +case CLKMGR_PERPLLGRP_SRC_INTOSC : + clk_hz = cb_intosc_hz; +break ; + +case CLKMGR_PERPLLGRP_SRC_FPGA : + clk_hz = f2s_free_hz; +break ; +#elif defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +case CLKMGR_SDMMC_CLK_SRC_F2S : + clk_hz =cm_get_f2s_per_ref_clk_hz (); +break ; + +case CLKMGR_SDMMC_CLK_SRC_MAIN : + clk_hz =cm_get_main_vco_clk_hz (); -if (reg ==CLKMGR_QSPI_CLK_SRC_F2S ) { - clock =cm_get_f2s_per_ref_clk_hz (); - }else if (reg ==CLKMGR_QSPI_CLK_SRC_MAIN ) { - clock =cm_get_main_vco_clk_hz (); +/* get the SDMMC clock */ + clk_input = +readl (&clock_manager_base->main_pll.mainnandsdmmcclk); + clk_hz /= (clk_input +1 ); +break ; -/* get the qspi clock */ - reg =readl (&clock_manager_base->main_pll.mainqspiclk); - clock /= (reg +1 ); - }else if (reg ==CLKMGR_QSPI_CLK_SRC_PER ) { - clock =cm_get_per_vco_clk_hz (); +case CLKMGR_SDMMC_CLK_SRC_PER : + clk_hz =cm_get_per_vco_clk_hz (); -/* get the qspi clock */ - reg =readl (&clock_manager_base->per_pll.perqspiclk); - clock /= (reg +1 ); +/* get the SDMMC clock */ + clk_input = +readl (&clock_manager_base->per_pll.pernandsdmmcclk); + clk_hz /= (clk_input +1 ); +break ; +#endif } - -return clock; -} - -unsigned int cm_get_spi_controller_clk_hz (void ) -{ -uint32_t reg, clock =0 ; - - clock =cm_get_per_vco_clk_hz (); - -/* get the clock prior L4 SP divider (periph_base_clk) */ - reg =readl (&clock_manager_base->per_pll.perbaseclk); - clock /= (reg +1 ); - -return clock; +return clk_hz/4 ; }static void cm_print_clock_quick_summary (void ) {printf ("MPU %10ld kHz\n" ,cm_get_mpu_clk_hz () /1000 ); +printf ("MMC %8d kHz\n" ,cm_get_mmc_controller_clk_hz () /1000 ); +printf ("QSPI %8d kHz\n" , +cm_get_qspi_controller_clk_hz () /1000 ); +printf ("SPI %8d kHz\n" ,cm_get_spi_controller_clk_hz () /1000 ); +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +printf ("EOSC1 %8d kHz\n" , eosc1_hz /1000 ); +printf ("cb_intosc %8d kHz\n" , cb_intosc_hz /1000 ); +printf ("f2s_free %8d kHz\n" , f2s_free_hz /1000 ); +printf ("Main VCO %8d kHz\n" ,cm_get_main_vco_clk_hz ()/1000 ); +printf ("NOC %8d kHz\n" ,cm_get_noc_clk_hz ()/1000 ); +printf ("L4 Main %8d kHz\n" , +cm_get_l4_noc_hz (CLKMGR_MAINPLL_NOCDIV_L4MAINCLK_LSB )/1000 ); +printf ("L4 MP %8d kHz\n" , +cm_get_l4_noc_hz (CLKMGR_MAINPLL_NOCDIV_L4MPCLK_LSB )/1000 ); +printf ("L4 SP %8d kHz\n" , +cm_get_l4_sp_clk_hz ()/1000 ); +printf ("L4 sys free %8d kHz\n" , cm_l4_sys_free_clk_hz/1000 ); +#elif defined(CONFIG_TARGET_SOCFPGA_GEN5 )printf ("DDR %10ld kHz\n" ,cm_get_sdram_clk_hz () /1000 );printf ("EOSC1 %8d kHz\n" ,cm_get_osc_clk_hz (1 ) /1000 );printf ("EOSC2 %8d kHz\n" ,cm_get_osc_clk_hz (2 ) /1000 );printf ("F2S_SDR_REF %8d kHz\n" ,cm_get_f2s_sdr_ref_clk_hz () /1000 );printf ("F2S_PER_REF %8d kHz\n" ,cm_get_f2s_per_ref_clk_hz () /1000 ); -printf ("MMC %8d kHz\n" ,cm_get_mmc_controller_clk_hz () /1000 ); -printf ("QSPI %8d kHz\n" ,cm_get_qspi_controller_clk_hz () /1000 );printf ("UART %8d kHz\n" ,cm_get_l4_sp_clk_hz () /1000 ); -printf ("SPI %8d kHz\n" ,cm_get_spi_controller_clk_hz () /1000 ); -} - -int set_cpu_clk_info (void ) -{ -/* Calculate the clock frequencies required for drivers */ -cm_get_l4_sp_clk_hz (); -cm_get_mmc_controller_clk_hz (); - - gd->bd->bi_arm_freq =cm_get_mpu_clk_hz () /1000000 ; - gd->bd->bi_dsp_freq =0 ; - gd->bd->bi_ddr_freq =cm_get_sdram_clk_hz () /1000000 ; - -return 0 ; +#endif }int do_showclocks (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[])
arch/arm/mach-socfpga/clock_manager_arria10.c new file +954 -0
954 lines not on this page · raw message
arch/arm/mach-socfpga/clock_manager_gen5.c renamed from arch/arm/mach-socfpga/clock_manager.c +12 -228
275 lines not on this page · raw message
arch/arm/mach-socfpga/include/mach/clock_manager.h +290 -66
395 lines not on this page · raw message
Signature · 1 line
1.7.7.4
PATCH v4 27/29 arm: socfpga: arria10: Added drivers for Arria10 pinmux/pins configuration
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
--- arch/arm/mach-socfpga/include/mach/pinmux.h | 17 +++++ arch/arm/mach-socfpga/pinmux.c | 104 +++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-socfpga/include/mach/pinmux.h create mode 100644 arch/arm/mach-socfpga/pinmux.c
arch/arm/mach-socfpga/include/mach/pinmux.h new file +17 -0
@@ -0,0 +1,17 @@ +/* +* Copyright (C) 2016 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _PINMUX_H_ +#define _PINMUX_H_ + +#ifndef __ASSEMBLY__ +int config_dedicated_pins (const void *blob); +int config_pins (const void *blob,const char *pin_grp); +#endif + + + +#endif /* _PINMUX_H_ */
arch/arm/mach-socfpga/pinmux.c new file +104 -0
104 lines not on this page · raw message
Signature · 1 line
1.7.7.4
PATCH v4 28/29 arm: socfpga: arria10: Added Arria10 critical HW initialization to spl
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
This patch adding the Arria10 critical hardware initialization before enabling console print out in spl.
--- arch/arm/mach-socfpga/spl.c | 79 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 76 insertions(+), 3 deletions(-)
arch/arm/mach-socfpga/spl.c +76 -3
@@ -1,5 +1,5 @@/* -* Copyright (C) 2012 Altera Corporation <www.altera.com> +* Copyright (C) 2012-2016 Altera Corporation <www.altera.com> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -19,37 +19,58 @@#include <asm/arch/sdram.h> #include <asm/arch/scu.h> #include <asm/arch/nic301.h> +#include <asm/sections.h> +#include <watchdog.h> +#include <fdtdec.h> +#if defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#include <asm/arch/pinmux.h> +#endif DECLARE_GLOBAL_DATA_PTR ; +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) +#define BOOTINFO_BSEL_SHIFT 0 +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#define BOOTINFO_BSEL_SHIFT 12 +#endif + +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )static struct pl310_regs *const pl310 = (struct pl310_regs *)CONFIG_SYS_PL310_BASE ;static struct scu_registers *scu_regs = (struct scu_registers *)SOCFPGA_MPUSCU_ADDRESS ;static struct nic301_registers *nic301_regs = (struct nic301_registers *)SOCFPGA_L3REGS_ADDRESS ; -static struct socfpga_system_manager *sysmgr_regs = +#endif + +static const struct socfpga_system_manager *sysmgr_regs = (struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS ;u32 spl_boot_device (void ) {const u32 bsel =readl (&sysmgr_regs->bootinfo); -switch (bsel &0x7 ) { +switch ((bsel >>BOOTINFO_BSEL_SHIFT ) &0x7 ) {case 0x1 :/* FPGA (HPS2FPGA Bridge) */ return BOOT_DEVICE_RAM ;case 0x2 :/* NAND Flash (1.8V) */ case 0x3 :/* NAND Flash (3.0V) */ +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )socfpga_per_reset (SOCFPGA_RESET (NAND ),0 ); +#endif return BOOT_DEVICE_NAND ;case 0x4 :/* SD/MMC External Transceiver (1.8V) */ case 0x5 :/* SD/MMC Internal Transceiver (3.0V) */ +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )socfpga_per_reset (SOCFPGA_RESET (SDMMC ),0 );socfpga_per_reset (SOCFPGA_RESET (DMA ),0 ); +#endif return BOOT_DEVICE_MMC1 ;case 0x6 :/* QSPI Flash (1.8V) */ case 0x7 :/* QSPI Flash (3.0V) */ +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )socfpga_per_reset (SOCFPGA_RESET (QSPI ),0 ); +#endif return BOOT_DEVICE_SPI ;default :printf ("Invalid boot device (bsel=%08x)!\n" , bsel);
@@ -68,6 +89,7 @@ u32 spl_boot_mode(const u32 boot_device) }#endif +#if defined(CONFIG_TARGET_SOCFPGA_GEN5 )static void socfpga_nic301_slave_ns (void ) {writel (0x1 , &nic301_regs->lwhps2fpgaregs);
@@ -182,3 +204,54 @@ void board_init_f(ulong dummy)/* Configure simple malloc base pointer into RAM. */ gd->malloc_base =CONFIG_SYS_TEXT_BASE + (1024 *1024 ); } +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +void board_init_f (ulong dummy) +{ +memset (__bss_start,0 , __bss_end - __bss_start); +/* +* Configure Clock Manager to use intosc clock instead external osc to +* ensure success watchdog operation. We do it as early as possible. +*/ +cm_use_intosc (); + +watchdog_disable (); + +arch_early_init_r (); + +#ifdef CONFIG_HW_WATCHDOG +/* release osc1 watchdog timer 0 from reset */ +reset_deassert_osc1wd0 (); + +/* reconfigure and enable the watchdog */ +hw_watchdog_init (); +WATCHDOG_RESET (); +#endif /* CONFIG_HW_WATCHDOG */ + +#ifdef CONFIG_OF_CONTROL +/* We need to access to FDT as this stage */ +/* FDT is at end of image */ + gd->fdt_blob = (void *)(__bss_end); +/* Check whether we have a valid FDT or not. */ +if (fdtdec_prepare_fdt ()) { +panic ("** CONFIG_OF_CONTROL defined but no FDT - please see " +"doc/README.fdt-control" ); + } +#endif /* CONFIG_OF_CONTROL */ + +/* Initialize the timer */ +timer_init (); + +/* configuring the clock based on handoff */ +cm_basic_init (gd->fdt_blob); +WATCHDOG_RESET (); + +config_dedicated_pins (gd->fdt_blob); +WATCHDOG_RESET (); + +/* Release UART from reset */ +reset_deassert_uart (); + +/* enable console uart printing */ +preloader_console_init (); +} +#endif
Signature · 1 line
1.7.7.4
PATCH v4 29/29 arm: socfpga: arria10: Enable fpga driver build for SPL.
In reply to Chee Tien FongFrom: Tien Fong Chee <[email protected]>
--- drivers/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/Makefile +1 -1
@@ -9,7 +9,7 @@ obj-$(CONFIG_$(SPL_)PINCTRL) += pinctrl/ obj-$(CONFIG_$(SPL_)RAM) += ram/ ifdef CONFIG_SPL_BUILD - +obj-$(CONFIG_FPGA) += fpga/ obj-$(CONFIG_SPL_CRYPTO_SUPPORT) += crypto/ obj-$(CONFIG_SPL_I2C_SUPPORT) += i2c/ obj-$(CONFIG_SPL_GPIO_SUPPORT) += gpio/
Signature · 1 line
1.7.7.4
Dinh Nguyen
maintainerPATCH v4 18/29 arm: socfpga: stratix10: Add SOCFPGA Stratix10 base address
In reply to Chee Tien FongQuoted 9 lines · Chee Tien Fong
From: Tien Fong Chee <[email protected]>
Add base address header file for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>Signed-off-by Tien Fong Chee <[email protected]>Cc Marek Vasut <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Ley Foon Tan <[email protected]>
Quoted 4 lines
--- arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 48 ++++++++++++++++++++ 1 files changed, 48 insertions(+), 0 deletions(-) create mode 100755 arch/arm/mach-socfpga/include/mach/base_addr_s10.h
While this is really nice to see, but can you separate this patch out from the Arria10 series. It's already confusing enough.
Dinh
Chee
PATCH v4 18/29 arm: socfpga: stratix10: Add SOCFPGA Stratix10 base address
Quoted 18 lines · Dinh Nguyen
Quoted 10 lines · Chee Tien Fong
From: Tien Fong Chee <[email protected]>
Add base address header file for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>Signed-off-by Tien Fong Chee <[email protected]>Cc Marek Vasut <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Ley Foon Tan <[email protected]>Quoted 6 lines
---
?arch/arm/mach-socfpga/include/mach/base_addr_s10.h |???48
++++++++++++++++++++
?1 files changed, 48 insertions(+), 0 deletions(-) ?create mode 100755arch/arm/mach-socfpga/include/mach/base_addr_s10.h
Quoted 4 lines
While this is really nice to see, but can you separate this patch out from the Arria10 series. It's already confusing enough.
Dinh
Ahh....this was rebased from 01-arria10. Okay, i will remove this patch.