Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp803928lqs; Tue, 5 Mar 2024 18:11:18 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCX2eD+ZV8QtFN7Kg5e4Hsz+ZrR6p94ljj9vLJQ74d30fOETtgOW6QLyrDfIobl8BXZ5xsGLCs9By6FY3k1GeNv6K3EEdnBOlqveBcP2Ww== X-Google-Smtp-Source: AGHT+IHDrXmEAFAcz4ZKax4/2b7NjMMyEqx8SH2WAyaV1+dbMd0q6ss7FYHRdhq9aRiEPL5pc0LQ X-Received: by 2002:a05:6808:4199:b0:3c2:17e1:95e5 with SMTP id dj25-20020a056808419900b003c217e195e5mr1630251oib.26.1709691078126; Tue, 05 Mar 2024 18:11:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709691078; cv=pass; d=google.com; s=arc-20160816; b=Kw6cZRrnY5x3jBRf6IRmmRDOKJVthUL3L02xPPIpyHYnX/ru4YH5A51vYgyWn8mAVV QhNkRW8KB+WouPlcGB10Okws/hqJIevTek6jkLOEdn0ssxKfECmfX1uHBi6xBJ4l2YMR mpqCgwvg0i3rlNFyBUB3Fn9ZVr4pVtF70NhKsm2lKNhLUqWVwyWos160AbDBbJZdQHr+ HkUmf+wPWsxiPMgdoHhe7yPhnrdRoaff7yR0xvE06PUb5iNcwj4MHpktY1QvHU+N2/az VdGHLXirVzClAyD2jsanZwfYS0jSgWkQq3x33Cn8u8nnw5wYCeD5mmngb1qW6dQ2iqHg bURA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=ZGM4CTvY0+d25ts8P1XACik2JTlfRT4G4KiIsDIO+0o=; fh=UBA4MDRFgs8UXObNo4HOXLUYpzMhkArmZi2JjpixL0g=; b=IHT/hTAmZRGkzZ9tLXbqEHZ1wnRDKQBs9+9ZI/WmVNHOCBXhl+5CtedjVtbmvUKvxn VWjk3y9Pmw34EzeOA1ti8V/nsX8kbIeEaqgejKJefJvGndEsJf3DRRLxv/h8ushLZVO4 9sJCuYiWVDXkGG4QeIrjf7jhIxAEn2BwlcU4Mn3by0EYR6WQqCSE7lMA/8jxBtEYHOEd HvO3GjF4koodXUgveJ2NLu1gXBgUM8sBDwIV/cefwwM3IP59qhWfsrFNnbnQHYoZ6PoS XrKtKE2ByFzQXRgQ25pwLcjUxRVHshAMbkZ3cwW/xQ9xbFaBPv/SwOg4WdhYCro/dy6I VkSQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@ite.com.tw header.s=dkim header.b=iECa9yxT; arc=pass (i=1 spf=pass spfdomain=ite.com.tw dkim=pass dkdomain=ite.com.tw dmarc=pass fromdomain=ite.com.tw); spf=pass (google.com: domain of linux-kernel+bounces-93229-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93229-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ite.com.tw Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id b6-20020a63cf46000000b005dc3c49442esi11052733pgj.732.2024.03.05.18.11.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 18:11:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-93229-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@ite.com.tw header.s=dkim header.b=iECa9yxT; arc=pass (i=1 spf=pass spfdomain=ite.com.tw dkim=pass dkdomain=ite.com.tw dmarc=pass fromdomain=ite.com.tw); spf=pass (google.com: domain of linux-kernel+bounces-93229-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93229-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ite.com.tw Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id BE115280E42 for ; Wed, 6 Mar 2024 02:11:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2A6C4DF4D; Wed, 6 Mar 2024 02:11:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ite.com.tw header.i=@ite.com.tw header.b="iECa9yxT" Received: from ironport.ite.com.tw (60-251-196-230.hinet-ip.hinet.net [60.251.196.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6F4E79DE for ; Wed, 6 Mar 2024 02:10:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=60.251.196.230 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709691060; cv=none; b=aMZtuxkXPzfRsb8SI2a/9zz27IJ/k38yFgWNRYOEA/JsDZcqU0QbbgE/oNixLMXaYDXYPmRTBtoWohVVRh1hpcRUdiD5BkcStqA86csc6TGJvBft8/kabGUNlv8J3lSleBiV57SWTkraDMFN2727onoy94pkjmlNZ64z/s4BcZU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709691060; c=relaxed/simple; bh=m0JFzhbCYRltGtekfKUn6fpcNdUzP/Wm9UQTmk0KYGU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FPzQyQQXh+mr4DBb/ualpmINX8sE29ZZ5OmnlQVckALMggFjRmDJbYn1PXcR7ehSNWaxhe3x/YGHGzBJcVM6iqxzJZMhGP36DqPJ8DOKZtz+7PbjMhVZ56tlZ6hQe4dbb9EdQtj24BFKGJDcRTlJeTFWJ+HfOT0JPWOFam0914k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ite.com.tw; spf=pass smtp.mailfrom=ite.com.tw; dkim=pass (2048-bit key) header.d=ite.com.tw header.i=@ite.com.tw header.b=iECa9yxT; arc=none smtp.client-ip=60.251.196.230 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ite.com.tw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ite.com.tw DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ite.com.tw; s=dkim; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZGM4CTvY0+d25ts8P1XACik2JTlfRT4G4KiIsDIO+0o=; b=iECa9yxTcR1CiuFx2MY4zxPYso0/S4KmXwNCr6EKMQx04aGuMw/DCCza NPJYV3VSMKhWqqHf4DgAXGzi9jOJC4SO2aepsnjqADzNX6+lJ6kxE7TiR k/JXkJKdWiAoqv2KSh3pT6YYONKVWlfsT/1EHXK23ofBY7XHRZUxLosCt dj0M7fzh9lODhDm/3jufe1JSHtt4LfKsPfuLxIWClwpVOw5k/GeU4K+Hr hmqwt3lCXcggeBR1gnP9jpDmzn2KH46Hq6L7YGW3cEjo85IApyrfa/VLt cpyj1dBbpJ1tbGc3HvN0JK0DyGttrbyEuT6QHfb5jyNHCDCbtHQ59i8dR A==; Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 06 Mar 2024 10:09:45 +0800 Received: from CSBMAIL1.internal.ite.com.tw (CSBMAIL1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 42629eri035636; Wed, 6 Mar 2024 10:09:40 +0800 (GMT-8) (envelope-from kuro.chung@ite.com.tw) Received: from ite-XPS-13-9360.internal.ite.com.tw (192.168.72.42) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Wed, 6 Mar 2024 10:09:40 +0800 From: kuro To: CC: Allen Chen , Pin-yen Lin , Kuro Chung , Kenneth Haung , Allen Chen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , "open list:DRM DRIVERS" , open list Subject: [PATCH v3 1/1] UPSTREAM: drm/bridge: it6505: fix hibernate to resume no display issue Date: Wed, 6 Mar 2024 10:20:03 +0800 Message-ID: <20240306022003.259245-2-kuro.chung@ite.com.tw> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240306022003.259245-1-kuro.chung@ite.com.tw> References: <20240306022003.259245-1-kuro.chung@ite.com.tw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: CSBMAIL1.internal.ite.com.tw (192.168.65.58) To CSBMAIL1.internal.ite.com.tw (192.168.65.58) X-TM-SNTS-SMTP: AB1182823ED4183B2573C8A499561AD63DC9946A6777A5F025F3089B587BDBE82002:8 X-MAIL:mse.ite.com.tw 42629eri035636 From: kuro chung ITE added a FIFO reset bit for input video. When system power resume, the TTL input of it6505 may get some noise before video signal stable and the hardware function reset is required. But the input FIFO reset will also trigger error interrupts of output module rising. Thus, it6505 have to wait a period can clear those expected error interrupts caused by manual hardware reset in one interrupt handler calling to avoid interrupt looping. Signed-off-by: Allen Chen --- drivers/gpu/drm/bridge/ite-it6505.c | 54 ++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c index b53da9bb65a16..e592e14a48578 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -1318,6 +1318,8 @@ static void it6505_video_reset(struct it6505 *it6505) it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_VID_MUTE, EN_VID_MUTE); it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_VID_CTRL_PKT, 0x00); it6505_set_bits(it6505, REG_RESET_CTRL, VIDEO_RESET, VIDEO_RESET); + it6505_set_bits(it6505, REG_VID_BUS_CTRL1, TX_FIFO_RESET, 0x02); + it6505_set_bits(it6505, REG_VID_BUS_CTRL1, TX_FIFO_RESET, 0x00); it6505_set_bits(it6505, REG_501_FIFO_CTRL, RST_501_FIFO, RST_501_FIFO); it6505_set_bits(it6505, REG_501_FIFO_CTRL, RST_501_FIFO, 0x00); it6505_set_bits(it6505, REG_RESET_CTRL, VIDEO_RESET, 0x00); @@ -2480,10 +2482,6 @@ static void it6505_irq_video_fifo_error(struct it6505 *it6505) struct device *dev = &it6505->client->dev; DRM_DEV_DEBUG_DRIVER(dev, "video fifo overflow interrupt"); - it6505->auto_train_retry = AUTO_TRAIN_RETRY; - flush_work(&it6505->link_works); - it6505_stop_hdcp(it6505); - it6505_video_reset(it6505); } static void it6505_irq_io_latch_fifo_overflow(struct it6505 *it6505) @@ -2491,10 +2489,6 @@ static void it6505_irq_io_latch_fifo_overflow(struct it6505 *it6505) struct device *dev = &it6505->client->dev; DRM_DEV_DEBUG_DRIVER(dev, "IO latch fifo overflow interrupt"); - it6505->auto_train_retry = AUTO_TRAIN_RETRY; - flush_work(&it6505->link_works); - it6505_stop_hdcp(it6505); - it6505_video_reset(it6505); } static bool it6505_test_bit(unsigned int bit, const unsigned int *addr) @@ -2502,6 +2496,46 @@ static bool it6505_test_bit(unsigned int bit, const unsigned int *addr) return 1 & (addr[bit / BITS_PER_BYTE] >> (bit % BITS_PER_BYTE)); } +static bool it6505_is_video_error_int(const int *int_status) +{ + if ((it6505_test_bit(BIT_INT_VID_FIFO_ERROR, (unsigned int *)int_status)) || (it6505_test_bit(BIT_INT_IO_FIFO_OVERFLOW, (unsigned int *)int_status))) + return 1; + return 0; +} + +static void it6505_irq_video_error_handler(struct it6505 *it6505) +{ + struct device *dev = &it6505->client->dev; + int int_status[3] = {0}; + int reg_0d; + int i; + + it6505->auto_train_retry = AUTO_TRAIN_RETRY; + flush_work(&it6505->link_works); + it6505_stop_hdcp(it6505); + it6505_video_reset(it6505); + + DRM_DEV_DEBUG_DRIVER(dev, "Video Error reset wait video..."); + + for (i = 0; i < 10; i++) { + usleep_range(10000, 11000); + int_status[2] = it6505_read(it6505, INT_STATUS_03); + reg_0d = it6505_read(it6505, REG_SYSTEM_STS); + it6505_write(it6505, INT_STATUS_03, int_status[2]); + + DRM_DEV_DEBUG_DRIVER(dev, "reg08 = 0x%02x", int_status[2]); + DRM_DEV_DEBUG_DRIVER(dev, "reg0D = 0x%02x", reg_0d); + + if ((reg_0d & VIDEO_STB) && (reg_0d >= 0)) + break; + + if (it6505_is_video_error_int(int_status)) { + it6505_video_reset(it6505); + DRM_DEV_DEBUG_DRIVER(dev, "Video Error reset wait video (%d)", i); + } + } +} + static irqreturn_t it6505_int_threaded_handler(int unused, void *data) { struct it6505 *it6505 = data; @@ -2522,7 +2556,7 @@ static irqreturn_t it6505_int_threaded_handler(int unused, void *data) { BIT_INT_VID_FIFO_ERROR, it6505_irq_video_fifo_error }, { BIT_INT_IO_FIFO_OVERFLOW, it6505_irq_io_latch_fifo_overflow }, }; - int int_status[3], i; + int int_status[3], i, reg_0d; if (it6505->enable_drv_hold || !it6505->powered) return IRQ_HANDLED; @@ -2550,6 +2584,8 @@ static irqreturn_t it6505_int_threaded_handler(int unused, void *data) if (it6505_test_bit(irq_vec[i].bit, (unsigned int *)int_status)) irq_vec[i].handler(it6505); } + if (it6505_is_video_error_int(int_status)) + it6505_irq_video_error_handler(it6505); } pm_runtime_put_sync(dev); -- 2.25.1