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
 -----BEGIN PGP SIGNATURE-----
 
 iQJWBAABCABAFiEEK7wKXt3/btL6/yA+hO4vgnE3U0sFAmUpWAsiHGhlaW5yaWNo
 LnNjaHVjaGFyZHRAY2Fub25pY2FsLmNvbQAKCRCE7i+CcTdTS8+uD/9VGzgUXq9d
 SJLXOXYDEO70lu72OTFPWOVjkHx/p8AM+xvQDMbm7WvJnMcjJh7xqp/kSrhEhj0p
 NQ9eUDcrtNM0f5xaab15NePGLkXDwdLXtlw/hBPfwI1i9YJeqbrKhDfVfb1cZUsd
 9TxJXk3PNw0Z/DMRc9vW8Y+tF1uSUZlwn9XXwDay9By7x2vN+u83mQXgVb9MgqPG
 dzWYce2eP11ieY5NQ6C3ojsDLT0XauV30EDGg1bBLh5rJvs0pjrw62bJzezqlvFI
 aEh5aRJA3gSIqp+fbithIOpo8oJx6vi8+EGaCtntpyygP2J1P2XxtIr4bTCVnUZn
 CNZqiqbHzC9/I6n4BSzy9xezhbDgmpRLuG0OYvTHgaHAJdTklEFg7vDzZTbqLEBg
 75vq4E3FnV3Frmv1nzTESnwvqd38k0nwHrtfnF9GqNu8SyanlF+v3BNvZnI5QjzO
 JIsRWyhncj1+cONULVLtoQgTD9+sPatfDQsWhkj1m55OtZ/QwCVIHTl8hhXpex2w
 wh1REzH4WQkWMHOm4I/0V/YnNU+vlU6Pk07WBo6Wf9WaN6LTfH2QqJl4A1TNvYb6
 64MUKXkdztuT/LnFD64Ji8qzf8X2aab+hKGcrJ58XvjrI4Us6obqyoyAXN+Ui2oa
 PiADhUXm9VKxPP+k+tF/VVBJ8ZZ4LPlqHA==
 =vtF1
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Tom Rini 2023-10-13 11:08:10 -04:00
commit d5d24e2e0a
7 changed files with 297 additions and 157 deletions

View File

@ -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

View File

@ -9,37 +9,230 @@ About this
This document describes the information about Renesas supported boards This document describes the information about Renesas supported boards
and their usage steps. and their usage steps.
Renesas boards Renesas SoC based boards
-------------- ------------------------
Renesas is a SoC solutions provider for automotive and industrial applications. 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) * - Family
- Blanche board - Board
- Gose board - SoC
- Koelsch board - Arch
- Lager board - defconfig
- Silk board
- Porter board * - R2D
- Stout board - R2D-PLUS
* R-Car Gen3 (64-bit) - SH7751
- Condor board - sh
- Draak board - r2dplus_defconfig
- Eagle board
- Ebisu board * - RZ/A1
- Salvator-X and Salvator-XS boards - GR-PEACH
- ULCB board - R7S72100 (RZ/A1H)
* R-Car Gen4 (64-bit) - arm
- Falcon board - grpeach_defconfig
- Spider board
- Whitehawk board * - R-Car Gen2
* RZ/A1 (32-bit) - Lager
- GR-PEACH board - R8A7790 (H2)
* RZ/G - arm
- Beacon-rzg2 board - lager_defconfig
- Hihope-rzg2 board
- ek874 board * -
* RZ/N1 (32-bit) - Stout
- Schneider rzn1-snarc board - 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

View File

@ -8,11 +8,11 @@ execute code, e.g. every 100ms. Examples for such functions might be LED
blinking etc. The functions that are hooked into this cyclic list should 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 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 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 delayed too much. To detect cyclic functions with an excessive execution
time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` is introduced, time, the Kconfig option `CONFIG_CYCLIC_MAX_CPU_TIME_US` was introduced.
which configures the max allowed time for such a cyclic function. If it's It defines the maximum allowable execution time for such a cyclic function. The
execution time exceeds this time, this cyclic function will get removed first time the execution of a cyclic function exceeds this interval, a warning
from the cyclic list. will be displayed indicating the problem to the user.
Registering a cyclic function Registering a cyclic function
----------------------------- -----------------------------

View File

@ -15,6 +15,9 @@ learn a bit about U-Boot:
<https://www.youtube.com/watch?v=YlJBsVZJkDI>`__ <https://www.youtube.com/watch?v=YlJBsVZJkDI>`__
from Embedded Linux Conference 2023. 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. See elinux_talks_ for a more comprehensive list.
.. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot .. _elinux_talks: https://elinux.org/Boot_Loaders#U-Boot

View File

@ -23,4 +23,4 @@ sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1 sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3 sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5 sphinxcontrib-serializinghtml==1.1.5
urllib3==1.26.9 urllib3==2.0.6

View File

@ -149,8 +149,8 @@ static inline efi_status_t efi_launch_capsules(void)
/* GUID for the auto generated boot menu entry */ /* GUID for the auto generated boot menu entry */
#define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \ #define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
EFI_GUID(0x38c1acc1, 0x9fc0, 0x41f0, \ EFI_GUID(0x8108ac4e, 0x9f11, 0x4d59, \
0xb9, 0x01, 0xfa, 0x74, 0xd6, 0xd6, 0xe4, 0xde) 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2)
/* Use internal device tree when starting UEFI application */ /* Use internal device tree when starting UEFI application */
#define EFI_FDT_USE_INTERNAL NULL #define EFI_FDT_USE_INTERNAL NULL

View File

@ -14,6 +14,12 @@
#define HEIGHT 120 #define HEIGHT 120
#define DEPTH 60 #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 BLACK = { 0, 0, 0, 0};
static const struct efi_gop_pixel RED = { 0, 0, 255, 0}; static const struct efi_gop_pixel RED = { 0, 0, 255, 0};
static const struct efi_gop_pixel ORANGE = { 0, 128, 255, 0}; static const struct efi_gop_pixel ORANGE = { 0, 128, 255, 0};
@ -27,7 +33,7 @@ static efi_guid_t efi_gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
static struct efi_gop *gop; static struct efi_gop *gop;
static struct efi_gop_pixel *bitmap; static struct efi_gop_pixel *bitmap;
static struct efi_event *event; 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, static void ellipse(efi_uintn_t x, efi_uintn_t y,
efi_uintn_t x0, efi_uintn_t y0, efi_uintn_t x0, efi_uintn_t y0,
@ -62,31 +68,33 @@ static void rectangle(efi_uintn_t x, efi_uintn_t y,
*/ */
static void EFIAPI notify(struct efi_event *event, void *context) 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; efi_uintn_t dx, sx, width;
if (!pos) if (!pos)
return; return;
/* Increment position */ /* Increment position */
*pos += 5; pos->x += 5;
if (*pos >= WIDTH + gop->mode->info->width) if (pos->x >= WIDTH + gop->mode->info->width)
*pos = 0; pos->x = 0;
width = WIDTH; width = WIDTH;
dx = *pos - WIDTH; dx = pos->x - WIDTH;
sx = 0; sx = 0;
if (*pos >= gop->mode->info->width) { if (pos->x >= gop->mode->info->width) {
width = WIDTH + gop->mode->info->width - *pos; width = WIDTH + gop->mode->info->width - pos->x;
} else if (*pos < WIDTH) { } else if (pos->x < WIDTH) {
dx = 0; dx = 0;
sx = WIDTH - *pos; sx = WIDTH - pos->x;
width = *pos; width = pos->x;
} }
/* Copy image to video */ /* 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)); width, HEIGHT, WIDTH * sizeof(struct efi_gop_pixel));
pos->redrawn = 1;
} }
/* /*
@ -107,7 +115,7 @@ static int setup(const efi_handle_t handle,
/* Create event */ /* Create event */
ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL, ret = boottime->create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK, notify, (void *)&xpos, TPL_CALLBACK, notify, (void *)&pos,
&event); &event);
if (ret != EFI_SUCCESS) { if (ret != EFI_SUCCESS) {
efi_st_error("could not create event\n"); efi_st_error("could not create event\n");
@ -247,6 +255,9 @@ static int execute(void)
return EFI_ST_FAILURE; return EFI_ST_FAILURE;
} }
con_out->set_attribute(con_out, EFI_WHITE | EFI_BACKGROUND_BLUE);
con_out->clear_screen(con_out);
/* Fill background */ /* Fill background */
ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0, ret = gop->blt(gop, bitmap, EFI_BLT_VIDEO_FILL, 0, 0, 0, 0,
info->width, info->height, 0); info->width, info->height, 0);
@ -281,21 +292,53 @@ static int execute(void)
return EFI_ST_FAILURE; return EFI_ST_FAILURE;
} }
/* Set 250ms timer */ /* Set 25ms timer */
xpos = WIDTH; pos.x = WIDTH;
pos.y = DEPTH;
ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000); ret = boottime->set_timer(event, EFI_TIMER_PERIODIC, 250000);
if (ret != EFI_SUCCESS) { if (ret != EFI_SUCCESS) {
efi_st_error("Could not set timer\n"); efi_st_error("Could not set timer\n");
return EFI_ST_FAILURE; 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("The submarine should have three yellow port holes.\n");
efi_st_printf("Press any key to continue"); efi_st_printf("UP, DOWN to navigate, any other key to quit");
efi_st_get_key(); 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); con_out->set_attribute(con_out, EFI_LIGHTGRAY);
efi_st_printf("\n"); con_out->clear_screen(con_out);
return EFI_ST_SUCCESS; return EFI_ST_SUCCESS;
} }