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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 446ECC38A2A for ; Sat, 9 May 2020 00:10:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1D4A0218AC for ; Sat, 9 May 2020 00:10:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728380AbgEIAKX (ORCPT ); Fri, 8 May 2020 20:10:23 -0400 Received: from server-x.ipv4.hkg02.ds.network ([27.111.83.178]:60000 "EHLO mail.gtsys.com.hk" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1728355AbgEIAKW (ORCPT ); Fri, 8 May 2020 20:10:22 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.gtsys.com.hk (Postfix) with ESMTP id 794C820024AB; Sat, 9 May 2020 08:10:18 +0800 (HKT) X-Virus-Scanned: Debian amavisd-new at gtsys.com.hk Received: from mail.gtsys.com.hk ([127.0.0.1]) by localhost (mail.gtsys.com.hk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3oVEyN9YLLIf; Sat, 9 May 2020 08:10:18 +0800 (HKT) Received: from s01.gtsys.com.hk (unknown [10.128.4.2]) by mail.gtsys.com.hk (Postfix) with ESMTP id 5124120020CB; Sat, 9 May 2020 08:10:18 +0800 (HKT) Received: from [10.128.2.32] (unknown [124.217.189.244]) by s01.gtsys.com.hk (Postfix) with ESMTPSA id EA9E5C019F4; Sat, 9 May 2020 08:10:17 +0800 (HKT) Subject: Re: [PATCH v0 1/1] spi: spi-rockchip: add support for spi slave_mode To: Emil Renner Berthing Cc: Jack Lo , Heiko Stuebner , Linux Kernel Mailing List , linux-spi@vger.kernel.org, "open list:ARM/Rockchip SoC..." , Mark Brown , linux-arm-kernel References: <20200508083729.5560-1-chris.ruehl@gtsys.com.hk> <20200508083729.5560-2-chris.ruehl@gtsys.com.hk> From: Chris Ruehl Message-ID: <3890ba80-f9f7-7f22-5cb5-5b78bbf042e7@gtsys.com.hk> Date: Sat, 9 May 2020 08:10:16 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Emil, thanks for the review and your comments On 8/5/2020 9:13 pm, Emil Renner Berthing wrote: > Hi Chris, > > On Fri, 8 May 2020 at 10:47, Chris Ruehl wrote: >> This patch aim to add spi slave mode support to the rockchip driver. >> Fix the wrong usage of num_cs set fix to ROCKCHIP_SPI_MAX_CS_NUM, >> instead use max_native_cs flag to set the limit of native chip-select. >> Enable use_gpio_descriptors to have cs_gpiod for gpio based chip-selects. >> >> Signed-off-by: Chris Ruehl >> --- >> drivers/spi/spi-rockchip.c | 46 +++++++++++++++++++++++++++++++++----- >> 1 file changed, 41 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c >> index 70ef63e0b6b8..9c1ff52c0f85 100644 >> --- a/drivers/spi/spi-rockchip.c >> +++ b/drivers/spi/spi-rockchip.c >> @@ -183,6 +183,9 @@ struct rockchip_spi { >> u8 rsd; >> >> bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM]; >> + >> + bool slave_mode; >> + bool slave_abort; >> }; >> >> static inline void spi_enable_chip(struct rockchip_spi *rs, bool enable) >> @@ -359,7 +362,7 @@ static void rockchip_spi_dma_rxcb(void *data) >> struct rockchip_spi *rs = spi_master_get_devdata(master); >> int state = atomic_fetch_andnot(RXDMA, &rs->state); >> >> - if (state & TXDMA) >> + if (state & TXDMA && !rs->slave_abort) >> return; >> >> spi_enable_chip(rs, false); >> @@ -372,7 +375,7 @@ static void rockchip_spi_dma_txcb(void *data) >> struct rockchip_spi *rs = spi_master_get_devdata(master); >> int state = atomic_fetch_andnot(TXDMA, &rs->state); >> >> - if (state & RXDMA) >> + if (state & RXDMA && !rs->slave_abort) >> return; >> >> /* Wait until the FIFO data completely. */ >> @@ -466,6 +469,10 @@ static void rockchip_spi_config(struct rockchip_spi *rs, >> u32 cr1; >> u32 dmacr = 0; >> >> + if (rs->slavemode) >> + cr0 |= CR0_OPM_SLAVE << CR0_OPM_OFFSET; >> + rs->slave_abort = false; >> + >> cr0 |= rs->rsd << CR0_RSD_OFFSET; >> cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET; >> if (spi->mode & SPI_LSB_FIRST) >> @@ -535,6 +542,16 @@ static size_t rockchip_spi_max_transfer_size(struct spi_device *spi) >> return ROCKCHIP_SPI_MAX_TRANLEN; >> } >> >> +static int rockchip_spi_slave_abort(struct spi_master *master) >> +{ >> + struct rockchip_spi *rs = spi_master_get_devdata(master); >> + >> + rs->slave_abort = true; >> + complete(master); >> + >> + return 0; >> +} >> + >> static int rockchip_spi_transfer_one( >> struct spi_master *master, >> struct spi_device *spi, >> @@ -589,14 +606,25 @@ static int rockchip_spi_probe(struct platform_device *pdev) >> struct spi_master *master; >> struct resource *mem; >> u32 rsd_nsecs; >> + bool slave_mode; >> + u32 num_cs = 1; >> + >> + slave_mode = of_property_read_bool(np, "spi-slave"); >> + >> + if (slave_mode) >> + master = spi_alloc_slave(&pdev->dev, >> + sizeof(struct rockchip_spi)); >> + else >> + master = spi_alloc_master(&pdev->dev, >> + sizeof(struct rockchip_spi)); >> >> - master = spi_alloc_master(&pdev->dev, sizeof(struct rockchip_spi)); >> if (!master) >> return -ENOMEM; >> >> platform_set_drvdata(pdev, master); >> >> rs = spi_master_get_devdata(master); >> + rs->slave_mode = slave_mode; > This entry doesn't seem to be read from any of your code, and even it > it was, the same information is available in master->slave, so I don't > see why you need it in the rockchip_spi struct. I haven't see the slave flag in the spi_controller struct, I will store the information there. > > Also spi_master is just #defined to spi_controller in spi.h, so maybe > consider changing all 'struct spi_master *master' to 'struct > spi_controller *ctrl' now that the driver supports both modes. Can do,  but I think that is better to have a separate patch for it, make it easier for review. > >> /* Get basic io resource and map it */ >> mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> @@ -676,7 +704,16 @@ static int rockchip_spi_probe(struct platform_device *pdev) >> master->auto_runtime_pm = true; >> master->bus_num = pdev->id; >> master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_LSB_FIRST; >> - master->num_chipselect = ROCKCHIP_SPI_MAX_CS_NUM; >> + if (slave_mode) { >> + master->mode_bits |= SPI_NO_CS; >> + master->slave_abort = rockchip_spi_slave_abort; >> + } else { >> + of_property_read_u32(np, "num-cs", &num_cs); >> + master->num_chipselect = num_cs; > If you do something like this you won't need the temporary num_cs variable: > > if (of_property_read_u32(np, "num-cs", &master->num_chipselect)) > master->num_chipselect = 1; Like it , can see clearly the fallback to a default if num-cs isn't set in the dts. > > Also it seems like you're changing the default from > ROCKCHIP_SPI_MAX_CS_NUM to 1 if there is no num-cs property. Did you > check that all boards either have the num-cs property defined or only > needs num_chipselect = 1? Only spi0 of the rockchip has a 2nd native chip select, all others a single only therefore I find it less evil to use 1 vs. ROCKCHIP_SPI_MAX_CS_NUM >> + master->use_gpio_descriptors = true; >> + master->max_native_cs = ROCKCHIP_SPI_MAX_CS_NUM; >> + master->flags = SPI_MASTER_GPIO_SS; >> + } >> master->dev.of_node = pdev->dev.of_node; >> master->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8) | SPI_BPW_MASK(4); >> master->min_speed_hz = rs->freq / BAUDR_SCKDV_MAX; >> @@ -686,7 +723,6 @@ static int rockchip_spi_probe(struct platform_device *pdev) >> master->transfer_one = rockchip_spi_transfer_one; >> master->max_transfer_size = rockchip_spi_max_transfer_size; >> master->handle_err = rockchip_spi_handle_err; >> - master->flags = SPI_MASTER_GPIO_SS; >> >> master->dma_tx = dma_request_chan(rs->dev, "tx"); >> if (IS_ERR(master->dma_tx)) { >> -- >> 2.20.1 >> >> >> _______________________________________________ >> Linux-rockchip mailing list >> Linux-rockchip@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-rockchip -- GTSYS Limited RFID Technology 9/F, Unit E, R07, Kwai Shing Industrial Building Phase 2, 42-46 Tai Lin Pai Road, Kwai Chung, N.T., Hong Kong Tel (852) 9079 9521 Disclaimer: https://www.gtsys.com.hk/email/classified.html 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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 488EFC38A2A for ; Sat, 9 May 2020 00:10:33 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id F28C02184D for ; Sat, 9 May 2020 00:10:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Nn7nSe+Y" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F28C02184D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gtsys.com.hk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=rRCpB3btSvbSzT7rUBEJlvXGLarxHsz7SxWV/X3vlDo=; b=Nn7nSe+Y+96Wo9HIUWVPyquGW S9RQiVtpA3KEhcYQ1PX3dB+gzkUDL/9rTw+42Xvq+KR4lDlpQRsfGnHrfOhsOhYXrG9o49ltud33r v6sXDk+iFXTR6y6IQhbsxd9xlFKq6w+TNamiIGF34bxTfBhe/S4nH+Uir5Se5m72JBGU0gtC7oi4W YZ73KeCFE5zMDu8I5I29EOfln4OfIbn7rFG8ckLW3PvpsojLkwlT1buXdHNnCm92vx3+bRKGbeQqI mtuSZ+kyNGKQNzXYRdujuwAFJ/6vxyTNG5HiJDHng6NxI/9HaRVeN+wqXkABOqJB5wUSgpcj1ge+H x2yjEliRg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jXD4a-00064y-Fe; Sat, 09 May 2020 00:10:32 +0000 Received: from [27.111.83.178] (helo=mail.gtsys.com.hk) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jXD4W-00062X-EI; Sat, 09 May 2020 00:10:30 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.gtsys.com.hk (Postfix) with ESMTP id 794C820024AB; Sat, 9 May 2020 08:10:18 +0800 (HKT) X-Virus-Scanned: Debian amavisd-new at gtsys.com.hk Received: from mail.gtsys.com.hk ([127.0.0.1]) by localhost (mail.gtsys.com.hk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3oVEyN9YLLIf; Sat, 9 May 2020 08:10:18 +0800 (HKT) Received: from s01.gtsys.com.hk (unknown [10.128.4.2]) by mail.gtsys.com.hk (Postfix) with ESMTP id 5124120020CB; Sat, 9 May 2020 08:10:18 +0800 (HKT) Received: from [10.128.2.32] (unknown [124.217.189.244]) by s01.gtsys.com.hk (Postfix) with ESMTPSA id EA9E5C019F4; Sat, 9 May 2020 08:10:17 +0800 (HKT) Subject: Re: [PATCH v0 1/1] spi: spi-rockchip: add support for spi slave_mode To: Emil Renner Berthing References: <20200508083729.5560-1-chris.ruehl@gtsys.com.hk> <20200508083729.5560-2-chris.ruehl@gtsys.com.hk> From: Chris Ruehl Message-ID: <3890ba80-f9f7-7f22-5cb5-5b78bbf042e7@gtsys.com.hk> Date: Sat, 9 May 2020 08:10:16 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200508_171028_810730_4B6CEA1A X-CRM114-Status: GOOD ( 25.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Heiko Stuebner , Jack Lo , Linux Kernel Mailing List , linux-spi@vger.kernel.org, "open list:ARM/Rockchip SoC..." , Mark Brown , linux-arm-kernel Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRW1pbCwKCnRoYW5rcyBmb3IgdGhlIHJldmlldyBhbmQgeW91ciBjb21tZW50cwoKT24gOC81 LzIwMjAgOToxMyBwbSwgRW1pbCBSZW5uZXIgQmVydGhpbmcgd3JvdGU6Cj4gSGkgQ2hyaXMsCj4K PiBPbiBGcmksIDggTWF5IDIwMjAgYXQgMTA6NDcsIENocmlzIFJ1ZWhsIDxjaHJpcy5ydWVobEBn dHN5cy5jb20uaGs+IHdyb3RlOgo+PiBUaGlzIHBhdGNoIGFpbSB0byBhZGQgc3BpIHNsYXZlIG1v ZGUgc3VwcG9ydCB0byB0aGUgcm9ja2NoaXAgZHJpdmVyLgo+PiBGaXggdGhlIHdyb25nIHVzYWdl IG9mIG51bV9jcyBzZXQgZml4IHRvIFJPQ0tDSElQX1NQSV9NQVhfQ1NfTlVNLAo+PiBpbnN0ZWFk IHVzZSBtYXhfbmF0aXZlX2NzIGZsYWcgdG8gc2V0IHRoZSBsaW1pdCBvZiBuYXRpdmUgY2hpcC1z ZWxlY3QuCj4+IEVuYWJsZSB1c2VfZ3Bpb19kZXNjcmlwdG9ycyB0byBoYXZlIGNzX2dwaW9kIGZv ciBncGlvIGJhc2VkIGNoaXAtc2VsZWN0cy4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgUnVl aGwgPGNocmlzLnJ1ZWhsQGd0c3lzLmNvbS5oaz4KPj4gLS0tCj4+ICAgZHJpdmVycy9zcGkvc3Bp LXJvY2tjaGlwLmMgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ PiAgIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+Pgo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMgYi9kcml2ZXJzL3NwaS9z cGktcm9ja2NoaXAuYwo+PiBpbmRleCA3MGVmNjNlMGI2YjguLjljMWZmNTJjMGY4NSAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMKPj4gKysrIGIvZHJpdmVycy9zcGkv c3BpLXJvY2tjaGlwLmMKPj4gQEAgLTE4Myw2ICsxODMsOSBAQCBzdHJ1Y3Qgcm9ja2NoaXBfc3Bp IHsKPj4gICAgICAgICAgdTggcnNkOwo+Pgo+PiAgICAgICAgICBib29sIGNzX2Fzc2VydGVkW1JP Q0tDSElQX1NQSV9NQVhfQ1NfTlVNXTsKPj4gKwo+PiArICAgICAgIGJvb2wgc2xhdmVfbW9kZTsK Pj4gKyAgICAgICBib29sIHNsYXZlX2Fib3J0Owo+PiAgIH07Cj4+Cj4+ICAgc3RhdGljIGlubGlu ZSB2b2lkIHNwaV9lbmFibGVfY2hpcChzdHJ1Y3Qgcm9ja2NoaXBfc3BpICpycywgYm9vbCBlbmFi bGUpCj4+IEBAIC0zNTksNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfc3BpX2RtYV9y eGNiKHZvaWQgKmRhdGEpCj4+ICAgICAgICAgIHN0cnVjdCByb2NrY2hpcF9zcGkgKnJzID0gc3Bp X21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+PiAgICAgICAgICBpbnQgc3RhdGUgPSBhdG9t aWNfZmV0Y2hfYW5kbm90KFJYRE1BLCAmcnMtPnN0YXRlKTsKPj4KPj4gLSAgICAgICBpZiAoc3Rh dGUgJiBUWERNQSkKPj4gKyAgICAgICBpZiAoc3RhdGUgJiBUWERNQSAmJiAhcnMtPnNsYXZlX2Fi b3J0KQo+PiAgICAgICAgICAgICAgICAgIHJldHVybjsKPj4KPj4gICAgICAgICAgc3BpX2VuYWJs ZV9jaGlwKHJzLCBmYWxzZSk7Cj4+IEBAIC0zNzIsNyArMzc1LDcgQEAgc3RhdGljIHZvaWQgcm9j a2NoaXBfc3BpX2RtYV90eGNiKHZvaWQgKmRhdGEpCj4+ICAgICAgICAgIHN0cnVjdCByb2NrY2hp cF9zcGkgKnJzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+PiAgICAgICAgICBp bnQgc3RhdGUgPSBhdG9taWNfZmV0Y2hfYW5kbm90KFRYRE1BLCAmcnMtPnN0YXRlKTsKPj4KPj4g LSAgICAgICBpZiAoc3RhdGUgJiBSWERNQSkKPj4gKyAgICAgICBpZiAoc3RhdGUgJiBSWERNQSAm JiAhcnMtPnNsYXZlX2Fib3J0KQo+PiAgICAgICAgICAgICAgICAgIHJldHVybjsKPj4KPj4gICAg ICAgICAgLyogV2FpdCB1bnRpbCB0aGUgRklGTyBkYXRhIGNvbXBsZXRlbHkuICovCj4+IEBAIC00 NjYsNiArNDY5LDEwIEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3NwaV9jb25maWcoc3RydWN0IHJv Y2tjaGlwX3NwaSAqcnMsCj4+ICAgICAgICAgIHUzMiBjcjE7Cj4+ICAgICAgICAgIHUzMiBkbWFj ciA9IDA7Cj4+Cj4+ICsgICAgICAgaWYgKHJzLT5zbGF2ZW1vZGUpCj4+ICsgICAgICAgICAgICAg ICBjcjAgfD0gQ1IwX09QTV9TTEFWRSA8PCBDUjBfT1BNX09GRlNFVDsKPj4gKyAgICAgICBycy0+ c2xhdmVfYWJvcnQgPSBmYWxzZTsKPj4gKwo+PiAgICAgICAgICBjcjAgfD0gcnMtPnJzZCA8PCBD UjBfUlNEX09GRlNFVDsKPj4gICAgICAgICAgY3IwIHw9IChzcGktPm1vZGUgJiAweDNVKSA8PCBD UjBfU0NQSF9PRkZTRVQ7Cj4+ICAgICAgICAgIGlmIChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNU KQo+PiBAQCAtNTM1LDYgKzU0MiwxNiBAQCBzdGF0aWMgc2l6ZV90IHJvY2tjaGlwX3NwaV9tYXhf dHJhbnNmZXJfc2l6ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiAgICAgICAgICByZXR1cm4g Uk9DS0NISVBfU1BJX01BWF9UUkFOTEVOOwo+PiAgIH0KPj4KPj4gK3N0YXRpYyBpbnQgcm9ja2No aXBfc3BpX3NsYXZlX2Fib3J0KHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCj4+ICt7Cj4+ICsg ICAgICAgc3RydWN0IHJvY2tjaGlwX3NwaSAqcnMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1h c3Rlcik7Cj4+ICsKPj4gKyAgICAgICBycy0+c2xhdmVfYWJvcnQgPSB0cnVlOwo+PiArICAgICAg IGNvbXBsZXRlKG1hc3Rlcik7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiAgIHN0YXRpYyBpbnQgcm9ja2NoaXBfc3BpX3RyYW5zZmVyX29uZSgKPj4gICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAo+PiAgICAgICAgICAgICAgICAgIHN0cnVj dCBzcGlfZGV2aWNlICpzcGksCj4+IEBAIC01ODksMTQgKzYwNiwyNSBAQCBzdGF0aWMgaW50IHJv Y2tjaGlwX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAgICAgICAg ICBzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwo+PiAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug Km1lbTsKPj4gICAgICAgICAgdTMyIHJzZF9uc2VjczsKPj4gKyAgICAgICBib29sIHNsYXZlX21v ZGU7Cj4+ICsgICAgICAgdTMyIG51bV9jcyA9IDE7Cj4+ICsKPj4gKyAgICAgICBzbGF2ZV9tb2Rl ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic3BpLXNsYXZlIik7Cj4+ICsKPj4gKyAgICAg ICBpZiAoc2xhdmVfbW9kZSkKPj4gKyAgICAgICAgICAgICAgIG1hc3RlciA9IHNwaV9hbGxvY19z bGF2ZSgmcGRldi0+ZGV2LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihzdHJ1Y3Qgcm9ja2NoaXBfc3BpKSk7Cj4+ICsgICAgICAgZWxzZQo+PiArICAgICAgICAgICAg ICAgbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgcm9ja2NoaXBfc3BpKSk7Cj4+Cj4+IC0g ICAgICAgbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0 IHJvY2tjaGlwX3NwaSkpOwo+PiAgICAgICAgICBpZiAoIW1hc3RlcikKPj4gICAgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPj4KPj4gICAgICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgbWFzdGVyKTsKPj4KPj4gICAgICAgICAgcnMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRh KG1hc3Rlcik7Cj4+ICsgICAgICAgcnMtPnNsYXZlX21vZGUgPSBzbGF2ZV9tb2RlOwo+IFRoaXMg ZW50cnkgZG9lc24ndCBzZWVtIHRvIGJlIHJlYWQgZnJvbSBhbnkgb2YgeW91ciBjb2RlLCBhbmQg ZXZlbiBpdAo+IGl0IHdhcywgdGhlIHNhbWUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIG1h c3Rlci0+c2xhdmUsIHNvIEkgZG9uJ3QKPiBzZWUgd2h5IHlvdSBuZWVkIGl0IGluIHRoZSByb2Nr Y2hpcF9zcGkgc3RydWN0LgpJIGhhdmVuJ3Qgc2VlIHRoZSBzbGF2ZSBmbGFnIGluIHRoZSBzcGlf Y29udHJvbGxlciBzdHJ1Y3QsIEkgd2lsbCBzdG9yZSB0aGUgCmluZm9ybWF0aW9uCnRoZXJlLgo+ Cj4gQWxzbyBzcGlfbWFzdGVyIGlzIGp1c3QgI2RlZmluZWQgdG8gc3BpX2NvbnRyb2xsZXIgaW4g c3BpLmgsIHNvIG1heWJlCj4gY29uc2lkZXIgY2hhbmdpbmcgYWxsICdzdHJ1Y3Qgc3BpX21hc3Rl ciAqbWFzdGVyJyB0byAnc3RydWN0Cj4gc3BpX2NvbnRyb2xsZXIgKmN0cmwnIG5vdyB0aGF0IHRo ZSBkcml2ZXIgc3VwcG9ydHMgYm90aCBtb2Rlcy4KQ2FuIGRvLMKgIGJ1dCBJIHRoaW5rIHRoYXQg aXMgYmV0dGVyIHRvIGhhdmUgYSBzZXBhcmF0ZSBwYXRjaCBmb3IgaXQsCm1ha2UgaXQgZWFzaWVy IGZvciByZXZpZXcuCj4KPj4gICAgICAgICAgLyogR2V0IGJhc2ljIGlvIHJlc291cmNlIGFuZCBt YXAgaXQgKi8KPj4gICAgICAgICAgbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKPj4gQEAgLTY3Niw3ICs3MDQsMTYgQEAgc3RhdGljIGludCByb2Nr Y2hpcF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gICAgICAgICAg bWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVlOwo+PiAgICAgICAgICBtYXN0ZXItPmJ1c19u dW0gPSBwZGV2LT5pZDsKPj4gICAgICAgICAgbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8 IFNQSV9DUEhBIHwgU1BJX0xPT1AgfCBTUElfTFNCX0ZJUlNUOwo+PiAtICAgICAgIG1hc3Rlci0+ bnVtX2NoaXBzZWxlY3QgPSBST0NLQ0hJUF9TUElfTUFYX0NTX05VTTsKPj4gKyAgICAgICBpZiAo c2xhdmVfbW9kZSkgewo+PiArICAgICAgICAgICAgICAgbWFzdGVyLT5tb2RlX2JpdHMgfD0gU1BJ X05PX0NTOwo+PiArICAgICAgICAgICAgICAgbWFzdGVyLT5zbGF2ZV9hYm9ydCA9IHJvY2tjaGlw X3NwaV9zbGF2ZV9hYm9ydDsKPj4gKyAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAg b2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJudW0tY3MiLCAmbnVtX2NzKTsKPj4gKyAgICAgICAg ICAgICAgIG1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBudW1fY3M7Cj4gSWYgeW91IGRvIHNvbWV0 aGluZyBsaWtlIHRoaXMgeW91IHdvbid0IG5lZWQgdGhlIHRlbXBvcmFyeSBudW1fY3MgdmFyaWFi bGU6Cj4KPiBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJudW0tY3MiLCAmbWFzdGVyLT5u dW1fY2hpcHNlbGVjdCkpCj4gICAgICBtYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gMTsKTGlrZSBp dCAsIGNhbiBzZWUgY2xlYXJseSB0aGUgZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGlmIG51bS1jcyBp c24ndCBzZXQgaW4gdGhlCmR0cy4KPgo+IEFsc28gaXQgc2VlbXMgbGlrZSB5b3UncmUgY2hhbmdp bmcgdGhlIGRlZmF1bHQgZnJvbQo+IFJPQ0tDSElQX1NQSV9NQVhfQ1NfTlVNIHRvIDEgaWYgdGhl cmUgaXMgbm8gbnVtLWNzIHByb3BlcnR5LiBEaWQgeW91Cj4gY2hlY2sgdGhhdCBhbGwgYm9hcmRz IGVpdGhlciBoYXZlIHRoZSBudW0tY3MgcHJvcGVydHkgZGVmaW5lZCBvciBvbmx5Cj4gbmVlZHMg bnVtX2NoaXBzZWxlY3QgPSAxPwpPbmx5IHNwaTAgb2YgdGhlIHJvY2tjaGlwIGhhcyBhIDJuZCBu YXRpdmUgY2hpcCBzZWxlY3QsIGFsbCBvdGhlcnMgYSBzaW5nbGUgb25seQp0aGVyZWZvcmUgSSBm aW5kIGl0IGxlc3MgZXZpbCB0byB1c2UgMSB2cy4gUk9DS0NISVBfU1BJX01BWF9DU19OVU0KCj4+ ICsgICAgICAgICAgICAgICBtYXN0ZXItPnVzZV9ncGlvX2Rlc2NyaXB0b3JzID0gdHJ1ZTsKPj4g KyAgICAgICAgICAgICAgIG1hc3Rlci0+bWF4X25hdGl2ZV9jcyA9IFJPQ0tDSElQX1NQSV9NQVhf Q1NfTlVNOwo+PiArICAgICAgICAgICAgICAgbWFzdGVyLT5mbGFncyA9IFNQSV9NQVNURVJfR1BJ T19TUzsKPj4gKyAgICAgICB9Cj4+ICAgICAgICAgIG1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2 LT5kZXYub2Zfbm9kZTsKPj4gICAgICAgICAgbWFzdGVyLT5iaXRzX3Blcl93b3JkX21hc2sgPSBT UElfQlBXX01BU0soMTYpIHwgU1BJX0JQV19NQVNLKDgpIHwgU1BJX0JQV19NQVNLKDQpOwo+PiAg ICAgICAgICBtYXN0ZXItPm1pbl9zcGVlZF9oeiA9IHJzLT5mcmVxIC8gQkFVRFJfU0NLRFZfTUFY Owo+PiBAQCAtNjg2LDcgKzcyMyw2IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfc3BpX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAgICAgICAgIG1hc3Rlci0+dHJhbnNmZXJf b25lID0gcm9ja2NoaXBfc3BpX3RyYW5zZmVyX29uZTsKPj4gICAgICAgICAgbWFzdGVyLT5tYXhf dHJhbnNmZXJfc2l6ZSA9IHJvY2tjaGlwX3NwaV9tYXhfdHJhbnNmZXJfc2l6ZTsKPj4gICAgICAg ICAgbWFzdGVyLT5oYW5kbGVfZXJyID0gcm9ja2NoaXBfc3BpX2hhbmRsZV9lcnI7Cj4+IC0gICAg ICAgbWFzdGVyLT5mbGFncyA9IFNQSV9NQVNURVJfR1BJT19TUzsKPj4KPj4gICAgICAgICAgbWFz dGVyLT5kbWFfdHggPSBkbWFfcmVxdWVzdF9jaGFuKHJzLT5kZXYsICJ0eCIpOwo+PiAgICAgICAg ICBpZiAoSVNfRVJSKG1hc3Rlci0+ZG1hX3R4KSkgewo+PiAtLQo+PiAyLjIwLjEKPj4KPj4KPj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0Cj4+IExpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5v cmcKPj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y b2NrY2hpcAoKLS0gCkdUU1lTIExpbWl0ZWQgUkZJRCBUZWNobm9sb2d5CjkvRiwgVW5pdCBFLCBS MDcsIEt3YWkgU2hpbmcgSW5kdXN0cmlhbCBCdWlsZGluZyBQaGFzZSAyLAo0Mi00NiBUYWkgTGlu IFBhaSBSb2FkLCBLd2FpIENodW5nLCBOLlQuLCBIb25nIEtvbmcKVGVsICg4NTIpIDkwNzkgOTUy MQoKRGlzY2xhaW1lcjogaHR0cHM6Ly93d3cuZ3RzeXMuY29tLmhrL2VtYWlsL2NsYXNzaWZpZWQu aHRtbAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK