From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 076B31E507; Sun, 5 May 2024 16:39:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.178.240 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714927167; cv=none; b=RL1pfqjsdUJTvtYCMc1JaGBCcEwjjeQ0hSwCpRhlonmIIwVN9o3NV/v23pHb0/BMGIx8za7QDbjq9oeFl0TZbEElQy1gpubtJ/bQTSfggmQ45BWSWzPAcnJ44L2DMowzLUI0f0smH+2C/1wbKpmf9LAgYlbotdch1HzEIQMN1TY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714927167; c=relaxed/simple; bh=kfKXHsxZpF+ohAZMyTjXIDnhZqSbZn+bac6cfKTHkgg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=g3dxzB8wnECAX03Z+aogcH/SYNm1zxrafBbv9cH9TP44g3SHaUeMoCgpW+W0zxK5BSMh6tjT76PgFH7AfNX/CQ39OKvFYsir2/k6oEup7duYxbzqhxOKuzmFRHcbcofZ2NLPDQwaeploT04I3JqDDfY7DOrxuR93S0JW6JyA+i8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=RwxA+vx/; arc=none smtp.client-ip=217.70.178.240 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="RwxA+vx/" Received: from relay8-d.mail.gandi.net (unknown [217.70.183.201]) by mslow1.mail.gandi.net (Postfix) with ESMTP id ABE35C2DCA; Sun, 5 May 2024 16:38:49 +0000 (UTC) Received: by mail.gandi.net (Postfix) with ESMTPSA id 822D71BF207; Sun, 5 May 2024 16:38:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1714927122; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R4oR805m/O43MhiiUQYpyBvILz6b9mCgwbwDtZtP5xc=; b=RwxA+vx/Ap0JKSoDtcYRQg8T8QW3rjO+LAXTvOTaEUyIJNyTbuRMjUV+e/G1oP3Ib1VbJd SC/wz1ERcUIelc+VHFI+izQDvdElNrdLR0XJxrbJR76CUV8/DQq5ag+iZ46fd/ruO5qeQ4 noJo4VCh8V0crYcp7dbNgu59HM9kabEMTFn00xyG4X2scMqFoPpnC9xTsbP8ZXfRw2CIzX QHg1RGB55bw7stR1omuc41CUTrMLGdIUp214h6fElup5GXNfR6PfvZugHMbwukHFc7DYgk 50VIrsd8JVI5gh4gLJ5vJ1ljlMW1uuCYaON74uG22jE8LKpz/MWLk4ojVznIcg== From: Gregory CLEMENT To: Ilpo =?utf-8?Q?J=C3=A4rvinen?= , linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Andrew Lunn , Sebastian Hesselbarth , Russell King , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Ilpo =?utf-8?Q?J=C3=A4rvinen?= Subject: Re: [PATCH 03/10] ARM: orion5x: Pass devfn to orion5x_pci_hw_{rd,wr}_conf() In-Reply-To: <20240429104633.11060-4-ilpo.jarvinen@linux.intel.com> References: <20240429104633.11060-1-ilpo.jarvinen@linux.intel.com> <20240429104633.11060-4-ilpo.jarvinen@linux.intel.com> Date: Sun, 05 May 2024 18:38:40 +0200 Message-ID: <87plu0nrhr.fsf@BLaptop.bootlin.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-GND-Sasl: gregory.clement@bootlin.com Ilpo J=C3=A4rvinen writes: > Pass the usual devfn instead of individual components into > orion5x_pci_hw_{rd,wr}_conf() to make the change into > pci_conf1_offset() in an upcoming commit easier. > > Signed-off-by: Ilpo J=C3=A4rvinen Acked-by: Gregory CLEMENT As some other patches of the series depend on patches in the PCIe subsystem, the best approach would be to let you apply the series through the PCIe subsystem. Thanks, Gregory > --- > arch/arm/mach-orion5x/pci.c | 45 +++++++++++++++++++------------------ > 1 file changed, 23 insertions(+), 22 deletions(-) > > diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c > index 77ddab90f448..6376e1db6386 100644 > --- a/arch/arm/mach-orion5x/pci.c > +++ b/arch/arm/mach-orion5x/pci.c > @@ -270,15 +270,15 @@ static int orion5x_pci_local_bus_nr(void) > return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS); > } >=20=20 > -static int orion5x_pci_hw_rd_conf(int bus, int dev, u32 func, > - u32 where, u32 size, u32 *val) > +static int orion5x_pci_hw_rd_conf(int bus, u8 devfn, u32 where, > + u32 size, u32 *val) > { > unsigned long flags; > spin_lock_irqsave(&orion5x_pci_lock, flags); >=20=20 > writel(PCI_CONF_BUS(bus) | > - PCI_CONF_DEV(dev) | ORION5X_PCI_CONF_REG(where) | > - ORION5X_PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN, PCI_CONF_ADDR); > + PCI_CONF_DEV(PCI_SLOT(devfn)) | ORION5X_PCI_CONF_REG(where) | > + ORION5X_PCI_CONF_FUNC(PCI_FUNC(devfn)) | PCI_CONF_ADDR_EN, PCI_CONF_AD= DR); >=20=20 > *val =3D readl(PCI_CONF_DATA); >=20=20 > @@ -292,8 +292,8 @@ static int orion5x_pci_hw_rd_conf(int bus, int dev, u= 32 func, > return PCIBIOS_SUCCESSFUL; > } >=20=20 > -static int orion5x_pci_hw_wr_conf(int bus, int dev, u32 func, > - u32 where, u32 size, u32 val) > +static int orion5x_pci_hw_wr_conf(int bus, u8 devfn, u32 where, > + u32 size, u32 val) > { > unsigned long flags; > int ret =3D PCIBIOS_SUCCESSFUL; > @@ -301,8 +301,8 @@ static int orion5x_pci_hw_wr_conf(int bus, int dev, u= 32 func, > spin_lock_irqsave(&orion5x_pci_lock, flags); >=20=20 > writel(PCI_CONF_BUS(bus) | > - PCI_CONF_DEV(dev) | ORION5X_PCI_CONF_REG(where) | > - ORION5X_PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN, PCI_CONF_ADDR); > + PCI_CONF_DEV(PCI_SLOT(devfn)) | ORION5X_PCI_CONF_REG(where) | > + ORION5X_PCI_CONF_FUNC(PCI_FUNC(devfn)) | PCI_CONF_ADDR_EN, PCI_CONF_AD= DR); >=20=20 > if (size =3D=3D 4) { > __raw_writel(val, PCI_CONF_DATA); > @@ -347,8 +347,7 @@ static int orion5x_pci_rd_conf(struct pci_bus *bus, u= 32 devfn, > return PCIBIOS_DEVICE_NOT_FOUND; > } >=20=20 > - return orion5x_pci_hw_rd_conf(bus->number, PCI_SLOT(devfn), > - PCI_FUNC(devfn), where, size, val); > + return orion5x_pci_hw_rd_conf(bus->number, devfn, where, size, val); > } >=20=20 > static int orion5x_pci_wr_conf(struct pci_bus *bus, u32 devfn, > @@ -357,8 +356,7 @@ static int orion5x_pci_wr_conf(struct pci_bus *bus, u= 32 devfn, > if (!orion5x_pci_valid_config(bus->number, devfn)) > return PCIBIOS_DEVICE_NOT_FOUND; >=20=20 > - return orion5x_pci_hw_wr_conf(bus->number, PCI_SLOT(devfn), > - PCI_FUNC(devfn), where, size, val); > + return orion5x_pci_hw_wr_conf(bus->number, devfn, where, size, val); > } >=20=20 > static struct pci_ops pci_ops =3D { > @@ -375,12 +373,14 @@ static void __init orion5x_pci_set_bus_nr(int nr) > * PCI-X mode > */ > u32 pcix_status, bus, dev; > + u8 devfn; > bus =3D (p2p & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS; > dev =3D (p2p & PCI_P2P_DEV_MASK) >> PCI_P2P_DEV_OFFS; > - orion5x_pci_hw_rd_conf(bus, dev, 0, PCIX_STAT, 4, &pcix_status); > + devfn =3D PCI_DEVFN(dev, 0); > + orion5x_pci_hw_rd_conf(bus, devfn, PCIX_STAT, 4, &pcix_status); > pcix_status &=3D ~PCIX_STAT_BUS_MASK; > pcix_status |=3D (nr << PCIX_STAT_BUS_OFFS); > - orion5x_pci_hw_wr_conf(bus, dev, 0, PCIX_STAT, 4, pcix_status); > + orion5x_pci_hw_wr_conf(bus, devfn, PCIX_STAT, 4, pcix_status); > } else { > /* > * PCI Conventional mode > @@ -393,15 +393,16 @@ static void __init orion5x_pci_set_bus_nr(int nr) >=20=20 > static void __init orion5x_pci_master_slave_enable(void) > { > - int bus_nr, func, reg; > + int bus_nr, reg; > + u8 devfn; > u32 val; >=20=20 > bus_nr =3D orion5x_pci_local_bus_nr(); > - func =3D PCI_CONF_FUNC_STAT_CMD; > + devfn =3D PCI_DEVFN(0, PCI_CONF_FUNC_STAT_CMD); > reg =3D PCI_CONF_REG_STAT_CMD; > - orion5x_pci_hw_rd_conf(bus_nr, 0, func, reg, 4, &val); > + orion5x_pci_hw_rd_conf(bus_nr, devfn, reg, 4, &val); > val |=3D (PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); > - orion5x_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7); > + orion5x_pci_hw_wr_conf(bus_nr, devfn, reg, 4, val | 0x7); > } >=20=20 > static void __init orion5x_setup_pci_wins(void) > @@ -424,7 +425,7 @@ static void __init orion5x_setup_pci_wins(void) >=20=20 > for (i =3D 0; i < dram->num_cs; i++) { > const struct mbus_dram_window *cs =3D dram->cs + i; > - u32 func =3D PCI_CONF_FUNC_BAR_CS(cs->cs_index); > + u8 devfn =3D PCI_DEVFN(0, PCI_CONF_FUNC_BAR_CS(cs->cs_index)); > u32 reg; > u32 val; >=20=20 > @@ -432,15 +433,15 @@ static void __init orion5x_setup_pci_wins(void) > * Write DRAM bank base address register. > */ > reg =3D PCI_CONF_REG_BAR_LO_CS(cs->cs_index); > - orion5x_pci_hw_rd_conf(bus, 0, func, reg, 4, &val); > + orion5x_pci_hw_rd_conf(bus, devfn, reg, 4, &val); > val =3D (cs->base & 0xfffff000) | (val & 0xfff); > - orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, val); > + orion5x_pci_hw_wr_conf(bus, devfn, reg, 4, val); >=20=20 > /* > * Write DRAM bank size register. > */ > reg =3D PCI_CONF_REG_BAR_HI_CS(cs->cs_index); > - orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, 0); > + orion5x_pci_hw_wr_conf(bus, devfn, reg, 4, 0); > writel((cs->size - 1) & 0xfffff000, > PCI_BAR_SIZE_DDR_CS(cs->cs_index)); > writel(cs->base & 0xfffff000, > --=20 > 2.39.2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2234DC04FFE for ; Sun, 5 May 2024 16:39:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=El3Dti4k0dKFsqhX+TzfLowz+2vF/Z/GjSRAP3x4RoE=; b=i2N2Mu+JYbWZ7D ngHW0EQb1r1Z8kBzdaZRG7mjX8U/9YzcYyOo88LhaGfD/rNNbqAXhu/opMCiAoIeKKCdn9aIBIgBz 8J9cj/W1h8vBaeYuIWs31M/vQZtKVl/L03L3L1CaLKAwXfOAJrU88LnmMxYeFLMl8eOVSnGmmCldU Oh5B+WgKN214AC3DGHxNArd2eXza3FDHkh0eZA2Facwr+ciiaqL+XrRCg/pQ6FUCHqpkonUaZnmmD 7rwHA+TyTdER9HU0dG7uO0YHnah9cRsz1vEBr7z36kUJKgIeSzmePL0GejqytyGwm30sdx1ZkXbzN KrtIiviy46nf5pXPzAPw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s3et1-00000004ouH-07Lh; Sun, 05 May 2024 16:38:51 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s3esx-00000004or0-1d2g for linux-arm-kernel@lists.infradead.org; Sun, 05 May 2024 16:38:49 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 822D71BF207; Sun, 5 May 2024 16:38:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1714927122; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R4oR805m/O43MhiiUQYpyBvILz6b9mCgwbwDtZtP5xc=; b=RwxA+vx/Ap0JKSoDtcYRQg8T8QW3rjO+LAXTvOTaEUyIJNyTbuRMjUV+e/G1oP3Ib1VbJd SC/wz1ERcUIelc+VHFI+izQDvdElNrdLR0XJxrbJR76CUV8/DQq5ag+iZ46fd/ruO5qeQ4 noJo4VCh8V0crYcp7dbNgu59HM9kabEMTFn00xyG4X2scMqFoPpnC9xTsbP8ZXfRw2CIzX QHg1RGB55bw7stR1omuc41CUTrMLGdIUp214h6fElup5GXNfR6PfvZugHMbwukHFc7DYgk 50VIrsd8JVI5gh4gLJ5vJ1ljlMW1uuCYaON74uG22jE8LKpz/MWLk4ojVznIcg== From: Gregory CLEMENT To: Ilpo =?utf-8?Q?J=C3=A4rvinen?= , linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Andrew Lunn , Sebastian Hesselbarth , Russell King , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Ilpo =?utf-8?Q?J=C3=A4rvinen?= Subject: Re: [PATCH 03/10] ARM: orion5x: Pass devfn to orion5x_pci_hw_{rd,wr}_conf() In-Reply-To: <20240429104633.11060-4-ilpo.jarvinen@linux.intel.com> References: <20240429104633.11060-1-ilpo.jarvinen@linux.intel.com> <20240429104633.11060-4-ilpo.jarvinen@linux.intel.com> Date: Sun, 05 May 2024 18:38:40 +0200 Message-ID: <87plu0nrhr.fsf@BLaptop.bootlin.com> MIME-Version: 1.0 X-GND-Sasl: gregory.clement@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240505_093847_916327_B20C5D8E X-CRM114-Status: GOOD ( 17.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SWxwbyBKw6RydmluZW4gPGlscG8uamFydmluZW5AbGludXguaW50ZWwuY29tPiB3cml0ZXM6Cgo+ IFBhc3MgdGhlIHVzdWFsIGRldmZuIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBjb21wb25lbnRzIGlu dG8KPiBvcmlvbjV4X3BjaV9od197cmQsd3J9X2NvbmYoKSB0byBtYWtlIHRoZSBjaGFuZ2UgaW50 bwo+IHBjaV9jb25mMV9vZmZzZXQoKSBpbiBhbiB1cGNvbWluZyBjb21taXQgZWFzaWVyLgo+Cj4g U2lnbmVkLW9mZi1ieTogSWxwbyBKw6RydmluZW4gPGlscG8uamFydmluZW5AbGludXguaW50ZWwu Y29tPgoKCkFja2VkLWJ5OiBHcmVnb3J5IENMRU1FTlQgPGdyZWdvcnkuY2xlbWVudEBib290bGlu LmNvbT4KCkFzIHNvbWUgb3RoZXIgcGF0Y2hlcyBvZiB0aGUgc2VyaWVzIGRlcGVuZCBvbiBwYXRj aGVzIGluIHRoZSBQQ0llCnN1YnN5c3RlbSwgdGhlIGJlc3QgYXBwcm9hY2ggd291bGQgYmUgdG8g bGV0IHlvdSBhcHBseSB0aGUgc2VyaWVzCnRocm91Z2ggdGhlIFBDSWUgc3Vic3lzdGVtLgoKVGhh bmtzLAoKR3JlZ29yeQoKCj4gLS0tCj4gIGFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYyB8IDQ1 ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQs IDIzIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtL21hY2gtb3Jpb241eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYwo+IGlu ZGV4IDc3ZGRhYjkwZjQ0OC4uNjM3NmUxZGI2Mzg2IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL21h Y2gtb3Jpb241eC9wY2kuYwo+ICsrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYwo+IEBA IC0yNzAsMTUgKzI3MCwxNSBAQCBzdGF0aWMgaW50IG9yaW9uNXhfcGNpX2xvY2FsX2J1c19ucih2 b2lkKQo+ICAJcmV0dXJuKChjb25mICYgUENJX1AyUF9CVVNfTUFTSykgPj4gUENJX1AyUF9CVVNf T0ZGUyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgb3Jpb241eF9wY2lfaHdfcmRfY29uZihpbnQg YnVzLCBpbnQgZGV2LCB1MzIgZnVuYywKPiAtCQkJCQl1MzIgd2hlcmUsIHUzMiBzaXplLCB1MzIg KnZhbCkKPiArc3RhdGljIGludCBvcmlvbjV4X3BjaV9od19yZF9jb25mKGludCBidXMsIHU4IGRl dmZuLCB1MzIgd2hlcmUsCj4gKwkJCQkgIHUzMiBzaXplLCB1MzIgKnZhbCkKPiAgewo+ICAJdW5z aWduZWQgbG9uZyBmbGFnczsKPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlvbjV4X3BjaV9sb2Nr LCBmbGFncyk7Cj4gIAo+ICAJd3JpdGVsKFBDSV9DT05GX0JVUyhidXMpIHwKPiAtCQlQQ0lfQ09O Rl9ERVYoZGV2KSB8IE9SSU9ONVhfUENJX0NPTkZfUkVHKHdoZXJlKSB8Cj4gLQkJT1JJT041WF9Q Q0lfQ09ORl9GVU5DKGZ1bmMpIHwgUENJX0NPTkZfQUREUl9FTiwgUENJX0NPTkZfQUREUik7Cj4g KwkJUENJX0NPTkZfREVWKFBDSV9TTE9UKGRldmZuKSkgfCBPUklPTjVYX1BDSV9DT05GX1JFRyh3 aGVyZSkgfAo+ICsJCU9SSU9ONVhfUENJX0NPTkZfRlVOQyhQQ0lfRlVOQyhkZXZmbikpIHwgUENJ X0NPTkZfQUREUl9FTiwgUENJX0NPTkZfQUREUik7Cj4gIAo+ICAJKnZhbCA9IHJlYWRsKFBDSV9D T05GX0RBVEEpOwo+ICAKPiBAQCAtMjkyLDggKzI5Miw4IEBAIHN0YXRpYyBpbnQgb3Jpb241eF9w Y2lfaHdfcmRfY29uZihpbnQgYnVzLCBpbnQgZGV2LCB1MzIgZnVuYywKPiAgCXJldHVybiBQQ0lC SU9TX1NVQ0NFU1NGVUw7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgb3Jpb241eF9wY2lfaHdfd3Jf Y29uZihpbnQgYnVzLCBpbnQgZGV2LCB1MzIgZnVuYywKPiAtCQkJCQl1MzIgd2hlcmUsIHUzMiBz aXplLCB1MzIgdmFsKQo+ICtzdGF0aWMgaW50IG9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoaW50IGJ1 cywgdTggZGV2Zm4sIHUzMiB3aGVyZSwKPiArCQkJCSAgdTMyIHNpemUsIHUzMiB2YWwpCj4gIHsK PiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gIAlpbnQgcmV0ID0gUENJQklPU19TVUNDRVNTRlVM Owo+IEBAIC0zMDEsOCArMzAxLDggQEAgc3RhdGljIGludCBvcmlvbjV4X3BjaV9od193cl9jb25m KGludCBidXMsIGludCBkZXYsIHUzMiBmdW5jLAo+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaW9u NXhfcGNpX2xvY2ssIGZsYWdzKTsKPiAgCj4gIAl3cml0ZWwoUENJX0NPTkZfQlVTKGJ1cykgfAo+ IC0JCVBDSV9DT05GX0RFVihkZXYpIHwgT1JJT041WF9QQ0lfQ09ORl9SRUcod2hlcmUpIHwKPiAt CQlPUklPTjVYX1BDSV9DT05GX0ZVTkMoZnVuYykgfCBQQ0lfQ09ORl9BRERSX0VOLCBQQ0lfQ09O Rl9BRERSKTsKPiArCQlQQ0lfQ09ORl9ERVYoUENJX1NMT1QoZGV2Zm4pKSB8IE9SSU9ONVhfUENJ X0NPTkZfUkVHKHdoZXJlKSB8Cj4gKwkJT1JJT041WF9QQ0lfQ09ORl9GVU5DKFBDSV9GVU5DKGRl dmZuKSkgfCBQQ0lfQ09ORl9BRERSX0VOLCBQQ0lfQ09ORl9BRERSKTsKPiAgCj4gIAlpZiAoc2l6 ZSA9PSA0KSB7Cj4gIAkJX19yYXdfd3JpdGVsKHZhbCwgUENJX0NPTkZfREFUQSk7Cj4gQEAgLTM0 Nyw4ICszNDcsNyBAQCBzdGF0aWMgaW50IG9yaW9uNXhfcGNpX3JkX2NvbmYoc3RydWN0IHBjaV9i dXMgKmJ1cywgdTMyIGRldmZuLAo+ICAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7 Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIG9yaW9uNXhfcGNpX2h3X3JkX2NvbmYoYnVzLT5udW1iZXIs IFBDSV9TTE9UKGRldmZuKSwKPiAtCQkJCQlQQ0lfRlVOQyhkZXZmbiksIHdoZXJlLCBzaXplLCB2 YWwpOwo+ICsJcmV0dXJuIG9yaW9uNXhfcGNpX2h3X3JkX2NvbmYoYnVzLT5udW1iZXIsIGRldmZu LCB3aGVyZSwgc2l6ZSwgdmFsKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBvcmlvbjV4X3BjaV93 cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKPiBAQCAtMzU3LDggKzM1Niw3 IEBAIHN0YXRpYyBpbnQgb3Jpb241eF9wY2lfd3JfY29uZihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1 MzIgZGV2Zm4sCj4gIAlpZiAoIW9yaW9uNXhfcGNpX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwg ZGV2Zm4pKQo+ICAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Cj4gIAo+IC0JcmV0 dXJuIG9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSwK PiAtCQkJCQlQQ0lfRlVOQyhkZXZmbiksIHdoZXJlLCBzaXplLCB2YWwpOwo+ICsJcmV0dXJuIG9y aW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLT5udW1iZXIsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFs KTsKPiAgfQo+ICAKPiAgc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9vcHMgPSB7Cj4gQEAgLTM3 NSwxMiArMzczLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBvcmlvbjV4X3BjaV9zZXRfYnVzX25y KGludCBucikKPiAgCQkgKiBQQ0ktWCBtb2RlCj4gIAkJICovCj4gIAkJdTMyIHBjaXhfc3RhdHVz LCBidXMsIGRldjsKPiArCQl1OCBkZXZmbjsKPiAgCQlidXMgPSAocDJwICYgUENJX1AyUF9CVVNf TUFTSykgPj4gUENJX1AyUF9CVVNfT0ZGUzsKPiAgCQlkZXYgPSAocDJwICYgUENJX1AyUF9ERVZf TUFTSykgPj4gUENJX1AyUF9ERVZfT0ZGUzsKPiAtCQlvcmlvbjV4X3BjaV9od19yZF9jb25mKGJ1 cywgZGV2LCAwLCBQQ0lYX1NUQVQsIDQsICZwY2l4X3N0YXR1cyk7Cj4gKwkJZGV2Zm4gPSBQQ0lf REVWRk4oZGV2LCAwKTsKPiArCQlvcmlvbjV4X3BjaV9od19yZF9jb25mKGJ1cywgZGV2Zm4sIFBD SVhfU1RBVCwgNCwgJnBjaXhfc3RhdHVzKTsKPiAgCQlwY2l4X3N0YXR1cyAmPSB+UENJWF9TVEFU X0JVU19NQVNLOwo+ICAJCXBjaXhfc3RhdHVzIHw9IChuciA8PCBQQ0lYX1NUQVRfQlVTX09GRlMp Owo+IC0JCW9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLCBkZXYsIDAsIFBDSVhfU1RBVCwgNCwg cGNpeF9zdGF0dXMpOwo+ICsJCW9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLCBkZXZmbiwgUENJ WF9TVEFULCA0LCBwY2l4X3N0YXR1cyk7Cj4gIAl9IGVsc2Ugewo+ICAJCS8qCj4gIAkJICogUENJ IENvbnZlbnRpb25hbCBtb2RlCj4gQEAgLTM5MywxNSArMzkzLDE2IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCBvcmlvbjV4X3BjaV9zZXRfYnVzX25yKGludCBucikKPiAgCj4gIHN0YXRpYyB2b2lkIF9f aW5pdCBvcmlvbjV4X3BjaV9tYXN0ZXJfc2xhdmVfZW5hYmxlKHZvaWQpCj4gIHsKPiAtCWludCBi dXNfbnIsIGZ1bmMsIHJlZzsKPiArCWludCBidXNfbnIsIHJlZzsKPiArCXU4IGRldmZuOwo+ICAJ dTMyIHZhbDsKPiAgCj4gIAlidXNfbnIgPSBvcmlvbjV4X3BjaV9sb2NhbF9idXNfbnIoKTsKPiAt CWZ1bmMgPSBQQ0lfQ09ORl9GVU5DX1NUQVRfQ01EOwo+ICsJZGV2Zm4gPSBQQ0lfREVWRk4oMCwg UENJX0NPTkZfRlVOQ19TVEFUX0NNRCk7Cj4gIAlyZWcgPSBQQ0lfQ09ORl9SRUdfU1RBVF9DTUQ7 Cj4gLQlvcmlvbjV4X3BjaV9od19yZF9jb25mKGJ1c19uciwgMCwgZnVuYywgcmVnLCA0LCAmdmFs KTsKPiArCW9yaW9uNXhfcGNpX2h3X3JkX2NvbmYoYnVzX25yLCBkZXZmbiwgcmVnLCA0LCAmdmFs KTsKPiAgCXZhbCB8PSAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lf Q09NTUFORF9NQVNURVIpOwo+IC0Jb3Jpb241eF9wY2lfaHdfd3JfY29uZihidXNfbnIsIDAsIGZ1 bmMsIHJlZywgNCwgdmFsIHwgMHg3KTsKPiArCW9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzX25y LCBkZXZmbiwgcmVnLCA0LCB2YWwgfCAweDcpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBfX2lu aXQgb3Jpb241eF9zZXR1cF9wY2lfd2lucyh2b2lkKQo+IEBAIC00MjQsNyArNDI1LDcgQEAgc3Rh dGljIHZvaWQgX19pbml0IG9yaW9uNXhfc2V0dXBfcGNpX3dpbnModm9pZCkKPiAgCj4gIAlmb3Ig KGkgPSAwOyBpIDwgZHJhbS0+bnVtX2NzOyBpKyspIHsKPiAgCQljb25zdCBzdHJ1Y3QgbWJ1c19k cmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7Cj4gLQkJdTMyIGZ1bmMgPSBQQ0lfQ09ORl9G VU5DX0JBUl9DUyhjcy0+Y3NfaW5kZXgpOwo+ICsJCXU4IGRldmZuID0gUENJX0RFVkZOKDAsIFBD SV9DT05GX0ZVTkNfQkFSX0NTKGNzLT5jc19pbmRleCkpOwo+ICAJCXUzMiByZWc7Cj4gIAkJdTMy IHZhbDsKPiAgCj4gQEAgLTQzMiwxNSArNDMzLDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBvcmlv bjV4X3NldHVwX3BjaV93aW5zKHZvaWQpCj4gIAkJICogV3JpdGUgRFJBTSBiYW5rIGJhc2UgYWRk cmVzcyByZWdpc3Rlci4KPiAgCQkgKi8KPiAgCQlyZWcgPSBQQ0lfQ09ORl9SRUdfQkFSX0xPX0NT KGNzLT5jc19pbmRleCk7Cj4gLQkJb3Jpb241eF9wY2lfaHdfcmRfY29uZihidXMsIDAsIGZ1bmMs IHJlZywgNCwgJnZhbCk7Cj4gKwkJb3Jpb241eF9wY2lfaHdfcmRfY29uZihidXMsIGRldmZuLCBy ZWcsIDQsICZ2YWwpOwo+ICAJCXZhbCA9IChjcy0+YmFzZSAmIDB4ZmZmZmYwMDApIHwgKHZhbCAm IDB4ZmZmKTsKPiAtCQlvcmlvbjV4X3BjaV9od193cl9jb25mKGJ1cywgMCwgZnVuYywgcmVnLCA0 LCB2YWwpOwo+ICsJCW9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLCBkZXZmbiwgcmVnLCA0LCB2 YWwpOwo+ICAKPiAgCQkvKgo+ICAJCSAqIFdyaXRlIERSQU0gYmFuayBzaXplIHJlZ2lzdGVyLgo+ ICAJCSAqLwo+ICAJCXJlZyA9IFBDSV9DT05GX1JFR19CQVJfSElfQ1MoY3MtPmNzX2luZGV4KTsK PiAtCQlvcmlvbjV4X3BjaV9od193cl9jb25mKGJ1cywgMCwgZnVuYywgcmVnLCA0LCAwKTsKPiAr CQlvcmlvbjV4X3BjaV9od193cl9jb25mKGJ1cywgZGV2Zm4sIHJlZywgNCwgMCk7Cj4gIAkJd3Jp dGVsKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmZjAwMCwKPiAgCQkJUENJX0JBUl9TSVpFX0REUl9D Uyhjcy0+Y3NfaW5kZXgpKTsKPiAgCQl3cml0ZWwoY3MtPmJhc2UgJiAweGZmZmZmMDAwLAo+IC0t IAo+IDIuMzkuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=