From 2c7e8f4ce61f2e0407c37e98e22bbb13e562b414 Mon Sep 17 00:00:00 2001 From: Ed Tanous Date: Tue, 18 Jun 2019 15:53:56 -0700 Subject: Update to internal 6-18-19 Signed-off-by: Ed Tanous --- .../0052-drivers-jtag-Add-JTAG-core-driver.patch | 64 ++++++++++++++-------- 1 file changed, 40 insertions(+), 24 deletions(-) (limited to 'meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch') diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch index 7ba94a7bc..6c9d46d9d 100644 --- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch +++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch @@ -1,6 +1,6 @@ From 0b8b93851bb79e70e91159f310afd4b56084977f Mon Sep 17 00:00:00 2001 From: "Corona, Ernesto" -Date: Mon, 6 May 2019 10:05:51 -0800 +Date: Fri, 7 Jun 2019 07:37:39 -0800 Subject: [PATCH v29 1/6] drivers: jtag: Add JTAG core driver JTAG class driver provide infrastructure to support hardware/software @@ -58,6 +58,9 @@ Comments pointed by Steven Filary the driver is not in use to allow other HW to own the JTAG bus. Remove SCU register accesses. This register controls the JTAG controller mode (master/slave). +- Fix static analysis issues +- Add support for multichain. Set tap state and xfer operations now include + two tap state arguments: current state and end state. v27->v28 Comments pointed by Steven Filary @@ -253,10 +256,10 @@ Comments pointed by Tobias Klauser drivers/Makefile | 1 + drivers/jtag/Kconfig | 17 +++ drivers/jtag/Makefile | 1 + - drivers/jtag/jtag.c | 314 ++++++++++++++++++++++++++++++++++++++++++++++ + drivers/jtag/jtag.c | 321 ++++++++++++++++++++++++++++++++++++++++++++++ include/linux/jtag.h | 47 +++++++ - include/uapi/linux/jtag.h | 208 ++++++++++++++++++++++++++++++ - 7 files changed, 589 insertions(+) + include/uapi/linux/jtag.h | 214 ++++++++++++++++++++++++++++++ + 7 files changed, 602 insertions(+) create mode 100644 drivers/jtag/Kconfig create mode 100644 drivers/jtag/Makefile create mode 100644 drivers/jtag/jtag.c @@ -317,7 +320,7 @@ new file mode 100644 index 0000000..47503a1 --- /dev/null +++ b/drivers/jtag/jtag.c -@@ -0,0 +1,314 @@ +@@ -0,0 +1,321 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (c) 2018 Mellanox Technologies. All rights reserved. +// Copyright (c) 2018 Oleksandr Shamray @@ -353,7 +356,7 @@ index 0000000..47503a1 +static long jtag_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct jtag *jtag = file->private_data; -+ struct jtag_end_tap_state endstate; ++ struct jtag_tap_state tapstate; + struct jtag_xfer xfer; + struct bitbang_packet bitbang; + struct tck_bitbang *bitbang_data; @@ -392,17 +395,20 @@ index 0000000..47503a1 + break; + + case JTAG_SIOCSTATE: -+ if (copy_from_user(&endstate, (const void __user *)arg, -+ sizeof(struct jtag_end_tap_state))) ++ if (copy_from_user(&tapstate, (const void __user *)arg, ++ sizeof(struct jtag_tap_state))) + return -EFAULT; + -+ if (endstate.endstate > JTAG_STATE_UPDATEIR) ++ if (tapstate.from > JTAG_STATE_CURRENT) + return -EINVAL; + -+ if (endstate.reset > JTAG_FORCE_RESET) ++ if (tapstate.endstate > JTAG_STATE_CURRENT) + return -EINVAL; + -+ err = jtag->ops->status_set(jtag, &endstate); ++ if (tapstate.reset > JTAG_FORCE_RESET) ++ return -EINVAL; ++ ++ err = jtag->ops->status_set(jtag, &tapstate); + break; + + case JTAG_IOCXFER: @@ -419,7 +425,10 @@ index 0000000..47503a1 + if (xfer.direction > JTAG_READ_WRITE_XFER) + return -EINVAL; + -+ if (xfer.endstate > JTAG_STATE_UPDATEIR) ++ if (xfer.from > JTAG_STATE_CURRENT) ++ return -EINVAL; ++ ++ if (xfer.endstate > JTAG_STATE_CURRENT) + return -EINVAL; + + data_size = DIV_ROUND_UP(xfer.length, BITS_PER_BYTE); @@ -607,7 +616,8 @@ index 0000000..47503a1 + struct jtag **ptr; + int ret; + -+ ptr = devres_alloc(devm_jtag_unregister, sizeof(*ptr), GFP_KERNEL); ++ ptr = devres_alloc(devm_jtag_unregister, sizeof(struct jtag *), ++ GFP_KERNEL); + if (!ptr) + return -ENOMEM; + @@ -669,7 +679,7 @@ index 0000000..4153c90 + int (*freq_get)(struct jtag *jtag, u32 *freq); + int (*freq_set)(struct jtag *jtag, u32 freq); + int (*status_get)(struct jtag *jtag, u32 *state); -+ int (*status_set)(struct jtag *jtag, struct jtag_end_tap_state *endst); ++ int (*status_set)(struct jtag *jtag, struct jtag_tap_state *endst); + int (*xfer)(struct jtag *jtag, struct jtag_xfer *xfer, u8 *xfer_data); + int (*mode_set)(struct jtag *jtag, struct jtag_mode *jtag_mode); + int (*bitbang)(struct jtag *jtag, struct bitbang_packet *bitbang, @@ -690,7 +700,7 @@ new file mode 100644 index 0000000..3f9e195 --- /dev/null +++ b/include/uapi/linux/jtag.h -@@ -0,0 +1,208 @@ +@@ -0,0 +1,214 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (c) 2018 Mellanox Technologies. All rights reserved. */ +/* Copyright (c) 2018 Oleksandr Shamray */ @@ -732,7 +742,7 @@ index 0000000..3f9e195 +#define JTAG_XFER_SW_MODE 0 + +/** -+ * enum jtag_endstate: ++ * enum jtag_tapstate: + * + * @JTAG_STATE_TLRESET: JTAG state machine Test Logic Reset state + * @JTAG_STATE_IDLE: JTAG state machine IDLE state @@ -750,8 +760,9 @@ index 0000000..3f9e195 + * @JTAG_STATE_PAUSEIR: JTAG state machine PAUSE_IR state + * @JTAG_STATE_EXIT2IR: JTAG state machine EXIT-2 IR state + * @JTAG_STATE_UPDATEIR: JTAG state machine UPDATE IR state ++ * @JTAG_STATE_CURRENT: JTAG current state, saved by driver + */ -+enum jtag_endstate { ++enum jtag_tapstate { + JTAG_STATE_TLRESET, + JTAG_STATE_IDLE, + JTAG_STATE_SELECTDR, @@ -767,7 +778,8 @@ index 0000000..3f9e195 + JTAG_STATE_EXIT1IR, + JTAG_STATE_PAUSEIR, + JTAG_STATE_EXIT2IR, -+ JTAG_STATE_UPDATEIR ++ JTAG_STATE_UPDATEIR, ++ JTAG_STATE_CURRENT +}; + +/** @@ -806,7 +818,7 @@ index 0000000..3f9e195 +}; + +/** -+ * struct jtag_end_tap_state - forces JTAG state machine to go into a TAPC ++ * struct jtag_tap_state - forces JTAG state machine to go into a TAPC + * state + * + * @reset: 0 - run IDLE/PAUSE from current state @@ -816,8 +828,9 @@ index 0000000..3f9e195 + * + * Structure provide interface to JTAG device for JTAG set state execution. + */ -+struct jtag_end_tap_state { ++struct jtag_tap_state { + __u8 reset; ++ __u8 from; + __u8 endstate; + __u8 tck; +}; @@ -827,15 +840,18 @@ index 0000000..3f9e195 + * + * @type: transfer type + * @direction: xfer direction -+ * @length: xfer bits len ++ * @from: xfer current state ++ * @endstate: xfer end state ++ * @padding: xfer padding ++ * @length: xfer bits length + * @tdio : xfer data array -+ * @endir: xfer end state + * + * Structure provide interface to JTAG device for JTAG SDR/SIR xfer execution. + */ +struct jtag_xfer { + __u8 type; + __u8 direction; ++ __u8 from; + __u8 endstate; + __u8 padding; + __u32 length; @@ -890,11 +906,11 @@ index 0000000..3f9e195 +/* ioctl interface */ +#define __JTAG_IOCTL_MAGIC 0xb2 + -+#define JTAG_SIOCSTATE _IOW(__JTAG_IOCTL_MAGIC, 0, struct jtag_end_tap_state) ++#define JTAG_SIOCSTATE _IOW(__JTAG_IOCTL_MAGIC, 0, struct jtag_tap_state) +#define JTAG_SIOCFREQ _IOW(__JTAG_IOCTL_MAGIC, 1, unsigned int) +#define JTAG_GIOCFREQ _IOR(__JTAG_IOCTL_MAGIC, 2, unsigned int) +#define JTAG_IOCXFER _IOWR(__JTAG_IOCTL_MAGIC, 3, struct jtag_xfer) -+#define JTAG_GIOCSTATUS _IOWR(__JTAG_IOCTL_MAGIC, 4, enum jtag_endstate) ++#define JTAG_GIOCSTATUS _IOWR(__JTAG_IOCTL_MAGIC, 4, enum jtag_tapstate) +#define JTAG_SIOCMODE _IOW(__JTAG_IOCTL_MAGIC, 5, unsigned int) +#define JTAG_IOCBITBANG _IOW(__JTAG_IOCTL_MAGIC, 6, unsigned int) + -- cgit v1.2.3