Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
9885313b
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9885313b
编写于
10月 12, 2020
作者:
T
Tom Rini
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-next' of
https://github.com/lftan/u-boot
上级
47e9c704
505dc1c6
变更
34
隐藏空白更改
内联
并排
Showing
34 changed file
with
1190 addition
and
548 deletion
+1190
-548
Makefile
Makefile
+18
-9
arch/arm/Kconfig
arch/arm/Kconfig
+1
-1
arch/arm/dts/socfpga_agilex_socdk-u-boot.dtsi
arch/arm/dts/socfpga_agilex_socdk-u-boot.dtsi
+4
-0
arch/arm/dts/socfpga_arria10-handoff.dtsi
arch/arm/dts/socfpga_arria10-handoff.dtsi
+290
-0
arch/arm/dts/socfpga_arria10_socdk-u-boot.dtsi
arch/arm/dts/socfpga_arria10_socdk-u-boot.dtsi
+4
-0
arch/arm/dts/socfpga_arria10_socdk_sdmmc-u-boot.dtsi
arch/arm/dts/socfpga_arria10_socdk_sdmmc-u-boot.dtsi
+2
-1
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi
+0
-329
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.h
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.h
+305
-0
arch/arm/dts/socfpga_stratix10.dtsi
arch/arm/dts/socfpga_stratix10.dtsi
+0
-1
arch/arm/dts/socfpga_stratix10_socdk-u-boot.dtsi
arch/arm/dts/socfpga_stratix10_socdk-u-boot.dtsi
+1
-0
arch/arm/mach-socfpga/Kconfig
arch/arm/mach-socfpga/Kconfig
+2
-1
arch/arm/mach-socfpga/include/mach/mailbox_s10.h
arch/arm/mach-socfpga/include/mach/mailbox_s10.h
+36
-2
arch/arm/mach-socfpga/include/mach/reset_manager_soc64.h
arch/arm/mach-socfpga/include/mach/reset_manager_soc64.h
+10
-2
arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
+8
-0
arch/arm/mach-socfpga/mailbox_s10.c
arch/arm/mach-socfpga/mailbox_s10.c
+120
-52
arch/arm/mach-socfpga/misc_s10.c
arch/arm/mach-socfpga/misc_s10.c
+3
-84
arch/arm/mach-socfpga/qts-filter-a10.sh
arch/arm/mach-socfpga/qts-filter-a10.sh
+141
-0
arch/arm/mach-socfpga/reset_manager_s10.c
arch/arm/mach-socfpga/reset_manager_s10.c
+38
-9
arch/arm/mach-socfpga/spl_agilex.c
arch/arm/mach-socfpga/spl_agilex.c
+2
-1
arch/arm/mach-socfpga/spl_s10.c
arch/arm/mach-socfpga/spl_s10.c
+2
-1
arch/arm/mach-socfpga/timer_s10.c
arch/arm/mach-socfpga/timer_s10.c
+2
-1
configs/socfpga_agilex_defconfig
configs/socfpga_agilex_defconfig
+4
-1
configs/socfpga_stratix10_defconfig
configs/socfpga_stratix10_defconfig
+2
-1
doc/README.socfpga
doc/README.socfpga
+33
-4
drivers/clk/altera/clk-agilex.c
drivers/clk/altera/clk-agilex.c
+97
-16
drivers/fpga/Kconfig
drivers/fpga/Kconfig
+7
-7
drivers/fpga/Makefile
drivers/fpga/Makefile
+1
-1
drivers/fpga/altera.c
drivers/fpga/altera.c
+4
-3
drivers/fpga/intel_sdm_mb.c
drivers/fpga/intel_sdm_mb.c
+4
-1
drivers/sysreset/Kconfig
drivers/sysreset/Kconfig
+4
-4
drivers/sysreset/Makefile
drivers/sysreset/Makefile
+1
-1
drivers/sysreset/sysreset_socfpga_soc64.c
drivers/sysreset/sysreset_socfpga_soc64.c
+0
-0
include/altera.h
include/altera.h
+5
-4
tools/socfpgaimage.c
tools/socfpgaimage.c
+39
-11
未找到文件。
Makefile
浏览文件 @
9885313b
...
...
@@ -1574,21 +1574,30 @@ u-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
$(
call
if_changed,pad_cat
)
ifneq
($(CONFIG_ARCH_SOCFPGA),)
quiet_cmd_gensplx4
=
GENSPLX4
$@
cmd_gensplx4
=
cat
spl/u-boot-spl.sfp spl/u-boot-spl.sfp
\
spl/u-boot-spl.sfp spl/u-boot-spl.sfp
>
$@
||
rm
-f
$@
spl/u-boot-splx4.sfp
:
spl/u-boot-spl.sfp FORCE
$(
call
if_changed,gensplx4
)
quiet_cmd_socboot
=
SOCBOOT
$@
cmd_socboot
=
cat
spl/u-boot-spl.sfp spl/u-boot-spl.sfp
\
spl/u-boot-spl.sfp spl/u-boot-spl.sfp
\
u-boot.img
>
$@
||
rm
-f
$@
u-boot-with-spl.sfp
:
spl/u-boot-spl.sfp u-boot.img FORCE
cmd_socboot
=
cat
spl/u-boot-splx4.sfp u-boot.img
>
$@
||
rm
-f
$@
u-boot-with-spl.sfp
:
spl/u-boot-splx4.sfp u-boot.img FORCE
$(
call
if_changed,socboot
)
quiet_cmd_
socnandboot
=
SOCNANDBOOT
$@
cmd_
socnandboot
=
dd
if
=
/dev/zero
of
=
spl/u-boot-spl.pad
bs
=
64
count
=
1024
;
\
quiet_cmd_
gensplpadx4
=
GENSPLPADX4
$@
cmd_
gensplpadx4
=
dd
if
=
/dev/zero
of
=
spl/u-boot-spl.pad
bs
=
64
count
=
1024
;
\
cat
spl/u-boot-spl.sfp spl/u-boot-spl.pad
\
spl/u-boot-spl.sfp spl/u-boot-spl.pad
\
spl/u-boot-spl.sfp spl/u-boot-spl.pad
\
spl/u-boot-spl.sfp spl/u-boot-spl.pad
\
u-boot.img
>
$@
||
rm
-f
$@
spl/u-boot-spl.pad
u-boot-with-nand-spl.sfp
:
spl/u-boot-spl.sfp u-boot.img FORCE
spl/u-boot-spl.sfp spl/u-boot-spl.pad
>
$@
||
\
rm
-f
$@
spl/u-boot-spl.pad
u-boot-spl-padx4.sfp
:
spl/u-boot-spl.sfp FORCE
$(
call
if_changed,gensplpadx4
)
quiet_cmd_socnandboot
=
SOCNANDBOOT
$@
cmd_socnandboot
=
cat
u-boot-spl-padx4.sfp u-boot.img
>
$@
||
rm
-f
$@
u-boot-with-nand-spl.sfp
:
u-boot-spl-padx4.sfp u-boot.img FORCE
$(
call
if_changed,socnandboot
)
endif
...
...
arch/arm/Kconfig
浏览文件 @
9885313b
...
...
@@ -994,7 +994,7 @@ config ARCH_SOCFPGA
select SYS_THUMB_BUILD if TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10
select SYSRESET
select SYSRESET_SOCFPGA if TARGET_SOCFPGA_GEN5 || TARGET_SOCFPGA_ARRIA10
select SYSRESET_SOCFPGA_S
10 if TARGET_SOCFPGA_STRATIX10
select SYSRESET_SOCFPGA_S
OC64 if TARGET_SOCFPGA_STRATIX10 || TARGET_SOCFPGA_AGILEX
imply CMD_DM
imply CMD_MTDPARTS
imply CRC32_VERIFY
...
...
arch/arm/dts/socfpga_agilex_socdk-u-boot.dtsi
浏览文件 @
9885313b
...
...
@@ -40,3 +40,7 @@
&qspi {
status = "okay";
};
&watchdog0 {
u-boot,dm-pre-reloc;
};
arch/arm/dts/socfpga_arria10-handoff.dtsi
0 → 100644
浏览文件 @
9885313b
// SPDX-License-Identifier: GPL-2.0+ OR X11
/ {
clocks {
#address-cells = <1>;
#size-cells = <1>;
u-boot,dm-pre-reloc;
altera_arria10_hps_eosc1: altera_arria10_hps_eosc1 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <EOSC1_CLK_HZ>;
clock-output-names = "altera_arria10_hps_eosc1-clk";
u-boot,dm-pre-reloc;
};
altera_arria10_hps_cb_intosc_ls: altera_arria10_hps_cb_intosc_ls {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <CB_INTOSC_LS_CLK_HZ>;
clock-output-names = "altera_arria10_hps_cb_intosc_ls-clk";
u-boot,dm-pre-reloc;
};
/* Clock source: altera_arria10_hps_f2h_free */
altera_arria10_hps_f2h_free: altera_arria10_hps_f2h_free {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <F2H_FREE_CLK_HZ>;
clock-output-names = "altera_arria10_hps_f2h_free-clk";
u-boot,dm-pre-reloc;
};
};
clkmgr@0xffd04000 {
compatible = "altr,socfpga-a10-clk-init";
reg = <0xffd04000 0x00000200>;
reg-names = "soc_clock_manager_OCP_SLV";
u-boot,dm-pre-reloc;
mainpll {
vco0-psrc = <MAINPLLGRP_VCO0_PSRC>;
vco1-denom = <MAINPLLGRP_VCO1_DENOM>;
vco1-numer = <MAINPLLGRP_VCO1_NUMER>;
mpuclk-cnt = <MAINPLLGRP_MPUCLK_CNT>;
mpuclk-src = <MAINPLLGRP_MPUCLK_SRC>;
nocclk-cnt = <MAINPLLGRP_NOCCLK_CNT>;
nocclk-src = <MAINPLLGRP_NOCCLK_SRC>;
cntr2clk-cnt = <MAINPLLGRP_CNTR2CLK_CNT>;
cntr3clk-cnt = <MAINPLLGRP_CNTR3CLK_CNT>;
cntr4clk-cnt = <MAINPLLGRP_CNTR4CLK_CNT>;
cntr5clk-cnt = <MAINPLLGRP_CNTR5CLK_CNT>;
cntr6clk-cnt = <MAINPLLGRP_CNTR6CLK_CNT>;
cntr7clk-cnt = <MAINPLLGRP_CNTR7CLK_CNT>;
cntr7clk-src = <MAINPLLGRP_CNTR7CLK_SRC>;
cntr8clk-cnt = <MAINPLLGRP_CNTR8CLK_CNT>;
cntr9clk-cnt = <MAINPLLGRP_CNTR9CLK_CNT>;
cntr9clk-src = <MAINPLLGRP_CNTR9CLK_SRC>;
cntr15clk-cnt = <MAINPLLGRP_CNTR15CLK_CNT>;
nocdiv-l4mainclk = <MAINPLLGRP_NOCDIV_L4MAINCLK>;
nocdiv-l4mpclk = <MAINPLLGRP_NOCDIV_L4MPCLK>;
nocdiv-l4spclk = <MAINPLLGRP_NOCDIV_L4SPCLK>;
nocdiv-csatclk = <MAINPLLGRP_NOCDIV_CSATCLK>;
nocdiv-cstraceclk = <MAINPLLGRP_NOCDIV_CSTRACECLK>;
nocdiv-cspdbgclk = <MAINPLLGRP_NOCDIV_CSPDBGCLK>;
u-boot,dm-pre-reloc;
};
perpll {
vco0-psrc = <PERPLLGRP_VCO0_PSRC>;
vco1-denom = <PERPLLGRP_VCO1_DENOM>;
vco1-numer = <PERPLLGRP_VCO1_NUMER>;
cntr2clk-cnt = <PERPLLGRP_CNTR2CLK_CNT>;
cntr2clk-src = <PERPLLGRP_CNTR2CLK_SRC>;
cntr3clk-cnt = <PERPLLGRP_CNTR3CLK_CNT>;
cntr3clk-src = <PERPLLGRP_CNTR3CLK_SRC>;
cntr4clk-cnt = <PERPLLGRP_CNTR4CLK_CNT>;
cntr4clk-src = <PERPLLGRP_CNTR4CLK_SRC>;
cntr5clk-cnt = <PERPLLGRP_CNTR5CLK_CNT>;
cntr5clk-src = <PERPLLGRP_CNTR5CLK_SRC>;
cntr6clk-cnt = <PERPLLGRP_CNTR6CLK_CNT>;
cntr6clk-src = <PERPLLGRP_CNTR6CLK_SRC>;
cntr7clk-cnt = <PERPLLGRP_CNTR7CLK_CNT>;
cntr8clk-cnt = <PERPLLGRP_CNTR8CLK_CNT>;
cntr8clk-src = <PERPLLGRP_CNTR8CLK_SRC>;
cntr9clk-cnt = <PERPLLGRP_CNTR9CLK_CNT>;
emacctl-emac0sel = <PERPLLGRP_EMACCTL_EMAC0SEL>;
emacctl-emac1sel = <PERPLLGRP_EMACCTL_EMAC1SEL>;
emacctl-emac2sel = <PERPLLGRP_EMACCTL_EMAC2SEL>;
gpiodiv-gpiodbclk = <PERPLLGRP_GPIODIV_GPIODBCLK>;
u-boot,dm-pre-reloc;
};
alteragrp {
nocclk = <ALTERAGRP_NOCCLK>;
mpuclk = <ALTERAGRP_MPUCLK>;
u-boot,dm-pre-reloc;
};
};
i_io48_pin_mux: pinmux@0xffd07000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "pinctrl-single";
reg = <0xffd07000 0x00000800>;
reg-names = "soc_3v_io48_pin_mux_OCP_SLV";
u-boot,dm-pre-reloc;
shared {
reg = <0xffd07000 0x00000200>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x0000000f>;
pinctrl-single,pins =
<0x00000000 PINMUX_SHARED_IO_Q1_1_SEL>,
<0x00000004 PINMUX_SHARED_IO_Q1_2_SEL>,
<0x00000008 PINMUX_SHARED_IO_Q1_3_SEL>,
<0x0000000c PINMUX_SHARED_IO_Q1_4_SEL>,
<0x00000010 PINMUX_SHARED_IO_Q1_5_SEL>,
<0x00000014 PINMUX_SHARED_IO_Q1_6_SEL>,
<0x00000018 PINMUX_SHARED_IO_Q1_7_SEL>,
<0x0000001c PINMUX_SHARED_IO_Q1_8_SEL>,
<0x00000020 PINMUX_SHARED_IO_Q1_9_SEL>,
<0x00000024 PINMUX_SHARED_IO_Q1_10_SEL>,
<0x00000028 PINMUX_SHARED_IO_Q1_11_SEL>,
<0x0000002c PINMUX_SHARED_IO_Q1_12_SEL>,
<0x00000030 PINMUX_SHARED_IO_Q2_1_SEL>,
<0x00000034 PINMUX_SHARED_IO_Q2_2_SEL>,
<0x00000038 PINMUX_SHARED_IO_Q2_3_SEL>,
<0x0000003c PINMUX_SHARED_IO_Q2_4_SEL>,
<0x00000040 PINMUX_SHARED_IO_Q2_5_SEL>,
<0x00000044 PINMUX_SHARED_IO_Q2_6_SEL>,
<0x00000048 PINMUX_SHARED_IO_Q2_7_SEL>,
<0x0000004c PINMUX_SHARED_IO_Q2_8_SEL>,
<0x00000050 PINMUX_SHARED_IO_Q2_9_SEL>,
<0x00000054 PINMUX_SHARED_IO_Q2_10_SEL>,
<0x00000058 PINMUX_SHARED_IO_Q2_11_SEL>,
<0x0000005c PINMUX_SHARED_IO_Q2_12_SEL>,
<0x00000060 PINMUX_SHARED_IO_Q3_1_SEL>,
<0x00000064 PINMUX_SHARED_IO_Q3_2_SEL>,
<0x00000068 PINMUX_SHARED_IO_Q3_3_SEL>,
<0x0000006c PINMUX_SHARED_IO_Q3_4_SEL>,
<0x00000070 PINMUX_SHARED_IO_Q3_5_SEL>,
<0x00000074 PINMUX_SHARED_IO_Q3_6_SEL>,
<0x00000078 PINMUX_SHARED_IO_Q3_7_SEL>,
<0x0000007c PINMUX_SHARED_IO_Q3_8_SEL>,
<0x00000080 PINMUX_SHARED_IO_Q3_9_SEL>,
<0x00000084 PINMUX_SHARED_IO_Q3_10_SEL>,
<0x00000088 PINMUX_SHARED_IO_Q3_11_SEL>,
<0x0000008c PINMUX_SHARED_IO_Q3_12_SEL>,
<0x00000090 PINMUX_SHARED_IO_Q4_1_SEL>,
<0x00000094 PINMUX_SHARED_IO_Q4_2_SEL>,
<0x00000098 PINMUX_SHARED_IO_Q4_3_SEL>,
<0x0000009c PINMUX_SHARED_IO_Q4_4_SEL>,
<0x000000a0 PINMUX_SHARED_IO_Q4_5_SEL>,
<0x000000a4 PINMUX_SHARED_IO_Q4_6_SEL>,
<0x000000a8 PINMUX_SHARED_IO_Q4_7_SEL>,
<0x000000ac PINMUX_SHARED_IO_Q4_8_SEL>,
<0x000000b0 PINMUX_SHARED_IO_Q4_9_SEL>,
<0x000000b4 PINMUX_SHARED_IO_Q4_10_SEL>,
<0x000000b8 PINMUX_SHARED_IO_Q4_11_SEL>,
<0x000000bc PINMUX_SHARED_IO_Q4_12_SEL>;
u-boot,dm-pre-reloc;
};
dedicated {
reg = <0xffd07200 0x00000200>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x0000000f>;
pinctrl-single,pins =
<0x0000000c PINMUX_DEDICATED_IO_4_SEL>,
<0x00000010 PINMUX_DEDICATED_IO_5_SEL>,
<0x00000014 PINMUX_DEDICATED_IO_6_SEL>,
<0x00000018 PINMUX_DEDICATED_IO_7_SEL>,
<0x0000001c PINMUX_DEDICATED_IO_8_SEL>,
<0x00000020 PINMUX_DEDICATED_IO_9_SEL>,
<0x00000024 PINMUX_DEDICATED_IO_10_SEL>,
<0x00000028 PINMUX_DEDICATED_IO_11_SEL>,
<0x0000002c PINMUX_DEDICATED_IO_12_SEL>,
<0x00000030 PINMUX_DEDICATED_IO_13_SEL>,
<0x00000034 PINMUX_DEDICATED_IO_14_SEL>,
<0x00000038 PINMUX_DEDICATED_IO_15_SEL>,
<0x0000003c PINMUX_DEDICATED_IO_16_SEL>,
<0x00000040 PINMUX_DEDICATED_IO_17_SEL>;
u-boot,dm-pre-reloc;
};
dedicated_cfg {
reg = <0xffd07200 0x00000200>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x003f3f3f>;
pinctrl-single,pins =
<0x00000100 CONFIG_IO_BANK_VSEL>,
<0x00000104 CONFIG_IO_MACRO (CONFIG_IO_1)>,
<0x00000108 CONFIG_IO_MACRO (CONFIG_IO_2)>,
<0x0000010c CONFIG_IO_MACRO (CONFIG_IO_3)>,
<0x00000110 CONFIG_IO_MACRO (CONFIG_IO_4)>,
<0x00000114 CONFIG_IO_MACRO (CONFIG_IO_5)>,
<0x00000118 CONFIG_IO_MACRO (CONFIG_IO_6)>,
<0x0000011c CONFIG_IO_MACRO (CONFIG_IO_7)>,
<0x00000120 CONFIG_IO_MACRO (CONFIG_IO_8)>,
<0x00000124 CONFIG_IO_MACRO (CONFIG_IO_9)>,
<0x00000128 CONFIG_IO_MACRO (CONFIG_IO_10)>,
<0x0000012c CONFIG_IO_MACRO (CONFIG_IO_11)>,
<0x00000130 CONFIG_IO_MACRO (CONFIG_IO_12)>,
<0x00000134 CONFIG_IO_MACRO (CONFIG_IO_13)>,
<0x00000138 CONFIG_IO_MACRO (CONFIG_IO_14)>,
<0x0000013c CONFIG_IO_MACRO (CONFIG_IO_15)>,
<0x00000140 CONFIG_IO_MACRO (CONFIG_IO_16)>,
<0x00000144 CONFIG_IO_MACRO (CONFIG_IO_17)>;
u-boot,dm-pre-reloc;
};
fpga {
reg = <0xffd07400 0x00000100>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x00000001>;
pinctrl-single,pins =
<0x00000000 PINMUX_RGMII0_USEFPGA_SEL>,
<0x00000004 PINMUX_RGMII1_USEFPGA_SEL>,
<0x00000008 PINMUX_RGMII2_USEFPGA_SEL>,
<0x0000000c PINMUX_I2C0_USEFPGA_SEL>,
<0x00000010 PINMUX_I2C1_USEFPGA_SEL>,
<0x00000014 PINMUX_I2CEMAC0_USEFPGA_SEL>,
<0x00000018 PINMUX_I2CEMAC1_USEFPGA_SEL>,
<0x0000001c PINMUX_I2CEMAC2_USEFPGA_SEL>,
<0x00000020 PINMUX_NAND_USEFPGA_SEL>,
<0x00000024 PINMUX_QSPI_USEFPGA_SEL>,
<0x00000028 PINMUX_SDMMC_USEFPGA_SEL>,
<0x0000002c PINMUX_SPIM0_USEFPGA_SEL>,
<0x00000030 PINMUX_SPIM1_USEFPGA_SEL>,
<0x00000034 PINMUX_SPIS0_USEFPGA_SEL>,
<0x00000038 PINMUX_SPIS1_USEFPGA_SEL>,
<0x0000003c PINMUX_UART0_USEFPGA_SEL>,
<0x00000040 PINMUX_UART1_USEFPGA_SEL>;
u-boot,dm-pre-reloc;
};
};
i_noc: noc@0xffd10000 {
compatible = "altr,socfpga-a10-noc";
reg = <0xffd10000 0x00008000>;
reg-names = "mpu_m0";
u-boot,dm-pre-reloc;
firewall {
mpu0 = <0x00000000 0x0000ffff>;
l3-0 = <0x00000000 0x0000ffff>;
fpga2sdram0-0 = <0x00000000 0x0000ffff>;
fpga2sdram1-0 = <0x00000000 0x0000ffff>;
fpga2sdram2-0 = <0x00000000 0x0000ffff>;
u-boot,dm-pre-reloc;
};
};
hps_fpgabridge0: fpgabridge@0 {
compatible = "altr,socfpga-hps2fpga-bridge";
init-val = <H2F_AXI_MASTER>;
u-boot,dm-pre-reloc;
};
hps_fpgabridge1: fpgabridge@1 {
compatible = "altr,socfpga-lwhps2fpga-bridge";
init-val = <LWH2F_AXI_MASTER>;
u-boot,dm-pre-reloc;
};
hps_fpgabridge2: fpgabridge@2 {
compatible = "altr,socfpga-fpga2hps-bridge";
init-val = <F2H_AXI_SLAVE>;
u-boot,dm-pre-reloc;
};
hps_fpgabridge3: fpgabridge@3 {
compatible = "altr,socfpga-fpga2sdram0-bridge";
init-val = <F2SDRAM0_AXI_SLAVE>;
u-boot,dm-pre-reloc;
};
hps_fpgabridge4: fpgabridge@4 {
compatible = "altr,socfpga-fpga2sdram1-bridge";
init-val = <F2SDRAM1_AXI_SLAVE>;
u-boot,dm-pre-reloc;
};
hps_fpgabridge5: fpgabridge@5 {
compatible = "altr,socfpga-fpga2sdram2-bridge";
init-val = <F2SDRAM2_AXI_SLAVE>;
u-boot,dm-pre-reloc;
};
};
arch/arm/dts/socfpga_arria10_socdk-u-boot.dtsi
浏览文件 @
9885313b
...
...
@@ -15,3 +15,7 @@
&uart1 {
u-boot,dm-pre-reloc;
};
&watchdog1 {
u-boot,dm-pre-reloc;
};
arch/arm/dts/socfpga_arria10_socdk_sdmmc-u-boot.dtsi
浏览文件 @
9885313b
...
...
@@ -3,7 +3,8 @@
* Copyright (C) 2014-2015, 2020 Intel. All rights reserved.
*/
#include "socfpga_arria10_socdk_sdmmc_handoff.dtsi"
#include "socfpga_arria10_socdk_sdmmc_handoff.h"
#include "socfpga_arria10-handoff.dtsi"
#include "socfpga_arria10_handoff_u-boot.dtsi"
#include "socfpga_arria10_socdk-u-boot.dtsi"
...
...
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.dtsi
已删除
100644 → 0
浏览文件 @
47e9c704
//
SPDX
-
License
-
Identifier
:
GPL
-
2.0
+
OR
X11
/*
*
Copyright
(
C
)
2016
-
2017
Intel
Corporation
*
*<
auto
-
generated
>
*
This
code
was
generated
by
a
tool
based
on
*
handoffs
from
both
Qsys
and
Quartus
.
*
*
Changes
to
this
file
may
be
lost
if
*
the
code
is
regenerated
.
*</
auto
-
generated
>
*/
/
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
model
=
"SOCFPGA Arria10 Dev Kit"
;
/*
Bootloader
setting
:
uboot
.
model
*/
/*
Clock
sources
*/
clocks
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
/*
Clock
source
:
altera_arria10_hps_eosc1
*/
altera_arria10_hps_eosc1
:
altera_arria10_hps_eosc1
{
compatible
=
"fixed-clock"
;
#
clock
-
cells
=
<
0
>;
clock
-
frequency
=
<
25000000
>;
clock
-
output
-
names
=
"altera_arria10_hps_eosc1-clk"
;
};
/*
Clock
source
:
altera_arria10_hps_cb_intosc_ls
*/
altera_arria10_hps_cb_intosc_ls
:
altera_arria10_hps_cb_intosc_ls
{
compatible
=
"fixed-clock"
;
#
clock
-
cells
=
<
0
>;
clock
-
frequency
=
<
60000000
>;
clock
-
output
-
names
=
"altera_arria10_hps_cb_intosc_ls-clk"
;
};
/*
Clock
source
:
altera_arria10_hps_f2h_free
*/
altera_arria10_hps_f2h_free
:
altera_arria10_hps_f2h_free
{
compatible
=
"fixed-clock"
;
#
clock
-
cells
=
<
0
>;
clock
-
frequency
=
<
200000000
>;
clock
-
output
-
names
=
"altera_arria10_hps_f2h_free-clk"
;
};
};
/*
*
Driver
:
altera_arria10_soc_clock_manager_arria10_uboot_driver
*
Version
:
1.0
*
Binding
:
device
*/
i_clk_mgr
:
clock_manager
@
0xffd04000
{
compatible
=
"altr,socfpga-a10-clk-init"
;
reg
=
<
0xffd04000
0x00000200
>;
reg
-
names
=
"soc_clock_manager_OCP_SLV"
;
/*
Address
Block
:
soc_clock_manager_OCP_SLV
.
i_clk_mgr_mainpllgrp
*/
mainpll
{
vco0
-
psrc
=
<
0
>;
/*
Field
:
vco0
.
psrc
*/
vco1
-
denom
=
<
1
>;
/*
Field
:
vco1
.
denom
*/
vco1
-
numer
=
<
191
>;
/*
Field
:
vco1
.
numer
*/
mpuclk
-
cnt
=
<
0
>;
/*
Field
:
mpuclk
.
cnt
*/
mpuclk
-
src
=
<
0
>;
/*
Field
:
mpuclk
.
src
*/
nocclk
-
cnt
=
<
0
>;
/*
Field
:
nocclk
.
cnt
*/
nocclk
-
src
=
<
0
>;
/*
Field
:
nocclk
.
src
*/
cntr2clk
-
cnt
=
<
900
>;
/*
Field
:
cntr2clk
.
cnt
*/
cntr3clk
-
cnt
=
<
900
>;
/*
Field
:
cntr3clk
.
cnt
*/
cntr4clk
-
cnt
=
<
900
>;
/*
Field
:
cntr4clk
.
cnt
*/
cntr5clk
-
cnt
=
<
900
>;
/*
Field
:
cntr5clk
.
cnt
*/
cntr6clk
-
cnt
=
<
900
>;
/*
Field
:
cntr6clk
.
cnt
*/
cntr7clk
-
cnt
=
<
900
>;
/*
Field
:
cntr7clk
.
cnt
*/
cntr7clk
-
src
=
<
0
>;
/*
Field
:
cntr7clk
.
src
*/
cntr8clk
-
cnt
=
<
900
>;
/*
Field
:
cntr8clk
.
cnt
*/
cntr9clk
-
cnt
=
<
900
>;
/*
Field
:
cntr9clk
.
cnt
*/
cntr9clk
-
src
=
<
0
>;
/*
Field
:
cntr9clk
.
src
*/
cntr15clk
-
cnt
=
<
900
>;
/*
Field
:
cntr15clk
.
cnt
*/
nocdiv
-
l4mainclk
=
<
0
>;
/*
Field
:
nocdiv
.
l4mainclk
*/
nocdiv
-
l4mpclk
=
<
0
>;
/*
Field
:
nocdiv
.
l4mpclk
*/
nocdiv
-
l4spclk
=
<
2
>;
/*
Field
:
nocdiv
.
l4spclk
*/
nocdiv
-
csatclk
=
<
0
>;
/*
Field
:
nocdiv
.
csatclk
*/
nocdiv
-
cstraceclk
=
<
1
>;
/*
Field
:
nocdiv
.
cstraceclk
*/
nocdiv
-
cspdbgclk
=
<
1
>;
/*
Field
:
nocdiv
.
cspdbgclk
*/
};
/*
Address
Block
:
soc_clock_manager_OCP_SLV
.
i_clk_mgr_perpllgrp
*/
perpll
{
vco0
-
psrc
=
<
0
>;
/*
Field
:
vco0
.
psrc
*/
vco1
-
denom
=
<
1
>;
/*
Field
:
vco1
.
denom
*/
vco1
-
numer
=
<
159
>;
/*
Field
:
vco1
.
numer
*/
cntr2clk
-
cnt
=
<
7
>;
/*
Field
:
cntr2clk
.
cnt
*/
cntr2clk
-
src
=
<
1
>;
/*
Field
:
cntr2clk
.
src
*/
cntr3clk
-
cnt
=
<
900
>;
/*
Field
:
cntr3clk
.
cnt
*/
cntr3clk
-
src
=
<
1
>;
/*
Field
:
cntr3clk
.
src
*/
cntr4clk
-
cnt
=
<
19
>;
/*
Field
:
cntr4clk
.
cnt
*/
cntr4clk
-
src
=
<
1
>;
/*
Field
:
cntr4clk
.
src
*/
cntr5clk
-
cnt
=
<
499
>;
/*
Field
:
cntr5clk
.
cnt
*/
cntr5clk
-
src
=
<
1
>;
/*
Field
:
cntr5clk
.
src
*/
cntr6clk
-
cnt
=
<
9
>;
/*
Field
:
cntr6clk
.
cnt
*/
cntr6clk
-
src
=
<
1
>;
/*
Field
:
cntr6clk
.
src
*/
cntr7clk
-
cnt
=
<
900
>;
/*
Field
:
cntr7clk
.
cnt
*/
cntr8clk
-
cnt
=
<
900
>;
/*
Field
:
cntr8clk
.
cnt
*/
cntr8clk
-
src
=
<
0
>;
/*
Field
:
cntr8clk
.
src
*/
cntr9clk
-
cnt
=
<
900
>;
/*
Field
:
cntr9clk
.
cnt
*/
emacctl
-
emac0sel
=
<
0
>;
/*
Field
:
emacctl
.
emac0sel
*/
emacctl
-
emac1sel
=
<
0
>;
/*
Field
:
emacctl
.
emac1sel
*/
emacctl
-
emac2sel
=
<
0
>;
/*
Field
:
emacctl
.
emac2sel
*/
gpiodiv
-
gpiodbclk
=
<
32000
>;
/*
Field
:
gpiodiv
.
gpiodbclk
*/
};
/*
Address
Block
:
soc_clock_manager_OCP_SLV
.
i_clk_mgr_alteragrp
*/
alteragrp
{
nocclk
=
<
0x0384000b
>;
/*
Register
:
nocclk
*/
mpuclk
=
<
0x03840001
>;
/*
Register
:
mpuclk
*/
};
};
/*
*
Driver
:
altera_arria10_soc_3v_io48_pin_mux_arria10_uboot_driver
*
Version
:
1.0
*
Binding
:
pinmux
*/
i_io48_pin_mux
:
pinmux
@
0xffd07000
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"pinctrl-single"
;
reg
=
<
0xffd07000
0x00000800
>;
reg
-
names
=
"soc_3v_io48_pin_mux_OCP_SLV"
;
/*
Address
Block
:
soc_3v_io48_pin_mux_OCP_SLV
.
i_io48_pin_mux_shared_3v_io_grp
*/
shared
{
reg
=
<
0xffd07000
0x00000200
>;
pinctrl
-
single
,
register
-
width
=
<
32
>;
pinctrl
-
single
,
function
-
mask
=
<
0x0000000f
>;
pinctrl
-
single
,
pins
=
<
0x00000000
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_1
*/
<
0x00000004
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_2
*/
<
0x00000008
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_3
*/
<
0x0000000c
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_4
*/
<
0x00000010
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_5
*/
<
0x00000014
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_6
*/
<
0x00000018
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_7
*/
<
0x0000001c
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_8
*/
<
0x00000020
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_9
*/
<
0x00000024
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_10
*/
<
0x00000028
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_11
*/
<
0x0000002c
0x00000008
>,
/*
Register
:
pinmux_shared_io_q1_12
*/
<
0x00000030
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_1
*/
<
0x00000034
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_2
*/
<
0x00000038
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_3
*/
<
0x0000003c
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_4
*/
<
0x00000040
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_5
*/
<
0x00000044
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_6
*/
<
0x00000048
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_7
*/
<
0x0000004c
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_8
*/
<
0x00000050
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_9
*/
<
0x00000054
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_10
*/
<
0x00000058
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_11
*/
<
0x0000005c
0x00000004
>,
/*
Register
:
pinmux_shared_io_q2_12
*/
<
0x00000060
0x00000003
>,
/*
Register
:
pinmux_shared_io_q3_1
*/
<
0x00000064
0x00000003
>,
/*
Register
:
pinmux_shared_io_q3_2
*/
<
0x00000068
0x00000003
>,
/*
Register
:
pinmux_shared_io_q3_3
*/
<
0x0000006c
0x00000003
>,
/*
Register
:
pinmux_shared_io_q3_4
*/
<
0x00000070
0x00000003
>,
/*
Register
:
pinmux_shared_io_q3_5
*/
<
0x00000074
0x0000000f
>,
/*
Register
:
pinmux_shared_io_q3_6
*/
<
0x00000078
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q3_7
*/
<
0x0000007c
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q3_8
*/
<
0x00000080
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q3_9
*/
<
0x00000084
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q3_10
*/
<
0x00000088
0x00000001
>,
/*
Register
:
pinmux_shared_io_q3_11
*/
<
0x0000008c
0x00000001
>,
/*
Register
:
pinmux_shared_io_q3_12
*/
<
0x00000090
0x00000000
>,
/*
Register
:
pinmux_shared_io_q4_1
*/
<
0x00000094
0x00000000
>,
/*
Register
:
pinmux_shared_io_q4_2
*/
<
0x00000098
0x0000000f
>,
/*
Register
:
pinmux_shared_io_q4_3
*/
<
0x0000009c
0x0000000c
>,
/*
Register
:
pinmux_shared_io_q4_4
*/
<
0x000000a0
0x0000000f
>,
/*
Register
:
pinmux_shared_io_q4_5
*/
<
0x000000a4
0x0000000f
>,
/*
Register
:
pinmux_shared_io_q4_6
*/
<
0x000000a8
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q4_7
*/
<
0x000000ac
0x0000000a
>,
/*
Register
:
pinmux_shared_io_q4_8
*/
<
0x000000b0
0x0000000c
>,
/*
Register
:
pinmux_shared_io_q4_9
*/
<
0x000000b4
0x0000000c
>,
/*
Register
:
pinmux_shared_io_q4_10
*/
<
0x000000b8
0x0000000c
>,
/*
Register
:
pinmux_shared_io_q4_11
*/
<
0x000000bc
0x0000000c
>;
/*
Register
:
pinmux_shared_io_q4_12
*/
};
/*
Address
Block
:
soc_3v_io48_pin_mux_OCP_SLV
.
i_io48_pin_mux_dedicated_io_grp
*/
dedicated
{
reg
=
<
0xffd07200
0x00000200
>;
pinctrl
-
single
,
register
-
width
=
<
32
>;
pinctrl
-
single
,
function
-
mask
=
<
0x0000000f
>;
pinctrl
-
single
,
pins
=
<
0x0000000c
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_4
*/
<
0x00000010
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_5
*/
<
0x00000014
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_6
*/
<
0x00000018
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_7
*/
<
0x0000001c
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_8
*/
<
0x00000020
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_9
*/
<
0x00000024
0x0000000a
>,
/*
Register
:
pinmux_dedicated_io_10
*/
<
0x00000028
0x0000000a
>,
/*
Register
:
pinmux_dedicated_io_11
*/
<
0x0000002c
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_12
*/
<
0x00000030
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_13
*/
<
0x00000034
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_14
*/
<
0x00000038
0x00000008
>,
/*
Register
:
pinmux_dedicated_io_15
*/
<
0x0000003c
0x0000000d
>,
/*
Register
:
pinmux_dedicated_io_16
*/
<
0x00000040
0x0000000d
>;
/*
Register
:
pinmux_dedicated_io_17
*/
};
/*
Address
Block
:
soc_3v_io48_pin_mux_OCP_SLV
.
i_io48_pin_mux_dedicated_io_grp
*/
dedicated_cfg
{
reg
=
<
0xffd07200
0x00000200
>;
pinctrl
-
single
,
register
-
width
=
<
32
>;
pinctrl
-
single
,
function
-
mask
=
<
0x003f3f3f
>;
pinctrl
-
single
,
pins
=
<
0x00000100
0x00000101
>,
/*
Register
:
configuration_dedicated_io_bank
*/
<
0x00000104
0x000b080a
>,
/*
Register
:
configuration_dedicated_io_1
*/
<
0x00000108
0x000b080a
>,
/*
Register
:
configuration_dedicated_io_2
*/
<
0x0000010c
0x000b080a
>,
/*
Register
:
configuration_dedicated_io_3
*/
<
0x00000110
0x000a282a
>,
/*
Register
:
configuration_dedicated_io_4
*/
<
0x00000114
0x000a282a
>,
/*
Register
:
configuration_dedicated_io_5
*/
<
0x00000118
0x0008282a
>,
/*
Register
:
configuration_dedicated_io_6
*/
<
0x0000011c
0x000a282a
>,
/*
Register
:
configuration_dedicated_io_7
*/
<
0x00000120
0x000a282a
>,
/*
Register
:
configuration_dedicated_io_8
*/
<
0x00000124
0x000a282a
>,
/*
Register
:
configuration_dedicated_io_9
*/
<
0x00000128
0x00090000
>,
/*
Register
:
configuration_dedicated_io_10
*/
<
0x0000012c
0x00090000
>,
/*
Register
:
configuration_dedicated_io_11
*/
<
0x00000130
0x000b282a
>,
/*
Register
:
configuration_dedicated_io_12
*/
<
0x00000134
0x000b282a
>,
/*
Register
:
configuration_dedicated_io_13
*/
<
0x00000138
0x000b282a
>,
/*
Register
:
configuration_dedicated_io_14
*/
<
0x0000013c
0x000b282a
>,
/*
Register
:
configuration_dedicated_io_15
*/
<
0x00000140
0x0008282a
>,
/*
Register
:
configuration_dedicated_io_16
*/
<
0x00000144
0x000a282a
>;
/*
Register
:
configuration_dedicated_io_17
*/
};
/*
Address
Block
:
soc_3v_io48_pin_mux_OCP_SLV
.
i_io48_pin_mux_fpga_interface_grp
*/
fpga
{
reg
=
<
0xffd07400
0x00000100
>;
pinctrl
-
single
,
register
-
width
=
<
32
>;
pinctrl
-
single
,
function
-
mask
=
<
0x00000001
>;
pinctrl
-
single
,
pins
=
<
0x00000000
0x00000000
>,
/*
Register
:
pinmux_emac0_usefpga
*/
<
0x00000004
0x00000000
>,
/*
Register
:
pinmux_emac1_usefpga
*/
<
0x00000008
0x00000000
>,
/*
Register
:
pinmux_emac2_usefpga
*/
<
0x0000000c
0x00000000
>,
/*
Register
:
pinmux_i2c0_usefpga
*/
<
0x00000010
0x00000000
>,
/*
Register
:
pinmux_i2c1_usefpga
*/
<
0x00000014
0x00000000
>,
/*
Register
:
pinmux_i2c_emac0_usefpga
*/
<
0x00000018
0x00000000
>,
/*
Register
:
pinmux_i2c_emac1_usefpga
*/
<
0x0000001c
0x00000000
>,
/*
Register
:
pinmux_i2c_emac2_usefpga
*/
<
0x00000020
0x00000000
>,
/*
Register
:
pinmux_nand_usefpga
*/
<
0x00000024
0x00000000
>,
/*
Register
:
pinmux_qspi_usefpga
*/
<
0x00000028
0x00000000
>,
/*
Register
:
pinmux_sdmmc_usefpga
*/
<
0x0000002c
0x00000000
>,
/*
Register
:
pinmux_spim0_usefpga
*/
<
0x00000030
0x00000000
>,
/*
Register
:
pinmux_spim1_usefpga
*/
<
0x00000034
0x00000000
>,
/*
Register
:
pinmux_spis0_usefpga
*/
<
0x00000038
0x00000000
>,
/*
Register
:
pinmux_spis1_usefpga
*/
<
0x0000003c
0x00000000
>,
/*
Register
:
pinmux_uart0_usefpga
*/
<
0x00000040
0x00000000
>;
/*
Register
:
pinmux_uart1_usefpga
*/
};
};
/*
*
Driver
:
altera_arria10_soc_noc_arria10_uboot_driver
*
Version
:
1.0
*
Binding
:
device
*/
i_noc
:
noc
@
0xffd10000
{
compatible
=
"altr,socfpga-a10-noc"
;
reg
=
<
0xffd10000
0x00008000
>;
reg
-
names
=
"mpu_m0"
;
firewall
{
/*
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
mpuregion0addr
.
base
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
mpuregion0addr
.
limit
*/
mpu0
=
<
0x00000000
0x0000ffff
>;
/*
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_l3_ddr_scr
.
hpsregion0addr
.
base
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_l3_ddr_scr
.
hpsregion0addr
.
limit
*/
l3
-
0
=
<
0x00000000
0x0000ffff
>;
/*
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram0region0addr
.
base
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram0region0addr
.
limit
*/
fpga2sdram0
-
0
=
<
0x00000000
0x0000ffff
>;
/*
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram1region0addr
.
base
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram1region0addr
.
limit
*/
fpga2sdram1
-
0
=
<
0x00000000
0x0000ffff
>;
/*
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram2region0addr
.
base
*
Driver
setting
:
altera_arria10_soc_noc_arria10_uboot_driver
.
I_NOC
.
mpu_m0
.
noc_fw_ddr_mpu_fpga2sdram_ddr_scr
.
fpga2sdram2region0addr
.
limit
*/
fpga2sdram2
-
0
=
<
0x00000000
0x0000ffff
>;
};
};
hps_fpgabridge0
:
fpgabridge
@
0
{
compatible
=
"altr,socfpga-hps2fpga-bridge"
;
init
-
val
=
<
1
>;
};
hps_fpgabridge1
:
fpgabridge
@
1
{
compatible
=
"altr,socfpga-lwhps2fpga-bridge"
;
init
-
val
=
<
1
>;
};
hps_fpgabridge2
:
fpgabridge
@
2
{
compatible
=
"altr,socfpga-fpga2hps-bridge"
;
init
-
val
=
<
1
>;
};
hps_fpgabridge3
:
fpgabridge
@
3
{
compatible
=
"altr,socfpga-fpga2sdram0-bridge"
;
init
-
val
=
<
1
>;
};
hps_fpgabridge4
:
fpgabridge
@
4
{
compatible
=
"altr,socfpga-fpga2sdram1-bridge"
;
init
-
val
=
<
0
>;
};
hps_fpgabridge5
:
fpgabridge
@
5
{
compatible
=
"altr,socfpga-fpga2sdram2-bridge"
;
init
-
val
=
<
1
>;
};
};
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.h
0 → 100644
浏览文件 @
9885313b
// SPDX-License-Identifier: BSD-3-Clause
/*
* Intel Arria 10 SoCFPGA configuration
*/
#ifndef __SOCFPGA_ARRIA10_CONFIG_H__
#define __SOCFPGA_ARRIA10_CONFIG_H__
/* Clocks */
#define CB_INTOSC_LS_CLK_HZ 60000000
#define EMAC0_CLK_HZ 250000000
#define EMAC1_CLK_HZ 250000000
#define EMAC2_CLK_HZ 250000000
#define EOSC1_CLK_HZ 25000000
#define F2H_FREE_CLK_HZ 200000000
#define H2F_USER0_CLK_HZ 400000000
#define H2F_USER1_CLK_HZ 400000000
#define L3_MAIN_FREE_CLK_HZ 200000000
#define SDMMC_CLK_HZ 200000000
#define TPIU_CLK_HZ 100000000
#define MAINPLLGRP_CNTR15CLK_CNT 900
#define MAINPLLGRP_CNTR2CLK_CNT 900
#define MAINPLLGRP_CNTR3CLK_CNT 900
#define MAINPLLGRP_CNTR4CLK_CNT 900
#define MAINPLLGRP_CNTR5CLK_CNT 900
#define MAINPLLGRP_CNTR6CLK_CNT 900
#define MAINPLLGRP_CNTR7CLK_CNT 900
#define MAINPLLGRP_CNTR7CLK_SRC 0
#define MAINPLLGRP_CNTR8CLK_CNT 900
#define MAINPLLGRP_CNTR9CLK_CNT 900
#define MAINPLLGRP_CNTR9CLK_SRC 0
#define MAINPLLGRP_MPUCLK_CNT 0
#define MAINPLLGRP_MPUCLK_SRC 0
#define MAINPLLGRP_NOCCLK_CNT 0
#define MAINPLLGRP_NOCCLK_SRC 0
#define MAINPLLGRP_NOCDIV_CSATCLK 0
#define MAINPLLGRP_NOCDIV_CSPDBGCLK 1
#define MAINPLLGRP_NOCDIV_CSTRACECLK 1
#define MAINPLLGRP_NOCDIV_L4MAINCLK 0
#define MAINPLLGRP_NOCDIV_L4MPCLK 0
#define MAINPLLGRP_NOCDIV_L4SPCLK 2
#define MAINPLLGRP_VCO0_PSRC 0
#define MAINPLLGRP_VCO1_DENOM 1
#define MAINPLLGRP_VCO1_NUMER 191
#define PERPLLGRP_CNTR2CLK_CNT 7
#define PERPLLGRP_CNTR2CLK_SRC 1
#define PERPLLGRP_CNTR3CLK_CNT 900
#define PERPLLGRP_CNTR3CLK_SRC 1
#define PERPLLGRP_CNTR4CLK_CNT 19
#define PERPLLGRP_CNTR4CLK_SRC 1
#define PERPLLGRP_CNTR5CLK_CNT 499
#define PERPLLGRP_CNTR5CLK_SRC 1
#define PERPLLGRP_CNTR6CLK_CNT 9
#define PERPLLGRP_CNTR6CLK_SRC 1
#define PERPLLGRP_CNTR7CLK_CNT 900
#define PERPLLGRP_CNTR8CLK_CNT 900
#define PERPLLGRP_CNTR8CLK_SRC 0
#define PERPLLGRP_CNTR9CLK_CNT 900
#define PERPLLGRP_EMACCTL_EMAC0SEL 0
#define PERPLLGRP_EMACCTL_EMAC1SEL 0
#define PERPLLGRP_EMACCTL_EMAC2SEL 0
#define PERPLLGRP_GPIODIV_GPIODBCLK 32000
#define PERPLLGRP_VCO0_PSRC 0
#define PERPLLGRP_VCO1_DENOM 1
#define PERPLLGRP_VCO1_NUMER 159
#define CLKMGR_TESTIOCTRL_DEBUGCLKSEL 16
#define CLKMGR_TESTIOCTRL_MAINCLKSEL 8
#define CLKMGR_TESTIOCTRL_PERICLKSEL 8
#define ALTERAGRP_MPUCLK_MAINCNT 1
#define ALTERAGRP_MPUCLK_PERICNT 900
#define ALTERAGRP_NOCCLK_MAINCNT 11
#define ALTERAGRP_NOCCLK_PERICNT 900
#define ALTERAGRP_MPUCLK ((ALTERAGRP_MPUCLK_PERICNT << 16) | \
(ALTERAGRP_MPUCLK_MAINCNT))
#define ALTERAGRP_NOCCLK ((ALTERAGRP_NOCCLK_PERICNT << 16) | \
(ALTERAGRP_NOCCLK_MAINCNT))
/* Pin Mux Configuration */
#define CONFIG_IO_10_INPUT_BUF_EN 0
#define CONFIG_IO_10_PD_DRV_STRG 0
#define CONFIG_IO_10_PD_SLW_RT 0
#define CONFIG_IO_10_PU_DRV_STRG 0
#define CONFIG_IO_10_PU_SLW_RT 0
#define CONFIG_IO_10_RTRIM 1
#define CONFIG_IO_10_WK_PU_EN 1
#define CONFIG_IO_11_INPUT_BUF_EN 0
#define CONFIG_IO_11_PD_DRV_STRG 0
#define CONFIG_IO_11_PD_SLW_RT 0
#define CONFIG_IO_11_PU_DRV_STRG 0
#define CONFIG_IO_11_PU_SLW_RT 0
#define CONFIG_IO_11_RTRIM 1
#define CONFIG_IO_11_WK_PU_EN 1
#define CONFIG_IO_12_INPUT_BUF_EN 1
#define CONFIG_IO_12_PD_DRV_STRG 10
#define CONFIG_IO_12_PD_SLW_RT 1
#define CONFIG_IO_12_PU_DRV_STRG 8
#define CONFIG_IO_12_PU_SLW_RT 1
#define CONFIG_IO_12_RTRIM 1
#define CONFIG_IO_12_WK_PU_EN 1
#define CONFIG_IO_13_INPUT_BUF_EN 1
#define CONFIG_IO_13_PD_DRV_STRG 10
#define CONFIG_IO_13_PD_SLW_RT 1
#define CONFIG_IO_13_PU_DRV_STRG 8
#define CONFIG_IO_13_PU_SLW_RT 1
#define CONFIG_IO_13_RTRIM 1
#define CONFIG_IO_13_WK_PU_EN 1
#define CONFIG_IO_14_INPUT_BUF_EN 1
#define CONFIG_IO_14_PD_DRV_STRG 10
#define CONFIG_IO_14_PD_SLW_RT 1
#define CONFIG_IO_14_PU_DRV_STRG 8
#define CONFIG_IO_14_PU_SLW_RT 1
#define CONFIG_IO_14_RTRIM 1
#define CONFIG_IO_14_WK_PU_EN 1
#define CONFIG_IO_15_INPUT_BUF_EN 1
#define CONFIG_IO_15_PD_DRV_STRG 10
#define CONFIG_IO_15_PD_SLW_RT 1
#define CONFIG_IO_15_PU_DRV_STRG 8
#define CONFIG_IO_15_PU_SLW_RT 1
#define CONFIG_IO_15_RTRIM 1
#define CONFIG_IO_15_WK_PU_EN 1
#define CONFIG_IO_16_INPUT_BUF_EN 0
#define CONFIG_IO_16_PD_DRV_STRG 10
#define CONFIG_IO_16_PD_SLW_RT 1
#define CONFIG_IO_16_PU_DRV_STRG 8
#define CONFIG_IO_16_PU_SLW_RT 1
#define CONFIG_IO_16_RTRIM 1
#define CONFIG_IO_16_WK_PU_EN 0
#define CONFIG_IO_17_INPUT_BUF_EN 1
#define CONFIG_IO_17_PD_DRV_STRG 10
#define CONFIG_IO_17_PD_SLW_RT 1
#define CONFIG_IO_17_PU_DRV_STRG 8
#define CONFIG_IO_17_PU_SLW_RT 1
#define CONFIG_IO_17_RTRIM 1
#define CONFIG_IO_17_WK_PU_EN 0
#define CONFIG_IO_1_INPUT_BUF_EN 1
#define CONFIG_IO_1_PD_DRV_STRG 10
#define CONFIG_IO_1_PD_SLW_RT 0
#define CONFIG_IO_1_PU_DRV_STRG 8
#define CONFIG_IO_1_PU_SLW_RT 0
#define CONFIG_IO_1_RTRIM 1
#define CONFIG_IO_1_WK_PU_EN 1
#define CONFIG_IO_2_INPUT_BUF_EN 1
#define CONFIG_IO_2_PD_DRV_STRG 10
#define CONFIG_IO_2_PD_SLW_RT 0
#define CONFIG_IO_2_PU_DRV_STRG 8
#define CONFIG_IO_2_PU_SLW_RT 0
#define CONFIG_IO_2_RTRIM 1
#define CONFIG_IO_2_WK_PU_EN 1
#define CONFIG_IO_3_INPUT_BUF_EN 1
#define CONFIG_IO_3_PD_DRV_STRG 10
#define CONFIG_IO_3_PD_SLW_RT 0
#define CONFIG_IO_3_PU_DRV_STRG 8
#define CONFIG_IO_3_PU_SLW_RT 0
#define CONFIG_IO_3_RTRIM 1
#define CONFIG_IO_3_WK_PU_EN 1
#define CONFIG_IO_4_INPUT_BUF_EN 1
#define CONFIG_IO_4_PD_DRV_STRG 10
#define CONFIG_IO_4_PD_SLW_RT 1
#define CONFIG_IO_4_PU_DRV_STRG 8
#define CONFIG_IO_4_PU_SLW_RT 1
#define CONFIG_IO_4_RTRIM 1
#define CONFIG_IO_4_WK_PU_EN 0
#define CONFIG_IO_5_INPUT_BUF_EN 1
#define CONFIG_IO_5_PD_DRV_STRG 10
#define CONFIG_IO_5_PD_SLW_RT 1
#define CONFIG_IO_5_PU_DRV_STRG 8
#define CONFIG_IO_5_PU_SLW_RT 1
#define CONFIG_IO_5_RTRIM 1
#define CONFIG_IO_5_WK_PU_EN 0
#define CONFIG_IO_6_INPUT_BUF_EN 0
#define CONFIG_IO_6_PD_DRV_STRG 10
#define CONFIG_IO_6_PD_SLW_RT 1
#define CONFIG_IO_6_PU_DRV_STRG 8
#define CONFIG_IO_6_PU_SLW_RT 1
#define CONFIG_IO_6_RTRIM 1
#define CONFIG_IO_6_WK_PU_EN 0
#define CONFIG_IO_7_INPUT_BUF_EN 1
#define CONFIG_IO_7_PD_DRV_STRG 10
#define CONFIG_IO_7_PD_SLW_RT 1
#define CONFIG_IO_7_PU_DRV_STRG 8
#define CONFIG_IO_7_PU_SLW_RT 1
#define CONFIG_IO_7_RTRIM 1
#define CONFIG_IO_7_WK_PU_EN 0
#define CONFIG_IO_8_INPUT_BUF_EN 1
#define CONFIG_IO_8_PD_DRV_STRG 10
#define CONFIG_IO_8_PD_SLW_RT 1
#define CONFIG_IO_8_PU_DRV_STRG 8
#define CONFIG_IO_8_PU_SLW_RT 1
#define CONFIG_IO_8_RTRIM 1
#define CONFIG_IO_8_WK_PU_EN 0
#define CONFIG_IO_9_INPUT_BUF_EN 1
#define CONFIG_IO_9_PD_DRV_STRG 10
#define CONFIG_IO_9_PD_SLW_RT 1
#define CONFIG_IO_9_PU_DRV_STRG 8
#define CONFIG_IO_9_PU_SLW_RT 1
#define CONFIG_IO_9_RTRIM 1
#define CONFIG_IO_9_WK_PU_EN 0
#define CONFIG_IO_BANK_VOLTAGE_SEL_CLKRST_IO 1
#define CONFIG_IO_BANK_VOLTAGE_SEL_PERI_IO 1
#define PINMUX_DEDICATED_IO_10_SEL 10
#define PINMUX_DEDICATED_IO_11_SEL 10
#define PINMUX_DEDICATED_IO_12_SEL 8
#define PINMUX_DEDICATED_IO_13_SEL 8
#define PINMUX_DEDICATED_IO_14_SEL 8
#define PINMUX_DEDICATED_IO_15_SEL 8
#define PINMUX_DEDICATED_IO_16_SEL 13
#define PINMUX_DEDICATED_IO_17_SEL 13
#define PINMUX_DEDICATED_IO_4_SEL 8
#define PINMUX_DEDICATED_IO_5_SEL 8
#define PINMUX_DEDICATED_IO_6_SEL 8
#define PINMUX_DEDICATED_IO_7_SEL 8
#define PINMUX_DEDICATED_IO_8_SEL 8
#define PINMUX_DEDICATED_IO_9_SEL 8
#define PINMUX_I2C0_USEFPGA_SEL 0
#define PINMUX_I2C1_USEFPGA_SEL 0
#define PINMUX_I2CEMAC0_USEFPGA_SEL 0
#define PINMUX_I2CEMAC1_USEFPGA_SEL 0
#define PINMUX_I2CEMAC2_USEFPGA_SEL 0
#define PINMUX_NAND_USEFPGA_SEL 0
#define PINMUX_PLL_CLOCK_OUT_USEFPGA_SEL 0
#define PINMUX_QSPI_USEFPGA_SEL 0
#define PINMUX_RGMII0_USEFPGA_SEL 0
#define PINMUX_RGMII1_USEFPGA_SEL 0
#define PINMUX_RGMII2_USEFPGA_SEL 0
#define PINMUX_SDMMC_USEFPGA_SEL 0
#define PINMUX_SHARED_IO_Q1_10_SEL 8
#define PINMUX_SHARED_IO_Q1_11_SEL 8
#define PINMUX_SHARED_IO_Q1_12_SEL 8
#define PINMUX_SHARED_IO_Q1_1_SEL 8
#define PINMUX_SHARED_IO_Q1_2_SEL 8
#define PINMUX_SHARED_IO_Q1_3_SEL 8
#define PINMUX_SHARED_IO_Q1_4_SEL 8
#define PINMUX_SHARED_IO_Q1_5_SEL 8
#define PINMUX_SHARED_IO_Q1_6_SEL 8
#define PINMUX_SHARED_IO_Q1_7_SEL 8
#define PINMUX_SHARED_IO_Q1_8_SEL 8
#define PINMUX_SHARED_IO_Q1_9_SEL 8
#define PINMUX_SHARED_IO_Q2_10_SEL 4
#define PINMUX_SHARED_IO_Q2_11_SEL 4
#define PINMUX_SHARED_IO_Q2_12_SEL 4
#define PINMUX_SHARED_IO_Q2_1_SEL 4
#define PINMUX_SHARED_IO_Q2_2_SEL 4
#define PINMUX_SHARED_IO_Q2_3_SEL 4
#define PINMUX_SHARED_IO_Q2_4_SEL 4
#define PINMUX_SHARED_IO_Q2_5_SEL 4
#define PINMUX_SHARED_IO_Q2_6_SEL 4
#define PINMUX_SHARED_IO_Q2_7_SEL 4
#define PINMUX_SHARED_IO_Q2_8_SEL 4
#define PINMUX_SHARED_IO_Q2_9_SEL 4
#define PINMUX_SHARED_IO_Q3_10_SEL 10
#define PINMUX_SHARED_IO_Q3_11_SEL 1
#define PINMUX_SHARED_IO_Q3_12_SEL 1
#define PINMUX_SHARED_IO_Q3_1_SEL 3
#define PINMUX_SHARED_IO_Q3_2_SEL 3
#define PINMUX_SHARED_IO_Q3_3_SEL 3
#define PINMUX_SHARED_IO_Q3_4_SEL 3
#define PINMUX_SHARED_IO_Q3_5_SEL 3
#define PINMUX_SHARED_IO_Q3_6_SEL 15
#define PINMUX_SHARED_IO_Q3_7_SEL 10
#define PINMUX_SHARED_IO_Q3_8_SEL 10
#define PINMUX_SHARED_IO_Q3_9_SEL 10
#define PINMUX_SHARED_IO_Q4_10_SEL 12
#define PINMUX_SHARED_IO_Q4_11_SEL 12
#define PINMUX_SHARED_IO_Q4_12_SEL 12
#define PINMUX_SHARED_IO_Q4_1_SEL 0
#define PINMUX_SHARED_IO_Q4_2_SEL 0
#define PINMUX_SHARED_IO_Q4_3_SEL 15
#define PINMUX_SHARED_IO_Q4_4_SEL 12
#define PINMUX_SHARED_IO_Q4_5_SEL 15
#define PINMUX_SHARED_IO_Q4_6_SEL 15
#define PINMUX_SHARED_IO_Q4_7_SEL 10
#define PINMUX_SHARED_IO_Q4_8_SEL 15
#define PINMUX_SHARED_IO_Q4_9_SEL 12
#define PINMUX_SPIM0_USEFPGA_SEL 0
#define PINMUX_SPIM1_USEFPGA_SEL 0
#define PINMUX_SPIS0_USEFPGA_SEL 0
#define PINMUX_SPIS1_USEFPGA_SEL 0
#define PINMUX_UART0_USEFPGA_SEL 0
#define PINMUX_UART1_USEFPGA_SEL 0
#define PINMUX_USB0_USEFPGA_SEL 0
#define PINMUX_USB1_USEFPGA_SEL 0
/* Bridge Configuration */
#define F2H_AXI_SLAVE 1
#define F2SDRAM0_AXI_SLAVE 1
#define F2SDRAM1_AXI_SLAVE 0
#define F2SDRAM2_AXI_SLAVE 1
#define H2F_AXI_MASTER 1
#define LWH2F_AXI_MASTER 1
/* Voltage Select for Config IO */
#define CONFIG_IO_BANK_VSEL \
(((CONFIG_IO_BANK_VOLTAGE_SEL_CLKRST_IO & 0x3) << 8) | \
(CONFIG_IO_BANK_VOLTAGE_SEL_PERI_IO & 0x3))
/* Macro for Config IO bit mapping */
#define CONFIG_IO_MACRO(NAME) (((NAME ## _RTRIM & 0xff) << 19) | \
((NAME ## _INPUT_BUF_EN & 0x3) << 17) | \
((NAME ## _WK_PU_EN & 0x1) << 16) | \
((NAME ## _PU_SLW_RT & 0x1) << 13) | \
((NAME ## _PU_DRV_STRG & 0xf) << 8) | \
((NAME ## _PD_SLW_RT & 0x1) << 5) | \
(NAME ## _PD_DRV_STRG & 0x1f))
#endif
/* __SOCFPGA_ARRIA10_CONFIG_H__ */
arch/arm/dts/socfpga_stratix10.dtsi
浏览文件 @
9885313b
...
...
@@ -386,7 +386,6 @@
reg = <0xffd00200 0x100>;
interrupts = <0 117 4>;
resets = <&rst WATCHDOG0_RESET>;
u-boot,dm-pre-reloc;
status = "disabled";
};
...
...
arch/arm/dts/socfpga_stratix10_socdk-u-boot.dtsi
浏览文件 @
9885313b
...
...
@@ -33,5 +33,6 @@
};
&watchdog0 {
status = "okay";
u-boot,dm-pre-reloc;
};
arch/arm/mach-socfpga/Kconfig
浏览文件 @
9885313b
...
...
@@ -35,6 +35,7 @@ config TARGET_SOCFPGA_AGILEX
select ARMV8_SET_SMPEN
select ARMV8_SPIN_TABLE
select CLK
select FPGA_INTEL_SDM_MAILBOX
select NCORE_CACHE
select SPL_CLK if SPL
...
...
@@ -79,7 +80,7 @@ config TARGET_SOCFPGA_STRATIX10
select ARMV8_MULTIENTRY
select ARMV8_SET_SMPEN
select ARMV8_SPIN_TABLE
select FPGA_
STRATIX10
select FPGA_
INTEL_SDM_MAILBOX
choice
prompt "Altera SOCFPGA board select"
...
...
arch/arm/mach-socfpga/include/mach/mailbox_s10.h
浏览文件 @
9885313b
...
...
@@ -67,8 +67,42 @@ enum ALT_SDM_MBOX_RESP_CODE {
MBOX_RESP_UNKNOWN_BR
=
2
,
/* CMD code not recognized by firmware */
MBOX_RESP_UNKNOWN
=
3
,
/* Indicates that the device is not configured */
MBOX_RESP_NOT_CONFIGURED
=
256
,
/* Length setting is not a valid length for this CMD type */
MBOX_RESP_INVALID_LEN
=
4
,
/* Indirect setting is not valid for this CMD type */
MBOX_RESP_INVALID_INDIRECT_SETTING
=
5
,
/* HW source which is not allowed to send CMD type */
MBOX_RESP_CMD_INVALID_ON_SRC
=
6
,
/* Client with ID not associated with any running PR CMD tries to run
* RECONFIG_DATA RECONFIG_STATUS and accessing QSPI / SDMMC using ID
* without exclusive access
*/
MBOX_RESP_CLIENT_ID_NO_MATCH
=
8
,
/* Address provided to the system is invalid (alignment, range
* permission)
*/
MBOX_RESP_INVALID_ADDR
=
0x9
,
/* Signature authentication failed */
MBOX_RESP_AUTH_FAIL
=
0xA
,
/* CMD timed out */
MBOX_RESP_TIMEOUT
=
0xB
,
/* HW (i.e. QSPI) is not ready (initialized or configured) */
MBOX_RESP_HW_NOT_RDY
=
0xC
,
/* Invalid license for IID registration */
MBOX_RESP_PUF_ACCCES_FAILED
=
0x80
,
MBOX_PUF_ENROLL_DISABLE
=
0x81
,
MBOX_RESP_PUF_ENROLL_FAIL
=
0x82
,
MBOX_RESP_PUF_RAM_TEST_FAIL
=
0x83
,
MBOX_RESP_ATTEST_CERT_GEN_FAIL
=
0x84
,
/* Operation not allowed under current security settings */
MBOX_RESP_NOT_ALLOWED_UNDER_SECURITY_SETTINGS
=
0x85
,
MBOX_RESP_PUF_TRNG_FAIL
=
0x86
,
MBOX_RESP_FUSE_ALREADY_BLOWN
=
0x87
,
MBOX_RESP_INVALID_SIGNATURE
=
0x88
,
MBOX_RESP_INVALID_HASH
=
0x8b
,
MBOX_RESP_INVALID_CERTIFICATE
=
0x91
,
/* Indicates that the device (FPGA or HPS) is not configured */
MBOX_RESP_NOT_CONFIGURED
=
0x100
,
/* Indicates that the device is busy */
MBOX_RESP_DEVICE_BUSY
=
0x1FF
,
/* Indicates that there is no valid response available */
...
...
arch/arm/mach-socfpga/include/mach/reset_manager_soc64.h
浏览文件 @
9885313b
...
...
@@ -8,6 +8,7 @@
void
reset_deassert_peripherals_handoff
(
void
);
int
cpu_has_been_warmreset
(
void
);
void
print_reset_info
(
void
);
void
socfpga_bridges_reset
(
int
enable
);
#define RSTMGR_SOC64_STATUS 0x00
...
...
@@ -21,8 +22,15 @@ void socfpga_bridges_reset(int enable);
#define RSTMGR_BRGMODRST_DDRSCH_MASK 0X00000040
#define RSTMGR_BRGMODRST_FPGA2SOC_MASK 0x00000004
/* Watchdogs and MPU warm reset mask */
#define RSTMGR_L4WD_MPU_WARMRESET_MASK 0x000F0F00
/* SDM, Watchdogs and MPU warm reset mask */
#define RSTMGR_STAT_SDMWARMRST BIT(1)
#define RSTMGR_STAT_MPU0RST_BITPOS 8
#define RSTMGR_STAT_L4WD0RST_BITPOS 16
#define RSTMGR_L4WD_MPU_WARMRESET_MASK (RSTMGR_STAT_SDMWARMRST | \
GENMASK(RSTMGR_STAT_MPU0RST_BITPOS + 3, \
RSTMGR_STAT_MPU0RST_BITPOS) | \
GENMASK(RSTMGR_STAT_L4WD0RST_BITPOS + 3, \
RSTMGR_STAT_L4WD0RST_BITPOS))
/*
* SocFPGA Stratix10 reset IDs, bank mapping is as follows:
...
...
arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
浏览文件 @
9885313b
...
...
@@ -46,13 +46,21 @@ void sysmgr_pinmux_table_delay(const u32 **table, unsigned int *table_len);
#define SYSMGR_SOC64_GPO 0xe4
#define SYSMGR_SOC64_GPI 0xe8
#define SYSMGR_SOC64_MPU 0xf0
/* store qspi ref clock */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD0 0x200
/* store osc1 clock freq */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD1 0x204
/* store fpga clock freq */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD2 0x208
/* reserved for customer use */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD3 0x20c
/* store PSCI_CPU_ON value */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD4 0x210
/* store PSCI_CPU_ON value */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD5 0x214
/* store VBAR_EL3 value */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD6 0x218
/* store VBAR_EL3 value */
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD7 0x21c
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD8 0x220
#define SYSMGR_SOC64_BOOT_SCRATCH_COLD9 0x224
...
...
arch/arm/mach-socfpga/mailbox_s10.c
浏览文件 @
9885313b
...
...
@@ -29,54 +29,107 @@ DECLARE_GLOBAL_DATA_PTR;
static
__always_inline
int
mbox_polling_resp
(
u32
rout
)
{
u32
rin
;
unsigned
long
i
=
~
0
;
unsigned
long
i
=
200
0
;
while
(
i
)
{
rin
=
MBOX_READL
(
MBOX_RIN
);
if
(
rout
!=
rin
)
return
0
;
udelay
(
1000
);
i
--
;
}
return
-
ETIMEDOUT
;
}
static
__always_inline
int
mbox_is_cmdbuf_full
(
u32
cin
)
{
return
(((
cin
+
1
)
%
MBOX_CMD_BUFFER_SIZE
)
==
MBOX_READL
(
MBOX_COUT
));
}
static
__always_inline
int
mbox_is_cmdbuf_empty
(
u32
cin
)
{
return
(((
MBOX_READL
(
MBOX_COUT
)
+
1
)
%
MBOX_CMD_BUFFER_SIZE
)
==
cin
);
}
static
__always_inline
int
mbox_wait_for_cmdbuf_empty
(
u32
cin
)
{
int
timeout
=
2000
;
while
(
timeout
)
{
if
(
mbox_is_cmdbuf_empty
(
cin
))
return
0
;
udelay
(
1000
);
timeout
--
;
}
return
-
ETIMEDOUT
;
}
static
__always_inline
int
mbox_write_cmd_buffer
(
u32
*
cin
,
u32
data
,
int
*
is_cmdbuf_overflow
)
{
int
timeout
=
1000
;
while
(
timeout
)
{
if
(
mbox_is_cmdbuf_full
(
*
cin
))
{
if
(
is_cmdbuf_overflow
&&
*
is_cmdbuf_overflow
==
0
)
{
/* Trigger SDM doorbell */
MBOX_WRITEL
(
1
,
MBOX_DOORBELL_TO_SDM
);
*
is_cmdbuf_overflow
=
1
;
}
udelay
(
1000
);
}
else
{
/* write header to circular buffer */
MBOX_WRITE_CMD_BUF
(
data
,
(
*
cin
)
++
);
*
cin
%=
MBOX_CMD_BUFFER_SIZE
;
MBOX_WRITEL
(
*
cin
,
MBOX_CIN
);
break
;
}
timeout
--
;
}
if
(
!
timeout
)
return
-
ETIMEDOUT
;
/* Wait for the SDM to drain the FIFO command buffer */
if
(
is_cmdbuf_overflow
&&
*
is_cmdbuf_overflow
)
return
mbox_wait_for_cmdbuf_empty
(
*
cin
);
return
0
;
}
/* Check for available slot and write to circular buffer.
* It also update command valid offset (cin) register.
*/
static
__always_inline
int
mbox_fill_cmd_circular_buff
(
u32
header
,
u32
len
,
u32
*
arg
)
{
u32
cin
;
u32
cout
;
u32
i
;
int
i
,
ret
;
int
is_cmdbuf_overflow
=
0
;
u32
cin
=
MBOX_READL
(
MBOX_CIN
)
%
MBOX_CMD_BUFFER_SIZE
;
cin
=
MBOX_READL
(
MBOX_CIN
)
%
MBOX_CMD_BUFFER_SIZE
;
cout
=
MBOX_READL
(
MBOX_COUT
)
%
MBOX_CMD_BUFFER_SIZE
;
/* if command buffer is full or not enough free space
* to fit the data. Note, len is in u32 unit.
*/
if
(((
cin
+
1
)
%
MBOX_CMD_BUFFER_SIZE
)
==
cout
||
((
MBOX_CMD_BUFFER_SIZE
-
cin
+
cout
-
1
)
%
MBOX_CMD_BUFFER_SIZE
)
<
(
len
+
1
))
return
-
ENOMEM
;
/* write header to circular buffer */
MBOX_WRITE_CMD_BUF
(
header
,
cin
++
);
/* wrapping around when it reach the buffer size */
cin
%=
MBOX_CMD_BUFFER_SIZE
;
ret
=
mbox_write_cmd_buffer
(
&
cin
,
header
,
&
is_cmdbuf_overflow
);
if
(
ret
)
return
ret
;
/* write arguments */
for
(
i
=
0
;
i
<
len
;
i
++
)
{
MBOX_WRITE_CMD_BUF
(
arg
[
i
],
cin
++
);
/* wrapping around when it reach the buffer size */
cin
%=
MBOX_CMD_BUFFER_SIZE
;
is_cmdbuf_overflow
=
0
;
ret
=
mbox_write_cmd_buffer
(
&
cin
,
arg
[
i
],
&
is_cmdbuf_overflow
);
if
(
ret
)
return
ret
;
}
/* write command valid offset */
MBOX_WRITEL
(
cin
,
MBOX_CIN
);
/* If SDM doorbell is not triggered after the last data is
* written into mailbox FIFO command buffer, trigger the
* SDM doorbell again to ensure SDM able to read the remaining
* data.
*/
if
(
!
is_cmdbuf_overflow
)
MBOX_WRITEL
(
1
,
MBOX_DOORBELL_TO_SDM
);
return
0
;
}
...
...
@@ -89,10 +142,6 @@ static __always_inline int mbox_prepare_cmd_only(u8 id, u32 cmd,
u32
header
;
int
ret
;
/* Total length is command + argument length */
if
((
len
+
1
)
>
MBOX_CMD_BUFFER_SIZE
)
return
-
EINVAL
;
if
(
cmd
>
MBOX_MAX_CMD_INDEX
)
return
-
EINVAL
;
...
...
@@ -109,11 +158,7 @@ static __always_inline int mbox_send_cmd_only_common(u8 id, u32 cmd,
u8
is_indirect
,
u32
len
,
u32
*
arg
)
{
int
ret
=
mbox_prepare_cmd_only
(
id
,
cmd
,
is_indirect
,
len
,
arg
);
/* write doorbell */
MBOX_WRITEL
(
1
,
MBOX_DOORBELL_TO_SDM
);
return
ret
;
return
mbox_prepare_cmd_only
(
id
,
cmd
,
is_indirect
,
len
,
arg
);
}
/* Return number of responses received in buffer */
...
...
@@ -166,21 +211,24 @@ static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
status
=
MBOX_READL
(
MBOX_STATUS
)
&
MBOX_STATUS_UA_MSK
;
/* Write urgent command to urgent register */
MBOX_WRITEL
(
cmd
,
MBOX_URG
);
/* write doorbell */
MBOX_WRITEL
(
1
,
MBOX_DOORBELL_TO_SDM
);
}
else
{
ret
=
mbox_prepare_cmd_only
(
id
,
cmd
,
is_indirect
,
len
,
arg
);
if
(
ret
)
return
ret
;
}
/* write doorbell */
MBOX_WRITEL
(
1
,
MBOX_DOORBELL_TO_SDM
);
while
(
1
)
{
ret
=
~
0
;
ret
=
100
0
;
/* Wait for doorbell from SDM */
while
(
!
MBOX_READL
(
MBOX_DOORBELL_FROM_SDM
)
&&
ret
--
)
;
do
{
if
(
MBOX_READL
(
MBOX_DOORBELL_FROM_SDM
))
break
;
udelay
(
1000
);
}
while
(
--
ret
);
if
(
!
ret
)
return
-
ETIMEDOUT
;
...
...
@@ -216,9 +264,7 @@ static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
if
((
MBOX_RESP_CLIENT_GET
(
resp
)
==
MBOX_CLIENT_ID_UBOOT
)
&&
(
MBOX_RESP_ID_GET
(
resp
)
==
id
))
{
ret
=
MBOX_RESP_ERR_GET
(
resp
);
if
(
ret
)
return
ret
;
int
resp_err
=
MBOX_RESP_ERR_GET
(
resp
);
if
(
resp_buf_len
)
{
buf_len
=
*
resp_buf_len
;
...
...
@@ -247,14 +293,36 @@ static __always_inline int mbox_send_cmd_common(u8 id, u32 cmd, u8 is_indirect,
buf_len
--
;
}
}
return
re
t
;
return
re
sp_err
;
}
}
}
;
}
return
-
EIO
;
}
static
__always_inline
int
mbox_send_cmd_common_retry
(
u8
id
,
u32
cmd
,
u8
is_indirect
,
u32
len
,
u32
*
arg
,
u8
urgent
,
u32
*
resp_buf_len
,
u32
*
resp_buf
)
{
int
ret
;
int
i
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
ret
=
mbox_send_cmd_common
(
id
,
cmd
,
is_indirect
,
len
,
arg
,
urgent
,
resp_buf_len
,
resp_buf
);
if
(
ret
==
MBOX_RESP_TIMEOUT
||
ret
==
MBOX_RESP_DEVICE_BUSY
)
udelay
(
2000
);
/* wait for 2ms before resend */
else
break
;
}
return
ret
;
}
int
mbox_init
(
void
)
{
int
ret
;
...
...
@@ -349,10 +417,10 @@ static __always_inline int mbox_get_fpga_config_status_common(u32 cmd)
int
ret
;
reconfig_status_resp_len
=
RECONFIG_STATUS_RESPONSE_LEN
;
ret
=
mbox_send_cmd_common
(
MBOX_ID_UBOOT
,
cmd
,
MBOX_CMD_DIRECT
,
0
,
NULL
,
0
,
&
reconfig_status_resp_len
,
reconfig_status_resp
);
ret
=
mbox_send_cmd_common
_retry
(
MBOX_ID_UBOOT
,
cmd
,
MBOX_CMD_DIRECT
,
0
,
NULL
,
0
,
&
reconfig_status_resp_len
,
reconfig_status_resp
);
if
(
ret
)
return
ret
;
...
...
@@ -392,16 +460,16 @@ int __secure mbox_get_fpga_config_status_psci(u32 cmd)
int
mbox_send_cmd
(
u8
id
,
u32
cmd
,
u8
is_indirect
,
u32
len
,
u32
*
arg
,
u8
urgent
,
u32
*
resp_buf_len
,
u32
*
resp_buf
)
{
return
mbox_send_cmd_common
(
id
,
cmd
,
is_indirect
,
len
,
arg
,
urgent
,
resp_buf_len
,
resp_buf
);
return
mbox_send_cmd_common
_retry
(
id
,
cmd
,
is_indirect
,
len
,
arg
,
urgent
,
resp_buf_len
,
resp_buf
);
}
int
__secure
mbox_send_cmd_psci
(
u8
id
,
u32
cmd
,
u8
is_indirect
,
u32
len
,
u32
*
arg
,
u8
urgent
,
u32
*
resp_buf_len
,
u32
*
resp_buf
)
{
return
mbox_send_cmd_common
(
id
,
cmd
,
is_indirect
,
len
,
arg
,
urgent
,
resp_buf_len
,
resp_buf
);
return
mbox_send_cmd_common
_retry
(
id
,
cmd
,
is_indirect
,
len
,
arg
,
urgent
,
resp_buf_len
,
resp_buf
);
}
int
mbox_send_cmd_only
(
u8
id
,
u32
cmd
,
u8
is_indirect
,
u32
len
,
u32
*
arg
)
...
...
arch/arm/mach-socfpga/misc_s10.c
浏览文件 @
9885313b
...
...
@@ -8,20 +8,13 @@
#include <common.h>
#include <env.h>
#include <errno.h>
#include <fdtdec.h>
#include <init.h>
#include <log.h>
#include <miiphy.h>
#include <netdev.h>
#include <asm/io.h>
#include <asm/arch/mailbox_s10.h>
#include <asm/arch/misc.h>
#include <asm/arch/reset_manager.h>
#include <asm/arch/system_manager.h>
#include <asm/arch/misc.h>
#include <asm/pl310.h>
#include <linux/libfdt.h>
#include <asm/arch/mailbox_s10.h>
#include <dt-bindings/reset/altr,rst-mgr-s10.h>
DECLARE_GLOBAL_DATA_PTR
;
...
...
@@ -31,7 +24,7 @@ DECLARE_GLOBAL_DATA_PTR;
static
Altera_desc
altera_fpga
[]
=
{
{
/* Family */
Intel_FPGA_S
tratix10
,
Intel_FPGA_S
DM_Mailbox
,
/* Interface type */
secure_device_manager_mailbox
,
/* No limitation as additional data will be ignored */
...
...
@@ -45,79 +38,6 @@ static Altera_desc altera_fpga[] = {
},
};
/*
* DesignWare Ethernet initialization
*/
#ifdef CONFIG_ETH_DESIGNWARE
static
u32
socfpga_phymode_setup
(
u32
gmac_index
,
const
char
*
phymode
)
{
u32
modereg
;
if
(
!
phymode
)
return
-
EINVAL
;
if
(
!
strcmp
(
phymode
,
"mii"
)
||
!
strcmp
(
phymode
,
"gmii"
)
||
!
strcmp
(
phymode
,
"sgmii"
))
modereg
=
SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII
;
else
if
(
!
strcmp
(
phymode
,
"rgmii"
))
modereg
=
SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII
;
else
if
(
!
strcmp
(
phymode
,
"rmii"
))
modereg
=
SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII
;
else
return
-
EINVAL
;
clrsetbits_le32
(
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_EMAC0
+
(
gmac_index
*
sizeof
(
u32
)),
SYSMGR_EMACGRP_CTRL_PHYSEL_MASK
,
modereg
);
return
0
;
}
static
int
socfpga_set_phymode
(
void
)
{
const
void
*
fdt
=
gd
->
fdt_blob
;
struct
fdtdec_phandle_args
args
;
const
char
*
phy_mode
;
u32
gmac_index
;
int
nodes
[
3
];
/* Max. 3 GMACs */
int
ret
,
count
;
int
i
,
node
;
count
=
fdtdec_find_aliases_for_id
(
fdt
,
"ethernet"
,
COMPAT_ALTERA_SOCFPGA_DWMAC
,
nodes
,
ARRAY_SIZE
(
nodes
));
for
(
i
=
0
;
i
<
count
;
i
++
)
{
node
=
nodes
[
i
];
if
(
node
<=
0
)
continue
;
ret
=
fdtdec_parse_phandle_with_args
(
fdt
,
node
,
"resets"
,
"#reset-cells"
,
1
,
0
,
&
args
);
if
(
ret
||
args
.
args_count
!=
1
)
{
debug
(
"GMAC%i: Failed to parse DT 'resets'!
\n
"
,
i
);
continue
;
}
gmac_index
=
args
.
args
[
0
]
-
EMAC0_RESET
;
phy_mode
=
fdt_getprop
(
fdt
,
node
,
"phy-mode"
,
NULL
);
ret
=
socfpga_phymode_setup
(
gmac_index
,
phy_mode
);
if
(
ret
)
{
debug
(
"GMAC%i: Failed to parse DT 'phy-mode'!
\n
"
,
i
);
continue
;
}
}
return
0
;
}
#else
static
int
socfpga_set_phymode
(
void
)
{
return
0
;
};
#endif
/*
* Print CPU information
...
...
@@ -139,7 +59,6 @@ int arch_misc_init(void)
sprintf
(
qspi_string
,
"<0x%08x>"
,
cm_get_qspi_controller_clk_hz
());
env_set
(
"qspi_clock"
,
qspi_string
);
socfpga_set_phymode
();
return
0
;
}
#endif
...
...
arch/arm/mach-socfpga/qts-filter-a10.sh
0 → 100755
浏览文件 @
9885313b
#!/bin/bash
#
# helper function to convert from DOS to Unix, if necessary, and handle
# lines ending in '\'.
#
fix_newlines_in_macros
()
{
sed
-n
':next;s/\r$//;/[^\\]\\$/ {N;s/\\\n//;b next};p'
$1
}
#filter out only what we need from a10 hps.xml
grep_a10_hps_config
()
{
egrep
"clk_hz|i_clk_mgr|i_io48_pin_mux|AXI_SLAVE|AXI_MASTER"
}
#
# Process hps.xml
# $1: hps.xml
# $2: Output File
#
process_a10_hps_config
()
{
hps_xml
=
"
$1
"
outfile
=
"
$2
"
(
cat
<<
EOF
// SPDX-License-Identifier: BSD-3-Clause
/*
* Intel Arria 10 SoCFPGA configuration
*/
#ifndef __SOCFPGA_ARRIA10_CONFIG_H__
#define __SOCFPGA_ARRIA10_CONFIG_H__
EOF
echo
"/* Clocks */"
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"clk_hz"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/\.[0-9]//'
|
sed
's/I_CLK_MGR_//'
|
sort
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"i_clk_mgr_mainpll"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/\.[0-9]//'
|
sed
's/I_CLK_MGR_//'
|
sort
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"i_clk_mgr_perpll"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/\.[0-9]//'
|
sed
's/I_CLK_MGR_//'
|
sort
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"i_clk_mgr_clkmgr"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/\.[0-9]//'
|
sed
's/I_CLK_MGR_//'
|
sort
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"i_clk_mgr_alteragrp"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/\.[0-9]//'
|
sed
's/I_CLK_MGR_//'
|
sort
echo
"#define ALTERAGRP_MPUCLK ((ALTERAGRP_MPUCLK_PERICNT << 16) |
\\
"
echo
" (ALTERAGRP_MPUCLK_MAINCNT))"
echo
"#define ALTERAGRP_NOCCLK ((ALTERAGRP_NOCCLK_PERICNT << 16) |
\\
"
echo
" (ALTERAGRP_NOCCLK_MAINCNT))"
echo
echo
"/* Pin Mux Configuration */"
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"i_io48_pin_mux"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/I_IO48_PIN_MUX_//'
|
sed
's/SHARED_3V_IO_GRP_//'
|
sed
's/FPGA_INTERFACE_GRP_//'
|
sed
's/DEDICATED_IO_GRP_//'
|
sed
's/CONFIGURATION_DEDICATED/CONFIG/'
|
sort
echo
echo
"/* Bridge Configuration */"
fix_newlines_in_macros
\
${
hps_xml
}
| egrep
"AXI_SLAVE|AXI_MASTER"
|
awk
-F
"'"
'{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}'
|
sed
's/true/1/'
|
sed
's/false/0/'
|
sort
echo
echo
"/* Voltage Select for Config IO */"
echo
"#define CONFIG_IO_BANK_VSEL
\\
"
echo
" (((CONFIG_IO_BANK_VOLTAGE_SEL_CLKRST_IO & 0x3) << 8) |
\\
"
echo
" (CONFIG_IO_BANK_VOLTAGE_SEL_PERI_IO & 0x3))"
echo
echo
"/* Macro for Config IO bit mapping */"
echo
-n
"#define CONFIG_IO_MACRO(NAME) "
echo
"(((NAME ## _RTRIM & 0xff) << 19) |
\\
"
echo
" ((NAME ## _INPUT_BUF_EN & 0x3) << 17) |
\\
"
echo
" ((NAME ## _WK_PU_EN & 0x1) << 16) |
\\
"
echo
" ((NAME ## _PU_SLW_RT & 0x1) << 13) |
\\
"
echo
" ((NAME ## _PU_DRV_STRG & 0xf) << 8) |
\\
"
echo
" ((NAME ## _PD_SLW_RT & 0x1) << 5) |
\\
"
echo
" (NAME ## _PD_DRV_STRG & 0x1f))"
cat
<<
EOF
#endif /* __SOCFPGA_ARRIA10_CONFIG_H__ */
EOF
)
>
"
${
outfile
}
"
}
usage
()
{
echo
"
$0
[hps_xml] [output_file]"
echo
"Process QTS-generated hps.xml into devicetree header."
echo
""
echo
" hps_xml - hps.xml file from hps_isw_handoff"
echo
" output_file - Output header file for dtsi include"
echo
""
}
hps_xml
=
"
$1
"
outfile
=
"
$2
"
if
[
"$#"
-ne
2
]
;
then
usage
exit
1
fi
process_a10_hps_config
"
${
hps_xml
}
"
"
${
outfile
}
"
arch/arm/mach-socfpga/reset_manager_s10.c
浏览文件 @
9885313b
...
...
@@ -9,6 +9,7 @@
#include <asm/arch/reset_manager.h>
#include <asm/arch/system_manager.h>
#include <dt-bindings/reset/altr,rst-mgr-s10.h>
#include <linux/iopoll.h>
DECLARE_GLOBAL_DATA_PTR
;
...
...
@@ -54,6 +55,8 @@ void socfpga_per_reset_all(void)
void
socfpga_bridges_reset
(
int
enable
)
{
u32
reg
;
if
(
enable
)
{
/* clear idle request to all bridges */
setbits_le32
(
socfpga_get_sysmgr_addr
()
+
...
...
@@ -64,9 +67,9 @@ void socfpga_bridges_reset(int enable)
~
0
);
/* Poll until all idleack to 0 */
while
(
readl
(
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLEACK
))
;
read_poll_timeout
(
readl
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLEACK
,
reg
,
!
reg
,
1000
,
300000
)
;
}
else
{
/* set idle request to all bridges */
writel
(
~
0
,
...
...
@@ -77,14 +80,18 @@ void socfpga_bridges_reset(int enable)
writel
(
1
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_TIMEOUT
);
/* Poll until all idleack to 1 */
while
((
readl
(
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLEACK
)
^
(
SYSMGR_NOC_H2F_MSK
|
SYSMGR_NOC_LWH2F_MSK
)))
;
read_poll_timeout
(
readl
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLEACK
,
reg
,
reg
==
(
SYSMGR_NOC_H2F_MSK
|
SYSMGR_NOC_LWH2F_MSK
),
1000
,
300000
);
/* Poll until all idlestatus to 1 */
while
((
readl
(
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLESTATUS
)
^
(
SYSMGR_NOC_H2F_MSK
|
SYSMGR_NOC_LWH2F_MSK
)))
;
read_poll_timeout
(
readl
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_NOC_IDLESTATUS
,
reg
,
reg
==
(
SYSMGR_NOC_H2F_MSK
|
SYSMGR_NOC_LWH2F_MSK
),
1000
,
300000
);
/* Reset all bridges (except NOR DDR scheduler & F2S) */
setbits_le32
(
socfpga_get_rstmgr_addr
()
+
RSTMGR_SOC64_BRGMODRST
,
...
...
@@ -104,3 +111,25 @@ int cpu_has_been_warmreset(void)
return
readl
(
socfpga_get_rstmgr_addr
()
+
RSTMGR_SOC64_STATUS
)
&
RSTMGR_L4WD_MPU_WARMRESET_MASK
;
}
void
print_reset_info
(
void
)
{
bool
iswd
;
int
n
;
u32
stat
=
cpu_has_been_warmreset
();
printf
(
"Reset state: %s%s"
,
stat
?
"Warm "
:
"Cold"
,
(
stat
&
RSTMGR_STAT_SDMWARMRST
)
?
"[from SDM] "
:
""
);
stat
&=
~
RSTMGR_STAT_SDMWARMRST
;
if
(
!
stat
)
{
puts
(
"
\n
"
);
return
;
}
n
=
generic_ffs
(
stat
)
-
1
;
iswd
=
(
n
>=
RSTMGR_STAT_L4WD0RST_BITPOS
);
printf
(
"(Triggered by %s %d)
\n
"
,
iswd
?
"Watchdog"
:
"MPU"
,
iswd
?
(
n
-
RSTMGR_STAT_L4WD0RST_BITPOS
)
:
(
n
-
RSTMGR_STAT_MPU0RST_BITPOS
));
}
arch/arm/mach-socfpga/spl_agilex.c
浏览文件 @
9885313b
...
...
@@ -51,11 +51,11 @@ void board_init_f(ulong dummy)
socfpga_get_managers_addr
();
#ifdef CONFIG_HW_WATCHDOG
/* Ensure watchdog is paused when debugging is happening */
writel
(
SYSMGR_WDDBG_PAUSE_ALL_CPU
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_WDDBG
);
#ifdef CONFIG_HW_WATCHDOG
/* Enable watchdog before initializing the HW */
socfpga_per_reset
(
SOCFPGA_RESET
(
L4WD0
),
1
);
socfpga_per_reset
(
SOCFPGA_RESET
(
L4WD0
),
0
);
...
...
@@ -76,6 +76,7 @@ void board_init_f(ulong dummy)
}
preloader_console_init
();
print_reset_info
();
cm_print_clock_quick_summary
();
firewall_setup
();
...
...
arch/arm/mach-socfpga/spl_s10.c
浏览文件 @
9885313b
...
...
@@ -53,11 +53,11 @@ void board_init_f(ulong dummy)
socfpga_get_managers_addr
();
#ifdef CONFIG_HW_WATCHDOG
/* Ensure watchdog is paused when debugging is happening */
writel
(
SYSMGR_WDDBG_PAUSE_ALL_CPU
,
socfpga_get_sysmgr_addr
()
+
SYSMGR_SOC64_WDDBG
);
#ifdef CONFIG_HW_WATCHDOG
/* Enable watchdog before initializing the HW */
socfpga_per_reset
(
SOCFPGA_RESET
(
L4WD0
),
1
);
socfpga_per_reset
(
SOCFPGA_RESET
(
L4WD0
),
0
);
...
...
@@ -81,6 +81,7 @@ void board_init_f(ulong dummy)
#endif
preloader_console_init
();
print_reset_info
();
cm_print_clock_quick_summary
();
firewall_setup
();
...
...
arch/arm/mach-socfpga/timer_s10.c
浏览文件 @
9885313b
...
...
@@ -14,6 +14,7 @@
*/
int
timer_init
(
void
)
{
#ifdef CONFIG_SPL_BUILD
int
enable
=
0x3
;
/* timer enable + output signal masked */
int
loadval
=
~
0
;
...
...
@@ -22,6 +23,6 @@ int timer_init(void)
/* enable processor pysical counter */
asm
volatile
(
"msr cntp_ctl_el0, %0"
:
:
"r"
(
enable
));
asm
volatile
(
"msr cntp_tval_el0, %0"
:
:
"r"
(
loadval
));
#endif
return
0
;
}
configs/socfpga_agilex_defconfig
浏览文件 @
9885313b
...
...
@@ -12,6 +12,7 @@ CONFIG_TARGET_SOCFPGA_AGILEX_SOCDK=y
CONFIG_IDENT_STRING="socfpga_agilex"
CONFIG_SPL_FS_FAT=y
CONFIG_DEFAULT_DEVICE_TREE="socfpga_agilex_socdk"
# CONFIG_PSCI_RESET is not set
CONFIG_BOOTDELAY=5
CONFIG_USE_BOOTARGS=y
CONFIG_BOOTARGS="earlycon"
...
...
@@ -34,7 +35,6 @@ CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_EMBED=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_SPL_DM_SEQ_ALIAS=y
...
...
@@ -60,4 +60,7 @@ CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_DWC2=y
CONFIG_USB_STORAGE=y
CONFIG_DESIGNWARE_WATCHDOG=y
CONFIG_WDT=y
# CONFIG_SPL_USE_TINY_PRINTF is not set
CONFIG_PANIC_HANG=y
configs/socfpga_stratix10_defconfig
浏览文件 @
9885313b
...
...
@@ -14,6 +14,7 @@ CONFIG_SPL_FS_FAT=y
CONFIG_DEFAULT_DEVICE_TREE="socfpga_stratix10_socdk"
CONFIG_OPTIMIZE_INLINING=y
CONFIG_SPL_OPTIMIZE_INLINING=y
# CONFIG_PSCI_RESET is not set
CONFIG_BOOTDELAY=5
CONFIG_USE_BOOTARGS=y
CONFIG_BOOTARGS="earlycon"
...
...
@@ -36,7 +37,6 @@ CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_EMBED=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_NET_RANDOM_ETHADDR=y
...
...
@@ -67,3 +67,4 @@ CONFIG_USB_STORAGE=y
CONFIG_DESIGNWARE_WATCHDOG=y
CONFIG_WDT=y
# CONFIG_SPL_USE_TINY_PRINTF is not set
CONFIG_PANIC_HANG=y
doc/README.socfpga
浏览文件 @
9885313b
...
...
@@ -16,9 +16,9 @@ controller support within SOCFPGA
#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256
-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM
--------------------------------------------------
G
enerating the handoff header files for U-Boot SPL
--------------------------------------------------
--------------------------------------------------
-------------------
Cyclone 5 / Arria 5 g
enerating the handoff header files for U-Boot SPL
--------------------------------------------------
-------------------
This text is assuming quartus 16.1, but newer versions will probably work just fine too;
verified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB).
...
...
@@ -32,7 +32,7 @@ Rebuilding your Quartus project
Choose one of the follwing methods, either command line or GUI.
Using the com
a
and line
Using the com
m
and line
~~~~~~~~~~~~~~~~~~~~~~
First run the embedded command shell, using your path to the Quartus install:
...
...
@@ -147,3 +147,32 @@ Note: file sizes will differ slightly depending on the selected board.
Now your board is ready for full mainline support including U-Boot SPL.
The Preloader will not be needed any more.
----------------------------------------------------------
Arria 10 generating the handoff header files for U-Boot SPL
----------------------------------------------------------
A header file for inclusion in a devicetree for Arria10 can be generated
by the qts-filter-a10.sh script directly from the hps_isw_handoff/hps.xml
file generated during the FPGA project compilation. The header contains
all PLL, clock, pinmux, and bridge configurations required.
Please look at the socfpga_arria10_socdk_sdmmc-u-boot.dtsi for an example
that includes use of the generated handoff header.
Devicetree header generation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The qts-filter-a10.sh script can process the compile time genetated hps.xml
to create the appropriate devicetree header.
$ ./arch/arm/mach-socfpga/qts-filter-a10.sh \
<hps_xml> \
<output_file>
hps_xml - hps_isw_handoff/hps.xml from Quartus project
output_file - Output filename and location for header file
The script generates a single header file names <output_file> that should
be placed in arch/arm/dts.
drivers/clk/altera/clk-agilex.c
浏览文件 @
9885313b
...
...
@@ -47,8 +47,66 @@ static void clk_write_ctrl(struct socfpga_clk_platdata *plat, u32 val)
#define MEMBUS_MAINPLL 0
#define MEMBUS_PERPLL 1
#define MEMBUS_TIMEOUT 1000
#define MEMBUS_ADDR_CLKSLICE 0x27
#define MEMBUS_CLKSLICE_SYNC_MODE_EN 0x80
#define MEMBUS_CLKSLICE_REG 0x27
#define MEMBUS_SYNTHCALFOSC_INIT_CENTERFREQ_REG 0xb3
#define MEMBUS_SYNTHPPM_WATCHDOGTMR_VF01_REG 0xe6
#define MEMBUS_CALCLKSLICE0_DUTY_LOCOVR_REG 0x03
#define MEMBUS_CALCLKSLICE1_DUTY_LOCOVR_REG 0x07
static
const
struct
{
u32
reg
;
u32
val
;
u32
mask
;
}
membus_pll
[]
=
{
{
MEMBUS_CLKSLICE_REG
,
/*
* BIT[7:7]
* Enable source synchronous mode
*/
BIT
(
7
),
BIT
(
7
)
},
{
MEMBUS_SYNTHCALFOSC_INIT_CENTERFREQ_REG
,
/*
* BIT[0:0]
* Sets synthcalfosc_init_centerfreq=1 to limit overshoot
* frequency during lock
*/
BIT
(
0
),
BIT
(
0
)
},
{
MEMBUS_SYNTHPPM_WATCHDOGTMR_VF01_REG
,
/*
* BIT[0:0]
* Sets synthppm_watchdogtmr_vf0=1 to give the pll more time
* to settle before lock is asserted.
*/
BIT
(
0
),
BIT
(
0
)
},
{
MEMBUS_CALCLKSLICE0_DUTY_LOCOVR_REG
,
/*
* BIT[6:0]
* Centering duty cycle for clkslice0 output
*/
0x4a
,
GENMASK
(
6
,
0
)
},
{
MEMBUS_CALCLKSLICE1_DUTY_LOCOVR_REG
,
/*
* BIT[6:0]
* Centering duty cycle for clkslice1 output
*/
0x4a
,
GENMASK
(
6
,
0
)
},
};
static
int
membus_wait_for_req
(
struct
socfpga_clk_platdata
*
plat
,
u32
pll
,
int
timeout
)
...
...
@@ -126,6 +184,20 @@ static int membus_read_pll(struct socfpga_clk_platdata *plat, u32 pll,
return
0
;
}
static
void
membus_pll_configs
(
struct
socfpga_clk_platdata
*
plat
,
u32
pll
)
{
int
i
;
u32
rdata
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
membus_pll
);
i
++
)
{
membus_read_pll
(
plat
,
pll
,
membus_pll
[
i
].
reg
,
&
rdata
,
MEMBUS_TIMEOUT
);
membus_write_pll
(
plat
,
pll
,
membus_pll
[
i
].
reg
,
((
rdata
&
~
membus_pll
[
i
].
mask
)
|
membus_pll
[
i
].
val
),
MEMBUS_TIMEOUT
);
}
}
static
u32
calc_vocalib_pll
(
u32
pllm
,
u32
pllglob
)
{
u32
mdiv
,
refclkdiv
,
arefclkdiv
,
drefclkdiv
,
mscnt
,
hscnt
,
vcocalib
;
...
...
@@ -166,11 +238,20 @@ static void clk_basic_init(struct udevice *dev,
{
struct
socfpga_clk_platdata
*
plat
=
dev_get_platdata
(
dev
);
u32
vcocalib
;
u32
rdata
;
if
(
!
cfg
)
return
;
#ifdef CONFIG_SPL_BUILD
/* Always force clock manager into boot mode before any configuration */
clk_write_ctrl
(
plat
,
CM_REG_READL
(
plat
,
CLKMGR_CTRL
)
|
CLKMGR_CTRL_BOOTMODE
);
#else
/* Skip clock configuration in SSBL if it's not in boot mode */
if
(
!
(
CM_REG_READL
(
plat
,
CLKMGR_CTRL
)
&
CLKMGR_CTRL_BOOTMODE
))
return
;
#endif
/* Put both PLLs in bypass */
clk_write_bypass_mainpll
(
plat
,
CLKMGR_BYPASS_MAINPLL_ALL
);
clk_write_bypass_perpll
(
plat
,
CLKMGR_BYPASS_PERPLL_ALL
);
...
...
@@ -216,19 +297,10 @@ static void clk_basic_init(struct udevice *dev,
CM_REG_SETBITS
(
plat
,
CLKMGR_PERPLL_PLLGLOB
,
CLKMGR_PLLGLOB_PD_MASK
|
CLKMGR_PLLGLOB_RST_MASK
);
/* Membus programming to set mainpll and perripll to
* source synchronous mode
*/
membus_read_pll
(
plat
,
MEMBUS_MAINPLL
,
MEMBUS_ADDR_CLKSLICE
,
&
rdata
,
MEMBUS_TIMEOUT
);
membus_write_pll
(
plat
,
MEMBUS_MAINPLL
,
MEMBUS_ADDR_CLKSLICE
,
(
rdata
|
MEMBUS_CLKSLICE_SYNC_MODE_EN
),
MEMBUS_TIMEOUT
);
membus_read_pll
(
plat
,
MEMBUS_PERPLL
,
MEMBUS_ADDR_CLKSLICE
,
&
rdata
,
MEMBUS_TIMEOUT
);
membus_write_pll
(
plat
,
MEMBUS_PERPLL
,
MEMBUS_ADDR_CLKSLICE
,
(
rdata
|
MEMBUS_CLKSLICE_SYNC_MODE_EN
),
MEMBUS_TIMEOUT
);
/* Membus programming for mainpll */
membus_pll_configs
(
plat
,
MEMBUS_MAINPLL
);
/* Membus programming for peripll */
membus_pll_configs
(
plat
,
MEMBUS_PERPLL
);
cm_wait_for_lock
(
CLKMGR_STAT_ALLPLL_LOCKED_MASK
);
...
...
@@ -533,12 +605,20 @@ static ulong socfpga_clk_get_rate(struct clk *clk)
case
AGILEX_EMAC2_CLK
:
return
clk_get_emac_clk_hz
(
plat
,
clk
->
id
);
case
AGILEX_USB_CLK
:
case
AGILEX_NAND_X_CLK
:
return
clk_get_l4_mp_clk_hz
(
plat
);
case
AGILEX_NAND_CLK
:
return
clk_get_l4_mp_clk_hz
(
plat
)
/
4
;
default:
return
-
ENXIO
;
}
}
static
int
socfpga_clk_enable
(
struct
clk
*
clk
)
{
return
0
;
}
static
int
socfpga_clk_probe
(
struct
udevice
*
dev
)
{
const
struct
cm_config
*
cm_default_cfg
=
cm_get_default_config
();
...
...
@@ -562,6 +642,7 @@ static int socfpga_clk_ofdata_to_platdata(struct udevice *dev)
}
static
struct
clk_ops
socfpga_clk_ops
=
{
.
enable
=
socfpga_clk_enable
,
.
get_rate
=
socfpga_clk_get_rate
,
};
...
...
drivers/fpga/Kconfig
浏览文件 @
9885313b
...
...
@@ -31,16 +31,16 @@ config FPGA_CYCLON2
Enable FPGA driver for loading bitstream in BIT and BIN format
on Altera Cyclone II device.
config FPGA_
STRATIX10
bool "Enable
Altera FPGA driver for Stratix 10
"
depends on TARGET_SOCFPGA_STRATIX10
config FPGA_
INTEL_SDM_MAILBOX
bool "Enable
Intel FPGA Full Reconfiguration SDM Mailbox driver
"
depends on TARGET_SOCFPGA_STRATIX10
|| TARGET_SOCFPGA_AGILEX
select FPGA_ALTERA
help
Say Y here to enable the
Altera Stratix 10 FPGA specific
driver
Say Y here to enable the
Intel FPGA Full Reconfig SDM Mailbox
driver
This provides common functionality for
Altera Stratix 10
devices.
Enable FPGA driver for writing
bitstream into Altera Stratix10
device.
This provides common functionality for
Intel FPGA
devices.
Enable FPGA driver for writing
full bitstream into Intel FPGA
device
s through SDM (Secure Device Manager) Mailbox
.
config FPGA_XILINX
bool "Enable Xilinx FPGA drivers"
...
...
drivers/fpga/Makefile
浏览文件 @
9885313b
...
...
@@ -16,9 +16,9 @@ ifdef CONFIG_FPGA_ALTERA
obj-y
+=
altera.o
obj-$(CONFIG_FPGA_ACEX1K)
+=
ACEX1K.o
obj-$(CONFIG_FPGA_CYCLON2)
+=
cyclon2.o
obj-$(CONFIG_FPGA_INTEL_SDM_MAILBOX)
+=
intel_sdm_mb.o
obj-$(CONFIG_FPGA_STRATIX_II)
+=
stratixII.o
obj-$(CONFIG_FPGA_STRATIX_V)
+=
stratixv.o
obj-$(CONFIG_FPGA_STRATIX10)
+=
stratix10.o
obj-$(CONFIG_FPGA_SOCFPGA)
+=
socfpga.o
obj-$(CONFIG_TARGET_SOCFPGA_GEN5)
+=
socfpga_gen5.o
obj-$(CONFIG_TARGET_SOCFPGA_ARRIA10)
+=
socfpga_arria10.o
...
...
drivers/fpga/altera.c
浏览文件 @
9885313b
...
...
@@ -40,12 +40,13 @@ static const struct altera_fpga {
#if defined(CONFIG_FPGA_STRATIX_V)
{
Altera_StratixV
,
"StratixV"
,
stratixv_load
,
NULL
,
NULL
},
#endif
#if defined(CONFIG_FPGA_STRATIX10)
{
Intel_FPGA_Stratix10
,
"Stratix10"
,
stratix10_load
,
NULL
,
NULL
},
#endif
#if defined(CONFIG_FPGA_SOCFPGA)
{
Altera_SoCFPGA
,
"SoC FPGA"
,
socfpga_load
,
NULL
,
NULL
},
#endif
#if defined(CONFIG_FPGA_INTEL_SDM_MAILBOX)
{
Intel_FPGA_SDM_Mailbox
,
"Intel SDM Mailbox"
,
intel_sdm_mb_load
,
NULL
,
NULL
},
#endif
};
static
int
altera_validate
(
Altera_desc
*
desc
,
const
char
*
fn
)
...
...
drivers/fpga/
stratix10
.c
→
drivers/fpga/
intel_sdm_mb
.c
浏览文件 @
9885313b
...
...
@@ -6,6 +6,7 @@
#include <common.h>
#include <altera.h>
#include <log.h>
#include <watchdog.h>
#include <asm/arch/mailbox_s10.h>
#include <linux/delay.h>
...
...
@@ -113,6 +114,7 @@ static int reconfig_status_polling_resp(void)
puts
(
"."
);
udelay
(
RECONFIG_STATUS_INTERVAL_DELAY_US
);
WATCHDOG_RESET
();
}
return
-
ETIMEDOUT
;
...
...
@@ -238,6 +240,7 @@ static int send_reconfig_data(const void *rbf_data, size_t rbf_size,
if
(
resp_err
&&
!
xfer_count
)
return
resp_err
;
}
WATCHDOG_RESET
();
}
return
0
;
...
...
@@ -247,7 +250,7 @@ static int send_reconfig_data(const void *rbf_data, size_t rbf_size,
* This is the interface used by FPGA driver.
* Return 0 for success, non-zero for error.
*/
int
stratix10
_load
(
Altera_desc
*
desc
,
const
void
*
rbf_data
,
size_t
rbf_size
)
int
intel_sdm_mb
_load
(
Altera_desc
*
desc
,
const
void
*
rbf_data
,
size_t
rbf_size
)
{
int
ret
;
u32
resp_len
=
2
;
...
...
drivers/sysreset/Kconfig
浏览文件 @
9885313b
...
...
@@ -79,12 +79,12 @@ config SYSRESET_SOCFPGA
This enables the system reset driver support for Intel SOCFPGA SoCs
(Cyclone 5, Arria 5 and Arria 10).
config SYSRESET_SOCFPGA_S
10
bool "Enable support for Intel SOCFPGA S
tratix 10
"
depends on ARCH_SOCFPGA &&
TARGET_SOCFPGA_STRATIX10
config SYSRESET_SOCFPGA_S
OC64
bool "Enable support for Intel SOCFPGA S
oC64 family (Stratix10/Agilex)
"
depends on ARCH_SOCFPGA &&
(TARGET_SOCFPGA_STRATIX10 || TARGET_SOCFPGA_AGILEX)
help
This enables the system reset driver support for Intel SOCFPGA
S
tratix
SoCs.
S
oC64
SoCs.
config SYSRESET_TI_SCI
bool "TI System Control Interface (TI SCI) system reset driver"
...
...
drivers/sysreset/Makefile
浏览文件 @
9885313b
...
...
@@ -13,7 +13,7 @@ obj-$(CONFIG_SYSRESET_MICROBLAZE) += sysreset_microblaze.o
obj-$(CONFIG_SYSRESET_OCTEON)
+=
sysreset_octeon.o
obj-$(CONFIG_SYSRESET_PSCI)
+=
sysreset_psci.o
obj-$(CONFIG_SYSRESET_SOCFPGA)
+=
sysreset_socfpga.o
obj-$(CONFIG_SYSRESET_SOCFPGA_S
10)
+=
sysreset_socfpga_s10
.o
obj-$(CONFIG_SYSRESET_SOCFPGA_S
OC64)
+=
sysreset_socfpga_soc64
.o
obj-$(CONFIG_SYSRESET_TI_SCI)
+=
sysreset-ti-sci.o
obj-$(CONFIG_SYSRESET_SYSCON)
+=
sysreset_syscon.o
obj-$(CONFIG_SYSRESET_WATCHDOG)
+=
sysreset_watchdog.o
...
...
drivers/sysreset/sysreset_socfpga_s
10
.c
→
drivers/sysreset/sysreset_socfpga_s
oc64
.c
浏览文件 @
9885313b
文件已移动
include/altera.h
浏览文件 @
9885313b
...
...
@@ -56,10 +56,10 @@ enum altera_family {
Altera_StratixII
,
/* StratixV Family */
Altera_StratixV
,
/* Stratix10 Family */
Intel_FPGA_Stratix10
,
/* SoCFPGA Family */
Altera_SoCFPGA
,
/* Intel FPGA Family with SDM (Secure Device Manager) Mailbox */
Intel_FPGA_SDM_Mailbox
,
/* Add new models here */
...
...
@@ -120,8 +120,9 @@ int socfpga_load(Altera_desc *desc, const void *rbf_data, size_t rbf_size);
int
stratixv_load
(
Altera_desc
*
desc
,
const
void
*
rbf_data
,
size_t
rbf_size
);
#endif
#ifdef CONFIG_FPGA_STRATIX10
int
stratix10_load
(
Altera_desc
*
desc
,
const
void
*
rbf_data
,
size_t
rbf_size
);
#ifdef CONFIG_FPGA_INTEL_SDM_MAILBOX
int
intel_sdm_mb_load
(
Altera_desc
*
desc
,
const
void
*
rbf_data
,
size_t
rbf_size
);
#endif
#endif
/* _ALTERA_H_ */
tools/socfpgaimage.c
浏览文件 @
9885313b
...
...
@@ -62,6 +62,9 @@
#define HEADER_OFFSET 0x40
#define VALIDATION_WORD 0x31305341
/* Minimum and default entry point offset */
#define ENTRY_POINT_OFFSET 0x14
static
uint8_t
buffer_v0
[
0x10000
];
static
uint8_t
buffer_v1
[
0x40000
];
...
...
@@ -120,8 +123,10 @@ static uint16_t sfp_hdr_checksum(uint8_t *buf, unsigned char ver)
}
static
void
sfp_build_header
(
uint8_t
*
buf
,
uint8_t
ver
,
uint8_t
flags
,
uint32_t
length_bytes
)
uint32_t
length_bytes
,
struct
image_tool_params
*
params
)
{
uint32_t
entry_offset
=
params
->
eflag
?
params
->
ep
:
ENTRY_POINT_OFFSET
;
struct
socfpga_header_v0
header_v0
=
{
.
validation
=
cpu_to_le32
(
VALIDATION_WORD
),
.
version
=
0
,
...
...
@@ -136,7 +141,8 @@ static void sfp_build_header(uint8_t *buf, uint8_t ver, uint8_t flags,
.
flags
=
flags
,
.
header_u8
=
cpu_to_le16
(
sizeof
(
header_v1
)),
.
length_u8
=
cpu_to_le32
(
length_bytes
),
.
entry_offset
=
cpu_to_le32
(
0x14
),
/* Trampoline offset */
/* Trampoline offset */
.
entry_offset
=
cpu_to_le32
(
entry_offset
),
.
zero
=
0
,
};
...
...
@@ -198,7 +204,8 @@ static int sfp_verify_header(const uint8_t *buf, uint8_t *ver)
/* Sign the buffer and return the signed buffer size */
static
int
sfp_sign_buffer
(
uint8_t
*
buf
,
uint8_t
ver
,
uint8_t
flags
,
int
len
,
int
pad_64k
)
int
len
,
int
pad_64k
,
struct
image_tool_params
*
params
)
{
uint32_t
calc_crc
;
...
...
@@ -206,7 +213,7 @@ static int sfp_sign_buffer(uint8_t *buf, uint8_t ver, uint8_t flags,
len
=
ALIGN
(
len
,
4
);
/* Build header, adding 4 bytes to length to hold the CRC32. */
sfp_build_header
(
buf
+
HEADER_OFFSET
,
ver
,
flags
,
len
+
4
);
sfp_build_header
(
buf
+
HEADER_OFFSET
,
ver
,
flags
,
len
+
4
,
params
);
/* Calculate and apply the CRC */
calc_crc
=
~
pbl_crc32
(
0
,
(
char
*
)
buf
,
len
);
...
...
@@ -275,7 +282,7 @@ static void socfpgaimage_print_header(const void *ptr)
printf
(
"Not a sane SOCFPGA preloader
\n
"
);
}
static
int
socfpgaimage_check_params
(
struct
image_tool_params
*
params
)
static
int
socfpgaimage_check_params
_v0
(
struct
image_tool_params
*
params
)
{
/* Not sure if we should be accepting fflags */
return
(
params
->
dflag
&&
(
params
->
fflag
||
params
->
lflag
))
||
...
...
@@ -283,6 +290,26 @@ static int socfpgaimage_check_params(struct image_tool_params *params)
(
params
->
lflag
&&
(
params
->
dflag
||
params
->
fflag
));
}
static
int
socfpgaimage_check_params_v1
(
struct
image_tool_params
*
params
)
{
/*
* If the entry point is specified, ensure it is >= ENTRY_POINT_OFFSET
* and it is 4 bytes aligned.
*/
if
(
params
->
eflag
&&
(
params
->
ep
<
ENTRY_POINT_OFFSET
||
params
->
ep
%
4
!=
0
))
{
fprintf
(
stderr
,
"Error: Entry point must be greater than 0x%x.
\n
"
,
ENTRY_POINT_OFFSET
);
return
-
1
;
}
/* Not sure if we should be accepting fflags */
return
(
params
->
dflag
&&
(
params
->
fflag
||
params
->
lflag
))
||
(
params
->
fflag
&&
(
params
->
dflag
||
params
->
lflag
))
||
(
params
->
lflag
&&
(
params
->
dflag
||
params
->
fflag
));
}
static
int
socfpgaimage_check_image_types_v0
(
uint8_t
type
)
{
if
(
type
==
IH_TYPE_SOCFPGAIMAGE
)
...
...
@@ -343,7 +370,8 @@ static int socfpgaimage_vrec_header_v1(struct image_tool_params *params,
return
sfp_vrec_header
(
params
,
tparams
,
1
);
}
static
void
sfp_set_header
(
void
*
ptr
,
unsigned
char
ver
)
static
void
sfp_set_header
(
void
*
ptr
,
unsigned
char
ver
,
struct
image_tool_params
*
params
)
{
uint8_t
*
buf
=
(
uint8_t
*
)
ptr
;
...
...
@@ -357,19 +385,19 @@ static void sfp_set_header(void *ptr, unsigned char ver)
memmove
(
buf
,
buf
+
sfp_fake_header_size
(
data_size
,
ver
),
data_size
);
memset
(
buf
+
data_size
,
0
,
sfp_fake_header_size
(
data_size
,
ver
));
sfp_sign_buffer
(
buf
,
ver
,
0
,
data_size
,
0
);
sfp_sign_buffer
(
buf
,
ver
,
0
,
data_size
,
0
,
params
);
}
static
void
socfpgaimage_set_header_v0
(
void
*
ptr
,
struct
stat
*
sbuf
,
int
ifd
,
struct
image_tool_params
*
params
)
{
sfp_set_header
(
ptr
,
0
);
sfp_set_header
(
ptr
,
0
,
params
);
}
static
void
socfpgaimage_set_header_v1
(
void
*
ptr
,
struct
stat
*
sbuf
,
int
ifd
,
struct
image_tool_params
*
params
)
{
sfp_set_header
(
ptr
,
1
);
sfp_set_header
(
ptr
,
1
,
params
);
}
U_BOOT_IMAGE_TYPE
(
...
...
@@ -377,7 +405,7 @@ U_BOOT_IMAGE_TYPE(
"Altera SoCFPGA Cyclone V / Arria V image support"
,
0
,
/* This will be modified by vrec_header() */
(
void
*
)
buffer_v0
,
socfpgaimage_check_params
,
socfpgaimage_check_params
_v0
,
socfpgaimage_verify_header
,
socfpgaimage_print_header
,
socfpgaimage_set_header_v0
,
...
...
@@ -392,7 +420,7 @@ U_BOOT_IMAGE_TYPE(
"Altera SoCFPGA Arria10 image support"
,
0
,
/* This will be modified by vrec_header() */
(
void
*
)
buffer_v1
,
socfpgaimage_check_params
,
socfpgaimage_check_params
_v1
,
socfpgaimage_verify_header
,
socfpgaimage_print_header
,
socfpgaimage_set_header_v1
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录