Commit 784667d7f9452780966dd0b400ef516f14f14c26
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
Merge tag 'xilinx-for-v2017.07' of git://www.denx.de/git/u-boot-microblaze
Xilinx changes for v2017.07 ZynqMP: - config cleanup - SD LS mode support - psu_init* cleanup - unmap OCM - Support for SMC Zynq: - add ddrc to Kconfig - add topic-miamilite board support
Showing 23 changed files Side-by-side Diff
- README
- arch/arm/cpu/armv8/zynqmp/cpu.c
- arch/arm/cpu/armv8/zynqmp/spl.c
- arch/arm/dts/Makefile
- arch/arm/dts/zynq-topic-miamilite.dts
- arch/arm/include/asm/arch-zynqmp/sys_proto.h
- arch/arm/mach-zynq/Kconfig
- arch/arm/mach-zynq/ddrc.c
- arch/microblaze/dts/Makefile
- board/topic/zynq/zynq-topic-miamilite/ps7_init_gpl.c
- board/topic/zynq/zynq-topic-miamilite/ps7_regs.txt
- board/xilinx/zynqmp/sleep.h
- board/xilinx/zynqmp/xil_io.h
- board/xilinx/zynqmp/zynqmp.c
- configs/topic_miamilite_defconfig
- configs/topic_miamiplus_defconfig
- drivers/block/sata_ceva.c
- drivers/fpga/zynqmppl.c
- drivers/mtd/spi/Kconfig
- include/configs/topic_miami.h
- include/configs/topic_miamiplus.h
- include/configs/xilinx_zynqmp.h
- scripts/config_whitelist.txt
README
... | ... | @@ -2534,12 +2534,6 @@ |
2534 | 2534 | Define this option to include a destructive SPI flash |
2535 | 2535 | test ('sf test'). |
2536 | 2536 | |
2537 | - CONFIG_SF_DUAL_FLASH Dual flash memories | |
2538 | - | |
2539 | - Define this option to use dual flash support where two flash | |
2540 | - memories can be connected with a given cs line. | |
2541 | - Currently Xilinx Zynq qspi supports these type of connections. | |
2542 | - | |
2543 | 2537 | - SystemACE Support: |
2544 | 2538 | CONFIG_SYSTEMACE |
2545 | 2539 |
arch/arm/cpu/armv8/zynqmp/cpu.c
... | ... | @@ -38,12 +38,6 @@ |
38 | 38 | PTE_BLOCK_NON_SHARE | |
39 | 39 | PTE_BLOCK_PXN | PTE_BLOCK_UXN |
40 | 40 | }, { |
41 | - .virt = 0xffe00000UL, | |
42 | - .phys = 0xffe00000UL, | |
43 | - .size = 0x00200000UL, | |
44 | - .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | | |
45 | - PTE_BLOCK_INNER_SHARE | |
46 | - }, { | |
47 | 41 | .virt = 0x400000000UL, |
48 | 42 | .phys = 0x400000000UL, |
49 | 43 | .size = 0x200000000UL, |
... | ... | @@ -104,4 +98,112 @@ |
104 | 98 | |
105 | 99 | return ZYNQMP_CSU_VERSION_SILICON; |
106 | 100 | } |
101 | + | |
102 | +#define ZYNQMP_MMIO_READ 0xC2000014 | |
103 | +#define ZYNQMP_MMIO_WRITE 0xC2000013 | |
104 | + | |
105 | +#ifndef CONFIG_SPL_BUILD | |
106 | +int invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2, u32 arg3, | |
107 | + u32 *ret_payload) | |
108 | +{ | |
109 | + /* | |
110 | + * Added SIP service call Function Identifier | |
111 | + * Make sure to stay in x0 register | |
112 | + */ | |
113 | + struct pt_regs regs; | |
114 | + | |
115 | + regs.regs[0] = pm_api_id; | |
116 | + regs.regs[1] = ((u64)arg1 << 32) | arg0; | |
117 | + regs.regs[2] = ((u64)arg3 << 32) | arg2; | |
118 | + | |
119 | + smc_call(®s); | |
120 | + | |
121 | + if (ret_payload != NULL) { | |
122 | + ret_payload[0] = (u32)regs.regs[0]; | |
123 | + ret_payload[1] = upper_32_bits(regs.regs[0]); | |
124 | + ret_payload[2] = (u32)regs.regs[1]; | |
125 | + ret_payload[3] = upper_32_bits(regs.regs[1]); | |
126 | + ret_payload[4] = (u32)regs.regs[2]; | |
127 | + } | |
128 | + | |
129 | + return regs.regs[0]; | |
130 | +} | |
131 | + | |
132 | +#define ZYNQMP_SIP_SVC_GET_API_VERSION 0xC2000001 | |
133 | + | |
134 | +#define ZYNQMP_PM_VERSION_MAJOR 0 | |
135 | +#define ZYNQMP_PM_VERSION_MINOR 3 | |
136 | +#define ZYNQMP_PM_VERSION_MAJOR_SHIFT 16 | |
137 | +#define ZYNQMP_PM_VERSION_MINOR_MASK 0xFFFF | |
138 | + | |
139 | +#define ZYNQMP_PM_VERSION \ | |
140 | + ((ZYNQMP_PM_VERSION_MAJOR << ZYNQMP_PM_VERSION_MAJOR_SHIFT) | \ | |
141 | + ZYNQMP_PM_VERSION_MINOR) | |
142 | + | |
143 | +#if defined(CONFIG_CLK_ZYNQMP) | |
144 | +void zynqmp_pmufw_version(void) | |
145 | +{ | |
146 | + int ret; | |
147 | + u32 ret_payload[PAYLOAD_ARG_CNT]; | |
148 | + u32 pm_api_version; | |
149 | + | |
150 | + ret = invoke_smc(ZYNQMP_SIP_SVC_GET_API_VERSION, 0, 0, 0, 0, | |
151 | + ret_payload); | |
152 | + pm_api_version = ret_payload[1]; | |
153 | + | |
154 | + if (ret) | |
155 | + panic("PMUFW is not found - Please load it!\n"); | |
156 | + | |
157 | + printf("PMUFW:\tv%d.%d\n", | |
158 | + pm_api_version >> ZYNQMP_PM_VERSION_MAJOR_SHIFT, | |
159 | + pm_api_version & ZYNQMP_PM_VERSION_MINOR_MASK); | |
160 | + | |
161 | + if (pm_api_version != ZYNQMP_PM_VERSION) | |
162 | + panic("PMUFW version error. Expected: v%d.%d\n", | |
163 | + ZYNQMP_PM_VERSION_MAJOR, ZYNQMP_PM_VERSION_MINOR); | |
164 | +} | |
165 | +#endif | |
166 | + | |
167 | +int zynqmp_mmio_write(const u32 address, | |
168 | + const u32 mask, | |
169 | + const u32 value) | |
170 | +{ | |
171 | + return invoke_smc(ZYNQMP_MMIO_WRITE, address, mask, value, 0, NULL); | |
172 | +} | |
173 | + | |
174 | +int zynqmp_mmio_read(const u32 address, u32 *value) | |
175 | +{ | |
176 | + u32 ret_payload[PAYLOAD_ARG_CNT]; | |
177 | + u32 ret; | |
178 | + | |
179 | + if (!value) | |
180 | + return -EINVAL; | |
181 | + | |
182 | + ret = invoke_smc(ZYNQMP_MMIO_READ, address, 0, 0, 0, ret_payload); | |
183 | + *value = ret_payload[1]; | |
184 | + | |
185 | + return ret; | |
186 | +} | |
187 | +#else | |
188 | +int zynqmp_mmio_write(const u32 address, | |
189 | + const u32 mask, | |
190 | + const u32 value) | |
191 | +{ | |
192 | + u32 data; | |
193 | + u32 value_local = value; | |
194 | + | |
195 | + zynqmp_mmio_read(address, &data); | |
196 | + data &= ~mask; | |
197 | + value_local &= mask; | |
198 | + value_local |= data; | |
199 | + writel(value_local, (ulong)address); | |
200 | + return 0; | |
201 | +} | |
202 | + | |
203 | +int zynqmp_mmio_read(const u32 address, u32 *value) | |
204 | +{ | |
205 | + *value = readl((ulong)address); | |
206 | + return 0; | |
207 | +} | |
208 | +#endif |
arch/arm/cpu/armv8/zynqmp/spl.c
... | ... | @@ -83,9 +83,15 @@ |
83 | 83 | case JTAG_MODE: |
84 | 84 | return BOOT_DEVICE_RAM; |
85 | 85 | #ifdef CONFIG_SPL_MMC_SUPPORT |
86 | - case EMMC_MODE: | |
87 | - case SD_MODE: | |
88 | 86 | case SD_MODE1: |
87 | + case SD1_LSHFT_MODE: /* not working on silicon v1 */ | |
88 | +/* if both controllers enabled, then these two are the second controller */ | |
89 | +#if defined(CONFIG_ZYNQ_SDHCI0) && defined(CONFIG_ZYNQ_SDHCI1) | |
90 | + return BOOT_DEVICE_MMC2; | |
91 | +/* else, fall through, the one SDHCI controller that is enabled is number 1 */ | |
92 | +#endif | |
93 | + case SD_MODE: | |
94 | + case EMMC_MODE: | |
89 | 95 | return BOOT_DEVICE_MMC1; |
90 | 96 | #endif |
91 | 97 | #ifdef CONFIG_SPL_DFU_SUPPORT |
92 | 98 | |
... | ... | @@ -106,10 +112,11 @@ |
106 | 112 | |
107 | 113 | u32 spl_boot_mode(const u32 boot_device) |
108 | 114 | { |
109 | - switch (spl_boot_device()) { | |
115 | + switch (boot_device) { | |
110 | 116 | case BOOT_DEVICE_RAM: |
111 | 117 | return 0; |
112 | 118 | case BOOT_DEVICE_MMC1: |
119 | + case BOOT_DEVICE_MMC2: | |
113 | 120 | return MMCSD_MODE_FS; |
114 | 121 | default: |
115 | 122 | puts("spl: error: unsupported device\n"); |
arch/arm/dts/Makefile
arch/arm/dts/zynq-topic-miamilite.dts
1 | +/* | |
2 | + * Topic Miami Lite board DTS | |
3 | + * | |
4 | + * Copyright (C) 2017 Topic Embedded Products | |
5 | + * | |
6 | + * SPDX-License-Identifier: GPL-2.0+ | |
7 | + */ | |
8 | +#include "zynq-topic-miami.dts" | |
9 | + | |
10 | +/ { | |
11 | + model = "Topic Miami Lite Zynq Board"; | |
12 | + compatible = "topic,miamilite", "xlnx,zynq-7000"; | |
13 | +}; | |
14 | + | |
15 | +&qspi { | |
16 | + is-dual = <1>; | |
17 | +}; |
arch/arm/include/asm/arch-zynqmp/sys_proto.h
... | ... | @@ -8,6 +8,8 @@ |
8 | 8 | #ifndef _ASM_ARCH_SYS_PROTO_H |
9 | 9 | #define _ASM_ARCH_SYS_PROTO_H |
10 | 10 | |
11 | +#define PAYLOAD_ARG_CNT 5 | |
12 | + | |
11 | 13 | int zynq_slcr_get_mio_pin_status(const char *periph); |
12 | 14 | |
13 | 15 | unsigned int zynqmp_get_silicon_version(void); |
... | ... | @@ -15,6 +17,12 @@ |
15 | 17 | void psu_init(void); |
16 | 18 | |
17 | 19 | void handoff_setup(void); |
20 | + | |
21 | +void zynqmp_pmufw_version(void); | |
22 | +int zynqmp_mmio_write(const u32 address, const u32 mask, const u32 value); | |
23 | +int zynqmp_mmio_read(const u32 address, u32 *value); | |
24 | +int invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2, u32 arg3, | |
25 | + u32 *ret_payload); | |
18 | 26 | |
19 | 27 | #endif /* _ASM_ARCH_SYS_PROTO_H */ |
arch/arm/mach-zynq/Kconfig
... | ... | @@ -24,6 +24,14 @@ |
24 | 24 | config SPL_SPI_SUPPORT |
25 | 25 | default y if ZYNQ_QSPI |
26 | 26 | |
27 | +config ZYNQ_DDRC_INIT | |
28 | + bool "Zynq DDRC initialization" | |
29 | + default y | |
30 | + help | |
31 | + This option used to perform DDR specific initialization | |
32 | + if required. There might be cases like ddr less where we | |
33 | + want to skip ddr init and this option is useful for it. | |
34 | + | |
27 | 35 | config SYS_BOARD |
28 | 36 | default "zynq" |
29 | 37 |
arch/arm/mach-zynq/ddrc.c
... | ... | @@ -12,6 +12,9 @@ |
12 | 12 | |
13 | 13 | DECLARE_GLOBAL_DATA_PTR; |
14 | 14 | |
15 | +#ifndef CONFIG_ZYNQ_DDRC_INIT | |
16 | +void zynq_ddrc_init(void) {} | |
17 | +#else | |
15 | 18 | /* Control regsiter bitfield definitions */ |
16 | 19 | #define ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK 0xC |
17 | 20 | #define ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT 2 |
... | ... | @@ -46,4 +49,5 @@ |
46 | 49 | puts("ECC disabled "); |
47 | 50 | } |
48 | 51 | } |
52 | +#endif |
arch/microblaze/dts/Makefile
board/topic/zynq/zynq-topic-miamilite/ps7_init_gpl.c
1 | +/* | |
2 | + * (c) Copyright 2010-2014 Xilinx, Inc. All rights reserved. | |
3 | + * (c) Copyright 2016 Topic Embedded Products. | |
4 | + * | |
5 | + * SPDX-License-Identifier: GPL-2.0+ | |
6 | + */ | |
7 | + | |
8 | +#include "../ps7_init_gpl.h" | |
9 | + | |
10 | +static unsigned long ps7_pll_init_data_3_0[] = { | |
11 | + EMIT_MASKWRITE(0xF8000008, 0x0000FFFFU, 0x0000DF0DU), | |
12 | + EMIT_MASKWRITE(0xF8000110, 0x003FFFF0U, 0x000FA220U), | |
13 | + EMIT_MASKWRITE(0xF8000100, 0x0007F000U, 0x00028000U), | |
14 | + EMIT_MASKWRITE(0xF8000100, 0x00000010U, 0x00000010U), | |
15 | + EMIT_MASKWRITE(0xF8000100, 0x00000001U, 0x00000001U), | |
16 | + EMIT_MASKWRITE(0xF8000100, 0x00000001U, 0x00000000U), | |
17 | + EMIT_MASKPOLL(0xF800010C, 0x00000001U), | |
18 | + EMIT_MASKWRITE(0xF8000100, 0x00000010U, 0x00000000U), | |
19 | + EMIT_MASKWRITE(0xF8000120, 0x1F003F30U, 0x1F000200U), | |
20 | + EMIT_MASKWRITE(0xF8000114, 0x003FFFF0U, 0x0012C220U), | |
21 | + EMIT_MASKWRITE(0xF8000104, 0x0007F000U, 0x00020000U), | |
22 | + EMIT_MASKWRITE(0xF8000104, 0x00000010U, 0x00000010U), | |
23 | + EMIT_MASKWRITE(0xF8000104, 0x00000001U, 0x00000001U), | |
24 | + EMIT_MASKWRITE(0xF8000104, 0x00000001U, 0x00000000U), | |
25 | + EMIT_MASKPOLL(0xF800010C, 0x00000002U), | |
26 | + EMIT_MASKWRITE(0xF8000104, 0x00000010U, 0x00000000U), | |
27 | + EMIT_MASKWRITE(0xF8000124, 0xFFF00003U, 0x0C200003U), | |
28 | + EMIT_MASKWRITE(0xF8000118, 0x003FFFF0U, 0x00113220U), | |
29 | + EMIT_MASKWRITE(0xF8000108, 0x0007F000U, 0x00024000U), | |
30 | + EMIT_MASKWRITE(0xF8000108, 0x00000010U, 0x00000010U), | |
31 | + EMIT_MASKWRITE(0xF8000108, 0x00000001U, 0x00000001U), | |
32 | + EMIT_MASKWRITE(0xF8000108, 0x00000001U, 0x00000000U), | |
33 | + EMIT_MASKPOLL(0xF800010C, 0x00000004U), | |
34 | + EMIT_MASKWRITE(0xF8000108, 0x00000010U, 0x00000000U), | |
35 | + EMIT_MASKWRITE(0xF8000004, 0x0000FFFFU, 0x0000767BU), | |
36 | + EMIT_EXIT(), | |
37 | +}; | |
38 | + | |
39 | +static unsigned long ps7_clock_init_data_3_0[] = { | |
40 | + EMIT_MASKWRITE(0xF8000008, 0x0000FFFFU, 0x0000DF0DU), | |
41 | + EMIT_MASKWRITE(0xF8000128, 0x03F03F01U, 0x00302301U), | |
42 | + EMIT_MASKWRITE(0xF8000138, 0x00000011U, 0x00000011U), | |
43 | + EMIT_MASKWRITE(0xF800013C, 0x00000011U, 0x00000011U), | |
44 | + EMIT_MASKWRITE(0xF8000140, 0x03F03F71U, 0x00100141U), | |
45 | + EMIT_MASKWRITE(0xF8000144, 0x03F03F71U, 0x00100141U), | |
46 | + EMIT_MASKWRITE(0xF8000148, 0x00003F31U, 0x00000C01U), | |
47 | + EMIT_MASKWRITE(0xF800014C, 0x00003F31U, 0x00000601U), | |
48 | + EMIT_MASKWRITE(0xF8000150, 0x00003F33U, 0x00001803U), | |
49 | + EMIT_MASKWRITE(0xF8000154, 0x00003F33U, 0x00000C03U), | |
50 | + EMIT_MASKWRITE(0xF8000158, 0x00003F33U, 0x00000601U), | |
51 | + EMIT_MASKWRITE(0xF8000168, 0x00003F31U, 0x00000601U), | |
52 | + EMIT_MASKWRITE(0xF8000170, 0x03F03F30U, 0x00100C00U), | |
53 | + EMIT_MASKWRITE(0xF8000180, 0x03F03F30U, 0x00100C00U), | |
54 | + EMIT_MASKWRITE(0xF8000190, 0x03F03F30U, 0x00100600U), | |
55 | + EMIT_MASKWRITE(0xF80001A0, 0x03F03F30U, 0x00101800U), | |
56 | + EMIT_MASKWRITE(0xF80001C4, 0x00000001U, 0x00000001U), | |
57 | + EMIT_MASKWRITE(0xF800012C, 0x01FFCCCDU, 0x01FC4C4DU), | |
58 | + EMIT_MASKWRITE(0xF8000004, 0x0000FFFFU, 0x0000767BU), | |
59 | + EMIT_EXIT(), | |
60 | +}; | |
61 | + | |
62 | +static unsigned long ps7_ddr_init_data_3_0[] = { | |
63 | + EMIT_MASKWRITE(0xF8006000, 0x0001FFFFU, 0x00000080U), | |
64 | + EMIT_MASKWRITE(0xF8006004, 0x0007FFFFU, 0x00001081U), | |
65 | + EMIT_MASKWRITE(0xF8006008, 0x03FFFFFFU, 0x03C0780FU), | |
66 | + EMIT_MASKWRITE(0xF800600C, 0x03FFFFFFU, 0x02001001U), | |
67 | + EMIT_MASKWRITE(0xF8006010, 0x03FFFFFFU, 0x00014001U), | |
68 | + EMIT_MASKWRITE(0xF8006014, 0x001FFFFFU, 0x0004281AU), | |
69 | + EMIT_MASKWRITE(0xF8006018, 0xF7FFFFFFU, 0x44E458D2U), | |
70 | + EMIT_MASKWRITE(0xF800601C, 0xFFFFFFFFU, 0x720238E5U), | |
71 | + EMIT_MASKWRITE(0xF8006020, 0x7FDFFFFCU, 0x270872D0U), | |
72 | + EMIT_MASKWRITE(0xF8006024, 0x0FFFFFC3U, 0x00000000U), | |
73 | + EMIT_MASKWRITE(0xF8006028, 0x00003FFFU, 0x00002007U), | |
74 | + EMIT_MASKWRITE(0xF800602C, 0xFFFFFFFFU, 0x00000008U), | |
75 | + EMIT_MASKWRITE(0xF8006030, 0xFFFFFFFFU, 0x00040930U), | |
76 | + EMIT_MASKWRITE(0xF8006034, 0x13FF3FFFU, 0x000116D4U), | |
77 | + EMIT_MASKWRITE(0xF8006038, 0x00000003U, 0x00000000U), | |
78 | + EMIT_MASKWRITE(0xF800603C, 0x000FFFFFU, 0x00000777U), | |
79 | + EMIT_MASKWRITE(0xF8006040, 0xFFFFFFFFU, 0xFFF00000U), | |
80 | + EMIT_MASKWRITE(0xF8006044, 0x0FFFFFFFU, 0x0F666666U), | |
81 | + EMIT_MASKWRITE(0xF8006048, 0x0003F03FU, 0x0003C008U), | |
82 | + EMIT_MASKWRITE(0xF8006050, 0xFF0F8FFFU, 0x77010800U), | |
83 | + EMIT_MASKWRITE(0xF8006058, 0x00010000U, 0x00000000U), | |
84 | + EMIT_MASKWRITE(0xF800605C, 0x0000FFFFU, 0x00005003U), | |
85 | + EMIT_MASKWRITE(0xF8006060, 0x000017FFU, 0x0000003EU), | |
86 | + EMIT_MASKWRITE(0xF8006064, 0x00021FE0U, 0x00020000U), | |
87 | + EMIT_MASKWRITE(0xF8006068, 0x03FFFFFFU, 0x00284141U), | |
88 | + EMIT_MASKWRITE(0xF800606C, 0x0000FFFFU, 0x00001610U), | |
89 | + EMIT_MASKWRITE(0xF8006078, 0x03FFFFFFU, 0x00466111U), | |
90 | + EMIT_MASKWRITE(0xF800607C, 0x000FFFFFU, 0x00032222U), | |
91 | + EMIT_MASKWRITE(0xF80060A4, 0xFFFFFFFFU, 0x10200802U), | |
92 | + EMIT_MASKWRITE(0xF80060A8, 0x0FFFFFFFU, 0x0690CB73U), | |
93 | + EMIT_MASKWRITE(0xF80060AC, 0x000001FFU, 0x000001FEU), | |
94 | + EMIT_MASKWRITE(0xF80060B0, 0x1FFFFFFFU, 0x1CFFFFFFU), | |
95 | + EMIT_MASKWRITE(0xF80060B4, 0x00000200U, 0x00000200U), | |
96 | + EMIT_MASKWRITE(0xF80060B8, 0x01FFFFFFU, 0x00200066U), | |
97 | + EMIT_MASKWRITE(0xF80060C4, 0x00000003U, 0x00000003U), | |
98 | + EMIT_MASKWRITE(0xF80060C4, 0x00000003U, 0x00000000U), | |
99 | + EMIT_MASKWRITE(0xF80060C8, 0x000000FFU, 0x00000000U), | |
100 | + EMIT_MASKWRITE(0xF80060DC, 0x00000001U, 0x00000000U), | |
101 | + EMIT_MASKWRITE(0xF80060F0, 0x0000FFFFU, 0x00000000U), | |
102 | + EMIT_MASKWRITE(0xF80060F4, 0x0000000FU, 0x00000008U), | |
103 | + EMIT_MASKWRITE(0xF8006114, 0x000000FFU, 0x00000000U), | |
104 | + EMIT_MASKWRITE(0xF8006118, 0x7FFFFFCFU, 0x40000001U), | |
105 | + EMIT_MASKWRITE(0xF800611C, 0x7FFFFFCFU, 0x40000001U), | |
106 | + EMIT_MASKWRITE(0xF8006120, 0x7FFFFFCFU, 0x40000001U), | |
107 | + EMIT_MASKWRITE(0xF8006124, 0x7FFFFFCFU, 0x40000001U), | |
108 | + EMIT_MASKWRITE(0xF800612C, 0x000FFFFFU, 0x0003482CU), | |
109 | + EMIT_MASKWRITE(0xF8006130, 0x000FFFFFU, 0x00033032U), | |
110 | + EMIT_MASKWRITE(0xF8006134, 0x000FFFFFU, 0x0002E81FU), | |
111 | + EMIT_MASKWRITE(0xF8006138, 0x000FFFFFU, 0x0002F81AU), | |
112 | + EMIT_MASKWRITE(0xF8006140, 0x000FFFFFU, 0x00000035U), | |
113 | + EMIT_MASKWRITE(0xF8006144, 0x000FFFFFU, 0x00000035U), | |
114 | + EMIT_MASKWRITE(0xF8006148, 0x000FFFFFU, 0x00000035U), | |
115 | + EMIT_MASKWRITE(0xF800614C, 0x000FFFFFU, 0x00000035U), | |
116 | + EMIT_MASKWRITE(0xF8006154, 0x000FFFFFU, 0x000000ACU), | |
117 | + EMIT_MASKWRITE(0xF8006158, 0x000FFFFFU, 0x000000B2U), | |
118 | + EMIT_MASKWRITE(0xF800615C, 0x000FFFFFU, 0x0000009FU), | |
119 | + EMIT_MASKWRITE(0xF8006160, 0x000FFFFFU, 0x0000009AU), | |
120 | + EMIT_MASKWRITE(0xF8006168, 0x001FFFFFU, 0x00000127U), | |
121 | + EMIT_MASKWRITE(0xF800616C, 0x001FFFFFU, 0x00000121U), | |
122 | + EMIT_MASKWRITE(0xF8006170, 0x001FFFFFU, 0x0000010FU), | |
123 | + EMIT_MASKWRITE(0xF8006174, 0x001FFFFFU, 0x00000113U), | |
124 | + EMIT_MASKWRITE(0xF800617C, 0x000FFFFFU, 0x000000ECU), | |
125 | + EMIT_MASKWRITE(0xF8006180, 0x000FFFFFU, 0x000000F2U), | |
126 | + EMIT_MASKWRITE(0xF8006184, 0x000FFFFFU, 0x000000DFU), | |
127 | + EMIT_MASKWRITE(0xF8006188, 0x000FFFFFU, 0x000000DAU), | |
128 | + EMIT_MASKWRITE(0xF8006190, 0xFFFFFFFFU, 0x1002E080U), | |
129 | + EMIT_MASKWRITE(0xF8006194, 0x000FFFFFU, 0x0001FC82U), | |
130 | + EMIT_MASKWRITE(0xF8006204, 0xFFFFFFFFU, 0x00000000U), | |
131 | + EMIT_MASKWRITE(0xF8006208, 0x000703FFU, 0x000003FFU), | |
132 | + EMIT_MASKWRITE(0xF800620C, 0x000703FFU, 0x000003FFU), | |
133 | + EMIT_MASKWRITE(0xF8006210, 0x000703FFU, 0x000003FFU), | |
134 | + EMIT_MASKWRITE(0xF8006214, 0x000703FFU, 0x000003FFU), | |
135 | + EMIT_MASKWRITE(0xF8006218, 0x000F03FFU, 0x000003FFU), | |
136 | + EMIT_MASKWRITE(0xF800621C, 0x000F03FFU, 0x000003FFU), | |
137 | + EMIT_MASKWRITE(0xF8006220, 0x000F03FFU, 0x000003FFU), | |
138 | + EMIT_MASKWRITE(0xF8006224, 0x000F03FFU, 0x000003FFU), | |
139 | + EMIT_MASKWRITE(0xF80062A8, 0x00000FF5U, 0x00000000U), | |
140 | + EMIT_MASKWRITE(0xF80062AC, 0xFFFFFFFFU, 0x00000000U), | |
141 | + EMIT_MASKWRITE(0xF80062B0, 0x003FFFFFU, 0x00005125U), | |
142 | + EMIT_MASKWRITE(0xF80062B4, 0x0003FFFFU, 0x000012A8U), | |
143 | + EMIT_MASKPOLL(0xF8000B74, 0x00002000U), | |
144 | + EMIT_MASKWRITE(0xF8006000, 0x0001FFFFU, 0x00000081U), | |
145 | + EMIT_MASKPOLL(0xF8006054, 0x00000007U), | |
146 | + EMIT_EXIT(), | |
147 | +}; | |
148 | + | |
149 | +static unsigned long ps7_mio_init_data_3_0[] = { | |
150 | + EMIT_MASKWRITE(0xF8000008, 0x0000FFFFU, 0x0000DF0DU), | |
151 | + EMIT_MASKWRITE(0xF8000B40, 0x00000FFFU, 0x00000600U), | |
152 | + EMIT_MASKWRITE(0xF8000B44, 0x00000FFFU, 0x00000600U), | |
153 | + EMIT_MASKWRITE(0xF8000B48, 0x00000FFFU, 0x00000672U), | |
154 | + EMIT_MASKWRITE(0xF8000B4C, 0x00000FFFU, 0x00000672U), | |
155 | + EMIT_MASKWRITE(0xF8000B50, 0x00000FFFU, 0x00000674U), | |
156 | + EMIT_MASKWRITE(0xF8000B54, 0x00000FFFU, 0x00000674U), | |
157 | + EMIT_MASKWRITE(0xF8000B58, 0x00000FFFU, 0x00000600U), | |
158 | + EMIT_MASKWRITE(0xF8000B5C, 0xFFFFFFFFU, 0x0018C61CU), | |
159 | + EMIT_MASKWRITE(0xF8000B60, 0xFFFFFFFFU, 0x00F9861CU), | |
160 | + EMIT_MASKWRITE(0xF8000B64, 0xFFFFFFFFU, 0x00F9861CU), | |
161 | + EMIT_MASKWRITE(0xF8000B68, 0xFFFFFFFFU, 0x00F9861CU), | |
162 | + EMIT_MASKWRITE(0xF8000B6C, 0x00007FFFU, 0x00000E60U), | |
163 | + EMIT_MASKWRITE(0xF8000B70, 0x00000001U, 0x00000001U), | |
164 | + EMIT_MASKWRITE(0xF8000B70, 0x00000021U, 0x00000020U), | |
165 | + EMIT_MASKWRITE(0xF8000B70, 0x07FEFFFFU, 0x00000823U), | |
166 | + EMIT_MASKWRITE(0xF8000004, 0x0000FFFFU, 0x0000767BU), | |
167 | + EMIT_EXIT(), | |
168 | +}; | |
169 | + | |
170 | +static unsigned long ps7_peripherals_init_data_3_0[] = { | |
171 | + EMIT_MASKWRITE(0xF8000008, 0x0000FFFFU, 0x0000DF0DU), | |
172 | + EMIT_MASKWRITE(0xF8000B48, 0x00000180U, 0x00000180U), | |
173 | + EMIT_MASKWRITE(0xF8000B4C, 0x00000180U, 0x00000180U), | |
174 | + EMIT_MASKWRITE(0xF8000B50, 0x00000180U, 0x00000180U), | |
175 | + EMIT_MASKWRITE(0xF8000B54, 0x00000180U, 0x00000180U), | |
176 | + EMIT_MASKWRITE(0xF8000004, 0x0000FFFFU, 0x0000767BU), | |
177 | + EMIT_MASKWRITE(0xE0001034, 0x000000FFU, 0x00000006U), | |
178 | + EMIT_MASKWRITE(0xE0001018, 0x0000FFFFU, 0x0000007CU), | |
179 | + EMIT_MASKWRITE(0xE0001000, 0x000001FFU, 0x00000017U), | |
180 | + EMIT_MASKWRITE(0xE0001004, 0x000003FFU, 0x00000020U), | |
181 | + EMIT_MASKWRITE(0xE0000034, 0x000000FFU, 0x00000006U), | |
182 | + EMIT_MASKWRITE(0xE0000018, 0x0000FFFFU, 0x0000007CU), | |
183 | + EMIT_MASKWRITE(0xE0000000, 0x000001FFU, 0x00000017U), | |
184 | + EMIT_MASKWRITE(0xE0000004, 0x000003FFU, 0x00000020U), | |
185 | + EMIT_MASKWRITE(0xE000D000, 0x000800FFU, 0x000800C1U), | |
186 | + EMIT_MASKWRITE(0xF8007000, 0x20000000U, 0x00000000U), | |
187 | + EMIT_MASKDELAY(0xF8F00200, 1), | |
188 | + EMIT_MASKDELAY(0xF8F00200, 1), | |
189 | + EMIT_MASKDELAY(0xF8F00200, 1), | |
190 | + EMIT_EXIT(), | |
191 | +}; | |
192 | + | |
193 | +static unsigned long ps7_post_config_3_0[] = { | |
194 | + EMIT_MASKWRITE(0xF8000008, 0x0000FFFFU, 0x0000DF0DU), | |
195 | + EMIT_MASKWRITE(0xF8000900, 0x0000000FU, 0x0000000FU), | |
196 | + EMIT_MASKWRITE(0xF8000240, 0xFFFFFFFFU, 0x00000000U), | |
197 | + EMIT_MASKWRITE(0xF8000004, 0x0000FFFFU, 0x0000767BU), | |
198 | + EMIT_EXIT(), | |
199 | +}; | |
200 | + | |
201 | +int ps7_init(void) | |
202 | +{ | |
203 | + int ret; | |
204 | + | |
205 | + ret = ps7_config(ps7_mio_init_data_3_0); | |
206 | + if (ret != PS7_INIT_SUCCESS) | |
207 | + return ret; | |
208 | + ret = ps7_config(ps7_pll_init_data_3_0); | |
209 | + if (ret != PS7_INIT_SUCCESS) | |
210 | + return ret; | |
211 | + ret = ps7_config(ps7_clock_init_data_3_0); | |
212 | + if (ret != PS7_INIT_SUCCESS) | |
213 | + return ret; | |
214 | + ret = ps7_config(ps7_ddr_init_data_3_0); | |
215 | + if (ret != PS7_INIT_SUCCESS) | |
216 | + return ret; | |
217 | + ret = ps7_config(ps7_peripherals_init_data_3_0); | |
218 | + if (ret != PS7_INIT_SUCCESS) | |
219 | + return ret; | |
220 | + | |
221 | + return PS7_INIT_SUCCESS; | |
222 | +} | |
223 | + | |
224 | +int ps7_post_config(void) | |
225 | +{ | |
226 | + return ps7_config(ps7_post_config_3_0); | |
227 | +} |
board/topic/zynq/zynq-topic-miamilite/ps7_regs.txt
1 | +0xF8000120 0x1F000200 // ARM_CLK_CTRL - divisor = 2 433 MHz (?) | |
2 | +0xf8000700 0x202 | |
3 | +0xf8000704 0x202 | |
4 | +0xf8000708 0x202 | |
5 | +0xf800070c 0x202 | |
6 | +0xf8000710 0x202 | |
7 | +0xf8000714 0x202 | |
8 | +0xf8000718 0x202 | |
9 | +0xf800071c 0x200 | |
10 | +0xf8000720 0x202 | |
11 | +0xf8000724 0x202 | |
12 | +0xf8000728 0x202 | |
13 | +0xf800072c 0x202 | |
14 | +0xf8000730 0x202 | |
15 | +0xf8000734 0x202 | |
16 | +0xf8000738 0x12e1 | |
17 | +0xf800073c 0x12e0 | |
18 | +0xf8000740 0x1200 | |
19 | +0xf8000744 0x1200 | |
20 | +0xf8000748 0x1200 | |
21 | +0xf800074c 0x1200 | |
22 | +0xf8000750 0x1200 | |
23 | +0xf8000754 0x1200 | |
24 | +0xf8000758 0x1200 | |
25 | +0xf800075c 0x1200 | |
26 | +0xf8000760 0x1200 | |
27 | +0xf8000764 0x200 | |
28 | +0xf8000768 0x1200 | |
29 | +0xf800076c 0x200 | |
30 | +0xf8000770 0x304 | |
31 | +0xf8000774 0x305 | |
32 | +0xf8000778 0x304 | |
33 | +0xf800077c 0x305 | |
34 | +0xf8000780 0x304 | |
35 | +0xf8000784 0x304 | |
36 | +0xf8000788 0x304 | |
37 | +0xf800078c 0x304 | |
38 | +0xf8000790 0x305 | |
39 | +0xf8000794 0x304 | |
40 | +0xf8000798 0x304 | |
41 | +0xf800079c 0x304 | |
42 | +0xf80007a0 0x380 | |
43 | +0xf80007a4 0x380 | |
44 | +0xf80007a8 0x380 | |
45 | +0xf80007ac 0x380 | |
46 | +0xf80007b0 0x380 | |
47 | +0xf80007b4 0x380 | |
48 | +0xf80007b8 0x1200 | |
49 | +0xf80007bc 0x1200 | |
50 | +0xf80007c0 0x1240 | |
51 | +0xf80007c4 0x1240 | |
52 | +0xf80007c8 0x1240 | |
53 | +0xf80007cc 0x1240 | |
54 | +0xf80007d0 0x1200 | |
55 | +0xf80007d4 0x1200 | |
56 | +0xf8000830 0x380037 | |
57 | +0xf8000834 0x3a0039 | |
58 | +0xF800014C 0x00000621 // LQSPI_CLK_CTRL - ARMPLL/6 (200 MHz) | |
59 | +0xE000D000 0x800238C1 // QSPI config - divide-by-2 | |
60 | +0xE000D038 0x00000020 // QSPI loopback - internal, 0 delay | |
61 | +0xE000D0A0 0xE2FF06EB // LQSPI_CFG - Quad read, dual flash |
board/xilinx/zynqmp/sleep.h
1 | +/* Intentionally empty file for psu_init* */ |
board/xilinx/zynqmp/xil_io.h
board/xilinx/zynqmp/zynqmp.c
... | ... | @@ -113,6 +113,14 @@ |
113 | 113 | } |
114 | 114 | #endif |
115 | 115 | |
116 | +int board_early_init_f(void) | |
117 | +{ | |
118 | +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_CLK_ZYNQMP) | |
119 | + zynqmp_pmufw_version(); | |
120 | +#endif | |
121 | + return 0; | |
122 | +} | |
123 | + | |
116 | 124 | #define ZYNQMP_VERSION_SIZE 9 |
117 | 125 | |
118 | 126 | int board_init(void) |
configs/topic_miamilite_defconfig
1 | +CONFIG_ARM=y | |
2 | +CONFIG_SYS_VENDOR="topic" | |
3 | +CONFIG_SYS_CONFIG_NAME="topic_miami" | |
4 | +CONFIG_ARCH_ZYNQ=y | |
5 | +CONFIG_SYS_TEXT_BASE=0x4000000 | |
6 | +CONFIG_BOOT_INIT_FILE="board/topic/zynq/zynq-topic-miamilite/ps7_regs.txt" | |
7 | +CONFIG_DEFAULT_DEVICE_TREE="zynq-topic-miamilite" | |
8 | +CONFIG_BOOTDELAY=0 | |
9 | +# CONFIG_DISPLAY_CPUINFO is not set | |
10 | +CONFIG_SPL=y | |
11 | +CONFIG_HUSH_PARSER=y | |
12 | +CONFIG_SYS_PROMPT="zynq-uboot> " | |
13 | +# CONFIG_CMD_IMLS is not set | |
14 | +# CONFIG_CMD_FLASH is not set | |
15 | +CONFIG_CMD_MMC=y | |
16 | +CONFIG_CMD_SF=y | |
17 | +CONFIG_CMD_I2C=y | |
18 | +CONFIG_CMD_USB=y | |
19 | +CONFIG_CMD_DFU=y | |
20 | +CONFIG_CMD_GPIO=y | |
21 | +# CONFIG_CMD_SETEXPR is not set | |
22 | +# CONFIG_CMD_NET is not set | |
23 | +# CONFIG_CMD_NFS is not set | |
24 | +CONFIG_CMD_CACHE=y | |
25 | +CONFIG_CMD_EXT4=y | |
26 | +CONFIG_CMD_FAT=y | |
27 | +CONFIG_CMD_FS_GENERIC=y | |
28 | +CONFIG_OF_EMBED=y | |
29 | +CONFIG_SPL_DM_SEQ_ALIAS=y | |
30 | +CONFIG_DFU_RAM=y | |
31 | +CONFIG_MMC_SDHCI=y | |
32 | +CONFIG_MMC_SDHCI_ZYNQ=y | |
33 | +CONFIG_SF_DUAL_FLASH=y | |
34 | +CONFIG_SPI_FLASH=y | |
35 | +CONFIG_SPI_FLASH_BAR=y | |
36 | +CONFIG_SPI_FLASH_STMICRO=y | |
37 | +# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set | |
38 | +CONFIG_DEBUG_UART=y | |
39 | +CONFIG_DEBUG_UART_ZYNQ=y | |
40 | +CONFIG_DEBUG_UART_BASE=0xe0000000 | |
41 | +CONFIG_DEBUG_UART_CLOCK=100000000 | |
42 | +CONFIG_ZYNQ_QSPI=y | |
43 | +CONFIG_USB=y | |
44 | +CONFIG_USB_EHCI_HCD=y | |
45 | +CONFIG_USB_ULPI_VIEWPORT=y | |
46 | +CONFIG_USB_ULPI=y | |
47 | +CONFIG_USB_STORAGE=y | |
48 | +CONFIG_USB_GADGET=y | |
49 | +CONFIG_CI_UDC=y | |
50 | +CONFIG_USB_GADGET_DOWNLOAD=y | |
51 | +CONFIG_G_DNL_MANUFACTURER="Xilinx" | |
52 | +CONFIG_G_DNL_VENDOR_NUM=0x03fd | |
53 | +CONFIG_G_DNL_PRODUCT_NUM=0x0300 |
configs/topic_miamiplus_defconfig
1 | 1 | CONFIG_ARM=y |
2 | 2 | CONFIG_SYS_VENDOR="topic" |
3 | -CONFIG_SYS_CONFIG_NAME="topic_miamiplus" | |
3 | +CONFIG_SYS_CONFIG_NAME="topic_miami" | |
4 | 4 | CONFIG_ARCH_ZYNQ=y |
5 | 5 | CONFIG_SYS_TEXT_BASE=0x4000000 |
6 | 6 | CONFIG_BOOT_INIT_FILE="board/topic/zynq/zynq-topic-miamiplus/ps7_regs.txt" |
... | ... | @@ -29,6 +29,7 @@ |
29 | 29 | CONFIG_DFU_RAM=y |
30 | 30 | CONFIG_MMC_SDHCI=y |
31 | 31 | CONFIG_MMC_SDHCI_ZYNQ=y |
32 | +CONFIG_SF_DUAL_FLASH=y | |
32 | 33 | CONFIG_SPI_FLASH=y |
33 | 34 | CONFIG_SPI_FLASH_BAR=y |
34 | 35 | CONFIG_SPI_FLASH_STMICRO=y |
drivers/block/sata_ceva.c
drivers/fpga/zynqmppl.c
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | #include <common.h> |
11 | 11 | #include <zynqmppl.h> |
12 | 12 | #include <linux/sizes.h> |
13 | +#include <asm/arch/sys_proto.h> | |
13 | 14 | |
14 | 15 | #define DUMMY_WORD 0xffffffff |
15 | 16 | |
16 | 17 | |
17 | 18 | |
... | ... | @@ -191,25 +192,14 @@ |
191 | 192 | return 0; |
192 | 193 | } |
193 | 194 | |
194 | -static int invoke_smc(ulong id, ulong reg0, ulong reg1, ulong reg2) | |
195 | -{ | |
196 | - struct pt_regs regs; | |
197 | - regs.regs[0] = id; | |
198 | - regs.regs[1] = reg0; | |
199 | - regs.regs[2] = reg1; | |
200 | - regs.regs[3] = reg2; | |
201 | - | |
202 | - smc_call(®s); | |
203 | - | |
204 | - return regs.regs[0]; | |
205 | -} | |
206 | - | |
207 | 195 | static int zynqmp_load(xilinx_desc *desc, const void *buf, size_t bsize, |
208 | 196 | bitstream_type bstype) |
209 | 197 | { |
210 | 198 | u32 swap; |
211 | - ulong bin_buf, flags; | |
199 | + ulong bin_buf; | |
212 | 200 | int ret; |
201 | + u32 buf_lo, buf_hi; | |
202 | + u32 ret_payload[PAYLOAD_ARG_CNT]; | |
213 | 203 | |
214 | 204 | if (zynqmp_validate_bitstream(desc, buf, bsize, bsize, &swap)) |
215 | 205 | return FPGA_FAIL; |
... | ... | @@ -224,9 +214,10 @@ |
224 | 214 | else |
225 | 215 | bsize = bsize / 4; |
226 | 216 | |
227 | - flags = (u32)bsize | ((u64)bstype << 32); | |
228 | - | |
229 | - ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, bin_buf, flags, 0); | |
217 | + buf_lo = (u32)bin_buf; | |
218 | + buf_hi = upper_32_bits(bin_buf); | |
219 | + ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, buf_lo, buf_hi, bsize, | |
220 | + bstype, ret_payload); | |
230 | 221 | if (ret) |
231 | 222 | debug("PL FPGA LOAD fail\n"); |
232 | 223 |
drivers/mtd/spi/Kconfig
... | ... | @@ -42,6 +42,13 @@ |
42 | 42 | Bank/Extended address registers are used to access the flash |
43 | 43 | which has size > 16MiB in 3-byte addressing. |
44 | 44 | |
45 | +config SF_DUAL_FLASH | |
46 | + bool "SPI DUAL flash memory support" | |
47 | + depends on SPI_FLASH | |
48 | + help | |
49 | + Enable this option to support two flash memories connected to a single | |
50 | + controller. Currently Xilinx Zynq qspi supports this. | |
51 | + | |
45 | 52 | if SPI_FLASH |
46 | 53 | |
47 | 54 | config SPI_FLASH_ATMEL |
include/configs/topic_miami.h
... | ... | @@ -56,7 +56,6 @@ |
56 | 56 | #undef CONFIG_SF_DEFAULT_SPEED |
57 | 57 | #define CONFIG_SF_DEFAULT_SPEED 108000000 |
58 | 58 | #define CONFIG_SF_DEFAULT_MODE SPI_MODE_0 |
59 | -#undef CONFIG_SF_DUAL_FLASH | |
60 | 59 | #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED |
61 | 60 | #undef CONFIG_SPI_FLASH_WINBOND |
62 | 61 | #undef CONFIG_SPI_FLASH_ISSI |
include/configs/topic_miamiplus.h
include/configs/xilinx_zynqmp.h
... | ... | @@ -29,9 +29,6 @@ |
29 | 29 | #define CONFIG_SYS_MEMTEST_START 0 |
30 | 30 | #define CONFIG_SYS_MEMTEST_END 1000 |
31 | 31 | |
32 | -/* Have release address at the end of 256MB for now */ | |
33 | -#define CPU_RELEASE_ADDR 0xFFFFFF0 | |
34 | - | |
35 | 32 | #define CONFIG_SYS_INIT_SP_ADDR CONFIG_SYS_TEXT_BASE |
36 | 33 | |
37 | 34 | /* Generic Timer Definitions - setup in EL3. Setup by ATF for other cases */ |
38 | 35 | |
... | ... | @@ -292,12 +289,14 @@ |
292 | 289 | # define CONFIG_ENV_MAX_ENTRIES 10 |
293 | 290 | |
294 | 291 | # define CONFIG_SYS_SPL_MALLOC_START 0x20000000 |
295 | -# define CONFIG_SYS_SPL_MALLOC_SIZE 0x10000000 | |
292 | +# define CONFIG_SYS_SPL_MALLOC_SIZE 0x100000 | |
296 | 293 | |
297 | 294 | #ifdef CONFIG_SPL_SYS_MALLOC_SIMPLE |
298 | 295 | # error "Disable CONFIG_SPL_SYS_MALLOC_SIMPLE. Full malloc needs to be used" |
299 | 296 | #endif |
300 | 297 | #endif |
298 | + | |
299 | +#define CONFIG_BOARD_EARLY_INIT_F | |
301 | 300 | |
302 | 301 | #endif /* __XILINX_ZYNQMP_H */ |