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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49397CA0FE6 for ; Fri, 1 Sep 2023 11:16:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242960AbjIALQC (ORCPT ); Fri, 1 Sep 2023 07:16:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240366AbjIALQC (ORCPT ); Fri, 1 Sep 2023 07:16:02 -0400 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72FA01710 for ; Fri, 1 Sep 2023 04:15:55 -0700 (PDT) Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-3fef56f7223so17672515e9.3 for ; Fri, 01 Sep 2023 04:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1693566954; x=1694171754; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=JXKeOLDoyy5/kC3fUdlXL9lLNwTUvGaVFBeNIEjZIMQ=; b=wItsgk2lVTkrdudb0s+W0fc/IXvfIrdODovm3iV3yIeGU0B8aS0yVO5Y4gjKltEMOv qfgdcFxiotpvjsTO/4XV9eBw18shHD0PVJSA81IbW8sH6zCh1mjYS7vm1E2/S2hNGHZt UICi58i5uRzpMdxsS2lOSqOn2bRUfCo+YbI5Sq7fHBX+SZuTVrGRxhrKfMy1MTXsy7Ro sxuth+yutzO9qGFh9nqrekTOJYbLXPhY8VfgCavJOVs+qmRxUt2LP6ht2GMaHWQmTnxP lGIca916IXI9/pojYgdxDZvlOaKFCRJftjOBRb+T5TCHP1t5FCzQekLOUVCXDm8Dt6PL KqaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693566954; x=1694171754; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JXKeOLDoyy5/kC3fUdlXL9lLNwTUvGaVFBeNIEjZIMQ=; b=BmfZREfOr3M871APPCiLbFoFiDbi5lMdVKAYWl/RUW+ndFAZPjOXoNODE6h1dPZbl8 XTmjjeD6FN/vPJG0JGq9IyTZpl3IRFJG0SSklOHnR8/ef3BM20QCSMKHvn336ITSsS5o TF1pZz1U47E/egfm7Dd3wDbt5iX13xLkm9ulwQlSMA6JCEQV7w4meVJjmV3HFJnWXddi C8te27MuudIgfcYWGBd2/foWFs/i9z5WDbHA4uR4aNMRSt9gP0JH2Ev9+dc4/3mbhsD3 XHlhlmuGJ/C3Jw2qGt7BKb6QD/9n3wRkJhIs9sk1AlVbIXMnwSe66uJMpKmrF+mGbRzG J3Qw== X-Gm-Message-State: AOJu0Yz6Tkc5egd/ZUMKRFFVPL6X0FGR6rHODicyzt4Blur7F7+pDP2N GHoS9UlONMzNS9BTcwNsNMT9Ww== X-Google-Smtp-Source: AGHT+IE+Q3n8iF3DTTB+G/JNTL/+AMsHyYDbREZ9/1BFcmOOL2dovB8KiBgpxGdxnlcSGkTBS0CL8g== X-Received: by 2002:a5d:4e0e:0:b0:316:fc86:28ae with SMTP id p14-20020a5d4e0e000000b00316fc8628aemr1394230wrt.15.1693566953774; Fri, 01 Sep 2023 04:15:53 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:e94b:1054:6760:aa27]) by smtp.gmail.com with ESMTPSA id s2-20020a5d4242000000b003197c2316ecsm4943457wrr.112.2023.09.01.04.15.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 04:15:53 -0700 (PDT) From: Bartosz Golaszewski To: Mark Brown , Florian Fainelli , Andy Shevchenko , Linus Walleij , Ray Jui , Scott Branden Cc: Broadcom internal kernel review list , linux-spi@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Bartosz Golaszewski Subject: [RFT PATCH v2] spi: bcm2835: reduce the abuse of the GPIO API Date: Fri, 1 Sep 2023 13:15:48 +0200 Message-Id: <20230901111548.12733-1-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Bartosz Golaszewski Currently the bcm2835 SPI driver uses functions that are available exclusively to GPIO providers as a way to handle a platform quirk. Let's use a slightly better alternative that avoids poking around in GPIOLIB's internals and use GPIO lookup tables. Link: https://www.spinics.net/lists/linux-gpio/msg36218.html Signed-off-by: Bartosz Golaszewski --- This is only build-tested. It should work, but it would be great if someone from broadcom could test this. v1 -> v2: - don't use devres for managing the GPIO but put it manually in .cleanup() - add a mailing list link explaining the background of the bug - fix kerneldoc drivers/spi/spi-bcm2835.c | 59 +++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c index e7bb2714678a..e06738705075 100644 --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c @@ -11,6 +11,7 @@ * spi-atmel.c, Copyright (C) 2006 Atmel Corporation */ +#include #include #include #include @@ -26,9 +27,10 @@ #include #include #include -#include /* FIXME: using chip internals */ -#include /* FIXME: using chip internals */ +#include /* FIXME: using GPIO lookup tables */ #include +#include +#include #include /* SPI register offsets */ @@ -83,6 +85,7 @@ MODULE_PARM_DESC(polling_limit_us, * struct bcm2835_spi - BCM2835 SPI controller * @regs: base address of register map * @clk: core clock, divided to calculate serial clock + * @cs_gpio: chip-select GPIO descriptor * @clk_hz: core clock cached speed * @irq: interrupt, signals TX FIFO empty or RX FIFO ¾ full * @tfr: SPI transfer currently processed @@ -117,6 +120,7 @@ MODULE_PARM_DESC(polling_limit_us, struct bcm2835_spi { void __iomem *regs; struct clk *clk; + struct gpio_desc *cs_gpio; unsigned long clk_hz; int irq; struct spi_transfer *tfr; @@ -1156,15 +1160,11 @@ static void bcm2835_spi_handle_err(struct spi_controller *ctlr, bcm2835_spi_reset_hw(bs); } -static int chip_match_name(struct gpio_chip *chip, void *data) -{ - return !strcmp(chip->label, data); -} - static void bcm2835_spi_cleanup(struct spi_device *spi) { struct bcm2835_spidev *target = spi_get_ctldata(spi); struct spi_controller *ctlr = spi->controller; + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); if (target->clear_rx_desc) dmaengine_desc_free(target->clear_rx_desc); @@ -1175,6 +1175,9 @@ static void bcm2835_spi_cleanup(struct spi_device *spi) sizeof(u32), DMA_TO_DEVICE); + gpiod_put(bs->cs_gpio); + spi_set_csgpiod(spi, 0, NULL); + kfree(target); } @@ -1221,7 +1224,7 @@ static int bcm2835_spi_setup(struct spi_device *spi) struct spi_controller *ctlr = spi->controller; struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); struct bcm2835_spidev *target = spi_get_ctldata(spi); - struct gpio_chip *chip; + struct gpiod_lookup_table *lookup __free(kfree) = NULL; int ret; u32 cs; @@ -1288,29 +1291,37 @@ static int bcm2835_spi_setup(struct spi_device *spi) } /* - * Translate native CS to GPIO + * TODO: The code below is a slightly better alternative to the utter + * abuse of the GPIO API that I found here before. It creates a + * temporary lookup table, assigns it to the SPI device, gets the GPIO + * descriptor and then releases the lookup table. * - * FIXME: poking around in the gpiolib internals like this is - * not very good practice. Find a way to locate the real problem - * and fix it. Why is the GPIO descriptor in spi->cs_gpiod - * sometimes not assigned correctly? Erroneous device trees? + * More on the problem that it addresses: + * https://www.spinics.net/lists/linux-gpio/msg36218.html */ + lookup = kzalloc(struct_size(lookup, table, 1), GFP_KERNEL); + if (!lookup) { + ret = -ENOMEM; + goto err_cleanup; + } - /* get the gpio chip for the base */ - chip = gpiochip_find("pinctrl-bcm2835", chip_match_name); - if (!chip) - return 0; + lookup->dev_id = dev_name(&spi->dev); + lookup->table[0].key = "pinctrl-bcm2835"; + lookup->table[0].chip_hwnum = (8 - (spi_get_chipselect(spi, 0))); + lookup->table[0].con_id = "cs"; + lookup->table[0].flags = GPIO_LOOKUP_FLAGS_DEFAULT; - spi_set_csgpiod(spi, 0, gpiochip_request_own_desc(chip, - 8 - (spi_get_chipselect(spi, 0)), - DRV_NAME, - GPIO_LOOKUP_FLAGS_DEFAULT, - GPIOD_OUT_LOW)); - if (IS_ERR(spi_get_csgpiod(spi, 0))) { - ret = PTR_ERR(spi_get_csgpiod(spi, 0)); + gpiod_add_lookup_table(lookup); + + bs->cs_gpio = gpiod_get(&spi->dev, "cs", GPIOD_OUT_LOW); + gpiod_remove_lookup_table(lookup); + if (IS_ERR(bs->cs_gpio)) { + ret = PTR_ERR(bs->cs_gpio); goto err_cleanup; } + spi_set_csgpiod(spi, 0, bs->cs_gpio); + /* and set up the "mode" and level */ dev_info(&spi->dev, "setting up native-CS%i to use GPIO\n", spi_get_chipselect(spi, 0)); -- 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 4156DCA0FE1 for ; Fri, 1 Sep 2023 11:16:46 +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:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=eH+P4ycvPIpU2jLlVBy1An6kG5APhtt7SwbyvWIg8Y4=; b=3hR/DY2aKpQ+o+ ypHJ/I+CCr7UJPM29xXjZ5GqoNd3Qb7CUHesUuTk5PUwzFx573A/FXeIor8PqfQjq9Jmw7JyGlI1+ b6eRe/3DwWcwhJC9UK1Xt79edvHofRs1aESBJNeP4OyVGs+1bYL7gKPk9WF6ylzssuS3u131XBdnm 9tryRiZyG53D1RQsx/sGP30vPo+i/5EhRDSX3aJYfyj5RSm0V8u3NpekP+ZVS0QuLgTp/RSuO4WwB VbQYaRAUDgjoaPS0jUtiugNQpQjIDbomNByGpg6axcmjKzd5aqKXdP8gKMI5CNRkqpb4qlonH9gMn 1H1K3hZpGsxpaXq0a2fA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qc28J-00HBA0-10; Fri, 01 Sep 2023 11:16:11 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qc285-00HB3H-2D for linux-arm-kernel@lists.infradead.org; Fri, 01 Sep 2023 11:16:09 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-31adc5c899fso1628028f8f.2 for ; Fri, 01 Sep 2023 04:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1693566954; x=1694171754; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=JXKeOLDoyy5/kC3fUdlXL9lLNwTUvGaVFBeNIEjZIMQ=; b=mvLm81+7gOITv2f2PBGNzdIeUicvOAVo1hPBWmsFYkCpIFIbJYu/HTfdT0ECYGy4FJ wrK7G6fzr0UpncUMRT8PvJh8b6SGpOeIkIXZvFIoysA8zdoLPCEi5cGF4iyvayYTXTvk h/JPVnvUnErr1gzyql8kOr8yNSM8mwMh5qakEKqoaff4AjnodUTjO9J7AxZn62jgUTLR 6p2bW1IX4IYqS9m3uXZM+9OnWICbfEaD3ulVPbLx/Dy3+hGqUiZ5+2m1yd7lphzL9RBh I7VGgpdW3TeZkXxoZ/wy+N0LinJwKUQggF1UPtAwdTv6hfcewVK6VAFfDWGlz3VhmkBL cOrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693566954; x=1694171754; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JXKeOLDoyy5/kC3fUdlXL9lLNwTUvGaVFBeNIEjZIMQ=; b=HzyVzdc744V+3mtDb8W7+sdb1v1ia2oA+qoQ2NZLCbNL+2JBk2oUV5VN1ZCTi/ug9h +Eg7fTsVffxwdZiiIqMMJQh7O7VCvLYvCR8nW/PmTsqLtuKvtJiv5CNyR4zecWjp82gf yuRhtO386wfDlaTrMX3fCIF0Z/Ck0p16r8r1/CfxXbkFyaNLkL0q8hewFAbyXRiEm8Lf kG2g+Uaa17ZfYf5Onco4z691pkc53f5bP5IaTM6Awa8lQLDclZiE7MNgazbInmFUIBHB HrHthZBkVj0GGkFisI9TZ5GmaOw+TAaoTYsjcykYjW7DqUziIC30rGDQ+k0L3ymYbYft DX6w== X-Gm-Message-State: AOJu0YzkyUKrDudyYQECzO1sZ6RQQcy4AtKUagIfke30HRibmPRBDWEE xj9l8r7mT+soy+RxZkKBx8LOMg== X-Google-Smtp-Source: AGHT+IE+Q3n8iF3DTTB+G/JNTL/+AMsHyYDbREZ9/1BFcmOOL2dovB8KiBgpxGdxnlcSGkTBS0CL8g== X-Received: by 2002:a5d:4e0e:0:b0:316:fc86:28ae with SMTP id p14-20020a5d4e0e000000b00316fc8628aemr1394230wrt.15.1693566953774; Fri, 01 Sep 2023 04:15:53 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:e94b:1054:6760:aa27]) by smtp.gmail.com with ESMTPSA id s2-20020a5d4242000000b003197c2316ecsm4943457wrr.112.2023.09.01.04.15.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 04:15:53 -0700 (PDT) From: Bartosz Golaszewski To: Mark Brown , Florian Fainelli , Andy Shevchenko , Linus Walleij , Ray Jui , Scott Branden Cc: Broadcom internal kernel review list , linux-spi@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Bartosz Golaszewski Subject: [RFT PATCH v2] spi: bcm2835: reduce the abuse of the GPIO API Date: Fri, 1 Sep 2023 13:15:48 +0200 Message-Id: <20230901111548.12733-1-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230901_041604_428592_75B7AAD9 X-CRM114-Status: GOOD ( 26.80 ) 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 RnJvbTogQmFydG9zeiBHb2xhc3pld3NraSA8YmFydG9zei5nb2xhc3pld3NraUBsaW5hcm8ub3Jn PgoKQ3VycmVudGx5IHRoZSBiY20yODM1IFNQSSBkcml2ZXIgdXNlcyBmdW5jdGlvbnMgdGhhdCBh cmUgYXZhaWxhYmxlCmV4Y2x1c2l2ZWx5IHRvIEdQSU8gcHJvdmlkZXJzIGFzIGEgd2F5IHRvIGhh bmRsZSBhIHBsYXRmb3JtIHF1aXJrLiBMZXQncwp1c2UgYSBzbGlnaHRseSBiZXR0ZXIgYWx0ZXJu YXRpdmUgdGhhdCBhdm9pZHMgcG9raW5nIGFyb3VuZCBpbiBHUElPTElCJ3MKaW50ZXJuYWxzIGFu ZCB1c2UgR1BJTyBsb29rdXAgdGFibGVzLgoKTGluazogaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQv bGlzdHMvbGludXgtZ3Bpby9tc2czNjIxOC5odG1sClNpZ25lZC1vZmYtYnk6IEJhcnRvc3ogR29s YXN6ZXdza2kgPGJhcnRvc3ouZ29sYXN6ZXdza2lAbGluYXJvLm9yZz4KLS0tClRoaXMgaXMgb25s eSBidWlsZC10ZXN0ZWQuIEl0IHNob3VsZCB3b3JrLCBidXQgaXQgd291bGQgYmUgZ3JlYXQgaWYK c29tZW9uZSBmcm9tIGJyb2FkY29tIGNvdWxkIHRlc3QgdGhpcy4KCnYxIC0+IHYyOgotIGRvbid0 IHVzZSBkZXZyZXMgZm9yIG1hbmFnaW5nIHRoZSBHUElPIGJ1dCBwdXQgaXQgbWFudWFsbHkgaW4g LmNsZWFudXAoKQotIGFkZCBhIG1haWxpbmcgbGlzdCBsaW5rIGV4cGxhaW5pbmcgdGhlIGJhY2tn cm91bmQgb2YgdGhlIGJ1ZwotIGZpeCBrZXJuZWxkb2MKCiBkcml2ZXJzL3NwaS9zcGktYmNtMjgz NS5jIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zcGkvc3BpLWJjbTI4MzUuYyBiL2RyaXZlcnMvc3BpL3NwaS1iY20yODM1LmMKaW5k ZXggZTdiYjI3MTQ2NzhhLi5lMDY3Mzg3MDUwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3Nw aS1iY20yODM1LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWJjbTI4MzUuYwpAQCAtMTEsNiArMTEs NyBAQAogICogc3BpLWF0bWVsLmMsIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbCBDb3Jwb3JhdGlv bgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jbGVhbnVwLmg+CiAjaW5jbHVkZSA8bGludXgvY2xr Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVn ZnMuaD4KQEAgLTI2LDkgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgog I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8v Y29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL21hY2hpbmUuaD4gLyogRklYTUU6IHVz aW5nIGNoaXAgaW50ZXJuYWxzICovCi0jaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4gLyog RklYTUU6IHVzaW5nIGNoaXAgaW50ZXJuYWxzICovCisjaW5jbHVkZSA8bGludXgvZ3Bpby9tYWNo aW5lLmg+IC8qIEZJWE1FOiB1c2luZyBHUElPIGxvb2t1cCB0YWJsZXMgKi8KICNpbmNsdWRlIDxs aW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vdmVyZmxvdy5oPgorI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKIC8qIFNQSSByZWdpc3Rl ciBvZmZzZXRzICovCkBAIC04Myw2ICs4NSw3IEBAIE1PRFVMRV9QQVJNX0RFU0MocG9sbGluZ19s aW1pdF91cywKICAqIHN0cnVjdCBiY20yODM1X3NwaSAtIEJDTTI4MzUgU1BJIGNvbnRyb2xsZXIK ICAqIEByZWdzOiBiYXNlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgbWFwCiAgKiBAY2xrOiBjb3JlIGNs b2NrLCBkaXZpZGVkIHRvIGNhbGN1bGF0ZSBzZXJpYWwgY2xvY2sKKyAqIEBjc19ncGlvOiBjaGlw LXNlbGVjdCBHUElPIGRlc2NyaXB0b3IKICAqIEBjbGtfaHo6IGNvcmUgY2xvY2sgY2FjaGVkIHNw ZWVkCiAgKiBAaXJxOiBpbnRlcnJ1cHQsIHNpZ25hbHMgVFggRklGTyBlbXB0eSBvciBSWCBGSUZP IMK+IGZ1bGwKICAqIEB0ZnI6IFNQSSB0cmFuc2ZlciBjdXJyZW50bHkgcHJvY2Vzc2VkCkBAIC0x MTcsNiArMTIwLDcgQEAgTU9EVUxFX1BBUk1fREVTQyhwb2xsaW5nX2xpbWl0X3VzLAogc3RydWN0 IGJjbTI4MzVfc3BpIHsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJc3RydWN0IGNsayAqY2xrOwor CXN0cnVjdCBncGlvX2Rlc2MgKmNzX2dwaW87CiAJdW5zaWduZWQgbG9uZyBjbGtfaHo7CiAJaW50 IGlycTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0ZnI7CkBAIC0xMTU2LDE1ICsxMTYwLDExIEBA IHN0YXRpYyB2b2lkIGJjbTI4MzVfc3BpX2hhbmRsZV9lcnIoc3RydWN0IHNwaV9jb250cm9sbGVy ICpjdGxyLAogCWJjbTI4MzVfc3BpX3Jlc2V0X2h3KGJzKTsKIH0KIAotc3RhdGljIGludCBjaGlw X21hdGNoX25hbWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1 cm4gIXN0cmNtcChjaGlwLT5sYWJlbCwgZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGJjbTI4MzVf c3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYmNtMjgzNV9z cGlkZXYgKnRhcmdldCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOwogCXN0cnVjdCBzcGlfY29udHJv bGxlciAqY3RsciA9IHNwaS0+Y29udHJvbGxlcjsKKwlzdHJ1Y3QgYmNtMjgzNV9zcGkgKmJzID0g c3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7CiAKIAlpZiAodGFyZ2V0LT5jbGVhcl9y eF9kZXNjKQogCQlkbWFlbmdpbmVfZGVzY19mcmVlKHRhcmdldC0+Y2xlYXJfcnhfZGVzYyk7CkBA IC0xMTc1LDYgKzExNzUsOSBAQCBzdGF0aWMgdm9pZCBiY20yODM1X3NwaV9jbGVhbnVwKHN0cnVj dCBzcGlfZGV2aWNlICpzcGkpCiAJCQkJIHNpemVvZih1MzIpLAogCQkJCSBETUFfVE9fREVWSUNF KTsKIAorCWdwaW9kX3B1dChicy0+Y3NfZ3Bpbyk7CisJc3BpX3NldF9jc2dwaW9kKHNwaSwgMCwg TlVMTCk7CisKIAlrZnJlZSh0YXJnZXQpOwogfQogCkBAIC0xMjIxLDcgKzEyMjQsNyBAQCBzdGF0 aWMgaW50IGJjbTI4MzVfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiAJc3RydWN0 IHNwaV9jb250cm9sbGVyICpjdGxyID0gc3BpLT5jb250cm9sbGVyOwogCXN0cnVjdCBiY20yODM1 X3NwaSAqYnMgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShjdGxyKTsKIAlzdHJ1Y3QgYmNt MjgzNV9zcGlkZXYgKnRhcmdldCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOwotCXN0cnVjdCBncGlv X2NoaXAgKmNoaXA7CisJc3RydWN0IGdwaW9kX2xvb2t1cF90YWJsZSAqbG9va3VwIF9fZnJlZShr ZnJlZSkgPSBOVUxMOwogCWludCByZXQ7CiAJdTMyIGNzOwogCkBAIC0xMjg4LDI5ICsxMjkxLDM3 IEBAIHN0YXRpYyBpbnQgYmNtMjgzNV9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkK IAl9CiAKIAkvKgotCSAqIFRyYW5zbGF0ZSBuYXRpdmUgQ1MgdG8gR1BJTworCSAqIFRPRE86IFRo ZSBjb2RlIGJlbG93IGlzIGEgc2xpZ2h0bHkgYmV0dGVyIGFsdGVybmF0aXZlIHRvIHRoZSB1dHRl cgorCSAqIGFidXNlIG9mIHRoZSBHUElPIEFQSSB0aGF0IEkgZm91bmQgaGVyZSBiZWZvcmUuIEl0 IGNyZWF0ZXMgYQorCSAqIHRlbXBvcmFyeSBsb29rdXAgdGFibGUsIGFzc2lnbnMgaXQgdG8gdGhl IFNQSSBkZXZpY2UsIGdldHMgdGhlIEdQSU8KKwkgKiBkZXNjcmlwdG9yIGFuZCB0aGVuIHJlbGVh c2VzIHRoZSBsb29rdXAgdGFibGUuCiAJICoKLQkgKiBGSVhNRTogcG9raW5nIGFyb3VuZCBpbiB0 aGUgZ3Bpb2xpYiBpbnRlcm5hbHMgbGlrZSB0aGlzIGlzCi0JICogbm90IHZlcnkgZ29vZCBwcmFj dGljZS4gRmluZCBhIHdheSB0byBsb2NhdGUgdGhlIHJlYWwgcHJvYmxlbQotCSAqIGFuZCBmaXgg aXQuIFdoeSBpcyB0aGUgR1BJTyBkZXNjcmlwdG9yIGluIHNwaS0+Y3NfZ3Bpb2QKLQkgKiBzb21l dGltZXMgbm90IGFzc2lnbmVkIGNvcnJlY3RseT8gRXJyb25lb3VzIGRldmljZSB0cmVlcz8KKwkg KiBNb3JlIG9uIHRoZSBwcm9ibGVtIHRoYXQgaXQgYWRkcmVzc2VzOgorCSAqICAgaHR0cHM6Ly93 d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtZ3Bpby9tc2czNjIxOC5odG1sCiAJICovCisJbG9v a3VwID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShsb29rdXAsIHRhYmxlLCAxKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFsb29rdXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfY2xlYW51cDsK Kwl9CiAKLQkvKiBnZXQgdGhlIGdwaW8gY2hpcCBmb3IgdGhlIGJhc2UgKi8KLQljaGlwID0gZ3Bp b2NoaXBfZmluZCgicGluY3RybC1iY20yODM1IiwgY2hpcF9tYXRjaF9uYW1lKTsKLQlpZiAoIWNo aXApCi0JCXJldHVybiAwOworCWxvb2t1cC0+ZGV2X2lkID0gZGV2X25hbWUoJnNwaS0+ZGV2KTsK Kwlsb29rdXAtPnRhYmxlWzBdLmtleSA9ICJwaW5jdHJsLWJjbTI4MzUiOworCWxvb2t1cC0+dGFi bGVbMF0uY2hpcF9od251bSA9ICg4IC0gKHNwaV9nZXRfY2hpcHNlbGVjdChzcGksIDApKSk7CisJ bG9va3VwLT50YWJsZVswXS5jb25faWQgPSAiY3MiOworCWxvb2t1cC0+dGFibGVbMF0uZmxhZ3Mg PSBHUElPX0xPT0tVUF9GTEFHU19ERUZBVUxUOwogCi0Jc3BpX3NldF9jc2dwaW9kKHNwaSwgMCwg Z3Bpb2NoaXBfcmVxdWVzdF9vd25fZGVzYyhjaGlwLAotCQkJCQkJCSAgOCAtIChzcGlfZ2V0X2No aXBzZWxlY3Qoc3BpLCAwKSksCi0JCQkJCQkJICBEUlZfTkFNRSwKLQkJCQkJCQkgIEdQSU9fTE9P S1VQX0ZMQUdTX0RFRkFVTFQsCi0JCQkJCQkJICBHUElPRF9PVVRfTE9XKSk7Ci0JaWYgKElTX0VS UihzcGlfZ2V0X2NzZ3Bpb2Qoc3BpLCAwKSkpIHsKLQkJcmV0ID0gUFRSX0VSUihzcGlfZ2V0X2Nz Z3Bpb2Qoc3BpLCAwKSk7CisJZ3Bpb2RfYWRkX2xvb2t1cF90YWJsZShsb29rdXApOworCisJYnMt PmNzX2dwaW8gPSBncGlvZF9nZXQoJnNwaS0+ZGV2LCAiY3MiLCBHUElPRF9PVVRfTE9XKTsKKwln cGlvZF9yZW1vdmVfbG9va3VwX3RhYmxlKGxvb2t1cCk7CisJaWYgKElTX0VSUihicy0+Y3NfZ3Bp bykpIHsKKwkJcmV0ID0gUFRSX0VSUihicy0+Y3NfZ3Bpbyk7CiAJCWdvdG8gZXJyX2NsZWFudXA7 CiAJfQogCisJc3BpX3NldF9jc2dwaW9kKHNwaSwgMCwgYnMtPmNzX2dwaW8pOworCiAJLyogYW5k IHNldCB1cCB0aGUgIm1vZGUiIGFuZCBsZXZlbCAqLwogCWRldl9pbmZvKCZzcGktPmRldiwgInNl dHRpbmcgdXAgbmF0aXZlLUNTJWkgdG8gdXNlIEdQSU9cbiIsCiAJCSBzcGlfZ2V0X2NoaXBzZWxl Y3Qoc3BpLCAwKSk7Ci0tIAoyLjM5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==