Enable Stratix10 SoC support
Subsystems (5)
cover Enable Stratix10 SoC support
From: Chin Liang See <[email protected]>
This patch series are enabling support for Stratix 10 SoC
Chin Liang See (14):
arm: socfpga: stratix10: Add base address map for Statix10 SoC
arm: dts: Add dts for Stratix10 SoC
arm: socfpga: stratix10: Add Clock Manager driver for Stratix10 SoC
arm: socfpga: stratix10: Add Reset Manager driver for Stratix10 SoC
arm: socfpga: stratix10: Add pinmux support for Stratix10 SoC
arm: socfpga: stratix10: Add misc support for Stratix10 SoC
arm: socfpga: stratix10: Add mailbox support for Stratix10 SoC
arm: socfpga: stratix10: Add MMU support for Stratix10 SoC
arm: socfpga: Restructure the SPL file
arm: socfpga: stratix10: Add SPL driver for Stratix10 SoC
arm: socfpga: stratix10: Add timer support for Stratix10 SoC
ddr: altera: stratix10: Add DDR support for Stratix10 SoC
board: altera: stratix10: Add socdk board support for Stratix10 SoC
arm: socfpga: stratix10: Enable Stratix10 SoC build
arch/arm/Kconfig | 8 +-
arch/arm/dts/Makefile | 3 +-
arch/arm/dts/socfpga_stratix10_socdk.dts | 141 ++++++++
arch/arm/mach-socfpga/Kconfig | 13 +
arch/arm/mach-socfpga/Makefile | 19 +-
arch/arm/mach-socfpga/clock_manager.c | 4 +-
arch/arm/mach-socfpga/clock_manager_s10.c | 359 +++++++++++++++++++
arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 62 ++++
arch/arm/mach-socfpga/include/mach/clock_manager.h | 2 +
.../mach-socfpga/include/mach/clock_manager_s10.h | 202 +++++++++++
arch/arm/mach-socfpga/include/mach/firewall_s10.h | 84 +++++
arch/arm/mach-socfpga/include/mach/handoff_s10.h | 29 ++
arch/arm/mach-socfpga/include/mach/mailbox_s10.h | 108 ++++++
arch/arm/mach-socfpga/include/mach/reset_manager.h | 2 +
.../mach-socfpga/include/mach/reset_manager_s10.h | 116 +++++++
arch/arm/mach-socfpga/include/mach/sdram_s10.h | 333 ++++++++++++++++++
.../arm/mach-socfpga/include/mach/system_manager.h | 5 +-
.../mach-socfpga/include/mach/system_manager_s10.h | 169 +++++++++
arch/arm/mach-socfpga/mailbox_s10.c | 239 +++++++++++++
arch/arm/mach-socfpga/misc.c | 4 +
arch/arm/mach-socfpga/misc_s10.c | 165 +++++++++
arch/arm/mach-socfpga/mmu-arm64_s10.c | 71 ++++
arch/arm/mach-socfpga/reset_manager.c | 5 +
arch/arm/mach-socfpga/reset_manager_s10.c | 140 ++++++++
arch/arm/mach-socfpga/spl_a10.c | 105 ++++++
arch/arm/mach-socfpga/{spl.c => spl_gen5.c} | 46 ---
arch/arm/mach-socfpga/spl_s10.c | 138 ++++++++
arch/arm/mach-socfpga/system_manager_s10.c | 91 +++++
arch/arm/mach-socfpga/timer.c | 17 +-
arch/arm/mach-socfpga/wrap_pinmux_config_s10.c | 55 +++
arch/arm/mach-socfpga/wrap_pll_config_s10.c | 46 +++
board/altera/stratix10-socdk/MAINTAINERS | 7 +
board/altera/stratix10-socdk/Makefile | 7 +
board/altera/stratix10-socdk/socfpga.c | 7 +
configs/socfpga_stratix10_defconfig | 39 +++
drivers/ddr/altera/Makefile | 1 +
drivers/ddr/altera/sdram_s10.c | 382 +++++++++++++++++++++
include/configs/socfpga_stratix10_socdk.h | 216 ++++++++++++
include/dt-bindings/reset/altr,rst-mgr-s10.h | 97 ++++++
39 files changed, 3482 insertions(+), 55 deletions(-)
create mode 100644 arch/arm/dts/socfpga_stratix10_socdk.dts
create mode 100644 arch/arm/mach-socfpga/clock_manager_s10.c
create mode 100644 arch/arm/mach-socfpga/include/mach/base_addr_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/clock_manager_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/firewall_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/handoff_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/mailbox_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/reset_manager_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/sdram_s10.h
create mode 100644 arch/arm/mach-socfpga/include/mach/system_manager_s10.h
create mode 100644 arch/arm/mach-socfpga/mailbox_s10.c
create mode 100644 arch/arm/mach-socfpga/misc_s10.c
create mode 100644 arch/arm/mach-socfpga/mmu-arm64_s10.c
create mode 100644 arch/arm/mach-socfpga/reset_manager_s10.c
create mode 100644 arch/arm/mach-socfpga/spl_a10.c
rename arch/arm/mach-socfpga/{spl.c => spl_gen5.c} (83%)
create mode 100644 arch/arm/mach-socfpga/spl_s10.c
create mode 100644 arch/arm/mach-socfpga/system_manager_s10.c
create mode 100644 arch/arm/mach-socfpga/wrap_pinmux_config_s10.c
create mode 100644 arch/arm/mach-socfpga/wrap_pll_config_s10.c
create mode 100644 board/altera/stratix10-socdk/MAINTAINERS
create mode 100644 board/altera/stratix10-socdk/Makefile
create mode 100644 board/altera/stratix10-socdk/socfpga.c
create mode 100644 configs/socfpga_stratix10_defconfig
create mode 100644 drivers/ddr/altera/sdram_s10.c
create mode 100644 include/configs/socfpga_stratix10_socdk.h
create mode 100644 include/dt-bindings/reset/altr,rst-mgr-s10.h--
2.2.2
PATCH 1/14 arm: socfpga: stratix10: Add base address map for Statix10 SoC
From: Chin Liang See <[email protected]>
Add the base address map for Statix10 SoC
--- arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/base_addr_s10.h
arch/arm/mach-socfpga/include/mach/base_addr_s10.h new file +58 -0
@@ -0,0 +1,58 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _SOCFPGA_S10_BASE_HARDWARE_H_ +#define _SOCFPGA_S10_BASE_HARDWARE_H_ + +#define SOCFPGA_SDR_SCHEDULER_ADDRESS 0xf8000400 +#define SOCFPGA_HMC_MMR_IO48_ADDRESS 0xf8010000 +#define SOCFPGA_SDR_ADDRESS 0xf8011000 +#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_QSPIREGS_ADDRESS 0xff8d2000 +#define SOCFPGA_QSPIDATA_ADDRESS 0xff900000 +#define SOCFPGA_MAILBOX_ADDRESS 0xffA30000 +#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_SYSTIMER1_ADDRESS 0xffd00100 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00200 +#define SOCFPGA_L4WD1_ADDRESS 0xffd00300 +#define SOCFPGA_L4WD2_ADDRESS 0xffd00400 +#define SOCFPGA_L4WD3_ADDRESS 0xffd00500 +#define SOCFPGA_GTIMER_SEC_ADDRESS 0xffd01000 +#define SOCFPGA_GTIMER_NSEC_ADDRESS 0xffd02000 +#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 +#define GICD_BASE 0xfffc1000 +#define GICC_BASE 0xfffc2000 + +#endif /* _SOCFPGA_S10_BASE_HARDWARE_H_ */
Signature · 1 line
2.2.2
PATCH 1/14 arm: socfpga: stratix10: Add base address map for Statix10 SoC
Quoted 5 lines · chin.liang.see at intel.com
From: Chin Liang See <[email protected]>
Add the base address map for Statix10 SoC
Signed-off-by Chin Liang See <[email protected]>
Add only the stuff which is not obtainable from DT please.
Quoted 70 lines
--- arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/base_addr_s10.harch/arm/mach-socfpga/include/mach/base_addr_s10.h new file +58
-0@@ -0,0 +1,58 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _SOCFPGA_S10_BASE_HARDWARE_H_ +#define _SOCFPGA_S10_BASE_HARDWARE_H_ + +#define SOCFPGA_SDR_SCHEDULER_ADDRESS 0xf8000400 +#define SOCFPGA_HMC_MMR_IO48_ADDRESS 0xf8010000 +#define SOCFPGA_SDR_ADDRESS 0xf8011000 +#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_QSPIREGS_ADDRESS 0xff8d2000 +#define SOCFPGA_QSPIDATA_ADDRESS 0xff900000 +#define SOCFPGA_MAILBOX_ADDRESS 0xffA30000 +#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_SYSTIMER1_ADDRESS 0xffd00100 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00200 +#define SOCFPGA_L4WD1_ADDRESS 0xffd00300 +#define SOCFPGA_L4WD2_ADDRESS 0xffd00400 +#define SOCFPGA_L4WD3_ADDRESS 0xffd00500 +#define SOCFPGA_GTIMER_SEC_ADDRESS 0xffd01000 +#define SOCFPGA_GTIMER_NSEC_ADDRESS 0xffd02000 +#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 +#define GICD_BASE 0xfffc1000 +#define GICC_BASE 0xfffc2000 + +#endif /* _SOCFPGA_S10_BASE_HARDWARE_H_ */
Signature · 2 lines
Best regards, Marek Vasut
See
PATCH 1/14 arm: socfpga: stratix10: Add base address map for Statix10 SoC
Quoted 9 lines · Marek Vasut
Quoted 6 lines · chin.liang.see at intel.com
From: Chin Liang See <[email protected]>
Add the base address map for Statix10 SoC
Signed-off-by Chin Liang See <[email protected]>Add only the stuff which is not obtainable from DT please.
Sure, let me remove the SDMMC, EMAC and QSPI since they are extracted from DT today
Thanks
Chin Liang
Quoted 75 lines
Quoted 74 lines
---
arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 58
++++++++++++++++++++++1 file changed, 58 insertions(+)create mode 100644
arch/arm/mach-socfpga/include/mach/base_addr_s10.harch/arm/mach-socfpga/include/mach/base_addr_s10.h new file +58
-0@@ -0,0 +1,58 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _SOCFPGA_S10_BASE_HARDWARE_H_ +#define _SOCFPGA_S10_BASE_HARDWARE_H_ + +#define SOCFPGA_SDR_SCHEDULER_ADDRESS 0xf8000400 +#define SOCFPGA_HMC_MMR_IO48_ADDRESS 0xf8010000 +#define SOCFPGA_SDR_ADDRESS 0xf8011000 +#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_QSPIREGS_ADDRESS 0xff8d2000 +#define SOCFPGA_QSPIDATA_ADDRESS 0xff900000 +#define SOCFPGA_MAILBOX_ADDRESS 0xffA30000 +#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_SYSTIMER1_ADDRESS 0xffd00100 +#define SOCFPGA_L4WD0_ADDRESS 0xffd00200 +#define SOCFPGA_L4WD1_ADDRESS 0xffd00300 +#define SOCFPGA_L4WD2_ADDRESS 0xffd00400 +#define SOCFPGA_L4WD3_ADDRESS 0xffd00500 +#define SOCFPGA_GTIMER_SEC_ADDRESS 0xffd01000 +#define SOCFPGA_GTIMER_NSEC_ADDRESS 0xffd02000 +#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 +#define GICD_BASE 0xfffc1000 +#define GICC_BASE 0xfffc2000 + +#endif /* _SOCFPGA_S10_BASE_HARDWARE_H_ */
PATCH 2/14 arm: dts: Add dts for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Device tree for Stratix10 SoC
--- arch/arm/dts/Makefile | 3 +- arch/arm/dts/socfpga_stratix10_socdk.dts | 141 +++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/socfpga_stratix10_socdk.dts
arch/arm/dts/Makefile +2 -1
@@ -171,7 +171,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_stratix10_socdk.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \ dra72-evm-revc.dtb dra71-evm.dtb dra76-evm.dtb
arch/arm/dts/socfpga_stratix10_socdk.dts new file +141 -0
141 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 2/14 arm: dts: Add dts for Stratix10 SoC
Quoted 31 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Device tree for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/dts/Makefile | 3 +- arch/arm/dts/socfpga_stratix10_socdk.dts | 141 +++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/socfpga_stratix10_socdk.dtsarch/arm/dts/Makefile +2
-1@@ -171,7 +171,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_stratix10_socdk.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \ dra72-evm-revc.dtb dra71-evm.dtb dra76-evm.dtbarch/arm/dts/socfpga_stratix10_socdk.dts new file +0
-0
arch/arm/dts/socfpga_stratix10_socdk.dts line 9
Quoted 9 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +9
-0@@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016-2017 Intel Corporation <www.intel.com> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +/dts-v1/; +#include "skeleton.dtsi" +#include <dt-bindings/reset/altr,rst-mgr-s10.h>
You don't add the patch for this include file until patch 4/14, which means the build will fail until patch 4 is applied. You need to move this patch after 4/14.
Quoted 58 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +58
-0+ +/ { + model = "Intel SOCFPGA Stratix 10 SoC Development Kit"; + compatible = "altr,socfpga-stratix10", "altr,socfpga"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + ethernet0 = &gmac0; + spi0 = &qspi; + }; + + memory { + name = "memory"; + device_type = "memory"; + reg = <0x0 0x80000000>; /* 2GB */ + }; + + regulator_3_3v: 3-3-v-regulator { + compatible = "regulator-fixed"; + regulator-name = "3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + device_type = "soc"; + ranges; + u-boot,dm-pre-reloc; + + rst: rstmgr at ffd11000 { + #reset-cells = <1>; + compatible = "altr,rst-mgr"; + reg = <0xffd11000 0x100>; + altr,modrst-offset = <0x20>; + }; + + gmac0: ethernet at ff800000 { + compatible = "altr,socfpga-stmmac", "snps,dwmac-3.74a", "snps,dwmac"; + reg = <0xff800000 0x2000>; + interrupts = <0 90 4>; + interrupt-names = "macirq"; + mac-address = [00 00 00 00 00 00]; + resets = <&rst EMAC0_RESET>; + reset-names = "stmmaceth"; + phy-mode = "rgmii"; + phy-addr = <0xffffffff>; /* probe for phy addr */ + max-speed = <1000>; + txd0-skew-ps = <0>; /* -420ps */ + txd1-skew-ps = <0>; /* -420ps */
arch/arm/dts/socfpga_stratix10_socdk.dts line 77
Quoted 10 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +10
-0+ txd2-skew-ps = <0>; /* -420ps */ + txd3-skew-ps = <0>; /* -420ps */ + rxd0-skew-ps = <420>; /* 0ps */ + rxd1-skew-ps = <420>; /* 0ps */ + rxd2-skew-ps = <420>; /* 0ps */ + rxd3-skew-ps = <420>; /* 0ps */ + txen-skew-ps = <0>; /* -420ps */ + txc-skew-ps = <1860>; /* 960ps */ + rxdv-skew-ps = <420>; /* 0ps */ + rxc-skew-ps = <1680>; /* 780ps */
These are PHY properties, which should be in a separate PHY node.
Dinh
See
PATCH 2/14 arm: dts: Add dts for Stratix10 SoC
Quoted 42 lines · Dinh Nguyen
Quoted 41 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Device tree for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>---
arch/arm/dts/Makefile | 3 +-arch/arm/dts/socfpga_stratix10_socdk.dts| 141
+++++++++++++++++++++++++++++++2 files changed, 143 insertions(+), 1 deletion(-)create mode 100644
arch/arm/dts/socfpga_stratix10_socdk.dtsarch/arm/dts/Makefile +3
-1@@ -171,7 +171,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_stratix10_socdk.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \dra72-evm-revc.dtb dra71-evm.dtb dra76-evm.dtb
arch/arm/dts/socfpga_stratix10_socdk.dts new file +6
-0@@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016-2017 Intel Corporation <www.intel.com> + * + * SPDX-License-Identifier: GPL-2.0 + */ +
Quoted 8 lines
arch/arm/dts/socfpga_stratix10_socdk.dts line 9
Quoted 3 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +3
-0+/dts-v1/; +#include "skeleton.dtsi" +#include <dt-bindings/reset/altr,rst-mgr-s10.h>You don't add the patch for this include file until patch 4/14, which means
the build will fail until patch 4 is applied. You need to move this patch
after 4/14.
Yes, good catch. Let shuffle this
Quoted 65 lines
Quoted 65 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +47
-0+ +/ { + model = "Intel SOCFPGA Stratix 10 SoC Development Kit"; + compatible = "altr,socfpga-stratix10", "altr,socfpga"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + ethernet0 = &gmac0; + spi0 = &qspi; + }; + + memory { + name = "memory"; + device_type = "memory"; + reg = <0x0 0x80000000>; /* 2GB */ + }; + + regulator_3_3v: 3-3-v-regulator { + compatible = "regulator-fixed"; + regulator-name = "3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + device_type = "soc"; + ranges; + u-boot,dm-pre-reloc; + + rst: rstmgr at ffd11000 { + #reset-cells = <1>; + compatible = "altr,rst-mgr"; + reg = <0xffd11000 0x100>; + altr,modrst-offset = <0x20>; + }; + + gmac0: ethernet at ff800000 { + compatible = "altr,socfpga-stmmac","snps,dwmac-3.74a", "snps,dwmac";
+ reg = <0xff8000000x2000>;
+ interrupts = <0 90 4>;
+ interrupt-names = "macirq";
+ mac-address = [00 00 00 00 00 00]; + resets = <&rstEMAC0_RESET>;
+ reset-names = "stmmaceth";
+ phy-mode = "rgmii";
+ phy-addr = <0xffffffff>; /* probe for phy addr */
+ max-speed = <1000>;
+ txd0-skew-ps = <0>; /* -420ps */ + txd1-skew-ps = <0>; /* -420ps */ + txd2-skew-ps = <0>; /* -420ps */ + txd3-skew-ps = <0>; /* -420ps */ + rxd0-skew-ps = <420>; /* 0ps */
Quoted 8 lines
Quoted 7 lines
+ rxd1-skew-ps = <420>; /* 0ps */ + rxd2-skew-ps = <420>; /* 0ps */ + rxd3-skew-ps = <420>; /* 0ps */ + txen-skew-ps = <0>; /* -420ps */ + txc-skew-ps = <1860>; /* 960ps */ + rxdv-skew-ps = <420>; /* 0ps */ + rxc-skew-ps = <1680>; /* 780ps */
These are PHY properties, which should be in a separate PHY node.
Let me check on the PHY driver
Chin Liang
Quoted 2 lines
Dinh
PATCH 2/14 arm: dts: Add dts for Stratix10 SoC
In reply to chin.liang.see at intel.comQuoted 74 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Device tree for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/dts/Makefile | 3 +- arch/arm/dts/socfpga_stratix10_socdk.dts | 141 +++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/socfpga_stratix10_socdk.dtsarch/arm/dts/Makefile +2
-1@@ -171,7 +171,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_stratix10_socdk.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \ dra72-evm-revc.dtb dra71-evm.dtb dra76-evm.dtbarch/arm/dts/socfpga_stratix10_socdk.dts new file +43
-0@@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016-2017 Intel Corporation <www.intel.com> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +/dts-v1/; +#include "skeleton.dtsi" +#include <dt-bindings/reset/altr,rst-mgr-s10.h> + +/ { + model = "Intel SOCFPGA Stratix 10 SoC Development Kit"; + compatible = "altr,socfpga-stratix10", "altr,socfpga"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + ethernet0 = &gmac0; + spi0 = &qspi; + }; + + memory { + name = "memory"; + device_type = "memory"; + reg = <0x0 0x80000000>; /* 2GB */ + }; + + regulator_3_3v: 3-3-v-regulator { + compatible = "regulator-fixed"; + regulator-name = "3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus";
arch/arm/dts/socfpga_stratix10_socdk.dts line 53
Quoted 10 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +10
-0+ device_type = "soc"; + ranges; + u-boot,dm-pre-reloc; + + rst: rstmgr at ffd11000 { + #reset-cells = <1>; + compatible = "altr,rst-mgr"; + reg = <0xffd11000 0x100>; + altr,modrst-offset = <0x20>; + };
Where are the cpu nodes?
Dinh
See
PATCH 2/14 arm: dts: Add dts for Stratix10 SoC
Quoted 82 lines · Dinh Nguyen
Quoted 81 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Device tree for Stratix10 SoC
Signed-off-by Chin Liang See <[email protected]>---
arch/arm/dts/Makefile | 3 +-arch/arm/dts/socfpga_stratix10_socdk.dts| 141
+++++++++++++++++++++++++++++++2 files changed, 143 insertions(+), 1 deletion(-)create mode 100644
arch/arm/dts/socfpga_stratix10_socdk.dtsarch/arm/dts/Makefile +3
-1@@ -171,7 +171,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_stratix10_socdk.dtb dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \dra72-evm-revc.dtb dra71-evm.dtb dra76-evm.dtb
arch/arm/dts/socfpga_stratix10_socdk.dts new file +46
-0@@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016-2017 Intel Corporation <www.intel.com> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +/dts-v1/; +#include "skeleton.dtsi" +#include <dt-bindings/reset/altr,rst-mgr-s10.h> + +/ { + model = "Intel SOCFPGA Stratix 10 SoC Development Kit"; + compatible = "altr,socfpga-stratix10", "altr,socfpga"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + ethernet0 = &gmac0; + spi0 = &qspi; + }; + + memory { + name = "memory"; + device_type = "memory"; + reg = <0x0 0x80000000>; /* 2GB */ + }; + + regulator_3_3v: 3-3-v-regulator { + compatible = "regulator-fixed"; + regulator-name = "3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + device_type = "soc"; + ranges; + u-boot,dm-pre-reloc;
Quoted 8 lines
arch/arm/dts/socfpga_stratix10_socdk.dts line 53
Quoted 7 lines
arch/arm/dts/socfpga_stratix10_socdk.dts new file +7
-0+ + rst: rstmgr at ffd11000 { + #reset-cells = <1>; + compatible = "altr,rst-mgr"; + reg = <0xffd11000 0x100>; + altr,modrst-offset = <0x20>; + };Where are the cpu nodes?
yes, need to be added
CHin Liang
Quoted 2 lines
Dinh
PATCH 3/14 arm: socfpga: stratix10: Add Clock Manager driver for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add Clock Manager driver support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 4 + arch/arm/mach-socfpga/clock_manager.c | 4 +- arch/arm/mach-socfpga/clock_manager_s10.c | 359 +++++++++++++++++++++ arch/arm/mach-socfpga/include/mach/clock_manager.h | 2 + .../mach-socfpga/include/mach/clock_manager_s10.h | 202 ++++++++++++ arch/arm/mach-socfpga/include/mach/handoff_s10.h | 29 ++ arch/arm/mach-socfpga/wrap_pll_config_s10.c | 46 +++ 7 files changed, 644 insertions(+), 2 deletions(-) create mode 100644 arch/arm/mach-socfpga/clock_manager_s10.c create mode 100644 arch/arm/mach-socfpga/include/mach/clock_manager_s10.h create mode 100644 arch/arm/mach-socfpga/include/mach/handoff_s10.h create mode 100644 arch/arm/mach-socfpga/wrap_pll_config_s10.c
arch/arm/mach-socfpga/Makefile +4 -0
@@ -30,6 +30,10 @@ obj-y += pinmux_arria10.o obj-y += reset_manager_arria10.o endif +ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 +obj-y += clock_manager_s10.o +obj-y += wrap_pll_config_s10.o +endif ifdef CONFIG_SPL_BUILD obj-y += spl.o ifdef CONFIG_TARGET_SOCFPGA_GEN5
arch/arm/mach-socfpga/clock_manager.c +2 -2
@@ -21,7 +21,7 @@ void cm_wait_for_lock(u32 mask) do { #if defined(CONFIG_TARGET_SOCFPGA_GEN5) inter_val = readl(&clock_manager_base->inter) & mask; -#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10) +#else inter_val = readl(&clock_manager_base->stat) & mask; #endif /* Wait for stable lock */
@@ -52,7 +52,7 @@ int set_cpu_clk_info(void)#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) gd->bd->bi_ddr_freq =cm_get_sdram_clk_hz () /1000000 ; -#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#else gd->bd->bi_ddr_freq =0 ;#endif
arch/arm/mach-socfpga/clock_manager_s10.c new file +359 -0
359 lines not on this page · raw message
arch/arm/mach-socfpga/include/mach/clock_manager.h +2 -0
@@ -17,6 +17,8 @@ void cm_print_clock_quick_summary(void);#include <asm/arch/clock_manager_gen5.h> #elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 )#include <asm/arch/clock_manager_arria10.h> +#elif defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +#include <asm/arch/clock_manager_s10.h> #endif #endif /* _CLOCK_MANAGER_H_ */
arch/arm/mach-socfpga/include/mach/clock_manager_s10.h new file +202 -0
202 lines not on this page · raw message
arch/arm/mach-socfpga/include/mach/handoff_s10.h new file +29 -0
@@ -0,0 +1,29 @@ +/* +* Copyright (C) 2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _HANDOFF_S10_H_ +#define _HANDOFF_S10_H_ + +/* +* Offset for HW handoff from Quartus tools +*/ +#define CONFIG_HANDOFF_BASE 0xFFE3F000 +#define CONFIG_HANDOFF_MUX (CONFIG_HANDOFF_BASE + 0x10) +#define CONFIG_HANDOFF_IOCTL (CONFIG_HANDOFF_BASE + 0x1A0) +#define CONFIG_HANDOFF_FPGA (CONFIG_HANDOFF_BASE + 0x330) +#define CONFIG_HANODFF_DELAY (CONFIG_HANDOFF_BASE + 0x3F0) +#define CONFIG_HANDOFF_CLOCK (CONFIG_HANDOFF_BASE + 0x580) +#define CONFIG_HANDOFF_MISC (CONFIG_HANDOFF_BASE + 0x610) +#define CONFIG_HANDOFF_MAGIC_MUX 0x504D5558 +#define CONFIG_HANDOFF_MAGIC_IOCTL 0x494F4354 +#define CONFIG_HANDOFF_MAGIC_FPGA 0x46504741 +#define CONFIG_HANDOFF_MAGIC_DELAY 0x444C4159 +#define CONFIG_HANDOFF_MAGIC_CLOCK 0x434C4B53 +#define CONFIG_HANDOFF_MAGIC_MISC 0x4D495343 +#define CONFIG_HANDOFF_OFFSET_LENGTH 0x4 +#define CONFIG_HANDOFF_OFFSET_DATA 0x10 + +#endif /* _HANDOFF_S10_H_ */
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +46 -0
46 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 3/14 arm: socfpga: stratix10: Add Clock Manager driver for Stratix10 SoC
Quoted 77 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add Clock Manager driver support for Stratix SoC
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/mach-socfpga/Makefile | 4 + arch/arm/mach-socfpga/clock_manager.c | 4 +- arch/arm/mach-socfpga/clock_manager_s10.c | 359 +++++++++++++++++++++ arch/arm/mach-socfpga/include/mach/clock_manager.h | 2 + .../mach-socfpga/include/mach/clock_manager_s10.h | 202 ++++++++++++ arch/arm/mach-socfpga/include/mach/handoff_s10.h | 29 ++ arch/arm/mach-socfpga/wrap_pll_config_s10.c | 46 +++ 7 files changed, 644 insertions(+), 2 deletions(-) create mode 100644 arch/arm/mach-socfpga/clock_manager_s10.c create mode 100644 arch/arm/mach-socfpga/include/mach/clock_manager_s10.h create mode 100644 arch/arm/mach-socfpga/include/mach/handoff_s10.h create mode 100644 arch/arm/mach-socfpga/wrap_pll_config_s10.carch/arm/mach-socfpga/Makefile +4
-0@@ -30,6 +30,10 @@ obj-y += pinmux_arria10.o obj-y += reset_manager_arria10.o endif +ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 +obj-y += clock_manager_s10.o +obj-y += wrap_pll_config_s10.o +endif ifdef CONFIG_SPL_BUILD obj-y += spl.o ifdef CONFIG_TARGET_SOCFPGA_GEN5arch/arm/mach-socfpga/clock_manager.c +2
-2@@ -21,7 +21,7 @@ void cm_wait_for_lock(u32 mask) do { #if defined(CONFIG_TARGET_SOCFPGA_GEN5) inter_val = readl(&clock_manager_base->inter) & mask; -#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10) +#else inter_val = readl(&clock_manager_base->stat) & mask; #endif /* Wait for stable lock */@@ -52,7 +52,7 @@ int set_cpu_clk_info(void)#if defined(CONFIG_TARGET_SOCFPGA_GEN5 ) gd->bd->bi_ddr_freq =cm_get_sdram_clk_hz () /1000000 ; -#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#else gd->bd->bi_ddr_freq =0 ;#endif arch/arm/mach-socfpga/clock_manager_s10.c new file +15
-0@@ -0,0 +1,359 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/clock_manager.h> +#include <asm/arch/handoff_s10.h> + +DECLARE_GLOBAL_DATA_PTR ; + +static const struct socfpga_clock_manager *clock_manager_base = + (struct socfpga_clock_manager *)SOCFPGA_CLKMGR_ADDRESS ;
arch/arm/mach-socfpga/clock_manager_s10.c line 25
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ +/* +* function to write the bypass register which requires a poll of the +* busy bit +*/ +static void cm_write_bypass_mainpll (uint32_t val) +{ +writel (val, &clock_manager_base->main_pll.bypass); +cm_wait_for_fsm (); +}
Add a new line..
Quoted 6 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +6
-0+static void cm_write_bypass_perpll (uint32_t val) +{ +writel (val, &clock_manager_base->per_pll.bypass); +cm_wait_for_fsm (); +} +
arch/arm/mach-socfpga/clock_manager_s10.c line 41
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+/* 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 (); +} + +/* +* Setup clocks while making no assumptions about previous state of the clocks. +*
Remove extra line
Quoted 4 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +4
-0+*/ +void cm_basic_init (const struct cm_config *const cfg) +{ +uint32_t mdiv, refclkdiv, mscnt, hscnt, vcocalib;
arch/arm/mach-socfpga/clock_manager_s10.c line 55
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ +if (cfg ==0 ) +return ; + +/* Put all plls in bypass */ +cm_write_bypass_mainpll (CLKMGR_BYPASS_MAINPLL_ALL ); +cm_write_bypass_perpll (CLKMGR_BYPASS_PERPLL_ALL ); + +/* setup main PLL dividers */ +/* calculate the vcocalib value */
Move the above comment to where vcocalib is getting calculated, or remove.
arch/arm/mach-socfpga/clock_manager_s10.c line 60
Quoted 5 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +5
-0+ mdiv = (cfg->main_pll_fdbck >>CLKMGR_FDBCK_MDIV_OFFSET ) & +CLKMGR_FDBCK_MDIV_MASK ; + refclkdiv = (cfg->main_pll_pllglob >>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET ) & +CLKMGR_PLLGLOB_REFCLKDIV_MASK ; + mscnt =200 / (6 + mdiv) / refclkdiv;
Where are these values, 200 and 6 coming from? Should they be a #define?
arch/arm/mach-socfpga/clock_manager_s10.c line 61
Quoted 1 line
arch/arm/mach-socfpga/clock_manager_s10.c new file +1
-0+ hscnt = (mdiv +6 ) * mscnt / refclkdiv -9 ;
Same for 6 and 9 here...
Quoted 14 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +14
-0+ vcocalib = (hscnt &CLKMGR_VCOCALIB_HSCNT_MASK ) | + ((mscnt &CLKMGR_VCOCALIB_MSCNT_MASK ) << +CLKMGR_VCOCALIB_MSCNT_OFFSET ); + +writel ((cfg->main_pll_pllglob & ~CLKMGR_PLLGLOB_PD_MASK & + ~CLKMGR_PLLGLOB_RST_MASK ), + &clock_manager_base->main_pll.pllglob); +writel (cfg->main_pll_fdbck, &clock_manager_base->main_pll.fdbck); +writel (vcocalib, &clock_manager_base->main_pll.vcocalib); +writel (cfg->main_pll_pllc0, &clock_manager_base->main_pll.pllc0); +writel (cfg->main_pll_pllc1, &clock_manager_base->main_pll.pllc1); +writel (cfg->main_pll_nocdiv, &clock_manager_base->main_pll.nocdiv); + +/* setup peripheral PLL dividers */
arch/arm/mach-socfpga/clock_manager_s10.c line 85
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+/* calculate the vcocalib value */ + mdiv = (cfg->per_pll_fdbck >>CLKMGR_FDBCK_MDIV_OFFSET ) & +CLKMGR_FDBCK_MDIV_MASK ; + refclkdiv = (cfg->per_pll_pllglob >>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET ) & +CLKMGR_PLLGLOB_REFCLKDIV_MASK ; + mscnt =200 / (6 + mdiv) / refclkdiv; + hscnt = (mdiv +6 ) * mscnt / refclkdiv -9 ; + vcocalib = (hscnt &CLKMGR_VCOCALIB_HSCNT_MASK ) | + ((mscnt &CLKMGR_VCOCALIB_MSCNT_MASK ) << +CLKMGR_VCOCALIB_MSCNT_OFFSET );
Same comments as above...
Quoted 16 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +16
-0+ +writel ((cfg->per_pll_pllglob & ~CLKMGR_PLLGLOB_PD_MASK & + ~CLKMGR_PLLGLOB_RST_MASK ), + &clock_manager_base->per_pll.pllglob); +writel (cfg->per_pll_fdbck, &clock_manager_base->per_pll.fdbck); +writel (vcocalib, &clock_manager_base->per_pll.vcocalib); +writel (cfg->per_pll_pllc0, &clock_manager_base->per_pll.pllc0); +writel (cfg->per_pll_pllc1, &clock_manager_base->per_pll.pllc1); +writel (cfg->per_pll_emacctl, &clock_manager_base->per_pll.emacctl); +writel (cfg->per_pll_gpiodiv, &clock_manager_base->per_pll.gpiodiv); + +/* Take both PLL out of reset and power up */ +setbits_le32 (&clock_manager_base->main_pll.pllglob, +CLKMGR_PLLGLOB_PD_MASK |CLKMGR_PLLGLOB_RST_MASK ); +setbits_le32 (&clock_manager_base->per_pll.pllglob, +CLKMGR_PLLGLOB_PD_MASK |CLKMGR_PLLGLOB_RST_MASK );
arch/arm/mach-socfpga/clock_manager_s10.c line 111
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ +#define LOCKED_MASK \ + (CLKMGR_STAT_MAINPLL_LOCKED | \ + CLKMGR_STAT_PERPLL_LOCKED) + +cm_wait_for_lock (LOCKED_MASK ); + +/* +* Dividers for C2 to C9 only init after PLLs are lock. We will a large +* dividers value then final value as requested by hardware behaviour
Can you update this comment? I don't understand what "We will a large" means.
Quoted 53 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +53
-0+*/ +writel (0xff , &clock_manager_base->main_pll.mpuclk); +writel (0xff , &clock_manager_base->main_pll.nocclk); +writel (0xff , &clock_manager_base->main_pll.cntr2clk); +writel (0xff , &clock_manager_base->main_pll.cntr3clk); +writel (0xff , &clock_manager_base->main_pll.cntr4clk); +writel (0xff , &clock_manager_base->main_pll.cntr5clk); +writel (0xff , &clock_manager_base->main_pll.cntr6clk); +writel (0xff , &clock_manager_base->main_pll.cntr7clk); +writel (0xff , &clock_manager_base->main_pll.cntr8clk); +writel (0xff , &clock_manager_base->main_pll.cntr9clk); +writel (0xff , &clock_manager_base->per_pll.cntr2clk); +writel (0xff , &clock_manager_base->per_pll.cntr3clk); +writel (0xff , &clock_manager_base->per_pll.cntr4clk); +writel (0xff , &clock_manager_base->per_pll.cntr5clk); +writel (0xff , &clock_manager_base->per_pll.cntr6clk); +writel (0xff , &clock_manager_base->per_pll.cntr7clk); +writel (0xff , &clock_manager_base->per_pll.cntr8clk); +writel (0xff , &clock_manager_base->per_pll.cntr9clk); + +writel (cfg->main_pll_mpuclk, &clock_manager_base->main_pll.mpuclk); +writel (cfg->main_pll_nocclk, &clock_manager_base->main_pll.nocclk); +writel (cfg->main_pll_cntr2clk, &clock_manager_base->main_pll.cntr2clk); +writel (cfg->main_pll_cntr3clk, &clock_manager_base->main_pll.cntr3clk); +writel (cfg->main_pll_cntr4clk, &clock_manager_base->main_pll.cntr4clk); +writel (cfg->main_pll_cntr5clk, &clock_manager_base->main_pll.cntr5clk); +writel (cfg->main_pll_cntr6clk, &clock_manager_base->main_pll.cntr6clk); +writel (cfg->main_pll_cntr7clk, &clock_manager_base->main_pll.cntr7clk); +writel (cfg->main_pll_cntr8clk, &clock_manager_base->main_pll.cntr8clk); +writel (cfg->main_pll_cntr9clk, &clock_manager_base->main_pll.cntr9clk); +writel (cfg->per_pll_cntr2clk, &clock_manager_base->per_pll.cntr2clk); +writel (cfg->per_pll_cntr3clk, &clock_manager_base->per_pll.cntr3clk); +writel (cfg->per_pll_cntr4clk, &clock_manager_base->per_pll.cntr4clk); +writel (cfg->per_pll_cntr5clk, &clock_manager_base->per_pll.cntr5clk); +writel (cfg->per_pll_cntr6clk, &clock_manager_base->per_pll.cntr6clk); +writel (cfg->per_pll_cntr7clk, &clock_manager_base->per_pll.cntr7clk); +writel (cfg->per_pll_cntr8clk, &clock_manager_base->per_pll.cntr8clk); +writel (cfg->per_pll_cntr9clk, &clock_manager_base->per_pll.cntr9clk); + +/* Take all PLLs out of bypass */ +cm_write_bypass_mainpll (0 ); +cm_write_bypass_perpll (0 ); + +/* clear safe mode / out of boot mode */ +cm_write_ctrl (readl (&clock_manager_base->ctrl) + & ~(CLKMGR_CTRL_SAFEMODE )); + +/* Now ungate non-hw-managed clocks */ +writel (~0 , &clock_manager_base->main_pll.en); +writel (~0 , &clock_manager_base->per_pll.en); + +/* Clear the loss of lock bits (write 1 to clear) */ + writel(CLKMGR_INTER_PERPLLLOST_MASK | CLKMGR_INTER_MAINPLLLOST_MASK,
arch/arm/mach-socfpga/clock_manager_s10.c line 174
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ &clock_manager_base->intrclr); +} + +static unsigned long cm_get_main_vco_clk_hz (void ) +{ +unsigned long fref, refdiv, mdiv, reg, vco; + + reg =readl (&clock_manager_base->main_pll.pllglob); + +/* get the fref */
Useless comment...
Quoted 5 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +5
-0+ fref = (reg >>CLKMGR_PLLGLOB_VCO_PSRC_OFFSET ) & +CLKMGR_PLLGLOB_VCO_PSRC_MASK ; +switch (fref) { +case CLKMGR_VCO_PSRC_EOSC1 : + fref =cm_get_osc_clk_hz (0 );
arch/arm/mach-socfpga/clock_manager_s10.c line 189
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+break ; +case CLKMGR_VCO_PSRC_INTOSC : + fref =cm_get_intosc_clk_hz (); +break ; +case CLKMGR_VCO_PSRC_F2S : + fref =cm_get_fpga_clk_hz (); +break ; + } + +/* get the refdiv */
same..
arch/arm/mach-socfpga/clock_manager_s10.c line 193
Quoted 4 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +4
-0+ refdiv = (reg >>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET ) & +CLKMGR_PLLGLOB_REFCLKDIV_MASK ; + +/* get the mdiv */
same...
arch/arm/mach-socfpga/clock_manager_s10.c line 198
Quoted 5 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +5
-0+ reg =readl (&clock_manager_base->main_pll.fdbck); + mdiv = (reg >>CLKMGR_FDBCK_MDIV_OFFSET ) &CLKMGR_FDBCK_MDIV_MASK ; + + vco = fref / refdiv; + vco = vco * (6 + mdiv);
Why 6? Define?
Quoted 130 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +130
-0+return vco; +} + +static unsigned long cm_get_per_vco_clk_hz (void ) +{ +unsigned long fref, refdiv, mdiv, reg, vco; + + reg =readl (&clock_manager_base->per_pll.pllglob); + +/* get the fref */ + fref = (reg >>CLKMGR_PLLGLOB_VCO_PSRC_OFFSET ) & +CLKMGR_PLLGLOB_VCO_PSRC_MASK ; +switch (fref) { +case CLKMGR_VCO_PSRC_EOSC1 : + fref =cm_get_osc_clk_hz (0 ); +break ; +case CLKMGR_VCO_PSRC_INTOSC : + fref =cm_get_intosc_clk_hz (); +break ; +case CLKMGR_VCO_PSRC_F2S : + fref =cm_get_fpga_clk_hz (); +break ; + } + +/* get the refdiv */ + refdiv = (reg >>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET ) & +CLKMGR_PLLGLOB_REFCLKDIV_MASK ; + +/* get the mdiv */ + reg =readl (&clock_manager_base->per_pll.fdbck); + mdiv = (reg >>CLKMGR_FDBCK_MDIV_OFFSET ) &CLKMGR_FDBCK_MDIV_MASK ; + + vco = fref / refdiv; + vco = vco * (6 + mdiv); +return vco; +} + +unsigned long cm_get_mpu_clk_hz (void ) +{ +unsigned long clock =readl (&clock_manager_base->main_pll.mpuclk); + clock = (clock >>CLKMGR_CLKSRC_OFFSET ) &CLKMGR_CLKSRC_MASK ; + +switch (clock) { +case CLKMGR_CLKSRC_MAIN : + clock =cm_get_main_vco_clk_hz (); + clock /= (readl (&clock_manager_base->main_pll.pllc0) & +CLKMGR_PLLC0_DIV_MASK ); +break ; + +case CLKMGR_CLKSRC_PER : + clock =cm_get_per_vco_clk_hz (); + clock /= (readl (&clock_manager_base->per_pll.pllc0) & +CLKMGR_CLKCNT_MSK ); +break ; + +case CLKMGR_CLKSRC_OSC1 : + clock =cm_get_osc_clk_hz (0 ); +break ; + +case CLKMGR_CLKSRC_INTOSC : + clock =cm_get_intosc_clk_hz (); +break ; + +case CLKMGR_CLKSRC_FPGA : + clock =cm_get_fpga_clk_hz (); +break ; + } + + clock /=1 + (readl (&clock_manager_base->main_pll.mpuclk) & +CLKMGR_CLKCNT_MSK ); +return clock; +} + +unsigned int cm_get_l3_main_clk_hz (void ) +{ +uint32_t clock =readl (&clock_manager_base->main_pll.nocclk); + clock = (clock >>CLKMGR_CLKSRC_OFFSET ) &CLKMGR_CLKSRC_MASK ; + +switch (clock) { +case CLKMGR_CLKSRC_MAIN : + clock =cm_get_main_vco_clk_hz (); + clock /= (readl (&clock_manager_base->main_pll.pllc1) & +CLKMGR_PLLC0_DIV_MASK ); +break ; + +case CLKMGR_CLKSRC_PER : + clock =cm_get_per_vco_clk_hz (); + clock /= (readl (&clock_manager_base->per_pll.pllc1) & +CLKMGR_CLKCNT_MSK ); +break ; + +case CLKMGR_CLKSRC_OSC1 : + clock =cm_get_osc_clk_hz (0 ); +break ; + +case CLKMGR_CLKSRC_INTOSC : + clock =cm_get_intosc_clk_hz (); +break ; + +case CLKMGR_CLKSRC_FPGA : + clock =cm_get_fpga_clk_hz (); +break ; + } + + clock /=1 + (readl (&clock_manager_base->main_pll.nocclk) & +CLKMGR_CLKCNT_MSK ); +return clock; +} + +unsigned int cm_get_mmc_controller_clk_hz (void ) +{ +uint32_t clock =readl (&clock_manager_base->per_pll.cntr6clk); + clock = (clock >>CLKMGR_CLKSRC_OFFSET ) &CLKMGR_CLKSRC_MASK ; + +switch (clock) { +case CLKMGR_CLKSRC_MAIN : + clock =cm_get_l3_main_clk_hz (); + clock /=1 + (readl (&clock_manager_base->main_pll.cntr6clk) & +CLKMGR_CLKCNT_MSK ); +break ; + +case CLKMGR_CLKSRC_PER : + clock =cm_get_l3_main_clk_hz (); + clock /=1 + (readl (&clock_manager_base->per_pll.cntr6clk) & +CLKMGR_CLKCNT_MSK ); +break ; + +case CLKMGR_CLKSRC_OSC1 : + clock =cm_get_osc_clk_hz (0 ); +break ;
arch/arm/mach-socfpga/clock_manager_s10.c line 338
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ +case CLKMGR_CLKSRC_INTOSC : + clock =cm_get_intosc_clk_hz (); +break ; + +case CLKMGR_CLKSRC_FPGA : + clock =cm_get_fpga_clk_hz (); +break ; + } +return clock/4 ;
Need space between '/'.
Quoted 306 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +21
-0+} + +unsigned int cm_get_l4_sp_clk_hz (void ) +{ +uint32_t clock =cm_get_l3_main_clk_hz (); + + clock /= (1 << ((readl (&clock_manager_base->main_pll.nocdiv) >> +CLKMGR_NOCDIV_L4SPCLK_OFFSET ) &CLKMGR_CLKCNT_MSK )); +return clock; +} + +void cm_print_clock_quick_summary (void ) +{ +printf ("MPU %d kHz\n" , (u32)(cm_get_mpu_clk_hz () /1000 )); +printf ("L3 main %d kHz\n" ,cm_get_l3_main_clk_hz () /1000 ); +printf ("Main VCO %d kHz\n" , (u32)(cm_get_main_vco_clk_hz () /1000 )); +printf ("Per VCO %d kHz\n" , (u32)(cm_get_per_vco_clk_hz () /1000 )); +printf ("EOSC1 %d kHz\n" ,cm_get_osc_clk_hz (0 ) /1000 ); +printf ("HPS MMC %d kHz\n" ,cm_get_mmc_controller_clk_hz () /1000 ); +printf ("UART %d kHz\n" ,cm_get_l4_sp_clk_hz () /1000 ); +}arch/arm/mach-socfpga/include/mach/clock_manager.h +2
-0@@ -17,6 +17,8 @@ void cm_print_clock_quick_summary(void);#include <asm/arch/clock_manager_gen5.h> #elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 )#include <asm/arch/clock_manager_arria10.h> +#elif defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +#include <asm/arch/clock_manager_s10.h> #endif #endif /* _CLOCK_MANAGER_H_ */ arch/arm/mach-socfpga/include/mach/clock_manager_s10.h new file +202
-0@@ -0,0 +1,202 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _CLOCK_MANAGER_S10_ +#define _CLOCK_MANAGER_S10_ + +/* Clock speed accessors */ +unsigned long cm_get_mpu_clk_hz (void ); +unsigned long cm_get_sdram_clk_hz (void ); +unsigned int cm_get_l4_sp_clk_hz (void ); +unsigned int cm_get_mmc_controller_clk_hz (void ); +unsigned int cm_get_qspi_controller_clk_hz (void ); +unsigned int cm_get_spi_controller_clk_hz (void ); +const unsigned int cm_get_osc_clk_hz (const int osc); +const unsigned int cm_get_f2s_per_ref_clk_hz (void ); +const unsigned int cm_get_f2s_sdr_ref_clk_hz (void ); +const unsigned int cm_get_intosc_clk_hz (void ); +const unsigned int cm_get_fpga_clk_hz (void ); + +/* Clock configuration accessors */ +const struct cm_config *const cm_get_default_config (void ); + +struct cm_config { +/* main group */ +uint32_t main_pll_mpuclk; +uint32_t main_pll_nocclk; +uint32_t main_pll_cntr2clk; +uint32_t main_pll_cntr3clk; +uint32_t main_pll_cntr4clk; +uint32_t main_pll_cntr5clk; +uint32_t main_pll_cntr6clk; +uint32_t main_pll_cntr7clk; +uint32_t main_pll_cntr8clk; +uint32_t main_pll_cntr9clk; +uint32_t main_pll_nocdiv; +uint32_t main_pll_pllglob; +uint32_t main_pll_fdbck; +uint32_t main_pll_pllc0; +uint32_t main_pll_pllc1; +uint32_t spare; + +/* peripheral group */ +uint32_t per_pll_cntr2clk; +uint32_t per_pll_cntr3clk; +uint32_t per_pll_cntr4clk; +uint32_t per_pll_cntr5clk; +uint32_t per_pll_cntr6clk; +uint32_t per_pll_cntr7clk; +uint32_t per_pll_cntr8clk; +uint32_t per_pll_cntr9clk; +uint32_t per_pll_emacctl; +uint32_t per_pll_gpiodiv; +uint32_t per_pll_pllglob; +uint32_t per_pll_fdbck; +uint32_t per_pll_pllc0; +uint32_t per_pll_pllc1; + +/* incoming clock */ +uint32_t hps_osc_clk_hz; +uint32_t fpga_clk_hz; +}; + +void cm_basic_init (const struct cm_config *const cfg); + +struct socfpga_clock_manager_main_pll { +u32 en; +u32 ens; +u32 enr; +u32 bypass; +u32 bypasss; +u32 bypassr; +u32 mpuclk; +u32 nocclk; +u32 cntr2clk; +u32 cntr3clk; +u32 cntr4clk; +u32 cntr5clk; +u32 cntr6clk; +u32 cntr7clk; +u32 cntr8clk; +u32 cntr9clk; +u32 nocdiv; +u32 pllglob; +u32 fdbck; +u32 mem; +u32 memstat; +u32 pllc0; +u32 pllc1; +u32 vcocalib; +u32 _pad_0x90_0xA0[5 ]; +}; + +struct socfpga_clock_manager_per_pll { +u32 en; +u32 ens; +u32 enr; +u32 bypass; +u32 bypasss; +u32 bypassr; +u32 cntr2clk; +u32 cntr3clk; +u32 cntr4clk; +u32 cntr5clk; +u32 cntr6clk; +u32 cntr7clk; +u32 cntr8clk; +u32 cntr9clk; +u32 emacctl; +u32 gpiodiv; +u32 pllglob; +u32 fdbck; +u32 mem; +u32 memstat; +u32 pllc0; +u32 pllc1; +u32 vcocalib; +u32 _pad_0x100_0x124[10 ]; +}; + +struct socfpga_clock_manager { +u32 ctrl; +u32 stat; +u32 testioctrl; +u32 intrgen; +u32 intrmsk; +u32 intrclr; +u32 intrsts; +u32 intrstk; +u32 intrraw; +u32 _pad_0x24_0x2c[3 ]; +struct socfpga_clock_manager_main_pll main_pll; +struct socfpga_clock_manager_per_pll per_pll; +}; + +#define CLKMGR_CTRL_SAFEMODE (1 << 0) +#define CLKMGR_BYPASS_MAINPLL_ALL 0x00000007 +#define CLKMGR_BYPASS_PERPLL_ALL 0x0000007f + +#define CLKMGR_INTER_MAINPLLLOCKED_MASK 0x00000001 +#define CLKMGR_INTER_PERPLLLOCKED_MASK 0x00000002 +#define CLKMGR_INTER_MAINPLLLOST_MASK 0x00000004 +#define CLKMGR_INTER_PERPLLLOST_MASK 0x00000008 +#define CLKMGR_STAT_BUSY (1 << 0) +#define CLKMGR_STAT_MAINPLL_LOCKED (1 << 8) +#define CLKMGR_STAT_PERPLL_LOCKED (1 << 9) + +#define CLKMGR_PLLGLOB_PD_MASK 0x00000001 +#define CLKMGR_PLLGLOB_RST_MASK 0x00000002 +#define CLKMGR_PLLGLOB_VCO_PSRC_MASK 0X3 +#define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET 16 +#define CLKMGR_VCO_PSRC_EOSC1 0 +#define CLKMGR_VCO_PSRC_INTOSC 1 +#define CLKMGR_VCO_PSRC_F2S 2 +#define CLKMGR_PLLGLOB_REFCLKDIV_MASK 0X3f +#define CLKMGR_PLLGLOB_REFCLKDIV_OFFSET 8 + +#define CLKMGR_CLKSRC_MASK 0x7 +#define CLKMGR_CLKSRC_OFFSET 16 +#define CLKMGR_CLKSRC_MAIN 0 +#define CLKMGR_CLKSRC_PER 1 +#define CLKMGR_CLKSRC_OSC1 2 +#define CLKMGR_CLKSRC_INTOSC 3 +#define CLKMGR_CLKSRC_FPGA 4 +#define CLKMGR_CLKCNT_MSK 0x7ff + +#define CLKMGR_FDBCK_MDIV_MASK 0xff +#define CLKMGR_FDBCK_MDIV_OFFSET 24 + +#define CLKMGR_PLLC0_DIV_MASK 0xff +#define CLKMGR_PLLC1_DIV_MASK 0xff +#define CLKMGR_PLLC0_EN_OFFSET 27 +#define CLKMGR_PLLC1_EN_OFFSET 24 + +#define CLKMGR_NOCDIV_L4MAIN_OFFSET 0 +#define CLKMGR_NOCDIV_L4MPCLK_OFFSET 8 +#define CLKMGR_NOCDIV_L4SPCLK_OFFSET 16 +#define CLKMGR_NOCDIV_CSATCLK_OFFSET 24 +#define CLKMGR_NOCDIV_CSTRACECLK_OFFSET 26 +#define CLKMGR_NOCDIV_CSPDBGCLK_OFFSET 28 + +#define CLKMGR_NOCDIV_L4SPCLK_MASK 0X3 +#define CLKMGR_NOCDIV_DIV1 0 +#define CLKMGR_NOCDIV_DIV2 1 +#define CLKMGR_NOCDIV_DIV4 2 +#define CLKMGR_NOCDIV_DIV8 3 +#define CLKMGR_CSPDBGCLK_DIV1 0 +#define CLKMGR_CSPDBGCLK_DIV4 1 + +#define CLKMGR_VCOCALIB_MSCNT_MASK 0xff +#define CLKMGR_VCOCALIB_MSCNT_OFFSET 9 +#define CLKMGR_VCOCALIB_HSCNT_MASK 0xff + +#define CLKMGR_EMACCTL_EMAC0SEL_OFFSET 26 +#define CLKMGR_EMACCTL_EMAC1SEL_OFFSET 27 +#define CLKMGR_EMACCTL_EMAC2SEL_OFFSET 28 + +#define CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK 0x00000020 + +#endif /* _CLOCK_MANAGER_S10_ */ arch/arm/mach-socfpga/include/mach/handoff_s10.h new file +29
-0@@ -0,0 +1,29 @@ +/* +* Copyright (C) 2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _HANDOFF_S10_H_ +#define _HANDOFF_S10_H_ + +/* +* Offset for HW handoff from Quartus tools +*/ +#define CONFIG_HANDOFF_BASE 0xFFE3F000 +#define CONFIG_HANDOFF_MUX (CONFIG_HANDOFF_BASE + 0x10) +#define CONFIG_HANDOFF_IOCTL (CONFIG_HANDOFF_BASE + 0x1A0) +#define CONFIG_HANDOFF_FPGA (CONFIG_HANDOFF_BASE + 0x330) +#define CONFIG_HANODFF_DELAY (CONFIG_HANDOFF_BASE + 0x3F0) +#define CONFIG_HANDOFF_CLOCK (CONFIG_HANDOFF_BASE + 0x580) +#define CONFIG_HANDOFF_MISC (CONFIG_HANDOFF_BASE + 0x610) +#define CONFIG_HANDOFF_MAGIC_MUX 0x504D5558 +#define CONFIG_HANDOFF_MAGIC_IOCTL 0x494F4354 +#define CONFIG_HANDOFF_MAGIC_FPGA 0x46504741 +#define CONFIG_HANDOFF_MAGIC_DELAY 0x444C4159 +#define CONFIG_HANDOFF_MAGIC_CLOCK 0x434C4B53 +#define CONFIG_HANDOFF_MAGIC_MISC 0x4D495343 +#define CONFIG_HANDOFF_OFFSET_LENGTH 0x4 +#define CONFIG_HANDOFF_OFFSET_DATA 0x10 + +#endif /* _HANDOFF_S10_H_ */ arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +23
-0@@ -0,0 +1,46 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#include <common.h> +#include <asm/arch/clock_manager.h> +#include <asm/io.h> +#include <asm/arch/handoff_s10.h> + +const struct cm_config *const cm_get_default_config (void ) +{ +struct cm_config *cm_handoff_cfg = (struct cm_config *) + (CONFIG_HANDOFF_CLOCK +CONFIG_HANDOFF_OFFSET_DATA ); +u32 *conversion = (u32 *)cm_handoff_cfg; +u32 i; + +if (swab32 (readl (CONFIG_HANDOFF_CLOCK )) ==CONFIG_HANDOFF_MAGIC_CLOCK ) { +writel (swab32 (readl (CONFIG_HANDOFF_CLOCK )), +CONFIG_HANDOFF_CLOCK ); +for (i =0 ; i < (sizeof (*cm_handoff_cfg) /sizeof (u32)); i++) + conversion[i] =swab32 (conversion[i]);
arch/arm/mach-socfpga/wrap_pll_config_s10.c line 33
Quoted 10 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +10
-0+return cm_handoff_cfg; + }else if (readl (CONFIG_HANDOFF_CLOCK ) ==CONFIG_HANDOFF_MAGIC_CLOCK ) { +return cm_handoff_cfg; + }else +return 0 ; +} + +const unsigned int cm_get_osc_clk_hz (const int osc) +{ +return 25000000 ;
Needs to be a #define
arch/arm/mach-socfpga/wrap_pll_config_s10.c line 39
Quoted 6 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +6
-0+} + +const unsigned int cm_get_intosc_clk_hz (void ) +{ +/* theory maximum internal osc clock */ +return 460000000 ;
Same...
arch/arm/mach-socfpga/wrap_pll_config_s10.c line 45
Quoted 6 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +6
-0+} + +const unsigned int cm_get_fpga_clk_hz (void ) +{ +/* assuming 50MHz */ +return 50000000 ;
Same..
Dinh
See
PATCH 3/14 arm: socfpga: stratix10: Add Clock Manager driver for Stratix10 SoC
Quoted 141 lines · Dinh Nguyen
Quoted 93 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add Clock Manager driver support for Stratix SoC
Signed-off-by Chin Liang See <[email protected]>---
arch/arm/mach-socfpga/Makefile | 4 + arch/arm/mach-socfpga/clock_manager.c | 4 +- arch/arm/mach-socfpga/clock_manager_s10.c | 359
+++++++++++++++++++++
arch/arm/mach-socfpga/include/mach/clock_manager.h | 2 + .../mach-socfpga/include/mach/clock_manager_s10.h | 202
++++++++++++
arch/arm/mach-socfpga/include/mach/handoff_s10.h | 29 ++ arch/arm/mach-socfpga/wrap_pll_config_s10.c | 46 +++7 files changed, 644 insertions(+), 2 deletions(-)create mode 100644
arch/arm/mach-socfpga/clock_manager_s10.ccreate mode 100644arch/arm/mach-socfpga/include/mach/clock_manager_s10.h
create mode 100644arch/arm/mach-socfpga/include/mach/handoff_s10.h
create mode 100644arch/arm/mach-socfpga/wrap_pll_config_s10.carch/arm/mach- renamed from arch/arm/mach-socfpga/Makefile +0
-0socfpga/Makefile
index 286bfef..e5f9dd7 100644arch/arm/mach-socfpga/Makefile +0
-0@@ -30,6 +30,10 @@ obj-y += pinmux_arria10.oobj-y += reset_manager_arria10.o
endifarch/arm/mach-socfpga/Makefile +4
-0+ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 +obj-y += clock_manager_s10.o +obj-y += wrap_pll_config_s10.o +endififdef
CONFIG_SPL_BUILD
obj-y += spl.o
ifdefCONFIG_TARGET_SOCFPGA_GEN5arch/arm/mach- renamed from arch/arm/mach-socfpga/clock_manager.c +0
-0
socfpga/clock_manager.c
index cb6ae03..f9450a4 100644arch/arm/mach-socfpga/clock_manager.c +0
-0@@ -21,7 +21,7 @@ void cm_wait_for_lock(u32 mask) do { #if defined(CONFIG_TARGET_SOCFPGA_GEN5)inter_val =
readl(&clock_manager_base->inter)& mask;arch/arm/mach-socfpga/clock_manager.c +1
-1-#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#else inter_val =
readl(&clock_manager_base->stat)& mask;
#endif
/* Wait for stable lock */arch/arm/mach-socfpga/clock_manager.c +1
-1@@ -52,7 +52,7 @@ int set_cpu_clk_info(void) #if defined(CONFIG_TARGET_SOCFPGA_GEN5) gd->bd->bi_ddr_freq = cm_get_sdram_clk_hz() / 1000000; -#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 ) +#else gd->bd->bi_ddr_freq = 0; #endifarch/arm/mach-socfpga/clock_manager_s10.c new file +18
-0@@ -0,0 +1,359 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/clock_manager.h> +#include <asm/arch/handoff_s10.h> + +DECLARE_GLOBAL_DATA_PTR ; + +static const struct socfpga_clock_manager *clock_manager_base = + (struct socfpga_clock_manager *)SOCFPGA_CLKMGR_ADDRESS; + +/* +* function to write the bypass register which requires a poll of the
+ * busy bit
+ */arch/arm/mach-socfpga/clock_manager_s10.c line 25
Quoted 5 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +5
-0+static void cm_write_bypass_mainpll (uint32_t val) +{ + writel(val, &clock_manager_base->main_pll.bypass); + cm_wait_for_fsm(); +}Add a new line..
Quoted 17 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +7
-0+static void cm_write_bypass_perpll (uint32_t val) +{ + writel(val, &clock_manager_base->per_pll.bypass); + cm_wait_for_fsm(); +} + +/* function to write the ctrl register which requires a poll of the busy bit */
arch/arm/mach-socfpga/clock_manager_s10.c new file +8
-0+static void cm_write_ctrl (uint32_t val) +{ + writel(val, &clock_manager_base->ctrl); + cm_wait_for_fsm(); +} + +/* +* Setup clocks while making no assumptions about previous state Quoted 2 lines
of the clocks.
+ *Remove extra line
Quoted 5 lines
+ */
arch/arm/mach-socfpga/clock_manager_s10.c new file +3
-0+void cm_basic_init (const struct cm_config *const cfg) +{ + uint32_t mdiv, refclkdiv, mscnt, hscnt, vcocalib;arch/arm/mach-socfpga/clock_manager_s10.c line 55
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ + if (cfg == 0) + return; + + /* Put all plls in bypass */ + cm_write_bypass_mainpll(CLKMGR_BYPASS_MAINPLL_ALL); + cm_write_bypass_perpll(CLKMGR_BYPASS_PERPLL_ALL); + + /* setup main PLL dividers */ + /* calculate the vcocalib value */Move the above comment to where vcocalib is getting calculated, or remove.
Quoted 1 line
Quoted 9 lines
Quoted 6 lines
+ mdiv = (
cfg->main_pll_fdbck>>CLKMGR_FDBCK_MDIV_OFFSET) & + CLKMGR_FDBCK_MDIV_MASK;
+ refclkdiv = (cfg->main_pll_pllglob>>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET) &
+ CLKMGR_PLLGLOB_REFCLKDIV_MASK;
+ mscnt = 200 / (6 + mdiv) / refclkdiv;Where are these values, 200 and 6 coming from? Should they be a #define?
Yes, I can improve the readaibility here.
Quoted 66 lines
Quoted 2 lines
+ hscnt = (mdiv + 6) * mscnt / refclkdiv - 9;
Same for 6 and 9 here...
Quoted 17 lines
+ vcocalib = (hscnt &
CLKMGR_VCOCALIB_HSCNT_MASK) | + ((mscnt &CLKMGR_VCOCALIB_MSCNT_MASK) << + CLKMGR_VCOCALIB_MSCNT_OFFSET);
+
+ writel((cfg->main_pll_pllglob & ~CLKMGR_PLLGLOB_PD_MASK & + ~CLKMGR_PLLGLOB_RST_MASK),
+ &clock_manager_base->main_pll.pllglob); + writel(cfg->main_pll_fdbck, &clock_manager_base-Quoted 1 line
main_pll.fdbck);
+ writel(vcocalib,
&clock_manager_base->main_pll.vcocalib); + writel(cfg->main_pll_pllc0, &clock_manager_base-Quoted 1 line
main_pll.pllc0);
+ writel(cfg->main_pll_pllc1, &clock_manager_base-
Quoted 1 line
main_pll.pllc1);
+ writel(cfg->main_pll_nocdiv, &clock_manager_base-
Quoted 1 line
main_pll.nocdiv);
Quoted 13 lines
+
+ /* setup peripheral PLL dividers */
+ /* calculate the vcocalib value */
+ mdiv = (cfg->per_pll_fdbck>>CLKMGR_FDBCK_MDIV_OFFSET) & + CLKMGR_FDBCK_MDIV_MASK;
+ refclkdiv = (cfg->per_pll_pllglob>>CLKMGR_PLLGLOB_REFCLKDIV_OFFSET) &
+ CLKMGR_PLLGLOB_REFCLKDIV_MASK;
+ mscnt = 200 / (6 + mdiv) / refclkdiv;
+ hscnt = (mdiv + 6) * mscnt / refclkdiv - 9;
+ vcocalib = (hscnt &CLKMGR_VCOCALIB_HSCNT_MASK) | + ((mscnt &CLKMGR_VCOCALIB_MSCNT_MASK) << + CLKMGR_VCOCALIB_MSCNT_OFFSET);Same comments as above...
Quoted 30 lines
+
+ writel((cfg->per_pll_pllglob & ~CLKMGR_PLLGLOB_PD_MASK & + ~CLKMGR_PLLGLOB_RST_MASK),
+ &clock_manager_base->per_pll.pllglob); + writel(cfg->per_pll_fdbck, &clock_manager_base-Quoted 1 line
per_pll.fdbck);
+ writel(vcocalib,
&clock_manager_base->per_pll.vcocalib); + writel(cfg->per_pll_pllc0, &clock_manager_base-Quoted 1 line
per_pll.pllc0);
+ writel(cfg->per_pll_pllc1, &clock_manager_base-
Quoted 1 line
per_pll.pllc1);
+ writel(cfg->per_pll_emacctl, &clock_manager_base-
Quoted 1 line
per_pll.emacctl);
+ writel(cfg->per_pll_gpiodiv, &clock_manager_base-
Quoted 1 line
per_pll.gpiodiv);
+
+ /* Take both PLL out of reset and power up */ + setbits_le32(&clock_manager_base->main_pll.pllglob, + CLKMGR_PLLGLOB_PD_MASK |CLKMGR_PLLGLOB_RST_MASK);
+ setbits_le32(&clock_manager_base->per_pll.pllglob, + CLKMGR_PLLGLOB_PD_MASK |CLKMGR_PLLGLOB_RST_MASK);arch/arm/mach-socfpga/clock_manager_s10.c new file +6
-0+ +#define LOCKED_MASK \ + (CLKMGR_STAT_MAINPLL_LOCKED | \ + CLKMGR_STAT_PERPLL_LOCKED) + + cm_wait_for_lock(LOCKED_MASK);
Quoted 8 lines
Quoted 6 lines
+
+ /*
+ * Dividers for C2 to C9 only init after PLLs are lock. We will a large
+ * dividers value then final value as requested by hardware behaviourCan you update this comment? I don't understand what "We will a large" means.
Let me rephrase to why instead how.
Chin Liang
Quoted 639 lines
Quoted 75 lines
+ */
+ writel(0xff,&clock_manager_base->main_pll.mpuclk); + writel(0xff,&clock_manager_base->main_pll.nocclk); + writel(0xff,&clock_manager_base->main_pll.cntr2clk); + writel(0xff,&clock_manager_base->main_pll.cntr3clk); + writel(0xff,&clock_manager_base->main_pll.cntr4clk); + writel(0xff,&clock_manager_base->main_pll.cntr5clk); + writel(0xff,&clock_manager_base->main_pll.cntr6clk); + writel(0xff,&clock_manager_base->main_pll.cntr7clk); + writel(0xff,&clock_manager_base->main_pll.cntr8clk); + writel(0xff,&clock_manager_base->main_pll.cntr9clk); + writel(0xff,&clock_manager_base->per_pll.cntr2clk); + writel(0xff,&clock_manager_base->per_pll.cntr3clk); + writel(0xff,&clock_manager_base->per_pll.cntr4clk); + writel(0xff,&clock_manager_base->per_pll.cntr5clk); + writel(0xff,&clock_manager_base->per_pll.cntr6clk); + writel(0xff,&clock_manager_base->per_pll.cntr7clk); + writel(0xff,&clock_manager_base->per_pll.cntr8clk); + writel(0xff,&clock_manager_base->per_pll.cntr9clk); +
+ writel(cfg->main_pll_mpuclk, &clock_manager_base-Quoted 1 line
main_pll.mpuclk);
+ writel(cfg->main_pll_nocclk, &clock_manager_base-
Quoted 1 line
main_pll.nocclk);
+ writel(cfg->main_pll_cntr2clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr2clk);
+ writel(cfg->main_pll_cntr3clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr3clk);
+ writel(cfg->main_pll_cntr4clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr4clk);
+ writel(cfg->main_pll_cntr5clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr5clk);
+ writel(cfg->main_pll_cntr6clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr6clk);
+ writel(cfg->main_pll_cntr7clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr7clk);
+ writel(cfg->main_pll_cntr8clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr8clk);
+ writel(cfg->main_pll_cntr9clk, &clock_manager_base-
Quoted 1 line
main_pll.cntr9clk);
+ writel(cfg->per_pll_cntr2clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr2clk);
+ writel(cfg->per_pll_cntr3clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr3clk);
+ writel(cfg->per_pll_cntr4clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr4clk);
+ writel(cfg->per_pll_cntr5clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr5clk);
+ writel(cfg->per_pll_cntr6clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr6clk);
+ writel(cfg->per_pll_cntr7clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr7clk);
+ writel(cfg->per_pll_cntr8clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr8clk);
+ writel(cfg->per_pll_cntr9clk, &clock_manager_base-
Quoted 1 line
per_pll.cntr9clk);
arch/arm/mach-socfpga/clock_manager_s10.c new file +15
-0+ + /* Take all PLLs out of bypass */ + cm_write_bypass_mainpll(0); + cm_write_bypass_perpll(0); + + /* clear safe mode / out of boot mode */ + cm_write_ctrl(readl(&clock_manager_base->ctrl) + & ~(CLKMGR_CTRL_SAFEMODE)); + + /* Now ungate non-hw-managed clocks */ + writel(~0, &clock_manager_base->main_pll.en); + writel(~0, &clock_manager_base->per_pll.en); + + /* Clear the loss of lock bits (write 1 to clear) */ + writel(CLKMGR_INTER_PERPLLLOST_MASK |
CLKMGR_INTER_MAINPLLLOST_MASK,
+ &clock_manager_base->intrclr);arch/arm/mach-socfpga/clock_manager_s10.c line 174
Quoted 9 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +9
-0+} + +static unsigned long cm_get_main_vco_clk_hz (void ) +{ + unsigned long fref, refdiv, mdiv, reg, vco; + + reg = readl(&clock_manager_base->main_pll.pllglob); + + /* get the fref */Useless comment...
Quoted 16 lines
+ fref = (reg >>
CLKMGR_PLLGLOB_VCO_PSRC_OFFSET) & + CLKMGR_PLLGLOB_VCO_PSRC_MASK;
+ switch (fref) {
+ caseCLKMGR_VCO_PSRC_EOSC1:
+ fref =cm_get_osc_clk_hz(0);
+ break;
+ caseCLKMGR_VCO_PSRC_INTOSC:
+ fref =cm_get_intosc_clk_hz(); + break;
+ caseCLKMGR_VCO_PSRC_F2S:
+ fref =cm_get_fpga_clk_hz();
+ break;
+ }
+
+ /* get the refdiv */same..
Quoted 5 lines
+ refdiv = (reg >>
CLKMGR_PLLGLOB_REFCLKDIV_OFFSET) & + CLKMGR_PLLGLOB_REFCLKDIV_MASK;
+
+ /* get the mdiv */same...
Quoted 7 lines
+ reg =
readl(&clock_manager_base->main_pll.fdbck); + mdiv = (reg >>CLKMGR_FDBCK_MDIV_OFFSET) &CLKMGR_FDBCK_MDIV_MASK;
+
+ vco = fref / refdiv;
+ vco = vco * (6 + mdiv);Why 6? Define?
Quoted 144 lines
+ return vco;
arch/arm/mach-socfpga/clock_manager_s10.c new file +30
-0+} + +static unsigned long cm_get_per_vco_clk_hz (void ) +{ + unsigned long fref, refdiv, mdiv, reg, vco; + + reg = readl(&clock_manager_base->per_pll.pllglob); + + /* get the fref */ + fref = (reg >> CLKMGR_PLLGLOB_VCO_PSRC_OFFSET) & + CLKMGR_PLLGLOB_VCO_PSRC_MASK; + switch (fref) { + case CLKMGR_VCO_PSRC_EOSC1: + fref = cm_get_osc_clk_hz(0); + break; + case CLKMGR_VCO_PSRC_INTOSC: + fref = cm_get_intosc_clk_hz(); + break; + case CLKMGR_VCO_PSRC_F2S: + fref = cm_get_fpga_clk_hz(); + break; + } + + /* get the refdiv */ + refdiv = (reg >> CLKMGR_PLLGLOB_REFCLKDIV_OFFSET) & + CLKMGR_PLLGLOB_REFCLKDIV_MASK; + + /* get the mdiv */ + reg = readl(&clock_manager_base->per_pll.fdbck); + mdiv = (reg >> CLKMGR_FDBCK_MDIV_OFFSET) &
CLKMGR_FDBCK_MDIV_MASK;arch/arm/mach-socfpga/clock_manager_s10.c new file +9
-0+ + vco = fref / refdiv; + vco = vco * (6 + mdiv); + return vco; +} + +unsigned long cm_get_mpu_clk_hz (void ) +{ + unsigned long clock = readl(&clock_manager_base-Quoted 1 line
main_pll.mpuclk);
+ clock = (clock >>
CLKMGR_CLKSRC_OFFSET) &CLKMGR_CLKSRC_MASK;
+
+ switch (clock) {
+ caseCLKMGR_CLKSRC_MAIN:
+ clock =cm_get_main_vco_clk_hz(); + clock /= (readl(&clock_manager_base-Quoted 1 line
main_pll.pllc0) &
+ CLKMGR_PLLC0_DIV_MASK);
+ break;
+
+ caseCLKMGR_CLKSRC_PER:
+ clock =cm_get_per_vco_clk_hz();
+ clock /= (readl(&clock_manager_base->per_pll.pllc0)&
+ CLKMGR_CLKCNT_MSK);
+ break;arch/arm/mach-socfpga/clock_manager_s10.c new file +22
-0+ + case CLKMGR_CLKSRC_OSC1: + clock = cm_get_osc_clk_hz(0); + break; + + case CLKMGR_CLKSRC_INTOSC: + clock = cm_get_intosc_clk_hz(); + break; + + case CLKMGR_CLKSRC_FPGA: + clock = cm_get_fpga_clk_hz(); + break; + } + + clock /= 1 + (readl(&clock_manager_base->main_pll.mpuclk) & + CLKMGR_CLKCNT_MSK); + return clock; +} + +unsigned int cm_get_l3_main_clk_hz (void ) +{ + uint32_t clock = readl(&clock_manager_base-Quoted 1 line
main_pll.nocclk);
+ clock = (clock >>
CLKMGR_CLKSRC_OFFSET) &CLKMGR_CLKSRC_MASK;
+
+ switch (clock) {
+ caseCLKMGR_CLKSRC_MAIN:
+ clock =cm_get_main_vco_clk_hz(); + clock /= (readl(&clock_manager_base-Quoted 1 line
main_pll.pllc1) &
+ CLKMGR_PLLC0_DIV_MASK);
+ break;
+
+ caseCLKMGR_CLKSRC_PER:
+ clock =cm_get_per_vco_clk_hz();
+ clock /= (readl(&clock_manager_base->per_pll.pllc1)&
+ CLKMGR_CLKCNT_MSK);
+ break;arch/arm/mach-socfpga/clock_manager_s10.c new file +22
-0+ + case CLKMGR_CLKSRC_OSC1: + clock = cm_get_osc_clk_hz(0); + break; + + case CLKMGR_CLKSRC_INTOSC: + clock = cm_get_intosc_clk_hz(); + break; + + case CLKMGR_CLKSRC_FPGA: + clock = cm_get_fpga_clk_hz(); + break; + } + + clock /= 1 + (readl(&clock_manager_base->main_pll.nocclk) & + CLKMGR_CLKCNT_MSK); + return clock; +} + +unsigned int cm_get_mmc_controller_clk_hz (void ) +{ + uint32_t clock = readl(&clock_manager_base-Quoted 1 line
per_pll.cntr6clk);
+ clock = (clock >>
CLKMGR_CLKSRC_OFFSET) &CLKMGR_CLKSRC_MASK;
+
+ switch (clock) {
+ caseCLKMGR_CLKSRC_MAIN:
+ clock =cm_get_l3_main_clk_hz(); + clock /= 1 + (readl(&clock_manager_base-Quoted 1 line
main_pll.cntr6clk) &
+ CLKMGR_CLKCNT_MSK);
+ break;
+
+ caseCLKMGR_CLKSRC_PER:
+ clock =cm_get_l3_main_clk_hz(); + clock /= 1 + (readl(&clock_manager_base-Quoted 1 line
per_pll.cntr6clk) &
+ CLKMGR_CLKCNT_MSK);
+ break;arch/arm/mach-socfpga/clock_manager_s10.c new file +4
-0+ + case CLKMGR_CLKSRC_OSC1: + clock = cm_get_osc_clk_hz(0); + break;arch/arm/mach-socfpga/clock_manager_s10.c line 338
Quoted 10 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +10
-0+ + case CLKMGR_CLKSRC_INTOSC: + clock = cm_get_intosc_clk_hz(); + break; + + case CLKMGR_CLKSRC_FPGA: + clock = cm_get_fpga_clk_hz(); + break; + } + return clock/4;Need space between '/'.
Quoted 337 lines
arch/arm/mach-socfpga/clock_manager_s10.c new file +7
-0+} + +unsigned int cm_get_l4_sp_clk_hz (void ) +{ + uint32_t clock = cm_get_l3_main_clk_hz(); + + clock /= (1 << ((readl(&clock_manager_base-Quoted 1 line
main_pll.nocdiv) >>
+ CLKMGR_NOCDIV_L4SPCLK_OFFSET) &
CLKMGR_CLKCNT_MSK));
+ return clock;arch/arm/mach-socfpga/clock_manager_s10.c new file +5
-0+} + +void cm_print_clock_quick_summary (void ) +{ + printf("MPU %d kHz\n", (u32)(cm_get_mpu_clk_hz() /1000));
+ printf("L3 main %d kHz\n",cm_get_l3_main_clk_hz()/ 1000);
+ printf("Main VCO %d kHz\n", (u32)(cm_get_main_vco_clk_hz() / 1000));
+ printf("Per VCO %d kHz\n", (u32)(cm_get_per_vco_clk_hz() / 1000));
+ printf("EOSC1 %d kHz\n",cm_get_osc_clk_hz(0)/ 1000);
+ printf("HPS MMC %d kHz\n",cm_get_mmc_controller_clk_hz()/ 1000);
+ printf("UART %d kHz\n",cm_get_l4_sp_clk_hz()/ 1000);arch/arm/mach-socfpga/clock_manager_s10.c new file +1
-0+}arch/arm/mach-socfpga/include/mach/clock_manager.h +2
-0@@ -17,6 +17,8 @@ void cm_print_clock_quick_summary(void); #include <asm/arch/clock_manager_gen5.h> #elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10) #include <asm/arch/clock_manager_arria10.h> +#elif defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +#include <asm/arch/clock_manager_s10.h> #endif #endif /* _CLOCK_MANAGER_H_ */arch/arm/mach-socfpga/include/mach/clock_manager_s10.h new file +142
-0@@ -0,0 +1,202 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _CLOCK_MANAGER_S10_ +#define _CLOCK_MANAGER_S10_ + +/* Clock speed accessors */ +unsigned long cm_get_mpu_clk_hz (void ); +unsigned long cm_get_sdram_clk_hz (void ); +unsigned int cm_get_l4_sp_clk_hz (void ); +unsigned int cm_get_mmc_controller_clk_hz (void ); +unsigned int cm_get_qspi_controller_clk_hz (void ); +unsigned int cm_get_spi_controller_clk_hz (void ); +const unsigned int cm_get_osc_clk_hz (const int osc); +const unsigned int cm_get_f2s_per_ref_clk_hz (void ); +const unsigned int cm_get_f2s_sdr_ref_clk_hz (void ); +const unsigned int cm_get_intosc_clk_hz (void ); +const unsigned int cm_get_fpga_clk_hz (void ); + +/* Clock configuration accessors */ +const struct cm_config *const cm_get_default_config (void ); + +struct cm_config { + /* main group */ + uint32_t main_pll_mpuclk; + uint32_t main_pll_nocclk; + uint32_t main_pll_cntr2clk; + uint32_t main_pll_cntr3clk; + uint32_t main_pll_cntr4clk; + uint32_t main_pll_cntr5clk; + uint32_t main_pll_cntr6clk; + uint32_t main_pll_cntr7clk; + uint32_t main_pll_cntr8clk; + uint32_t main_pll_cntr9clk; + uint32_t main_pll_nocdiv; + uint32_t main_pll_pllglob; + uint32_t main_pll_fdbck; + uint32_t main_pll_pllc0; + uint32_t main_pll_pllc1; + uint32_t spare; + + /* peripheral group */ + uint32_t per_pll_cntr2clk; + uint32_t per_pll_cntr3clk; + uint32_t per_pll_cntr4clk; + uint32_t per_pll_cntr5clk; + uint32_t per_pll_cntr6clk; + uint32_t per_pll_cntr7clk; + uint32_t per_pll_cntr8clk; + uint32_t per_pll_cntr9clk; + uint32_t per_pll_emacctl; + uint32_t per_pll_gpiodiv; + uint32_t per_pll_pllglob; + uint32_t per_pll_fdbck; + uint32_t per_pll_pllc0; + uint32_t per_pll_pllc1; + + /* incoming clock */ + uint32_t hps_osc_clk_hz; + uint32_t fpga_clk_hz; +}; + +void cm_basic_init (const struct cm_config *const cfg); + +struct socfpga_clock_manager_main_pll { + u32 en; + u32 ens; + u32 enr; + u32 bypass; + u32 bypasss; + u32 bypassr; + u32 mpuclk; + u32 nocclk; + u32 cntr2clk; + u32 cntr3clk; + u32 cntr4clk; + u32 cntr5clk; + u32 cntr6clk; + u32 cntr7clk; + u32 cntr8clk; + u32 cntr9clk; + u32 nocdiv; + u32 pllglob; + u32 fdbck; + u32 mem; + u32 memstat; + u32 pllc0; + u32 pllc1; + u32 vcocalib; + u32 _pad_0x90_0xA0[5]; +}; + +struct socfpga_clock_manager_per_pll { + u32 en; + u32 ens; + u32 enr; + u32 bypass; + u32 bypasss; + u32 bypassr; + u32 cntr2clk; + u32 cntr3clk; + u32 cntr4clk; + u32 cntr5clk; + u32 cntr6clk; + u32 cntr7clk; + u32 cntr8clk; + u32 cntr9clk; + u32 emacctl; + u32 gpiodiv; + u32 pllglob; + u32 fdbck; + u32 mem; + u32 memstat; + u32 pllc0; + u32 pllc1; + u32 vcocalib; + u32 _pad_0x100_0x124[10]; +}; + +struct socfpga_clock_manager { + u32 ctrl; + u32 stat; + u32 testioctrl; + u32 intrgen; + u32 intrmsk; + u32 intrclr; + u32 intrsts; + u32 intrstk; + u32 intrraw; + u32 _pad_0x24_0x2c[3]; + struct socfpga_clock_manager_main_pll main_pll; + struct socfpga_clock_manager_per_pll per_pll; +}; + +#define CLKMGR_CTRL_SAFEMODE (1 << 0) +#define CLKMGR_BYPASS_MAINPLL_ALL 0x00000007 +#define CLKMGR_BYPASS_PERPLL_ALL 0x0000007f + +#defineCLKMGR_INTER_MAINPLLLOCKED_MASK 0x00000001
arch/arm/mach-socfpga/include/mach/clock_manager_s10.h new file +9
-0+#define CLKMGR_INTER_PERPLLLOCKED_MASK 0x00000002 +#define CLKMGR_INTER_MAINPLLLOST_MASK 0x00000004 +#define CLKMGR_INTER_PERPLLLOST_MASK 0x00000008 +#define CLKMGR_STAT_BUSY (1 << 0) +#define CLKMGR_STAT_MAINPLL_LOCKED (1 << 8) +#define CLKMGR_STAT_PERPLL_LOCKED (1 << 9) + +#define CLKMGR_PLLGLOB_PD_MASK 0x00000001 +#defineCLKMGR_PLLGLOB_RST_MASK 0x00000002
arch/arm/mach-socfpga/include/mach/clock_manager_s10.h new file +51
-0+#define CLKMGR_PLLGLOB_VCO_PSRC_MASK 0X3 +#define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET 16 +#define CLKMGR_VCO_PSRC_EOSC1 0 +#define CLKMGR_VCO_PSRC_INTOSC 1 +#define CLKMGR_VCO_PSRC_F2S 2 +#define CLKMGR_PLLGLOB_REFCLKDIV_MASK 0X3f +#define CLKMGR_PLLGLOB_REFCLKDIV_OFFSET 8 + +#define CLKMGR_CLKSRC_MASK 0x7 +#define CLKMGR_CLKSRC_OFFSET 16 +#define CLKMGR_CLKSRC_MAIN 0 +#define CLKMGR_CLKSRC_PER 1 +#define CLKMGR_CLKSRC_OSC1 2 +#define CLKMGR_CLKSRC_INTOSC 3 +#define CLKMGR_CLKSRC_FPGA 4 +#define CLKMGR_CLKCNT_MSK 0x7ff + +#define CLKMGR_FDBCK_MDIV_MASK 0xff +#define CLKMGR_FDBCK_MDIV_OFFSET 24 + +#define CLKMGR_PLLC0_DIV_MASK 0xff +#define CLKMGR_PLLC1_DIV_MASK 0xff +#define CLKMGR_PLLC0_EN_OFFSET 27 +#define CLKMGR_PLLC1_EN_OFFSET 24 + +#define CLKMGR_NOCDIV_L4MAIN_OFFSET 0 +#define CLKMGR_NOCDIV_L4MPCLK_OFFSET 8 +#define CLKMGR_NOCDIV_L4SPCLK_OFFSET 16 +#define CLKMGR_NOCDIV_CSATCLK_OFFSET 24 +#define CLKMGR_NOCDIV_CSTRACECLK_OFFSET 26 +#define CLKMGR_NOCDIV_CSPDBGCLK_OFFSET 28 + +#define CLKMGR_NOCDIV_L4SPCLK_MASK 0X3 +#define CLKMGR_NOCDIV_DIV1 0 +#define CLKMGR_NOCDIV_DIV2 1 +#define CLKMGR_NOCDIV_DIV4 2 +#define CLKMGR_NOCDIV_DIV8 3 +#define CLKMGR_CSPDBGCLK_DIV1 0 +#define CLKMGR_CSPDBGCLK_DIV4 1 + +#define CLKMGR_VCOCALIB_MSCNT_MASK 0xff +#define CLKMGR_VCOCALIB_MSCNT_OFFSET 9 +#define CLKMGR_VCOCALIB_HSCNT_MASK 0xff + +#define CLKMGR_EMACCTL_EMAC0SEL_OFFSET 26 +#define CLKMGR_EMACCTL_EMAC1SEL_OFFSET 27 +#define CLKMGR_EMACCTL_EMAC2SEL_OFFSET 28 + +#define CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK 0x00000020 + +#endif /* _CLOCK_MANAGER_S10_ */ arch/arm/mach-socfpga/include/mach/handoff_s10.h new file +14
-0@@ -0,0 +1,29 @@ +/* +* Copyright (C) 2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _HANDOFF_S10_H_ +#define _HANDOFF_S10_H_ + +/* +* Offset for HW handoff from Quartus tools +*/ +#define CONFIG_HANDOFF_BASE 0xFFE3F000 +#define CONFIG_HANDOFF_MUX (CONFIG_HANDOFF_BASE +
0x10)
+#define CONFIG_HANDOFF_IOCTL (CONFIG_HANDOFF_BASE +0x1A0)
+#define CONFIG_HANDOFF_FPGA (CONFIG_HANDOFF_BASE +0x330)
+#define CONFIG_HANODFF_DELAY (CONFIG_HANDOFF_BASE +0x3F0)
+#define CONFIG_HANDOFF_CLOCK (CONFIG_HANDOFF_BASE +0x580)
+#define CONFIG_HANDOFF_MISC (CONFIG_HANDOFF_BASE +0x610)arch/arm/mach-socfpga/include/mach/handoff_s10.h new file +10
-0+#define CONFIG_HANDOFF_MAGIC_MUX 0x504D5558 +#define CONFIG_HANDOFF_MAGIC_IOCTL 0x494F4354 +#define CONFIG_HANDOFF_MAGIC_FPGA 0x46504741 +#define CONFIG_HANDOFF_MAGIC_DELAY 0x444C4159 +#define CONFIG_HANDOFF_MAGIC_CLOCK 0x434C4B53 +#define CONFIG_HANDOFF_MAGIC_MISC 0x4D495343 +#define CONFIG_HANDOFF_OFFSET_LENGTH 0x4 +#define CONFIG_HANDOFF_OFFSET_DATA 0x10 + +#endif /* _HANDOFF_S10_H_ */ arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +15
-0@@ -0,0 +1,46 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#include <common.h> +#include <asm/arch/clock_manager.h> +#include <asm/io.h> +#include <asm/arch/handoff_s10.h> + +const struct cm_config *const cm_get_default_config (void ) +{ + struct cm_config *cm_handoff_cfg = (struct cm_config *) + (CONFIG_HANDOFF_CLOCK +
CONFIG_HANDOFF_OFFSET_DATA);
+ u32 *conversion = (u32 *)cm_handoff_cfg;
+ u32 i;
+
+ if (swab32(readl(CONFIG_HANDOFF_CLOCK)) ==CONFIG_HANDOFF_MAGIC_CLOCK) {
+ writel(swab32(readl(CONFIG_HANDOFF_CLOCK)), + CONFIG_HANDOFF_CLOCK);
+ for (i = 0; i < (sizeof(*cm_handoff_cfg)/ sizeof(u32)); i++)
+ conversion[i] =swab32(conversion[i]); + returncm_handoff_cfg;
+ } else if (readl(CONFIG_HANDOFF_CLOCK)==CONFIG_HANDOFF_MAGIC_CLOCK) {
+ returncm_handoff_cfg;
+ } else
+ return 0;arch/arm/mach-socfpga/wrap_pll_config_s10.c line 33
Quoted 5 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +5
-0+} + +const unsigned int cm_get_osc_clk_hz (const int osc) +{ + return 25000000;Needs to be a #define
arch/arm/mach-socfpga/wrap_pll_config_s10.c line 39
Quoted 7 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +6
-0+} + +const unsigned int cm_get_intosc_clk_hz (void ) +{ + /* theory maximum internal osc clock */ + return 460000000;Same...
arch/arm/mach-socfpga/wrap_pll_config_s10.c line 45
Quoted 7 lines
arch/arm/mach-socfpga/wrap_pll_config_s10.c new file +6
-0+} + +const unsigned int cm_get_fpga_clk_hz (void ) +{ + /* assuming 50MHz */ + return 50000000;Same..
Dinh
PATCH 4/14 arm: socfpga: stratix10: Add Reset Manager driver for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add Reset Manager driver support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/include/mach/reset_manager.h | 2 + .../mach-socfpga/include/mach/reset_manager_s10.h | 116 +++++++++++++++++ arch/arm/mach-socfpga/reset_manager.c | 5 + arch/arm/mach-socfpga/reset_manager_s10.c | 140 +++++++++++++++++++++ include/dt-bindings/reset/altr,rst-mgr-s10.h | 97 ++++++++++++++ 6 files changed, 361 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/reset_manager_s10.h create mode 100644 arch/arm/mach-socfpga/reset_manager_s10.c create mode 100644 include/dt-bindings/reset/altr,rst-mgr-s10.h
arch/arm/mach-socfpga/Makefile +1 -0
@@ -32,6 +32,7 @@ endif ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o +obj-y += reset_manager_s10.o obj-y += wrap_pll_config_s10.o endif ifdef CONFIG_SPL_BUILD
arch/arm/mach-socfpga/include/mach/reset_manager.h +2 -0
@@ -45,6 +45,8 @@ void socfpga_per_reset_all(void);#include <asm/arch/reset_manager_gen5.h> #elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10 )#include <asm/arch/reset_manager_arria10.h> +#elif defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +#include <asm/arch/reset_manager_s10.h> #endif #endif /* _RESET_MANAGER_H_ */
arch/arm/mach-socfpga/include/mach/reset_manager_s10.h new file +116 -0
116 lines not on this page · raw message
arch/arm/mach-socfpga/reset_manager.c +5 -0
@@ -20,8 +20,13 @@ static const struct socfpga_reset_manager *reset_manager_base =void reset_cpu (ulong addr) {/* request a warm reset */ +#if defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +writel ((1 <<RSTMGR_MPUMODRST_CORE0 ), + &reset_manager_base->mpu_mod_reset); +#else writel (1 <<RSTMGR_CTRL_SWWARMRSTREQ_LSB , &reset_manager_base->ctrl); +#endif /* * infinite loop here as watchdog will trigger and reset * the processor
arch/arm/mach-socfpga/reset_manager_s10.c new file +140 -0
140 lines not on this page · raw message
include/dt-bindings/reset/altr,rst-mgr-s10.h new file +97 -0
97 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 4/14 arm: socfpga: stratix10: Add Reset Manager driver for Stratix10 SoC
Quoted 11 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add Reset Manager driver support for Stratix SoC
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/include/mach/reset_manager.h | 2 + .../mach-socfpga/include/mach/reset_manager_s10.h | 116 +++++++++++++++++ arch/arm/mach-socfpga/reset_manager.c | 5 + arch/arm/mach-socfpga/reset_manager_s10.c | 140 +++++++++++++++++++++
I don't see why you need to add a new file for S10? The functionality between Gen 5 and Stratix10 is identical for the reset manager.
Dinh
See
PATCH 4/14 arm: socfpga: stratix10: Add Reset Manager driver for Stratix10 SoC
Quoted 15 lines · Dinh Nguyen
Quoted 6 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add Reset Manager driver support for Stratix SoC
Signed-off-by Chin Liang See <[email protected]>Quoted 8 lines
---
arch/arm/mach-socfpga/Makefile | 1 +arch/arm/mach-socfpga/include/mach/reset_manager.h| 2 + .../mach-socfpga/include/mach/reset_manager_s10.h | 116
+++++++++++++++++
arch/arm/mach-socfpga/reset_manager.c | 5 + arch/arm/mach-socfpga/reset_manager_s10.c | 140
+++++++++++++++++++++
Quoted 3 lines
I don't see why you need to add a new file for S10? The functionality between
Gen 5 and Stratix10 is identical for the reset manager.
Not really, they have same functions name but sequences are difference due to diff interconnect technology. Hence, try to avoid too much #if #else
Chin Liang
Quoted 2 lines
Dinh
PATCH 4/14 arm: socfpga: stratix10: Add Reset Manager driver for Stratix10 SoC
Quoted 16 lines · Chin Liang
Quoted 15 lines · Dinh Nguyen
Quoted 14 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add Reset Manager driver support for Stratix SoC
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/include/mach/reset_manager.h | 2 + .../mach-socfpga/include/mach/reset_manager_s10.h | 116 +++++++++++++++++ arch/arm/mach-socfpga/reset_manager.c | 5 + arch/arm/mach-socfpga/reset_manager_s10.c | 140+++++++++++++++++++++
Quoted 8 lines
Quoted 3 lines
I don't see why you need to add a new file for S10? The functionality between
Gen 5 and Stratix10 is identical for the reset manager.Not really, they have same functions name but sequences are difference due to diff interconnect technology. Hence, try to avoid too much #if #else
How so? I'm able to re-use the same driver for Linux on the Stratix10.
Dinh
PATCH 5/14 arm: socfpga: stratix10: Add pinmux support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add pinmux driver support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 2 + .../arm/mach-socfpga/include/mach/system_manager.h | 5 +- .../mach-socfpga/include/mach/system_manager_s10.h | 169 +++++++++++++++++++++ arch/arm/mach-socfpga/system_manager_s10.c | 91 +++++++++++ arch/arm/mach-socfpga/wrap_pinmux_config_s10.c | 55 +++++++ 5 files changed, 321 insertions(+), 1 deletion(-) create mode 100644 arch/arm/mach-socfpga/include/mach/system_manager_s10.h create mode 100644 arch/arm/mach-socfpga/system_manager_s10.c create mode 100644 arch/arm/mach-socfpga/wrap_pinmux_config_s10.c
arch/arm/mach-socfpga/Makefile +2 -0
@@ -33,6 +33,8 @@ endif ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o obj-y += reset_manager_s10.o +obj-y += system_manager_s10.o +obj-y += wrap_pinmux_config_s10.o obj-y += wrap_pll_config_s10.o endif ifdef CONFIG_SPL_BUILD
arch/arm/mach-socfpga/include/mach/system_manager.h +4 -1
@@ -7,6 +7,9 @@#ifndef _SYSTEM_MANAGER_H_#define _SYSTEM_MANAGER_H_ +#if defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +#include <asm/arch/system_manager_s10.h> +#else #define SYSMGR_ROMCODEGRP_CTRL_WARMRSTCFGPINMUX BIT(0)#define SYSMGR_ROMCODEGRP_CTRL_WARMRSTCFGIO BIT(1)#define SYSMGR_ECC_OCRAM_EN BIT(0)
@@ -89,5 +92,5 @@#define SYSMGR_GET_BOOTINFO_BSEL (bsel) \ (((bsel) >> SYSMGR_BOOTINFO_BSEL_SHIFT) & 7) - +#endif #endif /* _SYSTEM_MANAGER_H_ */
arch/arm/mach-socfpga/include/mach/system_manager_s10.h new file +169 -0
169 lines not on this page · raw message
arch/arm/mach-socfpga/system_manager_s10.c new file +91 -0
91 lines not on this page · raw message
arch/arm/mach-socfpga/wrap_pinmux_config_s10.c new file +55 -0
55 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 6/14 arm: socfpga: stratix10: Add misc support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add misc support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/misc.c | 4 + arch/arm/mach-socfpga/misc_s10.c | 165 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 arch/arm/mach-socfpga/misc_s10.c
arch/arm/mach-socfpga/Makefile +1 -0
@@ -32,6 +32,7 @@ endif ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o +obj-y += misc_s10.o obj-y += reset_manager_s10.o obj-y += system_manager_s10.o obj-y += wrap_pinmux_config_s10.o
arch/arm/mach-socfpga/misc.c +4 -0
@@ -23,8 +23,10 @@DECLARE_GLOBAL_DATA_PTR ; +#ifdef CONFIG_SYS_L2_PL310 static const struct pl310_regs *const pl310 = (struct pl310_regs *)CONFIG_SYS_PL310_BASE ; +#endif struct bsel bsel_str[] = { {"rsvd" ,"Reserved" , },
@@ -53,6 +55,7 @@ void enable_caches(void)#endif } +#ifdef CONFIG_SYS_L2_PL310 void v7_outer_cache_enable (void ) {/* Disable the L2 cache */
@@ -73,6 +76,7 @@ void v7_outer_cache_disable(void)/* Disable the L2 cache */ clrbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN); } +#endif #if defined(CONFIG_SYS_CONSOLE_IS_IN_ENV ) && \ defined(CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE )
arch/arm/mach-socfpga/misc_s10.c new file +165 -0
165 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 6/14 arm: socfpga: stratix10: Add misc support for Stratix10 SoC
Quoted 3 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add misc support for Stratix SoC
Just because the file is call misc.c doesn't mean you can just keep the commit message that simple. Can you add what functions are you adding?
arch/arm/mach-socfpga/misc_s10.c
Quoted 57 lines
Signed-off-by Chin Liang See <[email protected]>--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/misc.c | 4 + arch/arm/mach-socfpga/misc_s10.c | 165 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 arch/arm/mach-socfpga/misc_s10.carch/arm/mach-socfpga/Makefile +1
-0@@ -32,6 +32,7 @@ endif ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o +obj-y += misc_s10.o obj-y += reset_manager_s10.o obj-y += system_manager_s10.o obj-y += wrap_pinmux_config_s10.oarch/arm/mach-socfpga/misc.c +4
-0@@ -23,8 +23,10 @@DECLARE_GLOBAL_DATA_PTR ; +#ifdef CONFIG_SYS_L2_PL310 static const struct pl310_regs *const pl310 = (struct pl310_regs *)CONFIG_SYS_PL310_BASE ; +#endif struct bsel bsel_str[] = { {"rsvd" ,"Reserved" , },@@ -53,6 +55,7 @@ void enable_caches(void)#endif } +#ifdef CONFIG_SYS_L2_PL310 void v7_outer_cache_enable (void ) {/* Disable the L2 cache */ @@ -73,6 +76,7 @@ void v7_outer_cache_disable(void)/* Disable the L2 cache */ clrbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN); } +#endif #if defined(CONFIG_SYS_CONSOLE_IS_IN_ENV ) && \ defined(CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE )arch/arm/mach-socfpga/misc_s10.c new file +0
-0
This misc_s10.c look very similar to the Gen5 stuff, can you re-use it?
Dinh
See
PATCH 6/14 arm: socfpga: stratix10: Add misc support for Stratix10 SoC
Quoted 9 lines · Dinh Nguyen
Quoted 4 lines · On Tue, Sep 19, 2017 at 4:22 AM, <[email protected]> wrote:
From: Chin Liang See <[email protected]>
Add misc support for Stratix SoC
Just because the file is call
misc.cdoesn't mean you can just keep the commit
message that simple. Can you add what functions are you adding?
Definitely can add more details here
Quoted 54 lines
Quoted 54 lines
Signed-off-by Chin Liang See <[email protected]>---
arch/arm/mach-socfpga/Makefile | 1 +
arch/arm/mach-socfpga/misc.c | 4 +
arch/arm/mach-socfpga/misc_s10.c | 165
+++++++++++++++++++++++++++++++++++++++3 files changed, 170 insertions(+)create mode 100644
arch/arm/mach-socfpga/misc_s10.carch/arm/mach- renamed from arch/arm/mach-socfpga/Makefile +0
-0socfpga/Makefile
index 910eb6f..b253914 100644arch/arm/mach-socfpga/Makefile +0
-0@@ -32,6 +32,7 @@ endififdef
CONFIG_TARGET_SOCFPGA_STRATIX10
obj-y += clock_manager_s10.o
+obj-y += misc_s10.o
obj-y += reset_manager_s10.o
obj-y += system_manager_s10.o
obj-y += wrap_pinmux_config_s10.oarch/arm/mach- renamed from arch/arm/mach-socfpga/misc.c +0
-0
socfpga/misc.c
index 00eff90..2ea94bc 100644arch/arm/mach-socfpga/misc.c +1
-0@@ -23,8 +23,10 @@ DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_SYS_L2_PL310 static const struct
pl310_regs*const pl310 = (structpl310_regs*)CONFIG_SYS_PL310_BASE; +#endifstruct bsel bsel_str[] = {
{ "rsvd", "Reserved", },arch/arm/mach-socfpga/misc.c +2
-0@@ -53,6 +55,7 @@ void enable_caches(void) #endif } +#ifdef CONFIG_SYS_L2_PL310 void v7_outer_cache_enable(void) { /* Disable the L2 cache */@@ -73,6 +76,7 @@ void v7_outer_cache_disable(void) /* Disable the L2 cache */ clrbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN); } +#endif
Quoted 10 lines
arch/arm/mach-socfpga/misc_s10.c
Quoted 8 lines
arch/arm/mach-socfpga/misc.c +0
-0#if defined(CONFIG_SYS_CONSOLE_IS_IN_ENV) && \ defined(CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE)arch/arm/mach- renamed from arch/arm/mach-socfpga/misc_s10.c +0
-0
socfpga/misc_s10.c
new file mode 100644
index 0000000..b84f055arch/arm/mach-socfpga/misc_s10.c new file +0
-0This
misc_s10.clook very similar to the Gen5 stuff, can you re-use it?
Yes, its true.
Let me move eth stuff to common.
Chin Liang
Quoted 2 lines
Dinh
PATCH 7/14 arm: socfpga: stratix10: Add mailbox support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add mailbox support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/include/mach/mailbox_s10.h | 108 ++++++++++ arch/arm/mach-socfpga/mailbox_s10.c | 239 +++++++++++++++++++++++ 3 files changed, 348 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/mailbox_s10.h create mode 100644 arch/arm/mach-socfpga/mailbox_s10.c
arch/arm/mach-socfpga/Makefile +1 -0
@@ -32,6 +32,7 @@ endif ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o +obj-y += mailbox_s10.o obj-y += misc_s10.o obj-y += reset_manager_s10.o obj-y += system_manager_s10.o
arch/arm/mach-socfpga/include/mach/mailbox_s10.h new file +108 -0
108 lines not on this page · raw message
arch/arm/mach-socfpga/mailbox_s10.c new file +239 -0
239 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 8/14 arm: socfpga: stratix10: Add MMU support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add MMU support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 1 + arch/arm/mach-socfpga/mmu-arm64_s10.c | 71 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 arch/arm/mach-socfpga/mmu-arm64_s10.c
arch/arm/mach-socfpga/Makefile +1 -0
@@ -34,6 +34,7 @@ ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 obj-y += clock_manager_s10.o obj-y += mailbox_s10.o obj-y += misc_s10.o +obj-y += mmu-arm64_s10.o obj-y += reset_manager_s10.o obj-y += system_manager_s10.o obj-y += wrap_pinmux_config_s10.o
arch/arm/mach-socfpga/mmu-arm64_s10.c new file +71 -0
71 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 9/14 arm: socfpga: Restructure the SPL file
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Restructure the SPL so each devices such as CV, A10 and S10 will have their own dedicated SPL file. SPL file determine the HW initialization flow which is device specific
---
arch/arm/mach-socfpga/Makefile | 5 +-
arch/arm/mach-socfpga/spl_a10.c | 105 ++++++++++++++++++++++++++++
arch/arm/mach-socfpga/{spl.c => spl_gen5.c} | 46 ------------
3 files changed, 109 insertions(+), 47 deletions(-)
create mode 100644 arch/arm/mach-socfpga/spl_a10.c
rename arch/arm/mach-socfpga/{spl.c => spl_gen5.c} (83%)arch/arm/mach-socfpga/Makefile +4 -1
@@ -41,13 +41,16 @@ obj-y += wrap_pinmux_config_s10.o obj-y += wrap_pll_config_s10.o endif ifdef CONFIG_SPL_BUILD -obj-y += spl.o ifdef CONFIG_TARGET_SOCFPGA_GEN5 +obj-y += spl_gen5.o obj-y += freeze_controller.o obj-y += wrap_iocsr_config.o obj-y += wrap_pinmux_config.o obj-y += wrap_sdram_config.o endif +ifdef CONFIG_TARGET_SOCFPGA_ARRIA10 +obj-y += spl_a10.o +endif endif ifdef CONFIG_TARGET_SOCFPGA_GEN5
arch/arm/mach-socfpga/spl_a10.c new file +105 -0
105 lines not on this page · raw message
arch/arm/mach-socfpga/spl_gen5.c renamed from arch/arm/mach-socfpga/spl.c +0 -46
70 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 10/14 arm: socfpga: stratix10: Add SPL driver for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add SPL driver support for Stratix SoC
--- arch/arm/mach-socfpga/Makefile | 4 + arch/arm/mach-socfpga/include/mach/base_addr_s10.h | 4 + arch/arm/mach-socfpga/include/mach/firewall_s10.h | 84 +++++++++++++ arch/arm/mach-socfpga/spl_s10.c | 138 +++++++++++++++++++++ 4 files changed, 230 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/firewall_s10.h create mode 100644 arch/arm/mach-socfpga/spl_s10.c
arch/arm/mach-socfpga/Makefile +4 -0
@@ -40,6 +40,7 @@ obj-y += system_manager_s10.o obj-y += wrap_pinmux_config_s10.o obj-y += wrap_pll_config_s10.o endif + ifdef CONFIG_SPL_BUILD ifdef CONFIG_TARGET_SOCFPGA_GEN5 obj-y += spl_gen5.o
@@ -51,6 +52,9 @@ endif ifdef CONFIG_TARGET_SOCFPGA_ARRIA10 obj-y += spl_a10.o endif +ifdef CONFIG_TARGET_SOCFPGA_STRATIX10 +obj-y += spl_s10.o +endif endif ifdef CONFIG_TARGET_SOCFPGA_GEN5
arch/arm/mach-socfpga/include/mach/base_addr_s10.h +4 -0
@@ -45,6 +45,10 @@#define SOCFPGA_RSTMGR_ADDRESS 0xffd11000#define SOCFPGA_SYSMGR_ADDRESS 0xffd12000#define SOCFPGA_PINMUX_DEDICATED_IO_ADDRESS 0xffd13000 +#define SOCFPGA_FIREWALL_L4_PER 0xffd21000 +#define SOCFPGA_FIREWALL_L4_SYS 0xffd21100 +#define SOCFPGA_FIREWALL_SOC2FPGA 0xffd21200 +#define SOCFPGA_FIREWALL_LWSOC2FPGA 0xffd21300#define SOCFPGA_DMANONSECURE_ADDRESS 0xffda0000#define SOCFPGA_DMASECURE_ADDRESS 0xffda1000#define SOCFPGA_SPIS0_ADDRESS 0xffda2000
arch/arm/mach-socfpga/include/mach/firewall_s10.h new file +84 -0
84 lines not on this page · raw message
arch/arm/mach-socfpga/spl_s10.c new file +138 -0
138 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 11/14 arm: socfpga: stratix10: Add timer support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add timer support for Stratix SoC
--- arch/arm/mach-socfpga/timer.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
arch/arm/mach-socfpga/timer.c +16 -1
@@ -1,5 +1,6 @@/* -* Copyright (C) 2012 Altera Corporation <www.altera.com> +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* Copyright (C) 2012-2016 Altera Corporation <www.altera.com> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -10,15 +11,29 @@#define TIMER_LOAD_VAL 0xFFFFFFFF +#if !defined(CONFIG_TARGET_SOCFPGA_STRATIX10 )static const struct socfpga_timer *timer_base = (void *)CONFIG_SYS_TIMERBASE ; +#endif /* * Timer initialization */ int timer_init (void ) { +#if defined(CONFIG_TARGET_SOCFPGA_STRATIX10 ) +int enable =0x3 ;/* timer enable + output signal masked */ +int loadval = ~0 ; + +/* enable system counter */ +writel (enable,SOCFPGA_GTIMER_SEC_ADDRESS ); +/* enable processor pysical counter */ + asmvolatile ("msr cntp_ctl_el0, %0" : :"r" (enable)); + asmvolatile ("msr cntp_tval_el0, %0" : :"r" (loadval)); + +#else writel (TIMER_LOAD_VAL , &timer_base->load_val);writel (TIMER_LOAD_VAL , &timer_base->curr_val);writel (readl (&timer_base->ctrl) |0x3 , &timer_base->ctrl); +#endif return 0 ; }
Signature · 1 line
2.2.2
PATCH 12/14 ddr: altera: stratix10: Add DDR support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add DDR support for Stratix SoC
--- arch/arm/mach-socfpga/include/mach/sdram_s10.h | 333 +++++++++++++++++++++ drivers/ddr/altera/Makefile | 1 + drivers/ddr/altera/sdram_s10.c | 382 +++++++++++++++++++++++++ 3 files changed, 716 insertions(+) create mode 100644 arch/arm/mach-socfpga/include/mach/sdram_s10.h create mode 100644 drivers/ddr/altera/sdram_s10.c
arch/arm/mach-socfpga/include/mach/sdram_s10.h new file +333 -0
@@ -0,0 +1,333 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#ifndef _SDRAM_S10_H_ +#define _SDRAM_S10_H_ + +unsigned long sdram_calculate_size (void ); +int sdram_mmr_init_full (unsigned int sdr_phy_reg); +int sdram_calibration_full (void ); + +#define DDR_TWR 15 +#define DDR_READ_LATENCY_DELAY 40 +#define DDR_ACTIVATE_FAWBANK 0x1 + + +struct socfpga_ecc_hmc { +uint32_t ip_rev_id; +uint32_t _pad_0x4_0x7; +uint32_t ddrioctrl; +uint32_t ddrcalstat; +uint32_t mpr_0beat1; +uint32_t mpr_1beat1; +uint32_t mpr_2beat1; +uint32_t mpr_3beat1; +uint32_t mpr_4beat1; +uint32_t mpr_5beat1; +uint32_t mpr_6beat1; +uint32_t mpr_7beat1; +uint32_t mpr_8beat1; +uint32_t mpr_0beat2; +uint32_t mpr_1beat2; +uint32_t mpr_2beat2; +uint32_t mpr_3beat2; +uint32_t mpr_4beat2; +uint32_t mpr_5beat2; +uint32_t mpr_6beat2; +uint32_t mpr_7beat2; +uint32_t mpr_8beat2; +uint32_t _pad_0x58_0x5f[2 ]; +uint32_t auto_precharge; +uint32_t _pad_0x64_0xdf[31 ]; +uint32_t dramaddrwidth; +uint32_t _pad_0xe4_0xff[7 ]; +uint32_t eccctrl; +uint32_t eccctrl2; +uint32_t _pad_0x108_0x10f[2 ]; +uint32_t errinten; +uint32_t errintens; +uint32_t errintenr; +uint32_t intmode; +uint32_t intstat; +uint32_t diaginttest; +uint32_t modstat; +uint32_t derraddra; +uint32_t serraddra; +uint32_t _pad_0x134_0x137; +uint32_t autowb_corraddr; +uint32_t serrcntreg; +uint32_t autowb_drop_cntreg; +uint32_t ecc_reg2wreccdatabus; +uint32_t ecc_rdeccdata2regbus; +uint32_t ecc_reg2rdeccdatabus; +uint32_t ecc_diagon; +uint32_t ecc_decstat; +uint32_t _pad_0x158_0x15f[2 ]; +uint32_t ecc_errgenaddr_0; +uint32_t ecc_errgenaddr_1; +uint32_t ecc_errgenaddr_2; +uint32_t ecc_errgenaddr_3; +uint32_t ecc_ref2rddatabus_beat0; +uint32_t ecc_ref2rddatabus_beat1; +uint32_t ecc_ref2rddatabus_beat2; +uint32_t ecc_ref2rddatabus_beat3; +uint32_t ecc_errgenhaddr_0; +uint32_t ecc_errgenhaddr_1; +uint32_t ecc_errgenhaddr_2; +uint32_t ecc_errgenhaddr_3; +uint32_t ecc_rdeccdata2regbus_beat0; +uint32_t ecc_rdeccdata2regbus_beat1; +uint32_t ecc_rdeccdata2regbus_beat2; +uint32_t ecc_rdeccdata2regbus_beat3; +uint32_t _pad_0x1a0_0x1af[4 ]; +uint32_t derrhaddr; +uint32_t serrhaddr; +uint32_t _pad_0x1b8_0x1bb; +uint32_t autowb_corrhaddr; +uint32_t _pad_0x1c0_0x20f[20 ]; +uint32_t hpsintfcsel; +uint32_t rsthandshakectrl; +uint32_t rsthandshakestat; +}; + +struct socfpga_noc_ddr_scheduler { +uint32_t main_scheduler_id_coreid; +uint32_t main_scheduler_id_revisionid; +uint32_t main_scheduler_ddrconf; +uint32_t main_scheduler_ddrtiming; +uint32_t main_scheduler_ddrmode; +uint32_t main_scheduler_readlatency; +uint32_t _pad_0x18_0x37[8 ]; +uint32_t main_scheduler_activate; +uint32_t main_scheduler_devtodev; +uint32_t main_scheduler_ddr4timing; +}; + +struct socfpga_io48_mmr { +uint32_t dbgcfg0; +uint32_t dbgcfg1; +uint32_t dbgcfg2; +uint32_t dbgcfg3; +uint32_t dbgcfg4; +uint32_t dbgcfg5; +uint32_t dbgcfg6; +uint32_t reserve0; +uint32_t reserve1; +uint32_t reserve2; +uint32_t ctrlcfg0; +uint32_t ctrlcfg1; +uint32_t ctrlcfg2; +uint32_t ctrlcfg3; +uint32_t ctrlcfg4; +uint32_t ctrlcfg5; +uint32_t ctrlcfg6; +uint32_t ctrlcfg7; +uint32_t ctrlcfg8; +uint32_t ctrlcfg9; +uint32_t dramtiming0; +uint32_t dramodt0; +uint32_t dramodt1; +uint32_t sbcfg0; +uint32_t sbcfg1; +uint32_t sbcfg2; +uint32_t sbcfg3; +uint32_t sbcfg4; +uint32_t sbcfg5; +uint32_t sbcfg6; +uint32_t sbcfg7; +uint32_t caltiming0; +uint32_t caltiming1; +uint32_t caltiming2; +uint32_t caltiming3; +uint32_t caltiming4; +uint32_t caltiming5; +uint32_t caltiming6; +uint32_t caltiming7; +uint32_t caltiming8; +uint32_t caltiming9; +uint32_t caltiming10; +uint32_t dramaddrw; +uint32_t sideband0; +uint32_t sideband1; +uint32_t sideband2; +uint32_t sideband3; +uint32_t sideband4; +uint32_t sideband5; +uint32_t sideband6; +uint32_t sideband7; +uint32_t sideband8; +uint32_t sideband9; +uint32_t sideband10; +uint32_t sideband11; +uint32_t sideband12; +uint32_t sideband13; +uint32_t sideband14; +uint32_t sideband15; +uint32_t dramsts; +uint32_t dbgdone; +uint32_t dbgsignals; +uint32_t dbgreset; +uint32_t dbgmatch; +uint32_t counter0mask; +uint32_t counter1mask; +uint32_t counter0match; +uint32_t counter1match; +uint32_t niosreserve0; +uint32_t niosreserve1; +uint32_t niosreserve2; +}; + +union dramaddrw_reg { +struct { +u32 cfg_col_addr_width:5 ; +u32 cfg_row_addr_width:5 ; +u32 cfg_bank_addr_width:4 ; +u32 cfg_bank_group_addr_width:2 ; +u32 cfg_cs_addr_width:3 ; +u32 reserved:13 ; + }; +u32 word; +}; + +union ctrlcfg0_reg { +struct { +u32 cfg_mem_type:4 ; +u32 cfg_dimm_type:3 ; +u32 cfg_ac_pos:2 ; +u32 cfg_ctrl_burst_len:5 ; +u32 reserved:18 ;/* Other fields unused */ + }; +u32 word; +}; + +union ctrlcfg1_reg { +struct { +u32 cfg_dbc3_burst_len:5 ; +u32 cfg_addr_order:2 ; +u32 cfg_ctrl_enable_ecc:1 ; +u32 reserved:24 ;/* Other fields unused */ + }; +u32 word; +}; + +union dramtiming0_reg { +struct { +u32 cfg_tcl:6 ; +u32 reserved:8 ;/* Other fields unused */ + }; +u32 word; +}; + +union caltiming0_reg { +struct { +u32 cfg_act_to_rdwr:6 ; +u32 cfg_act_to_pch:6 ; +u32 cfg_act_to_act:6 ; +u32 cfg_act_to_act_db:6 ; +u32 reserved:8 ;/* Other fields unused */ + }; +u32 word; +}; + +union caltiming1_reg { +struct { +u32 cfg_rd_to_rd:6 ; +u32 cfg_rd_to_rd_dc:6 ; +u32 cfg_rd_to_rd_db:6 ; +u32 cfg_rd_to_wr:6 ; +u32 cfg_rd_to_wr_dc:6 ; +u32 reserved:2 ; + }; +u32 word; +}; + +union caltiming2_reg { +struct { +u32 cfg_rd_to_wr_db:6 ; +u32 cfg_rd_to_pch:6 ; +u32 cfg_rd_ap_to_valid:6 ; +u32 cfg_wr_to_wr:6 ; +u32 cfg_wr_to_wr_dc:6 ; +u32 reserved:2 ; + }; +u32 word; +}; + +union caltiming3_reg { +struct { +u32 cfg_wr_to_wr_db:6 ; +u32 cfg_wr_to_rd:6 ; +u32 cfg_wr_to_rd_dc:6 ; +u32 cfg_wr_to_rd_db:6 ; +u32 cfg_wr_to_pch:6 ; +u32 reserved:2 ; + }; +u32 word; +}; + +union caltiming4_reg { +struct { +u32 cfg_wr_ap_to_valid:6 ; +u32 cfg_pch_to_valid:6 ; +u32 cfg_pch_all_to_valid:6 ; +u32 cfg_arf_to_valid:8 ; +u32 cfg_pdn_to_valid:6 ; + }; +u32 word; +}; + +union caltiming9_reg { +struct { +u32 cfg_4_act_to_act:8 ; +u32 reserved:24 ; + }; +u32 word; +}; + +#define DDR_SCHED_DDRTIMING_ACTTOACT_OFFSET 0 +#define DDR_SCHED_DDRTIMING_RDTOMISS_OFFSET 6 +#define DDR_SCHED_DDRTIMING_WRTOMISS_OFFSET 12 +#define DDR_SCHED_DDRTIMING_BURSTLEN_OFFSET 18 +#define DDR_SCHED_DDRTIMING_RDTOWR_OFFSET 21 +#define DDR_SCHED_DDRTIMING_WRTORD_OFFSET 26 +#define DDR_SCHED_DDRTIMING_BWRATIO_OFFSET 31 +#define DDR_SCHED_DDRMOD_BWRATIOEXTENDED_OFFSET 1 +#define DDR_SCHED_ACTIVATE_RRD_OFFSET 0 +#define DDR_SCHED_ACTIVATE_FAW_OFFSET 4 +#define DDR_SCHED_ACTIVATE_FAWBANK_OFFSET 10 +#define DDR_SCHED_DEVTODEV_BUSRDTORD_OFFSET 0 +#define DDR_SCHED_DEVTODEV_BUSRDTOWR_OFFSET 2 +#define DDR_SCHED_DEVTODEV_BUSWRTORD_OFFSET 4 +#define DDR_HMC_DDRIOCTRL_IOSIZE_MSK 0x00000003 +#define DDR_HMC_DDRCALSTAT_CAL_MSK 0x00000001 +#define DDR_HMC_ECCCTL_AWB_CNT_RST_SET_MSK 0x00010000 +#define DDR_HMC_ECCCTL_CNT_RST_SET_MSK 0x00000100 +#define DDR_HMC_ECCCTL_ECC_EN_SET_MSK 0x00000001 +#define DDR_HMC_ECCCTL2_RMW_EN_SET_MSK 0x00000100 +#define DDR_HMC_ECCCTL2_AWB_EN_SET_MSK 0x00000001 +#define DDR_HMC_RSTHANDSHAKE_MASK 0x000000ff +#define DDR_HMC_CORE2SEQ_INT_REQ 0xF +#define DDR_HMC_SEQ2CORE_INT_RESP_MASK 0x8 +#define DDR_HMC_HPSINTFCSEL_ENABLE_MASK 0x001f1f1f + +#define CCU_CPU0_MPRT_ADBASE_DDRREG_ADDR 0xf7004400 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE0_ADDR 0xf70045c0 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE1A_ADDR 0xf70045e0 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE1B_ADDR 0xf7004600 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE1C_ADDR 0xf7004620 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE1D_ADDR 0xf7004640 +#define CCU_CPU0_MPRT_ADBASE_MEMSPACE1E_ADDR 0xf7004660 + +#define CCU_IOM_MPRT_ADBASE_MEMSPACE0_ADDR 0xf7018560 +#define CCU_IOM_MPRT_ADBASE_MEMSPACE1A_ADDR 0xf7018580 +#define CCU_IOM_MPRT_ADBASE_MEMSPACE1B_ADDR 0xf70185a0 +#define CCU_IOM_MPRT_ADBASE_MEMSPACE1C_ADDR 0xf70185c0 +#define CCU_IOM_MPRT_ADBASE_MEMSPACE1D_ADDR 0xf70185e0 +#define CCU_IOM_MPRT_ADBASE_MEMSPACE1E_ADDR 0xf7018600 + +#define CCU_ADBASE_DI_MASK 0x00000010 + +#endif /* _SDRAM_S10_H_ */
drivers/ddr/altera/Makefile +1 -0
@@ -10,4 +10,5 @@ ifdef CONFIG_ALTERA_SDRAM obj-$(CONFIG_TARGET_SOCFPGA_GEN5) += sdram.o sequencer.o +obj-$(CONFIG_TARGET_SOCFPGA_STRATIX10) += sdram_s10.o endif
drivers/ddr/altera/sdram_s10.c new file +382 -0
382 lines not on this page · raw message
Signature · 1 line
2.2.2
PATCH 13/14 board: altera: stratix10: Add socdk board support for Stratix10 SoC
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add socdk board support for Stratix SoC
--- board/altera/stratix10-socdk/MAINTAINERS | 7 +++++++ board/altera/stratix10-socdk/Makefile | 7 +++++++ board/altera/stratix10-socdk/socfpga.c | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 board/altera/stratix10-socdk/MAINTAINERS create mode 100644 board/altera/stratix10-socdk/Makefile create mode 100644 board/altera/stratix10-socdk/socfpga.c
board/altera/stratix10-socdk/MAINTAINERS new file +7 -0
@@ -0,0 +1,7 @@ +SOCFPGA BOARD +M: Chin-Liang See <[email protected]> +M: Dinh Nguyen <[email protected]> +S: Maintained +F: board/altera/stratix10-socdk/ +F: include/configs/socfpga_stratix10_socdk.h +F: configs/socfpga_stratix10_defconfig
board/altera/stratix10-socdk/Makefile new file +7 -0
@@ -0,0 +1,7 @@ +# +# Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y := socfpga.o
board/altera/stratix10-socdk/socfpga.c new file +7 -0
@@ -0,0 +1,7 @@ +/* +* Copyright (C) 2016-2017 Intel Corporation <www.intel.com> +* +* SPDX-License-Identifier: GPL-2.0 +*/ + +#include <common.h>
Signature · 1 line
2.2.2
PATCH 14/14 arm: socfpga: stratix10: Enable Stratix10 SoC build
In reply to chin.liang.see at intel.comFrom: Chin Liang See <[email protected]>
Add build support for Stratix SoC
--- arch/arm/Kconfig | 8 +- arch/arm/mach-socfpga/Kconfig | 13 ++ configs/socfpga_stratix10_defconfig | 39 ++++++ include/configs/socfpga_stratix10_socdk.h | 216 ++++++++++++++++++++++++++++++ 4 files changed, 273 insertions(+), 3 deletions(-) create mode 100644 configs/socfpga_stratix10_defconfig create mode 100644 include/configs/socfpga_stratix10_socdk.h
arch/arm/Kconfig +5 -3
@@ -655,21 +655,23 @@ config ARCH_SNAPDRAGON config ARCH_SOCFPGA bool "Altera SOCFPGA family" - select CPU_V7 + select CPU_V7 if TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10 + select ARM64 if TARGET_SOCFPGA_STRATIX10 select SUPPORT_SPL select OF_CONTROL select SPL_OF_CONTROL select DM select DM_SPI_FLASH select DM_SPI - select ENABLE_ARM_SOC_BOOT0_HOOK + select ENABLE_ARM_SOC_BOOT0_HOOK if TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10 select ARCH_EARLY_INIT_R select ARCH_MISC_INIT select SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION - select SYS_THUMB_BUILD + select SYS_THUMB_BUILD if TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10 imply CMD_MTDPARTS imply CRC32_VERIFY imply FAT_WRITE + select SPL_SEPARATE_BSS if TARGET_SOCFPGA_STRATIX10 config ARCH_SUNXI bool "Support sunxi (Allwinner) SoCs"
arch/arm/mach-socfpga/Kconfig +13 -0
@@ -49,6 +49,12 @@ config TARGET_SOCFPGA_GEN5 bool select ALTERA_SDRAM +config TARGET_SOCFPGA_STRATIX10 + bool + select ARMV8_MULTIENTRY + select ARMV8_SPIN_TABLE + select ARMV8_SET_SMPEN + choice prompt "Altera SOCFPGA board select" optional
@@ -86,6 +92,10 @@ config TARGET_SOCFPGA_SR1500 bool "SR1500 (Cyclone V)" select TARGET_SOCFPGA_CYCLONE5 +config TARGET_SOCFPGA_STRATIX10_SOCDK + bool "Intel SOCFPGA SoCDK (Stratix 10)" + select TARGET_SOCFPGA_STRATIX10 + config TARGET_SOCFPGA_TERASIC_DE0_NANO bool "Terasic DE0-Nano-Atlas (Cyclone V)" select TARGET_SOCFPGA_CYCLONE5
@@ -116,12 +126,14 @@ config SYS_BOARD default "sockit" if TARGET_SOCFPGA_TERASIC_SOCKIT default "socrates" if TARGET_SOCFPGA_EBV_SOCRATES default "sr1500" if TARGET_SOCFPGA_SR1500 + default "stratix10-socdk" if TARGET_SOCFPGA_STRATIX10_SOCDK default "vining_fpga" if TARGET_SOCFPGA_SAMTEC_VINING_FPGA config SYS_VENDOR default "altera" if TARGET_SOCFPGA_ARRIA5_SOCDK default "altera" if TARGET_SOCFPGA_ARRIA10_SOCDK default "altera" if TARGET_SOCFPGA_CYCLONE5_SOCDK + default "altera" if TARGET_SOCFPGA_STRATIX10_SOCDK default "aries" if TARGET_SOCFPGA_ARIES_MCVEVK default "ebv" if TARGET_SOCFPGA_EBV_SOCRATES default "samtec" if TARGET_SOCFPGA_SAMTEC_VINING_FPGA
@@ -145,6 +157,7 @@ config SYS_CONFIG_NAME default "socfpga_sockit" if TARGET_SOCFPGA_TERASIC_SOCKIT default "socfpga_socrates" if TARGET_SOCFPGA_EBV_SOCRATES default "socfpga_sr1500" if TARGET_SOCFPGA_SR1500 + default "socfpga_stratix10_socdk" if TARGET_SOCFPGA_STRATIX10_SOCDK default "socfpga_vining_fpga" if TARGET_SOCFPGA_SAMTEC_VINING_FPGA endif
configs/socfpga_stratix10_defconfig new file +39 -0
@@ -0,0 +1,39 @@ +CONFIG_ARM=y +CONFIG_ARCH_SOCFPGA=y +CONFIG_SYS_MALLOC_F_LEN=0x2000 +CONFIG_SPL_FAT_SUPPORT=y +CONFIG_TARGET_SOCFPGA_STRATIX10_SOCDK=y +CONFIG_IDENT_STRING="socfpga_stratix10" +CONFIG_DEFAULT_DEVICE_TREE="socfpga_stratix10_socdk" +CONFIG_BOOTDELAY=5 +CONFIG_SYS_PROMPT="SOCFPGA_STRATIX10 # " +CONFIG_CMD_CACHE=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_FS_GENERIC=y +# CONFIG_CMD_IMLS is not set +CONFIG_CMD_MEMTEST=y +CONFIG_CMD_MII=y +CONFIG_CMD_MMC=y +CONFIG_CMD_PING=y +CONFIG_CMD_SF=y +CONFIG_SPL=y +CONFIG_SPL_DM=y +CONFIG_SPL_DM_SEQ_ALIAS=y +CONFIG_DM_MMC=y +CONFIG_ENV_IS_IN_MMC=y +CONFIG_DFU_MMC=y +CONFIG_MMC_DW=y +CONFIG_SPI_FLASH=y +CONFIG_SPI_FLASH_BAR=y +CONFIG_SPI_FLASH_SPANSION=y +CONFIG_SPI_FLASH_STMICRO=y +# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set +CONFIG_CADENCE_QSPI=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_ETH_DESIGNWARE=y +CONFIG_SYS_NS16550=y +CONFIG_USE_TINY_PRINTF=y
include/configs/socfpga_stratix10_socdk.h new file +216 -0
216 lines not on this page · raw message
Signature · 1 line
2.2.2