ARM: dts: at91: sama5d2_icp: fix i2c eeprom compatible
[platform/kernel/u-boot.git] / board / xilinx / common / fru.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Copyright 2019 Xilinx, Inc.
4  * Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
5  */
6
7 #ifndef __FRU_H
8 #define __FRU_H
9
10 struct fru_common_hdr {
11         u8 version;
12         u8 off_internal;
13         u8 off_chassis;
14         u8 off_board;
15         u8 off_product;
16         u8 off_multirec;
17         u8 pad;
18         u8 crc;
19 };
20
21 #define FRU_BOARD_MAX_LEN       32
22
23 struct __packed fru_board_info_header {
24         u8 ver;
25         u8 len;
26         u8 lang_code;
27         u8 time[3];
28 };
29
30 struct __packed fru_board_info_member {
31         u8 type_len;
32         u8 *name;
33 };
34
35 struct fru_board_data {
36         u8 ver;
37         u8 len;
38         u8 lang_code;
39         u8 time[3];
40         u8 manufacturer_type_len;
41         u8 manufacturer_name[FRU_BOARD_MAX_LEN];
42         u8 product_name_type_len;
43         u8 product_name[FRU_BOARD_MAX_LEN];
44         u8 serial_number_type_len;
45         u8 serial_number[FRU_BOARD_MAX_LEN];
46         u8 part_number_type_len;
47         u8 part_number[FRU_BOARD_MAX_LEN];
48         u8 file_id_type_len;
49         u8 file_id[FRU_BOARD_MAX_LEN];
50         /* Xilinx custom fields */
51         u8 rev_type_len;
52         u8 rev[FRU_BOARD_MAX_LEN];
53 };
54
55 struct fru_table {
56         bool captured;
57         struct fru_common_hdr hdr;
58         struct fru_board_data brd;
59 };
60
61 #define FRU_TYPELEN_CODE_MASK   0xC0
62 #define FRU_TYPELEN_LEN_MASK    0x3F
63 #define FRU_COMMON_HDR_VER_MASK         0xF
64 #define FRU_COMMON_HDR_LEN_MULTIPLIER   8
65 #define FRU_LANG_CODE_ENGLISH           0
66 #define FRU_LANG_CODE_ENGLISH_1         25
67 #define FRU_TYPELEN_EOF                 0xC1
68
69 /* This should be minimum of fields */
70 #define FRU_BOARD_AREA_TOTAL_FIELDS     5
71 #define FRU_TYPELEN_TYPE_SHIFT          6
72 #define FRU_TYPELEN_TYPE_BINARY         0
73 #define FRU_TYPELEN_TYPE_ASCII8         3
74
75 int fru_display(int verbose);
76 int fru_capture(unsigned long addr);
77 int fru_generate(unsigned long addr, char *manufacturer, char *board_name,
78                  char *serial_no, char *part_no, char *revision);
79 u8 fru_checksum(u8 *addr, u8 len);
80
81 extern struct fru_table fru_data;
82
83 #endif /* FRU_H */