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 41DA6C3A5A7 for ; Sun, 4 Dec 2022 17:26:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230072AbiLDR0O (ORCPT ); Sun, 4 Dec 2022 12:26:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229985AbiLDR0N (ORCPT ); Sun, 4 Dec 2022 12:26:13 -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 04B8C10FE4 for ; Sun, 4 Dec 2022 09:26:11 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id n16-20020a05600c3b9000b003d08febff59so3472914wms.3 for ; Sun, 04 Dec 2022 09:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=IyVxjv62ICSdTmYSJi3Pk6d9R9ZML1anTEBMQvI7O98=; b=ZchEcdQe+WoS+hV2IegjeHkiuZJHTsYsZQBliOfBF7yCt8VaH5piuSwzb+ecMWiq9D YI4UTS3680++QmeX3hvanqiK3/eBiucfVgE50qKCn4/tTNgqQCnfcWMSYBeU8LDugw/E HvVjQ4mLSv03zy6Xcqyeb0I+cNyYWXKIyAu84px63RDwvCIBVfNx3rxvCq1SS8h6CsGQ utp6zgTKgOhQsFl+x99BhMkDLK4N63DVM4pCSUL+Elmg0mAbTP7VXP0JkOPFqMGm+E2v XNzcHTh1ZWS6kVvMbimUVE5YWFHL2o14A54fpOj409LZ75qRPIl/8IWwWmjaStZY4hEv dF+w== 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:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IyVxjv62ICSdTmYSJi3Pk6d9R9ZML1anTEBMQvI7O98=; b=Ry9t4TDuS1oGR0AsQjMWAIEEbqjlzTS6ogH4rN7UR2C9hPv2Q/WxJmnENVmVcvAdAQ EShGSyE52pGmaLf20R05YC6HZGt8z3FUPvrUbufS6fPTnOX1ZY7DP0jCx+gZXZEjenV9 vKuvnnhcP5wZuXBVUlARnotM56w7u2YpsjouPsVhhxxdXeH/sDdgfJLR63Pe/Ye9xlbF szMVdUaFPPu+E4K/GNXsJwwhn9wVgfw+T8FKLGPdrFeK7hgfav5XG8uWNSIyB+ySePEV V6/8YLENMiozz/lpEVBpW+Q88xpOU987H9m6yyeeh62797Wrxiq28Y63D3grDaIeQRfn gHjg== X-Gm-Message-State: ANoB5pnFJCYpdZjYTtQneSLkBNYHxxQ9sEofJ3oLvjI1HLXLA/lXekMT FFxRiL+uNQv+PyERAjXKVEemWg== X-Google-Smtp-Source: AA0mqf4Dmk6Xhul/0QDQbwXSSkgcxM2Nco1IWbx4FTjdbxA83oGpudrXdh2T3PP9My4vswF6zfR4Uw== X-Received: by 2002:a05:600c:4386:b0:3cf:a4a6:a048 with SMTP id e6-20020a05600c438600b003cfa4a6a048mr43362304wmn.202.1670174769498; Sun, 04 Dec 2022 09:26:09 -0800 (PST) Received: from [192.168.10.46] (146725694.box.freepro.com. [130.180.211.218]) by smtp.googlemail.com with ESMTPSA id l28-20020a05600c1d1c00b003c6b7f5567csm24874714wms.0.2022.12.04.09.26.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 04 Dec 2022 09:26:09 -0800 (PST) Message-ID: <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org> Date: Sun, 4 Dec 2022 18:26:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for thermal sensors Content-Language: en-US To: Amjad Ouled-Ameur , "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> From: Daniel Lezcano In-Reply-To: <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> 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 On 18/11/2022 12:04, Amjad Ouled-Ameur wrote: > Provide thermal zone to read thermal sensor in the SoC. We can read all the > thermal sensors value in the SoC by the node /sys/class/thermal/ > > In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS > on the first read of sensor that often are bogus values. > This can avoid following warning on boot: > > thermal thermal_zone6: failed to read out thermal zone (-13) > > Signed-off-by: Michael Kao > Signed-off-by: Hsin-Yi Wang > Signed-off-by: Amjad Ouled-Ameur > Reviewed-by: AngeloGioacchino Del Regno > --- > drivers/thermal/mtk_thermal.c | 99 ++++++++++++++++++++++++++++++++----------- > 1 file changed, 74 insertions(+), 25 deletions(-) > > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c > index 3a5df1440822..b1f4d19edd4f 100644 > --- a/drivers/thermal/mtk_thermal.c > +++ b/drivers/thermal/mtk_thermal.c > @@ -259,6 +259,11 @@ enum mtk_thermal_version { > > struct mtk_thermal; > > +struct mtk_thermal_zone { > + struct mtk_thermal *mt; > + int id; > +}; > + > struct thermal_bank_cfg { > unsigned int num_sensors; > const int *sensors; > @@ -307,6 +312,8 @@ struct mtk_thermal { > > const struct mtk_thermal_data *conf; > struct mtk_thermal_bank banks[MAX_NUM_ZONES]; > + > + int (*raw_to_mcelsius)(struct mtk_thermal *mt, int sensno, s32 raw); > }; > > /* MT8183 thermal sensor data */ > @@ -709,6 +716,29 @@ static void mtk_thermal_put_bank(struct mtk_thermal_bank *bank) > mutex_unlock(&mt->lock); > } > > +static int _get_sensor_temp(struct mtk_thermal *mt, int id) > +{ > + u32 raw; > + int temp; > + > + const struct mtk_thermal_data *conf = mt->conf; > + > + raw = readl(mt->thermal_base + conf->msr[id]); > + > + temp = mt->raw_to_mcelsius(mt, id, raw); > + > + /* > + * The first read of a sensor often contains very high bogus > + * temperature value. Filter these out so that the system does > + * not immediately shut down. > + */ > + > + if (temp > 200000) > + return -EAGAIN; > + else > + return temp; > +} > + > /** > * mtk_thermal_bank_temperature - get the temperature of a bank > * @bank: The bank > @@ -721,26 +751,9 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > struct mtk_thermal *mt = bank->mt; > const struct mtk_thermal_data *conf = mt->conf; > int i, temp = INT_MIN, max = INT_MIN; > - u32 raw; > > for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) { > - raw = readl(mt->thermal_base + conf->msr[i]); > - > - if (mt->conf->version == MTK_THERMAL_V1) { > - temp = raw_to_mcelsius_v1( > - mt, conf->bank_data[bank->id].sensors[i], raw); > - } else { > - temp = raw_to_mcelsius_v2( > - mt, conf->bank_data[bank->id].sensors[i], raw); > - } > - > - /* > - * The first read of a sensor often contains very high bogus > - * temperature value. Filter these out so that the system does > - * not immediately shut down. > - */ > - if (temp > 200000) > - temp = 0; > + temp = _get_sensor_temp(mt, i); > > if (temp > max) > max = temp; > @@ -749,9 +762,10 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > return max; > } > > -static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature) > +static int mtk_read_temp(struct thermal_zone_device *tzdev, int *temperature) > { > - struct mtk_thermal *mt = tz->devdata; > + struct mtk_thermal_zone *tz = tzdev->devdata; > + struct mtk_thermal *mt = tz->mt; > int i; > int tempmax = INT_MIN; > > @@ -770,10 +784,28 @@ static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature) > return 0; > } > > +static int mtk_read_sensor_temp(struct thermal_zone_device *tzdev, int *temperature) > +{ > + struct mtk_thermal_zone *tz = tzdev->devdata; > + struct mtk_thermal *mt = tz->mt; > + int id = tz->id - 1; > + > + if (id < 0) > + return -EACCES; > + > + *temperature = _get_sensor_temp(mt, id); > + > + return 0; > +} > + > static const struct thermal_zone_device_ops mtk_thermal_ops = { > .get_temp = mtk_read_temp, > }; > > +static const struct thermal_zone_device_ops mtk_thermal_sensor_ops = { > + .get_temp = mtk_read_sensor_temp, > +}; > + > static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num, > u32 apmixed_phys_base, u32 auxadc_phys_base, > int ctrl_id) > @@ -1072,6 +1104,7 @@ static int mtk_thermal_probe(struct platform_device *pdev) > u64 auxadc_phys_base, apmixed_phys_base; > struct thermal_zone_device *tzdev; > void __iomem *apmixed_base, *auxadc_base; > + struct mtk_thermal_zone *tz; > > mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL); > if (!mt) > @@ -1150,6 +1183,9 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > mtk_thermal_turn_on_buffer(mt, apmixed_base); > > + mt->raw_to_mcelsius = (mt->conf->version == MTK_THERMAL_V1) ? > + raw_to_mcelsius_v1 : raw_to_mcelsius_v2; > + > if (mt->conf->version == MTK_THERMAL_V2) { > mtk_thermal_release_periodic_ts(mt, auxadc_base); > } > @@ -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 > + > + if (IS_ERR(tzdev)) { > + ret = PTR_ERR(tzdev); > + if (ret == -ENODEV) > + continue; > + goto err_disable_clk_peri_therm; > + } > } > > ret = devm_thermal_add_hwmon_sysfs(tzdev); > -- 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 AD019C4321E for ; Sun, 4 Dec 2022 18:59:08 +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=ka1UYKjCt+TVsyi19aDtq1nLhAeWqJanJCY3nrg0PbM=; b=O3AgXLlF+FpX9/ 3AbYqpz9kz0uLwWAsqeWjrQLw3RO4oqNr5Pa83+5/CvzZQPSqFs3wKUiMOpY3unxUg89jUEpRXB7N mln66MrpHRLFy9bRiWRt9kWXPzFKXJFbcgiUMmRNlDxAg7IfCkAfM5UlI3nsTcXZSKaXuCTzf0dih SiiTOQ4SYmSFz6fo+dOzGkCmiJrQaqH/KpHNbLKiBuPSk8+KSPyT7YyQHHhl391007ctxcXf+sfD7 6CQGrY/o1gxhmwN/wyeZqBcryI1pdClOpbX+jYDM2ZSRBRJdWHHGm8Q7CK9YdhGk5e8ncZYGEJK+P 53YWFc+UtnB8Acgm18mQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1p1uBV-00ASAw-Nn; Sun, 04 Dec 2022 18:57:53 +0000 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1p1skm-009zcu-5c for linux-arm-kernel@lists.infradead.org; Sun, 04 Dec 2022 17:26:14 +0000 Received: by mail-wm1-x32d.google.com with SMTP id o7-20020a05600c510700b003cffc0b3374so8352854wms.0 for ; Sun, 04 Dec 2022 09:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=IyVxjv62ICSdTmYSJi3Pk6d9R9ZML1anTEBMQvI7O98=; b=ZchEcdQe+WoS+hV2IegjeHkiuZJHTsYsZQBliOfBF7yCt8VaH5piuSwzb+ecMWiq9D YI4UTS3680++QmeX3hvanqiK3/eBiucfVgE50qKCn4/tTNgqQCnfcWMSYBeU8LDugw/E HvVjQ4mLSv03zy6Xcqyeb0I+cNyYWXKIyAu84px63RDwvCIBVfNx3rxvCq1SS8h6CsGQ utp6zgTKgOhQsFl+x99BhMkDLK4N63DVM4pCSUL+Elmg0mAbTP7VXP0JkOPFqMGm+E2v XNzcHTh1ZWS6kVvMbimUVE5YWFHL2o14A54fpOj409LZ75qRPIl/8IWwWmjaStZY4hEv dF+w== 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:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IyVxjv62ICSdTmYSJi3Pk6d9R9ZML1anTEBMQvI7O98=; b=n0IwdoQ8sV5pSbNtWW4BKDylMAn2iL4Of+tpChGBklg88Y0JyaDfOOApIBRkVFnx9U 1HYMl7QNyk7UgYJk5vCMJfOZfqLNYSJjCMQ61ngTKRsC/h/zedHAYAhrFBduN6rRI1vG rMoEn8if8dY+l2KfTAaVC9AuwSlqenQlTGhcYupc0p28bQvPI5WMsF9luM1Cw7gEXom7 WUTZf8au4UbW1MRlOELEG+clznlGEwfXmFlI1SJqay6SFMkSVWzDF8lndndFT0u+SRBv s7DqedXekQ1soOfKCuG5uiYDmPpZEAyjYkZPZlZMvMsUqrC3aH2ctfLUZfGZMhJl90Id d6nw== X-Gm-Message-State: ANoB5plaftoEYd5f4AP6x3SmZ6R5w3AWO7ZvEuzn3AcPNKZTKpbU16Av QZwwbm1Nk4QYmtZreYt7amx/IQ== X-Google-Smtp-Source: AA0mqf4Dmk6Xhul/0QDQbwXSSkgcxM2Nco1IWbx4FTjdbxA83oGpudrXdh2T3PP9My4vswF6zfR4Uw== X-Received: by 2002:a05:600c:4386:b0:3cf:a4a6:a048 with SMTP id e6-20020a05600c438600b003cfa4a6a048mr43362304wmn.202.1670174769498; Sun, 04 Dec 2022 09:26:09 -0800 (PST) Received: from [192.168.10.46] (146725694.box.freepro.com. [130.180.211.218]) by smtp.googlemail.com with ESMTPSA id l28-20020a05600c1d1c00b003c6b7f5567csm24874714wms.0.2022.12.04.09.26.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 04 Dec 2022 09:26:09 -0800 (PST) Message-ID: <4121bb6b-30db-7a23-f4c8-40afdda7a0b5@linaro.org> Date: Sun, 4 Dec 2022 18:26:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v7 4/4] thermal: mediatek: add another get_temp ops for thermal sensors Content-Language: en-US To: Amjad Ouled-Ameur , "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> From: Daniel Lezcano In-Reply-To: <20221018-up-i350-thermal-bringup-v7-4-ebf08ff2eddb@baylibre.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221204_092612_411123_07865F5D X-CRM114-Status: GOOD ( 30.77 ) 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 T24gMTgvMTEvMjAyMiAxMjowNCwgQW1qYWQgT3VsZWQtQW1ldXIgd3JvdGU6Cj4gUHJvdmlkZSB0 aGVybWFsIHpvbmUgdG8gcmVhZCB0aGVybWFsIHNlbnNvciBpbiB0aGUgU29DLiBXZSBjYW4gcmVh ZCBhbGwgdGhlCj4gdGhlcm1hbCBzZW5zb3JzIHZhbHVlIGluIHRoZSBTb0MgYnkgdGhlIG5vZGUg L3N5cy9jbGFzcy90aGVybWFsLwo+IAo+IEluIG10a190aGVybWFsX2JhbmtfdGVtcGVyYXR1cmUs IHJldHVybiAtRUFHQUlOIGluc3RlYWQgb2YgLUVBQ0NFU1MKPiBvbiB0aGUgZmlyc3QgcmVhZCBv ZiBzZW5zb3IgdGhhdCBvZnRlbiBhcmUgYm9ndXMgdmFsdWVzLgo+IFRoaXMgY2FuIGF2b2lkIGZv bGxvd2luZyB3YXJuaW5nIG9uIGJvb3Q6Cj4gCj4gICAgdGhlcm1hbCB0aGVybWFsX3pvbmU2OiBm YWlsZWQgdG8gcmVhZCBvdXQgdGhlcm1hbCB6b25lICgtMTMpCj4gCj4gU2lnbmVkLW9mZi1ieTog TWljaGFlbCBLYW8gPG1pY2hhZWwua2FvQG1lZGlhdGVrLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBI c2luLVlpIFdhbmcgPGhzaW55aUBjaHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQW1qYWQg T3VsZWQtQW1ldXIgPGFvdWxlZGFtZXVyQGJheWxpYnJlLmNvbT4KPiBSZXZpZXdlZC1ieTogQW5n ZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gPGFuZ2Vsb2dpb2FjY2hpbm8uZGVscmVnbm9AY29sbGFi b3JhLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvdGhlcm1hbC9tdGtfdGhlcm1hbC5jIHwgOTkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5n ZWQsIDc0IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3RoZXJtYWwvbXRrX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9tdGtfdGhlcm1h bC5jCj4gaW5kZXggM2E1ZGYxNDQwODIyLi5iMWY0ZDE5ZWRkNGYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy90aGVybWFsL210a190aGVybWFsLmMKPiArKysgYi9kcml2ZXJzL3RoZXJtYWwvbXRrX3Ro ZXJtYWwuYwo+IEBAIC0yNTksNiArMjU5LDExIEBAIGVudW0gbXRrX3RoZXJtYWxfdmVyc2lvbiB7 Cj4gICAKPiAgIHN0cnVjdCBtdGtfdGhlcm1hbDsKPiAgIAo+ICtzdHJ1Y3QgbXRrX3RoZXJtYWxf em9uZSB7Cj4gKwlzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10Owo+ICsJaW50IGlkOwo+ICt9Owo+ICsK PiAgIHN0cnVjdCB0aGVybWFsX2JhbmtfY2ZnIHsKPiAgIAl1bnNpZ25lZCBpbnQgbnVtX3NlbnNv cnM7Cj4gICAJY29uc3QgaW50ICpzZW5zb3JzOwo+IEBAIC0zMDcsNiArMzEyLDggQEAgc3RydWN0 IG10a190aGVybWFsIHsKPiAgIAo+ICAgCWNvbnN0IHN0cnVjdCBtdGtfdGhlcm1hbF9kYXRhICpj b25mOwo+ICAgCXN0cnVjdCBtdGtfdGhlcm1hbF9iYW5rIGJhbmtzW01BWF9OVU1fWk9ORVNdOwo+ ICsKPiArCWludCAoKnJhd190b19tY2Vsc2l1cykoc3RydWN0IG10a190aGVybWFsICptdCwgaW50 IHNlbnNubywgczMyIHJhdyk7Cj4gICB9Owo+ICAgCj4gICAvKiBNVDgxODMgdGhlcm1hbCBzZW5z b3IgZGF0YSAqLwo+IEBAIC03MDksNiArNzE2LDI5IEBAIHN0YXRpYyB2b2lkIG10a190aGVybWFs X3B1dF9iYW5rKHN0cnVjdCBtdGtfdGhlcm1hbF9iYW5rICpiYW5rKQo+ICAgCQltdXRleF91bmxv Y2soJm10LT5sb2NrKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IF9nZXRfc2Vuc29yX3RlbXAo c3RydWN0IG10a190aGVybWFsICptdCwgaW50IGlkKQo+ICt7Cj4gKwl1MzIgcmF3Owo+ICsJaW50 IHRlbXA7Cj4gKwo+ICsJY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgKmNvbmYgPSBtdC0+ Y29uZjsKPiArCj4gKwlyYXcgPSByZWFkbChtdC0+dGhlcm1hbF9iYXNlICsgY29uZi0+bXNyW2lk XSk7Cj4gKwo+ICsJdGVtcCA9IG10LT5yYXdfdG9fbWNlbHNpdXMobXQsIGlkLCByYXcpOwo+ICsK PiArCS8qCj4gKwkgKiBUaGUgZmlyc3QgcmVhZCBvZiBhIHNlbnNvciBvZnRlbiBjb250YWlucyB2 ZXJ5IGhpZ2ggYm9ndXMKPiArCSAqIHRlbXBlcmF0dXJlIHZhbHVlLiBGaWx0ZXIgdGhlc2Ugb3V0 IHNvIHRoYXQgdGhlIHN5c3RlbSBkb2VzCj4gKwkgKiBub3QgaW1tZWRpYXRlbHkgc2h1dCBkb3du Lgo+ICsJICovCj4gKwo+ICsJaWYgKHRlbXAgPiAyMDAwMDApCj4gKwkJcmV0dXJuIC1FQUdBSU47 Cj4gKwllbHNlCj4gKwkJcmV0dXJuIHRlbXA7Cj4gK30KPiArCj4gICAvKioKPiAgICAqIG10a190 aGVybWFsX2JhbmtfdGVtcGVyYXR1cmUgLSBnZXQgdGhlIHRlbXBlcmF0dXJlIG9mIGEgYmFuawo+ ICAgICogQGJhbms6CVRoZSBiYW5rCj4gQEAgLTcyMSwyNiArNzUxLDkgQEAgc3RhdGljIGludCBt dGtfdGhlcm1hbF9iYW5rX3RlbXBlcmF0dXJlKHN0cnVjdCBtdGtfdGhlcm1hbF9iYW5rICpiYW5r KQo+ICAgCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQgPSBiYW5rLT5tdDsKPiAgIAljb25zdCBzdHJ1 Y3QgbXRrX3RoZXJtYWxfZGF0YSAqY29uZiA9IG10LT5jb25mOwo+ICAgCWludCBpLCB0ZW1wID0g SU5UX01JTiwgbWF4ID0gSU5UX01JTjsKPiAtCXUzMiByYXc7Cj4gICAKPiAgIAlmb3IgKGkgPSAw OyBpIDwgY29uZi0+YmFua19kYXRhW2JhbmstPmlkXS5udW1fc2Vuc29yczsgaSsrKSB7Cj4gLQkJ cmF3ID0gcmVhZGwobXQtPnRoZXJtYWxfYmFzZSArIGNvbmYtPm1zcltpXSk7Cj4gLQo+IC0JCWlm IChtdC0+Y29uZi0+dmVyc2lvbiA9PSBNVEtfVEhFUk1BTF9WMSkgewo+IC0JCQl0ZW1wID0gcmF3 X3RvX21jZWxzaXVzX3YxKAo+IC0JCQkJbXQsIGNvbmYtPmJhbmtfZGF0YVtiYW5rLT5pZF0uc2Vu c29yc1tpXSwgcmF3KTsKPiAtCQl9IGVsc2Ugewo+IC0JCQl0ZW1wID0gcmF3X3RvX21jZWxzaXVz X3YyKAo+IC0JCQkJbXQsIGNvbmYtPmJhbmtfZGF0YVtiYW5rLT5pZF0uc2Vuc29yc1tpXSwgcmF3 KTsKPiAtCQl9Cj4gLQo+IC0JCS8qCj4gLQkJICogVGhlIGZpcnN0IHJlYWQgb2YgYSBzZW5zb3Ig b2Z0ZW4gY29udGFpbnMgdmVyeSBoaWdoIGJvZ3VzCj4gLQkJICogdGVtcGVyYXR1cmUgdmFsdWUu IEZpbHRlciB0aGVzZSBvdXQgc28gdGhhdCB0aGUgc3lzdGVtIGRvZXMKPiAtCQkgKiBub3QgaW1t ZWRpYXRlbHkgc2h1dCBkb3duLgo+IC0JCSAqLwo+IC0JCWlmICh0ZW1wID4gMjAwMDAwKQo+IC0J CQl0ZW1wID0gMDsKPiArCQl0ZW1wID0gX2dldF9zZW5zb3JfdGVtcChtdCwgaSk7Cj4gICAKPiAg IAkJaWYgKHRlbXAgPiBtYXgpCj4gICAJCQltYXggPSB0ZW1wOwo+IEBAIC03NDksOSArNzYyLDEw IEBAIHN0YXRpYyBpbnQgbXRrX3RoZXJtYWxfYmFua190ZW1wZXJhdHVyZShzdHJ1Y3QgbXRrX3Ro ZXJtYWxfYmFuayAqYmFuaykKPiAgIAlyZXR1cm4gbWF4Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBp bnQgbXRrX3JlYWRfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosIGludCAqdGVt cGVyYXR1cmUpCj4gK3N0YXRpYyBpbnQgbXRrX3JlYWRfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25l X2RldmljZSAqdHpkZXYsIGludCAqdGVtcGVyYXR1cmUpCj4gICB7Cj4gLQlzdHJ1Y3QgbXRrX3Ro ZXJtYWwgKm10ID0gdHotPmRldmRhdGE7Cj4gKwlzdHJ1Y3QgbXRrX3RoZXJtYWxfem9uZSAqdHog PSB0emRldi0+ZGV2ZGF0YTsKPiArCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQgPSB0ei0+bXQ7Cj4g ICAJaW50IGk7Cj4gICAJaW50IHRlbXBtYXggPSBJTlRfTUlOOwo+ICAgCj4gQEAgLTc3MCwxMCAr Nzg0LDI4IEBAIHN0YXRpYyBpbnQgbXRrX3JlYWRfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25lX2Rl dmljZSAqdHosIGludCAqdGVtcGVyYXR1cmUpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAr c3RhdGljIGludCBtdGtfcmVhZF9zZW5zb3JfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25lX2Rldmlj ZSAqdHpkZXYsIGludCAqdGVtcGVyYXR1cmUpCj4gK3sKPiArCXN0cnVjdCBtdGtfdGhlcm1hbF96 b25lICp0eiA9IHR6ZGV2LT5kZXZkYXRhOwo+ICsJc3RydWN0IG10a190aGVybWFsICptdCA9IHR6 LT5tdDsKPiArCWludCBpZCA9IHR6LT5pZCAtIDE7Cj4gKwo+ICsJaWYgKGlkIDwgMCkKPiArCQly ZXR1cm4gLUVBQ0NFUzsKPiArCj4gKwkqdGVtcGVyYXR1cmUgPSBfZ2V0X3NlbnNvcl90ZW1wKG10 LCBpZCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICBzdGF0aWMgY29uc3Qgc3RydWN0 IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzIG10a190aGVybWFsX29wcyA9IHsKPiAgIAkuZ2V0X3Rl bXAgPSBtdGtfcmVhZF90ZW1wLAo+ICAgfTsKPiAgIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHRo ZXJtYWxfem9uZV9kZXZpY2Vfb3BzIG10a190aGVybWFsX3NlbnNvcl9vcHMgPSB7Cj4gKwkuZ2V0 X3RlbXAgPSBtdGtfcmVhZF9zZW5zb3JfdGVtcCwKPiArfTsKPiArCj4gICBzdGF0aWMgdm9pZCBt dGtfdGhlcm1hbF9pbml0X2Jhbmsoc3RydWN0IG10a190aGVybWFsICptdCwgaW50IG51bSwKPiAg IAkJCQkgIHUzMiBhcG1peGVkX3BoeXNfYmFzZSwgdTMyIGF1eGFkY19waHlzX2Jhc2UsCj4gICAJ CQkJICBpbnQgY3RybF9pZCkKPiBAQCAtMTA3Miw2ICsxMTA0LDcgQEAgc3RhdGljIGludCBtdGtf dGhlcm1hbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgCXU2NCBhdXhh ZGNfcGh5c19iYXNlLCBhcG1peGVkX3BoeXNfYmFzZTsKPiAgIAlzdHJ1Y3QgdGhlcm1hbF96b25l X2RldmljZSAqdHpkZXY7Cj4gICAJdm9pZCBfX2lvbWVtICphcG1peGVkX2Jhc2UsICphdXhhZGNf YmFzZTsKPiArCXN0cnVjdCBtdGtfdGhlcm1hbF96b25lICp0ejsKPiAgIAo+ICAgCW10ID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbXQpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAo IW10KQo+IEBAIC0xMTUwLDYgKzExODMsOSBAQCBzdGF0aWMgaW50IG10a190aGVybWFsX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gICAKPiAgIAltdGtfdGhlcm1hbF90dXJu X29uX2J1ZmZlcihtdCwgYXBtaXhlZF9iYXNlKTsKPiAgIAo+ICsJbXQtPnJhd190b19tY2Vsc2l1 cyA9IChtdC0+Y29uZi0+dmVyc2lvbiA9PSBNVEtfVEhFUk1BTF9WMSkgPwo+ICsJCQkJcmF3X3Rv X21jZWxzaXVzX3YxIDogcmF3X3RvX21jZWxzaXVzX3YyOwo+ICsKPiAgIAlpZiAobXQtPmNvbmYt PnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjIpIHsKPiAgIAkJbXRrX3RoZXJtYWxfcmVsZWFzZV9w ZXJpb2RpY190cyhtdCwgYXV4YWRjX2Jhc2UpOwo+ICAgCX0KPiBAQCAtMTE2MSwxMSArMTE5Nywy NCBAQCBzdGF0aWMgaW50IG10a190aGVybWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gICAKPiAgIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtdCk7Cj4gICAKPiAt CXR6ZGV2ID0gZGV2bV90aGVybWFsX29mX3pvbmVfcmVnaXN0ZXIoJnBkZXYtPmRldiwgMCwgbXQs Cj4gLQkJCQkJICAgICAgJm10a190aGVybWFsX29wcyk7Cj4gLQlpZiAoSVNfRVJSKHR6ZGV2KSkg ewo+IC0JCXJldCA9IFBUUl9FUlIodHpkZXYpOwo+IC0JCWdvdG8gZXJyX2Rpc2FibGVfY2xrX3Bl cmlfdGhlcm07Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbXQtPmNvbmYtPm51bV9zZW5zb3JzICsgMTsg aSsrKSB7Cj4gKwkJdHogPSBkZXZtX2ttYWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0eiksIEdG UF9LRVJORUwpOwo+ICsJCWlmICghdHopCj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCQl0 ei0+bXQgPSBtdDsKPiArCQl0ei0+aWQgPSBpOwo+ICsKPiArCQl0emRldiA9IGRldm1fdGhlcm1h bF9vZl96b25lX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGksIHR6LCAoaSA9PSAwKSA/Cj4gKwkJCQkJ CQkgICAgICZtdGtfdGhlcm1hbF9vcHMgOgo+ICsJCQkJCQkJICAgICAmbXRrX3RoZXJtYWxfc2Vu c29yX29wcyk7CgpIZXJlIHlvdSB1c2UgYWdhaW4gdGhlIGFnZ3JlZ2F0aW9uCgo+ICsKPiArCQlp ZiAoSVNfRVJSKHR6ZGV2KSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKHR6ZGV2KTsKPiArCQkJaWYg KHJldCA9PSAtRU5PREVWKQo+ICsJCQkJY29udGludWU7Cj4gKwkJCWdvdG8gZXJyX2Rpc2FibGVf Y2xrX3BlcmlfdGhlcm07Cj4gKwkJfQo+ICAgCX0KPiAgIAo+ICAgCXJldCA9IGRldm1fdGhlcm1h bF9hZGRfaHdtb25fc3lzZnModHpkZXYpOwo+IAoKLS0gCjxodHRwOi8vd3d3LmxpbmFyby5vcmcv PiBMaW5hcm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBmb3IgQVJNIFNvQ3MKCkZvbGxv dyBMaW5hcm86ICA8aHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGFnZXMvTGluYXJvPiBGYWNlYm9v ayB8CjxodHRwOi8vdHdpdHRlci5jb20vIyEvbGluYXJvb3JnPiBUd2l0dGVyIHwKPGh0dHA6Ly93 d3cubGluYXJvLm9yZy9saW5hcm8tYmxvZy8+IEJsb2cKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==