raw/ifpga/base: support device tree
[dpdk.git] / drivers / raw / ifpga / base / opae_intel_max10.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Intel Corporation
3  */
4
5 #ifndef _OPAE_INTEL_MAX10_H_
6 #define _OPAE_INTEL_MAX10_H_
7
8 #include "opae_osdep.h"
9 #include "opae_spi.h"
10
11 struct max10_compatible_id {
12         char compatible[128];
13 };
14
15 #define MAX10_PAC       "intel,max10"
16 #define MAX10_PAC_N3000 "intel,max10-pac-n3000"
17 #define MAX10_PAC_END    "intel,end"
18
19 /* max10 capability flags */
20 #define MAX10_FLAGS_NO_I2C2             BIT(0)
21 #define MAX10_FLAGS_NO_BMCIMG_FLASH     BIT(1)
22 #define MAX10_FLAGS_DEVICE_TABLE        BIT(2)
23 #define MAX10_FLAGS_SPI                 BIT(3)
24 #define MAX10_FLGAS_NIOS_SPI            BIT(4)
25 #define MAX10_FLAGS_PKVL                BIT(5)
26
27 struct intel_max10_device {
28         unsigned int flags; /*max10 hardware capability*/
29         struct altera_spi_device *spi_master;
30         struct spi_transaction_dev *spi_tran_dev;
31         struct max10_compatible_id *id; /*max10 compatible*/
32         char *fdt_root;
33 };
34
35 /* retimer speed */
36 enum retimer_speed {
37         MXD_1GB = 1,
38         MXD_2_5GB = 2,
39         MXD_5GB = 5,
40         MXD_10GB = 10,
41         MXD_25GB = 25,
42         MXD_40GB = 40,
43         MXD_100GB = 100,
44         MXD_SPEED_UNKNOWN,
45 };
46
47 /* retimer info */
48 struct opae_retimer_info {
49         unsigned int nums_retimer;
50         unsigned int ports_per_retimer;
51         unsigned int nums_fvl;
52         unsigned int ports_per_fvl;
53         enum retimer_speed support_speed;
54 };
55
56 /* retimer status*/
57 struct opae_retimer_status {
58         enum retimer_speed speed;
59         /*
60          * retimer line link status bitmap:
61          * bit 0: Retimer0 Port0 link status
62          * bit 1: Retimer0 Port1 link status
63          * bit 2: Retimer0 Port2 link status
64          * bit 3: Retimer0 Port3 link status
65          *
66          * bit 4: Retimer1 Port0 link status
67          * bit 5: Retimer1 Port1 link status
68          * bit 6: Retimer1 Port2 link status
69          * bit 7: Retimer1 Port3 link status
70          */
71         unsigned int line_link_bitmap;
72 };
73
74 #define FLASH_BASE 0x10000000
75 #define FLASH_OPTION_BITS 0x10000
76
77 #define NIOS2_FW_VERSION_OFF   0x300400
78 #define RSU_REG_OFF            0x30042c
79 #define FPGA_RP_LOAD            BIT(3)
80 #define NIOS2_PRERESET          BIT(4)
81 #define NIOS2_HANG              BIT(5)
82 #define RSU_ENABLE              BIT(6)
83 #define NIOS2_RESET             BIT(7)
84 #define NIOS2_I2C2_POLL_STOP    BIT(13)
85 #define FPGA_RECONF_REG_OFF     0x300430
86 #define COUNTDOWN_START         BIT(18)
87 #define MAX10_BUILD_VER_OFF     0x300468
88 #define PCB_INFO                GENMASK(31, 24)
89 #define MAX10_BUILD_VERION      GENMASK(23, 0)
90 #define FPGA_PAGE_INFO_OFF      0x30046c
91 #define DT_AVAIL_REG_OFF        0x300490
92 #define DT_AVAIL                BIT(0)
93 #define DT_BASE_ADDR_REG_OFF    0x300494
94 #define PKVL_POLLING_CTRL       0x300480
95 #define PKVL_LINK_STATUS        0x300564
96
97 #define DFT_MAX_SIZE            0x7e0000
98
99 int max10_reg_read(unsigned int reg, unsigned int *val);
100 int max10_reg_write(unsigned int reg, unsigned int val);
101 struct intel_max10_device *
102 intel_max10_device_probe(struct altera_spi_device *spi,
103                 int chipselect);
104 int intel_max10_device_remove(struct intel_max10_device *dev);
105
106 #endif