arm: socfpga: Add handoff data support for Intel N5X device
[platform/kernel/u-boot.git] / arch / arm / mach-socfpga / include / mach / handoff_soc64.h
1 /* SPDX-License-Identifier: GPL-2.0
2  *
3  * Copyright (C) 2016-2021 Intel Corporation <www.intel.com>
4  *
5  */
6
7 #ifndef _HANDOFF_SOC64_H_
8 #define _HANDOFF_SOC64_H_
9
10 /*
11  * Offset for HW handoff from Quartus tools
12  */
13 /* HPS handoff */
14 #define SOC64_HANDOFF_MAGIC_BOOT        0x424F4F54
15 #define SOC64_HANDOFF_MAGIC_MUX 0x504D5558
16 #define SOC64_HANDOFF_MAGIC_IOCTL       0x494F4354
17 #define SOC64_HANDOFF_MAGIC_FPGA        0x46504741
18 #define SOC64_HANDOFF_MAGIC_DELAY       0x444C4159
19 #define SOC64_HANDOFF_MAGIC_CLOCK       0x434C4B53
20 #define SOC64_HANDOFF_MAGIC_MISC        0x4D495343
21
22 #define SOC64_HANDOFF_OFFSET_LENGTH     0x4
23 #define SOC64_HANDOFF_OFFSET_DATA       0x10
24 #define SOC64_HANDOFF_SIZE              4096
25
26 #if IS_ENABLED(CONFIG_TARGET_SOCFPGA_STRATIX10) || \
27         IS_ENABLED(CONFIG_TARGET_SOCFPGA_AGILEX)
28 #define SOC64_HANDOFF_BASE              0xFFE3F000
29 #define SOC64_HANDOFF_MISC              (SOC64_HANDOFF_BASE + 0x610)
30 #elif IS_ENABLED(CONFIG_TARGET_SOCFPGA_N5X)
31 #define SOC64_HANDOFF_BASE              0xFFE5F000
32 #define SOC64_HANDOFF_MISC              (SOC64_HANDOFF_BASE + 0x630)
33
34 /* DDR handoff */
35 #define SOC64_HANDOFF_DDR_BASE                  0xFFE5C000
36 #define SOC64_HANDOFF_DDR_MAGIC                 0x48524444
37 #define SOC64_HANDOFF_DDR_UMCTL2_MAGIC          0x4C54434D
38 #define SOC64_HANDOFF_DDR_UMCTL2_DDR4_TYPE      0x34524444
39 #define SOC64_HANDOFF_DDR_UMCTL2_LPDDR4_0_TYPE  0x3044504C
40 #define SOC64_HANDOFF_DDR_UMCTL2_LPDDR4_1_TYPE  0x3144504C
41 #define SOC64_HANDOFF_DDR_MEMRESET_BASE         (SOC64_HANDOFF_DDR_BASE + 0xC)
42 #define SOC64_HANDOFF_DDR_UMCTL2_SECTION        (SOC64_HANDOFF_DDR_BASE + 0x10)
43 #define SOC64_HANDOFF_DDR_PHY_MAGIC             0x43594850
44 #define SOC64_HANDOFF_DDR_PHY_INIT_ENGINE_MAGIC 0x45594850
45 #define SOC64_HANDOFF_DDR_PHY_BASE_OFFSET       0x8
46 #define SOC64_HANDOFF_DDR_UMCTL2_TYPE_OFFSET    0x8
47 #define SOC64_HANDOFF_DDR_UMCTL2_BASE_ADDR_OFFSET       0xC
48 #define SOC64_HANDOFF_DDR_TRAIN_IMEM_1D_SECTION 0xFFE50000
49 #define SOC64_HANDOFF_DDR_TRAIN_DMEM_1D_SECTION 0xFFE58000
50 #define SOC64_HANDOFF_DDR_TRAIN_IMEM_2D_SECTION 0xFFE44000
51 #define SOC64_HANDOFF_DDR_TRAIN_DMEM_2D_SECTION 0xFFE4C000
52 #define SOC64_HANDOFF_DDR_TRAIN_IMEM_LENGTH     SZ_32K
53 #define SOC64_HANDOFF_DDR_TRAIN_DMEM_LENGTH     SZ_16K
54 #endif
55
56 #define SOC64_HANDOFF_MUX               (SOC64_HANDOFF_BASE + 0x10)
57 #define SOC64_HANDOFF_IOCTL             (SOC64_HANDOFF_BASE + 0x1A0)
58 #define SOC64_HANDOFF_FPGA              (SOC64_HANDOFF_BASE + 0x330)
59 #define SOC64_HANDOFF_DELAY             (SOC64_HANDOFF_BASE + 0x3F0)
60 #define SOC64_HANDOFF_CLOCK             (SOC64_HANDOFF_BASE + 0x580)
61
62 #if IS_ENABLED(CONFIG_TARGET_SOCFPGA_STRATIX10)
63 #define SOC64_HANDOFF_CLOCK_OSC (SOC64_HANDOFF_BASE + 0x608)
64 #define SOC64_HANDOFF_CLOCK_FPGA        (SOC64_HANDOFF_BASE + 0x60C)
65 #else
66 #define SOC64_HANDOFF_CLOCK_OSC (SOC64_HANDOFF_BASE + 0x5fc)
67 #define SOC64_HANDOFF_CLOCK_FPGA        (SOC64_HANDOFF_BASE + 0x600)
68 #endif
69
70 #define SOC64_HANDOFF_MUX_LEN                   96
71 #define SOC64_HANDOFF_IOCTL_LEN                 96
72 #if IS_ENABLED(CONFIG_TARGET_SOCFPGA_STRATIX10)
73 #define SOC64_HANDOFF_FPGA_LEN                  42
74 #else
75 #define SOC64_HANDOFF_FPGA_LEN                  40
76 #endif
77 #define SOC64_HANDOFF_DELAY_LEN                 96
78
79 #ifndef __ASSEMBLY__
80 #include <asm/types.h>
81 enum endianness {
82         LITTLE_ENDIAN = 0,
83         BIG_ENDIAN,
84         UNKNOWN_ENDIANNESS
85 };
86
87 int socfpga_get_handoff_size(void *handoff_address);
88 int socfpga_handoff_read(void *handoff_address, void *table, u32 table_len);
89 #endif
90 #endif /* _HANDOFF_SOC64_H_ */