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.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 DF3B3C3F2DE for ; Wed, 4 Mar 2020 10:41:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A5F682072D for ; Wed, 4 Mar 2020 10:41:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="r2MYqfzd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387958AbgCDKlP (ORCPT ); Wed, 4 Mar 2020 05:41:15 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:50625 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387901AbgCDKlN (ORCPT ); Wed, 4 Mar 2020 05:41:13 -0500 Received: by mail-wm1-f68.google.com with SMTP id a5so1453039wmb.0 for ; Wed, 04 Mar 2020 02:41:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=r2MYqfzdvVoDUW66p/VV4VfzD3pDZTULdjd/Fe2J80Z7imVNlSyofmxKLNb/2/89q6 UD/0gn3kmjyaTd3j786ghUAjVxoh6m3bcF1HoTk08KNiS3ypv8cjQPxIwdB5e4wuvx1d p/QzSfQC7Ymv0QuJKpi9g2E0TA9SH74g5HpE0IGbsXH5x5NsVu/dxno6R515C7eXo929 64U2IimPXxxvrNz1yhZSq8VVnpxoe4ECC4QUdBVaSg8kzZDobPJxLzL9UlAnrYGh+yFo CKLk9sFWaRhU3+eOYxcO3CfKCvCj3xggz6yxW0UDSQgAqnKRqEoQREagH4IN94DpgXmO 6maA== 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=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=RF7pEthtbBJ++LkmksAdTSyW/S6F4lxSFS4ysSC4pgb8wMGccqrA80pCdFqHJAj6ff tmKUqZoPL3M6hzdqOvGfwYIj5pgMwr74JkdyTSlVpXdVK0tr57EAC9pFUm0v8BINVEzs ZIgca6qZ7497+ORj0m5WoZrDUYsKLUghAz2nu3UuWVUvhJ6V87ZEc+fs2gFg4v8rgBSg wrNQv2k5UEkqb2KDidWMvXD7i+oVYfOkY6/Nz2mnmiXKDMjDImTyTAX+eOwVQs3ejfBM yHD2eYFQU6JRG/3Jx3ccvsrTsYkRj6A46PtBdskX+nAm8CXMnEVL61mIuzmftIQwrzuL l1Nw== X-Gm-Message-State: ANhLgQ1BqbT3TQmM3tWze9bWBUFhwHgADe9aEGjxo3xmxAA/BkBsvmBC JS+ut5QUA94ENf+eMnobUZYHwQ== X-Google-Smtp-Source: ADFU+vsENT48+5JvIVgSQf23iBf7GP5lA+KcoRwznuVpTeZxVqwpbePrrqLqD0iGtf6DyC1FQanS6A== X-Received: by 2002:a1c:b0c3:: with SMTP id z186mr2986960wme.36.1583318470363; Wed, 04 Mar 2020 02:41:10 -0800 (PST) Received: from bender.baylibre.local (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id c14sm24006398wro.36.2020.03.04.02.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2020 02:41:09 -0800 (PST) From: Neil Armstrong To: a.hajda@samsung.com, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@siol.net, boris.brezillon@collabora.com Cc: Neil Armstrong , linux-amlogic@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 11/11] drm/meson: Add YUV420 output support Date: Wed, 4 Mar 2020 11:40:52 +0100 Message-Id: <20200304104052.17196-12-narmstrong@baylibre.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20200304104052.17196-1-narmstrong@baylibre.com> References: <20200304104052.17196-1-narmstrong@baylibre.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 This patch adds support for the YUV420 output from the Amlogic Meson SoCs Video Processing Unit to the HDMI Controller. The YUV420 is obtained by generating a YUV444 pixel stream like the classic HDMI display modes, but then the Video Encoder output can be configured to down-sample the YUV444 pixel stream to a YUV420 stream. In addition if pixel stream down-sampling, the Y Cb Cr components must also be mapped differently to align with the HDMI2.0 specifications. This mode needs a different clock generation scheme since the TMDS PHY clock must match the 10x ratio with the YUV420 pixel clock, but the video encoder must run at 2x the pixel clock. This patch enables the bridge bus format negociation, and handles the YUV420 case if selected by the negociation. Signed-off-by: Neil Armstrong Reviewed-by: Jernej Škrabec --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 91 ++++++++++++++++++++------- 1 file changed, 70 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index b5b0d45eb314..e8c94915a4fc 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -150,6 +150,7 @@ struct meson_dw_hdmi { struct regulator *hdmi_supply; u32 irq_stat; struct dw_hdmi *hdmi; + unsigned long output_bus_fmt; }; #define encoder_to_meson_dw_hdmi(x) \ container_of(x, struct meson_dw_hdmi, encoder) @@ -301,6 +302,10 @@ static void meson_hdmi_phy_setup_mode(struct meson_dw_hdmi *dw_hdmi, struct meson_drm *priv = dw_hdmi->priv; unsigned int pixel_clock = mode->clock; + /* For 420, pixel clock is half unlike venc clock */ + if (dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) + pixel_clock /= 2; + if (dw_hdmi_is_compatible(dw_hdmi, "amlogic,meson-gxl-dw-hdmi") || dw_hdmi_is_compatible(dw_hdmi, "amlogic,meson-gxm-dw-hdmi")) { if (pixel_clock >= 371250) { @@ -383,6 +388,10 @@ static void dw_hdmi_set_vclk(struct meson_dw_hdmi *dw_hdmi, vclk_freq = mode->clock; + /* For 420, pixel clock is half unlike venc clock */ + if (dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) + vclk_freq /= 2; + /* TMDS clock is pixel_clock * 10 */ phy_freq = vclk_freq * 10; @@ -392,13 +401,16 @@ static void dw_hdmi_set_vclk(struct meson_dw_hdmi *dw_hdmi, return; } + /* 480i/576i needs global pixel doubling */ if (mode->flags & DRM_MODE_FLAG_DBLCLK) vclk_freq *= 2; venc_freq = vclk_freq; hdmi_freq = vclk_freq; - if (meson_venc_hdmi_venc_repeat(vic)) + /* VENC double pixels for 1080i, 720p and YUV420 modes */ + if (meson_venc_hdmi_venc_repeat(vic) || + dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) venc_freq *= 2; vclk_freq = max(venc_freq, hdmi_freq); @@ -445,8 +457,9 @@ static int dw_hdmi_phy_init(struct dw_hdmi *hdmi, void *data, /* Enable normal output to PHY */ dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_BIST_CNTL, BIT(12)); - /* TMDS pattern setup (TOFIX Handle the YUV420 case) */ - if (mode->clock > 340000) { + /* TMDS pattern setup */ + if (mode->clock > 340000 && + dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_YUV8_1X24) { dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_01, 0); dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_23, @@ -621,6 +634,7 @@ dw_hdmi_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode) { struct meson_drm *priv = connector->dev->dev_private; + bool is_hdmi2_sink = connector->display_info.hdmi.scdc.supported; unsigned int phy_freq; unsigned int vclk_freq; unsigned int venc_freq; @@ -630,9 +644,11 @@ dw_hdmi_mode_valid(struct drm_connector *connector, DRM_DEBUG_DRIVER("Modeline " DRM_MODE_FMT "\n", DRM_MODE_ARG(mode)); - /* If sink max TMDS clock, we reject the mode */ + /* If sink does not support 540MHz, reject the non-420 HDMI2 modes */ if (connector->display_info.max_tmds_clock && - mode->clock > connector->display_info.max_tmds_clock) + mode->clock > connector->display_info.max_tmds_clock && + !drm_mode_is_420_only(&connector->display_info, mode) && + !drm_mode_is_420_also(&connector->display_info, mode)) return MODE_BAD; /* Check against non-VIC supported modes */ @@ -648,6 +664,12 @@ dw_hdmi_mode_valid(struct drm_connector *connector, vclk_freq = mode->clock; + /* For 420, pixel clock is half unlike venc clock */ + if (drm_mode_is_420_only(&connector->display_info, mode) || + (!is_hdmi2_sink && + drm_mode_is_420_also(&connector->display_info, mode))) + vclk_freq /= 2; + /* TMDS clock is pixel_clock * 10 */ phy_freq = vclk_freq * 10; @@ -658,8 +680,11 @@ dw_hdmi_mode_valid(struct drm_connector *connector, venc_freq = vclk_freq; hdmi_freq = vclk_freq; - /* VENC double pixels for 1080i and 720p modes */ - if (meson_venc_hdmi_venc_repeat(vic)) + /* VENC double pixels for 1080i, 720p and YUV420 modes */ + if (meson_venc_hdmi_venc_repeat(vic) || + drm_mode_is_420_only(&connector->display_info, mode) || + (!is_hdmi2_sink && + drm_mode_is_420_also(&connector->display_info, mode))) venc_freq *= 2; vclk_freq = max(venc_freq, hdmi_freq); @@ -677,6 +702,7 @@ dw_hdmi_mode_valid(struct drm_connector *connector, static const u32 meson_dw_hdmi_out_bus_fmts[] = { MEDIA_BUS_FMT_YUV8_1X24, + MEDIA_BUS_FMT_UYYVYY8_0_5X24, }; static void meson_venc_hdmi_encoder_destroy(struct drm_encoder *encoder) @@ -697,18 +723,23 @@ meson_venc_hdmi_encoder_get_inp_bus_fmts(struct drm_bridge *bridge, unsigned int *num_input_fmts) { u32 *input_fmts = NULL; + int i; - if (output_fmt == meson_dw_hdmi_out_bus_fmts[0]) { - *num_input_fmts = 1; - input_fmts = kcalloc(*num_input_fmts, - sizeof(*input_fmts), - GFP_KERNEL); - if (!input_fmts) - return NULL; + *num_input_fmts = 0; - input_fmts[0] = output_fmt; - } else { - *num_input_fmts = 0; + for (i = 0 ; i < ARRAY_SIZE(meson_dw_hdmi_out_bus_fmts) ; ++i) { + if (output_fmt == meson_dw_hdmi_out_bus_fmts[i]) { + *num_input_fmts = 1; + input_fmts = kcalloc(*num_input_fmts, + sizeof(*input_fmts), + GFP_KERNEL); + if (!input_fmts) + return NULL; + + input_fmts[0] = output_fmt; + + break; + } } return input_fmts; @@ -719,6 +750,12 @@ static int meson_venc_hdmi_encoder_atomic_check(struct drm_bridge *bridge, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state) { + struct meson_dw_hdmi *dw_hdmi = bridge_to_meson_dw_hdmi(bridge); + + dw_hdmi->output_bus_fmt = bridge_state->output_bus_cfg.format; + + DRM_DEBUG_DRIVER("output_bus_fmt %lx\n", dw_hdmi->output_bus_fmt); + return 0; } @@ -756,18 +793,29 @@ static void meson_venc_hdmi_encoder_mode_set(struct drm_bridge *bridge, struct meson_dw_hdmi *dw_hdmi = bridge_to_meson_dw_hdmi(bridge); struct meson_drm *priv = dw_hdmi->priv; int vic = drm_match_cea_mode(mode); + unsigned int ycrcb_map = VPU_HDMI_OUTPUT_CBYCR; + bool yuv420_mode = false; DRM_DEBUG_DRIVER("\"%s\" vic %d\n", mode->name, vic); + if (dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) { + ycrcb_map = VPU_HDMI_OUTPUT_CRYCB; + yuv420_mode = true; + } + /* VENC + VENC-DVI Mode setup */ - meson_venc_hdmi_mode_set(priv, vic, ycrcb_map, false, - VPU_HDMI_OUTPUT_CBYCR); + meson_venc_hdmi_mode_set(priv, vic, ycrcb_map, yuv420_mode, mode); /* VCLK Set clock */ dw_hdmi_set_vclk(dw_hdmi, mode); - /* Setup YUV444 to HDMI-TX, no 10bit diphering */ - writel_relaxed(0, priv->io_base + _REG(VPU_HDMI_FMT_CTRL)); + if (dw_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) + /* Setup YUV420 to HDMI-TX, no 10bit diphering */ + writel_relaxed(2 | (2 << 2), + priv->io_base + _REG(VPU_HDMI_FMT_CTRL)); + else + /* Setup YUV444 to HDMI-TX, no 10bit diphering */ + writel_relaxed(0, priv->io_base + _REG(VPU_HDMI_FMT_CTRL)); } static const struct drm_bridge_funcs meson_venc_hdmi_encoder_bridge_funcs = { @@ -1024,6 +1072,7 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, dw_plat_data->phy_name = "meson_dw_hdmi_phy"; dw_plat_data->phy_data = meson_dw_hdmi; dw_plat_data->input_bus_encoding = V4L2_YCBCR_ENC_709; + dw_plat_data->ycbcr_420_allowed = true; if (dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxl-dw-hdmi") || dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxm-dw-hdmi") || -- 2.22.0 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.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 DD4CAC3F2DD for ; Wed, 4 Mar 2020 10:41:22 +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 B1B4821739 for ; Wed, 4 Mar 2020 10:41:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="r2MYqfzd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B1B4821739 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.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 5DD306EB19; Wed, 4 Mar 2020 10:41:16 +0000 (UTC) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id E47916EB19 for ; Wed, 4 Mar 2020 10:41:11 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id g134so1444179wme.3 for ; Wed, 04 Mar 2020 02:41:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=r2MYqfzdvVoDUW66p/VV4VfzD3pDZTULdjd/Fe2J80Z7imVNlSyofmxKLNb/2/89q6 UD/0gn3kmjyaTd3j786ghUAjVxoh6m3bcF1HoTk08KNiS3ypv8cjQPxIwdB5e4wuvx1d p/QzSfQC7Ymv0QuJKpi9g2E0TA9SH74g5HpE0IGbsXH5x5NsVu/dxno6R515C7eXo929 64U2IimPXxxvrNz1yhZSq8VVnpxoe4ECC4QUdBVaSg8kzZDobPJxLzL9UlAnrYGh+yFo CKLk9sFWaRhU3+eOYxcO3CfKCvCj3xggz6yxW0UDSQgAqnKRqEoQREagH4IN94DpgXmO 6maA== 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=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=NhvRdv0Mj8ouIE/YaJX6tF+pF+1oqh+gxeVItikbgmmGcs0NrwyIEBjWskQqJ/m/wY R9tBOq2B7zv4J1AiaarmfbkS3AYMzOnrlq74wWuSg2YVyg0BIzVw2aeJ6fXQj1en72nW bF5C6waii0FV7I0Y/ZdlR8dYK4N8tsj3QT6DhY1/C/QQiWnRrSpECiQ2F84a3u6ojstQ cuGKFMR5VwE4R9NLP+5gMX8/IVPeGwp+ozjclQpQfjavz9p5WpoAgGwSYkeM5Gt9kVK8 f/eHbxiBLb4TT+K0SG7X6yTsVbY/hvc/kWkaTrQhj7dIfTCr3VAVWJLgQ/Zds+O/LF6/ U9lQ== X-Gm-Message-State: ANhLgQ1myGXZotsggSwZTvLSWjvOFiXm+Z7lt93VOpfodxV5YQY4hHe9 qdxQCldVrpZGWUzLKxOvO/rcHw== X-Google-Smtp-Source: ADFU+vsENT48+5JvIVgSQf23iBf7GP5lA+KcoRwznuVpTeZxVqwpbePrrqLqD0iGtf6DyC1FQanS6A== X-Received: by 2002:a1c:b0c3:: with SMTP id z186mr2986960wme.36.1583318470363; Wed, 04 Mar 2020 02:41:10 -0800 (PST) Received: from bender.baylibre.local (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id c14sm24006398wro.36.2020.03.04.02.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2020 02:41:09 -0800 (PST) From: Neil Armstrong To: a.hajda@samsung.com, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@siol.net, boris.brezillon@collabora.com Subject: [PATCH v5 11/11] drm/meson: Add YUV420 output support Date: Wed, 4 Mar 2020 11:40:52 +0100 Message-Id: <20200304104052.17196-12-narmstrong@baylibre.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20200304104052.17196-1-narmstrong@baylibre.com> References: <20200304104052.17196-1-narmstrong@baylibre.com> MIME-Version: 1.0 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: linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Neil Armstrong Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBZVVY0MjAgb3V0cHV0IGZyb20gdGhlIEFt bG9naWMgTWVzb24gU29DcwpWaWRlbyBQcm9jZXNzaW5nIFVuaXQgdG8gdGhlIEhETUkgQ29udHJv bGxlci4KClRoZSBZVVY0MjAgaXMgb2J0YWluZWQgYnkgZ2VuZXJhdGluZyBhIFlVVjQ0NCBwaXhl bCBzdHJlYW0gbGlrZQp0aGUgY2xhc3NpYyBIRE1JIGRpc3BsYXkgbW9kZXMsIGJ1dCB0aGVuIHRo ZSBWaWRlbyBFbmNvZGVyIG91dHB1dApjYW4gYmUgY29uZmlndXJlZCB0byBkb3duLXNhbXBsZSB0 aGUgWVVWNDQ0IHBpeGVsIHN0cmVhbSB0byBhIFlVVjQyMApzdHJlYW0uCkluIGFkZGl0aW9uIGlm IHBpeGVsIHN0cmVhbSBkb3duLXNhbXBsaW5nLCB0aGUgWSBDYiBDciBjb21wb25lbnRzIG11c3QK YWxzbyBiZSBtYXBwZWQgZGlmZmVyZW50bHkgdG8gYWxpZ24gd2l0aCB0aGUgSERNSTIuMCBzcGVj aWZpY2F0aW9ucy4KClRoaXMgbW9kZSBuZWVkcyBhIGRpZmZlcmVudCBjbG9jayBnZW5lcmF0aW9u IHNjaGVtZSBzaW5jZSB0aGUgVE1EUyBQSFkKY2xvY2sgbXVzdCBtYXRjaCB0aGUgMTB4IHJhdGlv IHdpdGggdGhlIFlVVjQyMCBwaXhlbCBjbG9jaywgYnV0CnRoZSB2aWRlbyBlbmNvZGVyIG11c3Qg cnVuIGF0IDJ4IHRoZSBwaXhlbCBjbG9jay4KClRoaXMgcGF0Y2ggZW5hYmxlcyB0aGUgYnJpZGdl IGJ1cyBmb3JtYXQgbmVnb2NpYXRpb24sIGFuZCBoYW5kbGVzCnRoZSBZVVY0MjAgY2FzZSBpZiBz ZWxlY3RlZCBieSB0aGUgbmVnb2NpYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBOZWlsIEFybXN0cm9u ZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+ClJldmlld2VkLWJ5OiBKZXJuZWogxaBrcmFiZWMg PGplcm5lai5za3JhYmVjQHNpb2wubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNv bl9kd19oZG1pLmMgfCA5MSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA3MCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHdfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX2R3X2hkbWkuYwppbmRleCBiNWIwZDQ1ZWIzMTQuLmU4Yzk0OTE1YTRmYyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2R3X2hkbWkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVzb24vbWVzb25fZHdfaGRtaS5jCkBAIC0xNTAsNiArMTUwLDcgQEAgc3RydWN0 IG1lc29uX2R3X2hkbWkgewogCXN0cnVjdCByZWd1bGF0b3IgKmhkbWlfc3VwcGx5OwogCXUzMiBp cnFfc3RhdDsKIAlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKKwl1bnNpZ25lZCBsb25nIG91dHB1dF9i dXNfZm10OwogfTsKICNkZWZpbmUgZW5jb2Rlcl90b19tZXNvbl9kd19oZG1pKHgpIFwKIAljb250 YWluZXJfb2YoeCwgc3RydWN0IG1lc29uX2R3X2hkbWksIGVuY29kZXIpCkBAIC0zMDEsNiArMzAy LDEwIEBAIHN0YXRpYyB2b2lkIG1lc29uX2hkbWlfcGh5X3NldHVwX21vZGUoc3RydWN0IG1lc29u X2R3X2hkbWkgKmR3X2hkbWksCiAJc3RydWN0IG1lc29uX2RybSAqcHJpdiA9IGR3X2hkbWktPnBy aXY7CiAJdW5zaWduZWQgaW50IHBpeGVsX2Nsb2NrID0gbW9kZS0+Y2xvY2s7CiAKKwkvKiBGb3Ig NDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2ZW5jIGNsb2NrICovCisJaWYgKGR3X2hk bWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19GTVRfVVlZVllZOF8wXzVYMjQpCisJCXBp eGVsX2Nsb2NrIC89IDI7CisKIAlpZiAoZHdfaGRtaV9pc19jb21wYXRpYmxlKGR3X2hkbWksICJh bWxvZ2ljLG1lc29uLWd4bC1kdy1oZG1pIikgfHwKIAkgICAgZHdfaGRtaV9pc19jb21wYXRpYmxl KGR3X2hkbWksICJhbWxvZ2ljLG1lc29uLWd4bS1kdy1oZG1pIikpIHsKIAkJaWYgKHBpeGVsX2Ns b2NrID49IDM3MTI1MCkgewpAQCAtMzgzLDYgKzM4OCwxMCBAQCBzdGF0aWMgdm9pZCBkd19oZG1p X3NldF92Y2xrKHN0cnVjdCBtZXNvbl9kd19oZG1pICpkd19oZG1pLAogCiAJdmNsa19mcmVxID0g bW9kZS0+Y2xvY2s7CiAKKwkvKiBGb3IgNDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2 ZW5jIGNsb2NrICovCisJaWYgKGR3X2hkbWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19G TVRfVVlZVllZOF8wXzVYMjQpCisJCXZjbGtfZnJlcSAvPSAyOworCiAJLyogVE1EUyBjbG9jayBp cyBwaXhlbF9jbG9jayAqIDEwICovCiAJcGh5X2ZyZXEgPSB2Y2xrX2ZyZXEgKiAxMDsKIApAQCAt MzkyLDEzICs0MDEsMTYgQEAgc3RhdGljIHZvaWQgZHdfaGRtaV9zZXRfdmNsayhzdHJ1Y3QgbWVz b25fZHdfaGRtaSAqZHdfaGRtaSwKIAkJcmV0dXJuOwogCX0KIAorCS8qIDQ4MGkvNTc2aSBuZWVk cyBnbG9iYWwgcGl4ZWwgZG91YmxpbmcgKi8KIAlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9G TEFHX0RCTENMSykKIAkJdmNsa19mcmVxICo9IDI7CiAKIAl2ZW5jX2ZyZXEgPSB2Y2xrX2ZyZXE7 CiAJaGRtaV9mcmVxID0gdmNsa19mcmVxOwogCi0JaWYgKG1lc29uX3ZlbmNfaGRtaV92ZW5jX3Jl cGVhdCh2aWMpKQorCS8qIFZFTkMgZG91YmxlIHBpeGVscyBmb3IgMTA4MGksIDcyMHAgYW5kIFlV VjQyMCBtb2RlcyAqLworCWlmIChtZXNvbl92ZW5jX2hkbWlfdmVuY19yZXBlYXQodmljKSB8fAor CSAgICBkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCA9PSBNRURJQV9CVVNfRk1UX1VZWVZZWThfMF81 WDI0KQogCQl2ZW5jX2ZyZXEgKj0gMjsKIAogCXZjbGtfZnJlcSA9IG1heCh2ZW5jX2ZyZXEsIGhk bWlfZnJlcSk7CkBAIC00NDUsOCArNDU3LDkgQEAgc3RhdGljIGludCBkd19oZG1pX3BoeV9pbml0 KHN0cnVjdCBkd19oZG1pICpoZG1pLCB2b2lkICpkYXRhLAogCS8qIEVuYWJsZSBub3JtYWwgb3V0 cHV0IHRvIFBIWSAqLwogCWR3X2hkbWktPmRhdGEtPnRvcF93cml0ZShkd19oZG1pLCBIRE1JVFhf VE9QX0JJU1RfQ05UTCwgQklUKDEyKSk7CiAKLQkvKiBUTURTIHBhdHRlcm4gc2V0dXAgKFRPRklY IEhhbmRsZSB0aGUgWVVWNDIwIGNhc2UpICovCi0JaWYgKG1vZGUtPmNsb2NrID4gMzQwMDAwKSB7 CisJLyogVE1EUyBwYXR0ZXJuIHNldHVwICovCisJaWYgKG1vZGUtPmNsb2NrID4gMzQwMDAwICYm CisJICAgIGR3X2hkbWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0 KSB7CiAJCWR3X2hkbWktPmRhdGEtPnRvcF93cml0ZShkd19oZG1pLCBIRE1JVFhfVE9QX1RNRFNf Q0xLX1BUVE5fMDEsCiAJCQkJICAwKTsKIAkJZHdfaGRtaS0+ZGF0YS0+dG9wX3dyaXRlKGR3X2hk bWksIEhETUlUWF9UT1BfVE1EU19DTEtfUFRUTl8yMywKQEAgLTYyMSw2ICs2MzQsNyBAQCBkd19o ZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJICAgY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IG1lc29uX2RybSAq cHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlib29sIGlzX2hkbWkyX3Npbmsg PSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pLnNjZGMuc3VwcG9ydGVkOwogCXVuc2lnbmVk IGludCBwaHlfZnJlcTsKIAl1bnNpZ25lZCBpbnQgdmNsa19mcmVxOwogCXVuc2lnbmVkIGludCB2 ZW5jX2ZyZXE7CkBAIC02MzAsOSArNjQ0LDExIEBAIGR3X2hkbWlfbW9kZV92YWxpZChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCiAJRFJNX0RFQlVHX0RSSVZFUigiTW9kZWxpbmUg IiBEUk1fTU9ERV9GTVQgIlxuIiwgRFJNX01PREVfQVJHKG1vZGUpKTsKIAotCS8qIElmIHNpbmsg bWF4IFRNRFMgY2xvY2ssIHdlIHJlamVjdCB0aGUgbW9kZSAqLworCS8qIElmIHNpbmsgZG9lcyBu b3Qgc3VwcG9ydCA1NDBNSHosIHJlamVjdCB0aGUgbm9uLTQyMCBIRE1JMiBtb2RlcyAqLwogCWlm IChjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5tYXhfdG1kc19jbG9jayAmJgotCSAgICBtb2RlLT5j bG9jayA+IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1heF90bWRzX2Nsb2NrKQorCSAgICBtb2Rl LT5jbG9jayA+IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1heF90bWRzX2Nsb2NrICYmCisJICAg ICFkcm1fbW9kZV9pc180MjBfb25seSgmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpICYm CisJICAgICFkcm1fbW9kZV9pc180MjBfYWxzbygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1v ZGUpKQogCQlyZXR1cm4gTU9ERV9CQUQ7CiAKIAkvKiBDaGVjayBhZ2FpbnN0IG5vbi1WSUMgc3Vw cG9ydGVkIG1vZGVzICovCkBAIC02NDgsNiArNjY0LDEyIEBAIGR3X2hkbWlfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCiAJdmNsa19mcmVxID0gbW9kZS0+Y2xv Y2s7CiAKKwkvKiBGb3IgNDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2ZW5jIGNsb2Nr ICovCisJaWYgKGRybV9tb2RlX2lzXzQyMF9vbmx5KCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywg bW9kZSkgfHwKKwkgICAgKCFpc19oZG1pMl9zaW5rICYmCisJICAgICBkcm1fbW9kZV9pc180MjBf YWxzbygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpKSkKKwkJdmNsa19mcmVxIC89IDI7 CisKIAkvKiBUTURTIGNsb2NrIGlzIHBpeGVsX2Nsb2NrICogMTAgKi8KIAlwaHlfZnJlcSA9IHZj bGtfZnJlcSAqIDEwOwogCkBAIC02NTgsOCArNjgwLDExIEBAIGR3X2hkbWlfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCXZlbmNfZnJlcSA9IHZjbGtfZnJlcTsK IAloZG1pX2ZyZXEgPSB2Y2xrX2ZyZXE7CiAKLQkvKiBWRU5DIGRvdWJsZSBwaXhlbHMgZm9yIDEw ODBpIGFuZCA3MjBwIG1vZGVzICovCi0JaWYgKG1lc29uX3ZlbmNfaGRtaV92ZW5jX3JlcGVhdCh2 aWMpKQorCS8qIFZFTkMgZG91YmxlIHBpeGVscyBmb3IgMTA4MGksIDcyMHAgYW5kIFlVVjQyMCBt b2RlcyAqLworCWlmIChtZXNvbl92ZW5jX2hkbWlfdmVuY19yZXBlYXQodmljKSB8fAorCSAgICBk cm1fbW9kZV9pc180MjBfb25seSgmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpIHx8CisJ ICAgICghaXNfaGRtaTJfc2luayAmJgorCSAgICAgZHJtX21vZGVfaXNfNDIwX2Fsc28oJmNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLCBtb2RlKSkpCiAJCXZlbmNfZnJlcSAqPSAyOwogCiAJdmNsa19m cmVxID0gbWF4KHZlbmNfZnJlcSwgaGRtaV9mcmVxKTsKQEAgLTY3Nyw2ICs3MDIsNyBAQCBkd19o ZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAogc3RhdGlj IGNvbnN0IHUzMiBtZXNvbl9kd19oZG1pX291dF9idXNfZm10c1tdID0gewogCU1FRElBX0JVU19G TVRfWVVWOF8xWDI0LAorCU1FRElBX0JVU19GTVRfVVlZVllZOF8wXzVYMjQsCiB9OwogCiBzdGF0 aWMgdm9pZCBtZXNvbl92ZW5jX2hkbWlfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKQEAgLTY5NywxOCArNzIzLDIzIEBAIG1lc29uX3ZlbmNfaGRtaV9lbmNvZGVy X2dldF9pbnBfYnVzX2ZtdHMoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAkJCQkJdW5zaWdu ZWQgaW50ICpudW1faW5wdXRfZm10cykKIHsKIAl1MzIgKmlucHV0X2ZtdHMgPSBOVUxMOworCWlu dCBpOwogCi0JaWYgKG91dHB1dF9mbXQgPT0gbWVzb25fZHdfaGRtaV9vdXRfYnVzX2ZtdHNbMF0p IHsKLQkJKm51bV9pbnB1dF9mbXRzID0gMTsKLQkJaW5wdXRfZm10cyA9IGtjYWxsb2MoKm51bV9p bnB1dF9mbXRzLAotCQkJCSAgICAgc2l6ZW9mKCppbnB1dF9mbXRzKSwKLQkJCQkgICAgIEdGUF9L RVJORUwpOwotCQlpZiAoIWlucHV0X2ZtdHMpCi0JCQlyZXR1cm4gTlVMTDsKKwkqbnVtX2lucHV0 X2ZtdHMgPSAwOwogCi0JCWlucHV0X2ZtdHNbMF0gPSBvdXRwdXRfZm10OwotCX0gZWxzZSB7Ci0J CSpudW1faW5wdXRfZm10cyA9IDA7CisJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKG1lc29u X2R3X2hkbWlfb3V0X2J1c19mbXRzKSA7ICsraSkgeworCQlpZiAob3V0cHV0X2ZtdCA9PSBtZXNv bl9kd19oZG1pX291dF9idXNfZm10c1tpXSkgeworCQkJKm51bV9pbnB1dF9mbXRzID0gMTsKKwkJ CWlucHV0X2ZtdHMgPSBrY2FsbG9jKCpudW1faW5wdXRfZm10cywKKwkJCQkJICAgICBzaXplb2Yo KmlucHV0X2ZtdHMpLAorCQkJCQkgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKCFpbnB1dF9mbXRz KQorCQkJCXJldHVybiBOVUxMOworCisJCQlpbnB1dF9mbXRzWzBdID0gb3V0cHV0X2ZtdDsKKwor CQkJYnJlYWs7CisJCX0KIAl9CiAKIAlyZXR1cm4gaW5wdXRfZm10czsKQEAgLTcxOSw2ICs3NTAs MTIgQEAgc3RhdGljIGludCBtZXNvbl92ZW5jX2hkbWlfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAkJCQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAogCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKIHsK KwlzdHJ1Y3QgbWVzb25fZHdfaGRtaSAqZHdfaGRtaSA9IGJyaWRnZV90b19tZXNvbl9kd19oZG1p KGJyaWRnZSk7CisKKwlkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCA9IGJyaWRnZV9zdGF0ZS0+b3V0 cHV0X2J1c19jZmcuZm9ybWF0OworCisJRFJNX0RFQlVHX0RSSVZFUigib3V0cHV0X2J1c19mbXQg JWx4XG4iLCBkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAt NzU2LDE4ICs3OTMsMjkgQEAgc3RhdGljIHZvaWQgbWVzb25fdmVuY19oZG1pX2VuY29kZXJfbW9k ZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAlzdHJ1Y3QgbWVzb25fZHdfaGRtaSAq ZHdfaGRtaSA9IGJyaWRnZV90b19tZXNvbl9kd19oZG1pKGJyaWRnZSk7CiAJc3RydWN0IG1lc29u X2RybSAqcHJpdiA9IGR3X2hkbWktPnByaXY7CiAJaW50IHZpYyA9IGRybV9tYXRjaF9jZWFfbW9k ZShtb2RlKTsKKwl1bnNpZ25lZCBpbnQgeWNyY2JfbWFwID0gVlBVX0hETUlfT1VUUFVUX0NCWUNS OworCWJvb2wgeXV2NDIwX21vZGUgPSBmYWxzZTsKIAogCURSTV9ERUJVR19EUklWRVIoIlwiJXNc IiB2aWMgJWRcbiIsIG1vZGUtPm5hbWUsIHZpYyk7CiAKKwlpZiAoZHdfaGRtaS0+b3V0cHV0X2J1 c19mbXQgPT0gTUVESUFfQlVTX0ZNVF9VWVlWWVk4XzBfNVgyNCkgeworCQl5Y3JjYl9tYXAgPSBW UFVfSERNSV9PVVRQVVRfQ1JZQ0I7CisJCXl1djQyMF9tb2RlID0gdHJ1ZTsKKwl9CisKIAkvKiBW RU5DICsgVkVOQy1EVkkgTW9kZSBzZXR1cCAqLwotCW1lc29uX3ZlbmNfaGRtaV9tb2RlX3NldChw cml2LCB2aWMsIHljcmNiX21hcCwgZmFsc2UsCi0JCQkJIFZQVV9IRE1JX09VVFBVVF9DQllDUik7 CisJbWVzb25fdmVuY19oZG1pX21vZGVfc2V0KHByaXYsIHZpYywgeWNyY2JfbWFwLCB5dXY0MjBf bW9kZSwgbW9kZSk7CiAKIAkvKiBWQ0xLIFNldCBjbG9jayAqLwogCWR3X2hkbWlfc2V0X3ZjbGso ZHdfaGRtaSwgbW9kZSk7CiAKLQkvKiBTZXR1cCBZVVY0NDQgdG8gSERNSS1UWCwgbm8gMTBiaXQg ZGlwaGVyaW5nICovCi0Jd3JpdGVsX3JlbGF4ZWQoMCwgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBV X0hETUlfRk1UX0NUUkwpKTsKKwlpZiAoZHdfaGRtaS0+b3V0cHV0X2J1c19mbXQgPT0gTUVESUFf QlVTX0ZNVF9VWVlWWVk4XzBfNVgyNCkKKwkJLyogU2V0dXAgWVVWNDIwIHRvIEhETUktVFgsIG5v IDEwYml0IGRpcGhlcmluZyAqLworCQl3cml0ZWxfcmVsYXhlZCgyIHwgKDIgPDwgMiksCisJCQkg ICAgICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBVX0hETUlfRk1UX0NUUkwpKTsKKwllbHNlCisJ CS8qIFNldHVwIFlVVjQ0NCB0byBIRE1JLVRYLCBubyAxMGJpdCBkaXBoZXJpbmcgKi8KKwkJd3Jp dGVsX3JlbGF4ZWQoMCwgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBVX0hETUlfRk1UX0NUUkwpKTsK IH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG1lc29uX3ZlbmNfaGRt aV9lbmNvZGVyX2JyaWRnZV9mdW5jcyA9IHsKQEAgLTEwMjQsNiArMTA3Miw3IEBAIHN0YXRpYyBp bnQgbWVzb25fZHdfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAogCWR3X3BsYXRfZGF0YS0+cGh5X25hbWUgPSAibWVzb25fZHdfaGRtaV9waHkiOwog CWR3X3BsYXRfZGF0YS0+cGh5X2RhdGEgPSBtZXNvbl9kd19oZG1pOwogCWR3X3BsYXRfZGF0YS0+ aW5wdXRfYnVzX2VuY29kaW5nID0gVjRMMl9ZQ0JDUl9FTkNfNzA5OworCWR3X3BsYXRfZGF0YS0+ eWNiY3JfNDIwX2FsbG93ZWQgPSB0cnVlOwogCiAJaWYgKGR3X2hkbWlfaXNfY29tcGF0aWJsZSht ZXNvbl9kd19oZG1pLCAiYW1sb2dpYyxtZXNvbi1neGwtZHctaGRtaSIpIHx8CiAJICAgIGR3X2hk bWlfaXNfY29tcGF0aWJsZShtZXNvbl9kd19oZG1pLCAiYW1sb2dpYyxtZXNvbi1neG0tZHctaGRt aSIpIHx8Ci0tIAoyLjIyLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo= 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.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 DA127C3F2DF for ; Wed, 4 Mar 2020 10:41:26 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id ACD1C21741 for ; Wed, 4 Mar 2020 10:41:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="XarqiDZ1"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="r2MYqfzd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ACD1C21741 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1uniX0z+vBp1oF6FVCHIPg3uTh6grbba8bCYd4VXl8Y=; b=XarqiDZ1MkywgB MKKtJvAA4DOYuhuoVa/UYjW3aN+Hx7jpQbkqjXeceQrqG8/zexbpO6SqQIvPVo9Pr6YlfI5DAkzpQ ZITqFyDBL5ncjIekQe9LU0p/mZKSqpCH8O8pM1/Ktl0cqp813SfIqc8PSsdid/aYMx/1BDwgZRghX rj1E37U7iK1Bje7dVAIHykvrLDCrZDWsmw88TbgYyqsq2tqbJuZuLOOH8/wbOcg78xn1jvL6He/hW jV/YaKwlbr0Or5NRFbi+InQ5XrX3EFkPMFWUUmgWEguBxB63q9OElmBzIlLSKoLimk9qi/9jvZCcv 5h7yX6QHG8HWMrsUP9Rg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j9RSs-0007VI-83; Wed, 04 Mar 2020 10:41:22 +0000 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j9RSi-0007DR-0G for linux-amlogic@lists.infradead.org; Wed, 04 Mar 2020 10:41:13 +0000 Received: by mail-wm1-x341.google.com with SMTP id p9so1450406wmc.2 for ; Wed, 04 Mar 2020 02:41:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=r2MYqfzdvVoDUW66p/VV4VfzD3pDZTULdjd/Fe2J80Z7imVNlSyofmxKLNb/2/89q6 UD/0gn3kmjyaTd3j786ghUAjVxoh6m3bcF1HoTk08KNiS3ypv8cjQPxIwdB5e4wuvx1d p/QzSfQC7Ymv0QuJKpi9g2E0TA9SH74g5HpE0IGbsXH5x5NsVu/dxno6R515C7eXo929 64U2IimPXxxvrNz1yhZSq8VVnpxoe4ECC4QUdBVaSg8kzZDobPJxLzL9UlAnrYGh+yFo CKLk9sFWaRhU3+eOYxcO3CfKCvCj3xggz6yxW0UDSQgAqnKRqEoQREagH4IN94DpgXmO 6maA== 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=n38Pxw3whs5fznpPVxQ1dxhIU8Emvi8naZ5TfMMjuYM=; b=NRcOoMUcC8QxiwQ/9r8klN3V8G9b4ztuNgtCOMCf24rputM7J5Lqt9inNhXqebvB1k fp0nGLqVaZzpGxgbAnG7xyZ+RfamHjEfZ3srdZjPgqcU+uo1F59mMHD4t5yWNjcQ/WId 8lEIOI33CGSqC33tj5n3yd3h1EWedkz4+nrftV7ps8XpUdh1ACSFTlhw3MFOvDxq4Bld 5JR3A9sAsXB4REU+VJpmWft/vejQDPCgTWXiCq6IiUFQKr5aT8y+LqeJcVCyGUVN6KAJ BvBmHkAB7lUQ7m91G9U2+N/HAgkFkrC3emIY9N4ldVk9Pwo1xtvqTdYoifLoXnoG3ies k7dg== X-Gm-Message-State: ANhLgQ3hFpvuZRwGXMOnkhGBMMob84nY1WRrss6Iyg8qb3N/JmJw1hRz Ug5wtroRWq139LmR9cUqLQbP5A== X-Google-Smtp-Source: ADFU+vsENT48+5JvIVgSQf23iBf7GP5lA+KcoRwznuVpTeZxVqwpbePrrqLqD0iGtf6DyC1FQanS6A== X-Received: by 2002:a1c:b0c3:: with SMTP id z186mr2986960wme.36.1583318470363; Wed, 04 Mar 2020 02:41:10 -0800 (PST) Received: from bender.baylibre.local (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id c14sm24006398wro.36.2020.03.04.02.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2020 02:41:09 -0800 (PST) From: Neil Armstrong To: a.hajda@samsung.com, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@siol.net, boris.brezillon@collabora.com Subject: [PATCH v5 11/11] drm/meson: Add YUV420 output support Date: Wed, 4 Mar 2020 11:40:52 +0100 Message-Id: <20200304104052.17196-12-narmstrong@baylibre.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20200304104052.17196-1-narmstrong@baylibre.com> References: <20200304104052.17196-1-narmstrong@baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200304_024112_087752_1FF721F6 X-CRM114-Status: GOOD ( 19.77 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Neil Armstrong Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBZVVY0MjAgb3V0cHV0IGZyb20gdGhlIEFt bG9naWMgTWVzb24gU29DcwpWaWRlbyBQcm9jZXNzaW5nIFVuaXQgdG8gdGhlIEhETUkgQ29udHJv bGxlci4KClRoZSBZVVY0MjAgaXMgb2J0YWluZWQgYnkgZ2VuZXJhdGluZyBhIFlVVjQ0NCBwaXhl bCBzdHJlYW0gbGlrZQp0aGUgY2xhc3NpYyBIRE1JIGRpc3BsYXkgbW9kZXMsIGJ1dCB0aGVuIHRo ZSBWaWRlbyBFbmNvZGVyIG91dHB1dApjYW4gYmUgY29uZmlndXJlZCB0byBkb3duLXNhbXBsZSB0 aGUgWVVWNDQ0IHBpeGVsIHN0cmVhbSB0byBhIFlVVjQyMApzdHJlYW0uCkluIGFkZGl0aW9uIGlm IHBpeGVsIHN0cmVhbSBkb3duLXNhbXBsaW5nLCB0aGUgWSBDYiBDciBjb21wb25lbnRzIG11c3QK YWxzbyBiZSBtYXBwZWQgZGlmZmVyZW50bHkgdG8gYWxpZ24gd2l0aCB0aGUgSERNSTIuMCBzcGVj aWZpY2F0aW9ucy4KClRoaXMgbW9kZSBuZWVkcyBhIGRpZmZlcmVudCBjbG9jayBnZW5lcmF0aW9u IHNjaGVtZSBzaW5jZSB0aGUgVE1EUyBQSFkKY2xvY2sgbXVzdCBtYXRjaCB0aGUgMTB4IHJhdGlv IHdpdGggdGhlIFlVVjQyMCBwaXhlbCBjbG9jaywgYnV0CnRoZSB2aWRlbyBlbmNvZGVyIG11c3Qg cnVuIGF0IDJ4IHRoZSBwaXhlbCBjbG9jay4KClRoaXMgcGF0Y2ggZW5hYmxlcyB0aGUgYnJpZGdl IGJ1cyBmb3JtYXQgbmVnb2NpYXRpb24sIGFuZCBoYW5kbGVzCnRoZSBZVVY0MjAgY2FzZSBpZiBz ZWxlY3RlZCBieSB0aGUgbmVnb2NpYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBOZWlsIEFybXN0cm9u ZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+ClJldmlld2VkLWJ5OiBKZXJuZWogxaBrcmFiZWMg PGplcm5lai5za3JhYmVjQHNpb2wubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNv bl9kd19oZG1pLmMgfCA5MSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA3MCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHdfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX2R3X2hkbWkuYwppbmRleCBiNWIwZDQ1ZWIzMTQuLmU4Yzk0OTE1YTRmYyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2R3X2hkbWkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVzb24vbWVzb25fZHdfaGRtaS5jCkBAIC0xNTAsNiArMTUwLDcgQEAgc3RydWN0 IG1lc29uX2R3X2hkbWkgewogCXN0cnVjdCByZWd1bGF0b3IgKmhkbWlfc3VwcGx5OwogCXUzMiBp cnFfc3RhdDsKIAlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKKwl1bnNpZ25lZCBsb25nIG91dHB1dF9i dXNfZm10OwogfTsKICNkZWZpbmUgZW5jb2Rlcl90b19tZXNvbl9kd19oZG1pKHgpIFwKIAljb250 YWluZXJfb2YoeCwgc3RydWN0IG1lc29uX2R3X2hkbWksIGVuY29kZXIpCkBAIC0zMDEsNiArMzAy LDEwIEBAIHN0YXRpYyB2b2lkIG1lc29uX2hkbWlfcGh5X3NldHVwX21vZGUoc3RydWN0IG1lc29u X2R3X2hkbWkgKmR3X2hkbWksCiAJc3RydWN0IG1lc29uX2RybSAqcHJpdiA9IGR3X2hkbWktPnBy aXY7CiAJdW5zaWduZWQgaW50IHBpeGVsX2Nsb2NrID0gbW9kZS0+Y2xvY2s7CiAKKwkvKiBGb3Ig NDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2ZW5jIGNsb2NrICovCisJaWYgKGR3X2hk bWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19GTVRfVVlZVllZOF8wXzVYMjQpCisJCXBp eGVsX2Nsb2NrIC89IDI7CisKIAlpZiAoZHdfaGRtaV9pc19jb21wYXRpYmxlKGR3X2hkbWksICJh bWxvZ2ljLG1lc29uLWd4bC1kdy1oZG1pIikgfHwKIAkgICAgZHdfaGRtaV9pc19jb21wYXRpYmxl KGR3X2hkbWksICJhbWxvZ2ljLG1lc29uLWd4bS1kdy1oZG1pIikpIHsKIAkJaWYgKHBpeGVsX2Ns b2NrID49IDM3MTI1MCkgewpAQCAtMzgzLDYgKzM4OCwxMCBAQCBzdGF0aWMgdm9pZCBkd19oZG1p X3NldF92Y2xrKHN0cnVjdCBtZXNvbl9kd19oZG1pICpkd19oZG1pLAogCiAJdmNsa19mcmVxID0g bW9kZS0+Y2xvY2s7CiAKKwkvKiBGb3IgNDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2 ZW5jIGNsb2NrICovCisJaWYgKGR3X2hkbWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19G TVRfVVlZVllZOF8wXzVYMjQpCisJCXZjbGtfZnJlcSAvPSAyOworCiAJLyogVE1EUyBjbG9jayBp cyBwaXhlbF9jbG9jayAqIDEwICovCiAJcGh5X2ZyZXEgPSB2Y2xrX2ZyZXEgKiAxMDsKIApAQCAt MzkyLDEzICs0MDEsMTYgQEAgc3RhdGljIHZvaWQgZHdfaGRtaV9zZXRfdmNsayhzdHJ1Y3QgbWVz b25fZHdfaGRtaSAqZHdfaGRtaSwKIAkJcmV0dXJuOwogCX0KIAorCS8qIDQ4MGkvNTc2aSBuZWVk cyBnbG9iYWwgcGl4ZWwgZG91YmxpbmcgKi8KIAlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9G TEFHX0RCTENMSykKIAkJdmNsa19mcmVxICo9IDI7CiAKIAl2ZW5jX2ZyZXEgPSB2Y2xrX2ZyZXE7 CiAJaGRtaV9mcmVxID0gdmNsa19mcmVxOwogCi0JaWYgKG1lc29uX3ZlbmNfaGRtaV92ZW5jX3Jl cGVhdCh2aWMpKQorCS8qIFZFTkMgZG91YmxlIHBpeGVscyBmb3IgMTA4MGksIDcyMHAgYW5kIFlV VjQyMCBtb2RlcyAqLworCWlmIChtZXNvbl92ZW5jX2hkbWlfdmVuY19yZXBlYXQodmljKSB8fAor CSAgICBkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCA9PSBNRURJQV9CVVNfRk1UX1VZWVZZWThfMF81 WDI0KQogCQl2ZW5jX2ZyZXEgKj0gMjsKIAogCXZjbGtfZnJlcSA9IG1heCh2ZW5jX2ZyZXEsIGhk bWlfZnJlcSk7CkBAIC00NDUsOCArNDU3LDkgQEAgc3RhdGljIGludCBkd19oZG1pX3BoeV9pbml0 KHN0cnVjdCBkd19oZG1pICpoZG1pLCB2b2lkICpkYXRhLAogCS8qIEVuYWJsZSBub3JtYWwgb3V0 cHV0IHRvIFBIWSAqLwogCWR3X2hkbWktPmRhdGEtPnRvcF93cml0ZShkd19oZG1pLCBIRE1JVFhf VE9QX0JJU1RfQ05UTCwgQklUKDEyKSk7CiAKLQkvKiBUTURTIHBhdHRlcm4gc2V0dXAgKFRPRklY IEhhbmRsZSB0aGUgWVVWNDIwIGNhc2UpICovCi0JaWYgKG1vZGUtPmNsb2NrID4gMzQwMDAwKSB7 CisJLyogVE1EUyBwYXR0ZXJuIHNldHVwICovCisJaWYgKG1vZGUtPmNsb2NrID4gMzQwMDAwICYm CisJICAgIGR3X2hkbWktPm91dHB1dF9idXNfZm10ID09IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0 KSB7CiAJCWR3X2hkbWktPmRhdGEtPnRvcF93cml0ZShkd19oZG1pLCBIRE1JVFhfVE9QX1RNRFNf Q0xLX1BUVE5fMDEsCiAJCQkJICAwKTsKIAkJZHdfaGRtaS0+ZGF0YS0+dG9wX3dyaXRlKGR3X2hk bWksIEhETUlUWF9UT1BfVE1EU19DTEtfUFRUTl8yMywKQEAgLTYyMSw2ICs2MzQsNyBAQCBkd19o ZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJICAgY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IG1lc29uX2RybSAq cHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlib29sIGlzX2hkbWkyX3Npbmsg PSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pLnNjZGMuc3VwcG9ydGVkOwogCXVuc2lnbmVk IGludCBwaHlfZnJlcTsKIAl1bnNpZ25lZCBpbnQgdmNsa19mcmVxOwogCXVuc2lnbmVkIGludCB2 ZW5jX2ZyZXE7CkBAIC02MzAsOSArNjQ0LDExIEBAIGR3X2hkbWlfbW9kZV92YWxpZChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCiAJRFJNX0RFQlVHX0RSSVZFUigiTW9kZWxpbmUg IiBEUk1fTU9ERV9GTVQgIlxuIiwgRFJNX01PREVfQVJHKG1vZGUpKTsKIAotCS8qIElmIHNpbmsg bWF4IFRNRFMgY2xvY2ssIHdlIHJlamVjdCB0aGUgbW9kZSAqLworCS8qIElmIHNpbmsgZG9lcyBu b3Qgc3VwcG9ydCA1NDBNSHosIHJlamVjdCB0aGUgbm9uLTQyMCBIRE1JMiBtb2RlcyAqLwogCWlm IChjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5tYXhfdG1kc19jbG9jayAmJgotCSAgICBtb2RlLT5j bG9jayA+IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1heF90bWRzX2Nsb2NrKQorCSAgICBtb2Rl LT5jbG9jayA+IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1heF90bWRzX2Nsb2NrICYmCisJICAg ICFkcm1fbW9kZV9pc180MjBfb25seSgmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpICYm CisJICAgICFkcm1fbW9kZV9pc180MjBfYWxzbygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1v ZGUpKQogCQlyZXR1cm4gTU9ERV9CQUQ7CiAKIAkvKiBDaGVjayBhZ2FpbnN0IG5vbi1WSUMgc3Vw cG9ydGVkIG1vZGVzICovCkBAIC02NDgsNiArNjY0LDEyIEBAIGR3X2hkbWlfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCiAJdmNsa19mcmVxID0gbW9kZS0+Y2xv Y2s7CiAKKwkvKiBGb3IgNDIwLCBwaXhlbCBjbG9jayBpcyBoYWxmIHVubGlrZSB2ZW5jIGNsb2Nr ICovCisJaWYgKGRybV9tb2RlX2lzXzQyMF9vbmx5KCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywg bW9kZSkgfHwKKwkgICAgKCFpc19oZG1pMl9zaW5rICYmCisJICAgICBkcm1fbW9kZV9pc180MjBf YWxzbygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpKSkKKwkJdmNsa19mcmVxIC89IDI7 CisKIAkvKiBUTURTIGNsb2NrIGlzIHBpeGVsX2Nsb2NrICogMTAgKi8KIAlwaHlfZnJlcSA9IHZj bGtfZnJlcSAqIDEwOwogCkBAIC02NTgsOCArNjgwLDExIEBAIGR3X2hkbWlfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCXZlbmNfZnJlcSA9IHZjbGtfZnJlcTsK IAloZG1pX2ZyZXEgPSB2Y2xrX2ZyZXE7CiAKLQkvKiBWRU5DIGRvdWJsZSBwaXhlbHMgZm9yIDEw ODBpIGFuZCA3MjBwIG1vZGVzICovCi0JaWYgKG1lc29uX3ZlbmNfaGRtaV92ZW5jX3JlcGVhdCh2 aWMpKQorCS8qIFZFTkMgZG91YmxlIHBpeGVscyBmb3IgMTA4MGksIDcyMHAgYW5kIFlVVjQyMCBt b2RlcyAqLworCWlmIChtZXNvbl92ZW5jX2hkbWlfdmVuY19yZXBlYXQodmljKSB8fAorCSAgICBk cm1fbW9kZV9pc180MjBfb25seSgmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sIG1vZGUpIHx8CisJ ICAgICghaXNfaGRtaTJfc2luayAmJgorCSAgICAgZHJtX21vZGVfaXNfNDIwX2Fsc28oJmNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLCBtb2RlKSkpCiAJCXZlbmNfZnJlcSAqPSAyOwogCiAJdmNsa19m cmVxID0gbWF4KHZlbmNfZnJlcSwgaGRtaV9mcmVxKTsKQEAgLTY3Nyw2ICs3MDIsNyBAQCBkd19o ZG1pX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAogc3RhdGlj IGNvbnN0IHUzMiBtZXNvbl9kd19oZG1pX291dF9idXNfZm10c1tdID0gewogCU1FRElBX0JVU19G TVRfWVVWOF8xWDI0LAorCU1FRElBX0JVU19GTVRfVVlZVllZOF8wXzVYMjQsCiB9OwogCiBzdGF0 aWMgdm9pZCBtZXNvbl92ZW5jX2hkbWlfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKQEAgLTY5NywxOCArNzIzLDIzIEBAIG1lc29uX3ZlbmNfaGRtaV9lbmNvZGVy X2dldF9pbnBfYnVzX2ZtdHMoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAkJCQkJdW5zaWdu ZWQgaW50ICpudW1faW5wdXRfZm10cykKIHsKIAl1MzIgKmlucHV0X2ZtdHMgPSBOVUxMOworCWlu dCBpOwogCi0JaWYgKG91dHB1dF9mbXQgPT0gbWVzb25fZHdfaGRtaV9vdXRfYnVzX2ZtdHNbMF0p IHsKLQkJKm51bV9pbnB1dF9mbXRzID0gMTsKLQkJaW5wdXRfZm10cyA9IGtjYWxsb2MoKm51bV9p bnB1dF9mbXRzLAotCQkJCSAgICAgc2l6ZW9mKCppbnB1dF9mbXRzKSwKLQkJCQkgICAgIEdGUF9L RVJORUwpOwotCQlpZiAoIWlucHV0X2ZtdHMpCi0JCQlyZXR1cm4gTlVMTDsKKwkqbnVtX2lucHV0 X2ZtdHMgPSAwOwogCi0JCWlucHV0X2ZtdHNbMF0gPSBvdXRwdXRfZm10OwotCX0gZWxzZSB7Ci0J CSpudW1faW5wdXRfZm10cyA9IDA7CisJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKG1lc29u X2R3X2hkbWlfb3V0X2J1c19mbXRzKSA7ICsraSkgeworCQlpZiAob3V0cHV0X2ZtdCA9PSBtZXNv bl9kd19oZG1pX291dF9idXNfZm10c1tpXSkgeworCQkJKm51bV9pbnB1dF9mbXRzID0gMTsKKwkJ CWlucHV0X2ZtdHMgPSBrY2FsbG9jKCpudW1faW5wdXRfZm10cywKKwkJCQkJICAgICBzaXplb2Yo KmlucHV0X2ZtdHMpLAorCQkJCQkgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKCFpbnB1dF9mbXRz KQorCQkJCXJldHVybiBOVUxMOworCisJCQlpbnB1dF9mbXRzWzBdID0gb3V0cHV0X2ZtdDsKKwor CQkJYnJlYWs7CisJCX0KIAl9CiAKIAlyZXR1cm4gaW5wdXRfZm10czsKQEAgLTcxOSw2ICs3NTAs MTIgQEAgc3RhdGljIGludCBtZXNvbl92ZW5jX2hkbWlfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAkJCQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAogCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKIHsK KwlzdHJ1Y3QgbWVzb25fZHdfaGRtaSAqZHdfaGRtaSA9IGJyaWRnZV90b19tZXNvbl9kd19oZG1p KGJyaWRnZSk7CisKKwlkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCA9IGJyaWRnZV9zdGF0ZS0+b3V0 cHV0X2J1c19jZmcuZm9ybWF0OworCisJRFJNX0RFQlVHX0RSSVZFUigib3V0cHV0X2J1c19mbXQg JWx4XG4iLCBkd19oZG1pLT5vdXRwdXRfYnVzX2ZtdCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAt NzU2LDE4ICs3OTMsMjkgQEAgc3RhdGljIHZvaWQgbWVzb25fdmVuY19oZG1pX2VuY29kZXJfbW9k ZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKIAlzdHJ1Y3QgbWVzb25fZHdfaGRtaSAq ZHdfaGRtaSA9IGJyaWRnZV90b19tZXNvbl9kd19oZG1pKGJyaWRnZSk7CiAJc3RydWN0IG1lc29u X2RybSAqcHJpdiA9IGR3X2hkbWktPnByaXY7CiAJaW50IHZpYyA9IGRybV9tYXRjaF9jZWFfbW9k ZShtb2RlKTsKKwl1bnNpZ25lZCBpbnQgeWNyY2JfbWFwID0gVlBVX0hETUlfT1VUUFVUX0NCWUNS OworCWJvb2wgeXV2NDIwX21vZGUgPSBmYWxzZTsKIAogCURSTV9ERUJVR19EUklWRVIoIlwiJXNc IiB2aWMgJWRcbiIsIG1vZGUtPm5hbWUsIHZpYyk7CiAKKwlpZiAoZHdfaGRtaS0+b3V0cHV0X2J1 c19mbXQgPT0gTUVESUFfQlVTX0ZNVF9VWVlWWVk4XzBfNVgyNCkgeworCQl5Y3JjYl9tYXAgPSBW UFVfSERNSV9PVVRQVVRfQ1JZQ0I7CisJCXl1djQyMF9tb2RlID0gdHJ1ZTsKKwl9CisKIAkvKiBW RU5DICsgVkVOQy1EVkkgTW9kZSBzZXR1cCAqLwotCW1lc29uX3ZlbmNfaGRtaV9tb2RlX3NldChw cml2LCB2aWMsIHljcmNiX21hcCwgZmFsc2UsCi0JCQkJIFZQVV9IRE1JX09VVFBVVF9DQllDUik7 CisJbWVzb25fdmVuY19oZG1pX21vZGVfc2V0KHByaXYsIHZpYywgeWNyY2JfbWFwLCB5dXY0MjBf bW9kZSwgbW9kZSk7CiAKIAkvKiBWQ0xLIFNldCBjbG9jayAqLwogCWR3X2hkbWlfc2V0X3ZjbGso ZHdfaGRtaSwgbW9kZSk7CiAKLQkvKiBTZXR1cCBZVVY0NDQgdG8gSERNSS1UWCwgbm8gMTBiaXQg ZGlwaGVyaW5nICovCi0Jd3JpdGVsX3JlbGF4ZWQoMCwgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBV X0hETUlfRk1UX0NUUkwpKTsKKwlpZiAoZHdfaGRtaS0+b3V0cHV0X2J1c19mbXQgPT0gTUVESUFf QlVTX0ZNVF9VWVlWWVk4XzBfNVgyNCkKKwkJLyogU2V0dXAgWVVWNDIwIHRvIEhETUktVFgsIG5v IDEwYml0IGRpcGhlcmluZyAqLworCQl3cml0ZWxfcmVsYXhlZCgyIHwgKDIgPDwgMiksCisJCQkg ICAgICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBVX0hETUlfRk1UX0NUUkwpKTsKKwllbHNlCisJ CS8qIFNldHVwIFlVVjQ0NCB0byBIRE1JLVRYLCBubyAxMGJpdCBkaXBoZXJpbmcgKi8KKwkJd3Jp dGVsX3JlbGF4ZWQoMCwgcHJpdi0+aW9fYmFzZSArIF9SRUcoVlBVX0hETUlfRk1UX0NUUkwpKTsK IH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG1lc29uX3ZlbmNfaGRt aV9lbmNvZGVyX2JyaWRnZV9mdW5jcyA9IHsKQEAgLTEwMjQsNiArMTA3Miw3IEBAIHN0YXRpYyBp bnQgbWVzb25fZHdfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAogCWR3X3BsYXRfZGF0YS0+cGh5X25hbWUgPSAibWVzb25fZHdfaGRtaV9waHkiOwog CWR3X3BsYXRfZGF0YS0+cGh5X2RhdGEgPSBtZXNvbl9kd19oZG1pOwogCWR3X3BsYXRfZGF0YS0+ aW5wdXRfYnVzX2VuY29kaW5nID0gVjRMMl9ZQ0JDUl9FTkNfNzA5OworCWR3X3BsYXRfZGF0YS0+ eWNiY3JfNDIwX2FsbG93ZWQgPSB0cnVlOwogCiAJaWYgKGR3X2hkbWlfaXNfY29tcGF0aWJsZSht ZXNvbl9kd19oZG1pLCAiYW1sb2dpYyxtZXNvbi1neGwtZHctaGRtaSIpIHx8CiAJICAgIGR3X2hk bWlfaXNfY29tcGF0aWJsZShtZXNvbl9kd19oZG1pLCAiYW1sb2dpYyxtZXNvbi1neG0tZHctaGRt aSIpIHx8Ci0tIAoyLjIyLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hbWxvZ2ljCg==