From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80FA4281357 for ; Thu, 26 Feb 2026 05:13:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772082834; cv=none; b=t/H0Lya+HQXRgnGQ5/SsMXkDCZ5DO5zOg87X9idwLjGFiv/kd0LdvBiTZwXmeCK/NSYVILtaSZ3KSHz4yjWz2DPhb1dLI0hJG5db1W5UQo/7kd8CODRW9nWIutISYrlgY0g1FScCcZ1WpgAqsUq5uCIJXAYfcUiEgtsGejtmCNg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772082834; c=relaxed/simple; bh=KrNUsi+2Aycse7pYVayJOxdMVyMiyzgBb7YukhjRM1c=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=mGSg51fEtlz4V36H1+GnHptjWcugiY5gq12ZtlS6ch1sWgMHZKWmj8QusiEY042KSpbn+dtcQ2y5SF//opMHC5aIIiAr99QOvi2ZvaGrm+1HS3AALTLyhk+zH111EwsbtXrQxR2EbL7YL7uylu8wR35PiwGSZWnAa9SymOtY7i0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Fyy6k/eW; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Fyy6k/eW" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-824484dba4dso534054b3a.0 for ; Wed, 25 Feb 2026 21:13:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772082833; x=1772687633; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=/mKOurc9EHBKfVMuwdiuhgyEKIrS/i0ROAg7NG335J8=; b=Fyy6k/eW9yCJj0tULMsYjpwbhpPsSCYncCIfsCdbXkYVfrntz23r7M4qXbxQHpBEMB ElhYFvh7Dr4SdmXqktky0PSp3wIulRefoQsQkEHYL5JnZUeVH2HtZv2PIBBXWZ1RE+0s 6NZFTtEk5q0ewrnnyJKqJtuNDWTwRWpwf9N+WoROwtEab/mSIqtbfQDuS9Rvz4jbiTEF qetSNW8BRnH+KvpMTAfGYkv+PMR2noyo7FV36U96MSI5Jidv6sKEzNU0jziPK72RTQph +VMV+BRRQP/cD54W0ZFZrOO1jUXX793IZuKzxP+HsJKu1C0g1g7EpRLeZvAdrUJZOUTS FQQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772082833; x=1772687633; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/mKOurc9EHBKfVMuwdiuhgyEKIrS/i0ROAg7NG335J8=; b=gdOKhCdh0PRkMfq0O9w3/SA0hyFKRhrHfVwDgZTrc848VHQaLz7tssVEI0MYxCupxz UD60LsPMsmMUsD7XkxExHOA7EExVQHZpGTcWd9Z36/zUxEKDNNVNg0a14Ad0wUe4Im3j rMmkBbE3+KwHKPn1XPXL/vGGBcKGhxNIDlDDjWKkloYZsXI4Vw7MPfLkLr8jWhB6Z+uI xeyZ3Z6/NZeFn5SUd4VfqJznDZ9RALfHaYzWhImAraTHs/du9MNdbtGmIBHwca5itUxa 2SQWeTA71HVQmp1+uK10K6NSfwftLfSd/LRu9zO04803lSXgKAc5Ql43+IL9JBp73zCc ZoDw== X-Forwarded-Encrypted: i=1; AJvYcCXjJNuYtlRtPOH/gQ0zeO3XMCSDoMddn4gTpc+9BSNIqdDY2TsOd55Ndag3Byhg/FcghIQfzMX5jkr+1rI=@vger.kernel.org X-Gm-Message-State: AOJu0YyXQB5RXTxCzsxgnqJ8mUddJMDvH0T5F7OAUIC6+tGdvjg/36ox FT3ih1qNEw+lJbovKW7YZfTEO1ADB9ZvLKMSVLfukXk9bQ2NTqIKzi5/ X-Gm-Gg: ATEYQzzxNJXXWqTQ0o9WTducvjajW0mQqeU+u58EatZsPvGc9q/bczhVRyavczNL7Tj QBurLPJLNMGM4mQgaGbb8TVevFd8i7+KRCUapHkiAS+QpQW83nZrr9E2S9TCd+LlZRC9nwXMKZH Ftp91iBtXAXcvJotDT+ihWv+1FpbyYEnA5hjbTAdtiKclrv139hODQhn10CzRxH0zRENAsuH523 F/W7S2ZRKQY5e7zLVv9ukC8Qu8Ec02BWF3i2obb5WxsEt19/U9Thf1x/r/uA10KXaiHhg8ovSdt woCnXTkrkjnbAsbWVs9OvchZYonU/ccXzzW2GrEayoMMzEm9h1bdMQ2zDHvIsZaFGfPN5y+Kezj yidVM2XhDmJhuWn0C9FNIB5OyKdRiQ4xf8Y9YS0xkJOOI2NbogSLplEAuz6zwpuMTQnpL+8yZb3 rurNLZC8Xb0SptHw7dRaSfLXUyi/IuB9YJT6rTPC38xQudWfdO5bGFrCaRzQ== X-Received: by 2002:a05:6a00:852:b0:824:374a:140d with SMTP id d2e1a72fcca58-8273bc57a30mr1152848b3a.4.1772082832756; Wed, 25 Feb 2026 21:13:52 -0800 (PST) Received: from phuc-desktop.. ([183.91.15.56]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82739ff3667sm912196b3a.41.2026.02.25.21.13.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Feb 2026 21:13:52 -0800 (PST) From: phucduc.bui@gmail.com To: dri-devel@lists.freedesktop.org Cc: laurent.pinchart@ideasonboard.com, geert+renesas@glider.be, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, phucduc.bui@gmail.com Subject: [PATCH] drm: shmobile: Fix blank screen after resume when LCDC is stopped Date: Thu, 26 Feb 2026 12:13:38 +0700 Message-ID: <20260226051338.27460-1-phucduc.bui@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: bui duc phuc The LCDC controller on R8A7740 loses its register state during deep sleep. Upon resume, the driver's Mirror Register mechanism (MRS) fails to update active registers because the controller is stopped (DO=0). According to the datasheet (Section 38.7.1, Figure 38.13), the Two-Set Register Switching logic only triggers a change between Set A and Set B when a Frame End Interrupt occurs at the completion of a display frame. During resume, as the LCDC is stopped, no frame is processed and no Frame End pulse is generated. This leaves the Display Data Start Address (SA) pending in the standby set, while the active register (Side A) remains at 0x00000000, preventing the display engine from starting.Debug logs collected during resume confirm this behavior, showing the start address written to the standby set while the active register remains unchanged. Prime both register sets when the LCDC is stopped: If DO=0: Use lcdc_write() to force the Start Address (SA) into both Set A and Set B registers. This bypasses the switching logic and ensures the engine has a valid base address immediately upon being enabled. If DO=1: Maintain the standard Mirror mechanism and MRS toggle for normal, tear-free operation. Verified on R8A7740. Signed-off-by: bui duc phuc --- .../gpu/drm/renesas/shmobile/shmob_drm_plane.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c index 9d166ab2af8b..21fd1e19beda 100644 --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c @@ -70,6 +70,7 @@ static void shmob_drm_primary_plane_setup(struct shmob_drm_plane *splane, struct shmob_drm_plane_state *sstate = to_shmob_plane_state(state); struct shmob_drm_device *sdev = to_shmob_device(splane->base.dev); struct drm_framebuffer *fb = state->fb; + u32 ldcnt2r; /* TODO: Handle YUV colorspaces. Hardcode REC709 for now. */ lcdc_write(sdev, LDDFR, sstate->format->lddfr | LDDFR_CF1); @@ -78,11 +79,19 @@ static void shmob_drm_primary_plane_setup(struct shmob_drm_plane *splane, /* Word and long word swap. */ lcdc_write(sdev, LDDDSR, sstate->format->ldddsr); - lcdc_write_mirror(sdev, LDSA1R, sstate->dma[0]); - if (shmob_drm_format_is_yuv(sstate->format)) - lcdc_write_mirror(sdev, LDSA2R, sstate->dma[1]); + ldcnt2r = lcdc_read(sdev, LDCNT2R); + + if (ldcnt2r & LDCNT2R_DO) { + lcdc_write_mirror(sdev, LDSA1R, sstate->dma[0]); + if (shmob_drm_format_is_yuv(sstate->format)) + lcdc_write_mirror(sdev, LDSA2R, sstate->dma[1]); - lcdc_write(sdev, LDRCNTR, lcdc_read(sdev, LDRCNTR) ^ LDRCNTR_MRS); + lcdc_write(sdev, LDRCNTR, lcdc_read(sdev, LDRCNTR) ^ LDRCNTR_MRS); + } else { + lcdc_write(sdev, LDSA1R, sstate->dma[0]); + if (shmob_drm_format_is_yuv(sstate->format)) + lcdc_write_mirror(sdev, LDSA2R, sstate->dma[1]); + } } static void shmob_drm_overlay_plane_setup(struct shmob_drm_plane *splane, -- 2.43.0