Received: by 2002:a05:6a10:144:0:0:0:0 with SMTP id 4csp944746pxw; Sat, 9 Apr 2022 06:05:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6jyI9oyuFBGnIbXtBtwDMJ2ZpUlF9BM6Im88d+SOVfawhOkUubaHjr2LQ5yRCm79jCbhj X-Received: by 2002:a05:6e02:1aa7:b0:2ca:52e8:b500 with SMTP id l7-20020a056e021aa700b002ca52e8b500mr10825208ilv.34.1649509528546; Sat, 09 Apr 2022 06:05:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649509528; cv=none; d=google.com; s=arc-20160816; b=BWrZyPMrNKM99N2oHJxiJiEcr+/SthqL7QmA4p88ZPXiPkyfLDdgxXZH2MI2CBHhaJ 6oNFM7aipq45Ard1g1N4fTPuOX189WXzxsdyIoO66Yai3MAX1RCWI2sb/UNS8tqexGbH zWv/WJIVupsAU55rnoo2offK0B+TdKS0gMDTGxr8hc0lNE+YdoktVh7j8kWW18tpScZy p13ybfXkX9isdcbvlwa1tuSjaPm9+Cm9nZhcAf8ndXrLXOCO7lQly7I03dnLGpu/UJai 05N84QAZs5S2sofa2K4E0sYEKeEYMAxZWLNY5WHUbVnQa+Ab66NfxUFfrdREGSAjz4e1 gtkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/6bF252QqnY12H7PjXHxtHVXzmjhuS4IY4ywpEiT3F4=; b=K9gLRCGlHoQi7abB5RyjEdDOFCHIyHtumyJ9oGFrFiYYgwpjxqTtmK7mLNC+v4NgSb jXhuy1o295MkKqL61JxR5Hj+MyX876w4edsqNNb0kq41GjqqkMUYRKHueO9bV9y4QBVD T95kfos4z2DZpoHvzFcjSVfPr2sTfOgwAO5OPDxbNJkQdBRDPBTqv5JxV0jLjEj79TK6 ty9yk5tBh4VEj/MZW5o0H/4tOm+3ycYDoMd06VPdO85+4ZrPgpsX/88LOvqWb+7WRHBI LVesnPk1i4MsoE2x6TjE52bBMfzYijiQpejoNCzxQCEPHugNmSkbd7SCowuDsmLGa3Qr wsgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=t9eaw347; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v16-20020a056e0213d000b002c9af6129cbsi1830238ilj.119.2022.04.09.06.05.11; Sat, 09 Apr 2022 06:05:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=t9eaw347; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239584AbiDHVCs (ORCPT + 99 others); Fri, 8 Apr 2022 17:02:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237244AbiDHVCk (ORCPT ); Fri, 8 Apr 2022 17:02:40 -0400 Received: from mail-oo1-xc31.google.com (mail-oo1-xc31.google.com [IPv6:2607:f8b0:4864:20::c31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 359FFF7F67 for ; Fri, 8 Apr 2022 14:00:36 -0700 (PDT) Received: by mail-oo1-xc31.google.com with SMTP id y7-20020a4a9807000000b003296ea2104eso1675707ooi.13 for ; Fri, 08 Apr 2022 14:00:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/6bF252QqnY12H7PjXHxtHVXzmjhuS4IY4ywpEiT3F4=; b=t9eaw3470SQsd1wU8fIBzSCDwU93D3/U5o7El/OjmTy/I/XW40z25vnyJRfDe180ji 6GVsXBXQorbud91CxmGZV4Na3ft9TgYHHi3PIzLFlx+1OKjL2aphMwALvb3tTiabF6gN RcLnSJ1kAy9nybVb9TvGuxKDqFdxuiM/rg7UmqX4psrIvVxOh/VEnAWbQM1sqNEDW/7I NE+0X4K7taXlXnSSd2OIutuIRZWpiW0RJQIb1dvIHpfxxhxlUDtgoiAFSQcXkv+l8Ku2 jtixuZhBORYm/NPQtNHLsPDs1p6hE3PPik4BqIPP0qxY/HZ/Ll0eVZEK9ZU9n64KkqKI TUug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/6bF252QqnY12H7PjXHxtHVXzmjhuS4IY4ywpEiT3F4=; b=xVY1hx0hMiG8ClJtNB07Q7PRH/PlrG5L6gydPHuBwls4w6rbHTflZvBcq/qOE2Sarr /L0NtQi2SfduZ2/6kosXFImaVZ3eiA6eZgxghS6+cM3Fe67V2zgq5NQCd9ka8Qfkg94G lmSNVM7LUkaPUWUncXl2GE9qZuyBTkS5RpOXqFDYy3snj6liogHWmt9tRrV2EzKCkNsB dOs/tiswQiGgNlFYmGn4C4V5t9yvvCRXbJdtFbLnnynYMangd7W+/1NrC/bMp284JpiB I4IMkidM1QH9hPT49TnDePUeYz8pgxslVyjovJo9dlaUBDW+txcsIVeSXXo52YbhiKjA MU0Q== X-Gm-Message-State: AOAM532FskcUS6a9cjEbWe9lc8DTcNMtKs58M6KUr6WXOt4FjkfVNo1D KMtcSd9iLM5XBm2MwlJ9ItcNgw== X-Received: by 2002:a4a:d08d:0:b0:321:54c7:8fe0 with SMTP id i13-20020a4ad08d000000b0032154c78fe0mr6782448oor.10.1649451635561; Fri, 08 Apr 2022 14:00:35 -0700 (PDT) Received: from ripper.. ([2600:1700:a0:3dc8:205:1bff:fec0:b9b3]) by smtp.gmail.com with ESMTPSA id j126-20020acab984000000b002da77222b7dsm9160490oif.22.2022.04.08.14.00.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Apr 2022 14:00:34 -0700 (PDT) From: Bjorn Andersson To: Rob Clark , Abhinav Kumar , Rob Herring , Krzysztof Kozlowski , Dmitry Baryshkov Cc: Sean Paul , David Airlie , Daniel Vetter , Philipp Zabel , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] drm/msm/dpu: Issue MDSS reset during initialization Date: Fri, 8 Apr 2022 14:02:53 -0700 Message-Id: <20220408210253.581337-2-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220408210253.581337-1-bjorn.andersson@linaro.org> References: <20220408210253.581337-1-bjorn.andersson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It's typical for the bootloader to bring up the display for showing a boot splash or efi framebuffer. But in some cases the kernel driver ends up only partially configuring (in particular) the DPU, which might result in e.g. that two different data paths attempts to push data to the interface - with resulting graphical artifacts. Naturally the end goal would be to inherit the bootloader's configuration and provide the user with a glitch free handover from the boot configuration to a running DPU. But as implementing seamless transition from the bootloader configuration to the running OS will be a considerable effort, start by simply resetting the entire MDSS to its power-on state, to avoid the partial configuration. Signed-off-by: Bjorn Andersson --- Changes since v2: - Move the reset before the probing of the children, to avoid issues if child drivers touched hardware at probe time. - Extend reset assert time as the previous 1us showed reliability issues on Lenovo Flex 5G. drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c index b10ca505f9ac..6f921910d0e0 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c @@ -3,10 +3,12 @@ * Copyright (c) 2018, The Linux Foundation */ +#include #include #include #include #include +#include #include "dpu_kms.h" #define to_dpu_mdss(x) container_of(x, struct dpu_mdss, base) @@ -197,6 +199,32 @@ static void dpu_mdss_destroy(struct msm_mdss *mdss) dpu_mdss->mmio = NULL; } +static int dpu_mdss_reset(struct device *dev) +{ + struct reset_control *reset; + + reset = reset_control_get_optional_exclusive(dev, NULL); + if (!reset) { + /* Optional reset not specified */ + return 0; + } else if (IS_ERR(reset)) { + DPU_ERROR("failed to acquire mdss reset, ret=%ld", PTR_ERR(reset)); + return PTR_ERR(reset); + } + + reset_control_assert(reset); + /* + * Tests indicate that reset has to be held for some period of time, + * make it one frame in a typical system + */ + msleep(20); + reset_control_deassert(reset); + + reset_control_put(reset); + + return 0; +} + static const struct msm_mdss_funcs mdss_funcs = { .enable = dpu_mdss_enable, .disable = dpu_mdss_disable, @@ -210,6 +238,10 @@ int dpu_mdss_init(struct platform_device *pdev) int ret; int irq; + ret = dpu_mdss_reset(&pdev->dev); + if (ret) + return ret; + dpu_mdss = devm_kzalloc(&pdev->dev, sizeof(*dpu_mdss), GFP_KERNEL); if (!dpu_mdss) return -ENOMEM; -- 2.35.1