get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/804381/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 804381,
    "url": "http://patchwork.ozlabs.org/api/patches/804381/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20170822060354.177331-2-jose.alarcon@ge.com/",
    "project": {
        "id": 18,
        "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api",
        "name": "U-Boot",
        "link_name": "uboot",
        "list_id": "u-boot.lists.denx.de",
        "list_email": "u-boot@lists.denx.de",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170822060354.177331-2-jose.alarcon@ge.com>",
    "list_archive_url": null,
    "date": "2017-08-22T06:03:54",
    "name": "[U-Boot] board: ge: bx50v3: set eth0 MAC address",
    "commit_ref": "be2808c3b0671751827b39753e7abe7278d33c62",
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "c9e5ff719e8d2d050a8d770988d6e57ffe035bb9",
    "submitter": {
        "id": 72204,
        "url": "http://patchwork.ozlabs.org/api/people/72204/?format=api",
        "name": "Jose Alarcon",
        "email": "jose.alarcon@ge.com"
    },
    "delegate": {
        "id": 1693,
        "url": "http://patchwork.ozlabs.org/api/users/1693/?format=api",
        "username": "sbabic",
        "first_name": "Stefano",
        "last_name": "Babic",
        "email": "sbabic@denx.de"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20170822060354.177331-2-jose.alarcon@ge.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/804381/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/804381/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<u-boot-bounces@lists.denx.de>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xc6gZ0MWDz9s82\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 22 Aug 2017 20:46:49 +1000 (AEST)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid 791CBC21D92; Tue, 22 Aug 2017 10:46:24 +0000 (UTC)",
            "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id E10ADC21E39;\n\tTue, 22 Aug 2017 10:46:04 +0000 (UTC)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid 0613BC21C26; Tue, 22 Aug 2017 06:04:03 +0000 (UTC)",
            "from mx0a-00176a03.pphosted.com (mx0b-00176a03.pphosted.com\n\t[67.231.157.48])\n\tby lists.denx.de (Postfix) with ESMTPS id 5B5AAC21C41\n\tfor <u-boot@lists.denx.de>; Tue, 22 Aug 2017 06:04:03 +0000 (UTC)",
            "from pps.filterd (m0048204.ppops.net [127.0.0.1])\n\tby m0048204.ppops.net-00176a03. (8.16.0.21/8.16.0.21) with SMTP id\n\tv7M641ea024999\n\tfor <u-boot@lists.denx.de>; Tue, 22 Aug 2017 02:04:02 -0400"
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=-0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE,\n\tRCVD_IN_MSPIKE_H4,\n\tRCVD_IN_MSPIKE_WL autolearn=unavailable autolearn_force=no\n\tversion=3.4.0",
        "From": "Jose Alarcon <jose.alarcon@ge.com>",
        "To": "u-boot@lists.denx.de",
        "Date": "Tue, 22 Aug 2017 09:03:54 +0300",
        "Message-Id": "<20170822060354.177331-2-jose.alarcon@ge.com>",
        "X-Mailer": "git-send-email 2.10.1",
        "In-Reply-To": "<20170822060354.177331-1-jose.alarcon@ge.com>",
        "References": "<20170822060354.177331-1-jose.alarcon@ge.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-22_02:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=notspam policy=default score=0\n\tpriorityscore=1501 malwarescore=0\n\tsuspectscore=3 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015\n\tlowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam\n\tadjust=0\n\treason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708220094",
        "X-Mailman-Approved-At": "Tue, 22 Aug 2017 10:46:02 +0000",
        "Subject": "[U-Boot] [PATCH] board: ge: bx50v3: set eth0 MAC address",
        "X-BeenThere": "u-boot@lists.denx.de",
        "X-Mailman-Version": "2.1.18",
        "Precedence": "list",
        "List-Id": "U-Boot discussion <u-boot.lists.denx.de>",
        "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>",
        "List-Archive": "<http://lists.denx.de/pipermail/u-boot/>",
        "List-Post": "<mailto:u-boot@lists.denx.de>",
        "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>",
        "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "u-boot-bounces@lists.denx.de",
        "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>"
    },
    "content": "From: Ian Ray <ian.ray@ge.com>\n\nDefine i2c mux configuration.  Add new vpd_reader which is used to read\nvital product data.  Read VPD from EEPROM and set eth0 MAC address.\n\nSigned-off-by: Ian Ray <ian.ray@ge.com>\nSigned-off-by: Jose Alarcon <jose.alarcon@ge.com>\n---\n board/ge/bx50v3/Makefile     |   2 +-\n board/ge/bx50v3/bx50v3.c     | 109 +++++++++++++++++++++\n board/ge/bx50v3/vpd_reader.c | 228 +++++++++++++++++++++++++++++++++++++++++++\n board/ge/bx50v3/vpd_reader.h |  25 +++++\n include/configs/ge_bx50v3.h  |  15 +++\n 5 files changed, 378 insertions(+), 1 deletion(-)\n create mode 100644 board/ge/bx50v3/vpd_reader.c\n create mode 100644 board/ge/bx50v3/vpd_reader.h",
    "diff": "diff --git a/board/ge/bx50v3/Makefile b/board/ge/bx50v3/Makefile\nindex bcd149f..2fff27b 100644\n--- a/board/ge/bx50v3/Makefile\n+++ b/board/ge/bx50v3/Makefile\n@@ -5,4 +5,4 @@\n # SPDX-License-Identifier:\tGPL-2.0+\n #\n \n-obj-y  := bx50v3.o\n+obj-y  := bx50v3.o vpd_reader.o\ndiff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c\nindex b25c634..c7df4ce 100644\n--- a/board/ge/bx50v3/bx50v3.c\n+++ b/board/ge/bx50v3/bx50v3.c\n@@ -26,8 +26,19 @@\n #include <asm/arch/sys_proto.h>\n #include <i2c.h>\n #include <pwm.h>\n+#include <stdlib.h>\n+#include \"vpd_reader.h\"\n DECLARE_GLOBAL_DATA_PTR;\n \n+#ifndef CONFIG_SYS_I2C_EEPROM_ADDR\n+# define CONFIG_SYS_I2C_EEPROM_ADDR     0x50\n+# define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1\n+#endif\n+\n+#ifndef CONFIG_SYS_I2C_EEPROM_BUS\n+#define CONFIG_SYS_I2C_EEPROM_BUS       2\n+#endif\n+\n #define NC_PAD_CTRL (PAD_CTL_PUS_100K_UP |\t\\\n \tPAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |\t\\\n \tPAD_CTL_HYS)\n@@ -528,6 +539,102 @@ int overwrite_console(void)\n \treturn 1;\n }\n \n+#define VPD_TYPE_INVALID 0x00\n+#define VPD_BLOCK_NETWORK 0x20\n+#define VPD_BLOCK_HWID 0x44\n+#define VPD_PRODUCT_B850 1\n+#define VPD_PRODUCT_B650 2\n+#define VPD_PRODUCT_B450 3\n+\n+struct vpd_cache {\n+\tuint8_t product_id;\n+\tuint8_t macbits;\n+\tunsigned char mac1[6];\n+};\n+\n+/*\n+ * Extracts MAC and product information from the VPD.\n+ */\n+static int vpd_callback(\n+\tvoid *userdata,\n+\tuint8_t id,\n+\tuint8_t version,\n+\tuint8_t type,\n+\tsize_t size,\n+\tuint8_t const *data)\n+{\n+\tstruct vpd_cache *vpd = (struct vpd_cache *)userdata;\n+\n+\tif (   id == VPD_BLOCK_HWID\n+\t    && version == 1\n+\t    && type != VPD_TYPE_INVALID\n+\t    && size >= 1) {\n+\t\tvpd->product_id = data[0];\n+\n+\t} else if (   id == VPD_BLOCK_NETWORK\n+\t\t   && version == 1\n+\t\t   && type != VPD_TYPE_INVALID\n+\t\t   && size >= 6) {\n+\t\tvpd->macbits |= 1;\n+\t\tmemcpy(vpd->mac1, data, 6);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static void set_eth0_mac_address(unsigned char * mac)\n+{\n+\tuint32_t *ENET_TCR = (uint32_t*)0x21880c4;\n+\tuint32_t *ENET_PALR = (uint32_t*)0x21880e4;\n+\tuint32_t *ENET_PAUR = (uint32_t*)0x21880e8;\n+\n+\t*ENET_TCR |= 0x100;  /* ADDINS */\n+\t*ENET_PALR |= (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3];\n+\t*ENET_PAUR |= (mac[4] << 24) | (mac[5] << 16);\n+}\n+\n+static void process_vpd(struct vpd_cache *vpd)\n+{\n+\tif (   vpd->product_id == VPD_PRODUCT_B850\n+\t    || vpd->product_id == VPD_PRODUCT_B650\n+\t    || vpd->product_id == VPD_PRODUCT_B450) {\n+\t\tif (vpd->macbits & 1) {\n+\t\t\tset_eth0_mac_address(vpd->mac1);\n+\t\t}\n+\t}\n+}\n+\n+static int read_vpd(uint eeprom_bus)\n+{\n+\tstruct vpd_cache vpd;\n+\tint res;\n+\tint size = 1024;\n+\tuint8_t *data;\n+\tunsigned int current_i2c_bus = i2c_get_bus_num();\n+\n+\tres = i2c_set_bus_num(eeprom_bus);\n+\tif (res < 0)\n+\t\treturn res;\n+\n+\tdata = (uint8_t *)malloc(size);\n+\tif (!data)\n+\t\treturn -ENOMEM;\n+\n+\tres = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,\n+\t\t\tCONFIG_SYS_I2C_EEPROM_ADDR_LEN, data, size);\n+\n+\tif (res == 0) {\n+\t\tmemset(&vpd, 0, sizeof(vpd));\n+\t\tvpd_reader(size, data, &vpd, vpd_callback);\n+\t\tprocess_vpd(&vpd);\n+\t}\n+\n+\tfree(data);\n+\n+\ti2c_set_bus_num(current_i2c_bus);\n+\treturn res;\n+}\n+\n int board_eth_init(bd_t *bis)\n {\n \tsetup_iomux_enet();\n@@ -586,6 +693,8 @@ int board_init(void)\n \tsetup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);\n \tsetup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3);\n \n+\tread_vpd(CONFIG_SYS_I2C_EEPROM_BUS);\n+\n \treturn 0;\n }\n \ndiff --git a/board/ge/bx50v3/vpd_reader.c b/board/ge/bx50v3/vpd_reader.c\nnew file mode 100644\nindex 0000000..98da893\n--- /dev/null\n+++ b/board/ge/bx50v3/vpd_reader.c\n@@ -0,0 +1,228 @@\n+/*\n+ * Copyright 2016 General Electric Company\n+ *\n+ * SPDX-License-Identifier:\tGPL-2.0+\n+ */\n+\n+#include \"vpd_reader.h\"\n+\n+#include <linux/bch.h>\n+#include <stdlib.h>\n+\n+\n+/* BCH configuration */\n+\n+const struct {\n+\tint header_ecc_capability_bits;\n+\tint data_ecc_capability_bits;\n+\tunsigned int prim_poly;\n+\tstruct {\n+\t\tint min;\n+\t\tint max;\n+\t} galois_field_order;\n+} bch_configuration = {\n+\t.header_ecc_capability_bits = 4,\n+\t.data_ecc_capability_bits = 16,\n+\t.prim_poly = 0,\n+\t.galois_field_order = {\n+\t\t.min = 5,\n+\t\t.max = 15,\n+\t},\n+};\n+\n+static int calculate_galois_field_order(size_t source_length)\n+{\n+\tint gfo = bch_configuration.galois_field_order.min;\n+\n+\tfor (; gfo < bch_configuration.galois_field_order.max &&\n+\t     ((((1 << gfo) - 1) - ((int)source_length * 8)) < 0);\n+\t     gfo++) {\n+\t}\n+\n+\tif (gfo == bch_configuration.galois_field_order.max) {\n+\t\treturn -1;\n+\t}\n+\n+\treturn gfo + 1;\n+}\n+\n+static int verify_bch(int ecc_bits, unsigned int prim_poly,\n+\tuint8_t * data, size_t data_length,\n+\tconst uint8_t * ecc, size_t ecc_length)\n+{\n+\tint gfo = calculate_galois_field_order(data_length);\n+\tif (gfo < 0) {\n+\t\treturn -1;\n+\t}\n+\n+\tstruct bch_control * bch = init_bch(gfo, ecc_bits, prim_poly);\n+\tif (!bch) {\n+\t\treturn -1;\n+\t}\n+\n+\tif (bch->ecc_bytes != ecc_length) {\n+\t\tfree_bch(bch);\n+\t\treturn -1;\n+\t}\n+\n+\tunsigned * errloc = (unsigned *)calloc(data_length, sizeof(unsigned));\n+\tint errors = decode_bch(\n+\t\t\tbch, data, data_length, ecc, NULL, NULL, errloc);\n+\tfree_bch(bch);\n+\tif (errors < 0) {\n+\t\tfree(errloc);\n+\t\treturn -1;\n+\t}\n+\n+\tif (errors > 0) {\n+\t\tfor (int n = 0; n < errors; n++) {\n+\t\t\tif (errloc[n] >= 8 * data_length) {\n+\t\t\t\t/* n-th error located in ecc (no need for data correction) */\n+\t\t\t} else {\n+\t\t\t\t/* n-th error located in data */\n+\t\t\t\tdata[errloc[n] / 8] ^= 1 << (errloc[n] % 8);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tfree(errloc);\n+\treturn 0;\n+}\n+\n+\n+static const int ID = 0;\n+static const int LEN = 1;\n+static const int VER = 2;\n+static const int TYP = 3;\n+static const int BLOCK_SIZE = 4;\n+\n+static const uint8_t HEADER_BLOCK_ID = 0x00;\n+static const uint8_t HEADER_BLOCK_LEN = 18;\n+static const uint32_t HEADER_BLOCK_MAGIC = 0xca53ca53;\n+static const size_t HEADER_BLOCK_VERIFY_LEN = 14;\n+static const size_t HEADER_BLOCK_ECC_OFF = 14;\n+static const size_t HEADER_BLOCK_ECC_LEN = 4;\n+\n+static const uint8_t ECC_BLOCK_ID = 0xFF;\n+\n+int vpd_reader(\n+\tsize_t size,\n+\tuint8_t * data,\n+\tvoid * userdata,\n+\tint (*fn)(\n+\t    void * userdata,\n+\t    uint8_t id,\n+\t    uint8_t version,\n+\t    uint8_t type,\n+\t    size_t size,\n+\t    uint8_t const * data))\n+{\n+\tif (   size < HEADER_BLOCK_LEN\n+\t    || data == NULL\n+\t    || fn == NULL) {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/*\n+\t * +--------------------+--------------------+--//--+--------------------+\n+\t * | header block       | data block         | ...  | ecc block          |\n+\t * +--------------------+--------------------+--//--+--------------------+\n+\t * :                    :                           :\n+\t * +------+-------+-----+                           +------+-------------+\n+\t * | id   | magic | ecc |                           | ...  | ecc         |\n+\t * | len  | off   |     |                           +------+-------------+\n+\t * | ver  | size  |     |                           :\n+\t * | type |       |     |                           :\n+\t * +------+-------+-----+                           :\n+\t * :              :     :                           :\n+\t * <----- [1] ---->     <----------- [2] ----------->\n+\t *\n+\t * Repair (if necessary) the contents of header block [1] by using a\n+\t * 4 byte ECC located at the end of the header block.  A successful\n+\t * return value means that we can trust the header.\n+\t */\n+\tint ret = verify_bch(\n+\t\tbch_configuration.header_ecc_capability_bits,\n+\t\tbch_configuration.prim_poly,\n+\t\tdata,\n+\t\tHEADER_BLOCK_VERIFY_LEN,\n+\t\t&data[HEADER_BLOCK_ECC_OFF],\n+\t\tHEADER_BLOCK_ECC_LEN);\n+\tif (ret < 0) {\n+\t\treturn ret;\n+\t}\n+\n+\t/* Validate header block { id, length, version, type }. */\n+\tif (   data[ID] != HEADER_BLOCK_ID\n+\t    || data[LEN] != HEADER_BLOCK_LEN\n+\t    || data[VER] != 0\n+\t    || data[TYP] != 0\n+\t    || ntohl(*(uint32_t *)(&data[4])) != HEADER_BLOCK_MAGIC) {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tuint32_t offset = ntohl(*(uint32_t *)(&data[8]));\n+\tuint16_t size_bits = ntohs(*(uint16_t *)(&data[12]));\n+\n+\t/* Check that ECC header fits. */\n+\tif (offset + 3 >= size) {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Validate ECC block. */\n+\tuint8_t * ecc = &data[offset];\n+\tif (   ecc[ID] != ECC_BLOCK_ID\n+\t    || ecc[LEN] < BLOCK_SIZE\n+\t    || ecc[LEN] + offset > size\n+\t    || ecc[LEN] - BLOCK_SIZE != size_bits / 8\n+\t    || ecc[VER] != 1\n+\t    || ecc[TYP] != 1) {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/*\n+\t * Use the header block to locate the ECC block and verify the data\n+\t * blocks [2] against the ecc block ECC.\n+\t */\n+\tret = verify_bch(\n+\t\tbch_configuration.data_ecc_capability_bits,\n+\t\tbch_configuration.prim_poly,\n+\t\t&data[data[LEN]],\n+\t\toffset - data[LEN],\n+\t\t&data[offset + BLOCK_SIZE],\n+\t\tecc[LEN] - BLOCK_SIZE);\n+\tif (ret < 0) {\n+\t\treturn ret;\n+\t}\n+\n+\t/* Stop after ECC.  Ignore possible zero padding. */\n+\tsize = offset;\n+\n+\tfor (;;) {\n+\t\t/* Move to next block. */\n+\t\tsize -= data[LEN];\n+\t\tdata += data[LEN];\n+\n+\t\tif (size == 0) {\n+\t\t\t/* Finished iterating through blocks. */\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\tif (   size < BLOCK_SIZE\n+\t\t    || data[LEN] < BLOCK_SIZE) {\n+\t\t\t/* Not enough data for a header, or short header. */\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tret = fn(\n+\t\t\tuserdata,\n+\t\t\tdata[ID],\n+\t\t\tdata[VER],\n+\t\t\tdata[TYP],\n+\t\t\tdata[LEN] - BLOCK_SIZE,\n+\t\t\t&data[BLOCK_SIZE]);\n+\t\tif (ret) {\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n+}\ndiff --git a/board/ge/bx50v3/vpd_reader.h b/board/ge/bx50v3/vpd_reader.h\nnew file mode 100644\nindex 0000000..efa172a\n--- /dev/null\n+++ b/board/ge/bx50v3/vpd_reader.h\n@@ -0,0 +1,25 @@\n+/*\n+ * Copyright 2016 General Electric Company\n+ *\n+ * SPDX-License-Identifier:\tGPL-2.0+\n+ */\n+\n+#include \"common.h\"\n+\n+/*\n+ * Read VPD from given data, verify content, and call callback\n+ * for each vital product data block.\n+ *\n+ * Returns Non-zero on error.  Negative numbers encode errno.\n+ */\n+int vpd_reader(\n+\tsize_t size,\n+\tuint8_t * data,\n+\tvoid * userdata,\n+\tint (*fn)(\n+\t    void * userdata,\n+\t    uint8_t id,\n+\t    uint8_t version,\n+\t    uint8_t type,\n+\t    size_t size,\n+\t    uint8_t const * data));\ndiff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h\nindex d090cdd..278940a 100644\n--- a/include/configs/ge_bx50v3.h\n+++ b/include/configs/ge_bx50v3.h\n@@ -313,4 +313,19 @@\n #define CONFIG_SYS_I2C_MXC_I2C2\n #define CONFIG_SYS_I2C_MXC_I2C3\n \n+#define CONFIG_SYS_NUM_I2C_BUSES        9\n+#define CONFIG_SYS_I2C_MAX_HOPS         1\n+#define CONFIG_SYS_I2C_BUSES\t{\t{0, {I2C_NULL_HOP} }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 0} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 1} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 2} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 3} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 4} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 5} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 6} } }, \\\n+\t\t\t\t\t{0, {{I2C_MUX_PCA9547, 0x70, 7} } }, \\\n+\t\t\t\t}\n+\n+#define CONFIG_BCH\n+\n #endif\t/* __GE_BX50V3_CONFIG_H */\n",
    "prefixes": [
        "U-Boot"
    ]
}