All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: Re: [PATCH] pcie: aer: aerdrv: PCIe AER workaround and handling for ASR1K platforms.
@ 2016-10-22  3:27 ` David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco)
  0 siblings, 0 replies; 2+ messages in thread
From: David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco) @ 2016-10-22  3:27 UTC (permalink / raw)
  To: helgaas
  Cc: David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco),
	linux-pci, linux-kernel, Steve Shih (sshih),
	xe-kernel

Bjorn,

   sorry for the delay in getting back to you.  The first patch was incomplete.  The patch was not a 
complete unit.  There was a second patch that has the callers of the
routines in question.

   Appended are the two patches merged into one new patch.  And here is an explanation from
the original Author,  Steve Shih.

Hi Steve & David,

On Mon, Oct 17, 2016 at 09:51:06AM -0700, David Singleton wrote:
> From: Steve Shih 
<sshih@cisco.com>

> 
> ASR1K FPGAs and ASICs are configured to raise SERR/PERR through PCIe AER.
> When an error is raised, it is detected at the root complex, but it is not
> detected by the AER driver. If the root complex bridge control register is
> configured to forward secondary bus errors to the primary bus (which is not
> the case by default), then the aerdrv.c:aer_irq() is invoked, but the id read
> from the PCI_ERR_ROOT_COR_SRC register is 0. When aer_isr_one_error()
> processes the work posted by aer_irq(), it subsequently complains that
> "aer_isr_one_err->can't find device of ID0000".
> 
> Modifications need to be made such that PCIe AER are propagated through the
> root complex detected by the AER driver and delivered to the ASR1K PCI error
> handler.
> 
> In additions, MCH5100 and 3500/5500 JF send broadcast EOI to subordinate
> devices. However, the Cisco FPGAs and ASICs don't handle the vendor (Intel)
> specific messages properly and rases Uncorrectable and Unsupported Request
> errors. Thus, need to disable EOI Broadcast.
> 
> This change is needed to support 1RU, FP40, Kingpin, FP80, and FP160.

Can you help me understand this?  I'm having trouble connecting the
changelog to the patch.  The patch adds a pci_aer_set_callbacks()
interface, but no users of it.  It also adds a pci_fixup_aer_enable
fixup phase, but it is also unused.

The changelog mentions a change to the root complex bridge control
register, but I don't see that in the patch.  It also mentions a
broadcast EOI change, which also doesn't appear in the patch.

We have another platform where AER doesn't work with the existing
Linux driver; see [1].  It'd be nice if it turned out that the same
sort of change would help both that system and your Cisco platforms.

I'm familiar with the normal PCI Bridge Control Register.  But I don't
know what the "root complex bridge control register" is.  Can you
point me to a section of the spec?  Since you mention forwarding
secondary bus errors to the primary bus, maybe you mean a Root Port
bridge control register?

Is this a case of the hardware not quite conforming to the spec, or is
it a case of spec-compliant hardware where Linux is just missing
support for this particular case?

I'm going to resist adding a new fixup phase, especially one as
special-purpose as this one appears to be.  Without seeing the way you
want to actually use it, it's hard to tell, but likely one of the
existing fixup phases would be enough.

Bjorn



  Yes, it’s the root port PCI bridge control register at offset 0x3e:
 
#define PCI_BRIDGE_CONTROL      0x3e
#define  PCI_BRIDGE_CTL_PARITY  0x01    /* Enable parity detection on secondary interface */
#define  PCI_BRIDGE_CTL_SERR    0x02    /* The same for SERR forwarding */
#define  PCI_BRIDGE_CTL_ISA     0x04    /* Enable ISA mode */
#define  PCI_BRIDGE_CTL_VGA     0x08    /* Forward VGA addresses */
#define  PCI_BRIDGE_CTL_MASTER_ABORT    0x20  /* Report master aborts */
#define  PCI_BRIDGE_CTL_BUS_RESET       0x40    /* Secondary bus reset */
#define  PCI_BRIDGE_CTL_FAST_BACK       0x80    /* Fast Back2Back enabled on secondary interface */
 
        /*
         * We must also forward #SERR and #PERR from the secondary
         * to primary bus.  This will result in the AER driver
         * receiving an interrupt that can then be delivered to
         * the device specific driver.
         */
        pci_read_config_word(pdev, PCI_BRIDGE_CONTROL, &reg16);
        reg16 |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR;
        pci_write_config_word(pdev, PCI_BRIDGE_CONTROL, reg16);
 
 
Yes, the Cisco FPGA/ASIC is not confirming to the PCIe standard in handling vendor specific messages. Instead of ignoring the Intel specific messages, the FPGA/ASIC raises Uncorrectable and Unsupported Request errors.
 
        /*
         * 3500/5500 series CPUs (JF) send broadcast EOI to
         * subordinate devices. It is a vendor (Intel) specific
         * message that should be ignored by non-Intel devices,
         * but our devices (Yoda etc) do not ignore it and
         * raise Uncorrectable and Unsupported Request
         * errors.
         *
         * The EOI is for the Intel IO APIC, which is not
         * present and therefore not required.
         *
         * Disable EOI Broadcast to avoid Uncorrectable and
         * Unsupported request errors from devices which do
         * not support the EOI and do not adhere to the PCIe
         * spec.
         */
        pci_read_config_dword(pdev, MISCCTRLSTS_REG, &reg32);
        reg32 |= MISCCTRLSTS_DISABLE_EOI_MASK;
        pci_write_config_dword(pdev, MISCCTRLSTS_REG, reg32);
 
-Steve

>From bf52b18d6babf4d1ff79b6036369af9d5dc991be Mon Sep 17 00:00:00 2001
From: Steve Shih <sshih@cisco.com>
Date: Mon, 10 Oct 2016 19:23:58 -0700
Subject: [PATCH] pcie: aer: aerdrv: PCIe AER workaround and handling for ASR1K
 platforms.

ASR1K FPGAs and ASICs are configured to raise SERR/PERR through PCIe AER.
When an error is raised, it is detected at the root complex, but it is not
detected by the AER driver. If the root complex bridge control register is
configured to forward secondary bus errors to the primary bus (which is not
the case by default), then the aerdrv.c:aer_irq() is invoked, but the id read
from the PCI_ERR_ROOT_COR_SRC register is 0. When aer_isr_one_error()
processes the work posted by aer_irq(), it subsequently complains that
"aer_isr_one_err->can't find device of ID0000".

Modifications need to be made such that PCIe AER are propagated through the
root complex detected by the AER driver and delivered to the ASR1K PCI error
handler.

In additions, MCH5100 and 3500/5500 JF send broadcast EOI to subordinate
devices. However, the Cisco FPGAs and ASICs don't handle the vendor (Intel)
specific messages properly and rases Uncorrectable and Unsupported Request
errors. Thus, need to disable EOI Broadcast.

This change is needed to support 1RU, FP40, Kingpin, FP80, and FP160.

Cc: xe-kernel@external.cisco.com
Signed-off-by: Steve Shih <sshih@cisco.com>
Signed-off-by: David Singleton <davsingl@cisco.com>
---
 arch/x86/Kconfig                    |   9 ++
 arch/x86/platform/Makefile          |   1 +
 arch/x86/platform/asr1k/Makefile    |   1 +
 arch/x86/platform/asr1k/asr1k_aer.c | 165 ++++++++++++++++++++++++++++++++++++
 drivers/pci/pcie/aer/aerdrv.c       |  13 +++
 drivers/pci/pcie/aer/aerdrv.h       |   5 ++
 drivers/pci/quirks.c                |   7 ++
 include/asm-generic/vmlinux.lds.h   |   3 +
 include/linux/pci.h                 |   5 ++
 9 files changed, 209 insertions(+)
 create mode 100644 arch/x86/platform/asr1k/Makefile
 create mode 100644 arch/x86/platform/asr1k/asr1k_aer.c

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index bada636..11bdcb2 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -449,6 +449,15 @@ config X86_EXTENDED_PLATFORM
 endif
 # This is an alphabetically sorted list of 64 bit extended platforms
 # Please maintain the alphabetic order if and when there are additions
+
+config X86_ASR1K
+	bool "Cisco ASR1K"
+	depends on X86_64
+	depends on X86_EXTENDED_PLATFORM
+	---help---
+	  This option is needed in order to support Cisco ASR1K platforms.
+	  If you don't have one of these, you should say N here.
+
 config X86_NUMACHIP
 	bool "Numascale NumaChip"
 	depends on X86_64
diff --git a/arch/x86/platform/Makefile b/arch/x86/platform/Makefile
index 3c3c19e..cbae8c2 100644
--- a/arch/x86/platform/Makefile
+++ b/arch/x86/platform/Makefile
@@ -1,5 +1,6 @@
 # Platform specific code goes here
 obj-y	+= atom/
+obj-$(X86_ASR1K)	+= asr1k/
 obj-y	+= ce4100/
 obj-y	+= efi/
 obj-y	+= geode/
diff --git a/arch/x86/platform/asr1k/Makefile b/arch/x86/platform/asr1k/Makefile
new file mode 100644
index 0000000..0219e40
--- /dev/null
+++ b/arch/x86/platform/asr1k/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_PCIEAER)	+= asr1k_aer.o
diff --git a/arch/x86/platform/asr1k/asr1k_aer.c b/arch/x86/platform/asr1k/asr1k_aer.c
new file mode 100644
index 0000000..6962672
--- /dev/null
+++ b/arch/x86/platform/asr1k/asr1k_aer.c
@@ -0,0 +1,165 @@
+/*
+ * Cisco ASR1K platform PCIe AER support
+ *
+ * Copyright (c) 2015 by cisco Systems, Inc.
+ */
+
+#include <linux/pci.h>
+#include <../../../drivers/pci/pcie/aer/aerdrv.h>
+
+/* MCH 5100 */
+#define PCI_DEVICE_ID_5100_PORT_0   	0x7270
+#define PCI_DEVICE_ID_5100_PORT_2_3	0x65F7
+#define PCI_DEVICE_ID_5100_PORT_6	0x65E6
+#define PEXCTRL3			0x4D
+#define PEXCTRL3_MSI_RAS_ERREN		0x01
+#define PEXCTRL				0x48
+#define PEXCTRL_DIS_APIC_EOI		0x02
+
+/* Jasper Forest - 3500/5500 Series */
+#define PCI_DEVICE_ID_3500_PORT_1	0x3721
+#define PCI_DEVICE_ID_3500_PORT_2	0x3722
+#define PCI_DEVICE_ID_3500_PORT_3	0x3723
+#define PCI_DEVICE_ID_3500_PORT_4	0x3724
+#define MISCCTRLSTS_REG			0x188
+#define MISCCTRLSTS_DISABLE_EOI_MASK	0x04000000
+
+static int aer_err_src_mch5100(struct pci_dev *pdev, unsigned int *id)
+{
+	/*
+	 * MCH 5100 doesn't populate src register, explained
+	 * in an errata, so hard coding the source id
+	 */
+	*id = ((pdev->devfn << 16) | pdev->devfn);
+
+	return 0;
+}
+
+static int aer_err_src_jf(struct pci_dev *pdev, unsigned int *id)
+{
+	/*
+	 * Xeon 3500/5500 series (Jasper Forest) doesn't populate
+	 * the source register either, so we must hard code.
+	 */
+	unsigned int devfn = (pdev->subordinate->number << 8) |
+				PCI_DEVFN(0,0);
+	*id = (devfn << 16) | devfn;
+
+	return 0;
+}
+
+int aer_err_src(struct pci_dev *dev, unsigned int *id)
+{
+	if ((dev->vendor == PCI_VENDOR_ID_INTEL) &&
+	    ((dev->device == PCI_DEVICE_ID_5100_PORT_0) ||
+	     (dev->device == PCI_DEVICE_ID_5100_PORT_2_3) ||
+	     (dev->device == PCI_DEVICE_ID_5100_PORT_6)))
+		return aer_err_src_mch5100(dev, id);
+
+	if ((dev->vendor == PCI_VENDOR_ID_INTEL) &&
+	    ((dev->device == PCI_DEVICE_ID_3500_PORT_1) ||
+	     (dev->device == PCI_DEVICE_ID_3500_PORT_2) ||
+	     (dev->device == PCI_DEVICE_ID_3500_PORT_3) ||
+	     (dev->device == PCI_DEVICE_ID_3500_PORT_4)))
+		return aer_err_src_jf(dev, id);
+
+	return 0;
+}
+
+static bool aer_callbacks_set;
+
+static struct pci_aer_callbacks aer_callbacks = {
+	.error_source = aer_err_src,
+};
+
+static void aer_enable_rootport_mch5100(struct pci_dev *pdev)
+{
+	u32 reg32;
+	u8 reg8;
+
+	if (!aer_callbacks_set) {
+		pci_aer_set_callbacks(&aer_callbacks);
+		aer_callbacks_set = true;
+	}
+
+	/*
+	 * MCH5100 sends broadcast EOI to subordinate
+	 * devices. It is a vendor (Intel) specific message
+	 * that should be ignored by non-Intel devices, but
+	 * our devices (Hytop etc) do not ignore it and
+	 * raise Uncorrectable and Unsupported Request
+	 * errors.
+	 *
+	 * The EOI is for the Intel IO APIC, which is not
+	 * present and therefore not required.
+	 *
+	 * Disable EOI Broadcast to avoid Uncorrectable and
+	 * Unsupported request errors from devices which do
+	 * not support the EOI and do not adhere to the PCIe
+	 * spec.
+	 */
+	pci_read_config_dword(pdev, PEXCTRL, &reg32);
+	reg32 |= PEXCTRL_DIS_APIC_EOI;
+	pci_write_config_dword(pdev, PEXCTRL, reg32);
+
+	/* Enable MSI */
+	pci_read_config_byte(pdev, PEXCTRL3, &reg8);
+	reg8 |= PEXCTRL3_MSI_RAS_ERREN;
+	pci_write_config_byte(pdev, PEXCTRL3, reg8);
+}
+
+static void aer_enable_rootport_jf(struct pci_dev *pdev)
+{
+	u32 reg32;
+	u16 reg16;
+
+	if (!aer_callbacks_set) {
+		pci_aer_set_callbacks(&aer_callbacks);
+		aer_callbacks_set = true;
+	}
+
+	/*
+	 * 3500/5500 series CPUs (JF) send broadcast EOI to
+	 * subordinate devices. It is a vendor (Intel) specific
+	 * message that should be ignored by non-Intel devices,
+	 * but our devices (Yoda etc) do not ignore it and
+	 * raise Uncorrectable and Unsupported Request
+	 * errors.
+	 *
+	 * The EOI is for the Intel IO APIC, which is not
+	 * present and therefore not required.
+	 *
+	 * Disable EOI Broadcast to avoid Uncorrectable and
+	 * Unsupported request errors from devices which do
+	 * not support the EOI and do not adhere to the PCIe
+	 * spec.
+	 */
+	pci_read_config_dword(pdev, MISCCTRLSTS_REG, &reg32);
+	reg32 |= MISCCTRLSTS_DISABLE_EOI_MASK;
+	pci_write_config_dword(pdev, MISCCTRLSTS_REG, reg32);
+
+	/*
+	 * We must also forward #SERR and #PERR from the secondary
+	 * to primary bus.  This will result in the AER driver
+	 * receiving an interrupt that can then be delivered to
+	 * the device specific driver.
+	 */
+	pci_read_config_word(pdev, PCI_BRIDGE_CONTROL, &reg16);
+	reg16 |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR;
+	pci_write_config_word(pdev, PCI_BRIDGE_CONTROL, reg16);
+}
+
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_5100_PORT_0,
+				aer_enable_rootport_mch5100);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_5100_PORT_2_3,
+				aer_enable_rootport_mch5100);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_5100_PORT_6,
+				aer_enable_rootport_mch5100);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_3500_PORT_1,
+				aer_enable_rootport_jf);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_3500_PORT_2,
+				aer_enable_rootport_jf);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_3500_PORT_3,
+				aer_enable_rootport_jf);
+DECLARE_PCI_FIXUP_AER_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_3500_PORT_4,
+				aer_enable_rootport_jf);
diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c
index 139150b..836e0cb 100644
--- a/drivers/pci/pcie/aer/aerdrv.c
+++ b/drivers/pci/pcie/aer/aerdrv.c
@@ -62,6 +62,8 @@ static struct pcie_port_service_driver aerdriver = {
 	.reset_link	= aer_root_reset,
 };
 
+static struct pci_aer_callbacks callbacks;
+
 static int pcie_aer_disable;
 
 void pci_no_aer(void)
@@ -74,6 +76,11 @@ bool pci_aer_available(void)
 	return !pcie_aer_disable && pci_msi_enabled();
 }
 
+void pci_aer_set_callbacks(struct pci_aer_callbacks *cb)
+{
+	memcpy(&callbacks, cb, sizeof(*cb));
+}
+
 static int set_device_error_reporting(struct pci_dev *dev, void *data)
 {
 	bool enable = *((bool *)data);
@@ -149,6 +156,8 @@ static void aer_enable_rootport(struct aer_rpc *rpc)
 	pci_read_config_dword(pdev, aer_pos + PCI_ERR_ROOT_COMMAND, &reg32);
 	reg32 |= ROOT_PORT_INTR_ON_MESG_MASK;
 	pci_write_config_dword(pdev, aer_pos + PCI_ERR_ROOT_COMMAND, reg32);
+
+	pci_fixup_device(pci_fixup_aer_enable, pdev);
 }
 
 /**
@@ -212,6 +221,10 @@ irqreturn_t aer_irq(int irq, void *context)
 
 	/* Read error source and clear error status */
 	pci_read_config_dword(pdev->port, pos + PCI_ERR_ROOT_ERR_SRC, &id);
+
+	if (callbacks.error_source)
+		callbacks.error_source(pdev->port, &id);
+
 	pci_write_config_dword(pdev->port, pos + PCI_ERR_ROOT_STATUS, status);
 
 	/* Store error source for later DPC handler */
diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h
index d51e4a5..79ac642 100644
--- a/drivers/pci/pcie/aer/aerdrv.h
+++ b/drivers/pci/pcie/aer/aerdrv.h
@@ -80,6 +80,10 @@ struct aer_broadcast_data {
 	enum pci_ers_result result;
 };
 
+struct pci_aer_callbacks {
+	int (*error_source)(struct pci_dev *dev, unsigned int *id);
+};
+
 static inline pci_ers_result_t merge_result(enum pci_ers_result orig,
 		enum pci_ers_result new)
 {
@@ -110,6 +114,7 @@ void aer_isr(struct work_struct *work);
 void aer_print_error(struct pci_dev *dev, struct aer_err_info *info);
 void aer_print_port_info(struct pci_dev *dev, struct aer_err_info *info);
 irqreturn_t aer_irq(int irq, void *context);
+void pci_aer_set_callbacks(struct pci_aer_callbacks *cb);
 
 #ifdef CONFIG_ACPI_APEI
 int pcie_aer_get_firmware_first(struct pci_dev *pci_dev);
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index c232729..63b33ff 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -3397,6 +3397,8 @@ extern struct pci_fixup __start_pci_fixups_suspend[];
 extern struct pci_fixup __end_pci_fixups_suspend[];
 extern struct pci_fixup __start_pci_fixups_suspend_late[];
 extern struct pci_fixup __end_pci_fixups_suspend_late[];
+extern struct pci_fixup __start_pci_fixups_aer_enable[];
+extern struct pci_fixup __end_pci_fixups_aer_enable[];
 
 static bool pci_apply_fixup_final_quirks;
 
@@ -3447,6 +3449,11 @@ void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev)
 		end = __end_pci_fixups_suspend_late;
 		break;
 
+	case pci_fixup_aer_enable:
+		start = __start_pci_fixups_aer_enable;
+		end = __end_pci_fixups_aer_enable;
+		break;
+
 	default:
 		/* stupid compiler warning, you would think with an enum... */
 		return;
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 3074796..c646106 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -311,6 +311,9 @@
 		VMLINUX_SYMBOL(__start_pci_fixups_suspend_late) = .;	\
 		*(.pci_fixup_suspend_late)				\
 		VMLINUX_SYMBOL(__end_pci_fixups_suspend_late) = .;	\
+		VMLINUX_SYMBOL(__start_pci_fixups_aer_enable) = .;      \
+		*(.pci_fixup_aer_enable)                                \
+		VMLINUX_SYMBOL(__end_pci_fixups_aer_enable) = .;	\
 	}								\
 									\
 	/* Built-in firmware blobs */					\
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 0e49f70..9a9119c 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1689,6 +1689,7 @@ enum pci_fixup_pass {
 	pci_fixup_suspend,	/* pci_device_suspend() */
 	pci_fixup_resume_early, /* pci_device_resume_early() */
 	pci_fixup_suspend_late,	/* pci_device_suspend_late() */
+	pci_fixup_aer_enable,   /* pci_device_aer_enable() */
 };
 
 /* Anonymous variables would be nice... */
@@ -1763,6 +1764,10 @@ enum pci_fixup_pass {
 	DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late,		\
 		suspend_late##hook, vendor, device,	\
 		PCI_ANY_ID, 0, hook)
+#define DECLARE_PCI_FIXUP_AER_ENABLE(vendor, device, hook)		\
+	DECLARE_PCI_FIXUP_SECTION(.pci_fixup_aer_enable,		\
+		aer_enable##vendor##device##hook, vendor, device,	\
+		PCI_ANY_ID, 0, hook)
 
 #ifdef CONFIG_PCI_QUIRKS
 void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
-- 
2.10.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: Re: [PATCH] pcie: aer: aerdrv: PCIe AER workaround and handling for ASR1K platforms.
@ 2016-10-22  3:27 ` David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco)
  0 siblings, 0 replies; 2+ messages in thread
From: David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco) @ 2016-10-22  3:27 UTC (permalink / raw)
  To: helgaas
  Cc: David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco),
	linux-pci, linux-kernel, Steve Shih (sshih),
	xe-kernel

Qmpvcm4sDQoNCiAgIHNvcnJ5IGZvciB0aGUgZGVsYXkgaW4gZ2V0dGluZyBiYWNrIHRvIHlvdS4g
IFRoZSBmaXJzdCBwYXRjaCB3YXMgaW5jb21wbGV0ZS4gIFRoZSBwYXRjaCB3YXMgbm90IGEgDQpj
b21wbGV0ZSB1bml0LiAgVGhlcmUgd2FzIGEgc2Vjb25kIHBhdGNoIHRoYXQgaGFzIHRoZSBjYWxs
ZXJzIG9mIHRoZQ0Kcm91dGluZXMgaW4gcXVlc3Rpb24uDQoNCiAgIEFwcGVuZGVkIGFyZSB0aGUg
dHdvIHBhdGNoZXMgbWVyZ2VkIGludG8gb25lIG5ldyBwYXRjaC4gIEFuZCBoZXJlIGlzIGFuIGV4
cGxhbmF0aW9uIGZyb20NCnRoZSBvcmlnaW5hbCBBdXRob3IsICBTdGV2ZSBTaGloLg0KDQpIaSBT
dGV2ZSAmIERhdmlkLA0KDQpPbiBNb24sIE9jdCAxNywgMjAxNiBhdCAwOTo1MTowNkFNIC0wNzAw
LCBEYXZpZCBTaW5nbGV0b24gd3JvdGU6DQo+IEZyb206IFN0ZXZlIFNoaWggDQo8c3NoaWhAY2lz
Y28uY29tPg0KDQo+IA0KPiBBU1IxSyBGUEdBcyBhbmQgQVNJQ3MgYXJlIGNvbmZpZ3VyZWQgdG8g
cmFpc2UgU0VSUi9QRVJSIHRocm91Z2ggUENJZSBBRVIuDQo+IFdoZW4gYW4gZXJyb3IgaXMgcmFp
c2VkLCBpdCBpcyBkZXRlY3RlZCBhdCB0aGUgcm9vdCBjb21wbGV4LCBidXQgaXQgaXMgbm90DQo+
IGRldGVjdGVkIGJ5IHRoZSBBRVIgZHJpdmVyLiBJZiB0aGUgcm9vdCBjb21wbGV4IGJyaWRnZSBj
b250cm9sIHJlZ2lzdGVyIGlzDQo+IGNvbmZpZ3VyZWQgdG8gZm9yd2FyZCBzZWNvbmRhcnkgYnVz
IGVycm9ycyB0byB0aGUgcHJpbWFyeSBidXMgKHdoaWNoIGlzIG5vdA0KPiB0aGUgY2FzZSBieSBk
ZWZhdWx0KSwgdGhlbiB0aGUgYWVyZHJ2LmM6YWVyX2lycSgpIGlzIGludm9rZWQsIGJ1dCB0aGUg
aWQgcmVhZA0KPiBmcm9tIHRoZSBQQ0lfRVJSX1JPT1RfQ09SX1NSQyByZWdpc3RlciBpcyAwLiBX
aGVuIGFlcl9pc3Jfb25lX2Vycm9yKCkNCj4gcHJvY2Vzc2VzIHRoZSB3b3JrIHBvc3RlZCBieSBh
ZXJfaXJxKCksIGl0IHN1YnNlcXVlbnRseSBjb21wbGFpbnMgdGhhdA0KPiAiYWVyX2lzcl9vbmVf
ZXJyLT5jYW4ndCBmaW5kIGRldmljZSBvZiBJRDAwMDAiLg0KPiANCj4gTW9kaWZpY2F0aW9ucyBu
ZWVkIHRvIGJlIG1hZGUgc3VjaCB0aGF0IFBDSWUgQUVSIGFyZSBwcm9wYWdhdGVkIHRocm91Z2gg
dGhlDQo+IHJvb3QgY29tcGxleCBkZXRlY3RlZCBieSB0aGUgQUVSIGRyaXZlciBhbmQgZGVsaXZl
cmVkIHRvIHRoZSBBU1IxSyBQQ0kgZXJyb3INCj4gaGFuZGxlci4NCj4gDQo+IEluIGFkZGl0aW9u
cywgTUNINTEwMCBhbmQgMzUwMC81NTAwIEpGIHNlbmQgYnJvYWRjYXN0IEVPSSB0byBzdWJvcmRp
bmF0ZQ0KPiBkZXZpY2VzLiBIb3dldmVyLCB0aGUgQ2lzY28gRlBHQXMgYW5kIEFTSUNzIGRvbid0
IGhhbmRsZSB0aGUgdmVuZG9yIChJbnRlbCkNCj4gc3BlY2lmaWMgbWVzc2FnZXMgcHJvcGVybHkg
YW5kIHJhc2VzIFVuY29ycmVjdGFibGUgYW5kIFVuc3VwcG9ydGVkIFJlcXVlc3QNCj4gZXJyb3Jz
LiBUaHVzLCBuZWVkIHRvIGRpc2FibGUgRU9JIEJyb2FkY2FzdC4NCj4gDQo+IFRoaXMgY2hhbmdl
IGlzIG5lZWRlZCB0byBzdXBwb3J0IDFSVSwgRlA0MCwgS2luZ3BpbiwgRlA4MCwgYW5kIEZQMTYw
Lg0KDQpDYW4geW91IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGlzPyAgSSdtIGhhdmluZyB0cm91Ymxl
IGNvbm5lY3RpbmcgdGhlDQpjaGFuZ2Vsb2cgdG8gdGhlIHBhdGNoLiAgVGhlIHBhdGNoIGFkZHMg
YSBwY2lfYWVyX3NldF9jYWxsYmFja3MoKQ0KaW50ZXJmYWNlLCBidXQgbm8gdXNlcnMgb2YgaXQu
ICBJdCBhbHNvIGFkZHMgYSBwY2lfZml4dXBfYWVyX2VuYWJsZQ0KZml4dXAgcGhhc2UsIGJ1dCBp
dCBpcyBhbHNvIHVudXNlZC4NCg0KVGhlIGNoYW5nZWxvZyBtZW50aW9ucyBhIGNoYW5nZSB0byB0
aGUgcm9vdCBjb21wbGV4IGJyaWRnZSBjb250cm9sDQpyZWdpc3RlciwgYnV0IEkgZG9uJ3Qgc2Vl
IHRoYXQgaW4gdGhlIHBhdGNoLiAgSXQgYWxzbyBtZW50aW9ucyBhDQpicm9hZGNhc3QgRU9JIGNo
YW5nZSwgd2hpY2ggYWxzbyBkb2Vzbid0IGFwcGVhciBpbiB0aGUgcGF0Y2guDQoNCldlIGhhdmUg
YW5vdGhlciBwbGF0Zm9ybSB3aGVyZSBBRVIgZG9lc24ndCB3b3JrIHdpdGggdGhlIGV4aXN0aW5n
DQpMaW51eCBkcml2ZXI7IHNlZSBbMV0uICBJdCdkIGJlIG5pY2UgaWYgaXQgdHVybmVkIG91dCB0
aGF0IHRoZSBzYW1lDQpzb3J0IG9mIGNoYW5nZSB3b3VsZCBoZWxwIGJvdGggdGhhdCBzeXN0ZW0g
YW5kIHlvdXIgQ2lzY28gcGxhdGZvcm1zLg0KDQpJJ20gZmFtaWxpYXIgd2l0aCB0aGUgbm9ybWFs
IFBDSSBCcmlkZ2UgQ29udHJvbCBSZWdpc3Rlci4gIEJ1dCBJIGRvbid0DQprbm93IHdoYXQgdGhl
ICJyb290IGNvbXBsZXggYnJpZGdlIGNvbnRyb2wgcmVnaXN0ZXIiIGlzLiAgQ2FuIHlvdQ0KcG9p
bnQgbWUgdG8gYSBzZWN0aW9uIG9mIHRoZSBzcGVjPyAgU2luY2UgeW91IG1lbnRpb24gZm9yd2Fy
ZGluZw0Kc2Vjb25kYXJ5IGJ1cyBlcnJvcnMgdG8gdGhlIHByaW1hcnkgYnVzLCBtYXliZSB5b3Ug
bWVhbiBhIFJvb3QgUG9ydA0KYnJpZGdlIGNvbnRyb2wgcmVnaXN0ZXI/DQoNCklzIHRoaXMgYSBj
YXNlIG9mIHRoZSBoYXJkd2FyZSBub3QgcXVpdGUgY29uZm9ybWluZyB0byB0aGUgc3BlYywgb3Ig
aXMNCml0IGEgY2FzZSBvZiBzcGVjLWNvbXBsaWFudCBoYXJkd2FyZSB3aGVyZSBMaW51eCBpcyBq
dXN0IG1pc3NpbmcNCnN1cHBvcnQgZm9yIHRoaXMgcGFydGljdWxhciBjYXNlPw0KDQpJJ20gZ29p
bmcgdG8gcmVzaXN0IGFkZGluZyBhIG5ldyBmaXh1cCBwaGFzZSwgZXNwZWNpYWxseSBvbmUgYXMN
CnNwZWNpYWwtcHVycG9zZSBhcyB0aGlzIG9uZSBhcHBlYXJzIHRvIGJlLiAgV2l0aG91dCBzZWVp
bmcgdGhlIHdheSB5b3UNCndhbnQgdG8gYWN0dWFsbHkgdXNlIGl0LCBpdCdzIGhhcmQgdG8gdGVs
bCwgYnV0IGxpa2VseSBvbmUgb2YgdGhlDQpleGlzdGluZyBmaXh1cCBwaGFzZXMgd291bGQgYmUg
ZW5vdWdoLg0KDQpCam9ybg0KDQoNCg0KICBZZXMsIGl04oCZcyB0aGUgcm9vdCBwb3J0IFBDSSBi
cmlkZ2UgY29udHJvbCByZWdpc3RlciBhdCBvZmZzZXQgMHgzZToNCiANCiNkZWZpbmUgUENJX0JS
SURHRV9DT05UUk9MICAgICAgMHgzZQ0KI2RlZmluZSAgUENJX0JSSURHRV9DVExfUEFSSVRZICAw
eDAxICAgIC8qIEVuYWJsZSBwYXJpdHkgZGV0ZWN0aW9uIG9uIHNlY29uZGFyeSBpbnRlcmZhY2Ug
Ki8NCiNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX1NFUlIgICAgMHgwMiAgICAvKiBUaGUgc2FtZSBm
b3IgU0VSUiBmb3J3YXJkaW5nICovDQojZGVmaW5lICBQQ0lfQlJJREdFX0NUTF9JU0EgICAgIDB4
MDQgICAgLyogRW5hYmxlIElTQSBtb2RlICovDQojZGVmaW5lICBQQ0lfQlJJREdFX0NUTF9WR0Eg
ICAgIDB4MDggICAgLyogRm9yd2FyZCBWR0EgYWRkcmVzc2VzICovDQojZGVmaW5lICBQQ0lfQlJJ
REdFX0NUTF9NQVNURVJfQUJPUlQgICAgMHgyMCAgLyogUmVwb3J0IG1hc3RlciBhYm9ydHMgKi8N
CiNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX0JVU19SRVNFVCAgICAgICAweDQwICAgIC8qIFNlY29u
ZGFyeSBidXMgcmVzZXQgKi8NCiNkZWZpbmUgIFBDSV9CUklER0VfQ1RMX0ZBU1RfQkFDSyAgICAg
ICAweDgwICAgIC8qIEZhc3QgQmFjazJCYWNrIGVuYWJsZWQgb24gc2Vjb25kYXJ5IGludGVyZmFj
ZSAqLw0KIA0KICAgICAgICAvKg0KICAgICAgICAgKiBXZSBtdXN0IGFsc28gZm9yd2FyZCAjU0VS
UiBhbmQgI1BFUlIgZnJvbSB0aGUgc2Vjb25kYXJ5DQogICAgICAgICAqIHRvIHByaW1hcnkgYnVz
LiAgVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgQUVSIGRyaXZlcg0KICAgICAgICAgKiByZWNlaXZp
bmcgYW4gaW50ZXJydXB0IHRoYXQgY2FuIHRoZW4gYmUgZGVsaXZlcmVkIHRvDQogICAgICAgICAq
IHRoZSBkZXZpY2Ugc3BlY2lmaWMgZHJpdmVyLg0KICAgICAgICAgKi8NCiAgICAgICAgcGNpX3Jl
YWRfY29uZmlnX3dvcmQocGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAmcmVnMTYpOw0KICAgICAg
ICByZWcxNiB8PSBQQ0lfQlJJREdFX0NUTF9QQVJJVFkgfCBQQ0lfQlJJREdFX0NUTF9TRVJSOw0K
ICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0JSSURHRV9DT05UUk9MLCBy
ZWcxNik7DQogDQogDQpZZXMsIHRoZSBDaXNjbyBGUEdBL0FTSUMgaXMgbm90IGNvbmZpcm1pbmcg
dG8gdGhlIFBDSWUgc3RhbmRhcmQgaW4gaGFuZGxpbmcgdmVuZG9yIHNwZWNpZmljIG1lc3NhZ2Vz
LiBJbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZSBJbnRlbCBzcGVjaWZpYyBtZXNzYWdlcywgdGhlIEZQ
R0EvQVNJQyByYWlzZXMgVW5jb3JyZWN0YWJsZSBhbmQgVW5zdXBwb3J0ZWQgUmVxdWVzdCBlcnJv
cnMuDQogDQogICAgICAgIC8qDQogICAgICAgICAqIDM1MDAvNTUwMCBzZXJpZXMgQ1BVcyAoSkYp
IHNlbmQgYnJvYWRjYXN0IEVPSSB0bw0KICAgICAgICAgKiBzdWJvcmRpbmF0ZSBkZXZpY2VzLiBJ
dCBpcyBhIHZlbmRvciAoSW50ZWwpIHNwZWNpZmljDQogICAgICAgICAqIG1lc3NhZ2UgdGhhdCBz
aG91bGQgYmUgaWdub3JlZCBieSBub24tSW50ZWwgZGV2aWNlcywNCiAgICAgICAgICogYnV0IG91
ciBkZXZpY2VzIChZb2RhIGV0YykgZG8gbm90IGlnbm9yZSBpdCBhbmQNCiAgICAgICAgICogcmFp
c2UgVW5jb3JyZWN0YWJsZSBhbmQgVW5zdXBwb3J0ZWQgUmVxdWVzdA0KICAgICAgICAgKiBlcnJv
cnMuDQogICAgICAgICAqDQogICAgICAgICAqIFRoZSBFT0kgaXMgZm9yIHRoZSBJbnRlbCBJTyBB
UElDLCB3aGljaCBpcyBub3QNCiAgICAgICAgICogcHJlc2VudCBhbmQgdGhlcmVmb3JlIG5vdCBy
ZXF1aXJlZC4NCiAgICAgICAgICoNCiAgICAgICAgICogRGlzYWJsZSBFT0kgQnJvYWRjYXN0IHRv
IGF2b2lkIFVuY29ycmVjdGFibGUgYW5kDQogICAgICAgICAqIFVuc3VwcG9ydGVkIHJlcXVlc3Qg
ZXJyb3JzIGZyb20gZGV2aWNlcyB3aGljaCBkbw0KICAgICAgICAgKiBub3Qgc3VwcG9ydCB0aGUg
RU9JIGFuZCBkbyBub3QgYWRoZXJlIHRvIHRoZSBQQ0llDQogICAgICAgICAqIHNwZWMuDQogICAg
ICAgICAqLw0KICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTUlTQ0NUUkxTVFNf
UkVHLCAmcmVnMzIpOw0KICAgICAgICByZWczMiB8PSBNSVNDQ1RSTFNUU19ESVNBQkxFX0VPSV9N
QVNLOw0KICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIE1JU0NDVFJMU1RTX1JF
RywgcmVnMzIpOw0KIA0KLVN0ZXZlDQoNCkZyb20gYmY1MmIxOGQ2YmFiZjRkMWZmNzliNjAzNjM2
OWFmOWQ1ZGM5OTFiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IFN0ZXZlIFNoaWgg
PHNzaGloQGNpc2NvLmNvbT4NCkRhdGU6IE1vbiwgMTAgT2N0IDIwMTYgMTk6MjM6NTggLTA3MDAN
ClN1YmplY3Q6IFtQQVRDSF0gcGNpZTogYWVyOiBhZXJkcnY6IFBDSWUgQUVSIHdvcmthcm91bmQg
YW5kIGhhbmRsaW5nIGZvciBBU1IxSw0KIHBsYXRmb3Jtcy4NCg0KQVNSMUsgRlBHQXMgYW5kIEFT
SUNzIGFyZSBjb25maWd1cmVkIHRvIHJhaXNlIFNFUlIvUEVSUiB0aHJvdWdoIFBDSWUgQUVSLg0K
V2hlbiBhbiBlcnJvciBpcyByYWlzZWQsIGl0IGlzIGRldGVjdGVkIGF0IHRoZSByb290IGNvbXBs
ZXgsIGJ1dCBpdCBpcyBub3QNCmRldGVjdGVkIGJ5IHRoZSBBRVIgZHJpdmVyLiBJZiB0aGUgcm9v
dCBjb21wbGV4IGJyaWRnZSBjb250cm9sIHJlZ2lzdGVyIGlzDQpjb25maWd1cmVkIHRvIGZvcndh
cmQgc2Vjb25kYXJ5IGJ1cyBlcnJvcnMgdG8gdGhlIHByaW1hcnkgYnVzICh3aGljaCBpcyBub3QN
CnRoZSBjYXNlIGJ5IGRlZmF1bHQpLCB0aGVuIHRoZSBhZXJkcnYuYzphZXJfaXJxKCkgaXMgaW52
b2tlZCwgYnV0IHRoZSBpZCByZWFkDQpmcm9tIHRoZSBQQ0lfRVJSX1JPT1RfQ09SX1NSQyByZWdp
c3RlciBpcyAwLiBXaGVuIGFlcl9pc3Jfb25lX2Vycm9yKCkNCnByb2Nlc3NlcyB0aGUgd29yayBw
b3N0ZWQgYnkgYWVyX2lycSgpLCBpdCBzdWJzZXF1ZW50bHkgY29tcGxhaW5zIHRoYXQNCiJhZXJf
aXNyX29uZV9lcnItPmNhbid0IGZpbmQgZGV2aWNlIG9mIElEMDAwMCIuDQoNCk1vZGlmaWNhdGlv
bnMgbmVlZCB0byBiZSBtYWRlIHN1Y2ggdGhhdCBQQ0llIEFFUiBhcmUgcHJvcGFnYXRlZCB0aHJv
dWdoIHRoZQ0Kcm9vdCBjb21wbGV4IGRldGVjdGVkIGJ5IHRoZSBBRVIgZHJpdmVyIGFuZCBkZWxp
dmVyZWQgdG8gdGhlIEFTUjFLIFBDSSBlcnJvcg0KaGFuZGxlci4NCg0KSW4gYWRkaXRpb25zLCBN
Q0g1MTAwIGFuZCAzNTAwLzU1MDAgSkYgc2VuZCBicm9hZGNhc3QgRU9JIHRvIHN1Ym9yZGluYXRl
DQpkZXZpY2VzLiBIb3dldmVyLCB0aGUgQ2lzY28gRlBHQXMgYW5kIEFTSUNzIGRvbid0IGhhbmRs
ZSB0aGUgdmVuZG9yIChJbnRlbCkNCnNwZWNpZmljIG1lc3NhZ2VzIHByb3Blcmx5IGFuZCByYXNl
cyBVbmNvcnJlY3RhYmxlIGFuZCBVbnN1cHBvcnRlZCBSZXF1ZXN0DQplcnJvcnMuIFRodXMsIG5l
ZWQgdG8gZGlzYWJsZSBFT0kgQnJvYWRjYXN0Lg0KDQpUaGlzIGNoYW5nZSBpcyBuZWVkZWQgdG8g
c3VwcG9ydCAxUlUsIEZQNDAsIEtpbmdwaW4sIEZQODAsIGFuZCBGUDE2MC4NCg0KQ2M6IHhlLWtl
cm5lbEBleHRlcm5hbC5jaXNjby5jb20NClNpZ25lZC1vZmYtYnk6IFN0ZXZlIFNoaWggPHNzaGlo
QGNpc2NvLmNvbT4NClNpZ25lZC1vZmYtYnk6IERhdmlkIFNpbmdsZXRvbiA8ZGF2c2luZ2xAY2lz
Y28uY29tPg0KLS0tDQogYXJjaC94ODYvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgfCAgIDkg
KysNCiBhcmNoL3g4Ni9wbGF0Zm9ybS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArDQogYXJjaC94
ODYvcGxhdGZvcm0vYXNyMWsvTWFrZWZpbGUgICAgfCAgIDEgKw0KIGFyY2gveDg2L3BsYXRmb3Jt
L2FzcjFrL2FzcjFrX2Flci5jIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKw0KIGRyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jICAgICAgIHwgIDEzICsrKw0KIGRy
aXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5oICAgICAgIHwgICA1ICsrDQogZHJpdmVycy9wY2kv
cXVpcmtzLmMgICAgICAgICAgICAgICAgfCAgIDcgKysNCiBpbmNsdWRlL2FzbS1nZW5lcmljL3Zt
bGludXgubGRzLmggICB8ICAgMyArDQogaW5jbHVkZS9saW51eC9wY2kuaCAgICAgICAgICAgICAg
ICAgfCAgIDUgKysNCiA5IGZpbGVzIGNoYW5nZWQsIDIwOSBpbnNlcnRpb25zKCspDQogY3JlYXRl
IG1vZGUgMTAwNjQ0IGFyY2gveDg2L3BsYXRmb3JtL2FzcjFrL01ha2VmaWxlDQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGFyY2gveDg2L3BsYXRmb3JtL2FzcjFrL2FzcjFrX2Flci5jDQoNCmRpZmYgLS1n
aXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZw0KaW5kZXggYmFkYTYzNi4u
MTFiZGNiMiAxMDA2NDQNCi0tLSBhL2FyY2gveDg2L0tjb25maWcNCisrKyBiL2FyY2gveDg2L0tj
b25maWcNCkBAIC00NDksNiArNDQ5LDE1IEBAIGNvbmZpZyBYODZfRVhURU5ERURfUExBVEZPUk0N
CiBlbmRpZg0KICMgVGhpcyBpcyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiA2NCBi
aXQgZXh0ZW5kZWQgcGxhdGZvcm1zDQogIyBQbGVhc2UgbWFpbnRhaW4gdGhlIGFscGhhYmV0aWMg
b3JkZXIgaWYgYW5kIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucw0KKw0KK2NvbmZpZyBYODZfQVNS
MUsNCisJYm9vbCAiQ2lzY28gQVNSMUsiDQorCWRlcGVuZHMgb24gWDg2XzY0DQorCWRlcGVuZHMg
b24gWDg2X0VYVEVOREVEX1BMQVRGT1JNDQorCS0tLWhlbHAtLS0NCisJICBUaGlzIG9wdGlvbiBp
cyBuZWVkZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBDaXNjbyBBU1IxSyBwbGF0Zm9ybXMuDQorCSAg
SWYgeW91IGRvbid0IGhhdmUgb25lIG9mIHRoZXNlLCB5b3Ugc2hvdWxkIHNheSBOIGhlcmUuDQor
DQogY29uZmlnIFg4Nl9OVU1BQ0hJUA0KIAlib29sICJOdW1hc2NhbGUgTnVtYUNoaXAiDQogCWRl
cGVuZHMgb24gWDg2XzY0DQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vTWFrZWZpbGUg
Yi9hcmNoL3g4Ni9wbGF0Zm9ybS9NYWtlZmlsZQ0KaW5kZXggM2MzYzE5ZS4uY2JhZThjMiAxMDA2
NDQNCi0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL01ha2VmaWxlDQorKysgYi9hcmNoL3g4Ni9wbGF0
Zm9ybS9NYWtlZmlsZQ0KQEAgLTEsNSArMSw2IEBADQogIyBQbGF0Zm9ybSBzcGVjaWZpYyBjb2Rl
IGdvZXMgaGVyZQ0KIG9iai15CSs9IGF0b20vDQorb2JqLSQoWDg2X0FTUjFLKQkrPSBhc3Ixay8N
CiBvYmoteQkrPSBjZTQxMDAvDQogb2JqLXkJKz0gZWZpLw0KIG9iai15CSs9IGdlb2RlLw0KZGlm
ZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2FzcjFrL01ha2VmaWxlIGIvYXJjaC94ODYvcGxh
dGZvcm0vYXNyMWsvTWFrZWZpbGUNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw
Li4wMjE5ZTQwDQotLS0gL2Rldi9udWxsDQorKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9hc3Ixay9N
YWtlZmlsZQ0KQEAgLTAsMCArMSBAQA0KK29iai0kKENPTkZJR19QQ0lFQUVSKQkrPSBhc3Ixa19h
ZXIubw0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2FzcjFrL2FzcjFrX2Flci5jIGIv
YXJjaC94ODYvcGxhdGZvcm0vYXNyMWsvYXNyMWtfYWVyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQppbmRleCAwMDAwMDAwLi42OTYyNjcyDQotLS0gL2Rldi9udWxsDQorKysgYi9hcmNoL3g4Ni9w
bGF0Zm9ybS9hc3Ixay9hc3Ixa19hZXIuYw0KQEAgLTAsMCArMSwxNjUgQEANCisvKg0KKyAqIENp
c2NvIEFTUjFLIHBsYXRmb3JtIFBDSWUgQUVSIHN1cHBvcnQNCisgKg0KKyAqIENvcHlyaWdodCAo
YykgMjAxNSBieSBjaXNjbyBTeXN0ZW1zLCBJbmMuDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4
L3BjaS5oPg0KKyNpbmNsdWRlIDwuLi8uLi8uLi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYu
aD4NCisNCisvKiBNQ0ggNTEwMCAqLw0KKyNkZWZpbmUgUENJX0RFVklDRV9JRF81MTAwX1BPUlRf
MCAgIAkweDcyNzANCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfNTEwMF9QT1JUXzJfMwkweDY1RjcN
CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfNTEwMF9QT1JUXzYJMHg2NUU2DQorI2RlZmluZSBQRVhD
VFJMMwkJCTB4NEQNCisjZGVmaW5lIFBFWENUUkwzX01TSV9SQVNfRVJSRU4JCTB4MDENCisjZGVm
aW5lIFBFWENUUkwJCQkJMHg0OA0KKyNkZWZpbmUgUEVYQ1RSTF9ESVNfQVBJQ19FT0kJCTB4MDIN
CisNCisvKiBKYXNwZXIgRm9yZXN0IC0gMzUwMC81NTAwIFNlcmllcyAqLw0KKyNkZWZpbmUgUENJ
X0RFVklDRV9JRF8zNTAwX1BPUlRfMQkweDM3MjENCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfMzUw
MF9QT1JUXzIJMHgzNzIyDQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzM1MDBfUE9SVF8zCTB4Mzcy
Mw0KKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zNTAwX1BPUlRfNAkweDM3MjQNCisjZGVmaW5lIE1J
U0NDVFJMU1RTX1JFRwkJCTB4MTg4DQorI2RlZmluZSBNSVNDQ1RSTFNUU19ESVNBQkxFX0VPSV9N
QVNLCTB4MDQwMDAwMDANCisNCitzdGF0aWMgaW50IGFlcl9lcnJfc3JjX21jaDUxMDAoc3RydWN0
IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCAqaWQpDQorew0KKwkvKg0KKwkgKiBNQ0ggNTEw
MCBkb2Vzbid0IHBvcHVsYXRlIHNyYyByZWdpc3RlciwgZXhwbGFpbmVkDQorCSAqIGluIGFuIGVy
cmF0YSwgc28gaGFyZCBjb2RpbmcgdGhlIHNvdXJjZSBpZA0KKwkgKi8NCisJKmlkID0gKChwZGV2
LT5kZXZmbiA8PCAxNikgfCBwZGV2LT5kZXZmbik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz
dGF0aWMgaW50IGFlcl9lcnJfc3JjX2pmKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBp
bnQgKmlkKQ0KK3sNCisJLyoNCisJICogWGVvbiAzNTAwLzU1MDAgc2VyaWVzIChKYXNwZXIgRm9y
ZXN0KSBkb2Vzbid0IHBvcHVsYXRlDQorCSAqIHRoZSBzb3VyY2UgcmVnaXN0ZXIgZWl0aGVyLCBz
byB3ZSBtdXN0IGhhcmQgY29kZS4NCisJICovDQorCXVuc2lnbmVkIGludCBkZXZmbiA9IChwZGV2
LT5zdWJvcmRpbmF0ZS0+bnVtYmVyIDw8IDgpIHwNCisJCQkJUENJX0RFVkZOKDAsMCk7DQorCSpp
ZCA9IChkZXZmbiA8PCAxNikgfCBkZXZmbjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBh
ZXJfZXJyX3NyYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgKmlkKQ0KK3sNCisJ
aWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKSAmJg0KKwkgICAgKChkZXYt
PmRldmljZSA9PSBQQ0lfREVWSUNFX0lEXzUxMDBfUE9SVF8wKSB8fA0KKwkgICAgIChkZXYtPmRl
dmljZSA9PSBQQ0lfREVWSUNFX0lEXzUxMDBfUE9SVF8yXzMpIHx8DQorCSAgICAgKGRldi0+ZGV2
aWNlID09IFBDSV9ERVZJQ0VfSURfNTEwMF9QT1JUXzYpKSkNCisJCXJldHVybiBhZXJfZXJyX3Ny
Y19tY2g1MTAwKGRldiwgaWQpOw0KKw0KKwlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1Jf
SURfSU5URUwpICYmDQorCSAgICAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfMzUwMF9Q
T1JUXzEpIHx8DQorCSAgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfMzUwMF9QT1JU
XzIpIHx8DQorCSAgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfMzUwMF9QT1JUXzMp
IHx8DQorCSAgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfMzUwMF9QT1JUXzQpKSkN
CisJCXJldHVybiBhZXJfZXJyX3NyY19qZihkZXYsIGlkKTsNCisNCisJcmV0dXJuIDA7DQorfQ0K
Kw0KK3N0YXRpYyBib29sIGFlcl9jYWxsYmFja3Nfc2V0Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGNp
X2Flcl9jYWxsYmFja3MgYWVyX2NhbGxiYWNrcyA9IHsNCisJLmVycm9yX3NvdXJjZSA9IGFlcl9l
cnJfc3JjLA0KK307DQorDQorc3RhdGljIHZvaWQgYWVyX2VuYWJsZV9yb290cG9ydF9tY2g1MTAw
KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KK3sNCisJdTMyIHJlZzMyOw0KKwl1OCByZWc4Ow0KKw0K
KwlpZiAoIWFlcl9jYWxsYmFja3Nfc2V0KSB7DQorCQlwY2lfYWVyX3NldF9jYWxsYmFja3MoJmFl
cl9jYWxsYmFja3MpOw0KKwkJYWVyX2NhbGxiYWNrc19zZXQgPSB0cnVlOw0KKwl9DQorDQorCS8q
DQorCSAqIE1DSDUxMDAgc2VuZHMgYnJvYWRjYXN0IEVPSSB0byBzdWJvcmRpbmF0ZQ0KKwkgKiBk
ZXZpY2VzLiBJdCBpcyBhIHZlbmRvciAoSW50ZWwpIHNwZWNpZmljIG1lc3NhZ2UNCisJICogdGhh
dCBzaG91bGQgYmUgaWdub3JlZCBieSBub24tSW50ZWwgZGV2aWNlcywgYnV0DQorCSAqIG91ciBk
ZXZpY2VzIChIeXRvcCBldGMpIGRvIG5vdCBpZ25vcmUgaXQgYW5kDQorCSAqIHJhaXNlIFVuY29y
cmVjdGFibGUgYW5kIFVuc3VwcG9ydGVkIFJlcXVlc3QNCisJICogZXJyb3JzLg0KKwkgKg0KKwkg
KiBUaGUgRU9JIGlzIGZvciB0aGUgSW50ZWwgSU8gQVBJQywgd2hpY2ggaXMgbm90DQorCSAqIHBy
ZXNlbnQgYW5kIHRoZXJlZm9yZSBub3QgcmVxdWlyZWQuDQorCSAqDQorCSAqIERpc2FibGUgRU9J
IEJyb2FkY2FzdCB0byBhdm9pZCBVbmNvcnJlY3RhYmxlIGFuZA0KKwkgKiBVbnN1cHBvcnRlZCBy
ZXF1ZXN0IGVycm9ycyBmcm9tIGRldmljZXMgd2hpY2ggZG8NCisJICogbm90IHN1cHBvcnQgdGhl
IEVPSSBhbmQgZG8gbm90IGFkaGVyZSB0byB0aGUgUENJZQ0KKwkgKiBzcGVjLg0KKwkgKi8NCisJ
cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBFWENUUkwsICZyZWczMik7DQorCXJlZzMyIHw9
IFBFWENUUkxfRElTX0FQSUNfRU9JOw0KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBF
WENUUkwsIHJlZzMyKTsNCisNCisJLyogRW5hYmxlIE1TSSAqLw0KKwlwY2lfcmVhZF9jb25maWdf
Ynl0ZShwZGV2LCBQRVhDVFJMMywgJnJlZzgpOw0KKwlyZWc4IHw9IFBFWENUUkwzX01TSV9SQVNf
RVJSRU47DQorCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQRVhDVFJMMywgcmVnOCk7DQor
fQ0KKw0KK3N0YXRpYyB2b2lkIGFlcl9lbmFibGVfcm9vdHBvcnRfamYoc3RydWN0IHBjaV9kZXYg
KnBkZXYpDQorew0KKwl1MzIgcmVnMzI7DQorCXUxNiByZWcxNjsNCisNCisJaWYgKCFhZXJfY2Fs
bGJhY2tzX3NldCkgew0KKwkJcGNpX2Flcl9zZXRfY2FsbGJhY2tzKCZhZXJfY2FsbGJhY2tzKTsN
CisJCWFlcl9jYWxsYmFja3Nfc2V0ID0gdHJ1ZTsNCisJfQ0KKw0KKwkvKg0KKwkgKiAzNTAwLzU1
MDAgc2VyaWVzIENQVXMgKEpGKSBzZW5kIGJyb2FkY2FzdCBFT0kgdG8NCisJICogc3Vib3JkaW5h
dGUgZGV2aWNlcy4gSXQgaXMgYSB2ZW5kb3IgKEludGVsKSBzcGVjaWZpYw0KKwkgKiBtZXNzYWdl
IHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgbm9uLUludGVsIGRldmljZXMsDQorCSAqIGJ1dCBv
dXIgZGV2aWNlcyAoWW9kYSBldGMpIGRvIG5vdCBpZ25vcmUgaXQgYW5kDQorCSAqIHJhaXNlIFVu
Y29ycmVjdGFibGUgYW5kIFVuc3VwcG9ydGVkIFJlcXVlc3QNCisJICogZXJyb3JzLg0KKwkgKg0K
KwkgKiBUaGUgRU9JIGlzIGZvciB0aGUgSW50ZWwgSU8gQVBJQywgd2hpY2ggaXMgbm90DQorCSAq
IHByZXNlbnQgYW5kIHRoZXJlZm9yZSBub3QgcmVxdWlyZWQuDQorCSAqDQorCSAqIERpc2FibGUg
RU9JIEJyb2FkY2FzdCB0byBhdm9pZCBVbmNvcnJlY3RhYmxlIGFuZA0KKwkgKiBVbnN1cHBvcnRl
ZCByZXF1ZXN0IGVycm9ycyBmcm9tIGRldmljZXMgd2hpY2ggZG8NCisJICogbm90IHN1cHBvcnQg
dGhlIEVPSSBhbmQgZG8gbm90IGFkaGVyZSB0byB0aGUgUENJZQ0KKwkgKiBzcGVjLg0KKwkgKi8N
CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIE1JU0NDVFJMU1RTX1JFRywgJnJlZzMyKTsN
CisJcmVnMzIgfD0gTUlTQ0NUUkxTVFNfRElTQUJMRV9FT0lfTUFTSzsNCisJcGNpX3dyaXRlX2Nv
bmZpZ19kd29yZChwZGV2LCBNSVNDQ1RSTFNUU19SRUcsIHJlZzMyKTsNCisNCisJLyoNCisJICog
V2UgbXVzdCBhbHNvIGZvcndhcmQgI1NFUlIgYW5kICNQRVJSIGZyb20gdGhlIHNlY29uZGFyeQ0K
KwkgKiB0byBwcmltYXJ5IGJ1cy4gIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIEFFUiBkcml2ZXIN
CisJICogcmVjZWl2aW5nIGFuIGludGVycnVwdCB0aGF0IGNhbiB0aGVuIGJlIGRlbGl2ZXJlZCB0
bw0KKwkgKiB0aGUgZGV2aWNlIHNwZWNpZmljIGRyaXZlci4NCisJICovDQorCXBjaV9yZWFkX2Nv
bmZpZ193b3JkKHBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgJnJlZzE2KTsNCisJcmVnMTYgfD0g
UENJX0JSSURHRV9DVExfUEFSSVRZIHwgUENJX0JSSURHRV9DVExfU0VSUjsNCisJcGNpX3dyaXRl
X2NvbmZpZ193b3JkKHBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgcmVnMTYpOw0KK30NCisNCitE
RUNMQVJFX1BDSV9GSVhVUF9BRVJfRU5BQkxFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJ
Q0VfSURfNTEwMF9QT1JUXzAsDQorCQkJCWFlcl9lbmFibGVfcm9vdHBvcnRfbWNoNTEwMCk7DQor
REVDTEFSRV9QQ0lfRklYVVBfQUVSX0VOQUJMRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVW
SUNFX0lEXzUxMDBfUE9SVF8yXzMsDQorCQkJCWFlcl9lbmFibGVfcm9vdHBvcnRfbWNoNTEwMCk7
DQorREVDTEFSRV9QQ0lfRklYVVBfQUVSX0VOQUJMRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lf
REVWSUNFX0lEXzUxMDBfUE9SVF82LA0KKwkJCQlhZXJfZW5hYmxlX3Jvb3Rwb3J0X21jaDUxMDAp
Ow0KK0RFQ0xBUkVfUENJX0ZJWFVQX0FFUl9FTkFCTEUoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJ
X0RFVklDRV9JRF8zNTAwX1BPUlRfMSwNCisJCQkJYWVyX2VuYWJsZV9yb290cG9ydF9qZik7DQor
REVDTEFSRV9QQ0lfRklYVVBfQUVSX0VOQUJMRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVW
SUNFX0lEXzM1MDBfUE9SVF8yLA0KKwkJCQlhZXJfZW5hYmxlX3Jvb3Rwb3J0X2pmKTsNCitERUNM
QVJFX1BDSV9GSVhVUF9BRVJfRU5BQkxFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0Vf
SURfMzUwMF9QT1JUXzMsDQorCQkJCWFlcl9lbmFibGVfcm9vdHBvcnRfamYpOw0KK0RFQ0xBUkVf
UENJX0ZJWFVQX0FFUl9FTkFCTEUoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF8z
NTAwX1BPUlRfNCwNCisJCQkJYWVyX2VuYWJsZV9yb290cG9ydF9qZik7DQpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJk
cnYuYw0KaW5kZXggMTM5MTUwYi4uODM2ZTBjYiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL3Bj
aWUvYWVyL2FlcmRydi5jDQorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYw0KQEAg
LTYyLDYgKzYyLDggQEAgc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgYWVy
ZHJpdmVyID0gew0KIAkucmVzZXRfbGluawk9IGFlcl9yb290X3Jlc2V0LA0KIH07DQogDQorc3Rh
dGljIHN0cnVjdCBwY2lfYWVyX2NhbGxiYWNrcyBjYWxsYmFja3M7DQorDQogc3RhdGljIGludCBw
Y2llX2Flcl9kaXNhYmxlOw0KIA0KIHZvaWQgcGNpX25vX2Flcih2b2lkKQ0KQEAgLTc0LDYgKzc2
LDExIEBAIGJvb2wgcGNpX2Flcl9hdmFpbGFibGUodm9pZCkNCiAJcmV0dXJuICFwY2llX2Flcl9k
aXNhYmxlICYmIHBjaV9tc2lfZW5hYmxlZCgpOw0KIH0NCiANCit2b2lkIHBjaV9hZXJfc2V0X2Nh
bGxiYWNrcyhzdHJ1Y3QgcGNpX2Flcl9jYWxsYmFja3MgKmNiKQ0KK3sNCisJbWVtY3B5KCZjYWxs
YmFja3MsIGNiLCBzaXplb2YoKmNiKSk7DQorfQ0KKw0KIHN0YXRpYyBpbnQgc2V0X2RldmljZV9l
cnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSkNCiB7DQogCWJv
b2wgZW5hYmxlID0gKigoYm9vbCAqKWRhdGEpOw0KQEAgLTE0OSw2ICsxNTYsOCBAQCBzdGF0aWMg
dm9pZCBhZXJfZW5hYmxlX3Jvb3Rwb3J0KHN0cnVjdCBhZXJfcnBjICpycGMpDQogCXBjaV9yZWFk
X2NvbmZpZ19kd29yZChwZGV2LCBhZXJfcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsICZyZWcz
Mik7DQogCXJlZzMyIHw9IFJPT1RfUE9SVF9JTlRSX09OX01FU0dfTUFTSzsNCiAJcGNpX3dyaXRl
X2NvbmZpZ19kd29yZChwZGV2LCBhZXJfcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsIHJlZzMy
KTsNCisNCisJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfYWVyX2VuYWJsZSwgcGRldik7DQog
fQ0KIA0KIC8qKg0KQEAgLTIxMiw2ICsyMjEsMTAgQEAgaXJxcmV0dXJuX3QgYWVyX2lycShpbnQg
aXJxLCB2b2lkICpjb250ZXh0KQ0KIA0KIAkvKiBSZWFkIGVycm9yIHNvdXJjZSBhbmQgY2xlYXIg
ZXJyb3Igc3RhdHVzICovDQogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LT5wb3J0LCBwb3Mg
KyBQQ0lfRVJSX1JPT1RfRVJSX1NSQywgJmlkKTsNCisNCisJaWYgKGNhbGxiYWNrcy5lcnJvcl9z
b3VyY2UpDQorCQljYWxsYmFja3MuZXJyb3Jfc291cmNlKHBkZXYtPnBvcnQsICZpZCk7DQorDQog
CXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldi0+cG9ydCwgcG9zICsgUENJX0VSUl9ST09UX1NU
QVRVUywgc3RhdHVzKTsNCiANCiAJLyogU3RvcmUgZXJyb3Igc291cmNlIGZvciBsYXRlciBEUEMg
aGFuZGxlciAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5oIGIv
ZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmgNCmluZGV4IGQ1MWU0YTUuLjc5YWM2NDIgMTAw
NjQ0DQotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaA0KKysrIGIvZHJpdmVycy9w
Y2kvcGNpZS9hZXIvYWVyZHJ2LmgNCkBAIC04MCw2ICs4MCwxMCBAQCBzdHJ1Y3QgYWVyX2Jyb2Fk
Y2FzdF9kYXRhIHsNCiAJZW51bSBwY2lfZXJzX3Jlc3VsdCByZXN1bHQ7DQogfTsNCiANCitzdHJ1
Y3QgcGNpX2Flcl9jYWxsYmFja3Mgew0KKwlpbnQgKCplcnJvcl9zb3VyY2UpKHN0cnVjdCBwY2lf
ZGV2ICpkZXYsIHVuc2lnbmVkIGludCAqaWQpOw0KK307DQorDQogc3RhdGljIGlubGluZSBwY2lf
ZXJzX3Jlc3VsdF90IG1lcmdlX3Jlc3VsdChlbnVtIHBjaV9lcnNfcmVzdWx0IG9yaWcsDQogCQll
bnVtIHBjaV9lcnNfcmVzdWx0IG5ldykNCiB7DQpAQCAtMTEwLDYgKzExNCw3IEBAIHZvaWQgYWVy
X2lzcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KIHZvaWQgYWVyX3ByaW50X2Vycm9yKHN0
cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBhZXJfZXJyX2luZm8gKmluZm8pOw0KIHZvaWQgYWVy
X3ByaW50X3BvcnRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgYWVyX2Vycl9pbmZv
ICppbmZvKTsNCiBpcnFyZXR1cm5fdCBhZXJfaXJxKGludCBpcnEsIHZvaWQgKmNvbnRleHQpOw0K
K3ZvaWQgcGNpX2Flcl9zZXRfY2FsbGJhY2tzKHN0cnVjdCBwY2lfYWVyX2NhbGxiYWNrcyAqY2Ip
Ow0KIA0KICNpZmRlZiBDT05GSUdfQUNQSV9BUEVJDQogaW50IHBjaWVfYWVyX2dldF9maXJtd2Fy
ZV9maXJzdChzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldik7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w
Y2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYw0KaW5kZXggYzIzMjcyOS4uNjNiMzNm
ZiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jDQorKysgYi9kcml2ZXJzL3BjaS9x
dWlya3MuYw0KQEAgLTMzOTcsNiArMzM5Nyw4IEBAIGV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9f
c3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kW107DQogZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19l
bmRfcGNpX2ZpeHVwc19zdXNwZW5kW107DQogZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFy
dF9wY2lfZml4dXBzX3N1c3BlbmRfbGF0ZVtdOw0KIGV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9f
ZW5kX3BjaV9maXh1cHNfc3VzcGVuZF9sYXRlW107DQorZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAg
X19zdGFydF9wY2lfZml4dXBzX2Flcl9lbmFibGVbXTsNCitleHRlcm4gc3RydWN0IHBjaV9maXh1
cCBfX2VuZF9wY2lfZml4dXBzX2Flcl9lbmFibGVbXTsNCiANCiBzdGF0aWMgYm9vbCBwY2lfYXBw
bHlfZml4dXBfZmluYWxfcXVpcmtzOw0KIA0KQEAgLTM0NDcsNiArMzQ0OSwxMSBAQCB2b2lkIHBj
aV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAq
ZGV2KQ0KIAkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19zdXNwZW5kX2xhdGU7DQogCQlicmVhazsN
CiANCisJY2FzZSBwY2lfZml4dXBfYWVyX2VuYWJsZToNCisJCXN0YXJ0ID0gX19zdGFydF9wY2lf
Zml4dXBzX2Flcl9lbmFibGU7DQorCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX2Flcl9lbmFibGU7
DQorCQlicmVhazsNCisNCiAJZGVmYXVsdDoNCiAJCS8qIHN0dXBpZCBjb21waWxlciB3YXJuaW5n
LCB5b3Ugd291bGQgdGhpbmsgd2l0aCBhbiBlbnVtLi4uICovDQogCQlyZXR1cm47DQpkaWZmIC0t
Z2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2Vu
ZXJpYy92bWxpbnV4Lmxkcy5oDQppbmRleCAzMDc0Nzk2Li5jNjQ2MTA2IDEwMDY0NA0KLS0tIGEv
aW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oDQorKysgYi9pbmNsdWRlL2FzbS1nZW5l
cmljL3ZtbGludXgubGRzLmgNCkBAIC0zMTEsNiArMzExLDkgQEANCiAJCVZNTElOVVhfU1lNQk9M
KF9fc3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kX2xhdGUpID0gLjsJXA0KIAkJKigucGNpX2ZpeHVw
X3N1c3BlbmRfbGF0ZSkJCQkJXA0KIAkJVk1MSU5VWF9TWU1CT0woX19lbmRfcGNpX2ZpeHVwc19z
dXNwZW5kX2xhdGUpID0gLjsJXA0KKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9wY2lfZml4dXBz
X2Flcl9lbmFibGUpID0gLjsgICAgICBcDQorCQkqKC5wY2lfZml4dXBfYWVyX2VuYWJsZSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3Bj
aV9maXh1cHNfYWVyX2VuYWJsZSkgPSAuOwlcDQogCX0JCQkJCQkJCVwNCiAJCQkJCQkJCQlcDQog
CS8qIEJ1aWx0LWluIGZpcm13YXJlIGJsb2JzICovCQkJCQlcDQpkaWZmIC0tZ2l0IGEvaW5jbHVk
ZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgNCmluZGV4IDBlNDlmNzAuLjlhOTEx
OWMgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oDQorKysgYi9pbmNsdWRlL2xpbnV4
L3BjaS5oDQpAQCAtMTY4OSw2ICsxNjg5LDcgQEAgZW51bSBwY2lfZml4dXBfcGFzcyB7DQogCXBj
aV9maXh1cF9zdXNwZW5kLAkvKiBwY2lfZGV2aWNlX3N1c3BlbmQoKSAqLw0KIAlwY2lfZml4dXBf
cmVzdW1lX2Vhcmx5LCAvKiBwY2lfZGV2aWNlX3Jlc3VtZV9lYXJseSgpICovDQogCXBjaV9maXh1
cF9zdXNwZW5kX2xhdGUsCS8qIHBjaV9kZXZpY2Vfc3VzcGVuZF9sYXRlKCkgKi8NCisJcGNpX2Zp
eHVwX2Flcl9lbmFibGUsICAgLyogcGNpX2RldmljZV9hZXJfZW5hYmxlKCkgKi8NCiB9Ow0KIA0K
IC8qIEFub255bW91cyB2YXJpYWJsZXMgd291bGQgYmUgbmljZS4uLiAqLw0KQEAgLTE3NjMsNiAr
MTc2NCwxMCBAQCBlbnVtIHBjaV9maXh1cF9wYXNzIHsNCiAJREVDTEFSRV9QQ0lfRklYVVBfU0VD
VElPTigucGNpX2ZpeHVwX3N1c3BlbmRfbGF0ZSwJCVwNCiAJCXN1c3BlbmRfbGF0ZSMjaG9vaywg
dmVuZG9yLCBkZXZpY2UsCVwNCiAJCVBDSV9BTllfSUQsIDAsIGhvb2spDQorI2RlZmluZSBERUNM
QVJFX1BDSV9GSVhVUF9BRVJfRU5BQkxFKHZlbmRvciwgZGV2aWNlLCBob29rKQkJXA0KKwlERUNM
QVJFX1BDSV9GSVhVUF9TRUNUSU9OKC5wY2lfZml4dXBfYWVyX2VuYWJsZSwJCVwNCisJCWFlcl9l
bmFibGUjI3ZlbmRvciMjZGV2aWNlIyNob29rLCB2ZW5kb3IsIGRldmljZSwJXA0KKwkJUENJX0FO
WV9JRCwgMCwgaG9vaykNCiANCiAjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MNCiB2b2lkIHBjaV9m
aXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2
KTsNCi0tIA0KMi4xMC4xDQoNCg0KDQo=

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-10-22  3:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-22  3:27 Re: [PATCH] pcie: aer: aerdrv: PCIe AER workaround and handling for ASR1K platforms David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco)
2016-10-22  3:27 ` David Singleton -X (davsingl - MONTA VISTA SOFTWARE INC at Cisco)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.