diff options
author | Christian Hemp <c.hemp@phytec.de> | 2018-12-04 10:12:27 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-12-05 08:51:26 +0100 |
commit | 0ef04e7b0a92ba4ee237c7868f62775fb89e7390 (patch) | |
tree | 37012cf9b8033a258fadf05a5a21fdc0557af4c4 /drivers/nvmem | |
parent | 8fc60229cd50eba3a17f2a3b85bc698a3747c517 (diff) | |
download | barebox-0ef04e7b0a92ba4ee237c7868f62775fb89e7390.tar.gz barebox-0ef04e7b0a92ba4ee237c7868f62775fb89e7390.tar.xz |
nvmem: ocotp: Add support for second mac address fuses on imx6ul
The i.MX 6UL/ULL has fuses for two MAC addresses. Both MAC addresses
share the fuse address 0x23.
-----------------------------
0x22 | MAC0 | MAC0 | MAC0 | MAC0 |
-----------------------------
0x23 | MAC0 | MAC0 | MAC1 | MAC1 |
-----------------------------
0x24 | MAC1 | MAC1 | MAC1 | MAC1 |
-----------------------------
So to read the second MAC address the first two bytes of 0x23 need to be
skipped.
Signed-off-by: Christian Hemp <c.hemp@phytec.de>
Signed-off-by: Stefan Riedmueller <s.riedmueller@phytec.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/nvmem')
-rw-r--r-- | drivers/nvmem/ocotp.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/nvmem/ocotp.c b/drivers/nvmem/ocotp.c index e689559ee3..e0cf35f0b7 100644 --- a/drivers/nvmem/ocotp.c +++ b/drivers/nvmem/ocotp.c @@ -70,6 +70,7 @@ #define IMX6_OTP_DATA_ERROR_VAL 0xBADABADA #define DEF_RELAX 20 #define MAC_OFFSET_0 (0x22 * 4) +#define IMX6UL_MAC_OFFSET_1 (0x23 * 4) #define MAC_OFFSET_1 (0x24 * 4) #define MAX_MAC_OFFSETS 2 #define MAC_BYTES 8 @@ -421,10 +422,14 @@ static int imx_ocotp_read_mac(const struct imx_ocotp_data *data, int ret; ret = regmap_bulk_read(map, offset, buf, MAC_BYTES); + if (ret < 0) return ret; - data->format_mac(mac, buf, OCOTP_HW_TO_MAC); + if (offset != IMX6UL_MAC_OFFSET_1) + data->format_mac(mac, buf, OCOTP_HW_TO_MAC); + else + data->format_mac(mac, buf + 2, OCOTP_HW_TO_MAC); return 0; } @@ -639,6 +644,14 @@ static struct imx_ocotp_data imx6sl_ocotp_data = { .format_mac = imx_ocotp_format_mac, }; +static struct imx_ocotp_data imx6ul_ocotp_data = { + .num_regs = 512, + .addr_to_offset = imx6q_addr_to_offset, + .mac_offsets_num = 2, + .mac_offsets = { MAC_OFFSET_0, IMX6UL_MAC_OFFSET_1 }, + .format_mac = imx_ocotp_format_mac, +}; + static struct imx_ocotp_data vf610_ocotp_data = { .num_regs = 512, .addr_to_offset = vf610_addr_to_offset, @@ -667,7 +680,7 @@ static __maybe_unused struct of_device_id imx_ocotp_dt_ids[] = { .data = &imx6sl_ocotp_data, }, { .compatible = "fsl,imx6ul-ocotp", - .data = &imx6q_ocotp_data, + .data = &imx6ul_ocotp_data, }, { .compatible = "fsl,imx8mq-ocotp", .data = &imx8mq_ocotp_data, |