Merge tag 'efi-2024-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi

Pull request efi-2024-01-rc1

Documentation:

* Bump urllib3 version
* Migrate Renesas board docs to rst
* Link an introduction video

UEFI

* Use same GUID as EDK II for auto-created boot options
* Clean up BitBlt test
diff --git a/doc/README.rmobile b/doc/README.rmobile
deleted file mode 100644
index 524d839..0000000
--- a/doc/README.rmobile
+++ /dev/null
@@ -1,99 +0,0 @@
-Summary
-=======
-
-This README is about U-Boot support for Renesas's ARM Cortex-A9 based RMOBILE[1]
-and Cortex-A9/A53/A57 based R-Car[2] family of SoCs. Renesas's RMOBILE/R-Car SoC
-family contains an ARM Cortex-A9/A53/A57.
-
-Currently the following boards are supported:
-
-| SoC           | Board                                  | defconfig
-|===============+========================================+===================
-| R8A73A0       | KMC KZM-A9-GT [3]                      | kzm9g_config
-| R8A7734       | Atmark-Techno Armadillo-800-EVA [4]    | armadillo-800eva_config
-|===============+========================================+===================
-| R8A7790  H2   | Renesas Electronics Lager              | lager_defconfig
-|               | Renesas Electronics Stout              | stout_defconfig
-|---------------+----------------------------------------+-------------------
-| R8A7791  M2-W | Renesas Electronics Koelsch            | koelsch_defconfig
-|               | Renesas Electronics Porter             | porter_defconfig
-|---------------+----------------------------------------+-------------------
-| R8A7792  V2H  | Renesas Electronics Blanche            | blanche_defconfig
-|---------------+----------------------------------------+-------------------
-| R8A7793  M2-N | Renesas Electronics Gose               | gose_defconfig
-|---------------+----------------------------------------+-------------------
-| R8A7794  E2   | Renesas Electronics Alt                | alt_defconfig
-|               | Renesas Electronics Silk               | silk_defconfig
-|===============+========================================+===================
-| R8A7795  H3   | Renesas Electronics Salvator-XS ES2.0+ | r8a7795_salvator-x_defconfig
-| R8A7795  H3   | Renesas Electronics ULCB ES2.0+        | r8a7795_ulcb
-|---------------+----------------------------------------+-------------------
-| R8A7796  M3-W | Renesas Electronics Salvator-X         | r8a7796_salvator-x_defconfig
-| R8A7796  M3-W | Renesas Electronics ULCB               | r8a7796_ulcb
-|---------------+----------------------------------------+-------------------
-| R8A77965 M3-N | Renesas Electronics Salvator-XS        | r8a77965_salvator-x_defconfig
-| R8A77965 M3-N | Renesas Electronics ULCB               | r8a77965_ulcb
-|---------------+----------------------------------------+-------------------
-| R8A77970 V3M  | Renesas Electronics Eagle              | r8a77970_eagle_defconfig
-| R8A77970 V3M  | Renesas Electronics V3MSK              | r8a77970_v3msk_defconfig
-|---------------+----------------------------------------+-------------------
-| R8A77995 D3   | Renesas Electronics Draak              | r8a77995_draak_defconfig
-'===============+========================================+===================
-
-Toolchain
-=========
-
-Either ARMv7 toolchain for 32bit Cortex-A9 systems or ARMv8 (aarch64)
-toolchain for 64bit Cortex-A53/A57 systems. Currently we compile the
-32bit systems with -march=armv5 to allow more compilers to work. (For
-U-Boot code this has no performance impact.)
-
-Currently, ELDK[5], Linaro[6], CodeSourcery[7] and Emdebian[8] supports
-ARMv7. Modern distributions also contain ARMv7 and ARMv8 crosstoolchains
-in their package feeds.
-
-Build
-=====
-
-Locate defconfig in the table above. Then apply standard build procedure:
-
-  make <board>_defconfig
-  make
-
-  Note: Armadillo-800-EVA's U-Boot supports booting from SDcard only.
-        Please see "B.2 Appendix B Boot Specifications" in hardware manual.
-
-Links
-=====
-
-[1] Renesas RMOBILE:
-
-http://am.renesas.com/products/soc/assp/mobile/r_mobile/index.jsp
-
-[2] Renesas R-Car:
-
-http://am.renesas.com/products/soc/assp/automotive/index.jsp
-
-[3] KZM-A9-GT
-
-http://www.kmckk.co.jp/kzma9-gt/index.html
-
-[4] Armadillo-800-EVA
-
-http://armadillo.atmark-techno.com/armadillo-800-EVA
-
-[5] ELDK
-
-http://www.denx.de/wiki/view/ELDK-5/WebHome#Section_1.6.
-
-[6] Linaro
-
-http://www.linaro.org/downloads/
-
-[7] CodeSourcey
-
-http://www.mentor.com/embedded-software/codesourcery
-
-[8] Emdebian
-
-http://www.emdebian.org/crosstools.html
diff --git a/doc/board/renesas/renesas.rst b/doc/board/renesas/renesas.rst
index 04dee8d..7d961e8 100644
--- a/doc/board/renesas/renesas.rst
+++ b/doc/board/renesas/renesas.rst
@@ -9,37 +9,230 @@
 This document describes the information about Renesas supported boards
 and their usage steps.
 
-Renesas boards
---------------
+Renesas SoC based boards
+------------------------
 
 Renesas is a SoC solutions provider for automotive and industrial applications.
 
-U-Boot supports several Renesas SoC families:
+.. list-table:: Supported Renesas SoC based boards
+   :widths: 10, 25, 15, 10, 25
+   :header-rows: 1
 
-* R-Car Gen2 (32-bit)
-    - Blanche board
-    - Gose board
-    - Koelsch board
-    - Lager board
-    - Silk board
-    - Porter board
-    - Stout board
-* R-Car Gen3 (64-bit)
-    - Condor board
-    - Draak board
-    - Eagle board
-    - Ebisu board
-    - Salvator-X and Salvator-XS boards
-    - ULCB board
-* R-Car Gen4 (64-bit)
-    - Falcon board
-    - Spider board
-    - Whitehawk board
-* RZ/A1 (32-bit)
-    - GR-PEACH board
-* RZ/G
-    - Beacon-rzg2 board
-    - Hihope-rzg2 board
-    - ek874 board
-* RZ/N1 (32-bit)
-    - Schneider rzn1-snarc board
+   * - Family
+     - Board
+     - SoC
+     - Arch
+     - defconfig
+
+   * - R2D
+     - R2D-PLUS
+     - SH7751
+     - sh
+     - r2dplus_defconfig
+
+   * - RZ/A1
+     - GR-PEACH
+     - R7S72100 (RZ/A1H)
+     - arm
+     - grpeach_defconfig
+
+   * - R-Car Gen2
+     - Lager
+     - R8A7790 (H2)
+     - arm
+     - lager_defconfig
+
+   * -
+     - Stout
+     - R8A7790 (H2)
+     - arm
+     - stout_defconfig
+
+   * -
+     - Koelsch
+     - R8A7791 (M2-W)
+     - arm
+     - koelsch_defconfig
+
+   * -
+     - Porter
+     - R8A7791 (M2-W)
+     - arm
+     - porter_defconfig
+
+   * -
+     - Blanche
+     - R8A7792 (V2H)
+     - arm
+     - blanche_defconfig
+
+   * -
+     - Gose
+     - R8A7793 (M2-N)
+     - arm
+     - gose_defconfig
+
+   * -
+     - Alt
+     - R8A7794 (E2)
+     - arm
+     - alt_defconfig
+
+   * -
+     - Silk
+     - R8A7794 (E2)
+     - arm
+     - silk_defconfig
+
+   * - R-Car Gen3
+     - Salvator-X(S)
+     - R8A77951 (H3)
+     - arm64
+     - rcar3_salvator-x_defconfig
+
+   * -
+     - ULCB
+     - R8A77951 (H3)
+     - arm64
+     - rcar3_ulcb_defconfig
+
+   * -
+     - Salvator-X(S)
+     - R8A77960 (M3-W)
+     - arm64
+     - rcar3_salvator-x_defconfig
+
+   * -
+     - ULCB
+     - R8A77960 (M3-W)
+     - arm64
+     - rcar3_ulcb_defconfig
+
+   * -
+     - Salvator-X(S)
+     - R8A77965 (M3-N)
+     - arm64
+     - rcar3_salvator-x_defconfig
+
+   * -
+     - ULCB
+     - R8A77965 (M3-N)
+     - arm64
+     - rcar3_ulcb_defconfig
+
+   * -
+     - Eagle
+     - R8A77970 (V3M)
+     - arm64
+     - r8a77970_eagle_defconfig
+
+   * -
+     - V3MSK
+     - R8A77970 (V3M)
+     - arm64
+     - r8a77970_v3msk_defconfig
+
+   * -
+     - Condor
+     - R8A77980 (V3H)
+     - arm64
+     - r8a77980_condor_defconfig
+
+   * -
+     - V3HSK
+     - R8A77980 (V3H)
+     - arm64
+     - r8a77980_v3hsk_defconfig
+
+   * -
+     - Ebisu
+     - R8A77990 (E3)
+     - arm64
+     - r8a77990_ebisu_defconfig
+
+   * -
+     - Draak
+     - R8A77995 (D3)
+     - arm64
+     - r8a77995_draak_defconfig
+
+   * - R-Car Gen4
+     - Falcon
+     - R8A779A0 (V3U)
+     - arm64
+     - r8a779a0_falcon_defconfig
+
+   * -
+     - Spider
+     - R8A779F0 (S4)
+     - arm64
+     - r8a779f0_spider_defconfig
+
+   * -
+     - White Hawk
+     - R8A779G0 (V4H)
+     - arm64
+     - r8a779g0_whitehawk_defconfig
+
+   * - RZ/G2 Family
+     - Beacon EmbeddedWorks RZ/G2M SoM
+     - R8A774A1 (RZ/G2M)
+     - arm64
+     - rzg2_beacon_defconfig
+
+   * -
+     - HopeRun HiHope RZ/G2M
+     - R8A774A1 (RZ/G2M)
+     - arm64
+     - hihope_rzg2_defconfig
+
+   * -
+     - Beacon EmbeddedWorks RZ/G2N SoM
+     - R8A774B1 (RZ/G2N)
+     - arm64
+     - rzg2_beacon_defconfig
+
+   * -
+     - HopeRun HiHope RZ/G2N
+     - R8A774B1 (RZ/G2N)
+     - arm64
+     - hihope_rzg2_defconfig
+
+   * -
+     - Silicon Linux RZ/G2E evaluation kit (EK874)
+     - R8A774C0 (RZ/G2E)
+     - arm64
+     - silinux_ek874_defconfig
+
+   * -
+     - Beacon EmbeddedWorks RZ/G2H SoM
+     - R8A774E1 (RZ/G2H)
+     - arm64
+     - rzg2_beacon_defconfig
+
+   * -
+     - HopeRun HiHope RZ/G2H
+     - R8A774E1 (RZ/G2H)
+     - arm64
+     - hihope_rzg2_defconfig
+
+   * - :doc:`RZ/N1 Family <rzn1>`
+     - Schneider RZ/N1D board
+     - R9A06G032 (RZ/N1D)
+     - arm64
+     - rzn1_snarc_defconfig
+
+   * -
+     - Schneider RZ/N1S board
+     - R9A06G033 (RZ/N1S)
+     - arm64
+     - rzn1_snarc_defconfig
+
+Build
+-----
+
+Locate the appropriate defconfig in the table above. Then apply standard build
+procedure::
+
+    make <board_defconfig>
+    make
diff --git a/doc/develop/cyclic.rst b/doc/develop/cyclic.rst
index 43bedac..6783149 100644
--- a/doc/develop/cyclic.rst
+++ b/doc/develop/cyclic.rst
@@ -8,11 +8,11 @@
 blinking etc. The functions that are hooked into this cyclic list should
 be small timewise as otherwise the execution of the other code that relies
 on a high frequent polling (e.g. UART rx char ready check) might be
-delayed too much. To detect cyclic functions with a too long execution
-time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` is introduced,
-which configures the max allowed time for such a cyclic function. If it's
-execution time exceeds this time, this cyclic function will get removed
-from the cyclic list.
+delayed too much. To detect cyclic functions with an excessive execution
+time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` was introduced.
+It defines the maximum allowable execution time for such a cyclic function. The
+first time the execution of a cyclic function exceeds this interval, a warning
+will be displayed indicating the problem to the user.
 
 Registering a cyclic function
 -----------------------------
diff --git a/doc/learn/talks.rst b/doc/learn/talks.rst
index 0bb44ae..d65e3b9 100644
--- a/doc/learn/talks.rst
+++ b/doc/learn/talks.rst
@@ -15,6 +15,9 @@
   <https://www.youtube.com/watch?v=YlJBsVZJkDI>`__
   from Embedded Linux Conference 2023.
 
+* `Introduction to U-Boot for beginners
+  <https://www.youtube.com/watch?v=rVaiLgXccSE>`__
+
 See elinux_talks_ for a more comprehensive list.
 
 .. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot
diff --git a/doc/sphinx/requirements.txt b/doc/sphinx/requirements.txt
index 6ccbe52..6d45a3f 100644
--- a/doc/sphinx/requirements.txt
+++ b/doc/sphinx/requirements.txt
@@ -23,4 +23,4 @@
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.3
 sphinxcontrib-serializinghtml==1.1.5
-urllib3==1.26.9
+urllib3==2.0.6
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 4a29dda..e244105 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -149,8 +149,8 @@
 
 /* GUID for the auto generated boot menu entry */
 #define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
-	EFI_GUID(0x38c1acc1, 0x9fc0, 0x41f0, \
-		 0xb9, 0x01, 0xfa, 0x74, 0xd6, 0xd6, 0xe4, 0xde)
+	EFI_GUID(0x8108ac4e, 0x9f11, 0x4d59, \
+		 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2)
 
 /* Use internal device tree when starting UEFI application */
 #define EFI_FDT_USE_INTERNAL NULL
diff --git a/lib/efi_selftest/efi_selftest_bitblt.c b/lib/efi_selftest/efi_selftest_bitblt.c
index 1def843..605078b 100644
--- a/lib/efi_selftest/efi_selftest_bitblt.c
+++ b/lib/efi_selftest/efi_selftest_bitblt.c
@@ -14,6 +14,12 @@
 #define HEIGHT	120
 #define DEPTH	 60
 
+struct pos {
+	efi_uintn_t x;
+	efi_uintn_t y;
+	int redrawn;
+};
+
 static const struct efi_gop_pixel BLACK =	{  0,   0,   0, 0};
 static const struct efi_gop_pixel RED =		{  0,   0, 255, 0};
 static const struct efi_gop_pixel ORANGE =	{  0, 128, 255, 0};
@@ -27,7 +33,7 @@
 static struct efi_gop *gop;
 static struct efi_gop_pixel *bitmap;
 static struct efi_event *event;
-static efi_uintn_t xpos;
+static struct pos pos;
 
 static void ellipse(efi_uintn_t x, efi_uintn_t y,
 		    efi_uintn_t x0, efi_uintn_t y0,
@@ -62,31 +68,33 @@
  */
 static void EFIAPI notify(struct efi_event *event, void *context)
 {
-	efi_uintn_t *pos = context;
+	struct pos *pos = context;
 	efi_uintn_t dx, sx, width;
 
 	if (!pos)
 		return;
 
 	/* Increment position */
-	*pos += 5;
-	if (*pos >= WIDTH + gop->mode->info->width)
-		*pos = 0;
+	pos->x += 5;
+	if (pos->x >= WIDTH + gop->mode->info->width)
+		pos->x = 0;
 
 	width = WIDTH;
-	dx = *pos - WIDTH;
+	dx = pos->x - WIDTH;
 	sx = 0;
-	if (*pos >= gop->mode->info->width) {
-		width = WIDTH +  gop->mode->info->width - *pos;
-	} else if (*pos < WIDTH) {
+	if (pos->x >= gop->mode->info->width) {
+		width = WIDTH +  gop->mode->info->width - pos->x;
+	} else if (pos->x < WIDTH) {
 		dx = 0;
-		sx = WIDTH - *pos;
-		width = *pos;
+		sx = WIDTH - pos->x;
+		width = pos->x;
 	}
 
 	/* Copy image to video */
-	gop->blt(gop, bitmap, EFI_BLT_BUFFER_TO_VIDEO, sx, 0, dx, DEPTH,
+	gop->blt(gop, bitmap, EFI_BLT_BUFFER_TO_VIDEO, sx, 0, dx, pos->y,
 		 width, HEIGHT, WIDTH * sizeof(struct efi_gop_pixel));
+
+	pos->redrawn = 1;
 }
 
 /*
@@ -107,7 +115,7 @@
 
 	/* Create event */
 	ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL,
-				     TPL_CALLBACK, notify, (void *)&xpos,
+				     TPL_CALLBACK, notify, (void *)&pos,
 				     &event);
 	if (ret != EFI_SUCCESS) {
 		efi_st_error("could not create event\n");
@@ -247,6 +255,9 @@
 		return EFI_ST_FAILURE;
 	}
 
+	con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
+	con_out->clear_screen(con_out);
+
 	/* Fill background */
 	ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0,
 		       info->width, info->height, 0);
@@ -281,21 +292,53 @@
 		return EFI_ST_FAILURE;
 	}
 
-	/* Set 250ms timer */
-	xpos = WIDTH;
+	/* Set 25ms timer */
+	pos.x = WIDTH;
+	pos.y = DEPTH;
 	ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000);
 	if (ret != EFI_SUCCESS) {
 		efi_st_error("Could not set timer\n");
 		return EFI_ST_FAILURE;
 	}
 
-	con_out->set_cursor_position(con_out, 0, 0);
-	con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
 	efi_st_printf("The submarine should have three yellow port holes.\n");
-	efi_st_printf("Press any key to continue");
-	efi_st_get_key();
+	efi_st_printf("UP, DOWN to navigate, any other key to quit");
+	for (;;) {
+		struct efi_input_key input_key;
+
+		ret = boottime->check_event(con_in->wait_for_key);
+		if (ret == EFI_NOT_READY)
+			continue;
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("CheckEvent failed %x\n",
+				     (unsigned int)ret);
+			return EFI_ST_FAILURE;
+		}
+		ret = con_in->read_key_stroke(con_in, &input_key);
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("Key not available %x\n",
+				     (unsigned int)ret);
+			return EFI_ST_FAILURE;
+		}
+		switch (input_key.scan_code) {
+		case 0x01: /* UP */
+			if (pos.redrawn && pos.y >= 5) {
+				pos.y -= 5;
+				pos.redrawn = 0;
+			}
+			continue;
+		case 0x02: /* DOWN */
+			if (pos.redrawn &&
+			    pos.y + HEIGHT + 5 < gop->mode->info->height) {
+				pos.y += 5;
+				pos.redrawn = 0;
+			}
+			continue;
+		}
+		break;
+	}
 	con_out->set_attribute(con_out, EFI_LIGHTGRAY);
-	efi_st_printf("\n");
+	con_out->clear_screen(con_out);
 
 	return EFI_ST_SUCCESS;
 }