summaryrefslogtreecommitdiff
path: root/config/u-boot/default
diff options
context:
space:
mode:
Diffstat (limited to 'config/u-boot/default')
-rw-r--r--config/u-boot/default/nuke.list1
-rw-r--r--config/u-boot/default/patches/0001-clk-rockchip-rk3399-Set-hardcoded-clock-rates-same-a.patch100
-rw-r--r--config/u-boot/default/patches/0002-video-improve-UEFI-experience-on-DM_VIDEO.patch246
-rw-r--r--config/u-boot/default/patches/0003-Add-video-damage-tracking.patch2399
-rw-r--r--config/u-boot/default/patches/0004-HACK-Makefile-Ignore-missing-input-files-for-binman.patch34
-rw-r--r--config/u-boot/default/patches/0005-HACK-rk3399-gru-Remove-assigned-clock-dt-properties-.patch36
-rw-r--r--config/u-boot/default/patches/0006-Support-auto-boot-timeout-delay-bootflow-menu.patch302
-rw-r--r--config/u-boot/default/patches/0007-Libreboot-branding-version-on-the-bootflow-menu.patch213
-rw-r--r--config/u-boot/default/patches/0008-u-boot-fix-build-error-on-newer-hostcc.patch50
-rw-r--r--config/u-boot/default/target.cfg4
10 files changed, 0 insertions, 3385 deletions
diff --git a/config/u-boot/default/nuke.list b/config/u-boot/default/nuke.list
deleted file mode 100644
index f3a3fcc3..00000000
--- a/config/u-boot/default/nuke.list
+++ /dev/null
@@ -1 +0,0 @@
-test/lib/strlcat.c
diff --git a/config/u-boot/default/patches/0001-clk-rockchip-rk3399-Set-hardcoded-clock-rates-same-a.patch b/config/u-boot/default/patches/0001-clk-rockchip-rk3399-Set-hardcoded-clock-rates-same-a.patch
deleted file mode 100644
index 8227b076..00000000
--- a/config/u-boot/default/patches/0001-clk-rockchip-rk3399-Set-hardcoded-clock-rates-same-a.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From ee94f55d37fc8c133faa5055184f75f99830cfdc Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Fri, 8 Oct 2021 17:33:22 +0300
-Subject: [PATCH] clk: rockchip: rk3399: Set hardcoded clock rates same as
- devicetree
-
-Update hardcoded RK3399 clock rate definitions to match those in its
-devicetree (rk3399.dtsi), based on clock-controller assigned-clocks.
-Add and initialize NPLL since it's on that list, though nothing seems to
-use it in the driver so far.
-
-Also update VOP ACLK to 400MHz as it divides from CPLL (now 800MHz).
-All this stops the displayed vendor bitmap from getting disfigured
-when chainloading U-Boot from coreboot+depthcharge (as RW_LEGACY).
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Link: https://github.com/alpernebbi/u-boot/commit/7e73b7a7550cfdd22a1413c263026e41e56e7617
----
- .../include/asm/arch-rockchip/cru_rk3399.h | 19 ++++++++++---------
- drivers/clk/rockchip/clk_rk3399.c | 10 ++++++----
- 2 files changed, 16 insertions(+), 13 deletions(-)
-
-diff --git a/arch/arm/include/asm/arch-rockchip/cru_rk3399.h b/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
-index d941a129f3e5..54035c0df1f3 100644
---- a/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
-+++ b/arch/arm/include/asm/arch-rockchip/cru_rk3399.h
-@@ -69,7 +69,8 @@ check_member(rockchip_cru, sdio1_con[1], 0x594);
- #define LPLL_HZ (600*MHz)
- #define BPLL_HZ (600*MHz)
- #define GPLL_HZ (594*MHz)
--#define CPLL_HZ (384*MHz)
-+#define CPLL_HZ (800*MHz)
-+#define NPLL_HZ (1000*MHz)
- #define PPLL_HZ (676*MHz)
-
- #define PMU_PCLK_HZ (48*MHz)
-@@ -82,16 +83,16 @@ check_member(rockchip_cru, sdio1_con[1], 0x594);
- #define ATCLK_CORE_B_HZ (300*MHz)
- #define PCLK_DBG_B_HZ (100*MHz)
-
--#define PERIHP_ACLK_HZ (148500*KHz)
--#define PERIHP_HCLK_HZ (148500*KHz)
--#define PERIHP_PCLK_HZ (37125*KHz)
-+#define PERIHP_ACLK_HZ (150*MHz)
-+#define PERIHP_HCLK_HZ (75*MHz)
-+#define PERIHP_PCLK_HZ (37500*KHz)
-
--#define PERILP0_ACLK_HZ (99000*KHz)
--#define PERILP0_HCLK_HZ (99000*KHz)
--#define PERILP0_PCLK_HZ (49500*KHz)
-+#define PERILP0_ACLK_HZ (100*MHz)
-+#define PERILP0_HCLK_HZ (100*MHz)
-+#define PERILP0_PCLK_HZ (50*MHz)
-
--#define PERILP1_HCLK_HZ (99000*KHz)
--#define PERILP1_PCLK_HZ (49500*KHz)
-+#define PERILP1_HCLK_HZ (100*MHz)
-+#define PERILP1_PCLK_HZ (50*MHz)
-
- #define PWM_CLOCK_HZ PMU_PCLK_HZ
-
-diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c
-index 6e87db18be07..1b8ffe9e794e 100644
---- a/drivers/clk/rockchip/clk_rk3399.c
-+++ b/drivers/clk/rockchip/clk_rk3399.c
-@@ -53,10 +53,11 @@ struct pll_div {
- .fbdiv = (u32)((u64)hz * _refdiv * _postdiv1 * _postdiv2 / OSC_HZ),\
- .postdiv1 = _postdiv1, .postdiv2 = _postdiv2};
-
--static const struct pll_div gpll_init_cfg = PLL_DIVISORS(GPLL_HZ, 2, 2, 1);
--static const struct pll_div cpll_init_cfg = PLL_DIVISORS(CPLL_HZ, 1, 2, 2);
-+static const struct pll_div gpll_init_cfg = PLL_DIVISORS(GPLL_HZ, 1, 4, 1);
-+static const struct pll_div cpll_init_cfg = PLL_DIVISORS(CPLL_HZ, 1, 3, 1);
-+static const struct pll_div npll_init_cfg = PLL_DIVISORS(NPLL_HZ, 1, 3, 1);
- #if !defined(CONFIG_XPL_BUILD)
--static const struct pll_div ppll_init_cfg = PLL_DIVISORS(PPLL_HZ, 2, 2, 1);
-+static const struct pll_div ppll_init_cfg = PLL_DIVISORS(PPLL_HZ, 3, 2, 1);
- #endif
-
- static const struct pll_div apll_l_1600_cfg = PLL_DIVISORS(1600 * MHz, 3, 1, 1);
-@@ -681,7 +682,7 @@ static ulong rk3399_spi_set_clk(struct rockchip_cru *cru, ulong clk_id, uint hz)
- static ulong rk3399_vop_set_clk(struct rockchip_cru *cru, ulong clk_id, u32 hz)
- {
- struct pll_div vpll_config = {0};
-- int aclk_vop = 198 * MHz;
-+ int aclk_vop = 400 * MHz;
- void *aclkreg_addr, *dclkreg_addr;
- u32 div;
-
-@@ -1394,6 +1395,7 @@ static void rkclk_init(struct rockchip_cru *cru)
- /* configure gpll cpll */
- rkclk_set_pll(&cru->gpll_con[0], &gpll_init_cfg);
- rkclk_set_pll(&cru->cpll_con[0], &cpll_init_cfg);
-+ rkclk_set_pll(&cru->npll_con[0], &npll_init_cfg);
-
- /* configure perihp aclk, hclk, pclk */
- aclk_div = GPLL_HZ / PERIHP_ACLK_HZ - 1;
---
-2.49.0
-
diff --git a/config/u-boot/default/patches/0002-video-improve-UEFI-experience-on-DM_VIDEO.patch b/config/u-boot/default/patches/0002-video-improve-UEFI-experience-on-DM_VIDEO.patch
deleted file mode 100644
index e2de311c..00000000
--- a/config/u-boot/default/patches/0002-video-improve-UEFI-experience-on-DM_VIDEO.patch
+++ /dev/null
@@ -1,246 +0,0 @@
-From 780d8ffe985441824a242e5b853721dfe14435dd Mon Sep 17 00:00:00 2001
-From: Andre Przywara <andre.przywara@arm.com>
-Date: Mon, 10 Jan 2022 00:56:31 +0000
-Subject: [PATCH 1/3] video: Add cursor support for video consoles
-
-So far the video console is completely lacking any cursor, which makes
-typing and correcting quite irritating.
-
-Add a simple cursor display by writing a SPACE glyph in the background
-colour to the next character position on the screen. Any typed character
-will naturally overwrite it, so we need to only explicitly clear it if
-the next character will appear somewhere else (newline, backspace).
-
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Tested-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/r/20220110005638.21599-2-andre.przywara@arm.com
-[Alper: Rebase for console_set_font(), reword for CONFIG_VIDEO]
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
----
- drivers/video/console_core.c | 1 +
- drivers/video/vidconsole-uclass.c | 42 +++++++++++++++++++++++++++++++
- include/video_console.h | 1 +
- 3 files changed, 44 insertions(+)
-
-diff --git a/drivers/video/console_core.c b/drivers/video/console_core.c
-index 939363653f6c..6b531718276f 100644
---- a/drivers/video/console_core.c
-+++ b/drivers/video/console_core.c
-@@ -30,6 +30,7 @@ static int console_set_font(struct udevice *dev, struct video_fontdata *fontdata
- debug("height: %d\n", fontdata->height);
-
- priv->fontdata = fontdata;
-+ vc_priv->cursor_visible = true;
- vc_priv->x_charsize = fontdata->width;
- vc_priv->y_charsize = fontdata->height;
- if (vid_priv->rot % 2) {
-diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
-index ebe96bf0c2f3..8613c464040f 100644
---- a/drivers/video/vidconsole-uclass.c
-+++ b/drivers/video/vidconsole-uclass.c
-@@ -57,6 +57,26 @@ int vidconsole_entry_start(struct udevice *dev)
- return ops->entry_start(dev);
- }
-
-+static void draw_cursor(struct udevice *dev, bool state)
-+{
-+ struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
-+ struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
-+ u32 tmp;
-+
-+ if (!priv->cursor_visible)
-+ return;
-+
-+ if (state) {
-+ tmp = vid_priv->colour_bg;
-+ vid_priv->colour_bg = vid_priv->colour_fg;
-+ }
-+
-+ vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ' ');
-+
-+ if (state)
-+ vid_priv->colour_bg = tmp;
-+}
-+
- /* Move backwards one space */
- static int vidconsole_back(struct udevice *dev)
- {
-@@ -64,6 +84,8 @@ static int vidconsole_back(struct udevice *dev)
- struct vidconsole_ops *ops = vidconsole_get_ops(dev);
- int ret;
-
-+ draw_cursor(dev, false);
-+
- if (ops->backspace) {
- ret = ops->backspace(dev);
- if (ret != -ENOSYS)
-@@ -90,6 +112,8 @@ static void vidconsole_newline(struct udevice *dev)
- const int rows = CONFIG_VAL(CONSOLE_SCROLL_LINES);
- int i, ret;
-
-+ draw_cursor(dev, false);
-+
- priv->xcur_frac = priv->xstart_frac;
- priv->ycur += priv->y_charsize;
-
-@@ -286,6 +310,14 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
-
- break;
- }
-+ case 'l':
-+ draw_cursor(dev, false);
-+ priv->cursor_visible = 0;
-+ break;
-+ case 'h':
-+ priv->cursor_visible = 1;
-+ draw_cursor(dev, true);
-+ break;
- case 'J': {
- int mode;
-
-@@ -460,6 +492,11 @@ int vidconsole_put_char(struct udevice *dev, char ch)
- struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
- int cp, ret;
-
-+ /*
-+ * We don't need to clear the cursor since we are going to overwrite
-+ * that character anyway.
-+ */
-+
- if (priv->escape) {
- vidconsole_escape_char(dev, ch);
- return 0;
-@@ -474,6 +511,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
- /* beep */
- break;
- case '\r':
-+ draw_cursor(dev, false);
- priv->xcur_frac = priv->xstart_frac;
- break;
- case '\n':
-@@ -481,6 +519,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
- vidconsole_entry_start(dev);
- break;
- case '\t': /* Tab (8 chars alignment) */
-+ draw_cursor(dev, false);
- priv->xcur_frac = ((priv->xcur_frac / priv->tab_width_frac)
- + 1) * priv->tab_width_frac;
-
-@@ -505,6 +544,8 @@ int vidconsole_put_char(struct udevice *dev, char ch)
- break;
- }
-
-+ draw_cursor(dev, true);
-+
- return 0;
- }
-
-@@ -725,6 +766,7 @@ static int vidconsole_pre_probe(struct udevice *dev)
- struct video_priv *vid_priv = dev_get_uclass_priv(vid);
-
- priv->xsize_frac = VID_TO_POS(vid_priv->xsize);
-+ priv->cursor_visible = false;
-
- return 0;
- }
-diff --git a/include/video_console.h b/include/video_console.h
-index 723d2315606d..17a9aa3f9295 100644
---- a/include/video_console.h
-+++ b/include/video_console.h
-@@ -74,6 +74,7 @@ struct vidconsole_priv {
- int escape_len;
- int row_saved;
- int col_saved;
-+ bool cursor_visible;
- char escape_buf[32];
- char utf8_buf[5];
- };
---
-2.49.0
-
-
-From b2b921d7bc69b505562cf02d1b4c6f6d4325c7d5 Mon Sep 17 00:00:00 2001
-From: Andre Przywara <andre.przywara@arm.com>
-Date: Mon, 10 Jan 2022 00:56:36 +0000
-Subject: [PATCH 2/3] efi-selftest: Add international characters test
-
-UEFI relies entirely on unicode output, which actual fonts displayed on
-the screen might not be ready for.
-
-Add a test displaying some international characters, to reveal missing
-glyphs, especially in our builtin fonts.
-This would be needed to be manually checked on the screen for
-correctness.
-
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Link: https://lore.kernel.org/r/20220110005638.21599-7-andre.przywara@arm.com
----
- lib/efi_selftest/efi_selftest_textoutput.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/lib/efi_selftest/efi_selftest_textoutput.c b/lib/efi_selftest/efi_selftest_textoutput.c
-index a3023c82567c..2f8d8d323c2b 100644
---- a/lib/efi_selftest/efi_selftest_textoutput.c
-+++ b/lib/efi_selftest/efi_selftest_textoutput.c
-@@ -154,6 +154,11 @@ static int execute(void)
- efi_st_printf("Unicode not handled properly\n");
- return EFI_ST_FAILURE;
- }
-+ ret = con_out->output_string(con_out, L"Österreich Edelweiß Smørrebrød Smörgås Niño René >Ἑλλάς<\n");
-+ if (ret != EFI_ST_SUCCESS) {
-+ efi_st_error("OutputString failed for international chars\n");
-+ return EFI_ST_FAILURE;
-+ }
- efi_st_printf("\n");
- ret = con_out->output_string(con_out, text);
- if (ret != EFI_ST_SUCCESS) {
---
-2.49.0
-
-
-From 082422499a5f2689e715df68bfd025a5cc15cc64 Mon Sep 17 00:00:00 2001
-From: Andre Przywara <andre.przywara@arm.com>
-Date: Mon, 10 Jan 2022 00:56:37 +0000
-Subject: [PATCH 3/3] efi_selftest: Add box drawing character selftest
-
-UEFI applications rely on Unicode output capability, and might use that
-for drawing pseudo-graphical interfaces using Unicode defined box
-drawing characters.
-
-Add a simple test to display the most basic box characters, which would
-need to be checked manually on the screen for correctness.
-To facilitate this, add a three second delay after the output at this
-point.
-
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Link: https://lore.kernel.org/r/20220110005638.21599-8-andre.przywara@arm.com
----
- lib/efi_selftest/efi_selftest_textoutput.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/lib/efi_selftest/efi_selftest_textoutput.c b/lib/efi_selftest/efi_selftest_textoutput.c
-index 2f8d8d323c2b..02209a5bf224 100644
---- a/lib/efi_selftest/efi_selftest_textoutput.c
-+++ b/lib/efi_selftest/efi_selftest_textoutput.c
-@@ -159,6 +159,17 @@ static int execute(void)
- efi_st_error("OutputString failed for international chars\n");
- return EFI_ST_FAILURE;
- }
-+ ret = con_out->output_string(con_out, L"┌─┬─┐\n");
-+ ret |= con_out->output_string(con_out, L"│ │ │\n");
-+ ret |= con_out->output_string(con_out, L"├─┼─┤\n");
-+ ret |= con_out->output_string(con_out, L"│ │ │\n");
-+ ret |= con_out->output_string(con_out, L"└─┴─┘\n");
-+ if (ret != EFI_ST_SUCCESS) {
-+ efi_st_error("OutputString failed for box drawing chars\n");
-+ return EFI_ST_FAILURE;
-+ }
-+ con_out->output_string(con_out, L"waiting for admiration...\n");
-+ EFI_CALL(systab.boottime->stall(3000000));
- efi_st_printf("\n");
- ret = con_out->output_string(con_out, text);
- if (ret != EFI_ST_SUCCESS) {
---
-2.49.0
-
diff --git a/config/u-boot/default/patches/0003-Add-video-damage-tracking.patch b/config/u-boot/default/patches/0003-Add-video-damage-tracking.patch
deleted file mode 100644
index 18c93ab8..00000000
--- a/config/u-boot/default/patches/0003-Add-video-damage-tracking.patch
+++ /dev/null
@@ -1,2399 +0,0 @@
-From dae1f9cafd3d2061336f5d230ebc1f236423fa0e Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Fri, 18 Aug 2023 13:31:36 +0300
-Subject: [PATCH 01/13] video: test: Split copy frame buffer check into a
- function
-
-While checking frame buffer contents, the video tests also check if the
-copy frame buffer contents match the main frame buffer. To test if only
-the modified regions are updated after a sync, we will need to create
-situations where the two are mismatched. Split this check into another
-function that we can skip calling, since we won't want it to error on
-those mismatched cases.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-2-alpernebiyasak@gmail.com/
----
- test/dm/video.c | 69 +++++++++++++++++++++++++++++++++++++++++--------
- 1 file changed, 58 insertions(+), 11 deletions(-)
-
-diff --git a/test/dm/video.c b/test/dm/video.c
-index e347c1403fda..01fa9e1b2415 100644
---- a/test/dm/video.c
-+++ b/test/dm/video.c
-@@ -54,9 +54,6 @@ DM_TEST(dm_test_video_base, UTF_SCAN_PDATA | UTF_SCAN_FDT);
- * size of the compressed data. This provides a pretty good level of
- * certainty and the resulting tests need only check a single value.
- *
-- * If the copy framebuffer is enabled, this compares it to the main framebuffer
-- * too.
-- *
- * @uts: Test state
- * @dev: Video device
- * Return: compressed size of the frame buffer, or -ve on error
-@@ -65,7 +62,6 @@ static int compress_frame_buffer(struct unit_test_state *uts,
- struct udevice *dev)
- {
- struct video_priv *priv = dev_get_uclass_priv(dev);
-- struct video_priv *uc_priv = dev_get_uclass_priv(dev);
- uint destlen;
- void *dest;
- int ret;
-@@ -81,16 +77,34 @@ static int compress_frame_buffer(struct unit_test_state *uts,
- if (ret)
- return ret;
-
-- /* Check here that the copy frame buffer is working correctly */
-- if (IS_ENABLED(CONFIG_VIDEO_COPY)) {
-- ut_assertf(!memcmp(uc_priv->fb, uc_priv->copy_fb,
-- uc_priv->fb_size),
-- "Copy framebuffer does not match fb");
-- }
--
- return destlen;
- }
-
-+/**
-+ * check_copy_frame_buffer() - Compare main frame buffer to copy
-+ *
-+ * If the copy frame buffer is enabled, this compares it to the main
-+ * frame buffer. Normally they should have the same contents after a
-+ * sync.
-+ *
-+ * @uts: Test state
-+ * @dev: Video device
-+ * Return: 0, or -ve on error
-+ */
-+static int check_copy_frame_buffer(struct unit_test_state *uts,
-+ struct udevice *dev)
-+{
-+ struct video_priv *priv = dev_get_uclass_priv(dev);
-+
-+ if (!IS_ENABLED(CONFIG_VIDEO_COPY))
-+ return 0;
-+
-+ ut_assertf(!memcmp(priv->fb, priv->copy_fb, priv->fb_size),
-+ "Copy framebuffer does not match fb");
-+
-+ return 0;
-+}
-+
- /*
- * Call this function at any point to halt and show the current display. Be
- * sure to run the test with the -l flag.
-@@ -154,24 +168,30 @@ static int dm_test_video_text(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_putc_xy(con, 0, 0, 'a');
- ut_asserteq(79, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_putc_xy(con, 0, 0, ' ');
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
- ut_asserteq(273, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_set_row(con, 0, WHITE);
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
- ut_asserteq(273, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -190,24 +210,30 @@ static int dm_test_video_text_12x22(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "12x22", 0));
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_putc_xy(con, 0, 0, 'a');
- ut_asserteq(89, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_putc_xy(con, 0, 0, ' ');
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
- ut_asserteq(363, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_set_row(con, 0, WHITE);
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
- ut_asserteq(363, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -225,6 +251,7 @@ static int dm_test_video_chars(struct unit_test_state *uts)
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
- vidconsole_put_string(con, test_string);
- ut_asserteq(466, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -246,19 +273,23 @@ static int dm_test_video_ansi(struct unit_test_state *uts)
- video_clear(con->parent);
- video_sync(con->parent, false);
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test clear escape sequence: [2J */
- vidconsole_put_string(con, "A\tB\tC"ANSI_ESC"[2J");
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test set-cursor: [%d;%df */
- vidconsole_put_string(con, "abc"ANSI_ESC"[2;2fab"ANSI_ESC"[4;4fcd");
- ut_asserteq(143, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test colors (30-37 fg color, 40-47 bg color) */
- vidconsole_put_string(con, ANSI_ESC"[30;41mfoo"); /* black on red */
- vidconsole_put_string(con, ANSI_ESC"[33;44mbar"); /* yellow on blue */
- ut_asserteq(272, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -291,11 +322,13 @@ static int check_vidconsole_output(struct unit_test_state *uts, int rot,
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* Check display wrap */
- for (i = 0; i < 120; i++)
- vidconsole_put_char(con, 'A' + i % 50);
- ut_asserteq(wrap_size, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* Check display scrolling */
- for (i = 0; i < SCROLL_LINES; i++) {
-@@ -303,11 +336,13 @@ static int check_vidconsole_output(struct unit_test_state *uts, int rot,
- vidconsole_put_char(con, '\n');
- }
- ut_asserteq(scroll_size, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* If we scroll enough, the screen becomes blank again */
- for (i = 0; i < SCROLL_LINES; i++)
- vidconsole_put_char(con, '\n');
- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -382,6 +417,7 @@ static int dm_test_video_bmp(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(1368, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -401,6 +437,7 @@ static int dm_test_video_bmp8(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(1247, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -424,6 +461,7 @@ static int dm_test_video_bmp16(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
- ut_asserteq(3700, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -447,6 +485,7 @@ static int dm_test_video_bmp24(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
- ut_asserteq(3656, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -470,6 +509,7 @@ static int dm_test_video_bmp24_32(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
- ut_asserteq(6827, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -488,6 +528,7 @@ static int dm_test_video_bmp32(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(2024, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -504,6 +545,7 @@ static int dm_test_video_bmp_comp(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(1368, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -523,6 +565,7 @@ static int dm_test_video_comp_bmp32(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(2024, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -542,6 +585,7 @@ static int dm_test_video_comp_bmp8(struct unit_test_state *uts)
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
- ut_asserteq(1247, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -557,6 +601,7 @@ static int dm_test_video_truetype(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
- ut_asserteq(12174, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -578,6 +623,7 @@ static int dm_test_video_truetype_scroll(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
- ut_asserteq(34287, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
-@@ -599,6 +645,7 @@ static int dm_test_video_truetype_bs(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
- ut_asserteq(29471, compress_frame_buffer(uts, dev));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
- }
---
-2.49.0
-
-
-From 3c4f71fb10a827db53d6ed637e39afb5cc19a871 Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Sun, 20 Aug 2023 17:46:46 +0300
-Subject: [PATCH 02/13] video: test: Support checking copy frame buffer
- contents
-
-The video tests have a helper function to generate a pseudo-digest of
-frame buffer contents, but it only does so for the main one. There is
-another check that the copy frame buffer is the same as that. But
-neither is enough to test if only the modified regions are copied to the
-copy frame buffer, since we will want the two to be different in very
-specific ways.
-
-Add a boolean argument to the existing helper function to indicate which
-frame buffer we want to inspect, and update the existing callers.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-3-alpernebiyasak@gmail.com/
----
- test/dm/video.c | 76 ++++++++++++++++++++++++++-----------------------
- 1 file changed, 41 insertions(+), 35 deletions(-)
-
-diff --git a/test/dm/video.c b/test/dm/video.c
-index 01fa9e1b2415..edb1b4ede8c9 100644
---- a/test/dm/video.c
-+++ b/test/dm/video.c
-@@ -56,22 +56,28 @@ DM_TEST(dm_test_video_base, UTF_SCAN_PDATA | UTF_SCAN_FDT);
- *
- * @uts: Test state
- * @dev: Video device
-+ * @use_copy: Use copy frame buffer if available
- * Return: compressed size of the frame buffer, or -ve on error
- */
- static int compress_frame_buffer(struct unit_test_state *uts,
-- struct udevice *dev)
-+ struct udevice *dev,
-+ bool use_copy)
- {
- struct video_priv *priv = dev_get_uclass_priv(dev);
- uint destlen;
- void *dest;
- int ret;
-
-+ if (!IS_ENABLED(CONFIG_VIDEO_COPY))
-+ use_copy = false;
-+
- destlen = priv->fb_size;
- dest = malloc(priv->fb_size);
- if (!dest)
- return -ENOMEM;
- ret = BZ2_bzBuffToBuffCompress(dest, &destlen,
-- priv->fb, priv->fb_size,
-+ use_copy ? priv->copy_fb : priv->fb,
-+ priv->fb_size,
- 3, 0, 0);
- free(dest);
- if (ret)
-@@ -167,30 +173,30 @@ static int dm_test_video_text(struct unit_test_state *uts)
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_putc_xy(con, 0, 0, 'a');
-- ut_asserteq(79, compress_frame_buffer(uts, dev));
-+ ut_asserteq(79, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_putc_xy(con, 0, 0, ' ');
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
-- ut_asserteq(273, compress_frame_buffer(uts, dev));
-+ ut_asserteq(273, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_set_row(con, 0, WHITE);
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
-- ut_asserteq(273, compress_frame_buffer(uts, dev));
-+ ut_asserteq(273, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -209,30 +215,30 @@ static int dm_test_video_text_12x22(struct unit_test_state *uts)
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "12x22", 0));
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_putc_xy(con, 0, 0, 'a');
-- ut_asserteq(89, compress_frame_buffer(uts, dev));
-+ ut_asserteq(89, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_putc_xy(con, 0, 0, ' ');
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
-- ut_asserteq(363, compress_frame_buffer(uts, dev));
-+ ut_asserteq(363, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- vidconsole_set_row(con, 0, WHITE);
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- for (i = 0; i < 20; i++)
- vidconsole_putc_xy(con, VID_TO_POS(i * 8), 0, ' ' + i);
-- ut_asserteq(363, compress_frame_buffer(uts, dev));
-+ ut_asserteq(363, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -250,7 +256,7 @@ static int dm_test_video_chars(struct unit_test_state *uts)
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
- vidconsole_put_string(con, test_string);
-- ut_asserteq(466, compress_frame_buffer(uts, dev));
-+ ut_asserteq(466, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -272,23 +278,23 @@ static int dm_test_video_ansi(struct unit_test_state *uts)
- /* reference clear: */
- video_clear(con->parent);
- video_sync(con->parent, false);
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test clear escape sequence: [2J */
- vidconsole_put_string(con, "A\tB\tC"ANSI_ESC"[2J");
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test set-cursor: [%d;%df */
- vidconsole_put_string(con, "abc"ANSI_ESC"[2;2fab"ANSI_ESC"[4;4fcd");
-- ut_asserteq(143, compress_frame_buffer(uts, dev));
-+ ut_asserteq(143, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* test colors (30-37 fg color, 40-47 bg color) */
- vidconsole_put_string(con, ANSI_ESC"[30;41mfoo"); /* black on red */
- vidconsole_put_string(con, ANSI_ESC"[33;44mbar"); /* yellow on blue */
-- ut_asserteq(272, compress_frame_buffer(uts, dev));
-+ ut_asserteq(272, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -321,13 +327,13 @@ static int check_vidconsole_output(struct unit_test_state *uts, int rot,
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- ut_assertok(vidconsole_select_font(con, "8x16", 0));
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* Check display wrap */
- for (i = 0; i < 120; i++)
- vidconsole_put_char(con, 'A' + i % 50);
-- ut_asserteq(wrap_size, compress_frame_buffer(uts, dev));
-+ ut_asserteq(wrap_size, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* Check display scrolling */
-@@ -335,13 +341,13 @@ static int check_vidconsole_output(struct unit_test_state *uts, int rot,
- vidconsole_put_char(con, 'A' + i % 50);
- vidconsole_put_char(con, '\n');
- }
-- ut_asserteq(scroll_size, compress_frame_buffer(uts, dev));
-+ ut_asserteq(scroll_size, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- /* If we scroll enough, the screen becomes blank again */
- for (i = 0; i < SCROLL_LINES; i++)
- vidconsole_put_char(con, '\n');
-- ut_asserteq(46, compress_frame_buffer(uts, dev));
-+ ut_asserteq(46, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -416,7 +422,7 @@ static int dm_test_video_bmp(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(1368, compress_frame_buffer(uts, dev));
-+ ut_asserteq(1368, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -436,7 +442,7 @@ static int dm_test_video_bmp8(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(1247, compress_frame_buffer(uts, dev));
-+ ut_asserteq(1247, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -460,7 +466,7 @@ static int dm_test_video_bmp16(struct unit_test_state *uts)
- &src_len));
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
-- ut_asserteq(3700, compress_frame_buffer(uts, dev));
-+ ut_asserteq(3700, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -484,7 +490,7 @@ static int dm_test_video_bmp24(struct unit_test_state *uts)
- &src_len));
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
-- ut_asserteq(3656, compress_frame_buffer(uts, dev));
-+ ut_asserteq(3656, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -508,7 +514,7 @@ static int dm_test_video_bmp24_32(struct unit_test_state *uts)
- &src_len));
-
- ut_assertok(video_bmp_display(dev, dst, 0, 0, false));
-- ut_asserteq(6827, compress_frame_buffer(uts, dev));
-+ ut_asserteq(6827, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -527,7 +533,7 @@ static int dm_test_video_bmp32(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(2024, compress_frame_buffer(uts, dev));
-+ ut_asserteq(2024, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -544,7 +550,7 @@ static int dm_test_video_bmp_comp(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx-comp.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(1368, compress_frame_buffer(uts, dev));
-+ ut_asserteq(1368, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -564,7 +570,7 @@ static int dm_test_video_comp_bmp32(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(2024, compress_frame_buffer(uts, dev));
-+ ut_asserteq(2024, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -584,7 +590,7 @@ static int dm_test_video_comp_bmp8(struct unit_test_state *uts)
- ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-
- ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-- ut_asserteq(1247, compress_frame_buffer(uts, dev));
-+ ut_asserteq(1247, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -600,7 +606,7 @@ static int dm_test_video_truetype(struct unit_test_state *uts)
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
-- ut_asserteq(12174, compress_frame_buffer(uts, dev));
-+ ut_asserteq(12174, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -622,7 +628,7 @@ static int dm_test_video_truetype_scroll(struct unit_test_state *uts)
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
-- ut_asserteq(34287, compress_frame_buffer(uts, dev));
-+ ut_asserteq(34287, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
-@@ -644,7 +650,7 @@ static int dm_test_video_truetype_bs(struct unit_test_state *uts)
- ut_assertok(video_get_nologo(uts, &dev));
- ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
- vidconsole_put_string(con, test_string);
-- ut_asserteq(29471, compress_frame_buffer(uts, dev));
-+ ut_asserteq(29471, compress_frame_buffer(uts, dev, false));
- ut_assertok(check_copy_frame_buffer(uts, dev));
-
- return 0;
---
-2.49.0
-
-
-From ecd9200f2068ab8bbeda5c7b8ddc4b8d7ca6b038 Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Fri, 18 Aug 2023 17:31:27 +0300
-Subject: [PATCH 03/13] video: test: Test partial updates of hardware frame
- buffer
-
-With VIDEO_COPY enabled, only the modified parts of the frame buffer are
-intended to be copied to the hardware. Add a test that checks this, by
-overwriting contents we prepared without telling the video uclass and
-then checking if the overwritten contents have been redrawn on the next
-sync.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-4-alpernebiyasak@gmail.com/
----
- test/dm/video.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 54 insertions(+)
-
-diff --git a/test/dm/video.c b/test/dm/video.c
-index edb1b4ede8c9..80e65d66dbaf 100644
---- a/test/dm/video.c
-+++ b/test/dm/video.c
-@@ -656,3 +656,57 @@ static int dm_test_video_truetype_bs(struct unit_test_state *uts)
- return 0;
- }
- DM_TEST(dm_test_video_truetype_bs, UTF_SCAN_PDATA | UTF_SCAN_FDT);
-+
-+/* Test partial rendering onto hardware frame buffer */
-+static int dm_test_video_copy(struct unit_test_state *uts)
-+{
-+ struct sandbox_sdl_plat *plat;
-+ struct video_uc_plat *uc_plat;
-+ struct udevice *dev, *con;
-+ struct video_priv *priv;
-+ const char *test_string = "\n\tCriticism may not be agreeable, but it is necessary.\t";
-+ ulong addr;
-+
-+ if (!IS_ENABLED(CONFIG_VIDEO_COPY))
-+ return -EAGAIN;
-+
-+ ut_assertok(uclass_find_first_device(UCLASS_VIDEO, &dev));
-+ ut_assertnonnull(dev);
-+ uc_plat = dev_get_uclass_plat(dev);
-+ uc_plat->hide_logo = true;
-+ plat = dev_get_plat(dev);
-+ plat->font_size = 32;
-+ ut_assert(!device_active(dev));
-+ ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev));
-+ ut_assertnonnull(dev);
-+ priv = dev_get_uclass_priv(dev);
-+
-+ ut_assertok(read_file(uts, "tools/logos/denx.bmp", &addr));
-+ ut_assertok(video_bmp_display(dev, addr, 0, 0, false));
-+
-+ ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
-+ vidconsole_put_string(con, "\n\n\n\n\n");
-+ vidconsole_put_string(con, test_string);
-+ vidconsole_put_string(con, test_string);
-+
-+ ut_asserteq(6678, compress_frame_buffer(uts, dev, false));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-+
-+ /*
-+ * Secretly clear the hardware frame buffer, but in a different
-+ * color (black) to see which parts will be overwritten.
-+ */
-+ memset(priv->copy_fb, 0, priv->fb_size);
-+
-+ /*
-+ * We should have the full content on the main buffer, but only
-+ * the new content should have been copied to the copy buffer.
-+ */
-+ vidconsole_put_string(con, test_string);
-+ vidconsole_put_string(con, test_string);
-+ ut_asserteq(7589, compress_frame_buffer(uts, dev, false));
-+ ut_asserteq(5278, compress_frame_buffer(uts, dev, true));
-+
-+ return 0;
-+}
-+DM_TEST(dm_test_video_copy, UTF_SCAN_PDATA | UTF_SCAN_FDT);
---
-2.49.0
-
-
-From 6ecfb63749d955fc28e6312583865c902ffb1175 Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:15 +0200
-Subject: [PATCH 04/13] dm: video: Add damage tracking API
-
-We are going to introduce image damage tracking to fasten up screen
-refresh on large displays. This patch adds damage tracking for up to
-one rectangle of the screen which is typically enough to hold blt or
-text print updates. Callers into this API and a reduced dcache flush
-code path will follow in later patches.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-[Alper: Use xstart/yend, document new fields, return void from
- video_damage(), declare priv, drop headers, use IS_ENABLED()]
-Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-5-alpernebiyasak@gmail.com/
-Reviewed-by: Simon Glass <sjg@chromium.org>
----
- drivers/video/Kconfig | 13 ++++++++++++
- drivers/video/video-uclass.c | 35 +++++++++++++++++++++++++++++++
- include/video.h | 40 ++++++++++++++++++++++++++++++++++--
- 3 files changed, 86 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 3c3cebaacd02..5d67067891be 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -98,6 +98,19 @@ config VIDEO_COPY
- To use this, your video driver must set @copy_base in
- struct video_uc_plat.
-
-+config VIDEO_DAMAGE
-+ bool "Enable damage tracking of frame buffer regions"
-+ help
-+ On some machines (most ARM), the display frame buffer resides in
-+ RAM. To make the display controller pick up screen updates, we
-+ have to flush frame buffer contents from CPU caches into RAM which
-+ can be a slow operation.
-+
-+ This feature adds damage tracking to collect information about regions
-+ that received updates. When we want to sync, we then only flush
-+ regions of the frame buffer that were modified before, speeding up
-+ screen refreshes significantly.
-+
- config BACKLIGHT_PWM
- bool "Generic PWM based Backlight Driver"
- depends on BACKLIGHT && DM_PWM
-diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
-index ff4f21995859..da035e5c92b7 100644
---- a/drivers/video/video-uclass.c
-+++ b/drivers/video/video-uclass.c
-@@ -367,6 +367,34 @@ void video_set_default_colors(struct udevice *dev, bool invert)
- priv->colour_bg = video_index_to_colour(priv, back);
- }
-
-+/* Notify about changes in the frame buffer */
-+#ifdef CONFIG_VIDEO_DAMAGE
-+void video_damage(struct udevice *vid, int x, int y, int width, int height)
-+{
-+ struct video_priv *priv = dev_get_uclass_priv(vid);
-+ int xend = x + width;
-+ int yend = y + height;
-+
-+ if (x > priv->xsize)
-+ return;
-+
-+ if (y > priv->ysize)
-+ return;
-+
-+ if (xend > priv->xsize)
-+ xend = priv->xsize;
-+
-+ if (yend > priv->ysize)
-+ yend = priv->ysize;
-+
-+ /* Span a rectangle across all old and new damage */
-+ priv->damage.xstart = min(x, priv->damage.xstart);
-+ priv->damage.ystart = min(y, priv->damage.ystart);
-+ priv->damage.xend = max(xend, priv->damage.xend);
-+ priv->damage.yend = max(yend, priv->damage.yend);
-+}
-+#endif
-+
- /* Flush video activity to the caches */
- int video_sync(struct udevice *vid, bool force)
- {
-@@ -400,6 +428,13 @@ int video_sync(struct udevice *vid, bool force)
- #endif
- priv->last_sync = get_timer(0);
-
-+ if (IS_ENABLED(CONFIG_VIDEO_DAMAGE)) {
-+ priv->damage.xstart = priv->xsize;
-+ priv->damage.ystart = priv->ysize;
-+ priv->damage.xend = 0;
-+ priv->damage.yend = 0;
-+ }
-+
- return 0;
- }
-
-diff --git a/include/video.h b/include/video.h
-index a1f7fd7e839c..7eed112e00c4 100644
---- a/include/video.h
-+++ b/include/video.h
-@@ -85,6 +85,11 @@ enum video_format {
- * @fb_size: Frame buffer size
- * @copy_fb: Copy of the frame buffer to keep up to date; see struct
- * video_uc_plat
-+ * @damage: A bounding box of framebuffer regions updated since last sync
-+ * @damage.xstart: X start position in pixels from the left
-+ * @damage.ystart: Y start position in pixels from the top
-+ * @damage.xend: X end position in pixels from the left
-+ * @damage.xend: Y end position in pixels from the top
- * @line_length: Length of each frame buffer line, in bytes. This can be
- * set by the driver, but if not, the uclass will set it after
- * probing
-@@ -113,6 +118,12 @@ struct video_priv {
- void *fb;
- int fb_size;
- void *copy_fb;
-+ struct {
-+ int xstart;
-+ int ystart;
-+ int xend;
-+ int yend;
-+ } damage;
- int line_length;
- u32 colour_fg;
- u32 colour_bg;
-@@ -259,8 +270,9 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend,
- * @return: 0 on success, error code otherwise
- *
- * Some frame buffers are cached or have a secondary frame buffer. This
-- * function syncs these up so that the current contents of the U-Boot frame
-- * buffer are displayed to the user.
-+ * function syncs the damaged parts of them up so that the current contents
-+ * of the U-Boot frame buffer are displayed to the user. It clears the damage
-+ * buffer.
- */
- int video_sync(struct udevice *vid, bool force);
-
-@@ -380,6 +392,30 @@ static inline int video_sync_copy_all(struct udevice *dev)
-
- #endif
-
-+#ifdef CONFIG_VIDEO_DAMAGE
-+/**
-+ * video_damage() - Notify the video subsystem about screen updates.
-+ *
-+ * @vid: Device to sync
-+ * @x: Upper left X coordinate of the damaged rectangle
-+ * @y: Upper left Y coordinate of the damaged rectangle
-+ * @width: Width of the damaged rectangle
-+ * @height: Height of the damaged rectangle
-+ *
-+ * Some frame buffers are cached or have a secondary frame buffer. This
-+ * function notifies the video subsystem about rectangles that were updated
-+ * within the frame buffer. They may only get written to the screen on the
-+ * next call to video_sync().
-+ */
-+void video_damage(struct udevice *vid, int x, int y, int width, int height);
-+#else
-+static inline void video_damage(struct udevice *vid, int x, int y, int width,
-+ int height)
-+{
-+ return;
-+}
-+#endif /* CONFIG_VIDEO_DAMAGE */
-+
- /**
- * video_is_active() - Test if one video device it active
- *
---
-2.49.0
-
-
-From c23d99983901910dadf43f2b4d0b833a0a6d6c92 Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:16 +0200
-Subject: [PATCH 05/13] dm: video: Add damage notification on display fills
-
-Let's report the video damage when we fill parts of the screen. This
-way we can later lazily flush only relevant regions to hardware.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-[Alper: Move from video_clear() to video_fill(), video_fill_part()]
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-6-alpernebiyasak@gmail.com/
----
- drivers/video/video-uclass.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
-index da035e5c92b7..1c07613539f2 100644
---- a/drivers/video/video-uclass.c
-+++ b/drivers/video/video-uclass.c
-@@ -214,6 +214,8 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend,
- if (ret)
- return ret;
-
-+ video_damage(dev, xstart, ystart, xend - xstart, yend - ystart);
-+
- return 0;
- }
-
-@@ -262,6 +264,8 @@ int video_fill(struct udevice *dev, u32 colour)
- if (ret)
- return ret;
-
-+ video_damage(dev, 0, 0, priv->xsize, priv->ysize);
-+
- return video_sync(dev, false);
- }
-
---
-2.49.0
-
-
-From bc55519e74270926ee3680002c58fdeb21cd41ce Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:17 +0200
-Subject: [PATCH 06/13] vidconsole: Add damage notifications to all vidconsole
- drivers
-
-Now that we have a damage tracking API, let's populate damage done by
-vidconsole drivers. We try to declare as little memory as damaged as
-possible.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-[Alper: Rebase for met->baseline, fontdata->height/width, make rotated
- console_putc_xy() damages pass tests, edit patch message]
-Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-7-alpernebiyasak@gmail.com/
----
- drivers/video/console_normal.c | 18 +++++++++++
- drivers/video/console_rotate.c | 54 ++++++++++++++++++++++++++++++++
- drivers/video/console_truetype.c | 21 +++++++++++++
- 3 files changed, 93 insertions(+)
-
-diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c
-index 6f4194a18147..51ac8cc78e9d 100644
---- a/drivers/video/console_normal.c
-+++ b/drivers/video/console_normal.c
-@@ -39,6 +39,12 @@ static int console_set_row(struct udevice *dev, uint row, int clr)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ 0,
-+ fontdata->height * row,
-+ vid_priv->xsize,
-+ fontdata->height);
-+
- return 0;
- }
-
-@@ -60,6 +66,12 @@ static int console_move_rows(struct udevice *dev, uint rowdst,
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ 0,
-+ fontdata->height * rowdst,
-+ vid_priv->xsize,
-+ fontdata->height * count);
-+
- return 0;
- }
-
-@@ -91,6 +103,12 @@ static int console_putc_xy(struct udevice *dev, uint x_frac, uint y, int cp)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ x,
-+ y,
-+ fontdata->width,
-+ fontdata->height);
-+
- ret = vidconsole_sync_copy(dev, start, line);
- if (ret)
- return ret;
-diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c
-index a3f8c6352f83..f11dc3a0b075 100644
---- a/drivers/video/console_rotate.c
-+++ b/drivers/video/console_rotate.c
-@@ -36,6 +36,12 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ vid_priv->xsize - ((row + 1) * fontdata->height),
-+ 0,
-+ fontdata->height,
-+ vid_priv->ysize);
-+
- return 0;
- }
-
-@@ -64,6 +70,12 @@ static int console_move_rows_1(struct udevice *dev, uint rowdst, uint rowsrc,
- dst += vid_priv->line_length;
- }
-
-+ video_damage(dev->parent,
-+ vid_priv->xsize - ((rowdst + count) * fontdata->height),
-+ 0,
-+ count * fontdata->height,
-+ vid_priv->ysize);
-+
- return 0;
- }
-
-@@ -97,6 +109,12 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, int cp)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ vid_priv->xsize - y - fontdata->height,
-+ linenum - 1,
-+ fontdata->height,
-+ fontdata->width);
-+
- return VID_TO_POS(fontdata->width);
- }
-
-@@ -121,6 +139,12 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ 0,
-+ vid_priv->ysize - (row + 1) * fontdata->height,
-+ vid_priv->xsize,
-+ fontdata->height);
-+
- return 0;
- }
-
-@@ -142,6 +166,12 @@ static int console_move_rows_2(struct udevice *dev, uint rowdst, uint rowsrc,
- vidconsole_memmove(dev, dst, src,
- fontdata->height * vid_priv->line_length * count);
-
-+ video_damage(dev->parent,
-+ 0,
-+ vid_priv->ysize - (rowdst + count) * fontdata->height,
-+ vid_priv->xsize,
-+ count * fontdata->height);
-+
- return 0;
- }
-
-@@ -175,6 +205,12 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, int cp)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ x - fontdata->width + 1,
-+ linenum - fontdata->height + 1,
-+ fontdata->width,
-+ fontdata->height);
-+
- return VID_TO_POS(fontdata->width);
- }
-
-@@ -199,6 +235,12 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ row * fontdata->height,
-+ 0,
-+ fontdata->height,
-+ vid_priv->ysize);
-+
- return 0;
- }
-
-@@ -225,6 +267,12 @@ static int console_move_rows_3(struct udevice *dev, uint rowdst, uint rowsrc,
- dst += vid_priv->line_length;
- }
-
-+ video_damage(dev->parent,
-+ rowdst * fontdata->height,
-+ 0,
-+ count * fontdata->height,
-+ vid_priv->ysize);
-+
- return 0;
- }
-
-@@ -257,6 +305,12 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, int cp)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ y,
-+ linenum - fontdata->width + 1,
-+ fontdata->height,
-+ fontdata->width);
-+
- return VID_TO_POS(fontdata->width);
- }
-
-diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
-index 17a29817664f..073ddcfb6950 100644
---- a/drivers/video/console_truetype.c
-+++ b/drivers/video/console_truetype.c
-@@ -190,6 +190,7 @@ struct console_tt_store {
- static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
- {
- struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
-+ struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
- struct console_tt_priv *priv = dev_get_priv(dev);
- struct console_tt_metrics *met = priv->cur_met;
- void *end, *line;
-@@ -233,6 +234,12 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
- if (ret)
- return ret;
-
-+ video_damage(dev->parent,
-+ 0,
-+ vc_priv->y_charsize * row,
-+ vid_priv->xsize,
-+ vc_priv->y_charsize);
-+
- return 0;
- }
-
-@@ -240,6 +247,7 @@ static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
- uint rowsrc, uint count)
- {
- struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
-+ struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
- struct console_tt_priv *priv = dev_get_priv(dev);
- struct console_tt_metrics *met = priv->cur_met;
- void *dst;
-@@ -258,6 +266,12 @@ static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
- for (i = 0; i < priv->pos_ptr; i++)
- priv->pos[i].ypos -= diff;
-
-+ video_damage(dev->parent,
-+ 0,
-+ vc_priv->y_charsize * rowdst,
-+ vid_priv->xsize,
-+ vc_priv->y_charsize * count);
-+
- return 0;
- }
-
-@@ -418,6 +432,13 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
-
- line += vid_priv->line_length;
- }
-+
-+ video_damage(dev->parent,
-+ VID_TO_PIXEL(x) + xoff,
-+ y + met->baseline + yoff,
-+ width,
-+ height);
-+
- ret = vidconsole_sync_copy(dev, start, line);
- if (ret)
- return ret;
---
-2.49.0
-
-
-From e759e3ab52f4373d4f2487d857118b3f0b5998b2 Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Fri, 18 Aug 2023 17:55:08 +0300
-Subject: [PATCH 07/13] video: test: Test video damage tracking via vidconsole
-
-With VIDEO_DAMAGE, the video uclass tracks updated regions of the frame
-buffer in order to avoid unnecessary work during a video sync. Enable
-the config in sandbox and add a test for it, by printing strings at a
-few locations and checking the tracked region.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-8-alpernebiyasak@gmail.com/
----
- configs/sandbox_defconfig | 1 +
- test/dm/video.c | 56 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 57 insertions(+)
-
-diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
-index 861a1f4cd90e..8bf36ff325d8 100644
---- a/configs/sandbox_defconfig
-+++ b/configs/sandbox_defconfig
-@@ -328,6 +328,7 @@ CONFIG_USB_ETH_CDC=y
- CONFIG_VIDEO=y
- CONFIG_VIDEO_FONT_SUN12X22=y
- CONFIG_VIDEO_COPY=y
-+CONFIG_VIDEO_DAMAGE=y
- CONFIG_CONSOLE_ROTATION=y
- CONFIG_CONSOLE_TRUETYPE=y
- CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
-diff --git a/test/dm/video.c b/test/dm/video.c
-index 80e65d66dbaf..e76fa986d359 100644
---- a/test/dm/video.c
-+++ b/test/dm/video.c
-@@ -710,3 +710,59 @@ static int dm_test_video_copy(struct unit_test_state *uts)
- return 0;
- }
- DM_TEST(dm_test_video_copy, UTF_SCAN_PDATA | UTF_SCAN_FDT);
-+
-+/* Test video damage tracking */
-+static int dm_test_video_damage(struct unit_test_state *uts)
-+{
-+ struct sandbox_sdl_plat *plat;
-+ struct udevice *dev, *con;
-+ struct video_priv *priv;
-+ const char *test_string_1 = "Criticism may not be agreeable, ";
-+ const char *test_string_2 = "but it is necessary.";
-+ const char *test_string_3 = "It fulfils the same function as pain in the human body.";
-+
-+ if (!IS_ENABLED(CONFIG_VIDEO_DAMAGE))
-+ return -EAGAIN;
-+
-+ ut_assertok(uclass_find_device(UCLASS_VIDEO, 0, &dev));
-+ ut_assert(!device_active(dev));
-+ plat = dev_get_plat(dev);
-+ plat->font_size = 32;
-+
-+ ut_assertok(video_get_nologo(uts, &dev));
-+ ut_assertok(uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &con));
-+ priv = dev_get_uclass_priv(dev);
-+
-+ vidconsole_position_cursor(con, 14, 10);
-+ vidconsole_put_string(con, test_string_2);
-+ ut_asserteq(449, priv->damage.xstart);
-+ ut_asserteq(325, priv->damage.ystart);
-+ ut_asserteq(661, priv->damage.xend);
-+ ut_asserteq(350, priv->damage.yend);
-+
-+ vidconsole_position_cursor(con, 7, 5);
-+ vidconsole_put_string(con, test_string_1);
-+ ut_asserteq(225, priv->damage.xstart);
-+ ut_asserteq(164, priv->damage.ystart);
-+ ut_asserteq(661, priv->damage.xend);
-+ ut_asserteq(350, priv->damage.yend);
-+
-+ vidconsole_position_cursor(con, 21, 15);
-+ vidconsole_put_string(con, test_string_3);
-+ ut_asserteq(225, priv->damage.xstart);
-+ ut_asserteq(164, priv->damage.ystart);
-+ ut_asserteq(1280, priv->damage.xend);
-+ ut_asserteq(510, priv->damage.yend);
-+
-+ video_sync(dev, false);
-+ ut_asserteq(priv->xsize, priv->damage.xstart);
-+ ut_asserteq(priv->ysize, priv->damage.ystart);
-+ ut_asserteq(0, priv->damage.xend);
-+ ut_asserteq(0, priv->damage.yend);
-+
-+ ut_asserteq(7339, compress_frame_buffer(uts, dev, false));
-+ ut_assertok(check_copy_frame_buffer(uts, dev));
-+
-+ return 0;
-+}
-+DM_TEST(dm_test_video_damage, UTF_SCAN_PDATA | UTF_SCAN_FDT);
---
-2.49.0
-
-
-From aa9d791d839b1004809b4a6cba38cd0bfd3dafa9 Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:18 +0200
-Subject: [PATCH 08/13] video: Add damage notification on bmp display
-
-Let's report the video damage when we draw a bitmap on the screen. This
-way we can later lazily flush only relevant regions to hardware.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-9-alpernebiyasak@gmail.com/
----
- drivers/video/video_bmp.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
-index ad512d99a1b9..78de95607924 100644
---- a/drivers/video/video_bmp.c
-+++ b/drivers/video/video_bmp.c
-@@ -459,6 +459,8 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
- break;
- };
-
-+ video_damage(dev, x, y, width, height);
-+
- /* Find the position of the top left of the image in the framebuffer */
- fb = (uchar *)(priv->fb + y * priv->line_length + x * bpix / 8);
- ret = video_sync_copy(dev, start, fb);
---
-2.49.0
-
-
-From 68262daa712e3202149aa0249bcff233234b6dfa Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:19 +0200
-Subject: [PATCH 09/13] efi_loader: GOP: Add damage notification on BLT
-
-Now that we have a damage tracking API, let's populate damage done by
-UEFI payloads when they BLT data onto the screen.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-[Alper: Add struct comment for new member]
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-10-alpernebiyasak@gmail.com/
----
- lib/efi_loader/efi_gop.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
-index 4593975be5af..3abb47d610e6 100644
---- a/lib/efi_loader/efi_gop.c
-+++ b/lib/efi_loader/efi_gop.c
-@@ -26,6 +26,7 @@ static const efi_guid_t efi_gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
- * @ops: graphical output protocol interface
- * @info: graphical output mode information
- * @mode: graphical output mode
-+ * @vdev: backing video device
- * @bpix: bits per pixel
- * @fb: frame buffer
- */
-@@ -34,6 +35,7 @@ struct efi_gop_obj {
- struct efi_gop ops;
- struct efi_gop_mode_info info;
- struct efi_gop_mode mode;
-+ struct udevice *vdev;
- /* Fields we only have access to during init */
- u32 bpix;
- void *fb;
-@@ -122,6 +124,7 @@ static __always_inline efi_status_t gop_blt_int(struct efi_gop *this,
- u32 *fb32 = gopobj->fb;
- u16 *fb16 = gopobj->fb;
- struct efi_gop_pixel *buffer = __builtin_assume_aligned(bufferp, 4);
-+ bool blt_to_video = (operation != EFI_BLT_VIDEO_TO_BLT_BUFFER);
-
- if (delta) {
- /* Check for 4 byte alignment */
-@@ -245,6 +248,9 @@ static __always_inline efi_status_t gop_blt_int(struct efi_gop *this,
- dlineoff += dwidth;
- }
-
-+ if (blt_to_video)
-+ video_damage(gopobj->vdev, dx, dy, width, height);
-+
- return EFI_SUCCESS;
- }
-
-@@ -551,6 +557,7 @@ efi_status_t efi_gop_register(void)
- gopobj->info.pixels_per_scanline = col;
- gopobj->bpix = bpix;
- gopobj->fb = map_sysmem(fb_base, fb_size);
-+ gopobj->vdev = vdev;
-
- return EFI_SUCCESS;
- }
---
-2.49.0
-
-
-From b9d38bb68233d917a84c589b098699bd9ef08d70 Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:20 +0200
-Subject: [PATCH 10/13] video: Only dcache flush damaged lines
-
-Now that we have a damage area tells us which parts of the frame buffer
-actually need updating, let's only dcache flush those on video_sync()
-calls. With this optimization in place, frame buffer updates - especially
-on large screen such as 4k displays - speed up significantly.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reported-by: Da Xue <da@libre.computer>
-[Alper: Use damage.xstart/yend, IS_ENABLED()]
-Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-11-alpernebiyasak@gmail.com/
----
- drivers/video/video-uclass.c | 43 +++++++++++++++++++++++++++++++-----
- 1 file changed, 38 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
-index 1c07613539f2..2dffcc229f6f 100644
---- a/drivers/video/video-uclass.c
-+++ b/drivers/video/video-uclass.c
-@@ -399,6 +399,40 @@ void video_damage(struct udevice *vid, int x, int y, int width, int height)
- }
- #endif
-
-+#if defined(CONFIG_ARM) && !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
-+static void video_flush_dcache(struct udevice *vid, bool use_copy)
-+{
-+ struct video_priv *priv = dev_get_uclass_priv(vid);
-+ ulong fb = use_copy ? (ulong)priv->copy_fb : (ulong)priv->fb;
-+
-+ if (!priv->flush_dcache)
-+ return;
-+
-+ if (!IS_ENABLED(CONFIG_VIDEO_DAMAGE)) {
-+ flush_dcache_range(fb, ALIGN(fb + priv->fb_size,
-+ CONFIG_SYS_CACHELINE_SIZE));
-+
-+ return;
-+ }
-+
-+ if (priv->damage.xend && priv->damage.yend) {
-+ int lstart = priv->damage.xstart * VNBYTES(priv->bpix);
-+ int lend = priv->damage.xend * VNBYTES(priv->bpix);
-+ int y;
-+
-+ for (y = priv->damage.ystart; y < priv->damage.yend; y++) {
-+ ulong start = fb + (y * priv->line_length) + lstart;
-+ ulong end = start + lend - lstart;
-+
-+ start = ALIGN_DOWN(start, CONFIG_SYS_CACHELINE_SIZE);
-+ end = ALIGN(end, CONFIG_SYS_CACHELINE_SIZE);
-+
-+ flush_dcache_range(start, end);
-+ }
-+ }
-+}
-+#endif
-+
- /* Flush video activity to the caches */
- int video_sync(struct udevice *vid, bool force)
- {
-@@ -422,11 +456,10 @@ int video_sync(struct udevice *vid, bool force)
- * out whether it exists? For now, ARM is safe.
- */
- #if defined(CONFIG_ARM) && !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
-- if (priv->flush_dcache) {
-- flush_dcache_range((ulong)priv->fb,
-- ALIGN((ulong)priv->fb + priv->fb_size,
-- CONFIG_SYS_CACHELINE_SIZE));
-- }
-+ video_flush_dcache(vid, false);
-+
-+ if (IS_ENABLED(CONFIG_VIDEO_COPY))
-+ video_flush_dcache(vid, true);
- #elif defined(CONFIG_VIDEO_SANDBOX_SDL)
- sandbox_sdl_sync(priv->fb);
- #endif
---
-2.49.0
-
-
-From bcb0061c373dca651760928ec6f8e13842b26e55 Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Fri, 10 Jun 2022 00:59:21 +0200
-Subject: [PATCH 11/13] video: Use VIDEO_DAMAGE for VIDEO_COPY
-
-CONFIG_VIDEO_COPY implemented a range-based copying mechanism: If we
-print a single character, it will always copy the full range of bytes
-from the top left corner of the character to the lower right onto the
-uncached frame buffer. This includes pretty much the full line contents
-of the printed character.
-
-Since we now have proper damage tracking, let's make use of that to reduce
-the amount of data we need to copy. With this patch applied, we will only
-copy the tiny rectangle surrounding characters when we print them,
-speeding up the video console.
-
-After this, changes to the main frame buffer are not immediately copied
-to the copy frame buffer, but postponed until the next video device
-sync. So issue an explicit sync before inspecting the copy frame buffer
-contents for the video tests.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-[Alper: Rebase for fontdata->height/w, fill_part(), fix memmove(dev),
- drop from defconfig, use damage.xstart/yend, use IS_ENABLED(),
- call video_sync() before copy_fb check, update video_copy test]
-Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-12-alpernebiyasak@gmail.com/
----
- configs/sandbox_defconfig | 1 -
- drivers/video/Kconfig | 5 ++
- drivers/video/console_normal.c | 13 +----
- drivers/video/console_rotate.c | 44 +++-----------
- drivers/video/console_truetype.c | 20 +------
- drivers/video/vidconsole-uclass.c | 16 ------
- drivers/video/video-uclass.c | 96 ++++++++-----------------------
- drivers/video/video_bmp.c | 7 ---
- include/video.h | 37 ------------
- include/video_console.h | 52 -----------------
- test/dm/video.c | 3 +-
- 11 files changed, 43 insertions(+), 251 deletions(-)
-
-diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
-index 8bf36ff325d8..861a1f4cd90e 100644
---- a/configs/sandbox_defconfig
-+++ b/configs/sandbox_defconfig
-@@ -328,7 +328,6 @@ CONFIG_USB_ETH_CDC=y
- CONFIG_VIDEO=y
- CONFIG_VIDEO_FONT_SUN12X22=y
- CONFIG_VIDEO_COPY=y
--CONFIG_VIDEO_DAMAGE=y
- CONFIG_CONSOLE_ROTATION=y
- CONFIG_CONSOLE_TRUETYPE=y
- CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 5d67067891be..964174b01acc 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -89,11 +89,14 @@ config VIDEO_PCI_DEFAULT_FB_SIZE
-
- config VIDEO_COPY
- bool "Enable copying the frame buffer to a hardware copy"
-+ select VIDEO_DAMAGE
- help
- On some machines (e.g. x86), reading from the frame buffer is very
- slow because it is uncached. To improve performance, this feature
- allows the frame buffer to be kept in cached memory (allocated by
- U-Boot) and then copied to the hardware frame-buffer as needed.
-+ It uses the VIDEO_DAMAGE feature to keep track of regions to copy
-+ and will only copy actually touched regions.
-
- To use this, your video driver must set @copy_base in
- struct video_uc_plat.
-@@ -111,6 +114,8 @@ config VIDEO_DAMAGE
- regions of the frame buffer that were modified before, speeding up
- screen refreshes significantly.
-
-+ It is also used by VIDEO_COPY to identify which regions changed.
-+
- config BACKLIGHT_PWM
- bool "Generic PWM based Backlight Driver"
- depends on BACKLIGHT && DM_PWM
-diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c
-index 51ac8cc78e9d..07db613ac53c 100644
---- a/drivers/video/console_normal.c
-+++ b/drivers/video/console_normal.c
-@@ -35,10 +35,6 @@ static int console_set_row(struct udevice *dev, uint row, int clr)
- fill_pixel_and_goto_next(&dst, clr, pbytes, pbytes);
- end = dst;
-
-- ret = vidconsole_sync_copy(dev, line, end);
-- if (ret)
-- return ret;
--
- video_damage(dev->parent,
- 0,
- fontdata->height * row,
-@@ -57,14 +53,11 @@ static int console_move_rows(struct udevice *dev, uint rowdst,
- void *dst;
- void *src;
- int size;
-- int ret;
-
- dst = vid_priv->fb + rowdst * fontdata->height * vid_priv->line_length;
- src = vid_priv->fb + rowsrc * fontdata->height * vid_priv->line_length;
- size = fontdata->height * vid_priv->line_length * count;
-- ret = vidconsole_memmove(dev, dst, src, size);
-- if (ret)
-- return ret;
-+ memmove(dst, src, size);
-
- video_damage(dev->parent,
- 0,
-@@ -109,10 +102,6 @@ static int console_putc_xy(struct udevice *dev, uint x_frac, uint y, int cp)
- fontdata->width,
- fontdata->height);
-
-- ret = vidconsole_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
--
- return VID_TO_POS(fontdata->width);
- }
-
-diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c
-index f11dc3a0b075..886b25dcfafc 100644
---- a/drivers/video/console_rotate.c
-+++ b/drivers/video/console_rotate.c
-@@ -21,7 +21,6 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr)
- int pbytes = VNBYTES(vid_priv->bpix);
- void *start, *dst, *line;
- int i, j;
-- int ret;
-
- start = vid_priv->fb + vid_priv->line_length -
- (row + 1) * fontdata->height * pbytes;
-@@ -32,9 +31,6 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr)
- fill_pixel_and_goto_next(&dst, clr, pbytes, pbytes);
- line += vid_priv->line_length;
- }
-- ret = vidconsole_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
-
- video_damage(dev->parent,
- vid_priv->xsize - ((row + 1) * fontdata->height),
-@@ -54,7 +50,7 @@ static int console_move_rows_1(struct udevice *dev, uint rowdst, uint rowsrc,
- int pbytes = VNBYTES(vid_priv->bpix);
- void *dst;
- void *src;
-- int j, ret;
-+ int j;
-
- dst = vid_priv->fb + vid_priv->line_length -
- (rowdst + count) * fontdata->height * pbytes;
-@@ -62,10 +58,7 @@ static int console_move_rows_1(struct udevice *dev, uint rowdst, uint rowsrc,
- (rowsrc + count) * fontdata->height * pbytes;
-
- for (j = 0; j < vid_priv->ysize; j++) {
-- ret = vidconsole_memmove(dev, dst, src,
-- fontdata->height * pbytes * count);
-- if (ret)
-- return ret;
-+ memmove(dst, src, fontdata->height * pbytes * count);
- src += vid_priv->line_length;
- dst += vid_priv->line_length;
- }
-@@ -105,10 +98,6 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, int cp)
- return ret;
-
- /* We draw backwards from 'start, so account for the first line */
-- ret = vidconsole_sync_copy(dev, start - vid_priv->line_length, line);
-- if (ret)
-- return ret;
--
- video_damage(dev->parent,
- vid_priv->xsize - y - fontdata->height,
- linenum - 1,
-@@ -125,7 +114,7 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr)
- struct video_fontdata *fontdata = priv->fontdata;
- void *start, *line, *dst, *end;
- int pixels = fontdata->height * vid_priv->xsize;
-- int i, ret;
-+ int i;
- int pbytes = VNBYTES(vid_priv->bpix);
-
- start = vid_priv->fb + vid_priv->ysize * vid_priv->line_length -
-@@ -135,9 +124,6 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr)
- for (i = 0; i < pixels; i++)
- fill_pixel_and_goto_next(&dst, clr, pbytes, pbytes);
- end = dst;
-- ret = vidconsole_sync_copy(dev, start, end);
-- if (ret)
-- return ret;
-
- video_damage(dev->parent,
- 0,
-@@ -163,8 +149,7 @@ static int console_move_rows_2(struct udevice *dev, uint rowdst, uint rowsrc,
- vid_priv->line_length;
- src = end - (rowsrc + count) * fontdata->height *
- vid_priv->line_length;
-- vidconsole_memmove(dev, dst, src,
-- fontdata->height * vid_priv->line_length * count);
-+ memmove(dst, src, fontdata->height * vid_priv->line_length * count);
-
- video_damage(dev->parent,
- 0,
-@@ -200,11 +185,6 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, int cp)
- if (ret)
- return ret;
-
-- /* Add 4 bytes to allow for the first pixel writen */
-- ret = vidconsole_sync_copy(dev, start + 4, line);
-- if (ret)
-- return ret;
--
- video_damage(dev->parent,
- x - fontdata->width + 1,
- linenum - fontdata->height + 1,
-@@ -221,7 +201,7 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr)
- struct video_fontdata *fontdata = priv->fontdata;
- int pbytes = VNBYTES(vid_priv->bpix);
- void *start, *dst, *line;
-- int i, j, ret;
-+ int i, j;
-
- start = vid_priv->fb + row * fontdata->height * pbytes;
- line = start;
-@@ -231,9 +211,6 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr)
- fill_pixel_and_goto_next(&dst, clr, pbytes, pbytes);
- line += vid_priv->line_length;
- }
-- ret = vidconsole_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
-
- video_damage(dev->parent,
- row * fontdata->height,
-@@ -253,16 +230,13 @@ static int console_move_rows_3(struct udevice *dev, uint rowdst, uint rowsrc,
- int pbytes = VNBYTES(vid_priv->bpix);
- void *dst;
- void *src;
-- int j, ret;
-+ int j;
-
- dst = vid_priv->fb + rowdst * fontdata->height * pbytes;
- src = vid_priv->fb + rowsrc * fontdata->height * pbytes;
-
- for (j = 0; j < vid_priv->ysize; j++) {
-- ret = vidconsole_memmove(dev, dst, src,
-- fontdata->height * pbytes * count);
-- if (ret)
-- return ret;
-+ memmove(dst, src, fontdata->height * pbytes * count);
- src += vid_priv->line_length;
- dst += vid_priv->line_length;
- }
-@@ -298,10 +272,6 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, int cp)
- line = start;
-
- ret = fill_char_horizontally(pfont, &line, vid_priv, fontdata, NORMAL_DIRECTION);
-- if (ret)
-- return ret;
-- /* Add a line to allow for the first pixels writen */
-- ret = vidconsole_sync_copy(dev, start + vid_priv->line_length, line);
- if (ret)
- return ret;
-
-diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
-index 073ddcfb6950..56c3af3d5aad 100644
---- a/drivers/video/console_truetype.c
-+++ b/drivers/video/console_truetype.c
-@@ -194,7 +194,6 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
- struct console_tt_priv *priv = dev_get_priv(dev);
- struct console_tt_metrics *met = priv->cur_met;
- void *end, *line;
-- int ret;
-
- line = vid_priv->fb + row * met->font_size * vid_priv->line_length;
- end = line + met->font_size * vid_priv->line_length;
-@@ -230,9 +229,6 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
- default:
- return -ENOSYS;
- }
-- ret = vidconsole_sync_copy(dev, line, end);
-- if (ret)
-- return ret;
-
- video_damage(dev->parent,
- 0,
-@@ -252,14 +248,11 @@ static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
- struct console_tt_metrics *met = priv->cur_met;
- void *dst;
- void *src;
-- int i, diff, ret;
-+ int i, diff;
-
- dst = vid_priv->fb + rowdst * met->font_size * vid_priv->line_length;
- src = vid_priv->fb + rowsrc * met->font_size * vid_priv->line_length;
-- ret = vidconsole_memmove(dev, dst, src, met->font_size *
-- vid_priv->line_length * count);
-- if (ret)
-- return ret;
-+ memmove(dst, src, met->font_size * vid_priv->line_length * count);
-
- /* Scroll up our position history */
- diff = (rowsrc - rowdst) * met->font_size;
-@@ -292,7 +285,7 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
- u8 *bits, *data;
- int advance;
- void *start, *end, *line;
-- int row, ret;
-+ int row;
-
- /* First get some basic metrics about this character */
- stbtt_GetCodepointHMetrics(font, cp, &advance, &lsb);
-@@ -439,9 +432,6 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
- width,
- height);
-
-- ret = vidconsole_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
- free(data);
-
- return width_frac;
-@@ -872,7 +862,6 @@ static int truetype_set_cursor_visible(struct udevice *dev, bool visible,
- uint row, width, height, xoff;
- void *start, *line;
- uint out, val;
-- int ret;
-
- if (xpl_phase() <= PHASE_SPL)
- return -ENOSYS;
-@@ -962,9 +951,6 @@ static int truetype_set_cursor_visible(struct udevice *dev, bool visible,
-
- line += vid_priv->line_length;
- }
-- ret = vidconsole_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
-
- return video_sync(vid, true);
- }
-diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
-index 8613c464040f..ce6c8bb70cb7 100644
---- a/drivers/video/vidconsole-uclass.c
-+++ b/drivers/video/vidconsole-uclass.c
-@@ -803,22 +803,6 @@ UCLASS_DRIVER(vidconsole) = {
- .per_device_auto = sizeof(struct vidconsole_priv),
- };
-
--#ifdef CONFIG_VIDEO_COPY
--int vidconsole_sync_copy(struct udevice *dev, void *from, void *to)
--{
-- struct udevice *vid = dev_get_parent(dev);
--
-- return video_sync_copy(vid, from, to);
--}
--
--int vidconsole_memmove(struct udevice *dev, void *dst, const void *src,
-- int size)
--{
-- memmove(dst, src, size);
-- return vidconsole_sync_copy(dev, dst, dst + size);
--}
--#endif
--
- int vidconsole_clear_and_reset(struct udevice *dev)
- {
- int ret;
-diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
-index 2dffcc229f6f..eeee5d960838 100644
---- a/drivers/video/video-uclass.c
-+++ b/drivers/video/video-uclass.c
-@@ -171,7 +171,7 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend,
- struct video_priv *priv = dev_get_uclass_priv(dev);
- void *start, *line;
- int pixels = xend - xstart;
-- int row, i, ret;
-+ int row, i;
-
- start = priv->fb + ystart * priv->line_length;
- start += xstart * VNBYTES(priv->bpix);
-@@ -210,9 +210,6 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend,
- }
- line += priv->line_length;
- }
-- ret = video_sync_copy(dev, start, line);
-- if (ret)
-- return ret;
-
- video_damage(dev, xstart, ystart, xend - xstart, yend - ystart);
-
-@@ -235,7 +232,6 @@ int video_reserve_from_bloblist(struct video_handoff *ho)
- int video_fill(struct udevice *dev, u32 colour)
- {
- struct video_priv *priv = dev_get_uclass_priv(dev);
-- int ret;
-
- switch (priv->bpix) {
- case VIDEO_BPP16:
-@@ -260,9 +256,6 @@ int video_fill(struct udevice *dev, u32 colour)
- memset(priv->fb, colour, priv->fb_size);
- break;
- }
-- ret = video_sync_copy(dev, priv->fb, priv->fb + priv->fb_size);
-- if (ret)
-- return ret;
-
- video_damage(dev, 0, 0, priv->xsize, priv->ysize);
-
-@@ -433,6 +426,27 @@ static void video_flush_dcache(struct udevice *vid, bool use_copy)
- }
- #endif
-
-+static void video_flush_copy(struct udevice *vid)
-+{
-+ struct video_priv *priv = dev_get_uclass_priv(vid);
-+
-+ if (!priv->copy_fb)
-+ return;
-+
-+ if (priv->damage.xend && priv->damage.yend) {
-+ int lstart = priv->damage.xstart * VNBYTES(priv->bpix);
-+ int lend = priv->damage.xend * VNBYTES(priv->bpix);
-+ int y;
-+
-+ for (y = priv->damage.ystart; y < priv->damage.yend; y++) {
-+ ulong offset = (y * priv->line_length) + lstart;
-+ ulong len = lend - lstart;
-+
-+ memcpy(priv->copy_fb + offset, priv->fb + offset, len);
-+ }
-+ }
-+}
-+
- /* Flush video activity to the caches */
- int video_sync(struct udevice *vid, bool force)
- {
-@@ -440,6 +454,9 @@ int video_sync(struct udevice *vid, bool force)
- struct video_ops *ops = video_get_ops(vid);
- int ret;
-
-+ if (IS_ENABLED(CONFIG_VIDEO_COPY))
-+ video_flush_copy(vid);
-+
- if (ops && ops->video_sync) {
- ret = ops->video_sync(vid);
- if (ret)
-@@ -523,69 +540,6 @@ int video_get_ysize(struct udevice *dev)
- return priv->ysize;
- }
-
--#ifdef CONFIG_VIDEO_COPY
--int video_sync_copy(struct udevice *dev, void *from, void *to)
--{
-- struct video_priv *priv = dev_get_uclass_priv(dev);
--
-- if (priv->copy_fb) {
-- long offset, size;
--
-- /* Find the offset of the first byte to copy */
-- if ((ulong)to > (ulong)from) {
-- size = to - from;
-- offset = from - priv->fb;
-- } else {
-- size = from - to;
-- offset = to - priv->fb;
-- }
--
-- /*
-- * Allow a bit of leeway for valid requests somewhere near the
-- * frame buffer
-- */
-- if (offset < -priv->fb_size || offset > 2 * priv->fb_size) {
--#ifdef DEBUG
-- char str[120];
--
-- snprintf(str, sizeof(str),
-- "[** FAULT sync_copy fb=%p, from=%p, to=%p, offset=%lx]",
-- priv->fb, from, to, offset);
-- console_puts_select_stderr(true, str);
--#endif
-- return -EFAULT;
-- }
--
-- /*
-- * Silently crop the memcpy. This allows callers to avoid doing
-- * this themselves. It is common for the end pointer to go a
-- * few lines after the end of the frame buffer, since most of
-- * the update algorithms terminate a line after their last write
-- */
-- if (offset + size > priv->fb_size) {
-- size = priv->fb_size - offset;
-- } else if (offset < 0) {
-- size += offset;
-- offset = 0;
-- }
--
-- memcpy(priv->copy_fb + offset, priv->fb + offset, size);
-- }
--
-- return 0;
--}
--
--int video_sync_copy_all(struct udevice *dev)
--{
-- struct video_priv *priv = dev_get_uclass_priv(dev);
--
-- video_sync_copy(dev, priv->fb, priv->fb + priv->fb_size);
--
-- return 0;
--}
--
--#endif
--
- #define SPLASH_DECL(_name) \
- extern u8 __splash_ ## _name ## _begin[]; \
- extern u8 __splash_ ## _name ## _end[]
-diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
-index 78de95607924..1f267d45812c 100644
---- a/drivers/video/video_bmp.c
-+++ b/drivers/video/video_bmp.c
-@@ -267,7 +267,6 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
- enum video_format eformat;
- struct bmp_color_table_entry *palette;
- int hdr_size;
-- int ret;
-
- if (!bmp || !(bmp->header.signature[0] == 'B' &&
- bmp->header.signature[1] == 'M')) {
-@@ -461,11 +460,5 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
-
- video_damage(dev, x, y, width, height);
-
-- /* Find the position of the top left of the image in the framebuffer */
-- fb = (uchar *)(priv->fb + y * priv->line_length + x * bpix / 8);
-- ret = video_sync_copy(dev, start, fb);
-- if (ret)
-- return log_ret(ret);
--
- return video_sync(dev, false);
- }
-diff --git a/include/video.h b/include/video.h
-index 7eed112e00c4..2fe2f73a865b 100644
---- a/include/video.h
-+++ b/include/video.h
-@@ -355,43 +355,6 @@ void video_set_default_colors(struct udevice *dev, bool invert);
- */
- int video_default_font_height(struct udevice *dev);
-
--#ifdef CONFIG_VIDEO_COPY
--/**
-- * vidconsole_sync_copy() - Sync back to the copy framebuffer
-- *
-- * This ensures that the copy framebuffer has the same data as the framebuffer
-- * for a particular region. It should be called after the framebuffer is updated
-- *
-- * @from and @to can be in either order. The region between them is synced.
-- *
-- * @dev: Vidconsole device being updated
-- * @from: Start/end address within the framebuffer (->fb)
-- * @to: Other address within the frame buffer
-- * Return: 0 if OK, -EFAULT if the start address is before the start of the
-- * frame buffer start
-- */
--int video_sync_copy(struct udevice *dev, void *from, void *to);
--
--/**
-- * video_sync_copy_all() - Sync the entire framebuffer to the copy
-- *
-- * @dev: Vidconsole device being updated
-- * Return: 0 (always)
-- */
--int video_sync_copy_all(struct udevice *dev);
--#else
--static inline int video_sync_copy(struct udevice *dev, void *from, void *to)
--{
-- return 0;
--}
--
--static inline int video_sync_copy_all(struct udevice *dev)
--{
-- return 0;
--}
--
--#endif
--
- #ifdef CONFIG_VIDEO_DAMAGE
- /**
- * video_damage() - Notify the video subsystem about screen updates.
-diff --git a/include/video_console.h b/include/video_console.h
-index 17a9aa3f9295..b228c725fd80 100644
---- a/include/video_console.h
-+++ b/include/video_console.h
-@@ -538,56 +538,4 @@ void vidconsole_list_fonts(struct udevice *dev);
- */
- int vidconsole_get_font_size(struct udevice *dev, const char **name, uint *sizep);
-
--#ifdef CONFIG_VIDEO_COPY
--/**
-- * vidconsole_sync_copy() - Sync back to the copy framebuffer
-- *
-- * This ensures that the copy framebuffer has the same data as the framebuffer
-- * for a particular region. It should be called after the framebuffer is updated
-- *
-- * @from and @to can be in either order. The region between them is synced.
-- *
-- * @dev: Vidconsole device being updated
-- * @from: Start/end address within the framebuffer (->fb)
-- * @to: Other address within the frame buffer
-- * Return: 0 if OK, -EFAULT if the start address is before the start of the
-- * frame buffer start
-- */
--int vidconsole_sync_copy(struct udevice *dev, void *from, void *to);
--
--/**
-- * vidconsole_memmove() - Perform a memmove() within the frame buffer
-- *
-- * This handles a memmove(), e.g. for scrolling. It also updates the copy
-- * framebuffer.
-- *
-- * @dev: Vidconsole device being updated
-- * @dst: Destination address within the framebuffer (->fb)
-- * @src: Source address within the framebuffer (->fb)
-- * @size: Number of bytes to transfer
-- * Return: 0 if OK, -EFAULT if the start address is before the start of the
-- * frame buffer start
-- */
--int vidconsole_memmove(struct udevice *dev, void *dst, const void *src,
-- int size);
--#else
--
--#include <string.h>
--
--static inline int vidconsole_sync_copy(struct udevice *dev, void *from,
-- void *to)
--{
-- return 0;
--}
--
--static inline int vidconsole_memmove(struct udevice *dev, void *dst,
-- const void *src, int size)
--{
-- memmove(dst, src, size);
--
-- return 0;
--}
--
--#endif
--
- #endif
-diff --git a/test/dm/video.c b/test/dm/video.c
-index e76fa986d359..021f4b3fa733 100644
---- a/test/dm/video.c
-+++ b/test/dm/video.c
-@@ -105,6 +105,7 @@ static int check_copy_frame_buffer(struct unit_test_state *uts,
- if (!IS_ENABLED(CONFIG_VIDEO_COPY))
- return 0;
-
-+ video_sync(dev, false);
- ut_assertf(!memcmp(priv->fb, priv->copy_fb, priv->fb_size),
- "Copy framebuffer does not match fb");
-
-@@ -705,7 +706,7 @@ static int dm_test_video_copy(struct unit_test_state *uts)
- vidconsole_put_string(con, test_string);
- vidconsole_put_string(con, test_string);
- ut_asserteq(7589, compress_frame_buffer(uts, dev, false));
-- ut_asserteq(5278, compress_frame_buffer(uts, dev, true));
-+ ut_asserteq(4127, compress_frame_buffer(uts, dev, true));
-
- return 0;
- }
---
-2.49.0
-
-
-From 631692ed7090a8cfd0b2a3b3f23c295644f1393e Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Tue, 3 Jan 2023 22:50:03 +0100
-Subject: [PATCH 12/13] video: Always compile cache flushing code
-
-The dcache flushing code path was conditional on ARM && !DCACHE config
-options. However, dcaches exist on other platforms as well and may need
-clearing if their driver requires it.
-
-Simplify the compile logic and always enable the dcache flush logic in
-the video core. That way, drivers can always rely on it to call the arch
-specific callbacks.
-
-This will increase code size for non-ARM platforms with CONFIG_VIDEO=y
-slightly.
-
-Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-13-alpernebiyasak@gmail.com/
----
- drivers/video/video-uclass.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
-index eeee5d960838..6c5a86d85dbc 100644
---- a/drivers/video/video-uclass.c
-+++ b/drivers/video/video-uclass.c
-@@ -398,6 +398,9 @@ static void video_flush_dcache(struct udevice *vid, bool use_copy)
- struct video_priv *priv = dev_get_uclass_priv(vid);
- ulong fb = use_copy ? (ulong)priv->copy_fb : (ulong)priv->fb;
-
-+ if (CONFIG_IS_ENABLED(SYS_DCACHE_OFF))
-+ return;
-+
- if (!priv->flush_dcache)
- return;
-
-@@ -467,17 +470,12 @@ int video_sync(struct udevice *vid, bool force)
- get_timer(priv->last_sync) < CONFIG_VIDEO_SYNC_MS)
- return 0;
-
-- /*
-- * flush_dcache_range() is declared in common.h but it seems that some
-- * architectures do not actually implement it. Is there a way to find
-- * out whether it exists? For now, ARM is safe.
-- */
--#if defined(CONFIG_ARM) && !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
- video_flush_dcache(vid, false);
-
- if (IS_ENABLED(CONFIG_VIDEO_COPY))
- video_flush_dcache(vid, true);
--#elif defined(CONFIG_VIDEO_SANDBOX_SDL)
-+
-+#if defined(CONFIG_VIDEO_SANDBOX_SDL)
- sandbox_sdl_sync(priv->fb);
- #endif
- priv->last_sync = get_timer(0);
---
-2.49.0
-
-
-From 08f3add44c202053f5ba882cb2f440e8e470229c Mon Sep 17 00:00:00 2001
-From: Alexander Graf <agraf@csgraf.de>
-Date: Tue, 3 Jan 2023 22:50:04 +0100
-Subject: [PATCH 13/13] video: Enable VIDEO_DAMAGE for drivers that need it
-
-Some drivers call video_set_flush_dcache() to indicate that they want to
-have the dcache flushed for the frame buffer. These drivers benefit from
-our new video damage control, because we can reduce the amount of memory
-that gets flushed significantly.
-
-This patch enables video damage control for all device drivers that call
-video_set_flush_dcache() to make sure they benefit from it.
-
-Signed-off-by: Alexander Graf <agraf@csgraf.de>
-[Alper: Add to VIDEO_TIDSS, imply instead of select]
-Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Reviewed-by: Simon Glass <sjg@chromium.org>
-Link: https://lore.kernel.org/u-boot/20230821135111.3558478-14-alpernebiyasak@gmail.com/
----
- arch/arm/mach-sunxi/Kconfig | 1 +
- drivers/video/Kconfig | 8 ++++++++
- drivers/video/exynos/Kconfig | 1 +
- drivers/video/imx/Kconfig | 1 +
- drivers/video/meson/Kconfig | 1 +
- drivers/video/rockchip/Kconfig | 1 +
- drivers/video/stm32/Kconfig | 1 +
- drivers/video/tegra20/Kconfig | 1 +
- drivers/video/tidss/Kconfig | 1 +
- 9 files changed, 16 insertions(+)
-
-diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
-index ba1b15414379..bb1ea961704e 100644
---- a/arch/arm/mach-sunxi/Kconfig
-+++ b/arch/arm/mach-sunxi/Kconfig
-@@ -882,6 +882,7 @@ config VIDEO_SUNXI
- depends on !SUNXI_GEN_NCAT2
- select VIDEO
- select DISPLAY
-+ imply VIDEO_DAMAGE
- imply VIDEO_DT_SIMPLEFB
- default y
- ---help---
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 964174b01acc..6e1577ae6871 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -534,6 +534,7 @@ config VIDEO_LCD_ANX9804
-
- config ATMEL_LCD
- bool "Atmel LCD panel support"
-+ imply VIDEO_DAMAGE
- depends on ARCH_AT91
-
- config ATMEL_LCD_BGR555
-@@ -543,6 +544,7 @@ config ATMEL_LCD_BGR555
-
- config VIDEO_BCM2835
- bool "Display support for BCM2835"
-+ imply VIDEO_DAMAGE
- help
- The graphics processor already sets up the display so this driver
- simply checks the resolution and then sets up the frame buffer with
-@@ -715,6 +717,7 @@ source "drivers/video/meson/Kconfig"
-
- config VIDEO_MVEBU
- bool "Armada XP LCD controller"
-+ imply VIDEO_DAMAGE
- ---help---
- Support for the LCD controller integrated in the Marvell
- Armada XP SoC.
-@@ -749,6 +752,7 @@ config NXP_TDA19988
-
- config ATMEL_HLCD
- bool "Enable ATMEL video support using HLCDC"
-+ imply VIDEO_DAMAGE
- help
- HLCDC supports video output to an attached LCD panel.
-
-@@ -825,6 +829,7 @@ source "drivers/video/tidss/Kconfig"
-
- config VIDEO_TEGRA124
- bool "Enable video support on Tegra124"
-+ imply VIDEO_DAMAGE
- help
- Tegra124 supports many video output options including eDP and
- HDMI. At present only eDP is supported by U-Boot. This option
-@@ -839,6 +844,7 @@ source "drivers/video/imx/Kconfig"
-
- config VIDEO_MXS
- bool "Enable video support on i.MX28/i.MX6UL/i.MX7 SoCs"
-+ imply VIDEO_DAMAGE
- help
- Enable framebuffer driver for i.MX28/i.MX6UL/i.MX7 processors
-
-@@ -901,6 +907,7 @@ config VIDEO_DW_MIPI_DSI
-
- config VIDEO_SIMPLE
- bool "Simple display driver for preconfigured display"
-+ imply VIDEO_DAMAGE
- help
- Enables a simple generic display driver which utilizes the
- simple-framebuffer devicetree bindings.
-@@ -919,6 +926,7 @@ config VIDEO_DT_SIMPLEFB
-
- config VIDEO_MCDE_SIMPLE
- bool "Simple driver for ST-Ericsson MCDE with preconfigured display"
-+ imply VIDEO_DAMAGE
- help
- Enables a simple display driver for ST-Ericsson MCDE
- (Multichannel Display Engine), which reads the configuration from
-diff --git a/drivers/video/exynos/Kconfig b/drivers/video/exynos/Kconfig
-index 599d19d5ecc2..a2cf752aac03 100644
---- a/drivers/video/exynos/Kconfig
-+++ b/drivers/video/exynos/Kconfig
-@@ -12,6 +12,7 @@ config EXYNOS_DP
-
- config EXYNOS_FB
- bool "Exynos FIMD support"
-+ imply VIDEO_DAMAGE
-
- config EXYNOS_MIPI_DSIM
- bool "Exynos MIPI DSI support"
-diff --git a/drivers/video/imx/Kconfig b/drivers/video/imx/Kconfig
-index 34e8b640595b..5db3e5c0499e 100644
---- a/drivers/video/imx/Kconfig
-+++ b/drivers/video/imx/Kconfig
-@@ -2,6 +2,7 @@
- config VIDEO_IPUV3
- bool "i.MX IPUv3 Core video support"
- depends on VIDEO && (MX5 || MX6)
-+ imply VIDEO_DAMAGE
- help
- This enables framebuffer driver for i.MX processors working
- on the IPUv3(Image Processing Unit) internal graphic processor.
-diff --git a/drivers/video/meson/Kconfig b/drivers/video/meson/Kconfig
-index 3c2d72d019b8..fcf486ca0a3a 100644
---- a/drivers/video/meson/Kconfig
-+++ b/drivers/video/meson/Kconfig
-@@ -8,5 +8,6 @@ config VIDEO_MESON
- bool "Enable Amlogic Meson video support"
- depends on VIDEO
- select DISPLAY
-+ imply VIDEO_DAMAGE
- help
- Enable Amlogic Meson Video Processing Unit video support.
-diff --git a/drivers/video/rockchip/Kconfig b/drivers/video/rockchip/Kconfig
-index 01804dcb1cc8..0f4550a29e38 100644
---- a/drivers/video/rockchip/Kconfig
-+++ b/drivers/video/rockchip/Kconfig
-@@ -11,6 +11,7 @@
- menuconfig VIDEO_ROCKCHIP
- bool "Enable Rockchip Video Support"
- depends on VIDEO
-+ imply VIDEO_DAMAGE
- help
- Rockchip SoCs provide video output capabilities for High-Definition
- Multimedia Interface (HDMI), Low-voltage Differential Signalling
-diff --git a/drivers/video/stm32/Kconfig b/drivers/video/stm32/Kconfig
-index 48066063e4c5..c354c402c288 100644
---- a/drivers/video/stm32/Kconfig
-+++ b/drivers/video/stm32/Kconfig
-@@ -8,6 +8,7 @@
- menuconfig VIDEO_STM32
- bool "Enable STM32 video support"
- depends on VIDEO
-+ imply VIDEO_DAMAGE
- help
- STM32 supports many video output options including RGB and
- DSI. This option enables these supports which can be used on
-diff --git a/drivers/video/tegra20/Kconfig b/drivers/video/tegra20/Kconfig
-index f5c4843e1191..2232b0b3ff53 100644
---- a/drivers/video/tegra20/Kconfig
-+++ b/drivers/video/tegra20/Kconfig
-@@ -1,6 +1,7 @@
- config VIDEO_TEGRA20
- bool "Enable Display Controller support on Tegra20 and Tegra 30"
- depends on OF_CONTROL
-+ imply VIDEO_DAMAGE
- help
- T20/T30 support video output to an attached LCD panel as well as
- other options such as HDMI. Only the LCD is supported in U-Boot.
-diff --git a/drivers/video/tidss/Kconfig b/drivers/video/tidss/Kconfig
-index 95086f3a5d66..3291b3ceb8d5 100644
---- a/drivers/video/tidss/Kconfig
-+++ b/drivers/video/tidss/Kconfig
-@@ -11,6 +11,7 @@
- menuconfig VIDEO_TIDSS
- bool "Enable TIDSS video support"
- depends on VIDEO
-+ imply VIDEO_DAMAGE
- help
- TIDSS supports video output options LVDS and
- DPI . This option enables these supports which can be used on
---
-2.49.0
-
diff --git a/config/u-boot/default/patches/0004-HACK-Makefile-Ignore-missing-input-files-for-binman.patch b/config/u-boot/default/patches/0004-HACK-Makefile-Ignore-missing-input-files-for-binman.patch
deleted file mode 100644
index 5307f378..00000000
--- a/config/u-boot/default/patches/0004-HACK-Makefile-Ignore-missing-input-files-for-binman.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From faa87ed4d2ff07e9e8cc98cd08cbb34c905c1ac6 Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Wed, 10 Jul 2024 17:37:56 +0300
-Subject: [PATCH] HACK: Makefile: Ignore missing input files for binman images
-
-For Rockchip boards binman tries to build SPI and MMC images that
-require an externally built BL31 file to be provided, and the build
-fails otherwise.
-
-Some downstreams only care about build outputs for U-Boot proper. As a
-hack to make sure they can do so without passing in a BL31 file, tell
-binman to ignore missing input files.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index a7593e8a1680..30deb760bf8f 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1410,7 +1410,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
- $(if $(BINMAN_VERBOSE),-v$(BINMAN_VERBOSE)) \
- build -u -d $(binman_dtb) -O . -m \
- --allow-missing --fake-ext-blobs \
-- $(if $(BINMAN_ALLOW_MISSING),--ignore-missing) \
-+ --ignore-missing \
- -I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \
- $(foreach f,$(of_list_dirs),-I $(f)) -a of-list=$(of_list) \
- $(foreach f,$(BINMAN_INDIRS),-I $(f)) \
---
-2.49.0
-
diff --git a/config/u-boot/default/patches/0005-HACK-rk3399-gru-Remove-assigned-clock-dt-properties-.patch b/config/u-boot/default/patches/0005-HACK-rk3399-gru-Remove-assigned-clock-dt-properties-.patch
deleted file mode 100644
index 018da338..00000000
--- a/config/u-boot/default/patches/0005-HACK-rk3399-gru-Remove-assigned-clock-dt-properties-.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From d02163324baeb817ed55df41fac863cab4be038c Mon Sep 17 00:00:00 2001
-From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
-Date: Wed, 10 Jul 2024 14:32:19 +0300
-Subject: [PATCH] HACK: rk3399: gru: Remove assigned clock dt properties for
- EDP node
-
-Having the PCLK_EDP clock in the assigned-clocks property of the `edp`
-node means that U-Boot tries to set its rate automatically. This clock
-isn't implemented for the RK3399 clock driver, so it fails and prevents
-display from being initialized.
-
-The display happens to work fine without it, remove the property until
-the clock driver can handle the clock.
-
-Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
----
- arch/arm/dts/rk3399-gru-u-boot.dtsi | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/arch/arm/dts/rk3399-gru-u-boot.dtsi b/arch/arm/dts/rk3399-gru-u-boot.dtsi
-index 5517176aa4a0..9f40cf1e0208 100644
---- a/arch/arm/dts/rk3399-gru-u-boot.dtsi
-+++ b/arch/arm/dts/rk3399-gru-u-boot.dtsi
-@@ -27,6 +27,9 @@ &cros_ec {
-
- &edp {
- rockchip,panel = <&edp_panel>;
-+
-+ /delete-property/ assigned-clocks;
-+ /delete-property/ assigned-clock-rates;
- };
-
- &emmc_phy {
---
-2.49.0
-
diff --git a/config/u-boot/default/patches/0006-Support-auto-boot-timeout-delay-bootflow-menu.patch b/config/u-boot/default/patches/0006-Support-auto-boot-timeout-delay-bootflow-menu.patch
deleted file mode 100644
index ffc7b581..00000000
--- a/config/u-boot/default/patches/0006-Support-auto-boot-timeout-delay-bootflow-menu.patch
+++ /dev/null
@@ -1,302 +0,0 @@
-From d9371422ac74ea73d1620f01300a7136a7649754 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <info@minifree.org>
-Date: Wed, 4 Dec 2024 06:52:39 +0000
-Subject: [PATCH 1/1] Support auto-boot timeout delay bootflow menu
-
-The bootflow menu cannot currently auto-boot a selected entry,
-which means that the user must press enter to boot their system.
-This can be a problem on headless setups; for example, it is not
-currently feasible to set up a headless server with U-Boot, when
-using it to boot via UEFI on a coreboot setup.
-
-This patch adds the following build-time configuration option:
-
-CONFIG_CMD_BOOTFLOW_BOOTDELAY
-
-This creates a timeout delay in the given number of seconds.
-If an arrow key is press to navigate the menu, the timer is
-disabled and the user must then press enter to boot the selected
-option. When this happens, the timeout display is replaced by
-the old message indicating that the user should press enter.
-
-The default boot delay is 30 seconds, and the timeout is enabled
-by default. Setting it to zero will restore the old behaviour,
-whereby no timeout is provided and the user must press enter.
-
-If a negative integer is provided, the timer will default to
-zero. The timer value is further filtered by modulus of 100,
-so that the maximum number of seconds allowed is 99 seconds.
-
-Signed-off-by: Leah Rowe <info@minifree.org>
----
- boot/bootflow_menu.c | 117 +++++++++++++++++++++++++++++++++++--
- cmd/Kconfig | 12 ++++
- doc/usage/cmd/bootflow.rst | 11 ++++
- include/bootflow.h | 10 +++-
- 4 files changed, 143 insertions(+), 7 deletions(-)
-
-diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c
-index 9d0dc352f9..172139b187 100644
---- a/boot/bootflow_menu.c
-+++ b/boot/bootflow_menu.c
-@@ -30,7 +30,7 @@ struct menu_priv {
- int num_bootflows;
- };
-
--int bootflow_menu_new(struct expo **expp)
-+int bootflow_menu_new(struct expo **expp, const char *prompt)
- {
- struct udevice *last_bootdev;
- struct scene_obj_menu *menu;
-@@ -54,7 +54,7 @@ int bootflow_menu_new(struct expo **expp)
- return log_msg_ret("scn", ret);
-
- ret |= scene_txt_str(scn, "prompt", OBJ_PROMPT, STR_PROMPT,
-- "UP and DOWN to choose, ENTER to select", NULL);
-+ prompt, NULL);
-
- ret = scene_menu(scn, "main", OBJ_MENU, &menu);
- ret |= scene_obj_set_pos(scn, OBJ_MENU, MARGIN_LEFT, 100);
-@@ -138,6 +138,29 @@ int bootflow_menu_new(struct expo **expp)
- return 0;
- }
-
-+int bootflow_menu_show_countdown(struct expo *exp, char *prompt,
-+ char bootflow_delay)
-+{
-+ char *i;
-+
-+ if (prompt == NULL)
-+ return 0;
-+ if (strlen(prompt) < 2)
-+ return 0;
-+
-+ i = prompt + strlen(prompt) - 2;
-+
-+ if (bootflow_delay >= 10) {
-+ *(i) = 48 + (bootflow_delay / 10);
-+ *(i + 1) = 48 + (bootflow_delay % 10);
-+ } else {
-+ *(i) = 48 + bootflow_delay;
-+ *(i + 1) = ' ';
-+ }
-+
-+ return expo_render(exp);
-+}
-+
- int bootflow_menu_apply_theme(struct expo *exp, ofnode node)
- {
- struct menu_priv *priv = exp->priv;
-@@ -184,14 +207,62 @@ int bootflow_menu_run(struct bootstd_priv *std, bool text_mode,
- struct expo *exp;
- uint sel_id;
- bool done;
-- int ret;
-+ int i, ret;
-+
-+ /* Auto-boot countdown */
-+ char bootflow_delay_secs, *prompt;
-+ int bootflow_time, bootflow_delay;
-+ bool skip_render_once = false;
-+ bool bootflow_countdown = false;
-+
-+ /* TODO: perhaps set based on defconfig? */
-+ /* WARNING: These two strings must be of the same length. */
-+ char promptChoice[] = "UP and DOWN to choose, ENTER to select";
-+ char promptTimeout[] = "UP and DOWN to choose. Auto-boot in ";
-+/*
-+ // Uncomment if the strings become configurable (defconfig):
-+ // (to prevent buffer overflows)
-+ char promptDefault[] = "UP and DOWN to choose, ENTER to select";
-+ if (promptTimeout = NULL)
-+ promptTimeout = promptDefault;
-+ if (promptChoice = NULL)
-+ promptChoice = promptDefault;
-+ if (strlen(promptChoice) < 2)
-+ promptChoice = promptDefault;
-+ if (strlen(promptTimeout) < 2)
-+ promptTimeout = promptDefault;
-+ if (strlen(promptChoice) != strlen(promptTimeout))
-+ promptChoice = promptTimeout;
-+*/
-+ prompt = promptChoice;
-+
-+ bootflow_delay_secs = 15; /* TODO: set based on defconfig. */
-+
-+#if defined(CONFIG_CMD_BOOTFLOW_BOOTDELAY)
-+ /* If set to zero, the auto-boot timeout is disabled. */
-+ bootflow_delay_secs = CONFIG_CMD_BOOTFLOW_BOOTDELAY;
-+#else
-+ bootflow_delay_secs = 30;
-+#endif
-+
-+ if (bootflow_delay_secs < 0)
-+ bootflow_delay_secs = 0; /* disable countdown if negative */
-+ bootflow_delay_secs %= 100; /* No higher than 99 seconds */
-+
-+ if (bootflow_delay_secs > 0) {
-+ bootflow_countdown = true; /* enable auto-boot countdown */
-+ prompt = promptTimeout;
-+ bootflow_time = 0; /* Time elapsed in milliseconds */
-+ bootflow_delay =
-+ (int)bootflow_delay_secs * 1000; /* milliseconds */
-+ }
-
- cli_ch_init(cch);
-
- sel_bflow = NULL;
- *bflowp = NULL;
-
-- ret = bootflow_menu_new(&exp);
-+ ret = bootflow_menu_new(&exp, prompt);
- if (ret)
- return log_msg_ret("exp", ret);
-
-@@ -216,12 +287,20 @@ int bootflow_menu_run(struct bootstd_priv *std, bool text_mode,
- if (text_mode)
- expo_set_text_mode(exp, text_mode);
-
-+ if (bootflow_countdown) {
-+ ret = bootflow_menu_show_countdown(exp, prompt,
-+ bootflow_delay_secs);
-+ skip_render_once = true; /* Don't print menu twice on start */
-+ }
- done = false;
- do {
- struct expo_action act;
- int ichar, key;
-
-- ret = expo_render(exp);
-+ if (skip_render_once)
-+ skip_render_once = false;
-+ else
-+ ret = expo_render(exp);
- if (ret)
- break;
-
-@@ -231,7 +310,23 @@ int bootflow_menu_run(struct bootstd_priv *std, bool text_mode,
- schedule();
- mdelay(2);
- ichar = cli_ch_process(cch, -ETIMEDOUT);
-+ if (bootflow_countdown) {
-+ bootflow_delay -= 2;
-+ bootflow_time += 2;
-+ if (bootflow_delay <= 0)
-+ ichar='\n';
-+ if (bootflow_time < 1000)
-+ continue;
-+ bootflow_time = 0;
-+ --bootflow_delay_secs;
-+ ret = bootflow_menu_show_countdown(exp,
-+ prompt, bootflow_delay_secs);
-+ if (ret)
-+ break;
-+ }
- }
-+ if (ret)
-+ break;
- if (!ichar) {
- ichar = getchar();
- ichar = cli_ch_process(cch, ichar);
-@@ -265,6 +360,17 @@ int bootflow_menu_run(struct bootstd_priv *std, bool text_mode,
- break;
- }
- }
-+ if (bootflow_countdown) {
-+ /* A key press interrupted the auto-boot timeout */
-+ bootflow_countdown = false;
-+ if (strlen(prompt) == strlen(promptChoice)) {
-+ /* "Auto-boot in" becomes "Press ENTER" */
-+ (void) memcpy(prompt, promptChoice,
-+ strlen(promptChoice));
-+ ret = expo_render(exp);
-+ skip_render_once = true;
-+ }
-+ }
- } while (!done);
-
- if (ret)
-@@ -272,7 +378,6 @@ int bootflow_menu_run(struct bootstd_priv *std, bool text_mode,
-
- if (sel_id) {
- struct bootflow *bflow;
-- int i;
-
- for (ret = bootflow_first_glob(&bflow), i = 0; !ret && i < 36;
- ret = bootflow_next_glob(&bflow), i++) {
-diff --git a/cmd/Kconfig b/cmd/Kconfig
-index 978f44eda4..0303869625 100644
---- a/cmd/Kconfig
-+++ b/cmd/Kconfig
-@@ -288,6 +288,7 @@ config CMD_BOOTDEV
- config CMD_BOOTFLOW
- bool "bootflow"
- depends on BOOTSTD
-+ select CMD_BOOTFLOW_BOOTDELAY
- default y
- help
- Support scanning for bootflows available with the bootdevs. The
-@@ -303,6 +304,17 @@ config CMD_BOOTFLOW_FULL
-
- This command is not necessary for bootstd to work.
-
-+config CMD_BOOTFLOW_BOOTDELAY
-+ int "bootflow - delay in seconds before booting the first menu option"
-+ depends on CMD_BOOTFLOW
-+ default 30
-+ help
-+ On the bootflow menu, wait for the defined number of seconds before
-+ automatically booting. Unless interrupted, this will auto-boot the
-+ first option in the generated list of boot options.
-+
-+ Set this to zero if you wish to disable the auto-boot timeout.
-+
- config CMD_BOOTMETH
- bool "bootmeth"
- depends on BOOTSTD
-diff --git a/doc/usage/cmd/bootflow.rst b/doc/usage/cmd/bootflow.rst
-index 5d41fe37a7..728f294274 100644
---- a/doc/usage/cmd/bootflow.rst
-+++ b/doc/usage/cmd/bootflow.rst
-@@ -32,6 +32,17 @@ Note that `CONFIG_BOOTSTD_FULL` (which enables `CONFIG_CMD_BOOTFLOW_FULL) must
- be enabled to obtain full functionality with this command. Otherwise, it only
- supports `bootflow scan` which scans and boots the first available bootflow.
-
-+The `CONFIG_CMD_BOOTFLOW_BOOTDELAY` option can be set, defining (in seconds) the
-+amount of time that U-Boot will wait; after this time passes, it will
-+automatically boot the first item when generating a bootflow menu. If the value
-+is set to zero, the timeout is disabled and the user must press enter; if it's
-+negative, the timeout is disabled, and the maximum number of seconds is 99
-+seconds. If a value higher than 100 is provided, the value is changed to a
-+modulus of 100 (remainder of the value divided by 100).
-+
-+If the `CONFIG_BOOTFLOW_BOOTFLOW` option is undefined, the timeout will default
-+to 30 seconds.
-+
- bootflow scan
- ~~~~~~~~~~~~~
-
-diff --git a/include/bootflow.h b/include/bootflow.h
-index 4d2fc7b69b..9f4245caa7 100644
---- a/include/bootflow.h
-+++ b/include/bootflow.h
-@@ -452,7 +452,15 @@ int bootflow_iter_check_system(const struct bootflow_iter *iter);
- * @expp: Returns the expo created
- * Returns 0 on success, -ve on error
- */
--int bootflow_menu_new(struct expo **expp);
-+int bootflow_menu_new(struct expo **expp, const char *prompt);
-+
-+/**
-+ * bootflow_menu_show_countdown() - Show countdown timer for auto-boot
-+ *
-+ * Returns the value of expo_render()
-+ */
-+int bootflow_menu_show_countdown(struct expo *exp, char *prompt,
-+ char bootflow_delay);
-
- /**
- * bootflow_menu_apply_theme() - Apply a theme to a bootmenu
---
-2.39.5
-
diff --git a/config/u-boot/default/patches/0007-Libreboot-branding-version-on-the-bootflow-menu.patch b/config/u-boot/default/patches/0007-Libreboot-branding-version-on-the-bootflow-menu.patch
deleted file mode 100644
index ec033187..00000000
--- a/config/u-boot/default/patches/0007-Libreboot-branding-version-on-the-bootflow-menu.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-From 4ff0f509aa28eb8e85f1c0c9929c63996c646bb8 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <info@minifree.org>
-Date: Wed, 4 Dec 2024 18:20:19 +0000
-Subject: [PATCH 1/1] Libreboot branding/version on the bootflow menu
-
-Signed-off-by: Leah Rowe <info@minifree.org>
----
- boot/bootflow_menu.c | 2 +-
- drivers/video/u_boot_logo.bmp | Bin 6932 -> 27350 bytes
- 2 files changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c
-index 84831915a2..8e26ec2aef 100644
---- a/boot/bootflow_menu.c
-+++ b/boot/bootflow_menu.c
-@@ -59,7 +59,7 @@ int bootflow_menu_new(struct expo **expp, const char *prompt)
- ret = scene_menu(scn, "main", OBJ_MENU, &menu);
- ret |= scene_obj_set_pos(scn, OBJ_MENU, MARGIN_LEFT, 100);
- ret |= scene_txt_str(scn, "title", OBJ_MENU_TITLE, STR_MENU_TITLE,
-- "U-Boot - Boot Menu", NULL);
-+ "Libreboot 26.01 Magnanimous Max (U-Boot menu): https://libreboot.org/", NULL);
- ret |= scene_menu_set_title(scn, OBJ_MENU, OBJ_PROMPT);
-
- logo = video_get_u_boot_logo();
-diff --git a/drivers/video/u_boot_logo.bmp b/drivers/video/u_boot_logo.bmp
-index 47f1e9b99789584d2f6dd71e954b51927b35d783..bc9ae001badb25bc900058c167a47247ef91dc7c 100644
-GIT binary patch
-literal 27350
-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
-
-literal 6932
-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
-
---
-2.39.5
-
diff --git a/config/u-boot/default/patches/0008-u-boot-fix-build-error-on-newer-hostcc.patch b/config/u-boot/default/patches/0008-u-boot-fix-build-error-on-newer-hostcc.patch
deleted file mode 100644
index 8ddf398c..00000000
--- a/config/u-boot/default/patches/0008-u-boot-fix-build-error-on-newer-hostcc.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From d28edbe090d1d239530618a9142c5fee2705855f Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Wed, 1 Apr 2026 07:39:07 +0100
-Subject: [PATCH 1/1] u-boot: fix build error on newer hostcc
-
-because... they changed a flag.
-
-because they're gnu. this fixes building
-u-boot x86 on arch linux.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- arch/sandbox/config.mk | 4 ++--
- arch/x86/config.mk | 4 ++--
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk
-index dd9b7473fa9..d64dde93575 100644
---- a/arch/sandbox/config.mk
-+++ b/arch/sandbox/config.mk
-@@ -50,10 +50,10 @@ cmd_u-boot-spl = (cd $(obj) && \
-
- ifeq ($(HOST_ARCH),$(HOST_ARCH_X86_64))
- EFI_LDS := ${SRCDIR}/../../../arch/x86/lib/elf_x86_64_efi.lds
--EFI_TARGET := --target=efi-app-x86_64
-+EFI_TARGET := --output-target=efi-app-x86_64
- else ifeq ($(HOST_ARCH),$(HOST_ARCH_X86))
- EFI_LDS := ${SRCDIR}/../../../arch/x86/lib/elf_ia32_efi.lds
--EFI_TARGET := --target=efi-app-ia32
-+EFI_TARGET := --output-target=efi-app-ia32
- else ifeq ($(HOST_ARCH),$(HOST_ARCH_AARCH64))
- EFI_LDS := ${SRCDIR}/../../../arch/arm/lib/elf_aarch64_efi.lds
- OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .data \
-diff --git a/arch/x86/config.mk b/arch/x86/config.mk
-index 6d4839dfb38..878fd126243 100644
---- a/arch/x86/config.mk
-+++ b/arch/x86/config.mk
-@@ -127,7 +127,7 @@ endif
- endif
-
- ifdef CONFIG_X86_64
--EFI_TARGET := --target=efi-app-x86_64
-+EFI_TARGET := --output-target=efi-app-x86_64
- else
--EFI_TARGET := --target=efi-app-ia32
-+EFI_TARGET := --output-target=efi-app-ia32
- endif
---
-2.47.3
-
diff --git a/config/u-boot/default/target.cfg b/config/u-boot/default/target.cfg
deleted file mode 100644
index f3c856d4..00000000
--- a/config/u-boot/default/target.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-tree="default"
-rev="34820924edbc4ec7803eb89d9852f4b870fa760a" # v2025.04