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=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 C2794C43461 for ; Mon, 7 Sep 2020 18:19:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7678E20732 for ; Mon, 7 Sep 2020 18:19:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729734AbgIGSTK (ORCPT ); Mon, 7 Sep 2020 14:19:10 -0400 Received: from vps0.lunn.ch ([185.16.172.187]:48154 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729290AbgIGSTG (ORCPT ); Mon, 7 Sep 2020 14:19:06 -0400 Received: from andrew by vps0.lunn.ch with local (Exim 4.94) (envelope-from ) id 1kFLjC-00DfCu-N3; Mon, 07 Sep 2020 20:18:54 +0200 Date: Mon, 7 Sep 2020 20:18:54 +0200 From: Andrew Lunn To: Lukasz Stelmach Cc: "David S. Miller" , Jakub Kicinski , Krzysztof Kozlowski , Kukjin Kim , Rob Herring , Russell King , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, b.zolnierkie@samsung.com, m.szyprowski@samsung.com Subject: Re: [PATCH 1/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver Message-ID: <20200907181854.GD3254313@lunn.ch> References: <20200825180134.GN2403519@lunn.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org > > On Tue, Aug 25, 2020 at 07:03:09PM +0200, Łukasz Stelmach wrote: > >> +++ b/drivers/net/ethernet/asix/ax88796c_ioctl.c > > > > This is an odd filename. The ioctl code is wrong anyway, but there is > > a lot more than ioctl in here. I suggest you give it a new name. > > > > Sure, any suggestions? Sorry, i have forgotten what is actually contained. Does it even need to be a separate file? > >> +u8 ax88796c_check_power(struct ax88796c_device *ax_local) > > > > bool ? > > OK. > > It appears, however, that 0 means OK and 1 !OK. Do you think changing to > TRUE and FALSE (or FALSE and TRUE) is required? Or change the name, ax88796c_check_power_off()? I don't really care, so long as it is logical and not surprising. > >> + AX_READ_STATUS(&ax_local->ax_spi, &ax_status); > >> + if (!(ax_status.status & AX_STATUS_READY)) { > >> + > >> + /* AX88796C in power saving mode */ > >> + AX_WAKEUP(&ax_local->ax_spi); > >> + > >> + /* Check status */ > >> + start_time = jiffies; > >> + do { > >> + if (time_after(jiffies, start_time + HZ/2)) { > >> + netdev_err(ax_local->ndev, > >> + "timeout waiting for wakeup" > >> + " from power saving\n"); > >> + break; > >> + } > >> + > >> + AX_READ_STATUS(&ax_local->ax_spi, &ax_status); > >> + > >> + } while (!(ax_status.status & AX_STATUS_READY)); > > > > include/linux/iopoll.h > > > > Done. The result seems only slightly more elegant since the generic > read_poll_timeout() needs to be employed. Often code like this has bugs in it, not correctly handling the scheduler sleeping longer than expected. That is why i point people at iopoll, no bugs, not elegance. > The manufacturer says > > The AX88796C integrates on-chip Fast Ethernet MAC and PHY, […] > > There is a single integrated PHY in this chip and no possiblity to > connect external one. Do you think it makes sense in such case to > introduce the additional layer of abstraction? Yes it does, because it then uses all the standard phylib code to drive the PHY which many people understand, is well tested, etc. It will make the MAC driver smaller and probably less buggy. > >> +static char *macaddr; > >> +module_param(macaddr, charp, 0); > >> +MODULE_PARM_DESC(macaddr, "MAC address"); > > > > No Module parameters. You can get the MAC address from DT. > > What about systems without DT? Not every bootloader is sophisicated > enough to edit DT before starting kernel. AX88786C is a chip that can be > used in a variety of systems and I'd like to avoid too strong > assumptions. There is also a standardised way to read it from ACPI. And you can set it using ip link set. DaveM will likely NACK a module parameter. > >> +MODULE_AUTHOR("ASIX"); > > > > Do you expect ASIX to support this? > > No. > > > You probably want to put your name here. > > I don't want to be considered as the only author and as far as I can > tell being mentioned as an author does not imply being a > maintainer. Do you think two MODULE_AUTHOR()s be OK? Can you have two? One with two names listed is O.K. > >> + > >> + phy_status = AX_READ(&ax_local->ax_spi, P0_PSCR); > >> + if (phy_status & PSCR_PHYLINK) { > >> + > >> + ax_local->w_state = ax_nop; > >> + time_to_chk = 0; > >> + > >> + } else if (!(phy_status & PSCR_PHYCOFF)) { > >> + /* The ethernet cable has been plugged */ > >> + if (ax_local->w_state == chk_cable) { > >> + if (netif_msg_timer(ax_local)) > >> + netdev_info(ndev, "Cable connected\n"); > >> + > >> + ax_local->w_state = chk_link; > >> + ax_local->w_ticks = 0; > >> + } else { > >> + if (netif_msg_timer(ax_local)) > >> + netdev_info(ndev, "Check media status\n"); > >> + > >> + if (++ax_local->w_ticks == AX88796C_WATCHDOG_RESTART) { > >> + if (netif_msg_timer(ax_local)) > >> + netdev_info(ndev, "Restart autoneg\n"); > >> + ax88796c_mdio_write(ndev, > >> + ax_local->mii.phy_id, MII_BMCR, > >> + (BMCR_SPEED100 | BMCR_ANENABLE | > >> + BMCR_ANRESTART)); > >> + > >> + if (netif_msg_hw(ax_local)) > >> + ax88796c_dump_phy_regs(ax_local); > >> + ax_local->w_ticks = 0; > >> + } > >> + } > >> + } else { > >> + if (netif_msg_timer(ax_local)) > >> + netdev_info(ndev, "Check cable status\n"); > >> + > >> + ax_local->w_state = chk_cable; > >> + } > >> + > >> + ax88796c_set_power_saving(ax_local, ax_local->ps_level); > >> + > >> + if (time_to_chk) > >> + mod_timer(&ax_local->watchdog, jiffies + time_to_chk); > >> +} > > > > This is not the normal use of a watchdog in network drivers. The > > normal case is the network stack as asked the driver to do something, > > normally a TX, and the driver has not reported the action has > > completed. The state of the cable should not make any > > difference. This does not actually appear to do anything useful, like > > kick the hardware to bring it back to life. > > > > Maybe it's the naming that is a problem. Yes, it is not a watchdog, but > rather a periodic housekeeping and it kicks hw if it can't negotiate > the connection. The question is: should the settings be reset in such case. Let see what is left once you convert to phylib. > >> + struct net_device *ndev = ax_local->ndev; > >> + int status; > >> + > >> + do { > >> + if (!(ax_local->checksum & AX_RX_CHECKSUM)) > >> + break; > >> + > >> + /* checksum error bit is set */ > >> + if ((rxhdr->flags & RX_HDR3_L3_ERR) || > >> + (rxhdr->flags & RX_HDR3_L4_ERR)) > >> + break; > >> + > >> + if ((rxhdr->flags & RX_HDR3_L4_TYPE_TCP) || > >> + (rxhdr->flags & RX_HDR3_L4_TYPE_UDP)) { > >> + skb->ip_summed = CHECKSUM_UNNECESSARY; > >> + } > >> + } while (0); > > > > > > ?? > > > > if() break; Should I use goto? Sorry, i was too ambiguous. Why: do { } while (0); It is an odd construct. Andrew 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=-3.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 50AF4C433E2 for ; Mon, 7 Sep 2020 18:20:21 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 F059920732 for ; Mon, 7 Sep 2020 18:20:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="XI65Rcsg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F059920732 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lunn.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=tbiipaz/VlmcL2++YJYCPa+KmfqwphdxDubI64fSzrw=; b=XI65RcsgHi24iymu3MhrAYRRo MMCfxPBZ7bIGFriPcyt9J9qc0CDhuoytVttD76qbdbvPwNqx/xESviBq35ShN6fYARdRDtdFWNx17 DkOtUFVf8hTNlZR8ojDW3AnLAdd7nY95g16B82VhIfdLoAew6x5OJMuiSux5kLqvf8TgbK3rXKRQ/ /H5WCtJNCo2LjUcAoqqgBJOaFOpFe19hnkKGQaesHIJX/3IgTSKs5wwvGraR/tjzryv+TkibEnUku 047Sq8uTvUvvnuxXyCZrMZDK1wGYxvgzV7sTzlFmVqOBCURKlEJaTnok0vc941VTspt0H5kt5qVZY +TghEwqRA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFLjO-0001Tj-41; Mon, 07 Sep 2020 18:19:06 +0000 Received: from vps0.lunn.ch ([185.16.172.187]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFLjK-0001SR-Rg for linux-arm-kernel@lists.infradead.org; Mon, 07 Sep 2020 18:19:04 +0000 Received: from andrew by vps0.lunn.ch with local (Exim 4.94) (envelope-from ) id 1kFLjC-00DfCu-N3; Mon, 07 Sep 2020 20:18:54 +0200 Date: Mon, 7 Sep 2020 20:18:54 +0200 From: Andrew Lunn To: Lukasz Stelmach Subject: Re: [PATCH 1/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver Message-ID: <20200907181854.GD3254313@lunn.ch> References: <20200825180134.GN2403519@lunn.ch> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200907_141902_929582_559DDD3B X-CRM114-Status: GOOD ( 38.41 ) 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: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com, netdev@vger.kernel.org, Russell King , Krzysztof Kozlowski , linux-kernel@vger.kernel.org, Rob Herring , Kukjin Kim , Jakub Kicinski , "David S. Miller" , linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com 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 PiA+IE9uIFR1ZSwgQXVnIDI1LCAyMDIwIGF0IDA3OjAzOjA5UE0gKzAyMDAsIMWBdWthc3ogU3Rl bG1hY2ggd3JvdGU6Cj4gPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2 Y19pb2N0bC5jCj4gPgo+ID4gVGhpcyBpcyBhbiBvZGQgZmlsZW5hbWUuIFRoZSBpb2N0bCBjb2Rl IGlzIHdyb25nIGFueXdheSwgYnV0IHRoZXJlIGlzCj4gPiBhIGxvdCBtb3JlIHRoYW4gaW9jdGwg aW4gaGVyZS4gSSBzdWdnZXN0IHlvdSBnaXZlIGl0IGEgbmV3IG5hbWUuCj4gPgo+IAo+IFN1cmUs IGFueSBzdWdnZXN0aW9ucz8KClNvcnJ5LCBpIGhhdmUgZm9yZ290dGVuIHdoYXQgaXMgYWN0dWFs bHkgY29udGFpbmVkLiBEb2VzIGl0IGV2ZW4gbmVlZAp0byBiZSBhIHNlcGFyYXRlIGZpbGU/Cgo+ ID4+ICt1OCBheDg4Nzk2Y19jaGVja19wb3dlcihzdHJ1Y3QgYXg4ODc5NmNfZGV2aWNlICpheF9s b2NhbCkKPiA+Cj4gPiBib29sID8KPiAKPiBPSy4KPiAKPiBJdCBhcHBlYXJzLCBob3dldmVyLCB0 aGF0IDAgbWVhbnMgT0sgYW5kIDEgIU9LLiBEbyB5b3UgdGhpbmsgY2hhbmdpbmcgdG8KPiBUUlVF IGFuZCBGQUxTRSAob3IgRkFMU0UgYW5kIFRSVUUpIGlzIHJlcXVpcmVkPwoKT3IgY2hhbmdlIHRo ZSBuYW1lLCBheDg4Nzk2Y19jaGVja19wb3dlcl9vZmYoKT8gSSBkb24ndCByZWFsbHkgY2FyZSwK c28gbG9uZyBhcyBpdCBpcyBsb2dpY2FsIGFuZCBub3Qgc3VycHJpc2luZy4KCj4gPj4gKwlBWF9S RUFEX1NUQVRVUygmYXhfbG9jYWwtPmF4X3NwaSwgJmF4X3N0YXR1cyk7Cj4gPj4gKwlpZiAoIShh eF9zdGF0dXMuc3RhdHVzICYgQVhfU1RBVFVTX1JFQURZKSkgewo+ID4+ICsKPiA+PiArCQkvKiBB WDg4Nzk2QyBpbiBwb3dlciBzYXZpbmcgbW9kZSAqLwo+ID4+ICsJCUFYX1dBS0VVUCgmYXhfbG9j YWwtPmF4X3NwaSk7Cj4gPj4gKwo+ID4+ICsJCS8qIENoZWNrIHN0YXR1cyAqLwo+ID4+ICsJCXN0 YXJ0X3RpbWUgPSBqaWZmaWVzOwo+ID4+ICsJCWRvIHsKPiA+PiArCQkJaWYgKHRpbWVfYWZ0ZXIo amlmZmllcywgc3RhcnRfdGltZSArIEhaLzIpKSB7Cj4gPj4gKwkJCQluZXRkZXZfZXJyKGF4X2xv Y2FsLT5uZGV2LAo+ID4+ICsJCQkJCSJ0aW1lb3V0IHdhaXRpbmcgZm9yIHdha2V1cCIKPiA+PiAr CQkJCQkiIGZyb20gcG93ZXIgc2F2aW5nXG4iKTsKPiA+PiArCQkJCWJyZWFrOwo+ID4+ICsJCQl9 Cj4gPj4gKwo+ID4+ICsJCQlBWF9SRUFEX1NUQVRVUygmYXhfbG9jYWwtPmF4X3NwaSwgJmF4X3N0 YXR1cyk7Cj4gPj4gKwo+ID4+ICsJCX0gd2hpbGUgKCEoYXhfc3RhdHVzLnN0YXR1cyAmIEFYX1NU QVRVU19SRUFEWSkpOwo+ID4KPiA+IGluY2x1ZGUvbGludXgvaW9wb2xsLmgKPiA+Cj4gCj4gRG9u ZS4gVGhlIHJlc3VsdCBzZWVtcyBvbmx5IHNsaWdodGx5IG1vcmUgZWxlZ2FudCBzaW5jZSB0aGUg Z2VuZXJpYwo+IHJlYWRfcG9sbF90aW1lb3V0KCkgbmVlZHMgdG8gYmUgZW1wbG95ZWQuCgpPZnRl biBjb2RlIGxpa2UgdGhpcyBoYXMgYnVncyBpbiBpdCwgbm90IGNvcnJlY3RseSBoYW5kbGluZyB0 aGUKc2NoZWR1bGVyIHNsZWVwaW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkLiBUaGF0IGlzIHdoeSBp IHBvaW50IHBlb3BsZSBhdAppb3BvbGwsIG5vIGJ1Z3MsIG5vdCBlbGVnYW5jZS4KCj4gVGhlIG1h bnVmYWN0dXJlciBzYXlzCj4gCj4gICAgIFRoZSBBWDg4Nzk2QyBpbnRlZ3JhdGVzIG9uLWNoaXAg RmFzdCBFdGhlcm5ldCBNQUMgYW5kIFBIWSwgW+KApl0KPiAKPiBUaGVyZSBpcyBhIHNpbmdsZSBp bnRlZ3JhdGVkIFBIWSBpbiB0aGlzIGNoaXAgYW5kIG5vIHBvc3NpYmxpdHkgdG8KPiBjb25uZWN0 IGV4dGVybmFsIG9uZS4gRG8geW91IHRoaW5rIGl0IG1ha2VzIHNlbnNlIGluIHN1Y2ggY2FzZSB0 bwo+IGludHJvZHVjZSB0aGUgYWRkaXRpb25hbCBsYXllciBvZiBhYnN0cmFjdGlvbj8KClllcyBp dCBkb2VzLCBiZWNhdXNlIGl0IHRoZW4gdXNlcyBhbGwgdGhlIHN0YW5kYXJkIHBoeWxpYiBjb2Rl IHRvCmRyaXZlIHRoZSBQSFkgd2hpY2ggbWFueSBwZW9wbGUgdW5kZXJzdGFuZCwgaXMgd2VsbCB0 ZXN0ZWQsIGV0Yy4gSXQKd2lsbCBtYWtlIHRoZSBNQUMgZHJpdmVyIHNtYWxsZXIgYW5kIHByb2Jh Ymx5IGxlc3MgYnVnZ3kuCgo+ID4+ICtzdGF0aWMgY2hhciAqbWFjYWRkcjsKPiA+PiArbW9kdWxl X3BhcmFtKG1hY2FkZHIsIGNoYXJwLCAwKTsKPiA+PiArTU9EVUxFX1BBUk1fREVTQyhtYWNhZGRy LCAiTUFDIGFkZHJlc3MiKTsKPiA+Cj4gPiBObyBNb2R1bGUgcGFyYW1ldGVycy4gWW91IGNhbiBn ZXQgdGhlIE1BQyBhZGRyZXNzIGZyb20gRFQuCj4gCj4gV2hhdCBhYm91dCBzeXN0ZW1zIHdpdGhv dXQgRFQ/IE5vdCBldmVyeSBib290bG9hZGVyIGlzIHNvcGhpc2ljYXRlZAo+IGVub3VnaCB0byBl ZGl0IERUIGJlZm9yZSBzdGFydGluZyBrZXJuZWwuIEFYODg3ODZDIGlzIGEgY2hpcCB0aGF0IGNh biBiZQo+IHVzZWQgaW4gYSB2YXJpZXR5IG9mIHN5c3RlbXMgYW5kIEknZCBsaWtlIHRvIGF2b2lk IHRvbyBzdHJvbmcKPiBhc3N1bXB0aW9ucy4KClRoZXJlIGlzIGFsc28gYSBzdGFuZGFyZGlzZWQg d2F5IHRvIHJlYWQgaXQgZnJvbSBBQ1BJLiBBbmQgeW91IGNhbiBzZXQKaXQgdXNpbmcgaXAgbGlu ayBzZXQuIERhdmVNIHdpbGwgbGlrZWx5IE5BQ0sgYSBtb2R1bGUgcGFyYW1ldGVyLgoKPiA+PiAr TU9EVUxFX0FVVEhPUigiQVNJWCIpOwo+ID4KPiA+IERvIHlvdSBleHBlY3QgQVNJWCB0byBzdXBw b3J0IHRoaXM/IAo+IAo+IE5vLgo+IAo+ID4gWW91IHByb2JhYmx5IHdhbnQgdG8gcHV0IHlvdXIg bmFtZSBoZXJlLgo+IAo+IEkgZG9uJ3Qgd2FudCB0byBiZSBjb25zaWRlcmVkIGFzIHRoZSBvbmx5 IGF1dGhvciBhbmQgYXMgZmFyIGFzIEkgY2FuCj4gdGVsbCBiZWluZyBtZW50aW9uZWQgYXMgYW4g YXV0aG9yIGRvZXMgbm90IGltcGx5IGJlaW5nIGEKPiBtYWludGFpbmVyLiBEbyB5b3UgdGhpbmsg dHdvIE1PRFVMRV9BVVRIT1IoKXMgYmUgT0s/CgpDYW4geW91IGhhdmUgdHdvPyBPbmUgd2l0aCB0 d28gbmFtZXMgbGlzdGVkIGlzIE8uSy4KCj4gPj4gKwo+ID4+ICsJcGh5X3N0YXR1cyA9IEFYX1JF QUQoJmF4X2xvY2FsLT5heF9zcGksIFAwX1BTQ1IpOwo+ID4+ICsJaWYgKHBoeV9zdGF0dXMgJiBQ U0NSX1BIWUxJTkspIHsKPiA+PiArCj4gPj4gKwkJYXhfbG9jYWwtPndfc3RhdGUgPSBheF9ub3A7 Cj4gPj4gKwkJdGltZV90b19jaGsgPSAwOwo+ID4+ICsKPiA+PiArCX0gZWxzZSBpZiAoIShwaHlf c3RhdHVzICYgUFNDUl9QSFlDT0ZGKSkgewo+ID4+ICsJCS8qIFRoZSBldGhlcm5ldCBjYWJsZSBo YXMgYmVlbiBwbHVnZ2VkICovCj4gPj4gKwkJaWYgKGF4X2xvY2FsLT53X3N0YXRlID09IGNoa19j YWJsZSkgewo+ID4+ICsJCQlpZiAobmV0aWZfbXNnX3RpbWVyKGF4X2xvY2FsKSkKPiA+PiArCQkJ CW5ldGRldl9pbmZvKG5kZXYsICJDYWJsZSBjb25uZWN0ZWRcbiIpOwo+ID4+ICsKPiA+PiArCQkJ YXhfbG9jYWwtPndfc3RhdGUgPSBjaGtfbGluazsKPiA+PiArCQkJYXhfbG9jYWwtPndfdGlja3Mg PSAwOwo+ID4+ICsJCX0gZWxzZSB7Cj4gPj4gKwkJCWlmIChuZXRpZl9tc2dfdGltZXIoYXhfbG9j YWwpKQo+ID4+ICsJCQkJbmV0ZGV2X2luZm8obmRldiwgIkNoZWNrIG1lZGlhIHN0YXR1c1xuIik7 Cj4gPj4gKwo+ID4+ICsJCQlpZiAoKytheF9sb2NhbC0+d190aWNrcyA9PSBBWDg4Nzk2Q19XQVRD SERPR19SRVNUQVJUKSB7Cj4gPj4gKwkJCQlpZiAobmV0aWZfbXNnX3RpbWVyKGF4X2xvY2FsKSkK PiA+PiArCQkJCQluZXRkZXZfaW5mbyhuZGV2LCAiUmVzdGFydCBhdXRvbmVnXG4iKTsKPiA+PiAr CQkJCWF4ODg3OTZjX21kaW9fd3JpdGUobmRldiwKPiA+PiArCQkJCQlheF9sb2NhbC0+bWlpLnBo eV9pZCwgTUlJX0JNQ1IsCj4gPj4gKwkJCQkJKEJNQ1JfU1BFRUQxMDAgfCBCTUNSX0FORU5BQkxF IHwKPiA+PiArCQkJCQlCTUNSX0FOUkVTVEFSVCkpOwo+ID4+ICsKPiA+PiArCQkJCWlmIChuZXRp Zl9tc2dfaHcoYXhfbG9jYWwpKQo+ID4+ICsJCQkJCWF4ODg3OTZjX2R1bXBfcGh5X3JlZ3MoYXhf bG9jYWwpOwo+ID4+ICsJCQkJYXhfbG9jYWwtPndfdGlja3MgPSAwOwo+ID4+ICsJCQl9Cj4gPj4g KwkJfQo+ID4+ICsJfSBlbHNlIHsKPiA+PiArCQlpZiAobmV0aWZfbXNnX3RpbWVyKGF4X2xvY2Fs KSkKPiA+PiArCQkJbmV0ZGV2X2luZm8obmRldiwgIkNoZWNrIGNhYmxlIHN0YXR1c1xuIik7Cj4g Pj4gKwo+ID4+ICsJCWF4X2xvY2FsLT53X3N0YXRlID0gY2hrX2NhYmxlOwo+ID4+ICsJfQo+ID4+ ICsKPiA+PiArCWF4ODg3OTZjX3NldF9wb3dlcl9zYXZpbmcoYXhfbG9jYWwsIGF4X2xvY2FsLT5w c19sZXZlbCk7Cj4gPj4gKwo+ID4+ICsJaWYgKHRpbWVfdG9fY2hrKQo+ID4+ICsJCW1vZF90aW1l cigmYXhfbG9jYWwtPndhdGNoZG9nLCBqaWZmaWVzICsgdGltZV90b19jaGspOwo+ID4+ICt9Cj4g Pgo+ID4gVGhpcyBpcyBub3QgdGhlIG5vcm1hbCB1c2Ugb2YgYSB3YXRjaGRvZyBpbiBuZXR3b3Jr IGRyaXZlcnMuIFRoZQo+ID4gbm9ybWFsIGNhc2UgaXMgdGhlIG5ldHdvcmsgc3RhY2sgYXMgYXNr ZWQgdGhlIGRyaXZlciB0byBkbyBzb21ldGhpbmcsCj4gPiBub3JtYWxseSBhIFRYLCBhbmQgdGhl IGRyaXZlciBoYXMgbm90IHJlcG9ydGVkIHRoZSBhY3Rpb24gaGFzCj4gPiBjb21wbGV0ZWQuICBU aGUgc3RhdGUgb2YgdGhlIGNhYmxlIHNob3VsZCBub3QgbWFrZSBhbnkKPiA+IGRpZmZlcmVuY2Uu IFRoaXMgZG9lcyBub3QgYWN0dWFsbHkgYXBwZWFyIHRvIGRvIGFueXRoaW5nIHVzZWZ1bCwgbGlr ZQo+ID4ga2ljayB0aGUgaGFyZHdhcmUgdG8gYnJpbmcgaXQgYmFjayB0byBsaWZlLgo+ID4KPiAK PiBNYXliZSBpdCdzIHRoZSBuYW1pbmcgdGhhdCBpcyBhIHByb2JsZW0uIFllcywgaXQgaXMgbm90 IGEgd2F0Y2hkb2csIGJ1dAo+IHJhdGhlciBhIHBlcmlvZGljIGhvdXNla2VlcGluZyBhbmQgaXQg a2lja3MgaHcgaWYgaXQgY2FuJ3QgbmVnb3RpYXRlCj4gdGhlIGNvbm5lY3Rpb24uIFRoZSBxdWVz dGlvbiBpczogc2hvdWxkIHRoZSBzZXR0aW5ncyBiZSByZXNldCBpbiBzdWNoIGNhc2UuCgpMZXQg c2VlIHdoYXQgaXMgbGVmdCBvbmNlIHlvdSBjb252ZXJ0IHRvIHBoeWxpYi4KCj4gPj4gKwlzdHJ1 Y3QgbmV0X2RldmljZSAqbmRldiA9IGF4X2xvY2FsLT5uZGV2Owo+ID4+ICsJaW50IHN0YXR1czsK PiA+PiArCj4gPj4gKwlkbyB7Cj4gPj4gKwkJaWYgKCEoYXhfbG9jYWwtPmNoZWNrc3VtICYgQVhf UlhfQ0hFQ0tTVU0pKQo+ID4+ICsJCQlicmVhazsKPiA+PiArCj4gPj4gKwkJLyogY2hlY2tzdW0g ZXJyb3IgYml0IGlzIHNldCAqLwo+ID4+ICsJCWlmICgocnhoZHItPmZsYWdzICYgUlhfSERSM19M M19FUlIpIHx8Cj4gPj4gKwkJICAgIChyeGhkci0+ZmxhZ3MgJiBSWF9IRFIzX0w0X0VSUikpCj4g Pj4gKwkJCWJyZWFrOwo+ID4+ICsKPiA+PiArCQlpZiAoKHJ4aGRyLT5mbGFncyAmIFJYX0hEUjNf TDRfVFlQRV9UQ1ApIHx8Cj4gPj4gKwkJICAgIChyeGhkci0+ZmxhZ3MgJiBSWF9IRFIzX0w0X1RZ UEVfVURQKSkgewo+ID4+ICsJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZ Owo+ID4+ICsJCX0KPiA+PiArCX0gd2hpbGUgKDApOwo+ID4KPiA+Cj4gPiA/Pwo+ID4KPiAKPiBp ZigpIGJyZWFrOyBTaG91bGQgSSB1c2UgZ290bz8KClNvcnJ5LCBpIHdhcyB0b28gYW1iaWd1b3Vz LiBXaHk6CgpkbyB7Cn0gd2hpbGUgKDApOwoKSXQgaXMgYW4gb2RkIGNvbnN0cnVjdC4KCiAgIEFu ZHJldwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=