From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: Re: [alsa-devel] [PATCH 4/9] ASoC: tegra: add Tegra210 based I2S driver Date: Wed, 22 Jan 2020 09:23:29 +0300 Message-ID: <598fe377-5b95-d30a-eb64-89a645166d42@gmail.com> References: <1579530198-13431-1-git-send-email-spujar@nvidia.com> <1579530198-13431-5-git-send-email-spujar@nvidia.com> <0c571858-d72c-97c2-2d6a-ead6fdde06eb@nvidia.com> <444731da-c4cd-8578-a732-c803eef31ef0@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: Content-Language: en-US Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Sameer Pujar , perex-/Fr2/VpizcU@public.gmane.org, tiwai-IBi9RG/b67k@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org, atalambedu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, viswanathl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, sharadg-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, rlokhande-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, mkumard-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, dramesh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org List-Id: linux-tegra@vger.kernel.org 22.01.2020 07:32, Sameer Pujar пишет: [snip] >>>>> +static int tegra210_i2s_remove(struct platform_device *pdev) >>>>> +{ >>>>> +     pm_runtime_disable(&pdev->dev); >>>>> +     if (!pm_runtime_status_suspended(&pdev->dev)) >>>>> +             tegra210_i2s_runtime_suspend(&pdev->dev); >>>> This breaks device's RPM refcounting if it was disabled in the active >>>> state. This code should be removed. At most you could warn about the >>>> unxpected RPM state here, but it shouldn't be necessary. >>> I guess this was added for safety and explicit suspend keeps clock >>> disabled. >>> Not sure if ref-counting of the device matters when runtime PM is >>> disabled and device is removed. >>> I see few drivers using this way. >> It should matter (if I'm not missing something) because RPM should be in >> a wrecked state once you'll try to re-load the driver's module. Likely >> that those few other drivers are wrong. >> >> [snip] > > Once the driver is re-loaded and RPM is enabled, I don't think it would use > the same 'dev' and the corresponding ref count. Doesn't it use the new > counters? > If RPM is not working for some reason, most likely it would be the case > for other > devices. What best driver can do is probably do a force suspend during > removal if > already not done. I would prefer to keep, since multiple drivers still > have it, > unless there is a real harm in doing so. I took a closer look and looks like the counter actually should be reset. Still I don't think that it's a good practice to make changes underneath of RPM, it may strike back. >>>>> +     int rx_fifo_th; >>>> Could rx_fifo_th be negative? >>> rx_fifo_th itself does not take negative values, explicit >>> typecasting> is avoided in "if" condition by declaring this as "int" >> Explicit typecasting isn't needed for integers. > > What I meant was, rx_fifo_th is checked against a 'int' variable in an > "if" condition. What's the problem with comparing of unsigned with signed? Besides, cif_conf.audio_ch > I2S_RX_FIFO_DEPTH can't be ever true, isn't it? I2S_RX_FIFO_DEPTH=64, channels_max=16 Lastly, nothing stops you to make max_th unsigned. 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=-2.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 8B0BDC33CAF for ; Wed, 22 Jan 2020 06:23:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5E3E021835 for ; Wed, 22 Jan 2020 06:23:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K2/S4unh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726026AbgAVGXf (ORCPT ); Wed, 22 Jan 2020 01:23:35 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:45749 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725836AbgAVGXf (ORCPT ); Wed, 22 Jan 2020 01:23:35 -0500 Received: by mail-wr1-f66.google.com with SMTP id j42so5897291wrj.12; Tue, 21 Jan 2020 22:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Yjvd1axR1PqdZTIc08mAWLXgtWgaoB8nmRFDHlqUans=; b=K2/S4unhlBehk1R8CImxKUVzTj990lKFx5dXDMkTvyEXr4UKrzrzaJWtzTJK4oAVny /XjEoKXgkRFpLdunILsdbOB7Et62ma1dPT+77evlk85kGROQyYzEjeqITh0kcJjEOV84 TG4vliwoXpPeJ/aCpyUQnyynCOmZqeBut0z67FnDACKkXPqwiOSFokDTHybWPToOwf1u 1ldo2LER1/QRDhDA9m/r5mBKuXfQxg42gG8T73pVTPCsi/jyvbDgHjM6TqubwBJrtjOx YBUorN29LqnOwdjYjBoT9/WDOcZXAgwS0JAVzypCHaHt1osWC0F/yqUh4kC5Q8olNcJR oykQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Yjvd1axR1PqdZTIc08mAWLXgtWgaoB8nmRFDHlqUans=; b=QZaRALdW71FxIm009wZG5ElWG0hYDSFfdy7BXWZvbuFKVg9ulpYNsGvzMhr21P/ZeJ hrEQDnHWuaABwGlBhWvS0Al2UOa40OBQqPoKTY5Rd33fTyrloQrHoI2Ky27ifty7kXoI DHgAjfoWQT0Y5twSpuBx2Q9EzAwl23ohHKzCZa7Qt9eJGxc02peNzS9OsRSlLp9ekGXK gPtLNxTLrKZzGRyNEJucsH610Mt6OlcBXF+s5V1W3BOXCn8ZkgNLWmTowP/1QoD+U61F o98X5zgs9mRiTEmsmpBjX+D4P6f/ljbXClBCsJltuUodI94e1mb6qX45n4nt0f4S8ybm 0mHg== X-Gm-Message-State: APjAAAWSqmPiSVpcyECMRD9xflcH1CwMHfbDLKd/alvFg5gGAXvESgc4 OJKDviRt1tt+yQO+4/rlS1A= X-Google-Smtp-Source: APXvYqwCc0NSmc1uA3xXZfLgQ5hogHHHXFIsuV5k40DFrrvLSeqTJgiNuYig6ngVcci+7DDK6HQwzQ== X-Received: by 2002:adf:e74f:: with SMTP id c15mr9019793wrn.274.1579674213025; Tue, 21 Jan 2020 22:23:33 -0800 (PST) Received: from [192.168.2.145] (79-139-233-37.dynamic.spd-mgts.ru. [79.139.233.37]) by smtp.googlemail.com with ESMTPSA id f1sm56691885wrp.93.2020.01.21.22.23.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jan 2020 22:23:31 -0800 (PST) Subject: Re: [alsa-devel] [PATCH 4/9] ASoC: tegra: add Tegra210 based I2S driver To: Sameer Pujar , perex@perex.cz, tiwai@suse.com, robh+dt@kernel.org Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, atalambedu@nvidia.com, linux-kernel@vger.kernel.org, lgirdwood@gmail.com, jonathanh@nvidia.com, viswanathl@nvidia.com, sharadg@nvidia.com, broonie@kernel.org, thierry.reding@gmail.com, linux-tegra@vger.kernel.org, rlokhande@nvidia.com, mkumard@nvidia.com, dramesh@nvidia.com References: <1579530198-13431-1-git-send-email-spujar@nvidia.com> <1579530198-13431-5-git-send-email-spujar@nvidia.com> <0c571858-d72c-97c2-2d6a-ead6fdde06eb@nvidia.com> <444731da-c4cd-8578-a732-c803eef31ef0@gmail.com> From: Dmitry Osipenko Message-ID: <598fe377-5b95-d30a-eb64-89a645166d42@gmail.com> Date: Wed, 22 Jan 2020 09:23:29 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 22.01.2020 07:32, Sameer Pujar пишет: [snip] >>>>> +static int tegra210_i2s_remove(struct platform_device *pdev) >>>>> +{ >>>>> +     pm_runtime_disable(&pdev->dev); >>>>> +     if (!pm_runtime_status_suspended(&pdev->dev)) >>>>> +             tegra210_i2s_runtime_suspend(&pdev->dev); >>>> This breaks device's RPM refcounting if it was disabled in the active >>>> state. This code should be removed. At most you could warn about the >>>> unxpected RPM state here, but it shouldn't be necessary. >>> I guess this was added for safety and explicit suspend keeps clock >>> disabled. >>> Not sure if ref-counting of the device matters when runtime PM is >>> disabled and device is removed. >>> I see few drivers using this way. >> It should matter (if I'm not missing something) because RPM should be in >> a wrecked state once you'll try to re-load the driver's module. Likely >> that those few other drivers are wrong. >> >> [snip] > > Once the driver is re-loaded and RPM is enabled, I don't think it would use > the same 'dev' and the corresponding ref count. Doesn't it use the new > counters? > If RPM is not working for some reason, most likely it would be the case > for other > devices. What best driver can do is probably do a force suspend during > removal if > already not done. I would prefer to keep, since multiple drivers still > have it, > unless there is a real harm in doing so. I took a closer look and looks like the counter actually should be reset. Still I don't think that it's a good practice to make changes underneath of RPM, it may strike back. >>>>> +     int rx_fifo_th; >>>> Could rx_fifo_th be negative? >>> rx_fifo_th itself does not take negative values, explicit >>> typecasting> is avoided in "if" condition by declaring this as "int" >> Explicit typecasting isn't needed for integers. > > What I meant was, rx_fifo_th is checked against a 'int' variable in an > "if" condition. What's the problem with comparing of unsigned with signed? Besides, cif_conf.audio_ch > I2S_RX_FIFO_DEPTH can't be ever true, isn't it? I2S_RX_FIFO_DEPTH=64, channels_max=16 Lastly, nothing stops you to make max_th unsigned. 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=-2.0 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_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 A72A4C32771 for ; Wed, 22 Jan 2020 06:24:32 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (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 3271C21835 for ; Wed, 22 Jan 2020 06:24:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="NSIo99KM"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K2/S4unh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3271C21835 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 711D51612; Wed, 22 Jan 2020 07:23:40 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 711D51612 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1579674270; bh=44p71kcd15g6d7XtqlWU6NmB/wxeldbUwDhqzVrS1f8=; h=To:References:From:Date:In-Reply-To:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=NSIo99KMW+Dff4W0DHQ6ZEw7vzgXViHNpZ7FXoMmU6xe3U4eD6Mp5gvUad7ksAv9j u/dl7k8Er5VEicKgNkae9gPr1LXQj/wvrvKmvZe68XE1Ru6R4adX5mKEiboZi1McWB q2OWp5+rBqR80di7RaWXxAwRjeTjUh/EZadUCeYE= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id D14A0F801D8; Wed, 22 Jan 2020 07:23:39 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 8E43DF8020C; Wed, 22 Jan 2020 07:23:37 +0100 (CET) Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 390BBF800BA for ; Wed, 22 Jan 2020 07:23:33 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 390BBF800BA Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K2/S4unh" Received: by mail-wr1-x443.google.com with SMTP id q6so5909373wro.9 for ; Tue, 21 Jan 2020 22:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Yjvd1axR1PqdZTIc08mAWLXgtWgaoB8nmRFDHlqUans=; b=K2/S4unhlBehk1R8CImxKUVzTj990lKFx5dXDMkTvyEXr4UKrzrzaJWtzTJK4oAVny /XjEoKXgkRFpLdunILsdbOB7Et62ma1dPT+77evlk85kGROQyYzEjeqITh0kcJjEOV84 TG4vliwoXpPeJ/aCpyUQnyynCOmZqeBut0z67FnDACKkXPqwiOSFokDTHybWPToOwf1u 1ldo2LER1/QRDhDA9m/r5mBKuXfQxg42gG8T73pVTPCsi/jyvbDgHjM6TqubwBJrtjOx YBUorN29LqnOwdjYjBoT9/WDOcZXAgwS0JAVzypCHaHt1osWC0F/yqUh4kC5Q8olNcJR oykQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Yjvd1axR1PqdZTIc08mAWLXgtWgaoB8nmRFDHlqUans=; b=QxsbnC6weFvQviLelb31enrZZ8E8gj0HbNZjD9FyiOzKc1bWpAFAhR24PkjSmQqRDs t/PSOtwkQgB4VG78vlD/jQxo7mYIQK7SjLHTeyfwMtjyQKGjyhA75Yj248hAvyMpkX7E 4UjzrnYJHRxh8ZuMHgyAx+jcmy33DK5an+Bqhlfc+ah6ImA+Pd+b0H3ar4ArtCcWsYGJ 9jOr+Gjx9+lsZHU0+KU10W1vGwEYhS4KstBrXFA82hzpJsqRllaWOvFyezx9r8b7rkES l/3Xo1xkTSdsvFbumyTt2dIswvRQoi+lPbWt4tx8L+SR4jFQLfkJBTVrsTUmjlpq982c Tung== X-Gm-Message-State: APjAAAV3OnQH4qasj+ZhGznpJaPNgMUey8y0npMlktCEwbmpMmU1G5M4 YQMjatyO0xYJ8ZeG8tVx7uA= X-Google-Smtp-Source: APXvYqwCc0NSmc1uA3xXZfLgQ5hogHHHXFIsuV5k40DFrrvLSeqTJgiNuYig6ngVcci+7DDK6HQwzQ== X-Received: by 2002:adf:e74f:: with SMTP id c15mr9019793wrn.274.1579674213025; Tue, 21 Jan 2020 22:23:33 -0800 (PST) Received: from [192.168.2.145] (79-139-233-37.dynamic.spd-mgts.ru. [79.139.233.37]) by smtp.googlemail.com with ESMTPSA id f1sm56691885wrp.93.2020.01.21.22.23.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jan 2020 22:23:31 -0800 (PST) To: Sameer Pujar , perex@perex.cz, tiwai@suse.com, robh+dt@kernel.org References: <1579530198-13431-1-git-send-email-spujar@nvidia.com> <1579530198-13431-5-git-send-email-spujar@nvidia.com> <0c571858-d72c-97c2-2d6a-ead6fdde06eb@nvidia.com> <444731da-c4cd-8578-a732-c803eef31ef0@gmail.com> From: Dmitry Osipenko Message-ID: <598fe377-5b95-d30a-eb64-89a645166d42@gmail.com> Date: Wed, 22 Jan 2020 09:23:29 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, lgirdwood@gmail.com, jonathanh@nvidia.com, viswanathl@nvidia.com, linux-tegra@vger.kernel.org, broonie@kernel.org, atalambedu@nvidia.com, sharadg@nvidia.com, thierry.reding@gmail.com, rlokhande@nvidia.com, mkumard@nvidia.com, dramesh@nvidia.com Subject: Re: [alsa-devel] [PATCH 4/9] ASoC: tegra: add Tegra210 based I2S driver X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" MjIuMDEuMjAyMCAwNzozMiwgU2FtZWVyIFB1amFyINC/0LjRiNC10YI6CltzbmlwXQo+Pj4+PiAr c3RhdGljIGludCB0ZWdyYTIxMF9pMnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqDCoCBwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRl dik7Cj4+Pj4+ICvCoMKgwqDCoCBpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRl di0+ZGV2KSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ZWdyYTIxMF9pMnNfcnVu dGltZV9zdXNwZW5kKCZwZGV2LT5kZXYpOwo+Pj4+IFRoaXMgYnJlYWtzIGRldmljZSdzIFJQTSBy ZWZjb3VudGluZyBpZiBpdCB3YXMgZGlzYWJsZWQgaW4gdGhlIGFjdGl2ZQo+Pj4+IHN0YXRlLiBU aGlzIGNvZGUgc2hvdWxkIGJlIHJlbW92ZWQuIEF0IG1vc3QgeW91IGNvdWxkIHdhcm4gYWJvdXQg dGhlCj4+Pj4gdW54cGVjdGVkIFJQTSBzdGF0ZSBoZXJlLCBidXQgaXQgc2hvdWxkbid0IGJlIG5l Y2Vzc2FyeS4KPj4+IEkgZ3Vlc3MgdGhpcyB3YXMgYWRkZWQgZm9yIHNhZmV0eSBhbmQgZXhwbGlj aXQgc3VzcGVuZCBrZWVwcyBjbG9jawo+Pj4gZGlzYWJsZWQuCj4+PiBOb3Qgc3VyZSBpZiByZWYt Y291bnRpbmcgb2YgdGhlIGRldmljZSBtYXR0ZXJzIHdoZW4gcnVudGltZSBQTSBpcwo+Pj4gZGlz YWJsZWQgYW5kIGRldmljZSBpcyByZW1vdmVkLgo+Pj4gSSBzZWUgZmV3IGRyaXZlcnMgdXNpbmcg dGhpcyB3YXkuCj4+IEl0IHNob3VsZCBtYXR0ZXIgKGlmIEknbSBub3QgbWlzc2luZyBzb21ldGhp bmcpIGJlY2F1c2UgUlBNIHNob3VsZCBiZSBpbgo+PiBhIHdyZWNrZWQgc3RhdGUgb25jZSB5b3Un bGwgdHJ5IHRvIHJlLWxvYWQgdGhlIGRyaXZlcidzIG1vZHVsZS4gTGlrZWx5Cj4+IHRoYXQgdGhv c2UgZmV3IG90aGVyIGRyaXZlcnMgYXJlIHdyb25nLgo+Pgo+PiBbc25pcF0KPiAKPiBPbmNlIHRo ZSBkcml2ZXIgaXMgcmUtbG9hZGVkIGFuZCBSUE0gaXMgZW5hYmxlZCwgSSBkb24ndCB0aGluayBp dCB3b3VsZCB1c2UKPiB0aGUgc2FtZSAnZGV2JyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVmIGNv dW50LiBEb2Vzbid0IGl0IHVzZSB0aGUgbmV3Cj4gY291bnRlcnM/Cj4gSWYgUlBNIGlzIG5vdCB3 b3JraW5nIGZvciBzb21lIHJlYXNvbiwgbW9zdCBsaWtlbHkgaXQgd291bGQgYmUgdGhlIGNhc2UK PiBmb3Igb3RoZXIKPiBkZXZpY2VzLiBXaGF0IGJlc3QgZHJpdmVyIGNhbiBkbyBpcyBwcm9iYWJs eSBkbyBhIGZvcmNlIHN1c3BlbmQgZHVyaW5nCj4gcmVtb3ZhbCBpZgo+IGFscmVhZHkgbm90IGRv bmUuIEkgd291bGQgcHJlZmVyIHRvIGtlZXAsIHNpbmNlIG11bHRpcGxlIGRyaXZlcnMgc3RpbGwK PiBoYXZlIGl0LAo+IHVubGVzcyB0aGVyZSBpcyBhIHJlYWwgaGFybSBpbiBkb2luZyBzby4KCkkg dG9vayBhIGNsb3NlciBsb29rIGFuZCBsb29rcyBsaWtlIHRoZSBjb3VudGVyIGFjdHVhbGx5IHNo b3VsZCBiZQpyZXNldC4gU3RpbGwgSSBkb24ndCB0aGluayB0aGF0IGl0J3MgYSBnb29kIHByYWN0 aWNlIHRvIG1ha2UgY2hhbmdlcwp1bmRlcm5lYXRoIG9mIFJQTSwgaXQgbWF5IHN0cmlrZSBiYWNr LgoKPj4+Pj4gK8KgwqDCoMKgIGludCByeF9maWZvX3RoOwo+Pj4+IENvdWxkIHJ4X2ZpZm9fdGgg YmUgbmVnYXRpdmU/Cj4+PiByeF9maWZvX3RoIGl0c2VsZiBkb2VzIG5vdCB0YWtlIG5lZ2F0aXZl IHZhbHVlcywgZXhwbGljaXQKPj4+IHR5cGVjYXN0aW5nPiBpcyBhdm9pZGVkIGluICJpZiIgY29u ZGl0aW9uIGJ5IGRlY2xhcmluZyB0aGlzIGFzICJpbnQiCj4+IEV4cGxpY2l0IHR5cGVjYXN0aW5n IGlzbid0IG5lZWRlZCBmb3IgaW50ZWdlcnMuCj4gCj4gV2hhdCBJIG1lYW50IHdhcywgcnhfZmlm b190aCBpcyBjaGVja2VkIGFnYWluc3QgYSAnaW50JyB2YXJpYWJsZSBpbiBhbgo+ICJpZiIgY29u ZGl0aW9uLgoKV2hhdCdzIHRoZSBwcm9ibGVtIHdpdGggY29tcGFyaW5nIG9mIHVuc2lnbmVkIHdp dGggc2lnbmVkPwoKQmVzaWRlcywgY2lmX2NvbmYuYXVkaW9fY2ggPiBJMlNfUlhfRklGT19ERVBU SCBjYW4ndCBiZSBldmVyIHRydWUsIGlzbid0Cml0PyBJMlNfUlhfRklGT19ERVBUSD02NCwgY2hh bm5lbHNfbWF4PTE2CgpMYXN0bHksIG5vdGhpbmcgc3RvcHMgeW91IHRvIG1ha2UgbWF4X3RoIHVu c2lnbmVkLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB bHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cHM6 Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==