Prepare v2023.10
[platform/kernel/u-boot.git] / arch / arm / mach-sunxi / Kconfig
1 if ARCH_SUNXI
2
3 config IDENT_STRING
4         default " Allwinner Technology"
5
6 config DRAM_SUN4I
7         bool
8         help
9           Select this dram controller driver for Sun4/5/7i platforms,
10           like A10/A13/A20.
11
12 config DRAM_SUN6I
13         bool
14         help
15           Select this dram controller driver for Sun6i platforms,
16           like A31/A31s.
17
18 config DRAM_SUN8I_A23
19         bool
20         help
21           Select this dram controller driver for Sun8i platforms,
22           for A23 SOC.
23
24 config DRAM_SUN8I_A33
25         bool
26         help
27           Select this dram controller driver for Sun8i platforms,
28           for A33 SOC.
29
30 config DRAM_SUN8I_A83T
31         bool
32         help
33           Select this dram controller driver for Sun8i platforms,
34           for A83T SOC.
35
36 config DRAM_SUN9I
37         bool
38         help
39           Select this dram controller driver for Sun9i platforms,
40           like A80.
41
42 config DRAM_SUN50I_H6
43         bool
44         help
45           Select this dram controller driver for some sun50i platforms,
46           like H6.
47
48 config DRAM_SUN50I_H616
49         bool
50         help
51           Select this dram controller driver for some sun50i platforms,
52           like H616.
53
54 if DRAM_SUN50I_H616
55 config DRAM_SUN50I_H616_DX_ODT
56         hex "H616 DRAM DX ODT parameter"
57         help
58           DX ODT value from vendor DRAM settings.
59
60 config DRAM_SUN50I_H616_DX_DRI
61         hex "H616 DRAM DX DRI parameter"
62         help
63           DX DRI value from vendor DRAM settings.
64
65 config DRAM_SUN50I_H616_CA_DRI
66         hex "H616 DRAM CA DRI parameter"
67         help
68           CA DRI value from vendor DRAM settings.
69
70 config DRAM_SUN50I_H616_ODT_EN
71         hex "H616 DRAM ODT EN parameter"
72         default 0x1
73         help
74           ODT EN value from vendor DRAM settings.
75
76 config DRAM_SUN50I_H616_TPR0
77         hex "H616 DRAM TPR0 parameter"
78         default 0x0
79         help
80           TPR0 value from vendor DRAM settings.
81
82 config DRAM_SUN50I_H616_TPR2
83         hex "H616 DRAM TPR2 parameter"
84         default 0x0
85         help
86           TPR2 value from vendor DRAM settings.
87
88 config DRAM_SUN50I_H616_TPR10
89         hex "H616 DRAM TPR10 parameter"
90         help
91           TPR10 value from vendor DRAM settings. It tells which features
92           should be configured, like write leveling, read calibration, etc.
93
94 config DRAM_SUN50I_H616_TPR11
95         hex "H616 DRAM TPR11 parameter"
96         default 0x0
97         help
98           TPR11 value from vendor DRAM settings.
99
100 config DRAM_SUN50I_H616_TPR12
101         hex "H616 DRAM TPR12 parameter"
102         default 0x0
103         help
104           TPR12 value from vendor DRAM settings.
105 endif
106
107 config SUN6I_PRCM
108         bool
109         help
110           Support for the PRCM (Power/Reset/Clock Management) unit available
111           in A31 SoC.
112
113 config AXP_PMIC_BUS
114         bool
115         select DM_PMIC if DM_I2C
116         select PMIC_AXP if DM_I2C
117         help
118           Select this PMIC bus access helpers for Sunxi platform PRCM or other
119           AXP family PMIC devices.
120
121 config SUNXI_SRAM_ADDRESS
122         hex
123         default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
124         default 0x20000 if SUN50I_GEN_H6
125         default 0x0
126         ---help---
127         Older Allwinner SoCs have their mask boot ROM mapped just below 4GB,
128         with the first SRAM region being located at address 0.
129         Some newer SoCs map the boot ROM at address 0 instead and move the
130         SRAM to a different address.
131
132 config SUNXI_RVBAR_ADDRESS
133         hex
134         depends on ARM64
135         default 0x09010040 if SUN50I_GEN_H6
136         default 0x017000a0
137         ---help---
138         The read-only RVBAR system register holds the address of the first
139         instruction to execute after a reset. Allwinner cores provide a
140         writable MMIO backing store for this register, to allow to set the
141         entry point when switching to AArch64. This store is on different
142         addresses, depending on the SoC.
143
144 config SUNXI_RVBAR_ALTERNATIVE
145         hex
146         depends on ARM64
147         default 0x08100040 if MACH_SUN50I_H616
148         default SUNXI_RVBAR_ADDRESS
149         ---help---
150         The H616 die exists in at least two variants, with one having the
151         RVBAR registers at a different address. If the SoC variant ID
152         (stored in SRAM_VER_REG[7:0]) is not 0, we need to use the
153         other address.
154         Set this alternative address to the same as the normal address
155         for all other SoCs, so the content of the SRAM_VER_REG becomes
156         irrelevant there, and we can use the same code.
157
158 config SUNXI_A64_TIMER_ERRATUM
159         bool
160
161 # Note only one of these may be selected at a time! But hidden choices are
162 # not supported by Kconfig
163 config SUNXI_GEN_SUN4I
164         bool
165         ---help---
166         Select this for sunxi SoCs which have resets and clocks set up
167         as the original A10 (mach-sun4i).
168
169 config SUNXI_GEN_SUN6I
170         bool
171         ---help---
172         Select this for sunxi SoCs which have sun6i like periphery, like
173         separate ahb reset control registers, custom pmic bus, new style
174         watchdog, etc.
175
176 config SUN50I_GEN_H6
177         bool
178         select FIT
179         select SPL_LOAD_FIT
180         select MMC_SUNXI_HAS_NEW_MODE
181         select SUPPORT_SPL
182         ---help---
183         Select this for sunxi SoCs which have H6 like peripherals, clocks
184         and memory map.
185
186 config SUNXI_DRAM_DW
187         bool
188         ---help---
189         Select this for sunxi SoCs which uses a DRAM controller like the
190         DesignWare controller used in H3, mainly SoCs after H3, which do
191         not have official open-source DRAM initialization code, but can
192         use modified H3 DRAM initialization code.
193
194 if SUNXI_DRAM_DW
195 config SUNXI_DRAM_DW_16BIT
196         bool
197         ---help---
198         Select this for sunxi SoCs with DesignWare DRAM controller and
199         have only 16-bit memory buswidth.
200
201 config SUNXI_DRAM_DW_32BIT
202         bool
203         ---help---
204         Select this for sunxi SoCs with DesignWare DRAM controller with
205         32-bit memory buswidth.
206 endif
207
208 config MACH_SUNXI_H3_H5
209         bool
210         select SUNXI_DE2
211         select SUNXI_DRAM_DW
212         select SUNXI_DRAM_DW_32BIT
213         select SUNXI_GEN_SUN6I
214         select SUPPORT_SPL
215
216 # TODO: try out A80's 8GiB DRAM space
217 config SUNXI_DRAM_MAX_SIZE
218         hex
219         default 0x100000000 if MACH_SUN50I_H616
220         default 0xC0000000 if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN50I_H6
221         default 0x80000000
222
223 choice
224         prompt "Sunxi SoC Variant"
225         optional
226
227 config MACH_SUNIV
228         bool "suniv (Allwinner F1C100s/F1C200s/F1C600/R6)"
229         select CPU_ARM926EJS
230         select SUNXI_GEN_SUN6I
231         select SUPPORT_SPL
232         select SKIP_LOWLEVEL_INIT_ONLY
233         select SPL_SKIP_LOWLEVEL_INIT_ONLY
234
235 config MACH_SUN4I
236         bool "sun4i (Allwinner A10)"
237         select CPU_V7A
238         select DRAM_SUN4I
239         select SUNXI_GEN_SUN4I
240         select SUPPORT_SPL
241         imply SPL_SYS_I2C_LEGACY
242         imply SYS_I2C_LEGACY
243
244 config MACH_SUN5I
245         bool "sun5i (Allwinner A13)"
246         select CPU_V7A
247         select DRAM_SUN4I
248         select SUNXI_GEN_SUN4I
249         select SUPPORT_SPL
250         imply SPL_SYS_I2C_LEGACY
251         imply SYS_I2C_LEGACY
252
253 config MACH_SUN6I
254         bool "sun6i (Allwinner A31)"
255         select CPU_V7A
256         select CPU_V7_HAS_NONSEC
257         select CPU_V7_HAS_VIRT
258         select ARCH_SUPPORT_PSCI
259         select SPL_ARMV7_SET_CORTEX_SMPEN
260         select DRAM_SUN6I
261         select SPL_I2C
262         select SUN6I_PRCM
263         select SUNXI_GEN_SUN6I
264         select SUPPORT_SPL
265         select SYS_I2C_SUN6I_P2WI
266         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
267
268 config MACH_SUN7I
269         bool "sun7i (Allwinner A20)"
270         select CPU_V7A
271         select CPU_V7_HAS_NONSEC
272         select CPU_V7_HAS_VIRT
273         select ARCH_SUPPORT_PSCI
274         select SPL_ARMV7_SET_CORTEX_SMPEN
275         select DRAM_SUN4I
276         select SUNXI_GEN_SUN4I
277         select SUPPORT_SPL
278         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
279         imply SPL_SYS_I2C_LEGACY
280         imply SYS_I2C_LEGACY
281
282 config MACH_SUN8I_A23
283         bool "sun8i (Allwinner A23)"
284         select CPU_V7A
285         select CPU_V7_HAS_NONSEC
286         select CPU_V7_HAS_VIRT
287         select ARCH_SUPPORT_PSCI
288         select DRAM_SUN8I_A23
289         select SPL_I2C
290         select SUNXI_GEN_SUN6I
291         select SUPPORT_SPL
292         select SYS_I2C_SUN8I_RSB
293         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
294
295 config MACH_SUN8I_A33
296         bool "sun8i (Allwinner A33)"
297         select CPU_V7A
298         select CPU_V7_HAS_NONSEC
299         select CPU_V7_HAS_VIRT
300         select ARCH_SUPPORT_PSCI
301         select DRAM_SUN8I_A33
302         select SPL_I2C
303         select SUNXI_GEN_SUN6I
304         select SUPPORT_SPL
305         select SYS_I2C_SUN8I_RSB
306         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
307
308 config MACH_SUN8I_A83T
309         bool "sun8i (Allwinner A83T)"
310         select CPU_V7A
311         select DRAM_SUN8I_A83T
312         select SPL_I2C
313         select SUNXI_GEN_SUN6I
314         select MMC_SUNXI_HAS_NEW_MODE
315         select MMC_SUNXI_HAS_MODE_SWITCH
316         select SUPPORT_SPL
317         select SYS_I2C_SUN8I_RSB
318
319 config MACH_SUN8I_H3
320         bool "sun8i (Allwinner H3)"
321         select CPU_V7A
322         select CPU_V7_HAS_NONSEC
323         select CPU_V7_HAS_VIRT
324         select ARCH_SUPPORT_PSCI
325         select MACH_SUNXI_H3_H5
326         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
327
328 config MACH_SUN8I_R40
329         bool "sun8i (Allwinner R40)"
330         select CPU_V7A
331         select CPU_V7_HAS_NONSEC
332         select CPU_V7_HAS_VIRT
333         select ARCH_SUPPORT_PSCI
334         select SUNXI_GEN_SUN6I
335         select MMC_SUNXI_HAS_NEW_MODE
336         select SUPPORT_SPL
337         select SUNXI_DRAM_DW
338         select SUNXI_DRAM_DW_32BIT
339         imply SPL_SYS_I2C_LEGACY
340
341 config MACH_SUN8I_V3S
342         bool "sun8i (Allwinner V3/V3s/S3/S3L)"
343         select CPU_V7A
344         select CPU_V7_HAS_NONSEC
345         select CPU_V7_HAS_VIRT
346         select ARCH_SUPPORT_PSCI
347         select SUNXI_GEN_SUN6I
348         select SUNXI_DRAM_DW
349         select SUNXI_DRAM_DW_16BIT
350         select SUPPORT_SPL
351         select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
352
353 config MACH_SUN9I
354         bool "sun9i (Allwinner A80)"
355         select CPU_V7A
356         select SPL_ARMV7_SET_CORTEX_SMPEN
357         select DRAM_SUN9I
358         select SPL_I2C
359         select SUN6I_PRCM
360         select SUNXI_GEN_SUN6I
361         select SUPPORT_SPL
362
363 config MACH_SUN50I
364         bool "sun50i (Allwinner A64)"
365         select ARM64
366         select SUN6I_PRCM
367         select SUNXI_DE2
368         select SUNXI_GEN_SUN6I
369         select MMC_SUNXI_HAS_NEW_MODE
370         select SUPPORT_SPL
371         select SUNXI_DRAM_DW
372         select SUNXI_DRAM_DW_32BIT
373         select FIT
374         select SPL_LOAD_FIT
375         select SUNXI_A64_TIMER_ERRATUM
376
377 config MACH_SUN50I_H5
378         bool "sun50i (Allwinner H5)"
379         select ARM64
380         select MACH_SUNXI_H3_H5
381         select MMC_SUNXI_HAS_NEW_MODE
382         select FIT
383         select SPL_LOAD_FIT
384
385 config MACH_SUN50I_H6
386         bool "sun50i (Allwinner H6)"
387         select ARM64
388         select DRAM_SUN50I_H6
389         select SUN50I_GEN_H6
390
391 config MACH_SUN50I_H616
392         bool "sun50i (Allwinner H616)"
393         select ARM64
394         select DRAM_SUN50I_H616
395         select SUN50I_GEN_H6
396
397 endchoice
398
399 # The sun8i SoCs share a lot, this helps to avoid a lot of "if A23 || A33"
400 config MACH_SUN8I
401         bool
402         select SPL_ARMV7_SET_CORTEX_SMPEN if !ARM64
403         select SUN6I_PRCM
404         default y if MACH_SUN8I_A23
405         default y if MACH_SUN8I_A33
406         default y if MACH_SUN8I_A83T
407         default y if MACH_SUNXI_H3_H5
408         default y if MACH_SUN8I_R40
409         default y if MACH_SUN8I_V3S
410
411 config RESERVE_ALLWINNER_BOOT0_HEADER
412         bool "reserve space for Allwinner boot0 header"
413         select ENABLE_ARM_SOC_BOOT0_HOOK
414         ---help---
415         Prepend a 1536 byte (empty) header to the U-Boot image file, to be
416         filled with magic values post build. The Allwinner provided boot0
417         blob relies on this information to load and execute U-Boot.
418         Only needed on 64-bit Allwinner boards so far when using boot0.
419
420 config ARM_BOOT_HOOK_RMR
421         bool
422         depends on ARM64
423         default y
424         select ENABLE_ARM_SOC_BOOT0_HOOK
425         ---help---
426         Insert some ARM32 code at the very beginning of the U-Boot binary
427         which uses an RMR register write to bring the core into AArch64 mode.
428         The very first instruction acts as a switch, since it's carefully
429         chosen to be a NOP in one mode and a branch in the other, so the
430         code would only be executed if not already in AArch64.
431         This allows both the SPL and the U-Boot proper to be entered in
432         either mode and switch to AArch64 if needed.
433
434 if SUNXI_DRAM_DW || DRAM_SUN50I_H6 || DRAM_SUN50I_H616
435 config SUNXI_DRAM_DDR3
436         bool
437
438 config SUNXI_DRAM_DDR2
439         bool
440
441 config SUNXI_DRAM_LPDDR3
442         bool
443
444 choice
445         prompt "DRAM Type and Timing"
446         default SUNXI_DRAM_DDR3_1333 if !MACH_SUN8I_V3S
447         default SUNXI_DRAM_DDR2_V3S if MACH_SUN8I_V3S
448
449 config SUNXI_DRAM_DDR3_1333
450         bool "DDR3 1333"
451         select SUNXI_DRAM_DDR3
452         ---help---
453         This option is the original only supported memory type, which suits
454         many H3/H5/A64 boards available now.
455
456 config SUNXI_DRAM_LPDDR3_STOCK
457         bool "LPDDR3 with Allwinner stock configuration"
458         select SUNXI_DRAM_LPDDR3
459         ---help---
460         This option is the LPDDR3 timing used by the stock boot0 by
461         Allwinner.
462
463 config SUNXI_DRAM_H6_LPDDR3
464         bool "LPDDR3 DRAM chips on the H6 DRAM controller"
465         select SUNXI_DRAM_LPDDR3
466         depends on DRAM_SUN50I_H6
467         ---help---
468         This option is the LPDDR3 timing used by the stock boot0 by
469         Allwinner.
470
471 config SUNXI_DRAM_H6_DDR3_1333
472         bool "DDR3-1333 boot0 timings on the H6 DRAM controller"
473         select SUNXI_DRAM_DDR3
474         depends on DRAM_SUN50I_H6
475         ---help---
476         This option is the DDR3 timing used by the boot0 on H6 TV boxes
477         which use a DDR3-1333 timing.
478
479 config SUNXI_DRAM_H616_LPDDR3
480         bool "LPDDR3 DRAM chips on the H616 DRAM controller"
481         select SUNXI_DRAM_LPDDR3
482         depends on DRAM_SUN50I_H616
483         help
484           This option is the LPDDR3 timing used by the stock boot0 by
485           Allwinner.
486
487 config SUNXI_DRAM_H616_DDR3_1333
488         bool "DDR3-1333 boot0 timings on the H616 DRAM controller"
489         select SUNXI_DRAM_DDR3
490         depends on DRAM_SUN50I_H616
491         help
492           This option is the DDR3 timing used by the boot0 on H616 TV boxes
493           which use a DDR3-1333 timing.
494
495 config SUNXI_DRAM_DDR2_V3S
496         bool "DDR2 found in V3s chip"
497         select SUNXI_DRAM_DDR2
498         depends on MACH_SUN8I_V3S
499         ---help---
500         This option is only for the DDR2 memory chip which is co-packaged in
501         Allwinner V3s SoC.
502
503 endchoice
504 endif
505
506 config DRAM_TYPE
507         int "sunxi dram type"
508         depends on MACH_SUN8I_A83T
509         default 3
510         ---help---
511         Set the dram type, 3: DDR3, 7: LPDDR3
512
513 config DRAM_CLK
514         int "sunxi dram clock speed"
515         default 792 if MACH_SUN9I
516         default 648 if MACH_SUN8I_R40
517         default 312 if MACH_SUN6I || MACH_SUN8I
518         default 360 if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || \
519                        MACH_SUN8I_V3S
520         default 672 if MACH_SUN50I
521         default 744 if MACH_SUN50I_H6
522         default 720 if MACH_SUN50I_H616
523         ---help---
524         Set the dram clock speed, valid range 240 - 480 (prior to sun9i),
525         must be a multiple of 24. For the sun9i (A80), the tested values
526         (for DDR3-1600) are 312 to 792.
527
528 if MACH_SUN5I || MACH_SUN7I
529 config DRAM_MBUS_CLK
530         int "sunxi mbus clock speed"
531         default 300
532         ---help---
533         Set the mbus clock speed. The maximum on sun5i hardware is 300MHz.
534
535 endif
536
537 config DRAM_ZQ
538         int "sunxi dram zq value"
539         depends on !MACH_SUN50I_H616
540         default 123 if MACH_SUN4I || MACH_SUN5I || MACH_SUN6I || \
541                        MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_A83T
542         default 127 if MACH_SUN7I
543         default 14779 if MACH_SUN8I_V3S
544         default 3881979 if MACH_SUNXI_H3_H5 || MACH_SUN8I_R40 || MACH_SUN50I_H6
545         default 4145117 if MACH_SUN9I
546         default 3881915 if MACH_SUN50I
547         ---help---
548         Set the dram zq value.
549
550 config DRAM_ODT_EN
551         bool "sunxi dram odt enable"
552         depends on !MACH_SUN50I_H616
553         default y if MACH_SUN8I_A23
554         default y if MACH_SUNXI_H3_H5
555         default y if MACH_SUN8I_R40
556         default y if MACH_SUN50I
557         default y if MACH_SUN50I_H6
558         ---help---
559         Select this to enable dram odt (on die termination).
560
561 if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
562 config DRAM_EMR1
563         int "sunxi dram emr1 value"
564         default 0 if MACH_SUN4I
565         default 4 if MACH_SUN5I || MACH_SUN7I
566         ---help---
567         Set the dram controller emr1 value.
568
569 config DRAM_TPR3
570         hex "sunxi dram tpr3 value"
571         default 0
572         ---help---
573         Set the dram controller tpr3 parameter. This parameter configures
574         the delay on the command lane and also phase shifts, which are
575         applied for sampling incoming read data. The default value 0
576         means that no phase/delay adjustments are necessary. Properly
577         configuring this parameter increases reliability at high DRAM
578         clock speeds.
579
580 config DRAM_DQS_GATING_DELAY
581         hex "sunxi dram dqs_gating_delay value"
582         default 0
583         ---help---
584         Set the dram controller dqs_gating_delay parmeter. Each byte
585         encodes the DQS gating delay for each byte lane. The delay
586         granularity is 1/4 cycle. For example, the value 0x05060606
587         means that the delay is 5 quarter-cycles for one lane (1.25
588         cycles) and 6 quarter-cycles (1.5 cycles) for 3 other lanes.
589         The default value 0 means autodetection. The results of hardware
590         autodetection are not very reliable and depend on the chip
591         temperature (sometimes producing different results on cold start
592         and warm reboot). But the accuracy of hardware autodetection
593         is usually good enough, unless running at really high DRAM
594         clocks speeds (up to 600MHz). If unsure, keep as 0.
595
596 choice
597         prompt "sunxi dram timings"
598         default DRAM_TIMINGS_VENDOR_MAGIC
599         ---help---
600         Select the timings of the DDR3 chips.
601
602 config DRAM_TIMINGS_VENDOR_MAGIC
603         bool "Magic vendor timings from Android"
604         ---help---
605         The same DRAM timings as in the Allwinner boot0 bootloader.
606
607 config DRAM_TIMINGS_DDR3_1066F_1333H
608         bool "JEDEC DDR3-1333H with down binning to DDR3-1066F"
609         ---help---
610         Use the timings of the standard JEDEC DDR3-1066F speed bin for
611         DRAM_CLK <= 533MHz and the timings of the DDR3-1333H speed bin
612         for DRAM_CLK > 533MHz. This covers the majority of DDR3 chips
613         used in Allwinner A10/A13/A20 devices. In the case of DDR3-1333
614         or DDR3-1600 chips, be sure to check the DRAM datasheet to confirm
615         that down binning to DDR3-1066F is supported (because DDR3-1066F
616         uses a bit faster timings than DDR3-1333H).
617
618 config DRAM_TIMINGS_DDR3_800E_1066G_1333J
619         bool "JEDEC DDR3-800E / DDR3-1066G / DDR3-1333J"
620         ---help---
621         Use the timings of the slowest possible JEDEC speed bin for the
622         selected DRAM_CLK. Depending on the DRAM_CLK value, it may be
623         DDR3-800E, DDR3-1066G or DDR3-1333J.
624
625 endchoice
626
627 endif
628
629 if MACH_SUN8I_A23
630 config DRAM_ODT_CORRECTION
631         int "sunxi dram odt correction value"
632         default 0
633         ---help---
634         Set the dram odt correction value (range -255 - 255). In allwinner
635         fex files, this option is found in bits 8-15 of the u32 odt_en variable
636         in the [dram] section. When bit 31 of the odt_en variable is set
637         then the correction is negative. Usually the value for this is 0.
638 endif
639
640 config SYS_CLK_FREQ
641         default 408000000 if MACH_SUNIV
642         default 1008000000 if MACH_SUN4I
643         default 1008000000 if MACH_SUN5I
644         default 1008000000 if MACH_SUN6I
645         default 912000000 if MACH_SUN7I
646         default 816000000 if MACH_SUN50I || MACH_SUN50I_H5
647         default 1008000000 if MACH_SUN8I
648         default 1008000000 if MACH_SUN9I
649         default 888000000 if MACH_SUN50I_H6
650         default 1008000000 if MACH_SUN50I_H616
651
652 config SYS_CONFIG_NAME
653         default "suniv" if MACH_SUNIV
654         default "sun4i" if MACH_SUN4I
655         default "sun5i" if MACH_SUN5I
656         default "sun6i" if MACH_SUN6I
657         default "sun7i" if MACH_SUN7I
658         default "sun8i" if MACH_SUN8I
659         default "sun9i" if MACH_SUN9I
660         default "sun50i" if MACH_SUN50I
661         default "sun50i" if MACH_SUN50I_H6
662         default "sun50i" if MACH_SUN50I_H616
663
664 config SYS_BOARD
665         default "sunxi"
666
667 config SYS_SOC
668         default "sunxi"
669
670 config SUNXI_MINIMUM_DRAM_MB
671         int "minimum DRAM size"
672         default 32 if MACH_SUNIV
673         default 64 if MACH_SUN8I_V3S
674         default 256
675         ---help---
676         Minimum DRAM size expected on the board. Traditionally we assumed
677         256 MB, so that U-Boot would load at 160MB. With co-packaged DRAM
678         we have smaller sizes, though, so that U-Boot's own load address and
679         the default payload addresses must be shifted down.
680         This is expected to be fixed by the SoC selection.
681
682 config UART0_PORT_F
683         bool "UART0 on MicroSD breakout board"
684         ---help---
685         Repurpose the SD card slot for getting access to the UART0 serial
686         console. Primarily useful only for low level u-boot debugging on
687         tablets, where normal UART0 is difficult to access and requires
688         device disassembly and/or soldering. As the SD card can't be used
689         at the same time, the system can be only booted in the FEL mode.
690         Only enable this if you really know what you are doing.
691
692 config OLD_SUNXI_KERNEL_COMPAT
693         bool "Enable workarounds for booting old kernels"
694         ---help---
695         Set this to enable various workarounds for old kernels, this results in
696         sub-optimal settings for newer kernels, only enable if needed.
697
698 config MACPWR
699         string "MAC power pin"
700         default ""
701         help
702           Set the pin used to power the MAC. This takes a string in the format
703           understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
704
705 config MMC1_PINS_PH
706         bool "Pins for mmc1 are on Port H"
707         depends on MACH_SUN4I || MACH_SUN7I || MACH_SUN8I_R40
708         ---help---
709         Select this option for boards where mmc1 uses the Port H pinmux.
710
711 config MMC_SUNXI_SLOT_EXTRA
712         int "mmc extra slot number"
713         default -1
714         ---help---
715         sunxi builds always enable mmc0, some boards also have a second sdcard
716         slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
717         support for this.
718
719 config USB0_VBUS_PIN
720         string "Vbus enable pin for usb0 (otg)"
721         default ""
722         ---help---
723         Set the Vbus enable pin for usb0 (otg). This takes a string in the
724         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
725
726 config USB0_VBUS_DET
727         string "Vbus detect pin for usb0 (otg)"
728         default ""
729         ---help---
730         Set the Vbus detect pin for usb0 (otg). This takes a string in the
731         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
732
733 config USB0_ID_DET
734         string "ID detect pin for usb0 (otg)"
735         default ""
736         ---help---
737         Set the ID detect pin for usb0 (otg). This takes a string in the
738         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
739
740 config USB1_VBUS_PIN
741         string "Vbus enable pin for usb1 (ehci0)"
742         default "PH6" if MACH_SUN4I || MACH_SUN7I
743         default "PH27" if MACH_SUN6I
744         ---help---
745         Set the Vbus enable pin for usb1 (ehci0, usb0 is the otg). This takes
746         a string in the format understood by sunxi_name_to_gpio, e.g.
747         PH1 for pin 1 of port H.
748
749 config USB2_VBUS_PIN
750         string "Vbus enable pin for usb2 (ehci1)"
751         default "PH3" if MACH_SUN4I || MACH_SUN7I
752         default "PH24" if MACH_SUN6I
753         ---help---
754         See USB1_VBUS_PIN help text.
755
756 config USB3_VBUS_PIN
757         string "Vbus enable pin for usb3 (ehci2)"
758         default ""
759         ---help---
760         See USB1_VBUS_PIN help text.
761
762 config I2C0_ENABLE
763         bool "Enable I2C/TWI controller 0"
764         default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40
765         default n if MACH_SUN6I || MACH_SUN8I
766         select CMD_I2C
767         ---help---
768         This allows enabling I2C/TWI controller 0 by muxing its pins, enabling
769         its clock and setting up the bus. This is especially useful on devices
770         with slaves connected to the bus or with pins exposed through e.g. an
771         expansion port/header.
772
773 config I2C1_ENABLE
774         bool "Enable I2C/TWI controller 1"
775         select CMD_I2C
776         ---help---
777         See I2C0_ENABLE help text.
778
779 if SUNXI_GEN_SUN6I || SUN50I_GEN_H6
780 config R_I2C_ENABLE
781         bool "Enable the PRCM I2C/TWI controller"
782         # This is used for the pmic on H3
783         default y if SY8106A_POWER
784         select CMD_I2C
785         ---help---
786         Set this to y to enable the I2C controller which is part of the PRCM.
787 endif
788
789 config AXP_GPIO
790         bool "Enable support for gpio-s on axp PMICs"
791         depends on AXP_PMIC_BUS
792         ---help---
793         Say Y here to enable support for the gpio pins of the axp PMIC ICs.
794
795 config AXP_DISABLE_BOOT_ON_POWERON
796         bool "Disable device boot on power plug-in"
797         depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
798         default n
799         ---help---
800           Say Y here to prevent the device from booting up because of a plug-in
801           event. When set, the device will boot into the SPL briefly to
802           determine why it was powered on, and if it was determined because of
803           a plug-in event instead of a button press event it will shut back off.
804
805 config VIDEO_SUNXI
806         bool "Enable graphical uboot console on HDMI, LCD or VGA"
807         depends on !MACH_SUN8I_A83T
808         depends on !MACH_SUNXI_H3_H5
809         depends on !MACH_SUN8I_R40
810         depends on !MACH_SUN8I_V3S
811         depends on !MACH_SUN9I
812         depends on !MACH_SUN50I
813         depends on !SUN50I_GEN_H6
814         select VIDEO
815         select DISPLAY
816         imply VIDEO_DT_SIMPLEFB
817         default y
818         ---help---
819         Say Y here to add support for using a graphical console on the HDMI,
820         LCD or VGA output found on older sunxi devices. This will also provide
821         a simple_framebuffer device for Linux.
822
823 config VIDEO_HDMI
824         bool "HDMI output support"
825         depends on VIDEO_SUNXI && !MACH_SUN8I && !MACH_SUNIV
826         default y
827         ---help---
828         Say Y here to add support for outputting video over HDMI.
829
830 config VIDEO_VGA
831         bool "VGA output support"
832         depends on VIDEO_SUNXI && (MACH_SUN4I || MACH_SUN7I)
833         ---help---
834         Say Y here to add support for outputting video over VGA.
835
836 config VIDEO_VGA_VIA_LCD
837         bool "VGA via LCD controller support"
838         depends on VIDEO_SUNXI && (MACH_SUN5I || MACH_SUN6I || MACH_SUN8I)
839         ---help---
840         Say Y here to add support for external DACs connected to the parallel
841         LCD interface driving a VGA connector, such as found on the
842         Olimex A13 boards.
843
844 config VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH
845         bool "Force sync active high for VGA via LCD controller support"
846         depends on VIDEO_VGA_VIA_LCD
847         ---help---
848         Say Y here if you've a board which uses opendrain drivers for the vga
849         hsync and vsync signals. Opendrain drivers cannot generate steep enough
850         positive edges for a stable video output, so on boards with opendrain
851         drivers the sync signals must always be active high.
852
853 config VIDEO_VGA_EXTERNAL_DAC_EN
854         string "LCD panel power enable pin"
855         depends on VIDEO_VGA_VIA_LCD
856         default ""
857         ---help---
858         Set the enable pin for the external VGA DAC. This takes a string in the
859         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
860
861 config VIDEO_COMPOSITE
862         bool "Composite video output support"
863         depends on VIDEO_SUNXI && (MACH_SUN4I || MACH_SUN5I || MACH_SUN7I)
864         ---help---
865         Say Y here to add support for outputting composite video.
866
867 config VIDEO_LCD_MODE
868         string "LCD panel timing details"
869         depends on VIDEO_SUNXI
870         default ""
871         ---help---
872         LCD panel timing details string, leave empty if there is no LCD panel.
873         This is in drivers/video/videomodes.c: video_get_params() format, e.g.
874         x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:0,vmode:0
875         Also see: http://linux-sunxi.org/LCD
876
877 config VIDEO_LCD_DCLK_PHASE
878         int "LCD panel display clock phase"
879         depends on VIDEO_SUNXI || VIDEO
880         default 1
881         range 0 3
882         ---help---
883         Select LCD panel display clock phase shift
884
885 config VIDEO_LCD_POWER
886         string "LCD panel power enable pin"
887         depends on VIDEO_SUNXI
888         default ""
889         ---help---
890         Set the power enable pin for the LCD panel. This takes a string in the
891         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
892
893 config VIDEO_LCD_RESET
894         string "LCD panel reset pin"
895         depends on VIDEO_SUNXI
896         default ""
897         ---help---
898         Set the reset pin for the LCD panel. This takes a string in the format
899         understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
900
901 config VIDEO_LCD_BL_EN
902         string "LCD panel backlight enable pin"
903         depends on VIDEO_SUNXI
904         default ""
905         ---help---
906         Set the backlight enable pin for the LCD panel. This takes a string in the
907         the format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of
908         port H.
909
910 config VIDEO_LCD_BL_PWM
911         string "LCD panel backlight pwm pin"
912         depends on VIDEO_SUNXI
913         default ""
914         ---help---
915         Set the backlight pwm pin for the LCD panel. This takes a string in the
916         format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
917
918 config VIDEO_LCD_BL_PWM_ACTIVE_LOW
919         bool "LCD panel backlight pwm is inverted"
920         depends on VIDEO_SUNXI
921         default y
922         ---help---
923         Set this if the backlight pwm output is active low.
924
925 config VIDEO_LCD_PANEL_I2C
926         bool "LCD panel needs to be configured via i2c"
927         depends on VIDEO_SUNXI
928         select DM_I2C_GPIO
929         ---help---
930         Say y here if the LCD panel needs to be configured via i2c. This
931         will add a bitbang i2c controller using gpios to talk to the LCD.
932
933 config VIDEO_LCD_PANEL_I2C_NAME
934         string "LCD panel i2c interface node name"
935         depends on VIDEO_LCD_PANEL_I2C
936         default "i2c"
937         ---help---
938         Set the device tree node name for the LCD i2c interface.
939
940 # Note only one of these may be selected at a time! But hidden choices are
941 # not supported by Kconfig
942 config VIDEO_LCD_IF_PARALLEL
943         bool
944
945 config VIDEO_LCD_IF_LVDS
946         bool
947
948 config SUNXI_DE2
949         bool
950
951 config VIDEO_DE2
952         bool "Display Engine 2 video driver"
953         depends on SUNXI_DE2
954         select VIDEO
955         select DISPLAY
956         select VIDEO_DW_HDMI
957         imply VIDEO_DT_SIMPLEFB
958         default y
959         ---help---
960         Say y here if you want to build DE2 video driver which is present on
961         newer SoCs. Currently only HDMI output is supported.
962
963
964 choice
965         prompt "LCD panel support"
966         depends on VIDEO_SUNXI
967         ---help---
968         Select which type of LCD panel to support.
969
970 config VIDEO_LCD_PANEL_PARALLEL
971         bool "Generic parallel interface LCD panel"
972         select VIDEO_LCD_IF_PARALLEL
973
974 config VIDEO_LCD_PANEL_LVDS
975         bool "Generic lvds interface LCD panel"
976         select VIDEO_LCD_IF_LVDS
977
978 config VIDEO_LCD_PANEL_MIPI_4_LANE_513_MBPS_VIA_SSD2828
979         bool "MIPI 4-lane, 513Mbps LCD panel via SSD2828 bridge chip"
980         select VIDEO_LCD_SSD2828
981         select VIDEO_LCD_IF_PARALLEL
982         ---help---
983         7.85" 768x1024 LCD panels, such as LG LP079X01 or AUO B079XAN01.0
984
985 config VIDEO_LCD_PANEL_EDP_4_LANE_1620M_VIA_ANX9804
986         bool "eDP 4-lane, 1.62G LCD panel via ANX9804 bridge chip"
987         select VIDEO_LCD_ANX9804
988         select VIDEO_LCD_IF_PARALLEL
989         select VIDEO_LCD_PANEL_I2C
990         ---help---
991         Select this for eDP LCD panels with 4 lanes running at 1.62G,
992         connected via an ANX9804 bridge chip.
993
994 config VIDEO_LCD_PANEL_HITACHI_TX18D42VM
995         bool "Hitachi tx18d42vm LCD panel"
996         select VIDEO_LCD_HITACHI_TX18D42VM
997         select VIDEO_LCD_IF_LVDS
998         ---help---
999         7.85" 1024x768 Hitachi tx18d42vm LCD panel support
1000
1001 config VIDEO_LCD_TL059WV5C0
1002         bool "tl059wv5c0 LCD panel"
1003         select VIDEO_LCD_PANEL_I2C
1004         select VIDEO_LCD_IF_PARALLEL
1005         ---help---
1006         6" 480x800 tl059wv5c0 panel support, as used on the Utoo P66 and
1007         Aigo M60/M608/M606 tablets.
1008
1009 endchoice
1010
1011 config SATAPWR
1012         string "SATA power pin"
1013         default ""
1014         help
1015           Set the pins used to power the SATA. This takes a string in the
1016           format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of
1017           port H.
1018
1019 config GMAC_TX_DELAY
1020         int "GMAC Transmit Clock Delay Chain"
1021         default 0
1022         ---help---
1023         Set the GMAC Transmit Clock Delay Chain value.
1024
1025 config SPL_STACK_R_ADDR
1026         default 0x81e00000 if MACH_SUNIV
1027         default 0x4fe00000 if MACH_SUN4I
1028         default 0x4fe00000 if MACH_SUN5I
1029         default 0x4fe00000 if MACH_SUN6I
1030         default 0x4fe00000 if MACH_SUN7I
1031         default 0x4fe00000 if MACH_SUN8I
1032         default 0x2fe00000 if MACH_SUN9I
1033         default 0x4fe00000 if MACH_SUN50I
1034         default 0x4fe00000 if SUN50I_GEN_H6
1035
1036 config SPL_SPI_SUNXI
1037         bool "Support for SPI Flash on Allwinner SoCs in SPL"
1038         depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNXI_H3_H5 || MACH_SUN50I || MACH_SUN8I_R40 || SUN50I_GEN_H6 || MACH_SUNIV
1039         help
1040           Enable support for SPI Flash. This option allows SPL to read from
1041           sunxi SPI Flash. It uses the same method as the boot ROM, so does
1042           not need any extra configuration.
1043
1044 config PINE64_DT_SELECTION
1045         bool "Enable Pine64 device tree selection code"
1046         depends on MACH_SUN50I
1047         help
1048           The original Pine A64 and Pine A64+ are similar but different
1049           boards and can be differed by the DRAM size. Pine A64 has
1050           512MiB DRAM, and Pine A64+ has 1GiB or 2GiB. By selecting this
1051           option, the device tree selection code specific to Pine64 which
1052           utilizes the DRAM size will be enabled.
1053
1054 config PINEPHONE_DT_SELECTION
1055         bool "Enable PinePhone device tree selection code"
1056         depends on MACH_SUN50I
1057         help
1058           Enable this option to automatically select the device tree for the
1059           correct PinePhone hardware revision during boot.
1060
1061 config BLUETOOTH_DT_DEVICE_FIXUP
1062         string "Fixup the Bluetooth controller address"
1063         default ""
1064         help
1065           This option specifies the DT compatible name of the Bluetooth
1066           controller for which to set the "local-bd-address" property.
1067           Set this option if your device ships with the Bluetooth controller
1068           default address.
1069           The used address is "bdaddr" if set, and "ethaddr" with the LSB
1070           flipped elsewise.
1071
1072 source "board/sunxi/Kconfig"
1073
1074 endif
1075
1076 config CHIP_DIP_SCAN
1077         bool "Enable DIPs detection for CHIP board"
1078         select SUPPORT_EXTENSION_SCAN
1079         select W1
1080         select W1_GPIO
1081         select W1_EEPROM
1082         select W1_EEPROM_DS24XXX
1083         select CMD_EXTENSION