1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2013 Gateworks Corporation
4  */
5 
6 #ifndef _VENTANA_EEPROM_
7 #define _VENTANA_EEPROM_
8 
9 struct ventana_board_info {
10 	u8 mac0[6];          /* 0x00: MAC1 */
11 	u8 mac1[6];          /* 0x06: MAC2 */
12 	u8 res0[12];         /* 0x0C: reserved */
13 	u32 serial;          /* 0x18: Serial Number (read only) */
14 	u8 res1[4];          /* 0x1C: reserved */
15 	u8 mfgdate[4];       /* 0x20: MFG date (read only) */
16 	u8 res2[7];          /* 0x24 */
17 	/* sdram config */
18 	u8 sdram_size;       /* 0x2B: (16 << n) MB */
19 	u8 sdram_speed;      /* 0x2C: (33.333 * n) MHz */
20 	u8 sdram_width;      /* 0x2D: (8 << n) bit */
21 	/* cpu config */
22 	u8 cpu_speed;        /* 0x2E: (33.333 * n) MHz */
23 	u8 cpu_type;         /* 0x2F: 7=imx6q, 8=imx6dl */
24 	u8 model[16];        /* 0x30: model string */
25 	/* FLASH config */
26 	u8 nand_flash_size;  /* 0x40: (8 << (n-1)) MB */
27 	u8 spi_flash_size;   /* 0x41: (4 << (n-1)) MB */
28 
29 	/* Config1: SoC Peripherals */
30 	u8 config[8];        /* 0x42: loading options */
31 
32 	u8 res3[4];          /* 0x4A */
33 
34 	u8 chksum[2];        /* 0x4E */
35 };
36 
37 /* config bits */
38 enum {
39 	EECONFIG_ETH0,
40 	EECONFIG_ETH1,
41 	EECONFIG_HDMI_OUT,
42 	EECONFIG_SATA,
43 	EECONFIG_PCIE,
44 	EECONFIG_SSI0,
45 	EECONFIG_SSI1,
46 	EECONFIG_LCD,
47 	EECONFIG_LVDS0,
48 	EECONFIG_LVDS1,
49 	EECONFIG_USB0,
50 	EECONFIG_USB1,
51 	EECONFIG_SD0,
52 	EECONFIG_SD1,
53 	EECONFIG_SD2,
54 	EECONFIG_SD3,
55 	EECONFIG_UART0,
56 	EECONFIG_UART1,
57 	EECONFIG_UART2,
58 	EECONFIG_UART3,
59 	EECONFIG_UART4,
60 	EECONFIG_IPU0,
61 	EECONFIG_IPU1,
62 	EECONFIG_FLEXCAN,
63 	EECONFIG_MIPI_DSI,
64 	EECONFIG_MIPI_CSI,
65 	EECONFIG_TZASC0,
66 	EECONFIG_TZASC1,
67 	EECONFIG_I2C0,
68 	EECONFIG_I2C1,
69 	EECONFIG_I2C2,
70 	EECONFIG_VPU,
71 	EECONFIG_CSI0,
72 	EECONFIG_CSI1,
73 	EECONFIG_CAAM,
74 	EECONFIG_MEZZ,
75 	EECONFIG_RES1,
76 	EECONFIG_RES2,
77 	EECONFIG_RES3,
78 	EECONFIG_RES4,
79 	EECONFIG_ESPCI0,
80 	EECONFIG_ESPCI1,
81 	EECONFIG_ESPCI2,
82 	EECONFIG_ESPCI3,
83 	EECONFIG_ESPCI4,
84 	EECONFIG_ESPCI5,
85 	EECONFIG_RES5,
86 	EECONFIG_RES6,
87 	EECONFIG_GPS,
88 	EECONFIG_SPIFL0,
89 	EECONFIG_SPIFL1,
90 	EECONFIG_GSPBATT,
91 	EECONFIG_HDMI_IN,
92 	EECONFIG_VID_OUT,
93 	EECONFIG_VID_IN,
94 	EECONFIG_NAND,
95 	EECONFIG_RES8,
96 	EECONFIG_RES9,
97 	EECONFIG_RES10,
98 	EECONFIG_RES11,
99 	EECONFIG_RES12,
100 	EECONFIG_RES13,
101 	EECONFIG_RES14,
102 	EECONFIG_RES15,
103 };
104 
105 enum {
106 	GW54proto, /* original GW5400-A prototype */
107 	GW51xx,
108 	GW52xx,
109 	GW53xx,
110 	GW54xx,
111 	GW551x,
112 	GW552x,
113 	GW553x,
114 	GW560x,
115 	GW5901,
116 	GW5902,
117 	GW5903,
118 	GW5904,
119 	GW5905,
120 	GW5906,
121 	GW5907,
122 	GW5908,
123 	GW5909,
124 	GW_UNKNOWN,
125 	GW_BADCRC,
126 };
127 
128 /* config items */
129 struct ventana_eeprom_config {
130 	const char *name;	/* name of item */
131 	const char *dtalias;	/* name of dt node to remove if not set */
132 	int bit;		/* bit within config */
133 };
134 
135 extern struct ventana_eeprom_config econfig[];
136 extern struct ventana_board_info ventana_info;
137 
138 int read_eeprom(int bus, struct ventana_board_info *);
139 
140 #endif
141