From patchwork Mon Aug 21 18:13:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alper Nebi Yasak X-Patchwork-Id: 1823728 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=O8Ysp3TH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RV0ws33x9z1ygv for ; Tue, 22 Aug 2023 04:14:05 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 93F3887055; Mon, 21 Aug 2023 20:13:55 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="O8Ysp3TH"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E0EA78705F; Mon, 21 Aug 2023 20:13:54 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C6AC487063 for ; Mon, 21 Aug 2023 20:13:50 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-3fee06efd6bso14409725e9.0 for ; Mon, 21 Aug 2023 11:13:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692641630; x=1693246430; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=USpTnyEhp5Tl6xPCurlpu/0fZemT5ZyzMGpO5ZhQRNI=; b=O8Ysp3THirvzIAuBOTZ3ZQEFRseM2+7s/ZYYojZxsbun+/a5LXe5p9AWrJsLYn7YxT ElIel0GjILaU1QkCLPvswAIBCgcG122/D9nHcsq9N8t9lGF+QxC5YgowP1qV/AJdJsce k7kFria0vgu6hTwIYPZcFulH44Q+ew+fU4G06V29B9J6pEAFVQuKp956SSmUPv7IdTaQ fUFODZylo1B6pZjWnVjzcXUdt9FEDcWUvvfxJJI1ACUMd4uWCUZMdxzw+Sd0jh4Tu5eF uozF2Hs6TCOMwAnxepqxtJCkV885YyVVQx3Xhahl1Yo2d9i0e2GFgy5Ue0FrCAif185o 8I5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692641630; x=1693246430; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=USpTnyEhp5Tl6xPCurlpu/0fZemT5ZyzMGpO5ZhQRNI=; b=jC/uq+qiDiJ9hqoRuC10I8pYn+Y+H/a29A1e3OR3fe9nA1YTlcAp+tqJVfEGAuJkoP D31DyWTqCSfrfT/eRj33XWXpVkk3eMyEwZgB+ka1x1j6/hOB0GCf5AqwV/BBlbI6FoPX iREHVWV+oKXDS59gMYDCwrSPYCKKi2IJM5yHtSrKo0lv94P62NFA3QsJ3IGNn6xg0HS9 bqQP+cd7a6a8gIyRlc/sPQ5fcRUf9riTwhm7TqWKac6bATWomIzmAsRQSAM/xEn+93OF z36ezq00nYB4onmcB3v940DmYG8ohdQoc0R1AuKRpxttY4MIHwAOrd9Z0gMzB/F8eK4r Oh7w== X-Gm-Message-State: AOJu0YzKH6Kk5TmwILcZFk1cw13+R/kt6j+ucWIE1PsUo6sV443tenaf 5OlcFfP+zBtg7iWHD6e25NuWkX/eRa8= X-Google-Smtp-Source: AGHT+IE+zsQ+e4srZyFS17O8x00No0362RFtgzyvwciIkKOUgJgzQW/XCGgXVNVEzdcYV25b6AnaWA== X-Received: by 2002:adf:f752:0:b0:319:6b14:555c with SMTP id z18-20020adff752000000b003196b14555cmr5084023wrp.3.1692641630227; Mon, 21 Aug 2023 11:13:50 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id z1-20020adfd0c1000000b003143c9beeaesm13192025wrh.44.2023.08.21.11.13.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Aug 2023 11:13:49 -0700 (PDT) From: Alper Nebi Yasak To: u-boot@lists.denx.de Cc: Heinrich Schuchardt , Simon Glass , Anatolij Gustschin , Alper Nebi Yasak Subject: [PATCH 1/5] sandbox: video: Display copy framebuffer if enabled Date: Mon, 21 Aug 2023 21:13:35 +0300 Message-Id: <20230821181339.4135800-2-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230821181339.4135800-1-alpernebiyasak@gmail.com> References: <20230821181339.4135800-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean When VIDEO_COPY is enabled, the "main" framebuffer is a cached work area in U-Boot allocated memory and the "copy" framebuffer is the hardware frame buffer displayed on the screen. The sandbox SDL video driver sets copy_base to indicate support for this, but it displays the work area instead. Change it to display the copy buffer if enabled. Signed-off-by: Alper Nebi Yasak Reviewed-by: Simon Glass --- drivers/video/video-uclass.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 3f9ddaadd15d..7cec6362570f 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -454,9 +454,13 @@ int video_sync(struct udevice *vid, bool force) #if defined(CONFIG_VIDEO_SANDBOX_SDL) static ulong last_sync; + void *fb = priv->fb; + + if (IS_ENABLED(CONFIG_VIDEO_COPY)) + fb = priv->copy_fb; if (force || get_timer(last_sync) > 100) { - sandbox_sdl_sync(priv->fb); + sandbox_sdl_sync(fb); last_sync = get_timer(0); } #endif From patchwork Mon Aug 21 18:13:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alper Nebi Yasak X-Patchwork-Id: 1823729 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=GJ5Mk5VZ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RV0x207qJz1yNm for ; Tue, 22 Aug 2023 04:14:14 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D8FF287072; Mon, 21 Aug 2023 20:13:57 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GJ5Mk5VZ"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id D040F8705D; Mon, 21 Aug 2023 20:13:55 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1F20786802 for ; Mon, 21 Aug 2023 20:13:53 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-3fbd33a57b6so34828245e9.2 for ; Mon, 21 Aug 2023 11:13:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692641632; x=1693246432; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UESOwfDyr2zxOdqADMaJvgSddFJtVF9j7tTGno2uk7E=; b=GJ5Mk5VZbzT5/kpC4CRPsb9fUuj7MtlL/udxWgTPg7MC1cW0LjXsWDhP3bJbtgF/7x fc8QJSrqWqPyD6N+oL1uM5V+gKqhvWL8a1xIZYyDiFffGZoSNuRR9oMQeBEUN28rp8oW nIxs2tS5JW35d6cOKwdvdIS4939LVcC6IB7m3qZM/b+yX9bElZshf8u2on3jh/eiWE1V 1ufGF0lOkPuCqY4oEj0aY0FW99FIUUJJ6AMDogy2o5n57LCU/BGjC7sXW70mqENu0dH3 +xAufn0VT6lFx2JMpZ/4c2QcWR4iZI6FxDdm10nMvJHZI3DelD0xcGpYRaBqAkEVUKau zW1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692641632; x=1693246432; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UESOwfDyr2zxOdqADMaJvgSddFJtVF9j7tTGno2uk7E=; b=R61OOOZGExKC+YU0MeLZcgd6J7aTTshJwsuQ5A6baV1AjP6dTP8KyH3dqcIoPGgMEr AjANeyJLwzVbZ7smIg91tUYNs2ReduMahl8CybDr6p4AlON7pgFLvrEwagU/0/LggmYh 6Bz6+bFWyPqO+g1I33y/Uouu1dyuqEVisK94kryGBn5x3PA4Yru3a752+GwpQvIeYQmu irzbsBnC0SG2ej0yxqVLjhr+uf84Gg3Yo7km93vQ5PqDelfLPL5yNCCh59sr9GzVpZvI l1gtNnxLHUrAdzGrPYv0GrLyphMjl+BN/24PI5LOOfQXR7CvZTPNYvDKnwjsEQbXbBRu mFTg== X-Gm-Message-State: AOJu0YwSdfqU22O0D8MFyqls2Ff3QpRlf+HJnaZsKsV2htOcbSdWYxZ/ RfYCL4LwhqWyadibIOgc0wFVGyJkAGk= X-Google-Smtp-Source: AGHT+IFmExRt5+n5FmCNSFJpPQNGHtAcaRWPDDxUiQHfjH+EPcowYTbDu/m5rWgrjO4lKN3FVV2Pqg== X-Received: by 2002:adf:f287:0:b0:315:9993:1caa with SMTP id k7-20020adff287000000b0031599931caamr5516499wro.12.1692641631913; Mon, 21 Aug 2023 11:13:51 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id z1-20020adfd0c1000000b003143c9beeaesm13192025wrh.44.2023.08.21.11.13.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Aug 2023 11:13:51 -0700 (PDT) From: Alper Nebi Yasak To: u-boot@lists.denx.de Cc: Heinrich Schuchardt , Simon Glass , Anatolij Gustschin , Alper Nebi Yasak Subject: [PATCH 2/5] video: Allow deferring and retrying driver-specific video sync Date: Mon, 21 Aug 2023 21:13:36 +0300 Message-Id: <20230821181339.4135800-3-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230821181339.4135800-1-alpernebiyasak@gmail.com> References: <20230821181339.4135800-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean The sandbox SDL driver has some code in the video uclass to rate limit video syncs by postponing them, and forcing a sync nonetheless with a "force" argument. Add infrastructure for doing this through driver ops, where the driver can request to defer a sync with -EAGAIN, and the uclass can force it by calling the op again it until it does something. Signed-off-by: Alper Nebi Yasak --- Alternatively, add "force" argument into the driver ops->video_sync(). But I think it should go away instead. The problem is video_sync() being called irregularly and too frequently, maybe we can call it only from cyclic at the hardware refresh rate? drivers/video/video-uclass.c | 2 ++ include/video.h | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 7cec6362570f..accf486509cb 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -446,6 +446,8 @@ int video_sync(struct udevice *vid, bool force) if (ops && ops->video_sync) { ret = ops->video_sync(vid); + while (force && ret == -EAGAIN) + ret = ops->video_sync(vid); if (ret) return ret; } diff --git a/include/video.h b/include/video.h index 42e57b44188d..5c4327d4e455 100644 --- a/include/video.h +++ b/include/video.h @@ -137,7 +137,8 @@ struct video_priv { * displays needs synchronization when data in an FB is available. * For these devices implement video_sync hook to call a sync * function. vid is pointer to video device udevice. Function - * should return 0 on success video_sync and error code otherwise + * should return 0 on success video_sync, -EAGAIN if it was + * deferred and should be tried again, and error code otherwise */ struct video_ops { int (*video_sync)(struct udevice *vid); From patchwork Mon Aug 21 18:13:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alper Nebi Yasak X-Patchwork-Id: 1823730 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=q/7CWjBO; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RV0xC4YK4z1yNm for ; Tue, 22 Aug 2023 04:14:23 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 265DC87060; Mon, 21 Aug 2023 20:14:00 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="q/7CWjBO"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 79DAF87061; Mon, 21 Aug 2023 20:13:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 083B987072 for ; Mon, 21 Aug 2023 20:13:54 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3159d5e409dso2987161f8f.0 for ; Mon, 21 Aug 2023 11:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692641633; x=1693246433; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SkTXwqxYdD+/DRD6BfjtRhFPLw2dDR7Jl/iLhlBHKn4=; b=q/7CWjBOCJDvAA4PnfircCAH0sg0zW1agzeJ6jZYJoYGZcBOQzsCzAq5ra9SuNKYUT ZwMA6GYatNayob6Uu+aC8YZOL6OHrpGhD0y9TmlwQiA4WCepJF8XdQKQeNu+fgNX7iqR 6Z2KsTpN4j9Hczdmv6Phi5tA/ia2mbtf2V8nD+RdzpefSHg9OBQzg0LMSjKCcHKbeEgj 02Aly/ZC6LUywpkRAH6Eq+gXyr1B/zG9Ug+zFy3Nda9MIGIT1FKoh2a4uKsF934U/PtE qcdCV4MqNH8/yLzo17sRiJ1mFbcENmiaR5oYyAy1iFG68RVvPhFt4rPWWT7v375Rg6MN E53Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692641633; x=1693246433; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SkTXwqxYdD+/DRD6BfjtRhFPLw2dDR7Jl/iLhlBHKn4=; b=axvzQ1gXiSr27ei4W1x5zcTe7MjoVnrluFz49pxym98sPkPLhuuCtRr55lUzRvzjNu ZQ6MEnx8FZ2Af8D2jVtr7QkAuqO9b7+GGSdtyGtenYs7r5UnaTvIg4tI16svrsUQnZyU S2DP6wqz8L9jlKc0ICouQeWjfcEcDlQieU2/5lDqNzYhYIMRIuR9xQbebCjsFlU2zEPj uuSzrXEgbDq/oWZnp5RbGkAsGo5ojdtHB1lf2lOFmUwwSo6DaajYodjd3iegxKKswFnN qrTD2Zt0WKQbZtwosEj84yanHfwaEuy3jAEZR9umJUR+j+Jp3R4Rzb0kWB/mqDz5vgmd F0lw== X-Gm-Message-State: AOJu0Yx5NfVNSO244bfwM4D4TwSiEJBoJypUthurFuUfK9rmO4ZT0mEG o/JdkDq6G92n6ECEL2Lv5jJnDm1Zk7A= X-Google-Smtp-Source: AGHT+IER78GBY/qoofaegk1Vrfr4Nx2s+c8tshL5UJHbj4pDcToPEN5s5wVmlwJ4zw49bY9tvcP+lw== X-Received: by 2002:adf:e5c1:0:b0:314:3e96:bd7e with SMTP id a1-20020adfe5c1000000b003143e96bd7emr5323968wrn.4.1692641633450; Mon, 21 Aug 2023 11:13:53 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id z1-20020adfd0c1000000b003143c9beeaesm13192025wrh.44.2023.08.21.11.13.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Aug 2023 11:13:53 -0700 (PDT) From: Alper Nebi Yasak To: u-boot@lists.denx.de Cc: Heinrich Schuchardt , Simon Glass , Anatolij Gustschin , Alper Nebi Yasak Subject: [PATCH 3/5] sandbox: video: Move sync rate limit into SDL code Date: Mon, 21 Aug 2023 21:13:37 +0300 Message-Id: <20230821181339.4135800-4-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230821181339.4135800-1-alpernebiyasak@gmail.com> References: <20230821181339.4135800-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean As a first step of removing sandbox-specific code from the video uclass, move the sync rate limiter into the SDL code. We lose the ability to immediately force a screen refresh, but can retry until it does. Signed-off-by: Alper Nebi Yasak --- arch/sandbox/cpu/sdl.c | 9 +++++++++ arch/sandbox/include/asm/sdl.h | 4 +++- drivers/video/video-uclass.c | 8 +++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c index 590e406517bf..48fae20b4c2d 100644 --- a/arch/sandbox/cpu/sdl.c +++ b/arch/sandbox/cpu/sdl.c @@ -48,6 +48,7 @@ struct buf_info { * @screen: SDL window to use * @src_depth: Number of bits per pixel in the source frame buffer (that we read * from and render to SDL) + * @last_sync: Timestamp of last display update in milliseconds */ static struct sdl_info { int width; @@ -67,6 +68,7 @@ static struct sdl_info { SDL_Renderer *renderer; SDL_Window *screen; int src_depth; + int last_sync; } sdl; static void sandbox_sdl_poll_events(void) @@ -148,6 +150,7 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp, sdl.vis_width = sdl.width; sdl.vis_height = sdl.height; } + sdl.last_sync = 0; if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) printf("Unable to init hinting: %s", SDL_GetError()); @@ -245,6 +248,10 @@ int sandbox_sdl_sync(void *lcd_base) if (!sdl.texture) return 0; + + if (SDL_GetTicks() - sdl.last_sync < 100) + return -EAGAIN; + SDL_RenderClear(sdl.renderer); ret = copy_to_texture(lcd_base); if (ret) { @@ -268,6 +275,8 @@ int sandbox_sdl_sync(void *lcd_base) SDL_RenderDrawRect(sdl.renderer, &rect); SDL_RenderPresent(sdl.renderer); + sdl.last_sync = SDL_GetTicks(); + sandbox_sdl_poll_events(); return 0; diff --git a/arch/sandbox/include/asm/sdl.h b/arch/sandbox/include/asm/sdl.h index ee4991f7c24a..1ace7d1a1217 100644 --- a/arch/sandbox/include/asm/sdl.h +++ b/arch/sandbox/include/asm/sdl.h @@ -37,10 +37,12 @@ int sandbox_sdl_remove_display(void); * sandbox_sdl_sync() - Sync current U-Boot LCD frame buffer to SDL * * This must be called periodically to update the screen for SDL so that the - * user can see it. + * user can see it. It is internally rate limited to 10 Hz to avoid using + * system resources too much. * * @lcd_base: Base of frame buffer * Return: 0 if screen was updated, -ENODEV is there is no screen. + * -EAGAIN if screen was not updated due to sync rate limit. */ int sandbox_sdl_sync(void *lcd_base); diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index accf486509cb..d867185da539 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -455,16 +455,14 @@ int video_sync(struct udevice *vid, bool force) video_flush_dcache(vid); #if defined(CONFIG_VIDEO_SANDBOX_SDL) - static ulong last_sync; void *fb = priv->fb; if (IS_ENABLED(CONFIG_VIDEO_COPY)) fb = priv->copy_fb; - if (force || get_timer(last_sync) > 100) { - sandbox_sdl_sync(fb); - last_sync = get_timer(0); - } + ret = sandbox_sdl_sync(fb); + while (force && ret == -EAGAIN) + ret = sandbox_sdl_sync(fb); #endif if (IS_ENABLED(CONFIG_VIDEO_DAMAGE)) { From patchwork Mon Aug 21 18:13:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alper Nebi Yasak X-Patchwork-Id: 1823731 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=hEbjbNpc; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RV0xP3mtyz1yNm for ; Tue, 22 Aug 2023 04:14:33 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6CE308705F; Mon, 21 Aug 2023 20:14:00 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hEbjbNpc"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2F0AC8707C; Mon, 21 Aug 2023 20:13:58 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 8AC5E8700F for ; Mon, 21 Aug 2023 20:13:55 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-31768ce2e81so3297771f8f.1 for ; Mon, 21 Aug 2023 11:13:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692641635; x=1693246435; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=E9PD0IEAv+I/k7btdDOBwttUa6zTCBandZoPoxHEZgQ=; b=hEbjbNpckDyQ+zuLLJ7yP0llE7JpIjeAEBP1LgTetc4gOz1d5vy1rXBE0Zek5jeWQ8 vQ82AHIikqZ6dD+RHIdFNvxZrdQHhcz1MqRNEZRyEpdXK4Dj7GALVuNQMNgnB9uyhCqM njuNvkbpIPIF2mzwIm/OB8QmZD/j5BQzRxvJ7FRaYib5gWKYV7vp6v/E2V2O4N6/h7q4 6HB0Sa2+dVRPr5cwCK23w5R+7u6ozeCDiDPVOonqnskYritYVZ2NUw8tS2tamldxaiqh P44AOiYLqRPhHta9VmYvLzBzY28/7RPjzJa8AKHUF/7BDdxHh6B5UPzdh+Wx/biHOldW tJqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692641635; x=1693246435; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E9PD0IEAv+I/k7btdDOBwttUa6zTCBandZoPoxHEZgQ=; b=JQYAyFI9oOFHGn5eZoKp7mElsYzJUyaov+DMG/symtU5wsl2cIGnR2AY++ZTsx8arj S5tFNv/WdTOvg8O27d1MXHgE67kOe4/8sakPz+At7ozl2wfjQ+Fhj9z1XE+JQdSUuVVF PSLLFT7q7387VjeanseJmIxiZwUQB6tJwf7OrGNuOnzXSNLa6LWhjny+ITwak7EAqjw6 8jdh6RiZJFrQGi+gyU1p4ZO7LWxQDTMQbDCvDVHlAvoAFfxl/7v7lu9CgIcjcG19TLtE fv79vQL8JH8iCxysBpGMjfFsxgqNaoLb2LwjBGpQ36MIfva1oPK9+ZMXumBA18vgZPpT t20g== X-Gm-Message-State: AOJu0YzyLU/QJuU/wYMB+tXeyn/zWd8W8p2D8CZ+JrWvNiW3HGATakxA zrQvJxVwdILUgNRVXgI0Fm4Mh07G+eM= X-Google-Smtp-Source: AGHT+IGqw7QLkiKYydDmZG7mXzaV84Nue32NQqx/rhgky7LElF8NIjbj2WQCSKy5WnfZefd+dedMWA== X-Received: by 2002:adf:f8c5:0:b0:31a:d54c:f002 with SMTP id f5-20020adff8c5000000b0031ad54cf002mr5182448wrq.19.1692641635004; Mon, 21 Aug 2023 11:13:55 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id z1-20020adfd0c1000000b003143c9beeaesm13192025wrh.44.2023.08.21.11.13.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Aug 2023 11:13:54 -0700 (PDT) From: Alper Nebi Yasak To: u-boot@lists.denx.de Cc: Heinrich Schuchardt , Simon Glass , Anatolij Gustschin , Alper Nebi Yasak Subject: [PATCH 4/5] sandbox: video: Move sandbox video sync to a driver operation Date: Mon, 21 Aug 2023 21:13:38 +0300 Message-Id: <20230821181339.4135800-5-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230821181339.4135800-1-alpernebiyasak@gmail.com> References: <20230821181339.4135800-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean The sandbox SDL video sync is handled in the uclass because there has been a sync rate limiter and a way to bypass that. Previous patches move the rate limit code into SDL-specific files, and provide a generic way to defer and force video syncs. Sandbox code shouldn't be in the uclasses if possible. Move the remaining sandbox sync call into the driver ops. Now that sandbox video sync attempts can defer without resetting video damage, force a video sync before checking that video syncs reset video damage. Signed-off-by: Alper Nebi Yasak Reviewed-by: Simon Glass --- drivers/video/sandbox_sdl.c | 16 ++++++++++++++++ drivers/video/video-uclass.c | 14 -------------- test/dm/video.c | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c index 9081c7da62e4..7dc2787a5d25 100644 --- a/drivers/video/sandbox_sdl.c +++ b/drivers/video/sandbox_sdl.c @@ -99,6 +99,17 @@ int sandbox_sdl_set_bpp(struct udevice *dev, enum video_log2_bpp l2bpp) return 0; } +static int sandbox_sdl_video_sync(struct udevice *dev) +{ + struct video_priv *priv = dev_get_uclass_priv(dev); + void *fb = priv->fb; + + if (IS_ENABLED(CONFIG_VIDEO_COPY)) + fb = priv->copy_fb; + + return sandbox_sdl_sync(fb); +} + static int sandbox_sdl_remove(struct udevice *dev) { /* @@ -133,6 +144,10 @@ static const struct udevice_id sandbox_sdl_ids[] = { { } }; +static struct video_ops sandbox_sdl_ops = { + .video_sync = sandbox_sdl_video_sync, +}; + U_BOOT_DRIVER(sandbox_lcd_sdl) = { .name = "sandbox_lcd_sdl", .id = UCLASS_VIDEO, @@ -141,4 +156,5 @@ U_BOOT_DRIVER(sandbox_lcd_sdl) = { .probe = sandbox_sdl_probe, .remove = sandbox_sdl_remove, .plat_auto = sizeof(struct sandbox_sdl_plat), + .ops = &sandbox_sdl_ops, }; diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index d867185da539..2632216c05ae 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -23,9 +23,6 @@ #include #include #include -#ifdef CONFIG_SANDBOX -#include -#endif /* * Theory of operation: @@ -454,17 +451,6 @@ int video_sync(struct udevice *vid, bool force) video_flush_dcache(vid); -#if defined(CONFIG_VIDEO_SANDBOX_SDL) - void *fb = priv->fb; - - if (IS_ENABLED(CONFIG_VIDEO_COPY)) - fb = priv->copy_fb; - - ret = sandbox_sdl_sync(fb); - while (force && ret == -EAGAIN) - ret = sandbox_sdl_sync(fb); -#endif - if (IS_ENABLED(CONFIG_VIDEO_DAMAGE)) { priv->damage.xstart = priv->xsize; priv->damage.ystart = priv->ysize; diff --git a/test/dm/video.c b/test/dm/video.c index 4c3bcd26e94f..487e4d4a73a2 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -756,7 +756,7 @@ static int dm_test_video_damage(struct unit_test_state *uts) ut_asserteq(1280, priv->damage.xend); ut_asserteq(510, priv->damage.yend); - video_sync(dev, false); + video_sync(dev, true); ut_asserteq(priv->xsize, priv->damage.xstart); ut_asserteq(priv->ysize, priv->damage.ystart); ut_asserteq(0, priv->damage.xend); From patchwork Mon Aug 21 18:13:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alper Nebi Yasak X-Patchwork-Id: 1823732 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=CiDre5Uz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RV0xb3M75z1yg0 for ; Tue, 22 Aug 2023 04:14:43 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BA7758705D; Mon, 21 Aug 2023 20:14:02 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CiDre5Uz"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6C76386F7A; Mon, 21 Aug 2023 20:14:00 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 31E3E8705F for ; Mon, 21 Aug 2023 20:13:57 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-3fe8242fc4dso36292225e9.1 for ; Mon, 21 Aug 2023 11:13:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692641636; x=1693246436; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g41reL+MuagRh2sR3CbYPQP43TJsuuxN6qaXC7xWmPY=; b=CiDre5UzPPG53zK3pgGTi+YIaRhpfFi2e85WfeCVEdKv+KF7vW26jIZJFZ+DOKKlTw mhSN5O9nQp3BpbinAToBDFYAYLpmQ16JWEdP3EcfVR1UiiD8hEMkLy22vW8Rz/9PwCl5 8mVJGDLmyOcTKtV+xENoGNCU5nZth9uVPIxBK8FU7hXMk8rhp1Zye21IZIe6FYi31Twb R0iz9IuR7PgpVPLVYDBBFiUFCpvA9ubVrIrtf0JTTiFEOttkW9qcfa2YEOYGMsfaYbiY sSSDYdolrQL28C5TTbeOQcBZvukXfpYJkFj7pYt63XmfvYIjmQqkCKxlAeGAcnqMdJ+w VQiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692641636; x=1693246436; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g41reL+MuagRh2sR3CbYPQP43TJsuuxN6qaXC7xWmPY=; b=iySanZ0rviX55Ph23GT45IQ/FLi1kgtlv7GLTMr5xgqtcZAw0sGofCs+gFIOxHeBac sB8HTgYpOcGsJ/XDGJVHZIsJHT17NRrhy2pTCODdlm5UnVCNw4qbPxRVGKCu+woz9L8R Dkfbh/U0wJaYaHI/JVuaNUG0p6PqARRdDsbM6A3ikB837RlTHNAwnmkX4Q07yOcwXvM7 94OdI8GEID/dKNznKJ4P93Pk6wIe0W+nha3COTm9CXETOzYVxxhZRWzs3XTxGCeUPMck tNpaHxw9PGHMaOHzCYG5vW5QmqIVOfN9083P7OMCBY6q7DY6W63YeqeMQCRqHOL0VuLE 7V8g== X-Gm-Message-State: AOJu0Yw/zaX/gpuKSRWSLK7SV+4+pEG5LqEa4OI/kN+oOabZ+DcQxV57 ufAJhtcViq5/aw5vKYgQfMHjsOv1U9g= X-Google-Smtp-Source: AGHT+IEdn39UUI7afYXzpw+9rktaGHYD87BuYpECpzL2n2qYJhjn7DuPLB9V8sqRQJoPKNbUZF/2Rw== X-Received: by 2002:adf:e608:0:b0:316:f3cf:6f12 with SMTP id p8-20020adfe608000000b00316f3cf6f12mr5298976wrm.48.1692641636585; Mon, 21 Aug 2023 11:13:56 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id z1-20020adfd0c1000000b003143c9beeaesm13192025wrh.44.2023.08.21.11.13.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Aug 2023 11:13:56 -0700 (PDT) From: Alper Nebi Yasak To: u-boot@lists.denx.de Cc: Heinrich Schuchardt , Simon Glass , Anatolij Gustschin , Alper Nebi Yasak Subject: [RFC PATCH 5/5] sandbox: video: Use partial updates for SDL display Date: Mon, 21 Aug 2023 21:13:39 +0300 Message-Id: <20230821181339.4135800-6-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230821181339.4135800-1-alpernebiyasak@gmail.com> References: <20230821181339.4135800-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Now that we have video damage tracking, try to reduce the SDL display work by copying only the updated regions onto the SDL texture instead of the entire framebuffer. We still have to do RenderClear and RenderCopy the whole texture onto the renderer, but that allegedly happens in the GPU. Signed-off-by: Alper Nebi Yasak Reviewed-by: Simon Glass --- The second half of copy_to_texture is untested. arch/sandbox/cpu/sdl.c | 25 +++++++++++++++++-------- arch/sandbox/include/asm/sdl.h | 9 +++++++-- drivers/video/sandbox_sdl.c | 16 +++++++++++++++- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c index 48fae20b4c2d..3a3221d89066 100644 --- a/arch/sandbox/cpu/sdl.c +++ b/arch/sandbox/cpu/sdl.c @@ -192,8 +192,10 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp, return 0; } -static int copy_to_texture(void *lcd_base) +static int copy_to_texture(void *lcd_base, int xstart, int ystart, + int xend, int yend) { + struct SDL_Rect rect; char *dest; int pitch, x, y; int src_pitch; @@ -201,8 +203,15 @@ static int copy_to_texture(void *lcd_base) char *src; int ret; + rect.x = xstart; + rect.y = ystart; + rect.w = xend - xstart + 1; + rect.h = yend - ystart + 1; + if (sdl.src_depth == sdl.depth) { - SDL_UpdateTexture(sdl.texture, NULL, lcd_base, sdl.pitch); + src_pitch = sdl.width * sdl.src_depth / 8; + src = lcd_base + src_pitch * rect.y + rect.x * sdl.src_depth / 8; + SDL_UpdateTexture(sdl.texture, &rect, src, src_pitch); return 0; } @@ -215,7 +224,7 @@ static int copy_to_texture(void *lcd_base) return -EINVAL; } - ret = SDL_LockTexture(sdl.texture, NULL, &pixels, &pitch); + ret = SDL_LockTexture(sdl.texture, &rect, &pixels, &pitch); if (ret) { printf("SDL lock %d: %s\n", ret, SDL_GetError()); return ret; @@ -223,12 +232,12 @@ static int copy_to_texture(void *lcd_base) /* Copy the pixels one by one */ src_pitch = sdl.width * sdl.src_depth / 8; - for (y = 0; y < sdl.height; y++) { + for (y = 0; y < rect.h; y++) { char val; dest = pixels + y * pitch; - src = lcd_base + src_pitch * y; - for (x = 0; x < sdl.width; x++, dest += 4) { + src = lcd_base + src_pitch * (ystart + y) + xstart; + for (x = 0; x < rect.w; x++, dest += 4) { val = *src++; dest[0] = val; dest[1] = val; @@ -241,7 +250,7 @@ static int copy_to_texture(void *lcd_base) return 0; } -int sandbox_sdl_sync(void *lcd_base) +int sandbox_sdl_sync(void *lcd_base, int xstart, int ystart, int xend, int yend) { struct SDL_Rect rect; int ret; @@ -253,7 +262,7 @@ int sandbox_sdl_sync(void *lcd_base) return -EAGAIN; SDL_RenderClear(sdl.renderer); - ret = copy_to_texture(lcd_base); + ret = copy_to_texture(lcd_base, xstart, ystart, xend, yend); if (ret) { printf("copy_to_texture: %d: %s\n", ret, SDL_GetError()); return -EIO; diff --git a/arch/sandbox/include/asm/sdl.h b/arch/sandbox/include/asm/sdl.h index 1ace7d1a1217..c7c73ef3a3e6 100644 --- a/arch/sandbox/include/asm/sdl.h +++ b/arch/sandbox/include/asm/sdl.h @@ -41,10 +41,14 @@ int sandbox_sdl_remove_display(void); * system resources too much. * * @lcd_base: Base of frame buffer + * @xstart: X start position of updated region in pixels from the left + * @ystart: Y start position of updated region in pixels from the top + * @xend: X end position of updated region in pixels from the left + * @yend: Y end position of updated region in pixels from the top * Return: 0 if screen was updated, -ENODEV is there is no screen. * -EAGAIN if screen was not updated due to sync rate limit. */ -int sandbox_sdl_sync(void *lcd_base); +int sandbox_sdl_sync(void *lcd_base, int xstart, int ystart, int xend, int yend); /** * sandbox_sdl_scan_keys() - scan for pressed keys @@ -118,7 +122,8 @@ static inline int sandbox_sdl_remove_display(void) return -ENODEV; } -static inline int sandbox_sdl_sync(void *lcd_base) +static inline int sandbox_sdl_sync(void *lcd_base, int xstart, int ystart, + int xend, int yend) { return -ENODEV; } diff --git a/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c index 7dc2787a5d25..eb424072b6fe 100644 --- a/drivers/video/sandbox_sdl.c +++ b/drivers/video/sandbox_sdl.c @@ -103,11 +103,25 @@ static int sandbox_sdl_video_sync(struct udevice *dev) { struct video_priv *priv = dev_get_uclass_priv(dev); void *fb = priv->fb; + int xstart = 0; + int ystart = 0; + int xend = priv->xsize; + int yend = priv->ysize; if (IS_ENABLED(CONFIG_VIDEO_COPY)) fb = priv->copy_fb; - return sandbox_sdl_sync(fb); + if (IS_ENABLED(CONFIG_VIDEO_DAMAGE)) { + if (!priv->damage.xend && !priv->damage.yend) + return 0; + + xstart = priv->damage.xstart; + ystart = priv->damage.ystart; + xend = priv->damage.xend; + yend = priv->damage.yend; + } + + return sandbox_sdl_sync(fb, xstart, ystart, xend, yend); } static int sandbox_sdl_remove(struct udevice *dev)