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=-9.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 8151FC38A2A for ; Sun, 10 May 2020 16:56:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5304B20820 for ; Sun, 10 May 2020 16:56:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V62G+u1l" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729199AbgEJQzv (ORCPT ); Sun, 10 May 2020 12:55:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729164AbgEJQzt (ORCPT ); Sun, 10 May 2020 12:55:49 -0400 Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9776BC061A0C for ; Sun, 10 May 2020 09:55:47 -0700 (PDT) Received: by mail-wm1-x343.google.com with SMTP id m24so5817512wml.2 for ; Sun, 10 May 2020 09:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cqhTQ4MchRrdMC/BErUr60iLjR/HsqACJkfzfIXlaXE=; b=V62G+u1luSo+Ix3z5FHQl0QdgvamzUNfd1AuAbg4gRQSqahvoPLcR0S0OfuhI11QlJ WzTl+DgDpYzPWIU+e7/9ncnJMXdgiAI2G0512J/Yx1nDVs4v7ur/mddJJDoNHbiRkSNB 5tjNRIvZpzVUuC8uHgCHu8x1XYFMRf3wZfgTbeN0BBhlUuBsthhMIDjIswvAYfEnaU7n wseW6iLOUeHDb7dDlFImdVsxpXoHNttIgNmxGFufGFq1yY6Qc9bIe1cc+vYx7r5/ZhQi FsroW/oPp24gU42C+p2VMzTjgWFHYBEcMH8MivYvUgnj74p3bFX24TMrQizBxg+sd5hx x/6A== 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:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cqhTQ4MchRrdMC/BErUr60iLjR/HsqACJkfzfIXlaXE=; b=kFdhuG92hUJsjcKaFDsFnpDnD3Imkj5c//nKy1NdRwgsACynHtwxhJ0H0AnO7RimhW wYvLthTH2BWLUiBruLNZkeMiY4ON4rdroJMl6hTKOyJWFenlXGGVCklKdh7wEH9xB3Vx bKgDSQVFnmrYkPvQTWtcdSu+I1Lrs2mWT8Dh74rBwvxdVapiZ+awEfQEhdTYRxnMMxw2 mEtdupODXvGBONJCpIWY2C/EWCQmzK5jHEeh/mRHrWH7u8oaLCItfx/QEpNvWFZ2Pnq2 5gnlh5okmosdPhcsIzprDqx5imYxAjWaOMQ0lMimXU1LA+QkBRZs1nNh0T4HqUA/Ee+B hPPQ== X-Gm-Message-State: AGi0PuZ8P638xYLwScqcrym4Qm8Fm8Hog8azbcCnHBV03VkJt1cOPnBi t5ESp+djnMkZ7YdYA2eYXR4= X-Google-Smtp-Source: APiQypKlEMxaQkxeNQk0/8XJuhC1XFXi+rP9ETXhIwa29YdNlFoAqrx0BPXMUhDYfTFsJO+bb3V39g== X-Received: by 2002:a1c:5502:: with SMTP id j2mr28711768wmb.56.1589129746230; Sun, 10 May 2020 09:55:46 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0:1cc8:b1f1:a2b8:a1ee]) by smtp.gmail.com with ESMTPSA id g15sm13637670wrp.96.2020.05.10.09.55.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 May 2020 09:55:45 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= To: Rob Herring , Tomeu Vizoso , Steven Price , Alyssa Rosenzweig , Viresh Kumar , Nishanth Menon , Stephen Boyd , Maxime Ripard , Chen-Yu Tsai Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= Subject: [PATCH 04/15] drm/panfrost: introduce panfrost_devfreq struct Date: Sun, 10 May 2020 18:55:27 +0200 Message-Id: <20200510165538.19720-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200510165538.19720-1-peron.clem@gmail.com> References: <20200510165538.19720-1-peron.clem@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce a proper panfrost_devfreq to deal with devfreq variables. Signed-off-by: Clément Péron --- drivers/gpu/drm/panfrost/panfrost_devfreq.c | 76 ++++++++++++--------- drivers/gpu/drm/panfrost/panfrost_devfreq.h | 20 +++++- drivers/gpu/drm/panfrost/panfrost_device.h | 11 +-- drivers/gpu/drm/panfrost/panfrost_job.c | 6 +- 4 files changed, 66 insertions(+), 47 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c index df7b71da9a84..962550363391 100644 --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c @@ -10,23 +10,23 @@ #include "panfrost_device.h" #include "panfrost_devfreq.h" -static void panfrost_devfreq_update_utilization(struct panfrost_device *pfdev) +static void panfrost_devfreq_update_utilization(struct panfrost_devfreq *pfdevfreq) { ktime_t now; ktime_t last; - if (!pfdev->devfreq.devfreq) + if (!pfdevfreq->devfreq) return; now = ktime_get(); - last = pfdev->devfreq.time_last_update; + last = pfdevfreq->time_last_update; - if (atomic_read(&pfdev->devfreq.busy_count) > 0) - pfdev->devfreq.busy_time += ktime_sub(now, last); + if (atomic_read(&pfdevfreq->busy_count) > 0) + pfdevfreq->busy_time += ktime_sub(now, last); else - pfdev->devfreq.idle_time += ktime_sub(now, last); + pfdevfreq->idle_time += ktime_sub(now, last); - pfdev->devfreq.time_last_update = now; + pfdevfreq->time_last_update = now; } static int panfrost_devfreq_target(struct device *dev, unsigned long *freq, @@ -47,30 +47,31 @@ static int panfrost_devfreq_target(struct device *dev, unsigned long *freq, return 0; } -static void panfrost_devfreq_reset(struct panfrost_device *pfdev) +static void panfrost_devfreq_reset(struct panfrost_devfreq *pfdevfreq) { - pfdev->devfreq.busy_time = 0; - pfdev->devfreq.idle_time = 0; - pfdev->devfreq.time_last_update = ktime_get(); + pfdevfreq->busy_time = 0; + pfdevfreq->idle_time = 0; + pfdevfreq->time_last_update = ktime_get(); } static int panfrost_devfreq_get_dev_status(struct device *dev, struct devfreq_dev_status *status) { struct panfrost_device *pfdev = dev_get_drvdata(dev); + struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq; - panfrost_devfreq_update_utilization(pfdev); + panfrost_devfreq_update_utilization(pfdevfreq); status->current_frequency = clk_get_rate(pfdev->clock); - status->total_time = ktime_to_ns(ktime_add(pfdev->devfreq.busy_time, - pfdev->devfreq.idle_time)); + status->total_time = ktime_to_ns(ktime_add(pfdevfreq->busy_time, + pfdevfreq->idle_time)); - status->busy_time = ktime_to_ns(pfdev->devfreq.busy_time); + status->busy_time = ktime_to_ns(pfdevfreq->busy_time); - panfrost_devfreq_reset(pfdev); + panfrost_devfreq_reset(pfdevfreq); - dev_dbg(pfdev->dev, "busy %lu total %lu %lu %% freq %lu MHz\n", status->busy_time, - status->total_time, + dev_dbg(pfdev->dev, "busy %lu total %lu %lu %% freq %lu MHz\n", + status->busy_time, status->total_time, status->busy_time / (status->total_time / 100), status->current_frequency / 1000 / 1000); @@ -91,6 +92,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) struct device *dev = &pfdev->pdev->dev; struct devfreq *devfreq; struct thermal_cooling_device *cooling; + struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq; ret = dev_pm_opp_of_add_table(dev); if (ret == -ENODEV) /* Optional, continue without devfreq */ @@ -98,7 +100,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) else if (ret) return ret; - panfrost_devfreq_reset(pfdev); + panfrost_devfreq_reset(pfdevfreq); cur_freq = clk_get_rate(pfdev->clock); @@ -116,53 +118,59 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) dev_pm_opp_of_remove_table(dev); return PTR_ERR(devfreq); } - pfdev->devfreq.devfreq = devfreq; + pfdevfreq->devfreq = devfreq; cooling = of_devfreq_cooling_register(dev->of_node, devfreq); if (IS_ERR(cooling)) DRM_DEV_INFO(dev, "Failed to register cooling device\n"); else - pfdev->devfreq.cooling = cooling; + pfdevfreq->cooling = cooling; return 0; } void panfrost_devfreq_fini(struct panfrost_device *pfdev) { - if (pfdev->devfreq.cooling) - devfreq_cooling_unregister(pfdev->devfreq.cooling); + struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq; + + if (pfdevfreq->cooling) + devfreq_cooling_unregister(pfdevfreq->cooling); dev_pm_opp_of_remove_table(&pfdev->pdev->dev); } void panfrost_devfreq_resume(struct panfrost_device *pfdev) { - if (!pfdev->devfreq.devfreq) + struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq; + + if (!pfdevfreq->devfreq) return; - panfrost_devfreq_reset(pfdev); + panfrost_devfreq_reset(pfdevfreq); - devfreq_resume_device(pfdev->devfreq.devfreq); + devfreq_resume_device(pfdevfreq->devfreq); } void panfrost_devfreq_suspend(struct panfrost_device *pfdev) { - if (!pfdev->devfreq.devfreq) + struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq; + + if (!pfdevfreq->devfreq) return; - devfreq_suspend_device(pfdev->devfreq.devfreq); + devfreq_suspend_device(pfdevfreq->devfreq); } -void panfrost_devfreq_record_busy(struct panfrost_device *pfdev) +void panfrost_devfreq_record_busy(struct panfrost_devfreq *pfdevfreq) { - panfrost_devfreq_update_utilization(pfdev); - atomic_inc(&pfdev->devfreq.busy_count); + panfrost_devfreq_update_utilization(pfdevfreq); + atomic_inc(&pfdevfreq->busy_count); } -void panfrost_devfreq_record_idle(struct panfrost_device *pfdev) +void panfrost_devfreq_record_idle(struct panfrost_devfreq *pfdevfreq) { int count; - panfrost_devfreq_update_utilization(pfdev); - count = atomic_dec_if_positive(&pfdev->devfreq.busy_count); + panfrost_devfreq_update_utilization(pfdevfreq); + count = atomic_dec_if_positive(&pfdevfreq->busy_count); WARN_ON(count < 0); } diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h index 0611beffc8d0..0697f8d5aa34 100644 --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h @@ -4,13 +4,29 @@ #ifndef __PANFROST_DEVFREQ_H__ #define __PANFROST_DEVFREQ_H__ +#include + +struct devfreq; +struct thermal_cooling_device; + +struct panfrost_device; + +struct panfrost_devfreq { + struct devfreq *devfreq; + struct thermal_cooling_device *cooling; + ktime_t busy_time; + ktime_t idle_time; + ktime_t time_last_update; + atomic_t busy_count; +}; + int panfrost_devfreq_init(struct panfrost_device *pfdev); void panfrost_devfreq_fini(struct panfrost_device *pfdev); void panfrost_devfreq_resume(struct panfrost_device *pfdev); void panfrost_devfreq_suspend(struct panfrost_device *pfdev); -void panfrost_devfreq_record_busy(struct panfrost_device *pfdev); -void panfrost_devfreq_record_idle(struct panfrost_device *pfdev); +void panfrost_devfreq_record_busy(struct panfrost_devfreq *devfreq); +void panfrost_devfreq_record_idle(struct panfrost_devfreq *devfreq); #endif /* __PANFROST_DEVFREQ_H__ */ diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h index c30c719a8059..2efa59c9d1c5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -13,6 +13,8 @@ #include #include +#include "panfrost_devfreq.h" + struct panfrost_device; struct panfrost_mmu; struct panfrost_job_slot; @@ -107,14 +109,7 @@ struct panfrost_device { struct list_head shrinker_list; struct shrinker shrinker; - struct { - struct devfreq *devfreq; - struct thermal_cooling_device *cooling; - ktime_t busy_time; - ktime_t idle_time; - ktime_t time_last_update; - atomic_t busy_count; - } devfreq; + struct panfrost_devfreq pfdevfreq; }; struct panfrost_mmu { diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c index 63e32a9f2749..a67f3eac6a58 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -155,7 +155,7 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) } cfg = panfrost_mmu_as_get(pfdev, &job->file_priv->mmu); - panfrost_devfreq_record_busy(pfdev); + panfrost_devfreq_record_busy(&pfdev->pfdevfreq); job_write(pfdev, JS_HEAD_NEXT_LO(js), jc_head & 0xFFFFFFFF); job_write(pfdev, JS_HEAD_NEXT_HI(js), jc_head >> 32); @@ -415,7 +415,7 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job) } spin_unlock_irqrestore(&pfdev->js->job_lock, flags); - panfrost_devfreq_record_idle(pfdev); + panfrost_devfreq_record_idle(&pfdev->pfdevfreq); panfrost_device_reset(pfdev); for (i = 0; i < NUM_JOB_SLOTS; i++) @@ -478,7 +478,7 @@ static irqreturn_t panfrost_job_irq_handler(int irq, void *data) pfdev->jobs[j] = NULL; panfrost_mmu_as_put(pfdev, &job->file_priv->mmu); - panfrost_devfreq_record_idle(pfdev); + panfrost_devfreq_record_idle(&pfdev->pfdevfreq); dma_fence_signal_locked(job->done_fence); pm_runtime_put_autosuspend(pfdev->dev); -- 2.20.1 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=-9.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 5D3A2C54E8E for ; Mon, 11 May 2020 07:18:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 2E8CF207FF for ; Mon, 11 May 2020 07:18:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V62G+u1l" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2E8CF207FF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9D51A6E214; Mon, 11 May 2020 07:17:37 +0000 (UTC) Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id A192F89FAC for ; Sun, 10 May 2020 16:55:47 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id w19so1556199wmc.1 for ; Sun, 10 May 2020 09:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cqhTQ4MchRrdMC/BErUr60iLjR/HsqACJkfzfIXlaXE=; b=V62G+u1luSo+Ix3z5FHQl0QdgvamzUNfd1AuAbg4gRQSqahvoPLcR0S0OfuhI11QlJ WzTl+DgDpYzPWIU+e7/9ncnJMXdgiAI2G0512J/Yx1nDVs4v7ur/mddJJDoNHbiRkSNB 5tjNRIvZpzVUuC8uHgCHu8x1XYFMRf3wZfgTbeN0BBhlUuBsthhMIDjIswvAYfEnaU7n wseW6iLOUeHDb7dDlFImdVsxpXoHNttIgNmxGFufGFq1yY6Qc9bIe1cc+vYx7r5/ZhQi FsroW/oPp24gU42C+p2VMzTjgWFHYBEcMH8MivYvUgnj74p3bFX24TMrQizBxg+sd5hx x/6A== 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:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cqhTQ4MchRrdMC/BErUr60iLjR/HsqACJkfzfIXlaXE=; b=jSMGW3h9oZ3cIbWmsOXvJWeZf2in0WjMr3LuglFPSGyUu+EZAisV82TN8X7tE+GIl9 qFCzHui/jrHizzESHNWIbY/X8seDEMTnUHYNHoqskY57iEhzM4sJjz2dM8IVnbAxnglR 4KLbkwNr4c1qSilFGYP4NnBRc8XE5Hs5bad30PRxF9/wFhdFLNVX1dRki2I9d2elPZNc 2b5ZqL6CfxT9gzz8UMQs/7hzkCFe2KssTzP81YC2jhaYeaxKcInd+5QPtKFSafNKK6K3 KQpaErEDqgl8pbz8AitM0d4osWKSY/ikpTTWOglNH6I+a98ValXHbDfDR1Jj8qmP+hbN GOAA== X-Gm-Message-State: AGi0Puac7z75QLhjT/d9C7dtqE1AbecIIa601iF2zC0I5BMU/aAzRpak gq+okJtXXdM4FO9+nJM5YNs= X-Google-Smtp-Source: APiQypKlEMxaQkxeNQk0/8XJuhC1XFXi+rP9ETXhIwa29YdNlFoAqrx0BPXMUhDYfTFsJO+bb3V39g== X-Received: by 2002:a1c:5502:: with SMTP id j2mr28711768wmb.56.1589129746230; Sun, 10 May 2020 09:55:46 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0:1cc8:b1f1:a2b8:a1ee]) by smtp.gmail.com with ESMTPSA id g15sm13637670wrp.96.2020.05.10.09.55.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 May 2020 09:55:45 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= To: Rob Herring , Tomeu Vizoso , Steven Price , Alyssa Rosenzweig , Viresh Kumar , Nishanth Menon , Stephen Boyd , Maxime Ripard , Chen-Yu Tsai Subject: [PATCH 04/15] drm/panfrost: introduce panfrost_devfreq struct Date: Sun, 10 May 2020 18:55:27 +0200 Message-Id: <20200510165538.19720-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200510165538.19720-1-peron.clem@gmail.com> References: <20200510165538.19720-1-peron.clem@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 11 May 2020 07:17:27 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SW50cm9kdWNlIGEgcHJvcGVyIHBhbmZyb3N0X2RldmZyZXEgdG8gZGVhbCB3aXRoIGRldmZyZXEg dmFyaWFibGVzLgoKU2lnbmVkLW9mZi1ieTogQ2zDqW1lbnQgUMOpcm9uIDxwZXJvbi5jbGVtQGdt YWlsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2ZnJlcS5j IHwgNzYgKysrKysrKysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFu ZnJvc3RfZGV2ZnJlcS5oIHwgMjAgKysrKystCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFu ZnJvc3RfZGV2aWNlLmggIHwgMTEgKy0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJv c3Rfam9iLmMgICAgIHwgIDYgKy0KIDQgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKSwg NDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2RldmZyZXEuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZm cmVxLmMKaW5kZXggZGY3YjcxZGE5YTg0Li45NjI1NTAzNjMzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZmcmVxLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmZyZXEuYwpAQCAtMTAsMjMgKzEwLDIzIEBACiAjaW5j bHVkZSAicGFuZnJvc3RfZGV2aWNlLmgiCiAjaW5jbHVkZSAicGFuZnJvc3RfZGV2ZnJlcS5oIgog Ci1zdGF0aWMgdm9pZCBwYW5mcm9zdF9kZXZmcmVxX3VwZGF0ZV91dGlsaXphdGlvbihzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3N0YXRpYyB2b2lkIHBhbmZyb3N0X2RldmZyZXFfdXBk YXRlX3V0aWxpemF0aW9uKHN0cnVjdCBwYW5mcm9zdF9kZXZmcmVxICpwZmRldmZyZXEpCiB7CiAJ a3RpbWVfdCBub3c7CiAJa3RpbWVfdCBsYXN0OwogCi0JaWYgKCFwZmRldi0+ZGV2ZnJlcS5kZXZm cmVxKQorCWlmICghcGZkZXZmcmVxLT5kZXZmcmVxKQogCQlyZXR1cm47CiAKIAlub3cgPSBrdGlt ZV9nZXQoKTsKLQlsYXN0ID0gcGZkZXYtPmRldmZyZXEudGltZV9sYXN0X3VwZGF0ZTsKKwlsYXN0 ID0gcGZkZXZmcmVxLT50aW1lX2xhc3RfdXBkYXRlOwogCi0JaWYgKGF0b21pY19yZWFkKCZwZmRl di0+ZGV2ZnJlcS5idXN5X2NvdW50KSA+IDApCi0JCXBmZGV2LT5kZXZmcmVxLmJ1c3lfdGltZSAr PSBrdGltZV9zdWIobm93LCBsYXN0KTsKKwlpZiAoYXRvbWljX3JlYWQoJnBmZGV2ZnJlcS0+YnVz eV9jb3VudCkgPiAwKQorCQlwZmRldmZyZXEtPmJ1c3lfdGltZSArPSBrdGltZV9zdWIobm93LCBs YXN0KTsKIAllbHNlCi0JCXBmZGV2LT5kZXZmcmVxLmlkbGVfdGltZSArPSBrdGltZV9zdWIobm93 LCBsYXN0KTsKKwkJcGZkZXZmcmVxLT5pZGxlX3RpbWUgKz0ga3RpbWVfc3ViKG5vdywgbGFzdCk7 CiAKLQlwZmRldi0+ZGV2ZnJlcS50aW1lX2xhc3RfdXBkYXRlID0gbm93OworCXBmZGV2ZnJlcS0+ dGltZV9sYXN0X3VwZGF0ZSA9IG5vdzsKIH0KIAogc3RhdGljIGludCBwYW5mcm9zdF9kZXZmcmVx X3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKmZyZXEsCkBAIC00Nywz MCArNDcsMzEgQEAgc3RhdGljIGludCBwYW5mcm9zdF9kZXZmcmVxX3RhcmdldChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKmZyZXEsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2 b2lkIHBhbmZyb3N0X2RldmZyZXFfcmVzZXQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYp CitzdGF0aWMgdm9pZCBwYW5mcm9zdF9kZXZmcmVxX3Jlc2V0KHN0cnVjdCBwYW5mcm9zdF9kZXZm cmVxICpwZmRldmZyZXEpCiB7Ci0JcGZkZXYtPmRldmZyZXEuYnVzeV90aW1lID0gMDsKLQlwZmRl di0+ZGV2ZnJlcS5pZGxlX3RpbWUgPSAwOwotCXBmZGV2LT5kZXZmcmVxLnRpbWVfbGFzdF91cGRh dGUgPSBrdGltZV9nZXQoKTsKKwlwZmRldmZyZXEtPmJ1c3lfdGltZSA9IDA7CisJcGZkZXZmcmVx LT5pZGxlX3RpbWUgPSAwOworCXBmZGV2ZnJlcS0+dGltZV9sYXN0X3VwZGF0ZSA9IGt0aW1lX2dl dCgpOwogfQogCiBzdGF0aWMgaW50IHBhbmZyb3N0X2RldmZyZXFfZ2V0X2Rldl9zdGF0dXMoc3Ry dWN0IGRldmljZSAqZGV2LAogCQkJCQkgICBzdHJ1Y3QgZGV2ZnJlcV9kZXZfc3RhdHVzICpzdGF0 dXMpCiB7CiAJc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2ZnJlcSAqcGZkZXZmcmVxID0gJnBmZGV2LT5wZmRl dmZyZXE7CiAKLQlwYW5mcm9zdF9kZXZmcmVxX3VwZGF0ZV91dGlsaXphdGlvbihwZmRldik7CisJ cGFuZnJvc3RfZGV2ZnJlcV91cGRhdGVfdXRpbGl6YXRpb24ocGZkZXZmcmVxKTsKIAogCXN0YXR1 cy0+Y3VycmVudF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUocGZkZXYtPmNsb2NrKTsKLQlzdGF0 dXMtPnRvdGFsX3RpbWUgPSBrdGltZV90b19ucyhrdGltZV9hZGQocGZkZXYtPmRldmZyZXEuYnVz eV90aW1lLAotCQkJCQkJICAgcGZkZXYtPmRldmZyZXEuaWRsZV90aW1lKSk7CisJc3RhdHVzLT50 b3RhbF90aW1lID0ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKHBmZGV2ZnJlcS0+YnVzeV90aW1lLAor CQkJCQkJICAgcGZkZXZmcmVxLT5pZGxlX3RpbWUpKTsKIAotCXN0YXR1cy0+YnVzeV90aW1lID0g a3RpbWVfdG9fbnMocGZkZXYtPmRldmZyZXEuYnVzeV90aW1lKTsKKwlzdGF0dXMtPmJ1c3lfdGlt ZSA9IGt0aW1lX3RvX25zKHBmZGV2ZnJlcS0+YnVzeV90aW1lKTsKIAotCXBhbmZyb3N0X2RldmZy ZXFfcmVzZXQocGZkZXYpOworCXBhbmZyb3N0X2RldmZyZXFfcmVzZXQocGZkZXZmcmVxKTsKIAot CWRldl9kYmcocGZkZXYtPmRldiwgImJ1c3kgJWx1IHRvdGFsICVsdSAlbHUgJSUgZnJlcSAlbHUg TUh6XG4iLCBzdGF0dXMtPmJ1c3lfdGltZSwKLQkJc3RhdHVzLT50b3RhbF90aW1lLAorCWRldl9k YmcocGZkZXYtPmRldiwgImJ1c3kgJWx1IHRvdGFsICVsdSAlbHUgJSUgZnJlcSAlbHUgTUh6XG4i LAorCQlzdGF0dXMtPmJ1c3lfdGltZSwgc3RhdHVzLT50b3RhbF90aW1lLAogCQlzdGF0dXMtPmJ1 c3lfdGltZSAvIChzdGF0dXMtPnRvdGFsX3RpbWUgLyAxMDApLAogCQlzdGF0dXMtPmN1cnJlbnRf ZnJlcXVlbmN5IC8gMTAwMCAvIDEwMDApOwogCkBAIC05MSw2ICs5Miw3IEBAIGludCBwYW5mcm9z dF9kZXZmcmVxX2luaXQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCiAJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBmZGV2LT5wZGV2LT5kZXY7CiAJc3RydWN0IGRldmZyZXEgKmRldmZyZXE7 CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNvb2xpbmc7CisJc3RydWN0IHBhbmZy b3N0X2RldmZyZXEgKnBmZGV2ZnJlcSA9ICZwZmRldi0+cGZkZXZmcmVxOwogCiAJcmV0ID0gZGV2 X3BtX29wcF9vZl9hZGRfdGFibGUoZGV2KTsKIAlpZiAocmV0ID09IC1FTk9ERVYpIC8qIE9wdGlv bmFsLCBjb250aW51ZSB3aXRob3V0IGRldmZyZXEgKi8KQEAgLTk4LDcgKzEwMCw3IEBAIGludCBw YW5mcm9zdF9kZXZmcmVxX2luaXQoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCiAJZWxz ZSBpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcGFuZnJvc3RfZGV2ZnJlcV9yZXNldChwZmRl dik7CisJcGFuZnJvc3RfZGV2ZnJlcV9yZXNldChwZmRldmZyZXEpOwogCiAJY3VyX2ZyZXEgPSBj bGtfZ2V0X3JhdGUocGZkZXYtPmNsb2NrKTsKIApAQCAtMTE2LDUzICsxMTgsNTkgQEAgaW50IHBh bmZyb3N0X2RldmZyZXFfaW5pdChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKIAkJZGV2 X3BtX29wcF9vZl9yZW1vdmVfdGFibGUoZGV2KTsKIAkJcmV0dXJuIFBUUl9FUlIoZGV2ZnJlcSk7 CiAJfQotCXBmZGV2LT5kZXZmcmVxLmRldmZyZXEgPSBkZXZmcmVxOworCXBmZGV2ZnJlcS0+ZGV2 ZnJlcSA9IGRldmZyZXE7CiAKIAljb29saW5nID0gb2ZfZGV2ZnJlcV9jb29saW5nX3JlZ2lzdGVy KGRldi0+b2Zfbm9kZSwgZGV2ZnJlcSk7CiAJaWYgKElTX0VSUihjb29saW5nKSkKIAkJRFJNX0RF Vl9JTkZPKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb29saW5nIGRldmljZVxuIik7CiAJZWxz ZQotCQlwZmRldi0+ZGV2ZnJlcS5jb29saW5nID0gY29vbGluZzsKKwkJcGZkZXZmcmVxLT5jb29s aW5nID0gY29vbGluZzsKIAogCXJldHVybiAwOwogfQogCiB2b2lkIHBhbmZyb3N0X2RldmZyZXFf ZmluaShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKIHsKLQlpZiAocGZkZXYtPmRldmZy ZXEuY29vbGluZykKLQkJZGV2ZnJlcV9jb29saW5nX3VucmVnaXN0ZXIocGZkZXYtPmRldmZyZXEu Y29vbGluZyk7CisJc3RydWN0IHBhbmZyb3N0X2RldmZyZXEgKnBmZGV2ZnJlcSA9ICZwZmRldi0+ cGZkZXZmcmVxOworCisJaWYgKHBmZGV2ZnJlcS0+Y29vbGluZykKKwkJZGV2ZnJlcV9jb29saW5n X3VucmVnaXN0ZXIocGZkZXZmcmVxLT5jb29saW5nKTsKIAlkZXZfcG1fb3BwX29mX3JlbW92ZV90 YWJsZSgmcGZkZXYtPnBkZXYtPmRldik7CiB9CiAKIHZvaWQgcGFuZnJvc3RfZGV2ZnJlcV9yZXN1 bWUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCiB7Ci0JaWYgKCFwZmRldi0+ZGV2ZnJl cS5kZXZmcmVxKQorCXN0cnVjdCBwYW5mcm9zdF9kZXZmcmVxICpwZmRldmZyZXEgPSAmcGZkZXYt PnBmZGV2ZnJlcTsKKworCWlmICghcGZkZXZmcmVxLT5kZXZmcmVxKQogCQlyZXR1cm47CiAKLQlw YW5mcm9zdF9kZXZmcmVxX3Jlc2V0KHBmZGV2KTsKKwlwYW5mcm9zdF9kZXZmcmVxX3Jlc2V0KHBm ZGV2ZnJlcSk7CiAKLQlkZXZmcmVxX3Jlc3VtZV9kZXZpY2UocGZkZXYtPmRldmZyZXEuZGV2ZnJl cSk7CisJZGV2ZnJlcV9yZXN1bWVfZGV2aWNlKHBmZGV2ZnJlcS0+ZGV2ZnJlcSk7CiB9CiAKIHZv aWQgcGFuZnJvc3RfZGV2ZnJlcV9zdXNwZW5kKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2 KQogewotCWlmICghcGZkZXYtPmRldmZyZXEuZGV2ZnJlcSkKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2 ZnJlcSAqcGZkZXZmcmVxID0gJnBmZGV2LT5wZmRldmZyZXE7CisKKwlpZiAoIXBmZGV2ZnJlcS0+ ZGV2ZnJlcSkKIAkJcmV0dXJuOwogCi0JZGV2ZnJlcV9zdXNwZW5kX2RldmljZShwZmRldi0+ZGV2 ZnJlcS5kZXZmcmVxKTsKKwlkZXZmcmVxX3N1c3BlbmRfZGV2aWNlKHBmZGV2ZnJlcS0+ZGV2ZnJl cSk7CiB9CiAKLXZvaWQgcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfYnVzeShzdHJ1Y3QgcGFuZnJv c3RfZGV2aWNlICpwZmRldikKK3ZvaWQgcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfYnVzeShzdHJ1 Y3QgcGFuZnJvc3RfZGV2ZnJlcSAqcGZkZXZmcmVxKQogewotCXBhbmZyb3N0X2RldmZyZXFfdXBk YXRlX3V0aWxpemF0aW9uKHBmZGV2KTsKLQlhdG9taWNfaW5jKCZwZmRldi0+ZGV2ZnJlcS5idXN5 X2NvdW50KTsKKwlwYW5mcm9zdF9kZXZmcmVxX3VwZGF0ZV91dGlsaXphdGlvbihwZmRldmZyZXEp OworCWF0b21pY19pbmMoJnBmZGV2ZnJlcS0+YnVzeV9jb3VudCk7CiB9CiAKLXZvaWQgcGFuZnJv c3RfZGV2ZnJlcV9yZWNvcmRfaWRsZShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3Zv aWQgcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfaWRsZShzdHJ1Y3QgcGFuZnJvc3RfZGV2ZnJlcSAq cGZkZXZmcmVxKQogewogCWludCBjb3VudDsKIAotCXBhbmZyb3N0X2RldmZyZXFfdXBkYXRlX3V0 aWxpemF0aW9uKHBmZGV2KTsKLQljb3VudCA9IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoJnBmZGV2 LT5kZXZmcmVxLmJ1c3lfY291bnQpOworCXBhbmZyb3N0X2RldmZyZXFfdXBkYXRlX3V0aWxpemF0 aW9uKHBmZGV2ZnJlcSk7CisJY291bnQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZwZmRldmZy ZXEtPmJ1c3lfY291bnQpOwogCVdBUk5fT04oY291bnQgPCAwKTsKIH0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZmcmVxLmggYi9kcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2ZnJlcS5oCmluZGV4IDA2MTFiZWZmYzhkMC4uMDY5N2Y4 ZDVhYTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2 ZnJlcS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZmcmVxLmgK QEAgLTQsMTMgKzQsMjkgQEAKICNpZm5kZWYgX19QQU5GUk9TVF9ERVZGUkVRX0hfXwogI2RlZmlu ZSBfX1BBTkZST1NUX0RFVkZSRVFfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorCitz dHJ1Y3QgZGV2ZnJlcTsKK3N0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlOworCitzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlOworCitzdHJ1Y3QgcGFuZnJvc3RfZGV2ZnJlcSB7CisJc3RydWN0IGRl dmZyZXEgKmRldmZyZXE7CisJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNvb2xpbmc7 CisJa3RpbWVfdCBidXN5X3RpbWU7CisJa3RpbWVfdCBpZGxlX3RpbWU7CisJa3RpbWVfdCB0aW1l X2xhc3RfdXBkYXRlOworCWF0b21pY190IGJ1c3lfY291bnQ7Cit9OworCiBpbnQgcGFuZnJvc3Rf ZGV2ZnJlcV9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKIHZvaWQgcGFuZnJv c3RfZGV2ZnJlcV9maW5pKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKIAogdm9pZCBw YW5mcm9zdF9kZXZmcmVxX3Jlc3VtZShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldik7CiB2 b2lkIHBhbmZyb3N0X2RldmZyZXFfc3VzcGVuZChzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRl dik7CiAKLXZvaWQgcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfYnVzeShzdHJ1Y3QgcGFuZnJvc3Rf ZGV2aWNlICpwZmRldik7Ci12b2lkIHBhbmZyb3N0X2RldmZyZXFfcmVjb3JkX2lkbGUoc3RydWN0 IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOwordm9pZCBwYW5mcm9zdF9kZXZmcmVxX3JlY29yZF9i dXN5KHN0cnVjdCBwYW5mcm9zdF9kZXZmcmVxICpkZXZmcmVxKTsKK3ZvaWQgcGFuZnJvc3RfZGV2 ZnJlcV9yZWNvcmRfaWRsZShzdHJ1Y3QgcGFuZnJvc3RfZGV2ZnJlcSAqZGV2ZnJlcSk7CiAKICNl bmRpZiAvKiBfX1BBTkZST1NUX0RFVkZSRVFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3RfZGV2aWNlLmgKaW5kZXggYzMwYzcxOWE4MDU5Li4yZWZhNTljOWQxYzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZpY2UuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmgKQEAgLTEzLDYgKzEz LDggQEAKICNpbmNsdWRlIDxkcm0vZHJtX21tLmg+CiAjaW5jbHVkZSA8ZHJtL2dwdV9zY2hlZHVs ZXIuaD4KIAorI2luY2x1ZGUgInBhbmZyb3N0X2RldmZyZXEuaCIKKwogc3RydWN0IHBhbmZyb3N0 X2RldmljZTsKIHN0cnVjdCBwYW5mcm9zdF9tbXU7CiBzdHJ1Y3QgcGFuZnJvc3Rfam9iX3Nsb3Q7 CkBAIC0xMDcsMTQgKzEwOSw3IEBAIHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgewogCXN0cnVjdCBs aXN0X2hlYWQgc2hyaW5rZXJfbGlzdDsKIAlzdHJ1Y3Qgc2hyaW5rZXIgc2hyaW5rZXI7CiAKLQlz dHJ1Y3QgewotCQlzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJlcTsKLQkJc3RydWN0IHRoZXJtYWxfY29v bGluZ19kZXZpY2UgKmNvb2xpbmc7Ci0JCWt0aW1lX3QgYnVzeV90aW1lOwotCQlrdGltZV90IGlk bGVfdGltZTsKLQkJa3RpbWVfdCB0aW1lX2xhc3RfdXBkYXRlOwotCQlhdG9taWNfdCBidXN5X2Nv dW50OwotCX0gZGV2ZnJlcTsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2ZnJlcSBwZmRldmZyZXE7CiB9 OwogCiBzdHJ1Y3QgcGFuZnJvc3RfbW11IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9w YW5mcm9zdC9wYW5mcm9zdF9qb2IuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9z dF9qb2IuYwppbmRleCA2M2UzMmE5ZjI3NDkuLmE2N2YzZWFjNmE1OCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwpAQCAtMTU1LDcgKzE1NSw3IEBAIHN0YXRpYyB2b2lk IHBhbmZyb3N0X2pvYl9od19zdWJtaXQoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iLCBpbnQganMp CiAJfQogCiAJY2ZnID0gcGFuZnJvc3RfbW11X2FzX2dldChwZmRldiwgJmpvYi0+ZmlsZV9wcml2 LT5tbXUpOwotCXBhbmZyb3N0X2RldmZyZXFfcmVjb3JkX2J1c3kocGZkZXYpOworCXBhbmZyb3N0 X2RldmZyZXFfcmVjb3JkX2J1c3koJnBmZGV2LT5wZmRldmZyZXEpOwogCiAJam9iX3dyaXRlKHBm ZGV2LCBKU19IRUFEX05FWFRfTE8oanMpLCBqY19oZWFkICYgMHhGRkZGRkZGRik7CiAJam9iX3dy aXRlKHBmZGV2LCBKU19IRUFEX05FWFRfSEkoanMpLCBqY19oZWFkID4+IDMyKTsKQEAgLTQxNSw3 ICs0MTUsNyBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZkZXYt PmpzLT5qb2JfbG9jaywgZmxhZ3MpOwogCi0JcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfaWRsZShw ZmRldik7CisJcGFuZnJvc3RfZGV2ZnJlcV9yZWNvcmRfaWRsZSgmcGZkZXYtPnBmZGV2ZnJlcSk7 CiAJcGFuZnJvc3RfZGV2aWNlX3Jlc2V0KHBmZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1f Sk9CX1NMT1RTOyBpKyspCkBAIC00NzgsNyArNDc4LDcgQEAgc3RhdGljIGlycXJldHVybl90IHBh bmZyb3N0X2pvYl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCQkJCXBmZGV2LT5q b2JzW2pdID0gTlVMTDsKIAogCQkJCXBhbmZyb3N0X21tdV9hc19wdXQocGZkZXYsICZqb2ItPmZp bGVfcHJpdi0+bW11KTsKLQkJCQlwYW5mcm9zdF9kZXZmcmVxX3JlY29yZF9pZGxlKHBmZGV2KTsK KwkJCQlwYW5mcm9zdF9kZXZmcmVxX3JlY29yZF9pZGxlKCZwZmRldi0+cGZkZXZmcmVxKTsKIAog CQkJCWRtYV9mZW5jZV9zaWduYWxfbG9ja2VkKGpvYi0+ZG9uZV9mZW5jZSk7CiAJCQkJcG1fcnVu dGltZV9wdXRfYXV0b3N1c3BlbmQocGZkZXYtPmRldik7Ci0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=