From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vicente Bergas Subject: Re: [BUG] Rockchip SPI: long burst writes produce unexpected result Date: Sun, 07 Apr 2019 02:38:08 +0200 Message-ID: <746e632e-63e2-49af-8e8f-e37270beea73@gmail.com> References: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: Emil Renner Berthing , Heiko Stuebner , Mark Brown Cc: linux-rockchip@lists.infradead.org, linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-Id: linux-rockchip.vger.kernel.org Hi, please, forget my previous mail about eff0275e5253604429aedc42b008c5fcaa6cc597 spi: rockchip: simplify use_dma logic i messed up with commit IDs, sorry. The first offending commit is one later than that: commit 420b82f842941a32adf309ca1b193adfc77616b0 Date: Wed Oct 31 11:57:07 2018 +0100 spi: rockchip: set min/max speed =20 The driver previously checked each transfer if the requested speed was higher than possible with the current spi clock rate and raised the clock rate accordingly. =20 However, there is no check to see if the spi clock was actually set that high and no way to dynamically lower the spi clock rate again. =20 So it seems any potiential users of this functionality are better off just setting the spi clock rate at init using the assigned-clock-rates devicetree property. =20 Removing this dynamic spi clock rate raising allows us let the spi framework handle min/max speeds for us. Regards, Vicen=C3=A7. On Saturday, April 6, 2019 7:34:32 PM CEST, Vicente Bergas wrote: > Hi, > i have been experiencing issues writing to NOR-Flash SPI Memories > from two RK3399-based platforms: gru-kevin and sapphire board. > For kevin, this resulted in a bricked device because that memory > is the only boot device. > Fortunately an external programmer is available. > > In order to isolate where the issue can be, several tests have been > done, after which it makes me think the issue is related to the > Rockchip SPI driver. > > 4KB burst reads work fine. > The issue is only observed on the write burst length. > > Test user user/kernel kernel RK3399 Num space =20 > interface space SoC Status Notes=20 > -------------------------------------------------------- > 1 flashrom linux_mtd MTD/RKspi RKspi Fail > 2 flashrom linux_spi RKspi RKspi Fail > 3 flashrom linux_spi spi_gpio GPIO OK > 4 custom linux_spi spi_gpio GPIO OK 260-byte burst writes > 5 custom linux_spi RKspi RKspi Fail 260-byte burst writes > 6 custom linux_spi RKspi RKspi OK 1-byte burst writes > 7 custom linux_spi RKspi RKspi OK 47-byte burst writes > 8 custom linux_spi RKspi RKspi Fail 48-byte burst writes > > 3, 4) Unaccetably slow, device tree is > spi_gpio { > compatible =3D "spi-gpio"; > #address-cells =3D <1>; > #size-cells =3D <0>; > cs-gpios =3D <&gpio1 RK_PB2 GPIO_ACTIVE_HIGH>; > sck-gpios =3D <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>; > mosi-gpios =3D <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>; > miso-gpios =3D <&gpio1 RK_PA7 GPIO_ACTIVE_HIGH>; > num-chipselects =3D <1>; > spidev@0 { > compatible =3D "spidev"; > reg =3D <0>; > spi-max-frequency =3D <50000000>; > }; > }; > 2, 5, 6, 7, 8) device tree is > &spi1 { > status =3D "okay"; > spidev@0 { > compatible =3D "spidev"; > reg =3D <0>; > spi-max-frequency =3D <50000000>; > }; > }; > 5, 6, 7, 8) Burst writes are performed this way > enum { BURST =3D 48 }; > struct spi_ioc_transfer msg[0x105]; > unsigned i =3D 0; > for (unsigned j =3D 0; j < wcnt; j +=3D BURST) { > msg[i++] =3D { .tx_buf =3D warr, .len =3D BURST warr +=3D BURST; > } > if (rcnt) > msg[i++] =3D { .rx_buf =3D rarr, .len =3D rcnt }; > ioctl(fd, SPI_IOC_MESSAGE(i), msg); > 1, 2, 5, 8) I have no logic analyzer to see what is happenning on the > SPI bus, but when it fails at 48-byte bursts, the contents of the memory > are like this: > Addr Expected Actual > 000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 010 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 020 FF FF FF FF FF FF FF FF FF FF FF FF F1 F2 F3 F4 FF FF FF=20 > FF FF FF FF FF FF F1 F2 F3 F4 FF FF FF > 030 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 070 FF FF FF FF FF FF FF FF FF FF FF FF E1 E2 E3 E4 FF FF FF=20 > FF FF FF E1 E2 E3 E4 FF FF FF FF FF FF > 080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 800 01 02 03 04 00 00 00 00 00 00 00 00 00 00 00 00 01 02 03=20 > 04 00 00 00 00 00 00 00 00 00 00 00 00 > 810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 820 00 00 00 00 00 00 00 00 00 00 00 00 05 06 07 08 00 00 00=20 > 00 00 00 00 00 00 05 06 07 08 00 00 00 > 830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > > Regards, > Vicen=C3=A7. > > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vicente Bergas Subject: Re: [BUG] Rockchip SPI: long burst writes produce unexpected result Date: Sun, 07 Apr 2019 02:38:08 +0200 Message-ID: <746e632e-63e2-49af-8e8f-e37270beea73@gmail.com> References: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Cc: , , , To: Emil Renner Berthing , Heiko Stuebner , Mark Brown Return-path: In-Reply-To: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-spi.vger.kernel.org Hi, please, forget my previous mail about eff0275e5253604429aedc42b008c5fcaa6cc597 spi: rockchip: simplify use_dma logic i messed up with commit IDs, sorry. The first offending commit is one later than that: commit 420b82f842941a32adf309ca1b193adfc77616b0 Date: Wed Oct 31 11:57:07 2018 +0100 spi: rockchip: set min/max speed =20 The driver previously checked each transfer if the requested speed was higher than possible with the current spi clock rate and raised the clock rate accordingly. =20 However, there is no check to see if the spi clock was actually set that high and no way to dynamically lower the spi clock rate again. =20 So it seems any potiential users of this functionality are better off just setting the spi clock rate at init using the assigned-clock-rates devicetree property. =20 Removing this dynamic spi clock rate raising allows us let the spi framework handle min/max speeds for us. Regards, Vicen=C3=A7. On Saturday, April 6, 2019 7:34:32 PM CEST, Vicente Bergas wrote: > Hi, > i have been experiencing issues writing to NOR-Flash SPI Memories > from two RK3399-based platforms: gru-kevin and sapphire board. > For kevin, this resulted in a bricked device because that memory > is the only boot device. > Fortunately an external programmer is available. > > In order to isolate where the issue can be, several tests have been > done, after which it makes me think the issue is related to the > Rockchip SPI driver. > > 4KB burst reads work fine. > The issue is only observed on the write burst length. > > Test user user/kernel kernel RK3399 Num space =20 > interface space SoC Status Notes=20 > -------------------------------------------------------- > 1 flashrom linux_mtd MTD/RKspi RKspi Fail > 2 flashrom linux_spi RKspi RKspi Fail > 3 flashrom linux_spi spi_gpio GPIO OK > 4 custom linux_spi spi_gpio GPIO OK 260-byte burst writes > 5 custom linux_spi RKspi RKspi Fail 260-byte burst writes > 6 custom linux_spi RKspi RKspi OK 1-byte burst writes > 7 custom linux_spi RKspi RKspi OK 47-byte burst writes > 8 custom linux_spi RKspi RKspi Fail 48-byte burst writes > > 3, 4) Unaccetably slow, device tree is > spi_gpio { > compatible =3D "spi-gpio"; > #address-cells =3D <1>; > #size-cells =3D <0>; > cs-gpios =3D <&gpio1 RK_PB2 GPIO_ACTIVE_HIGH>; > sck-gpios =3D <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>; > mosi-gpios =3D <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>; > miso-gpios =3D <&gpio1 RK_PA7 GPIO_ACTIVE_HIGH>; > num-chipselects =3D <1>; > spidev@0 { > compatible =3D "spidev"; > reg =3D <0>; > spi-max-frequency =3D <50000000>; > }; > }; > 2, 5, 6, 7, 8) device tree is > &spi1 { > status =3D "okay"; > spidev@0 { > compatible =3D "spidev"; > reg =3D <0>; > spi-max-frequency =3D <50000000>; > }; > }; > 5, 6, 7, 8) Burst writes are performed this way > enum { BURST =3D 48 }; > struct spi_ioc_transfer msg[0x105]; > unsigned i =3D 0; > for (unsigned j =3D 0; j < wcnt; j +=3D BURST) { > msg[i++] =3D { .tx_buf =3D warr, .len =3D BURST warr +=3D BURST; > } > if (rcnt) > msg[i++] =3D { .rx_buf =3D rarr, .len =3D rcnt }; > ioctl(fd, SPI_IOC_MESSAGE(i), msg); > 1, 2, 5, 8) I have no logic analyzer to see what is happenning on the > SPI bus, but when it fails at 48-byte bursts, the contents of the memory > are like this: > Addr Expected Actual > 000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 010 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 020 FF FF FF FF FF FF FF FF FF FF FF FF F1 F2 F3 F4 FF FF FF=20 > FF FF FF FF FF FF F1 F2 F3 F4 FF FF FF > 030 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 070 FF FF FF FF FF FF FF FF FF FF FF FF E1 E2 E3 E4 FF FF FF=20 > FF FF FF E1 E2 E3 E4 FF FF FF FF FF FF > 080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 0F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 790 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 7F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF=20 > FF FF FF FF FF FF FF FF FF FF FF FF FF > 800 01 02 03 04 00 00 00 00 00 00 00 00 00 00 00 00 01 02 03=20 > 04 00 00 00 00 00 00 00 00 00 00 00 00 > 810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 820 00 00 00 00 00 00 00 00 00 00 00 00 05 06 07 08 00 00 00=20 > 00 00 00 00 00 00 05 06 07 08 00 00 00 > 830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > 870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00=20 > 00 00 00 00 00 00 00 00 00 00 00 00 00 > > Regards, > Vicen=C3=A7. > > > 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=-0.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED 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 AEE60C282DA for ; Sun, 7 Apr 2019 01:12:28 +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 6FB9A2133F for ; Sun, 7 Apr 2019 01:12:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ATzL2JrB"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="iHKvyAA/"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QO6sQOTh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6FB9A2133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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:References:In-Reply-To:Message-ID:MIME-Version:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8Rb+11Fnhvrp+P77Z4yZoNg9hLIDmSN62k1lh3wOIxk=; b=ATzL2JrBGUgb4nFGCZSHONnwu Sw5C4SLwxv+GhJ8WCQNK2+2/VK/6qnWWN5H5Uyv/BmEz3nJKSlVE5QE1NnYAZsNH/pbfD7m9+2flF t2kMo6CKdrP5hU02/awYqvU6VdIBxyKyEXxEboLPEEsr5GcjVUDMhoEjU029yySuEQIjVtcF/eG/X 8Ve2BTqTpVfeOh7roKZaeezkCdHt9WLvpx/apZOWeKSJ4TjhtAerpGLraG2xaLHwtkDN3mlDn/8du 04GJaVRnt9rhB99E3Vzy6flAR31nzKnvR1qT77rBENXW+KiKs/YEXLtE4FdppUs3Z8cMqChnJ7gHr 7ln74WEmw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCwMD-0003dr-Ci; Sun, 07 Apr 2019 01:12:25 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCwMA-0003ce-S0; Sun, 07 Apr 2019 01:12:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:Content-Type: References:In-Reply-To:Message-ID:MIME-Version:Date:Subject:Cc:To:From:Sender :Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=QZX6uhu7+jP+x84UVrwqAXLJgWszIC7pDB2CNkalw1g=; b=iHKvyAA/NmcnftHorDAd7+xr2l NszciPm60K0L+Uk3SDgCGmzbOJzcyo03lID/j6YSRpgeef8AsEaiqpUftnCrQ9GTLF0xO7fd1yibc fvVuaeR8DhVHiPlHXkFHkHTKecUqCMKyLs7M9IGrRnzi258w6H3vY1OVQoXKAttkF5LZBsMgTsoFW mr5VTIqjdsg2JxPDnTODzZ+w0aX1adWqrfsVm75l2tKZB8Lpk80TqYlfzqN8mupRDjcUgJoUFKJL0 gfdiP6yehE9sC5UOJoMXGLnWz4/3sCD5YY+v1A2izyjuMomP+nCqRHkHy7Sd+ETYnzd3Vf9RxGyOn jKOZWjYg==; Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]) by casper.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hCvr3-0006IP-Qm; Sun, 07 Apr 2019 00:40:16 +0000 Received: by mail-wr1-x443.google.com with SMTP id w1so12194549wrp.2; Sat, 06 Apr 2019 17:40:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:mime-version:message-id:in-reply-to :references:user-agent:content-transfer-encoding; bh=QZX6uhu7+jP+x84UVrwqAXLJgWszIC7pDB2CNkalw1g=; b=QO6sQOThgRlNR8C28L4s2Jjnt+MSsgYyYmpY/+zqppbjzpUDYlcWZPKlaWIZW/ziX5 3XgUbia1LrXwWn1Bcobwu7Th8ILA+Go1y0EFvtW03L9vyG/A0bZZwkh7U2lQjALU24T5 Rp7nfq0naXQz4P1ggzKen8SEIxh+AV8QmL3qQlnjK8F6SKM7K1hzflekdWwlhv+vlQnW cn3pmuNk8rkXByf2RE8CIiHBRxnyjBQErhFe0I58yWuxxy2Rje0qvJJkKziMVmZAM2sv H5kh7Mf5/9CO7IiMgynj7BADblTzyOSCEdvLe2r5kZb+Gvyy62PtfSp/yHtBFEZyDmjt zLWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:mime-version:message-id :in-reply-to:references:user-agent:content-transfer-encoding; bh=QZX6uhu7+jP+x84UVrwqAXLJgWszIC7pDB2CNkalw1g=; b=cAetLAePjENjw/mrJT/gVKGfTzEsdatbjbHo7EDjs1ToPihjSdTqT6q21JtDlWpSSZ LQa1N15jNKg3XChRCHNkJaP1LJ+oCosZaMM5KUmNJMHj+kfXkKe+tpeuZxZG2g8GGbxF H77BqNax0jTqcp4QY15qFEyAxKVB1HWKbX73fo7b4aJePlvtzxOmMTgwqjgVrQBRhKuf jbegfOv0HRLXiTnWCAqoazdYd0xLuLF5BL+12oTWhnNzjhct5XGJg4qh4f9zJW1ZT31G nEGR4iE0GSS7dLKih9igkBXHHhyEsbH2eqyYtU2ezZfFbUbr6bRvfFyxMwrCZrKqPRJk hing== X-Gm-Message-State: APjAAAVpCJwmV15ScOmCR3Joc1ioLWHyx/+Nm925/e+OF0KkfYYqFG/2 bp3IKGvmyqtutCE6ArDxOe0= X-Google-Smtp-Source: APXvYqylrzSCcQ2MmplFeNtpZuj1VHcmNdZjnmgjCt37KQ7hNjUFaFqeGX1oPpU8bKwVb0XhozcwBA== X-Received: by 2002:adf:eb02:: with SMTP id s2mr14515635wrn.29.1554597490810; Sat, 06 Apr 2019 17:38:10 -0700 (PDT) Received: from localhost ([92.59.185.54]) by smtp.gmail.com with ESMTPSA id f15sm30604012wru.21.2019.04.06.17.38.09 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sat, 06 Apr 2019 17:38:09 -0700 (PDT) From: Vicente Bergas To: Emil Renner Berthing , Heiko Stuebner , Mark Brown Subject: Re: [BUG] Rockchip SPI: long burst writes produce unexpected result Date: Sun, 07 Apr 2019 02:38:08 +0200 MIME-Version: 1.0 Message-ID: <746e632e-63e2-49af-8e8f-e37270beea73@gmail.com> In-Reply-To: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> References: <21d83ed2-a8db-49cf-ba8c-c7844157d7b0@gmail.com> User-Agent: Trojita X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190407_014014_067411_4503CD03 X-CRM114-Status: GOOD ( 18.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-spi@vger.kernel.org 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 SGksCnBsZWFzZSwgZm9yZ2V0IG15IHByZXZpb3VzIG1haWwgYWJvdXQKICBlZmYwMjc1ZTUyNTM2 MDQ0MjlhZWRjNDJiMDA4YzVmY2FhNmNjNTk3CiAgc3BpOiByb2NrY2hpcDogc2ltcGxpZnkgdXNl X2RtYSBsb2dpYwppIG1lc3NlZCB1cCB3aXRoIGNvbW1pdCBJRHMsIHNvcnJ5LgoKVGhlIGZpcnN0 IG9mZmVuZGluZyBjb21taXQgaXMgb25lIGxhdGVyIHRoYW4gdGhhdDoKY29tbWl0IDQyMGI4MmY4 NDI5NDFhMzJhZGYzMDljYTFiMTkzYWRmYzc3NjE2YjAKRGF0ZTogICBXZWQgT2N0IDMxIDExOjU3 OjA3IDIwMTggKzAxMDAKCiAgICBzcGk6IHJvY2tjaGlwOiBzZXQgbWluL21heCBzcGVlZAogICAg CiAgICBUaGUgZHJpdmVyIHByZXZpb3VzbHkgY2hlY2tlZCBlYWNoIHRyYW5zZmVyIGlmIHRoZQog ICAgcmVxdWVzdGVkIHNwZWVkIHdhcyBoaWdoZXIgdGhhbiBwb3NzaWJsZSB3aXRoIHRoZQogICAg Y3VycmVudCBzcGkgY2xvY2sgcmF0ZSBhbmQgcmFpc2VkIHRoZSBjbG9jayByYXRlCiAgICBhY2Nv cmRpbmdseS4KICAgIAogICAgSG93ZXZlciwgdGhlcmUgaXMgbm8gY2hlY2sgdG8gc2VlIGlmIHRo ZSBzcGkgY2xvY2sKICAgIHdhcyBhY3R1YWxseSBzZXQgdGhhdCBoaWdoIGFuZCBubyB3YXkgdG8g ZHluYW1pY2FsbHkKICAgIGxvd2VyIHRoZSBzcGkgY2xvY2sgcmF0ZSBhZ2Fpbi4KICAgIAogICAg U28gaXQgc2VlbXMgYW55IHBvdGllbnRpYWwgdXNlcnMgb2YgdGhpcyBmdW5jdGlvbmFsaXR5CiAg ICBhcmUgYmV0dGVyIG9mZiBqdXN0IHNldHRpbmcgdGhlIHNwaSBjbG9jayByYXRlIGF0IGluaXQK ICAgIHVzaW5nIHRoZSBhc3NpZ25lZC1jbG9jay1yYXRlcyBkZXZpY2V0cmVlIHByb3BlcnR5Lgog ICAgCiAgICBSZW1vdmluZyB0aGlzIGR5bmFtaWMgc3BpIGNsb2NrIHJhdGUgcmFpc2luZyBhbGxv d3MKICAgIHVzIGxldCB0aGUgc3BpIGZyYW1ld29yayBoYW5kbGUgbWluL21heCBzcGVlZHMKICAg IGZvciB1cy4KClJlZ2FyZHMsCiAgVmljZW7Dpy4KCk9uIFNhdHVyZGF5LCBBcHJpbCA2LCAyMDE5 IDc6MzQ6MzIgUE0gQ0VTVCwgVmljZW50ZSBCZXJnYXMgd3JvdGU6Cj4gSGksCj4gaSBoYXZlIGJl ZW4gZXhwZXJpZW5jaW5nIGlzc3VlcyB3cml0aW5nIHRvIE5PUi1GbGFzaCBTUEkgTWVtb3JpZXMK PiBmcm9tIHR3byBSSzMzOTktYmFzZWQgcGxhdGZvcm1zOiBncnUta2V2aW4gYW5kIHNhcHBoaXJl IGJvYXJkLgo+IEZvciBrZXZpbiwgdGhpcyByZXN1bHRlZCBpbiBhIGJyaWNrZWQgZGV2aWNlIGJl Y2F1c2UgdGhhdCBtZW1vcnkKPiBpcyB0aGUgb25seSBib290IGRldmljZS4KPiBGb3J0dW5hdGVs eSBhbiBleHRlcm5hbCBwcm9ncmFtbWVyIGlzIGF2YWlsYWJsZS4KPgo+IEluIG9yZGVyIHRvIGlz b2xhdGUgd2hlcmUgdGhlIGlzc3VlIGNhbiBiZSwgc2V2ZXJhbCB0ZXN0cyBoYXZlIGJlZW4KPiBk b25lLCBhZnRlciB3aGljaCBpdCBtYWtlcyBtZSB0aGluayB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0 byB0aGUKPiBSb2NrY2hpcCBTUEkgZHJpdmVyLgo+Cj4gNEtCIGJ1cnN0IHJlYWRzIHdvcmsgZmlu ZS4KPiBUaGUgaXNzdWUgaXMgb25seSBvYnNlcnZlZCBvbiB0aGUgd3JpdGUgYnVyc3QgbGVuZ3Ro Lgo+Cj4gVGVzdCB1c2VyICAgICB1c2VyL2tlcm5lbCBrZXJuZWwgICAgUkszMzk5ICBOdW0gIHNw YWNlICAgIAo+IGludGVyZmFjZSAgIHNwYWNlICAgICAgIFNvQyAgIFN0YXR1cyBOb3RlcyAKPiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ IDEgICAgZmxhc2hyb20gbGludXhfbXRkICAgTVREL1JLc3BpIFJLc3BpICAgRmFpbAo+IDIgICAg Zmxhc2hyb20gbGludXhfc3BpICAgUktzcGkgICAgIFJLc3BpICAgRmFpbAo+IDMgICAgZmxhc2hy b20gbGludXhfc3BpICAgc3BpX2dwaW8gIEdQSU8gICAgT0sKPiA0ICAgIGN1c3RvbSAgIGxpbnV4 X3NwaSAgIHNwaV9ncGlvICBHUElPICAgIE9LICAgMjYwLWJ5dGUgYnVyc3Qgd3JpdGVzCj4gNSAg ICBjdXN0b20gICBsaW51eF9zcGkgICBSS3NwaSAgICAgUktzcGkgICBGYWlsIDI2MC1ieXRlIGJ1 cnN0IHdyaXRlcwo+IDYgICAgY3VzdG9tICAgbGludXhfc3BpICAgUktzcGkgICAgIFJLc3BpICAg T0sgICAgIDEtYnl0ZSBidXJzdCB3cml0ZXMKPiA3ICAgIGN1c3RvbSAgIGxpbnV4X3NwaSAgIFJL c3BpICAgICBSS3NwaSAgIE9LICAgIDQ3LWJ5dGUgYnVyc3Qgd3JpdGVzCj4gOCAgICBjdXN0b20g ICBsaW51eF9zcGkgICBSS3NwaSAgICAgUktzcGkgICBGYWlsICA0OC1ieXRlIGJ1cnN0IHdyaXRl cwo+Cj4gMywgNCkgVW5hY2NldGFibHkgc2xvdywgZGV2aWNlIHRyZWUgaXMKPiAgc3BpX2dwaW8g ewo+ICAgIGNvbXBhdGlibGUgPSAic3BpLWdwaW8iOwo+ICAgICNhZGRyZXNzLWNlbGxzID0gPDE+ Owo+ICAgICNzaXplLWNlbGxzID0gPDA+Owo+ICAgIGNzLWdwaW9zICAgPSA8JmdwaW8xIFJLX1BC MiBHUElPX0FDVElWRV9ISUdIPjsKPiAgICBzY2stZ3Bpb3MgID0gPCZncGlvMSBSS19QQjEgR1BJ T19BQ1RJVkVfSElHSD47Cj4gICAgbW9zaS1ncGlvcyA9IDwmZ3BpbzEgUktfUEIwIEdQSU9fQUNU SVZFX0hJR0g+Owo+ICAgIG1pc28tZ3Bpb3MgPSA8JmdwaW8xIFJLX1BBNyBHUElPX0FDVElWRV9I SUdIPjsKPiAgICBudW0tY2hpcHNlbGVjdHMgPSA8MT47Cj4gICAgc3BpZGV2QDAgewo+ICAgICAg Y29tcGF0aWJsZSA9ICJzcGlkZXYiOwo+ICAgICAgcmVnID0gPDA+Owo+ICAgICAgc3BpLW1heC1m cmVxdWVuY3kgPSA8NTAwMDAwMDA+Owo+ICAgIH07Cj4gIH07Cj4gMiwgNSwgNiwgNywgOCkgZGV2 aWNlIHRyZWUgaXMKPiAgJnNwaTEgewo+ICAgIHN0YXR1cyA9ICJva2F5IjsKPiAgICBzcGlkZXZA MCB7Cj4gICAgICBjb21wYXRpYmxlID0gInNwaWRldiI7Cj4gICAgICByZWcgPSA8MD47Cj4gICAg ICBzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47Cj4gICAgfTsKPiAgfTsKPiA1LCA2LCA3 LCA4KSBCdXJzdCB3cml0ZXMgYXJlIHBlcmZvcm1lZCB0aGlzIHdheQo+ICBlbnVtIHsgQlVSU1Qg PSA0OCB9Owo+ICBzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciBtc2dbMHgxMDVdOwo+ICB1bnNpZ25l ZCBpID0gMDsKPiAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHdjbnQ7IGogKz0gQlVSU1QpIHsK PiAgICBtc2dbaSsrXSA9IHsgLnR4X2J1ZiA9IHdhcnIsIC5sZW4gPSBCVVJTVDx3Y250LWogPyBC VVJTVCA6IHdjbnQtaiB9Owo+ICAgIHdhcnIgKz0gQlVSU1Q7Cj4gIH0KPiAgaWYgKHJjbnQpCj4g ICAgbXNnW2krK10gPSB7IC5yeF9idWYgPSByYXJyLCAubGVuID0gcmNudCB9Owo+ICBpb2N0bChm ZCwgU1BJX0lPQ19NRVNTQUdFKGkpLCBtc2cpOwo+IDEsIDIsIDUsIDgpIEkgaGF2ZSBubyBsb2dp YyBhbmFseXplciB0byBzZWUgd2hhdCBpcyBoYXBwZW5uaW5nIG9uIHRoZQo+IFNQSSBidXMsIGJ1 dCB3aGVuIGl0IGZhaWxzIGF0IDQ4LWJ5dGUgYnVyc3RzLCB0aGUgY29udGVudHMgb2YgdGhlIG1l bW9yeQo+IGFyZSBsaWtlIHRoaXM6Cj4gQWRkciBFeHBlY3RlZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBY3R1YWwKPiAwMDAgIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZG IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGICBGRiBGRiBGRiAKPiBGRiBGRiBGRiBGRiBGRiBGRiBG RiBGRiBGRiBGRiBGRiBGRiBGRgo+IDAxMCAgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYg RkYgRkYgRkYgRkYgRkYgRkYgIEZGIEZGIEZGIAo+IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZG IEZGIEZGIEZGIEZGCj4gMDIwICBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBG MSBGMiBGMyBGNCAgRkYgRkYgRkYgCj4gRkYgRkYgRkYgRkYgRkYgRkYgRjEgRjIgRjMgRjQgRkYg RkYgRkYKPiAwMzAgIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZG IEZGICBGRiBGRiBGRiAKPiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRgo+ IDA0MCAgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgIEZG IEZGIEZGIAo+IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGCj4gMDUwICBG RiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiAgRkYgRkYgRkYg Cj4gRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYKPiAwNjAgIEZGIEZGIEZG IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGICBGRiBGRiBGRiAKPiBGRiBG RiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRgo+IDA3MCAgRkYgRkYgRkYgRkYgRkYg RkYgRkYgRkYgRkYgRkYgRkYgRkYgRTEgRTIgRTMgRTQgIEZGIEZGIEZGIAo+IEZGIEZGIEZGIEUx IEUyIEUzIEU0IEZGIEZGIEZGIEZGIEZGIEZGCj4gMDgwICBGRiBGRiBGRiBGRiBGRiBGRiBGRiBG RiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiAgRkYgRkYgRkYgCj4gRkYgRkYgRkYgRkYgRkYgRkYg RkYgRkYgRkYgRkYgRkYgRkYgRkYKPiAwOTAgIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZG IEZGIEZGIEZGIEZGIEZGIEZGICBGRiBGRiBGRiAKPiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBG RiBGRiBGRiBGRiBGRgo+IDBBMCAgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYg RkYgRkYgRkYgRkYgIEZGIEZGIEZGIAo+IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZG IEZGIEZGCj4gMEIwICBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBG RiBGRiAgRkYgRkYgRkYgCj4gRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYK PiAwQzAgIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGICBG RiBGRiBGRiAKPiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRgo+IDBEMCAg RkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgIEZGIEZGIEZG IAo+IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGCj4gMEUwICBGRiBGRiBG RiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiAgRkYgRkYgRkYgCj4gRkYg RkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYKPiAwRjAgIEZGIEZGIEZGIEZGIEZG IEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGIEZGICBGRiBGRiBGRiAKPiBGRiBGRiBGRiBG RiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRiBGRgo+IDc4MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIAo+IDAwIDAwIDAwIDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwCj4gNzkwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgCj4gMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg MDAgMDAgMDAgMDAgMDAKPiA3QTAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw IDAwIDAwIDAwIDAwICAwMCAwMCAwMCAKPiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCAwMCAwMAo+IDdCMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg MDAgMDAgIDAwIDAwIDAwIAo+IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw Cj4gN0MwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAg MDAgMDAgMDAgCj4gMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKPiA3RDAg IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAwMCAw MCAKPiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAo+IDdFMCAgMDAgMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIAo+IDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCj4gN0YwICAwMCAwMCAwMCAwMCAw MCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgRkYgRkYgCj4gRkYgRkYgRkYg RkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYgRkYKPiA4MDAgIDAxIDAyIDAzIDA0IDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMSAwMiAwMyAKPiAwNCAwMCAwMCAwMCAwMCAw MCAwMCAwMCAwMCAwMCAwMCAwMCAwMAo+IDgxMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIAo+IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwCj4gODIwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MCAwNSAwNiAwNyAwOCAgMDAgMDAgMDAgCj4gMDAgMDAgMDAgMDAgMDAgMDAgMDUgMDYgMDcgMDgg MDAgMDAgMDAKPiA4MzAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw IDAwIDAwICAwMCAwMCAwMCAKPiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAw MAo+IDg0MCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAg IDAwIDAwIDAwIAo+IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCj4gODUw ICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgMDAg MDAgCj4gMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKPiA4NjAgIDAwIDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAKPiAw MCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAo+IDg3MCAgMDAgMDAgMDAgMDAg MDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIAo+IDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCj4KPiBSZWdhcmRzLAo+ICBWaWNlbsOnLgo+ Cj4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK