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 	GW5903,
116 	GW5904,
117 	GW_UNKNOWN,
118 	GW_BADCRC,
119 };
120 
121 /* config items */
122 struct ventana_eeprom_config {
123 	const char *name;	/* name of item */
124 	const char *dtalias;	/* name of dt node to remove if not set */
125 	int bit;		/* bit within config */
126 };
127 
128 extern struct ventana_eeprom_config econfig[];
129 extern struct ventana_board_info ventana_info;
130 
131 int read_eeprom(int bus, struct ventana_board_info *);
132 
133 #endif
134