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.0 required=3.0 tests=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 295B8C04AAF for ; Thu, 16 May 2019 10:32:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D9EA920881 for ; Thu, 16 May 2019 10:32:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727050AbfEPKcQ (ORCPT ); Thu, 16 May 2019 06:32:16 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:53017 "EHLO relay5-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbfEPKcM (ORCPT ); Thu, 16 May 2019 06:32:12 -0400 X-Originating-IP: 80.215.244.179 Received: from localhost (unknown [80.215.244.179]) (Authenticated sender: maxime.ripard@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A2BC91C001B; Thu, 16 May 2019 10:32:04 +0000 (UTC) From: Maxime Ripard To: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Maxime Ripard Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Emil Velikov , Paul Kocialkowski , Philipp Zabel Subject: [PATCH v3 3/7] drm: Remove users of drm_format_(horz|vert)_chroma_subsampling Date: Thu, 16 May 2019 12:31:48 +0200 Message-Id: <6b3cceb8161e2c1d40c2681de99202328b0a8abc.1558002671.git-series.maxime.ripard@bootlin.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> References: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org drm_format_horz_chroma_subsampling and drm_format_vert_chroma_subsampling are basically a lookup in the drm_format_info table plus an access to the hsub and vsub fields of the appropriate entry. Most drivers are using this function while having access to the entry already, which means that we will perform an unnecessary lookup. Removing the call to these functions is therefore more efficient. Some drivers will not have access to that entry in the function, but in this case the overhead is minimal (we just have to call drm_format_info() to perform the lookup) and we can even avoid multiple, inefficient lookups in some places that need multiple fields from the drm_format_info structure. This is amplified by the fact that most of the time the callers will have to retrieve both the vsub and hsub fields, meaning that they would perform twice the lookup. Reviewed-by: Emil Velikov Reviewed-by: Paul Kocialkowski Reviewed-by: Philipp Zabel Signed-off-by: Maxime Ripard --- drivers/gpu/drm/arm/malidp_planes.c | 6 +-- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 9 +---- drivers/gpu/drm/drm_fourcc.c | 34 +------------------ drivers/gpu/drm/imx/ipuv3-plane.c | 15 +++----- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 9 +---- drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 24 +++++-------- drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 2 +- drivers/gpu/drm/msm/msm_fb.c | 8 +--- drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 9 +---- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 10 ++--- drivers/gpu/drm/tegra/fb.c | 9 +---- drivers/gpu/drm/vc4/vc4_plane.c | 13 ++----- include/drm/drm_fourcc.h | 2 +- 13 files changed, 38 insertions(+), 112 deletions(-) diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c index d42e0ea9a303..8f89813d08c1 100644 --- a/drivers/gpu/drm/arm/malidp_planes.c +++ b/drivers/gpu/drm/arm/malidp_planes.c @@ -233,8 +233,7 @@ bool malidp_format_mod_supported(struct drm_device *drm, } } - if ((drm_format_horz_chroma_subsampling(format) != 1) || - (drm_format_vert_chroma_subsampling(format) != 1)) { + if ((info->hsub != 1) || (info->vsub != 1)) { if (!(format == DRM_FORMAT_YUV420_10BIT && (map->features & MALIDP_DEVICE_AFBC_YUV_420_10_SUPPORT_SPLIT))) { DRM_DEBUG_KMS("Formats which are sub-sampled should never be split\n"); @@ -244,8 +243,7 @@ bool malidp_format_mod_supported(struct drm_device *drm, } if (modifier & AFBC_CBR) { - if ((drm_format_horz_chroma_subsampling(format) == 1) || - (drm_format_vert_chroma_subsampling(format) == 1)) { + if ((info->hsub == 1) || (info->vsub == 1)) { DRM_DEBUG_KMS("Formats which are not sub-sampled should not have CBR set\n"); return false; } diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c index e836e2de35ce..fdd607ad27fe 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c @@ -603,8 +603,6 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p, const struct drm_display_mode *mode; struct drm_crtc_state *crtc_state; unsigned int tmp; - int hsub = 1; - int vsub = 1; int ret; int i; @@ -642,13 +640,10 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p, if (state->nplanes > ATMEL_HLCDC_LAYER_MAX_PLANES) return -EINVAL; - hsub = drm_format_horz_chroma_subsampling(fb->format->format); - vsub = drm_format_vert_chroma_subsampling(fb->format->format); - for (i = 0; i < state->nplanes; i++) { unsigned int offset = 0; - int xdiv = i ? hsub : 1; - int ydiv = i ? vsub : 1; + int xdiv = i ? fb->format->hsub : 1; + int ydiv = i ? fb->format->vsub : 1; state->bpp[i] = fb->format->cpp[i]; if (!state->bpp[i]) diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c index 873c0001d8c8..e4a2c8372c8b 100644 --- a/drivers/gpu/drm/drm_fourcc.c +++ b/drivers/gpu/drm/drm_fourcc.c @@ -353,40 +353,6 @@ int drm_format_plane_cpp(uint32_t format, int plane) EXPORT_SYMBOL(drm_format_plane_cpp); /** - * drm_format_horz_chroma_subsampling - get the horizontal chroma subsampling factor - * @format: pixel format (DRM_FORMAT_*) - * - * Returns: - * The horizontal chroma subsampling factor for the - * specified pixel format. - */ -int drm_format_horz_chroma_subsampling(uint32_t format) -{ - const struct drm_format_info *info; - - info = drm_format_info(format); - return info ? info->hsub : 1; -} -EXPORT_SYMBOL(drm_format_horz_chroma_subsampling); - -/** - * drm_format_vert_chroma_subsampling - get the vertical chroma subsampling factor - * @format: pixel format (DRM_FORMAT_*) - * - * Returns: - * The vertical chroma subsampling factor for the - * specified pixel format. - */ -int drm_format_vert_chroma_subsampling(uint32_t format) -{ - const struct drm_format_info *info; - - info = drm_format_info(format); - return info ? info->vsub : 1; -} -EXPORT_SYMBOL(drm_format_vert_chroma_subsampling); - -/** * drm_format_plane_width - width of the plane given the first plane * @width: width of the first plane * @format: pixel format diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c index d81b3102b488..4a54a5c192d2 100644 --- a/drivers/gpu/drm/imx/ipuv3-plane.c +++ b/drivers/gpu/drm/imx/ipuv3-plane.c @@ -115,8 +115,8 @@ drm_plane_state_to_ubo(struct drm_plane_state *state) cma_obj = drm_fb_cma_get_gem_obj(fb, 1); BUG_ON(!cma_obj); - x /= drm_format_horz_chroma_subsampling(fb->format->format); - y /= drm_format_vert_chroma_subsampling(fb->format->format); + x /= fb->format->hsub; + y /= fb->format->vsub; return cma_obj->paddr + fb->offsets[1] + fb->pitches[1] * y + fb->format->cpp[1] * x - eba; @@ -134,8 +134,8 @@ drm_plane_state_to_vbo(struct drm_plane_state *state) cma_obj = drm_fb_cma_get_gem_obj(fb, 2); BUG_ON(!cma_obj); - x /= drm_format_horz_chroma_subsampling(fb->format->format); - y /= drm_format_vert_chroma_subsampling(fb->format->format); + x /= fb->format->hsub; + y /= fb->format->vsub; return cma_obj->paddr + fb->offsets[2] + fb->pitches[2] * y + fb->format->cpp[2] * x - eba; @@ -352,7 +352,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, struct drm_framebuffer *old_fb = old_state->fb; unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba; bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY); - int hsub, vsub; int ret; /* Ok to disable */ @@ -471,10 +470,8 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, * The x/y offsets must be even in case of horizontal/vertical * chroma subsampling. */ - hsub = drm_format_horz_chroma_subsampling(fb->format->format); - vsub = drm_format_vert_chroma_subsampling(fb->format->format); - if (((state->src.x1 >> 16) & (hsub - 1)) || - ((state->src.y1 >> 16) & (vsub - 1))) + if (((state->src.x1 >> 16) & (fb->format->hsub - 1)) || + ((state->src.y1 >> 16) & (fb->format->vsub - 1))) return -EINVAL; break; case DRM_FORMAT_RGB565_A8: diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c index da1f727d7495..7994de952353 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -557,14 +557,9 @@ static void _dpu_plane_setup_scaler(struct dpu_plane *pdpu, struct dpu_plane_state *pstate, const struct dpu_format *fmt, bool color_fill) { - uint32_t chroma_subsmpl_h, chroma_subsmpl_v; + const struct drm_format_info *info = drm_format_info(fmt->base.pixel_format); /* don't chroma subsample if decimating */ - chroma_subsmpl_h = - drm_format_horz_chroma_subsampling(fmt->base.pixel_format); - chroma_subsmpl_v = - drm_format_vert_chroma_subsampling(fmt->base.pixel_format); - /* update scaler. calculate default config for QSEED3 */ _dpu_plane_setup_scaler3(pdpu, pstate, drm_rect_width(&pdpu->pipe_cfg.src_rect), @@ -572,7 +567,7 @@ static void _dpu_plane_setup_scaler(struct dpu_plane *pdpu, drm_rect_width(&pdpu->pipe_cfg.dst_rect), drm_rect_height(&pdpu->pipe_cfg.dst_rect), &pstate->scaler3_cfg, fmt, - chroma_subsmpl_h, chroma_subsmpl_v); + info->hsub, info->vsub); } /** diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c index be13140967b4..9d9fb6c5fd68 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c @@ -650,10 +650,10 @@ static int calc_scalex_steps(struct drm_plane *plane, uint32_t pixel_format, uint32_t src, uint32_t dest, uint32_t phasex_steps[COMP_MAX]) { + const struct drm_format_info *info = drm_format_info(pixel_format); struct mdp5_kms *mdp5_kms = get_kms(plane); struct device *dev = mdp5_kms->dev->dev; uint32_t phasex_step; - unsigned int hsub; int ret; ret = calc_phase_step(src, dest, &phasex_step); @@ -662,11 +662,9 @@ static int calc_scalex_steps(struct drm_plane *plane, return ret; } - hsub = drm_format_horz_chroma_subsampling(pixel_format); - phasex_steps[COMP_0] = phasex_step; phasex_steps[COMP_3] = phasex_step; - phasex_steps[COMP_1_2] = phasex_step / hsub; + phasex_steps[COMP_1_2] = phasex_step / info->hsub; return 0; } @@ -675,10 +673,10 @@ static int calc_scaley_steps(struct drm_plane *plane, uint32_t pixel_format, uint32_t src, uint32_t dest, uint32_t phasey_steps[COMP_MAX]) { + const struct drm_format_info *info = drm_format_info(pixel_format); struct mdp5_kms *mdp5_kms = get_kms(plane); struct device *dev = mdp5_kms->dev->dev; uint32_t phasey_step; - unsigned int vsub; int ret; ret = calc_phase_step(src, dest, &phasey_step); @@ -687,11 +685,9 @@ static int calc_scaley_steps(struct drm_plane *plane, return ret; } - vsub = drm_format_vert_chroma_subsampling(pixel_format); - phasey_steps[COMP_0] = phasey_step; phasey_steps[COMP_3] = phasey_step; - phasey_steps[COMP_1_2] = phasey_step / vsub; + phasey_steps[COMP_1_2] = phasey_step / info->vsub; return 0; } @@ -699,8 +695,9 @@ static int calc_scaley_steps(struct drm_plane *plane, static uint32_t get_scale_config(const struct mdp_format *format, uint32_t src, uint32_t dst, bool horz) { + const struct drm_format_info *info = drm_format_info(format->base.pixel_format); bool scaling = format->is_yuv ? true : (src != dst); - uint32_t sub, pix_fmt = format->base.pixel_format; + uint32_t sub; uint32_t ya_filter, uv_filter; bool yuv = format->is_yuv; @@ -708,8 +705,7 @@ static uint32_t get_scale_config(const struct mdp_format *format, return 0; if (yuv) { - sub = horz ? drm_format_horz_chroma_subsampling(pix_fmt) : - drm_format_vert_chroma_subsampling(pix_fmt); + sub = horz ? info->hsub : info->vsub; uv_filter = ((src / sub) <= dst) ? SCALE_FILTER_BIL : SCALE_FILTER_PCMN; } @@ -754,7 +750,7 @@ static void mdp5_write_pixel_ext(struct mdp5_kms *mdp5_kms, enum mdp5_pipe pipe, uint32_t src_w, int pe_left[COMP_MAX], int pe_right[COMP_MAX], uint32_t src_h, int pe_top[COMP_MAX], int pe_bottom[COMP_MAX]) { - uint32_t pix_fmt = format->base.pixel_format; + const struct drm_format_info *info = drm_format_info(format->base.pixel_format); uint32_t lr, tb, req; int i; @@ -763,8 +759,8 @@ static void mdp5_write_pixel_ext(struct mdp5_kms *mdp5_kms, enum mdp5_pipe pipe, uint32_t roi_h = src_h; if (format->is_yuv && i == COMP_1_2) { - roi_w /= drm_format_horz_chroma_subsampling(pix_fmt); - roi_h /= drm_format_vert_chroma_subsampling(pix_fmt); + roi_w /= info->hsub; + roi_h /= info->vsub; } lr = (pe_left[i] >= 0) ? diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c index 72ab8d89efa4..b30b2f4efc60 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c @@ -135,7 +135,7 @@ uint32_t mdp5_smp_calculate(struct mdp5_smp *smp, uint32_t blkcfg = 0; nplanes = info->num_planes; - hsub = drm_format_horz_chroma_subsampling(fmt); + hsub = info->hsub; /* different if BWC (compressed framebuffer?) enabled: */ nlines = 2; diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c index 432beddafb9e..f69c0afd6ec6 100644 --- a/drivers/gpu/drm/msm/msm_fb.c +++ b/drivers/gpu/drm/msm/msm_fb.c @@ -145,16 +145,12 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb; const struct msm_format *format; int ret, i, n; - unsigned int hsub, vsub; DBG("create framebuffer: dev=%p, mode_cmd=%p (%dx%d@%4.4s)", dev, mode_cmd, mode_cmd->width, mode_cmd->height, (char *)&mode_cmd->pixel_format); n = info->num_planes; - hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format); - vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format); - format = kms->funcs->get_format(kms, mode_cmd->pixel_format, mode_cmd->modifier[0]); if (!format) { @@ -180,8 +176,8 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, } for (i = 0; i < n; i++) { - unsigned int width = mode_cmd->width / (i ? hsub : 1); - unsigned int height = mode_cmd->height / (i ? vsub : 1); + unsigned int width = mode_cmd->width / (i ? info->hsub : 1); + unsigned int height = mode_cmd->height / (i ? info->vsub : 1); unsigned int min_size; min_size = (height - 1) * mode_cmd->pitches[i] diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c index 606d176d5d96..c318fae28581 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -79,18 +79,13 @@ rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, struct drm_framebuffer *fb; struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER]; struct drm_gem_object *obj; - unsigned int hsub; - unsigned int vsub; int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER); int ret; int i; - hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format); - vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format); - for (i = 0; i < num_planes; i++) { - unsigned int width = mode_cmd->width / (i ? hsub : 1); - unsigned int height = mode_cmd->height / (i ? vsub : 1); + unsigned int width = mode_cmd->width / (i ? info->hsub : 1); + unsigned int height = mode_cmd->height / (i ? info->vsub : 1); unsigned int min_size; obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 9c0d6b367709..ad3f25290e76 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -320,11 +320,9 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win, uint16_t yrgb_hor_scl_mode, yrgb_ver_scl_mode; uint16_t cbcr_hor_scl_mode = SCALE_NONE; uint16_t cbcr_ver_scl_mode = SCALE_NONE; - int hsub = drm_format_horz_chroma_subsampling(info->format); - int vsub = drm_format_vert_chroma_subsampling(info->format); bool is_yuv = false; - uint16_t cbcr_src_w = src_w / hsub; - uint16_t cbcr_src_h = src_h / vsub; + uint16_t cbcr_src_w = src_w / info->hsub; + uint16_t cbcr_src_h = src_h / info->vsub; uint16_t vsu_mode; uint16_t lb_mode; uint32_t val; @@ -828,8 +826,8 @@ static void vop_plane_atomic_update(struct drm_plane *plane, (state->rotation & DRM_MODE_REFLECT_X) ? 1 : 0); if (is_yuv) { - int hsub = drm_format_horz_chroma_subsampling(fb->format->format); - int vsub = drm_format_vert_chroma_subsampling(fb->format->format); + int hsub = fb->format->hsub; + int vsub = fb->format->vsub; int bpp = fb->format->cpp[1]; uv_obj = fb->obj[1]; diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c index da0747e317b7..94fb75089d87 100644 --- a/drivers/gpu/drm/tegra/fb.c +++ b/drivers/gpu/drm/tegra/fb.c @@ -132,18 +132,15 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm, const struct drm_mode_fb_cmd2 *cmd) { const struct drm_format_info *info = drm_get_format_info(drm, cmd); - unsigned int hsub, vsub, i; struct tegra_bo *planes[4]; struct drm_gem_object *gem; struct drm_framebuffer *fb; + unsigned int i; int err; - hsub = drm_format_horz_chroma_subsampling(cmd->pixel_format); - vsub = drm_format_vert_chroma_subsampling(cmd->pixel_format); - for (i = 0; i < info->num_planes; i++) { - unsigned int width = cmd->width / (i ? hsub : 1); - unsigned int height = cmd->height / (i ? vsub : 1); + unsigned int width = cmd->width / (i ? info->hsub : 1); + unsigned int height = cmd->height / (i ? info->vsub : 1); unsigned int size, bpp; gem = drm_gem_object_lookup(file, cmd->handles[i]); diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c index e3c0a350cb77..be2274924b34 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c @@ -310,10 +310,10 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) struct drm_framebuffer *fb = state->fb; struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); u32 subpixel_src_mask = (1 << 16) - 1; - u32 format = fb->format->format; int num_planes = fb->format->num_planes; struct drm_crtc_state *crtc_state; - u32 h_subsample, v_subsample; + u32 h_subsample = fb->format->hsub; + u32 v_subsample = fb->format->vsub; int i, ret; crtc_state = drm_atomic_get_existing_crtc_state(state->state, @@ -328,9 +328,6 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) if (ret) return ret; - h_subsample = drm_format_horz_chroma_subsampling(format); - v_subsample = drm_format_vert_chroma_subsampling(format); - for (i = 0; i < num_planes; i++) vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; @@ -593,7 +590,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, const struct hvs_format *format = vc4_get_hvs_format(fb->format->format); u64 base_format_mod = fourcc_mod_broadcom_mod(fb->modifier); int num_planes = fb->format->num_planes; - u32 h_subsample, v_subsample; + u32 h_subsample = fb->format->hsub; + u32 v_subsample = fb->format->vsub; bool mix_plane_alpha; bool covers_screen; u32 scl0, scl1, pitch0; @@ -623,9 +621,6 @@ static int vc4_plane_mode_set(struct drm_plane *plane, scl1 = vc4_get_scl_field(state, 0); } - h_subsample = drm_format_horz_chroma_subsampling(format->drm); - v_subsample = drm_format_vert_chroma_subsampling(format->drm); - rotation = drm_rotation_simplify(state->rotation, DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h index 41779b327d91..eeec449d6c6a 100644 --- a/include/drm/drm_fourcc.h +++ b/include/drm/drm_fourcc.h @@ -269,8 +269,6 @@ uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth); uint32_t drm_driver_legacy_fb_format(struct drm_device *dev, uint32_t bpp, uint32_t depth); int drm_format_plane_cpp(uint32_t format, int plane); -int drm_format_horz_chroma_subsampling(uint32_t format); -int drm_format_vert_chroma_subsampling(uint32_t format); int drm_format_plane_width(int width, uint32_t format, int plane); int drm_format_plane_height(int height, uint32_t format, int plane); unsigned int drm_format_info_block_width(const struct drm_format_info *info, -- git-series 0.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH v3 3/7] drm: Remove users of drm_format_(horz|vert)_chroma_subsampling Date: Thu, 16 May 2019 12:31:48 +0200 Message-ID: <6b3cceb8161e2c1d40c2681de99202328b0a8abc.1558002671.git-series.maxime.ripard@bootlin.com> References: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E2E18932A for ; Thu, 16 May 2019 10:32:09 +0000 (UTC) In-Reply-To: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Maxime Ripard Cc: Paul Kocialkowski , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Emil Velikov List-Id: dri-devel@lists.freedesktop.org ZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyBhbmQgZHJtX2Zvcm1hdF92ZXJ0X2No cm9tYV9zdWJzYW1wbGluZwphcmUgYmFzaWNhbGx5IGEgbG9va3VwIGluIHRoZSBkcm1fZm9ybWF0 X2luZm8gdGFibGUgcGx1cyBhbiBhY2Nlc3MgdG8gdGhlCmhzdWIgYW5kIHZzdWIgZmllbGRzIG9m IHRoZSBhcHByb3ByaWF0ZSBlbnRyeS4KCk1vc3QgZHJpdmVycyBhcmUgdXNpbmcgdGhpcyBmdW5j dGlvbiB3aGlsZSBoYXZpbmcgYWNjZXNzIHRvIHRoZSBlbnRyeQphbHJlYWR5LCB3aGljaCBtZWFu cyB0aGF0IHdlIHdpbGwgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBsb29rdXAuIFJlbW92aW5nCnRo ZSBjYWxsIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcyB0aGVyZWZvcmUgbW9yZSBlZmZpY2llbnQuCgpT b21lIGRyaXZlcnMgd2lsbCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBlbnRyeSBpbiB0aGUgZnVu Y3Rpb24sIGJ1dCBpbgp0aGlzIGNhc2UgdGhlIG92ZXJoZWFkIGlzIG1pbmltYWwgKHdlIGp1c3Qg aGF2ZSB0byBjYWxsIGRybV9mb3JtYXRfaW5mbygpCnRvIHBlcmZvcm0gdGhlIGxvb2t1cCkgYW5k IHdlIGNhbiBldmVuIGF2b2lkIG11bHRpcGxlLCBpbmVmZmljaWVudCBsb29rdXBzCmluIHNvbWUg cGxhY2VzIHRoYXQgbmVlZCBtdWx0aXBsZSBmaWVsZHMgZnJvbSB0aGUgZHJtX2Zvcm1hdF9pbmZv CnN0cnVjdHVyZS4KClRoaXMgaXMgYW1wbGlmaWVkIGJ5IHRoZSBmYWN0IHRoYXQgbW9zdCBvZiB0 aGUgdGltZSB0aGUgY2FsbGVycyB3aWxsIGhhdmUKdG8gcmV0cmlldmUgYm90aCB0aGUgdnN1YiBh bmQgaHN1YiBmaWVsZHMsIG1lYW5pbmcgdGhhdCB0aGV5IHdvdWxkIHBlcmZvcm0KdHdpY2UgdGhl IGxvb2t1cC4KClJldmlld2VkLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJv cmEuY29tPgpSZXZpZXdlZC1ieTogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tp QGJvb3RsaW4uY29tPgpSZXZpZXdlZC1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290 bGluLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYyAgICAgICAg ICAgICB8ICA2ICstLQogZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX3Bs YW5lLmMgfCAgOSArLS0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYyAgICAgICAgICAg ICAgICAgICAgfCAzNCArLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLXBsYW5lLmMgICAgICAgICAgICAgICB8IDE1ICsrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgICB8ICA5ICstLS0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3BsYW5lLmMgICAgICB8IDI0ICsrKysrLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmMgICAgICAgIHwgIDIgKy0KIGRy aXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMgICAgICAgICAgICAgICAgICAgIHwgIDggKy0tLQog ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jICAgICAgfCAgOSArLS0t LQogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyAgICAgfCAxMCAr Ky0tLQogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMgICAgICAgICAgICAgICAgICAgICAgfCAg OSArLS0tLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyAgICAgICAgICAgICAgICAg fCAxMyArKy0tLS0tCiBpbmNsdWRlL2RybS9kcm1fZm91cmNjLmggICAgICAgICAgICAgICAgICAg ICAgICB8ICAyICstCiAxMyBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxMTIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVz LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwppbmRleCBkNDJlMGVhOWEz MDMuLjhmODk4MTNkMDhjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBf cGxhbmVzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKQEAgLTIz Myw4ICsyMzMsNyBAQCBib29sIG1hbGlkcF9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLAogCQkJfQogCQl9CiAKLQkJaWYgKChkcm1fZm9ybWF0X2hvcnpfY2hyb21h X3N1YnNhbXBsaW5nKGZvcm1hdCkgIT0gMSkgfHwKLQkJICAgIChkcm1fZm9ybWF0X3ZlcnRfY2hy b21hX3N1YnNhbXBsaW5nKGZvcm1hdCkgIT0gMSkpIHsKKwkJaWYgKChpbmZvLT5oc3ViICE9IDEp IHx8IChpbmZvLT52c3ViICE9IDEpKSB7CiAJCQlpZiAoIShmb3JtYXQgPT0gRFJNX0ZPUk1BVF9Z VVY0MjBfMTBCSVQgJiYKIAkJCSAgICAgIChtYXAtPmZlYXR1cmVzICYgTUFMSURQX0RFVklDRV9B RkJDX1lVVl80MjBfMTBfU1VQUE9SVF9TUExJVCkpKSB7CiAJCQkJRFJNX0RFQlVHX0tNUygiRm9y bWF0cyB3aGljaCBhcmUgc3ViLXNhbXBsZWQgc2hvdWxkIG5ldmVyIGJlIHNwbGl0XG4iKTsKQEAg LTI0NCw4ICsyNDMsNyBAQCBib29sIG1hbGlkcF9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAogCX0KIAogCWlmIChtb2RpZmllciAmIEFGQkNfQ0JSKSB7Ci0JCWlm ICgoZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpID09IDEpIHx8Ci0J CSAgICAoZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpID09IDEpKSB7 CisJCWlmICgoaW5mby0+aHN1YiA9PSAxKSB8fCAoaW5mby0+dnN1YiA9PSAxKSkgewogCQkJRFJN X0RFQlVHX0tNUygiRm9ybWF0cyB3aGljaCBhcmUgbm90IHN1Yi1zYW1wbGVkIHNob3VsZCBub3Qg aGF2ZSBDQlIgc2V0XG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX3BsYW5lLmMgYi9kcml2ZXJzL2dw dS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYwppbmRleCBlODM2ZTJkZTM1Y2Uu LmZkZDYwN2FkMjdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0 bWVsX2hsY2RjX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVs X2hsY2RjX3BsYW5lLmMKQEAgLTYwMyw4ICs2MDMsNiBAQCBzdGF0aWMgaW50IGF0bWVsX2hsY2Rj X3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwLAogCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTsKIAl1bnNpZ25lZCBpbnQgdG1wOwotCWludCBoc3ViID0gMTsKLQlpbnQgdnN1YiA9IDE7CiAJ aW50IHJldDsKIAlpbnQgaTsKIApAQCAtNjQyLDEzICs2NDAsMTAgQEAgc3RhdGljIGludCBhdG1l bF9obGNkY19wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcCwKIAlpZiAoc3Rh dGUtPm5wbGFuZXMgPiBBVE1FTF9ITENEQ19MQVlFUl9NQVhfUExBTkVTKQogCQlyZXR1cm4gLUVJ TlZBTDsKIAotCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5m b3JtYXQtPmZvcm1hdCk7Ci0JdnN1YiA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxp bmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQogCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnBsYW5l czsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCQlpbnQgeGRpdiA9IGkgPyBo c3ViIDogMTsKLQkJaW50IHlkaXYgPSBpID8gdnN1YiA6IDE7CisJCWludCB4ZGl2ID0gaSA/IGZi LT5mb3JtYXQtPmhzdWIgOiAxOworCQlpbnQgeWRpdiA9IGkgPyBmYi0+Zm9ybWF0LT52c3ViIDog MTsKIAogCQlzdGF0ZS0+YnBwW2ldID0gZmItPmZvcm1hdC0+Y3BwW2ldOwogCQlpZiAoIXN0YXRl LT5icHBbaV0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwppbmRleCA4NzNjMDAwMWQ4YzguLmU0YTJjODM3MmM4 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZvdXJjYy5jCkBAIC0zNTMsNDAgKzM1Myw2IEBAIGludCBkcm1fZm9ybWF0 X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKIEVYUE9SVF9TWU1CT0woZHJt X2Zvcm1hdF9wbGFuZV9jcHApOwogCiAvKioKLSAqIGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vi c2FtcGxpbmcgLSBnZXQgdGhlIGhvcml6b250YWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgot ICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCi0gKgotICogUmV0dXJuczoK LSAqIFRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IgZm9yIHRoZQotICog c3BlY2lmaWVkIHBpeGVsIGZvcm1hdC4KLSAqLwotaW50IGRybV9mb3JtYXRfaG9yel9jaHJvbWFf c3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQotewotCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmluZm87Ci0KLQlpbmZvID0gZHJtX2Zvcm1hdF9pbmZvKGZvcm1hdCk7Ci0JcmV0dXJu IGluZm8gPyBpbmZvLT5oc3ViIDogMTsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9ob3J6 X2Nocm9tYV9zdWJzYW1wbGluZyk7Ci0KLS8qKgotICogZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9z dWJzYW1wbGluZyAtIGdldCB0aGUgdmVydGljYWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgot ICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCi0gKgotICogUmV0dXJuczoK LSAqIFRoZSB2ZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yIGZvciB0aGUKLSAqIHNw ZWNpZmllZCBwaXhlbCBmb3JtYXQuCi0gKi8KLWludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1 YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9p bmZvICppbmZvOwotCi0JaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhmb3JtYXQpOwotCXJldHVybiBp bmZvID8gaW5mby0+dnN1YiA6IDE7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfdmVydF9j aHJvbWFfc3Vic2FtcGxpbmcpOwotCi0vKioKICAqIGRybV9mb3JtYXRfcGxhbmVfd2lkdGggLSB3 aWR0aCBvZiB0aGUgcGxhbmUgZ2l2ZW4gdGhlIGZpcnN0IHBsYW5lCiAgKiBAd2lkdGg6IHdpZHRo IG9mIHRoZSBmaXJzdCBwbGFuZQogICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14 L2lwdXYzLXBsYW5lLmMKaW5kZXggZDgxYjMxMDJiNDg4Li40YTU0YTVjMTkyZDIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaW14L2lwdXYzLXBsYW5lLmMKQEAgLTExNSw4ICsxMTUsOCBAQCBkcm1fcGxhbmVfc3RhdGVf dG9fdWJvKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogCWNtYV9vYmogPSBkcm1fZmJf Y21hX2dldF9nZW1fb2JqKGZiLCAxKTsKIAlCVUdfT04oIWNtYV9vYmopOwogCi0JeCAvPSBkcm1f Zm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7Ci0JeSAv PSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7 CisJeCAvPSBmYi0+Zm9ybWF0LT5oc3ViOworCXkgLz0gZmItPmZvcm1hdC0+dnN1YjsKIAogCXJl dHVybiBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzWzFdICsgZmItPnBpdGNoZXNbMV0gKiB5 ICsKIAkgICAgICAgZmItPmZvcm1hdC0+Y3BwWzFdICogeCAtIGViYTsKQEAgLTEzNCw4ICsxMzQs OCBAQCBkcm1fcGxhbmVfc3RhdGVfdG9fdmJvKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRl KQogCWNtYV9vYmogPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAyKTsKIAlCVUdfT04oIWNt YV9vYmopOwogCi0JeCAvPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5m b3JtYXQtPmZvcm1hdCk7Ci0JeSAvPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5n KGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJeCAvPSBmYi0+Zm9ybWF0LT5oc3ViOworCXkgLz0gZmIt PmZvcm1hdC0+dnN1YjsKIAogCXJldHVybiBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzWzJd ICsgZmItPnBpdGNoZXNbMl0gKiB5ICsKIAkgICAgICAgZmItPmZvcm1hdC0+Y3BwWzJdICogeCAt IGViYTsKQEAgLTM1Miw3ICszNTIsNiBAQCBzdGF0aWMgaW50IGlwdV9wbGFuZV9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xk X2ZiID0gb2xkX3N0YXRlLT5mYjsKIAl1bnNpZ25lZCBsb25nIGViYSwgdWJvLCB2Ym8sIG9sZF91 Ym8sIG9sZF92Ym8sIGFscGhhX2ViYTsKIAlib29sIGNhbl9wb3NpdGlvbiA9IChwbGFuZS0+dHlw ZSA9PSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKLQlpbnQgaHN1YiwgdnN1YjsKIAlpbnQgcmV0 OwogCiAJLyogT2sgdG8gZGlzYWJsZSAqLwpAQCAtNDcxLDEwICs0NzAsOCBAQCBzdGF0aWMgaW50 IGlwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCSAqIFRo ZSB4L3kgb2Zmc2V0cyBtdXN0IGJlIGV2ZW4gaW4gY2FzZSBvZiBob3Jpem9udGFsL3ZlcnRpY2Fs CiAJCSAqIGNocm9tYSBzdWJzYW1wbGluZy4KIAkJICovCi0JCWhzdWIgPSBkcm1fZm9ybWF0X2hv cnpfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7Ci0JCXZzdWIgPSBkcm1f Zm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7Ci0JCWlm ICgoKHN0YXRlLT5zcmMueDEgPj4gMTYpICYgKGhzdWIgLSAxKSkgfHwKLQkJICAgICgoc3RhdGUt PnNyYy55MSA+PiAxNikgJiAodnN1YiAtIDEpKSkKKwkJaWYgKCgoc3RhdGUtPnNyYy54MSA+PiAx NikgJiAoZmItPmZvcm1hdC0+aHN1YiAtIDEpKSB8fAorCQkgICAgKChzdGF0ZS0+c3JjLnkxID4+ IDE2KSAmIChmYi0+Zm9ybWF0LT52c3ViIC0gMSkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJy ZWFrOwogCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjVfQTg6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9wbGFuZS5jCmluZGV4IGRhMWY3MjdkNzQ5NS4uNzk5NGRlOTUyMzUzIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwpAQCAtNTU3LDE0ICs1NTcs OSBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcihzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1LAogCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsCiAJCWNvbnN0IHN0cnVj dCBkcHVfZm9ybWF0ICpmbXQsIGJvb2wgY29sb3JfZmlsbCkKIHsKLQl1aW50MzJfdCBjaHJvbWFf c3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92OworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2lu Zm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCk7CiAKIAkv KiBkb24ndCBjaHJvbWEgc3Vic2FtcGxlIGlmIGRlY2ltYXRpbmcgKi8KLQljaHJvbWFfc3Vic21w bF9oID0KLQkJZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmbXQtPmJhc2UucGl4 ZWxfZm9ybWF0KTsKLQljaHJvbWFfc3Vic21wbF92ID0KLQkJZHJtX2Zvcm1hdF92ZXJ0X2Nocm9t YV9zdWJzYW1wbGluZyhmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKLQogCS8qIHVwZGF0ZSBzY2Fs ZXIuIGNhbGN1bGF0ZSBkZWZhdWx0IGNvbmZpZyBmb3IgUVNFRUQzICovCiAJX2RwdV9wbGFuZV9z ZXR1cF9zY2FsZXIzKHBkcHUsIHBzdGF0ZSwKIAkJCWRybV9yZWN0X3dpZHRoKCZwZHB1LT5waXBl X2NmZy5zcmNfcmVjdCksCkBAIC01NzIsNyArNTY3LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFu ZV9zZXR1cF9zY2FsZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAkJCWRybV9yZWN0X3dpZHRo KCZwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCksCiAJCQlkcm1fcmVjdF9oZWlnaHQoJnBkcHUtPnBp cGVfY2ZnLmRzdF9yZWN0KSwKIAkJCSZwc3RhdGUtPnNjYWxlcjNfY2ZnLCBmbXQsCi0JCQljaHJv bWFfc3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92KTsKKwkJCWluZm8tPmhzdWIsIGluZm8tPnZz dWIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1 L21kcDVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfcGxhbmUu YwppbmRleCBiZTEzMTQwOTY3YjQuLjlkOWZiNmM1ZmQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYwpAQCAtNjUwLDEwICs2NTAsMTAgQEAgc3RhdGljIGlu dCBjYWxjX3NjYWxleF9zdGVwcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJdWludDMyX3Qg cGl4ZWxfZm9ybWF0LCB1aW50MzJfdCBzcmMsIHVpbnQzMl90IGRlc3QsCiAJCXVpbnQzMl90IHBo YXNleF9zdGVwc1tDT01QX01BWF0pCiB7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAq aW5mbyA9IGRybV9mb3JtYXRfaW5mbyhwaXhlbF9mb3JtYXQpOwogCXN0cnVjdCBtZHA1X2ttcyAq bWRwNV9rbXMgPSBnZXRfa21zKHBsYW5lKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtZHA1X2tt cy0+ZGV2LT5kZXY7CiAJdWludDMyX3QgcGhhc2V4X3N0ZXA7Ci0JdW5zaWduZWQgaW50IGhzdWI7 CiAJaW50IHJldDsKIAogCXJldCA9IGNhbGNfcGhhc2Vfc3RlcChzcmMsIGRlc3QsICZwaGFzZXhf c3RlcCk7CkBAIC02NjIsMTEgKzY2Miw5IEBAIHN0YXRpYyBpbnQgY2FsY19zY2FsZXhfc3RlcHMo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJldHVybiByZXQ7CiAJfQogCi0JaHN1YiA9IGRy bV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcocGl4ZWxfZm9ybWF0KTsKLQogCXBoYXNl eF9zdGVwc1tDT01QXzBdICAgPSBwaGFzZXhfc3RlcDsKIAlwaGFzZXhfc3RlcHNbQ09NUF8zXSAg ID0gcGhhc2V4X3N0ZXA7Ci0JcGhhc2V4X3N0ZXBzW0NPTVBfMV8yXSA9IHBoYXNleF9zdGVwIC8g aHN1YjsKKwlwaGFzZXhfc3RlcHNbQ09NUF8xXzJdID0gcGhhc2V4X3N0ZXAgLyBpbmZvLT5oc3Vi OwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzUsMTAgKzY3MywxMCBAQCBzdGF0aWMgaW50IGNhbGNf c2NhbGV5X3N0ZXBzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQl1aW50MzJfdCBwaXhlbF9m b3JtYXQsIHVpbnQzMl90IHNyYywgdWludDMyX3QgZGVzdCwKIAkJdWludDMyX3QgcGhhc2V5X3N0 ZXBzW0NPTVBfTUFYXSkKIHsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0g ZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2tt cyA9IGdldF9rbXMocGxhbmUpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1kcDVfa21zLT5kZXYt PmRldjsKIAl1aW50MzJfdCBwaGFzZXlfc3RlcDsKLQl1bnNpZ25lZCBpbnQgdnN1YjsKIAlpbnQg cmV0OwogCiAJcmV0ID0gY2FsY19waGFzZV9zdGVwKHNyYywgZGVzdCwgJnBoYXNleV9zdGVwKTsK QEAgLTY4NywxMSArNjg1LDkgQEAgc3RhdGljIGludCBjYWxjX3NjYWxleV9zdGVwcyhzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl2c3ViID0gZHJtX2Zvcm1h dF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhwaXhlbF9mb3JtYXQpOwotCiAJcGhhc2V5X3N0ZXBz W0NPTVBfMF0gICA9IHBoYXNleV9zdGVwOwogCXBoYXNleV9zdGVwc1tDT01QXzNdICAgPSBwaGFz ZXlfc3RlcDsKLQlwaGFzZXlfc3RlcHNbQ09NUF8xXzJdID0gcGhhc2V5X3N0ZXAgLyB2c3ViOwor CXBoYXNleV9zdGVwc1tDT01QXzFfMl0gPSBwaGFzZXlfc3RlcCAvIGluZm8tPnZzdWI7CiAKIAly ZXR1cm4gMDsKIH0KQEAgLTY5OSw4ICs2OTUsOSBAQCBzdGF0aWMgaW50IGNhbGNfc2NhbGV5X3N0 ZXBzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogc3RhdGljIHVpbnQzMl90IGdldF9zY2FsZV9j b25maWcoY29uc3Qgc3RydWN0IG1kcF9mb3JtYXQgKmZvcm1hdCwKIAkJdWludDMyX3Qgc3JjLCB1 aW50MzJfdCBkc3QsIGJvb2wgaG9yeikKIHsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZv ICppbmZvID0gZHJtX2Zvcm1hdF9pbmZvKGZvcm1hdC0+YmFzZS5waXhlbF9mb3JtYXQpOwogCWJv b2wgc2NhbGluZyA9IGZvcm1hdC0+aXNfeXV2ID8gdHJ1ZSA6IChzcmMgIT0gZHN0KTsKLQl1aW50 MzJfdCBzdWIsIHBpeF9mbXQgPSBmb3JtYXQtPmJhc2UucGl4ZWxfZm9ybWF0OworCXVpbnQzMl90 IHN1YjsKIAl1aW50MzJfdCB5YV9maWx0ZXIsIHV2X2ZpbHRlcjsKIAlib29sIHl1diA9IGZvcm1h dC0+aXNfeXV2OwogCkBAIC03MDgsOCArNzA1LDcgQEAgc3RhdGljIHVpbnQzMl90IGdldF9zY2Fs ZV9jb25maWcoY29uc3Qgc3RydWN0IG1kcF9mb3JtYXQgKmZvcm1hdCwKIAkJcmV0dXJuIDA7CiAK IAlpZiAoeXV2KSB7Ci0JCXN1YiA9IGhvcnogPyBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNh bXBsaW5nKHBpeF9mbXQpIDoKLQkJCSAgICAgZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1w bGluZyhwaXhfZm10KTsKKwkJc3ViID0gaG9yeiA/IGluZm8tPmhzdWIgOiBpbmZvLT52c3ViOwog CQl1dl9maWx0ZXIgPSAoKHNyYyAvIHN1YikgPD0gZHN0KSA/CiAJCQkJICAgU0NBTEVfRklMVEVS X0JJTCA6IFNDQUxFX0ZJTFRFUl9QQ01OOwogCX0KQEAgLTc1NCw3ICs3NTAsNyBAQCBzdGF0aWMg dm9pZCBtZHA1X3dyaXRlX3BpeGVsX2V4dChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zLCBlbnVt IG1kcDVfcGlwZSBwaXBlLAogCXVpbnQzMl90IHNyY193LCBpbnQgcGVfbGVmdFtDT01QX01BWF0s IGludCBwZV9yaWdodFtDT01QX01BWF0sCiAJdWludDMyX3Qgc3JjX2gsIGludCBwZV90b3BbQ09N UF9NQVhdLCBpbnQgcGVfYm90dG9tW0NPTVBfTUFYXSkKIHsKLQl1aW50MzJfdCBwaXhfZm10ID0g Zm9ybWF0LT5iYXNlLnBpeGVsX2Zvcm1hdDsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZv ICppbmZvID0gZHJtX2Zvcm1hdF9pbmZvKGZvcm1hdC0+YmFzZS5waXhlbF9mb3JtYXQpOwogCXVp bnQzMl90IGxyLCB0YiwgcmVxOwogCWludCBpOwogCkBAIC03NjMsOCArNzU5LDggQEAgc3RhdGlj IHZvaWQgbWRwNV93cml0ZV9waXhlbF9leHQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywgZW51 bSBtZHA1X3BpcGUgcGlwZSwKIAkJdWludDMyX3Qgcm9pX2ggPSBzcmNfaDsKIAogCQlpZiAoZm9y bWF0LT5pc195dXYgJiYgaSA9PSBDT01QXzFfMikgewotCQkJcm9pX3cgLz0gZHJtX2Zvcm1hdF9o b3J6X2Nocm9tYV9zdWJzYW1wbGluZyhwaXhfZm10KTsKLQkJCXJvaV9oIC89IGRybV9mb3JtYXRf dmVydF9jaHJvbWFfc3Vic2FtcGxpbmcocGl4X2ZtdCk7CisJCQlyb2lfdyAvPSBpbmZvLT5oc3Vi OworCQkJcm9pX2ggLz0gaW5mby0+dnN1YjsKIAkJfQogCiAJCWxyICA9IChwZV9sZWZ0W2ldID49 IDApID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21w LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jCmluZGV4IDcyYWI4 ZDg5ZWZhNC4uYjMwYjJmNGVmYzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvbWRwNS9tZHA1X3NtcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21k cDVfc21wLmMKQEAgLTEzNSw3ICsxMzUsNyBAQCB1aW50MzJfdCBtZHA1X3NtcF9jYWxjdWxhdGUo c3RydWN0IG1kcDVfc21wICpzbXAsCiAJdWludDMyX3QgYmxrY2ZnID0gMDsKIAogCW5wbGFuZXMg PSBpbmZvLT5udW1fcGxhbmVzOwotCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNh bXBsaW5nKGZtdCk7CisJaHN1YiA9IGluZm8tPmhzdWI7CiAKIAkvKiBkaWZmZXJlbnQgaWYgQldD IChjb21wcmVzc2VkIGZyYW1lYnVmZmVyPykgZW5hYmxlZDogKi8KIAlubGluZXMgPSAyOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2ZiLmMKaW5kZXggNDMyYmVkZGFmYjllLi5mNjljMGFmZDZlYzYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZmIuYwpAQCAtMTQ1LDE2ICsxNDUsMTIgQEAgc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm1zbV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJY29uc3Qgc3RydWN0IG1zbV9mb3JtYXQgKmZvcm1hdDsK IAlpbnQgcmV0LCBpLCBuOwotCXVuc2lnbmVkIGludCBoc3ViLCB2c3ViOwogCiAJREJHKCJjcmVh dGUgZnJhbWVidWZmZXI6IGRldj0lcCwgbW9kZV9jbWQ9JXAgKCVkeCVkQCU0LjRzKSIsCiAJCQlk ZXYsIG1vZGVfY21kLCBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQsCiAJCQkoY2hh ciAqKSZtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KTsKIAogCW4gPSBpbmZvLT5udW1fcGxhbmVzOwot CWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKG1vZGVfY21kLT5waXhl bF9mb3JtYXQpOwotCXZzdWIgPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKG1v ZGVfY21kLT5waXhlbF9mb3JtYXQpOwotCiAJZm9ybWF0ID0ga21zLT5mdW5jcy0+Z2V0X2Zvcm1h dChrbXMsIG1vZGVfY21kLT5waXhlbF9mb3JtYXQsCiAJCQltb2RlX2NtZC0+bW9kaWZpZXJbMF0p OwogCWlmICghZm9ybWF0KSB7CkBAIC0xODAsOCArMTc2LDggQEAgc3RhdGljIHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKm1zbV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQl1bnNpZ25lZCBpbnQgd2lkdGgg PSBtb2RlX2NtZC0+d2lkdGggLyAoaSA/IGhzdWIgOiAxKTsKLQkJdW5zaWduZWQgaW50IGhlaWdo dCA9IG1vZGVfY21kLT5oZWlnaHQgLyAoaSA/IHZzdWIgOiAxKTsKKwkJdW5zaWduZWQgaW50IHdp ZHRoID0gbW9kZV9jbWQtPndpZHRoIC8gKGkgPyBpbmZvLT5oc3ViIDogMSk7CisJCXVuc2lnbmVk IGludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0IC8gKGkgPyBpbmZvLT52c3ViIDogMSk7CiAJ CXVuc2lnbmVkIGludCBtaW5fc2l6ZTsKIAogCQltaW5fc2l6ZSA9IChoZWlnaHQgLSAxKSAqIG1v ZGVfY21kLT5waXRjaGVzW2ldCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X2ZiLmMKaW5kZXggNjA2ZDE3NmQ1ZDk2Li5jMzE4ZmFlMjg1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZmIuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKQEAgLTc5LDE4ICs3OSwxMyBAQCByb2NrY2hp cF91c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKIAlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9ianNbUk9DS0NISVBfTUFYX0ZCX0JVRkZFUl07CiAJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmo7Ci0JdW5zaWduZWQgaW50IGhzdWI7Ci0JdW5zaWduZWQgaW50IHZzdWI7CiAJ aW50IG51bV9wbGFuZXMgPSBtaW5fdChpbnQsIGluZm8tPm51bV9wbGFuZXMsIFJPQ0tDSElQX01B WF9GQl9CVUZGRVIpOwogCWludCByZXQ7CiAJaW50IGk7CiAKLQloc3ViID0gZHJtX2Zvcm1hdF9o b3J6X2Nocm9tYV9zdWJzYW1wbGluZyhtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KTsKLQl2c3ViID0g ZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0 KTsKLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKLQkJdW5zaWduZWQgaW50 IHdpZHRoID0gbW9kZV9jbWQtPndpZHRoIC8gKGkgPyBoc3ViIDogMSk7Ci0JCXVuc2lnbmVkIGlu dCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0IC8gKGkgPyB2c3ViIDogMSk7CisJCXVuc2lnbmVk IGludCB3aWR0aCA9IG1vZGVfY21kLT53aWR0aCAvIChpID8gaW5mby0+aHN1YiA6IDEpOworCQl1 bnNpZ25lZCBpbnQgaGVpZ2h0ID0gbW9kZV9jbWQtPmhlaWdodCAvIChpID8gaW5mby0+dnN1YiA6 IDEpOwogCQl1bnNpZ25lZCBpbnQgbWluX3NpemU7CiAKIAkJb2JqID0gZHJtX2dlbV9vYmplY3Rf bG9va3VwKGZpbGVfcHJpdiwgbW9kZV9jbWQtPmhhbmRsZXNbaV0pOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKaW5kZXggOWMwZDZiMzY3NzA5Li5hZDNmMjUy OTBlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwpA QCAtMzIwLDExICszMjAsOSBAQCBzdGF0aWMgdm9pZCBzY2xfdm9wX2NhbF9zY2xfZmFjKHN0cnVj dCB2b3AgKnZvcCwgY29uc3Qgc3RydWN0IHZvcF93aW5fZGF0YSAqd2luLAogCXVpbnQxNl90IHly Z2JfaG9yX3NjbF9tb2RlLCB5cmdiX3Zlcl9zY2xfbW9kZTsKIAl1aW50MTZfdCBjYmNyX2hvcl9z Y2xfbW9kZSA9IFNDQUxFX05PTkU7CiAJdWludDE2X3QgY2Jjcl92ZXJfc2NsX21vZGUgPSBTQ0FM RV9OT05FOwotCWludCBoc3ViID0gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhp bmZvLT5mb3JtYXQpOwotCWludCB2c3ViID0gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1w bGluZyhpbmZvLT5mb3JtYXQpOwogCWJvb2wgaXNfeXV2ID0gZmFsc2U7Ci0JdWludDE2X3QgY2Jj cl9zcmNfdyA9IHNyY193IC8gaHN1YjsKLQl1aW50MTZfdCBjYmNyX3NyY19oID0gc3JjX2ggLyB2 c3ViOworCXVpbnQxNl90IGNiY3Jfc3JjX3cgPSBzcmNfdyAvIGluZm8tPmhzdWI7CisJdWludDE2 X3QgY2Jjcl9zcmNfaCA9IHNyY19oIC8gaW5mby0+dnN1YjsKIAl1aW50MTZfdCB2c3VfbW9kZTsK IAl1aW50MTZfdCBsYl9tb2RlOwogCXVpbnQzMl90IHZhbDsKQEAgLTgyOCw4ICs4MjYsOCBAQCBz dGF0aWMgdm9pZCB2b3BfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAkJICAgIChzdGF0ZS0+cm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpID8gMSA6IDAp OwogCiAJaWYgKGlzX3l1dikgewotCQlpbnQgaHN1YiA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFf c3Vic2FtcGxpbmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQkJaW50IHZzdWIgPSBkcm1fZm9ybWF0 X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJCWludCBoc3Vi ID0gZmItPmZvcm1hdC0+aHN1YjsKKwkJaW50IHZzdWIgPSBmYi0+Zm9ybWF0LT52c3ViOwogCQlp bnQgYnBwID0gZmItPmZvcm1hdC0+Y3BwWzFdOwogCiAJCXV2X29iaiA9IGZiLT5vYmpbMV07CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS90 ZWdyYS9mYi5jCmluZGV4IGRhMDc0N2UzMTdiNy4uOTRmYjc1MDg5ZDg3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdGVncmEvZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIu YwpAQCAtMTMyLDE4ICsxMzIsMTUgQEAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqdGVncmFfZmJf Y3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCiAJCQkJCWNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICpjbWQpCiB7CiAJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9 IGRybV9nZXRfZm9ybWF0X2luZm8oZHJtLCBjbWQpOwotCXVuc2lnbmVkIGludCBoc3ViLCB2c3Vi LCBpOwogCXN0cnVjdCB0ZWdyYV9ibyAqcGxhbmVzWzRdOwogCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ2VtOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXVuc2lnbmVkIGludCBpOwog CWludCBlcnI7CiAKLQloc3ViID0gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhj bWQtPnBpeGVsX2Zvcm1hdCk7Ci0JdnN1YiA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2Ft cGxpbmcoY21kLT5waXhlbF9mb3JtYXQpOwotCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV9w bGFuZXM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoIC8gKGkgPyBo c3ViIDogMSk7Ci0JCXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodCAvIChpID8gdnN1 YiA6IDEpOworCQl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoIC8gKGkgPyBpbmZvLT5o c3ViIDogMSk7CisJCXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodCAvIChpID8gaW5m by0+dnN1YiA6IDEpOwogCQl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOwogCiAJCWdlbSA9IGRybV9n ZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBjbWQtPmhhbmRsZXNbaV0pOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Bs YW5lLmMKaW5kZXggZTNjMGEzNTBjYjc3Li5iZTIyNzQ5MjRiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf cGxhbmUuYwpAQCAtMzEwLDEwICszMTAsMTAgQEAgc3RhdGljIGludCB2YzRfcGxhbmVfc2V0dXBf Y2xpcHBpbmdfYW5kX3NjYWxpbmcoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiAJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CiAJc3RydWN0IGRybV9nZW1fY21h X29iamVjdCAqYm8gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKIAl1MzIgc3VicGl4 ZWxfc3JjX21hc2sgPSAoMSA8PCAxNikgLSAxOwotCXUzMiBmb3JtYXQgPSBmYi0+Zm9ybWF0LT5m b3JtYXQ7CiAJaW50IG51bV9wbGFuZXMgPSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOwogCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQl1MzIgaF9zdWJzYW1wbGUsIHZfc3Vic2Ft cGxlOworCXUzMiBoX3N1YnNhbXBsZSA9IGZiLT5mb3JtYXQtPmhzdWI7CisJdTMyIHZfc3Vic2Ft cGxlID0gZmItPmZvcm1hdC0+dnN1YjsKIAlpbnQgaSwgcmV0OwogCiAJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLApAQCAtMzI4LDkg KzMyOCw2IEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5lX3NldHVwX2NsaXBwaW5nX2FuZF9zY2FsaW5n KHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7 CiAKLQloX3N1YnNhbXBsZSA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm9y bWF0KTsKLQl2X3N1YnNhbXBsZSA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmco Zm9ybWF0KTsKLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspCiAJCXZjNF9zdGF0 ZS0+b2Zmc2V0c1tpXSA9IGJvLT5wYWRkciArIGZiLT5vZmZzZXRzW2ldOwogCkBAIC01OTMsNyAr NTkwLDggQEAgc3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJY29uc3Qgc3RydWN0IGh2c19mb3JtYXQgKmZvcm1hdCA9IHZjNF9nZXRfaHZzX2Zv cm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOwogCXU2NCBiYXNlX2Zvcm1hdF9tb2QgPSBmb3VyY2Nf bW9kX2Jyb2FkY29tX21vZChmYi0+bW9kaWZpZXIpOwogCWludCBudW1fcGxhbmVzID0gZmItPmZv cm1hdC0+bnVtX3BsYW5lczsKLQl1MzIgaF9zdWJzYW1wbGUsIHZfc3Vic2FtcGxlOworCXUzMiBo X3N1YnNhbXBsZSA9IGZiLT5mb3JtYXQtPmhzdWI7CisJdTMyIHZfc3Vic2FtcGxlID0gZmItPmZv cm1hdC0+dnN1YjsKIAlib29sIG1peF9wbGFuZV9hbHBoYTsKIAlib29sIGNvdmVyc19zY3JlZW47 CiAJdTMyIHNjbDAsIHNjbDEsIHBpdGNoMDsKQEAgLTYyMyw5ICs2MjEsNiBAQCBzdGF0aWMgaW50 IHZjNF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJc2NsMSA9IHZj NF9nZXRfc2NsX2ZpZWxkKHN0YXRlLCAwKTsKIAl9CiAKLQloX3N1YnNhbXBsZSA9IGRybV9mb3Jt YXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm9ybWF0LT5kcm0pOwotCXZfc3Vic2FtcGxlID0g ZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQtPmRybSk7Ci0KIAlyb3Rh dGlvbiA9IGRybV9yb3RhdGlvbl9zaW1wbGlmeShzdGF0ZS0+cm90YXRpb24sCiAJCQkJCSBEUk1f TU9ERV9ST1RBVEVfMCB8CiAJCQkJCSBEUk1fTU9ERV9SRUZMRUNUX1ggfApkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCmluZGV4 IDQxNzc5YjMyN2Q5MS4uZWVlYzQ0OWQ2YzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1f Zm91cmNjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCkBAIC0yNjksOCArMjY5LDYg QEAgdWludDMyX3QgZHJtX21vZGVfbGVnYWN5X2ZiX2Zvcm1hdCh1aW50MzJfdCBicHAsIHVpbnQz Ml90IGRlcHRoKTsKIHVpbnQzMl90IGRybV9kcml2ZXJfbGVnYWN5X2ZiX2Zvcm1hdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICAgdWludDMyX3QgYnBwLCB1aW50MzJfdCBkZXB0aCk7 CiBpbnQgZHJtX2Zvcm1hdF9wbGFuZV9jcHAodWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOwot aW50IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KTsK LWludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7 CiBpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZvcm1hdCwg aW50IHBsYW5lKTsKIGludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVpZ2h0LCB1aW50 MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7CiB1bnNpZ25lZCBpbnQgZHJtX2Zvcm1hdF9pbmZvX2Js b2NrX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8sCi0tIApnaXQtc2Vy aWVzIDAuOS4xCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==