From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B745BC46467 for ; Thu, 19 Jan 2023 17:03:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230453AbjASRDU (ORCPT ); Thu, 19 Jan 2023 12:03:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229659AbjASRDR (ORCPT ); Thu, 19 Jan 2023 12:03:17 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44D7AA5CB for ; Thu, 19 Jan 2023 09:03:15 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id m5-20020a05600c4f4500b003db03b2559eso1741744wmq.5 for ; Thu, 19 Jan 2023 09:03:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=xoDg7X6k/SjUQcyWVxb++knJQou/HfRjq27D3pK1OL0=; b=1hrdE6EhVZapN/amnndIOVoCyNf2PV5AUtAzDtKRv2WE7dv+4JYyd12hJtZZmEQfNg 3unnzAFt3Ei2XSXRQ/382g6ej48VXzNYBSocOMr2bvg3dUc9WGRZhEkCDD8OjAxdeFDS j/hEXC0lom9dHs+G9YMstoUY1PzRiX4Gq9UniA38h1YFkA4N6cDzUHMgV/ta21+W7iqA sYtJ5hc5jHIH69AI267vdjXQH8ttU24qNCX6UVpI5JojnLTa9HdfJoK1VbvfIHs4aHVA 1LUXsoBE/oGphFk0PGffJ/ThRyFprXILexDcb91ZNqkjorykOr6X1SKXSKRMuSuEvh8A 5AAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xoDg7X6k/SjUQcyWVxb++knJQou/HfRjq27D3pK1OL0=; b=13Qh9JJpsZEg8uKtHgP7NP2oLHxW+8Epp2OHtp7WPFp/LB5KeCVlOcnawQ1ex3sBEd 7Bj1B+hrgbTiWDkfcdqRvK95HY+PcgJy9mRjM2QgnD6BxhIcdpT+mbk04F+6Ww641dr8 UTu0/sYOF+IpMILQ5ARcTMGt8HYUOFM85+6FutEHdsKJBzbHXRZWUYMesMrLmngb5bUE V25QwzIH5KcB+gNYJUzN5sy/WpXiqqHZHbxyfcm28DKL3C3uOOypPVCdaswSYvPHT/RV CYgQiYgSv4C/otsMpUYQEc0wTVgviXxgBEN9lUhvnM7VKGU+OOkgjHb7IyBrvQVpgzzY HhSw== X-Gm-Message-State: AFqh2kqEXcWf8q7UiyDXOVVfKzNWZ25Va20mDYTcsZVtCEh12ogXaOuE yX3FMDGC+8Q/T/qz6py/5zNxsw== X-Google-Smtp-Source: AMrXdXvVqir7OAh4deRHUpeRJymXdvbDE5Wl8w9DSxpLlPsa1In7nF1ob0+NOI0SLMtg6L6CnI5eQg== X-Received: by 2002:a05:600c:1d8e:b0:3d9:f9ef:3d23 with SMTP id p14-20020a05600c1d8e00b003d9f9ef3d23mr11316499wms.23.1674147793846; Thu, 19 Jan 2023 09:03:13 -0800 (PST) Received: from [10.8.2.10] ([195.200.221.42]) by smtp.gmail.com with ESMTPSA id g10-20020a05600c4eca00b003a3442f1229sm6193662wmq.29.2023.01.19.09.03.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 19 Jan 2023 09:03:10 -0800 (PST) Message-ID: <187b0fe1-1f14-d8b8-c827-1e824da0b1d3@baylibre.com> Date: Thu, 19 Jan 2023 18:03:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.0 Subject: Re: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for thermal sensors To: Daniel Lezcano , "Rafael J. Wysocki" , Amit Kucheria , Rob Herring , Krzysztof Kozlowski , Zhang Rui Cc: AngeloGioacchino Del Regno , Fabien Parent , Matthias Brugger , Markus Schneider-Pargmann , linux-pm@vger.kernel.org, Rob Herring , Michael Kao , linux-kernel@vger.kernel.org, Hsin-Yi Wang , linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com> <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org> <0644aede-c281-3919-50e0-4466f6587d81@linaro.org> Content-Language: en-US From: Amjad Ouled-Ameur In-Reply-To: <0644aede-c281-3919-50e0-4466f6587d81@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Daniel, On 12/29/22 16:49, Daniel Lezcano wrote: > On 06/12/2022 10:18, Amjad Ouled-Ameur wrote: >> Hi Daniel, >> On Mon Dec 5, 2022 at 8:39 PM CET, Daniel Lezcano wrote: >>> >>> Hi Amjad, >>> >>> >>> On 05/12/2022 11:41, Amjad Ouled-Ameur wrote: >>> >>> [ ... ] >>> >>>>>> @@ -1161,11 +1197,24 @@ static int mtk_thermal_probe(struct platform_device *pdev) >>>>>>             platform_set_drvdata(pdev, mt); >>>>>>     -    tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt, >>>>>> -                          &mtk_thermal_ops); >>>>>> -    if (IS_ERR(tzdev)) { >>>>>> -        ret = PTR_ERR(tzdev); >>>>>> -        goto err_disable_clk_peri_therm; >>>>>> +    for (i = 0; i < mt->conf->num_sensors + 1; i++) { >>>>>> +        tz = devm_kmalloc(&pdev->dev, sizeof(*tz), GFP_KERNEL); >>>>>> +        if (!tz) >>>>>> +            return -ENOMEM; >>>>>> + >>>>>> +        tz->mt = mt; >>>>>> +        tz->id = i; >>>>>> + >>>>>> +        tzdev = devm_thermal_of_zone_register(&pdev->dev, i, tz, (i == 0) ? >>>>>> +                                 &mtk_thermal_ops : >>>>>> + &mtk_thermal_sensor_ops); >>>>> >>>>> Here you use again the aggregation >>>> I addressed this concern in V6, could you please take a look and let me >>>> know what you think [0]. >>>> >>>> [0]: https://lore.kernel.org/all/5eb0cdc2-e9f9-dd42-bf80-b7dcd8bcc196@baylibre.com/ >>> >>> May I misunderstanding but AFAICS, this patch is setting the >>> mtk_thermal_ops if the sensor id is zero. The get_temp is computing the >>> max temperature in this ops which is what we don't want to do. >> >> Correct, but I think that is out of scope of this patchset, as the current >> driver already uses mtk_thermal_ops for sensor 0. The focus of this patchset >> is to add support for the other sensors. >> >> Besides, what do you suggest as a clean implementation if the current one >> no longer meets thermal core requirements ? > > IIUC, there is a sensor per couple of cores. 1 x 2Bigs, 1 x 2Bigs, 1 x 4 Little, right ? MT8365 SoC has 4 x A53 CPUs. The SoC has 4 thermal zones per sensor. Thermal zone 0 corresponds to all 4 x A53 CPUs, the other thermal zones (1, 2 and 3) has nothing to do with CPUs. The cooling device type used for CPUs is passive. FYI, thermal zones 1, 2 and 3 are present in the SoC for debug-purpose only, they are not supposed to be used for production. Regards, Amjad > > If it is the case, then a thermal zone per sensor with the trip points and a cooling device for each of them. > > The two thermal zones for the big will share the same cooling device. The little thermal zone will have its own cooling device. > > If there is the GPU, then its own cooling device also with devfreq. > > >>> Linaro.org │ Open source software for ARM SoCs >>> >>> Follow Linaro:  Facebook | >>> Twitter | >>> Blog >> > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2F665C004D4 for ; Thu, 19 Jan 2023 17:04:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rGgHFo9ai7xn7KYFYxi5/EYwOB49xpSKy3SbQyKf/t0=; b=oKIzDDkRutlhu8 t6Bal5J1wSgI/3b+Iy1ldMwCVKr3H0jOjgrZhRHVFt3l4vqAEFiqciFLznU4uBRisZbNZpjwDYb+N g4qcOBn8F6R3mqt+iREjALiPdmMr8x6X0P2B0HqQM7SR717JG9NL/8hzPdg/6MEFlyGcyGslfrjn7 69ce7RjAPIVxxNmX8O6tekHCxcbjEUP8X7JBoDz3G1zYCedIwKDZtswIOaHtY02kpL63t0Gv/LZHZ YvsFolX97xl/Moa+ECZPGE4+689GTePVLpsmrVFbFeLgE7M0oXJ1/P6VEpLR8e1Zgyn6pYAAi2aS8 RQZKeOTzGGnOsEdPNeKA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pIYJt-0068dv-37; Thu, 19 Jan 2023 17:03:21 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pIYJo-0068cZ-87 for linux-arm-kernel@lists.infradead.org; Thu, 19 Jan 2023 17:03:18 +0000 Received: by mail-wm1-x32a.google.com with SMTP id d4-20020a05600c3ac400b003db1de2aef0so1753819wms.2 for ; Thu, 19 Jan 2023 09:03:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=xoDg7X6k/SjUQcyWVxb++knJQou/HfRjq27D3pK1OL0=; b=1hrdE6EhVZapN/amnndIOVoCyNf2PV5AUtAzDtKRv2WE7dv+4JYyd12hJtZZmEQfNg 3unnzAFt3Ei2XSXRQ/382g6ej48VXzNYBSocOMr2bvg3dUc9WGRZhEkCDD8OjAxdeFDS j/hEXC0lom9dHs+G9YMstoUY1PzRiX4Gq9UniA38h1YFkA4N6cDzUHMgV/ta21+W7iqA sYtJ5hc5jHIH69AI267vdjXQH8ttU24qNCX6UVpI5JojnLTa9HdfJoK1VbvfIHs4aHVA 1LUXsoBE/oGphFk0PGffJ/ThRyFprXILexDcb91ZNqkjorykOr6X1SKXSKRMuSuEvh8A 5AAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xoDg7X6k/SjUQcyWVxb++knJQou/HfRjq27D3pK1OL0=; b=jG7Oj3coUmCvk8hkyh4K3mVA4H2/7xAnX4M7uAM2Ff2XpMY5cCAIA9g7WSVBAeKnNC RikzwBY1+UlBAWLBByVces/upSZ7hLiRLs9hxVUEwCpfceL4Yp0MNlC9GrjKd3d46l5r xXaGYOxSlDj69JgHB6oz4ssf8LmT3W2lS3GsGqLAXp6WyfxPfDRyS5KS4DhtmXF+9rTJ E3cJhx2rbd//ew9k+uuyBEH3p5bmhjvM+/n+Tmy+C9tgGZaUS3Vg3pQTz4RjKCIXeL9H CWcsDcDNqXpNis37Cgq6WguU/vJV3HJXb1bV05ua12gq5n8UiJd/8KwYGoyAEuK12xAX B/xQ== X-Gm-Message-State: AFqh2kqXeE5r7y/NZD5bmCTBSVrYugC4QYBwpRMnAmzmX8CsYLCA8dT3 EvF26XQ3fNa3JGsjgfjXzMbrig== X-Google-Smtp-Source: AMrXdXvVqir7OAh4deRHUpeRJymXdvbDE5Wl8w9DSxpLlPsa1In7nF1ob0+NOI0SLMtg6L6CnI5eQg== X-Received: by 2002:a05:600c:1d8e:b0:3d9:f9ef:3d23 with SMTP id p14-20020a05600c1d8e00b003d9f9ef3d23mr11316499wms.23.1674147793846; Thu, 19 Jan 2023 09:03:13 -0800 (PST) Received: from [10.8.2.10] ([195.200.221.42]) by smtp.gmail.com with ESMTPSA id g10-20020a05600c4eca00b003a3442f1229sm6193662wmq.29.2023.01.19.09.03.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 19 Jan 2023 09:03:10 -0800 (PST) Message-ID: <187b0fe1-1f14-d8b8-c827-1e824da0b1d3@baylibre.com> Date: Thu, 19 Jan 2023 18:03:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.0 Subject: Re: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for thermal sensors To: Daniel Lezcano , "Rafael J. Wysocki" , Amit Kucheria , Rob Herring , Krzysztof Kozlowski , Zhang Rui Cc: AngeloGioacchino Del Regno , Fabien Parent , Matthias Brugger , Markus Schneider-Pargmann , linux-pm@vger.kernel.org, Rob Herring , Michael Kao , linux-kernel@vger.kernel.org, Hsin-Yi Wang , linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org References: <20221018-up-i350-thermal-bringup-v7-0-ebf08ff2eddb@baylibre.com> <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org> <0644aede-c281-3919-50e0-4466f6587d81@linaro.org> Content-Language: en-US From: Amjad Ouled-Ameur In-Reply-To: <0644aede-c281-3919-50e0-4466f6587d81@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230119_090316_315173_0A9C1A5B X-CRM114-Status: GOOD ( 24.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRGFuaWVsLAoKT24gMTIvMjkvMjIgMTY6NDksIERhbmllbCBMZXpjYW5vIHdyb3RlOgo+IE9u IDA2LzEyLzIwMjIgMTA6MTgsIEFtamFkIE91bGVkLUFtZXVyIHdyb3RlOgo+PiBIaSBEYW5pZWws Cj4+IE9uIE1vbiBEZWMgNSwgMjAyMiBhdCA4OjM5IFBNIENFVCwgRGFuaWVsIExlemNhbm8gd3Jv dGU6Cj4+Pgo+Pj4gSGkgQW1qYWQsCj4+Pgo+Pj4KPj4+IE9uIDA1LzEyLzIwMjIgMTE6NDEsIEFt amFkIE91bGVkLUFtZXVyIHdyb3RlOgo+Pj4KPj4+IFsgLi4uIF0KPj4+Cj4+Pj4+PiBAQCAtMTE2 MSwxMSArMTE5NywyNCBAQCBzdGF0aWMgaW50IG10a190aGVybWFsX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4+PiDCoMKgwqAgwqDCoMKgwqDCoMKgwqAgcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgbXQpOwo+Pj4+Pj4gwqDCoMKgIC3CoMKgwqAgdHpkZXYgPSBkZXZt X3RoZXJtYWxfb2Zfem9uZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAwLCBtdCwKPj4+Pj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmbXRrX3RoZXJt YWxfb3BzKTsKPj4+Pj4+IC3CoMKgwqAgaWYgKElTX0VSUih0emRldikpIHsKPj4+Pj4+IC3CoMKg wqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKHR6ZGV2KTsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBn b3RvIGVycl9kaXNhYmxlX2Nsa19wZXJpX3RoZXJtOwo+Pj4+Pj4gK8KgwqDCoCBmb3IgKGkgPSAw OyBpIDwgbXQtPmNvbmYtPm51bV9zZW5zb3JzICsgMTsgaSsrKSB7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgdHogPSBkZXZtX2ttYWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0eiksIEdGUF9LRVJO RUwpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghdHopCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCB0ei0+bXQgPSBtdDsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB0ei0+aWQgPSBpOwo+Pj4+Pj4g Kwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHR6ZGV2ID0gZGV2bV90aGVybWFsX29mX3pvbmVfcmVn aXN0ZXIoJnBkZXYtPmRldiwgaSwgdHosIChpID09IDApID8KPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZtdGtf dGhlcm1hbF9vcHMgOgo+Pj4+Pj4gKyAmbXRrX3RoZXJtYWxfc2Vuc29yX29wcyk7Cj4+Pj4+Cj4+ Pj4+IEhlcmUgeW91IHVzZSBhZ2FpbiB0aGUgYWdncmVnYXRpb24KPj4+PiBJIGFkZHJlc3NlZCB0 aGlzIGNvbmNlcm4gaW4gVjYsIGNvdWxkIHlvdSBwbGVhc2UgdGFrZSBhIGxvb2sgYW5kIGxldCBt ZQo+Pj4+IGtub3cgd2hhdCB5b3UgdGhpbmsgWzBdLgo+Pj4+Cj4+Pj4gWzBdOiBodHRwczovL2xv cmUua2VybmVsLm9yZy9hbGwvNWViMGNkYzItZTlmOS1kZDQyLWJmODAtYjdkY2Q4YmNjMTk2QGJh eWxpYnJlLmNvbS8KPj4+Cj4+PiBNYXkgSSBtaXN1bmRlcnN0YW5kaW5nIGJ1dCBBRkFJQ1MsIHRo aXMgcGF0Y2ggaXMgc2V0dGluZyB0aGUKPj4+IG10a190aGVybWFsX29wcyBpZiB0aGUgc2Vuc29y IGlkIGlzIHplcm8uIFRoZSBnZXRfdGVtcCBpcyBjb21wdXRpbmcgdGhlCj4+PiBtYXggdGVtcGVy YXR1cmUgaW4gdGhpcyBvcHMgd2hpY2ggaXMgd2hhdCB3ZSBkb24ndCB3YW50IHRvIGRvLgo+Pgo+ PiBDb3JyZWN0LCBidXQgSSB0aGluayB0aGF0IGlzIG91dCBvZiBzY29wZSBvZiB0aGlzIHBhdGNo c2V0LCBhcyB0aGUgY3VycmVudAo+PiBkcml2ZXIgYWxyZWFkeSB1c2VzIG10a190aGVybWFsX29w cyBmb3Igc2Vuc29yIDAuIFRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoc2V0Cj4+IGlzIHRvIGFkZCBz dXBwb3J0IGZvciB0aGUgb3RoZXIgc2Vuc29ycy4KPj4KPj4gQmVzaWRlcywgd2hhdCBkbyB5b3Ug c3VnZ2VzdCBhcyBhIGNsZWFuIGltcGxlbWVudGF0aW9uIGlmIHRoZSBjdXJyZW50IG9uZQo+PiBu byBsb25nZXIgbWVldHMgdGhlcm1hbCBjb3JlIHJlcXVpcmVtZW50cyA/Cj4KPiBJSVVDLCB0aGVy ZSBpcyBhIHNlbnNvciBwZXIgY291cGxlIG9mIGNvcmVzLiAxIHggMkJpZ3MsIDEgeCAyQmlncywg MSB4IDQgTGl0dGxlLCByaWdodCA/CgpNVDgzNjUgU29DIGhhcyA0IHggQTUzIENQVXMuIFRoZSBT b0MgaGFzIDQgdGhlcm1hbCB6b25lcyBwZXIgc2Vuc29yLiBUaGVybWFsIHpvbmUgMCBjb3JyZXNw b25kcwoKdG8gYWxsIDQgeCBBNTMgQ1BVcywgdGhlIG90aGVyIHRoZXJtYWwgem9uZXMgKDEsIDIg YW5kIDMpIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggQ1BVcy4gVGhlIGNvb2xpbmcgZGV2aWNlIHR5 cGUKCnVzZWQgZm9yIENQVXMgaXMgcGFzc2l2ZS4gRllJLCB0aGVybWFsIHpvbmVzIDEsIDIgYW5k IDMgYXJlIHByZXNlbnQgaW4gdGhlIFNvQyBmb3IgZGVidWctcHVycG9zZSBvbmx5LCB0aGV5IGFy ZSBub3Qgc3VwcG9zZWQKCnRvIGJlIHVzZWQgZm9yIHByb2R1Y3Rpb24uCgoKUmVnYXJkcywKCkFt amFkCgo+Cj4gSWYgaXQgaXMgdGhlIGNhc2UsIHRoZW4gYSB0aGVybWFsIHpvbmUgcGVyIHNlbnNv ciB3aXRoIHRoZSB0cmlwIHBvaW50cyBhbmQgYSBjb29saW5nIGRldmljZSBmb3IgZWFjaCBvZiB0 aGVtLgo+Cj4gVGhlIHR3byB0aGVybWFsIHpvbmVzIGZvciB0aGUgYmlnIHdpbGwgc2hhcmUgdGhl IHNhbWUgY29vbGluZyBkZXZpY2UuIFRoZSBsaXR0bGUgdGhlcm1hbCB6b25lIHdpbGwgaGF2ZSBp dHMgb3duIGNvb2xpbmcgZGV2aWNlLgo+Cj4gSWYgdGhlcmUgaXMgdGhlIEdQVSwgdGhlbiBpdHMg b3duIGNvb2xpbmcgZGV2aWNlIGFsc28gd2l0aCBkZXZmcmVxLgo+Cj4KPj4+IDxodHRwOi8vd3d3 LmxpbmFyby5vcmcvPiBMaW5hcm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBmb3IgQVJN IFNvQ3MKPj4+Cj4+PiBGb2xsb3cgTGluYXJvOsKgIDxodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9w YWdlcy9MaW5hcm8+IEZhY2Vib29rIHwKPj4+IDxodHRwOi8vdHdpdHRlci5jb20vIyEvbGluYXJv b3JnPiBUd2l0dGVyIHwKPj4+IDxodHRwOi8vd3d3LmxpbmFyby5vcmcvbGluYXJvLWJsb2cvPiBC bG9nCj4+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK