Re: [U-Boot] [PATCH v2 14/18] bootvx: x86: Make VxWorks EFI console driver happy

2018-04-16 Thread Bin Meng
On Fri, Apr 13, 2018 at 12:42 AM, Simon Glass  wrote:
> On 11 April 2018 at 23:02, Bin Meng  wrote:
>> When booting from EFI BIOS, VxWorks bootloader stores the EFI GOP
>> framebuffer info at a pre-defined offset @ 0x6100. When VxWorks
>> kernel boots up, its EFI console driver tries to find such a block
>> and if the signature matches, the framebuffer information will be
>> used to initialize the driver.
>>
>> However it is not necessary to prepare an EFI environment for
>> VxWorks's EFI console driver to function (eg: EFI loader in
>> U-Boot). If U-Boot has already initialized the graphics card and
>> set it to a VESA mode that is compatible with EFI GOP, we can
>> simply prepare such a block for VxWorks.
>>
>> Signed-off-by: Bin Meng 
>> ---
>>
>> Changes in v2: None
>>
>>  cmd/elf.c | 19 +++
>>  include/vxworks.h | 26 ++
>>  2 files changed, 45 insertions(+)
>
> Reviewed-by: Simon Glass 

applied to u-boot-x86, thanks!
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v2 14/18] bootvx: x86: Make VxWorks EFI console driver happy

2018-04-12 Thread Simon Glass
On 11 April 2018 at 23:02, Bin Meng  wrote:
> When booting from EFI BIOS, VxWorks bootloader stores the EFI GOP
> framebuffer info at a pre-defined offset @ 0x6100. When VxWorks
> kernel boots up, its EFI console driver tries to find such a block
> and if the signature matches, the framebuffer information will be
> used to initialize the driver.
>
> However it is not necessary to prepare an EFI environment for
> VxWorks's EFI console driver to function (eg: EFI loader in
> U-Boot). If U-Boot has already initialized the graphics card and
> set it to a VESA mode that is compatible with EFI GOP, we can
> simply prepare such a block for VxWorks.
>
> Signed-off-by: Bin Meng 
> ---
>
> Changes in v2: None
>
>  cmd/elf.c | 19 +++
>  include/vxworks.h | 26 ++
>  2 files changed, 45 insertions(+)

Reviewed-by: Simon Glass 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 14/18] bootvx: x86: Make VxWorks EFI console driver happy

2018-04-11 Thread Bin Meng
When booting from EFI BIOS, VxWorks bootloader stores the EFI GOP
framebuffer info at a pre-defined offset @ 0x6100. When VxWorks
kernel boots up, its EFI console driver tries to find such a block
and if the signature matches, the framebuffer information will be
used to initialize the driver.

However it is not necessary to prepare an EFI environment for
VxWorks's EFI console driver to function (eg: EFI loader in
U-Boot). If U-Boot has already initialized the graphics card and
set it to a VESA mode that is compatible with EFI GOP, we can
simply prepare such a block for VxWorks.

Signed-off-by: Bin Meng 
---

Changes in v2: None

 cmd/elf.c | 19 +++
 include/vxworks.h | 26 ++
 2 files changed, 45 insertions(+)

diff --git a/cmd/elf.c b/cmd/elf.c
index 8a0e7d9..cd98392 100644
--- a/cmd/elf.c
+++ b/cmd/elf.c
@@ -19,6 +19,7 @@
 #include 
 #include 
 #ifdef CONFIG_X86
+#include 
 #include 
 #include 
 #endif
@@ -253,6 +254,8 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
ulong base;
struct e820_info *info;
struct e820_entry *data;
+   struct efi_gop_info *gop;
+   struct vesa_mode_info *vesa = _info.vesa;
 #endif
 
/*
@@ -396,6 +399,22 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
 * available memory size for the kernel is insane.
 */
*(u32 *)(base + BOOT_IMAGE_SIZE_OFFSET) = 0;
+
+   /*
+* Prepare compatible framebuffer information block.
+* The VESA mode has to be 32-bit RGBA.
+*/
+   if (vesa->x_resolution && vesa->y_resolution) {
+   gop = (struct efi_gop_info *)(base + EFI_GOP_INFO_OFFSET);
+   gop->magic = EFI_GOP_INFO_MAGIC;
+   gop->info.version = 0;
+   gop->info.width = vesa->x_resolution;
+   gop->info.height = vesa->y_resolution;
+   gop->info.pixel_format = EFI_GOT_RGBA8;
+   gop->info.pixels_per_scanline = vesa->bytes_per_scanline / 4;
+   gop->fb_base = vesa->phys_base_ptr;
+   gop->fb_size = vesa->bytes_per_scanline * vesa->y_resolution;
+   }
 #endif
 
/*
diff --git a/include/vxworks.h b/include/vxworks.h
index 4a83a34..b1b5096 100644
--- a/include/vxworks.h
+++ b/include/vxworks.h
@@ -8,6 +8,8 @@
 #ifndef _VXWORKS_H_
 #define _VXWORKS_H_
 
+#include 
+
 /*
  * Physical address of memory base for VxWorks x86
  * This is LOCAL_MEM_LOCAL_ADRS in the VxWorks kernel configuration.
@@ -52,6 +54,30 @@ struct e820_info {
  */
 #define BOOT_IMAGE_SIZE_OFFSET 0x5004
 
+/*
+ * When booting from EFI BIOS, VxWorks bootloader stores the EFI GOP
+ * framebuffer info at a pre-defined offset @ 0x6100. When VxWorks kernel
+ * boots up, its EFI console driver tries to find such a block and if
+ * the signature matches, the framebuffer information will be used to
+ * initialize the driver.
+ *
+ * However it is not necessary to prepare an EFI environment for VxWorks's
+ * EFI console driver to function (eg: EFI loader in U-Boot). If U-Boot has
+ * already initialized the graphics card and set it to a VESA mode that is
+ * compatible with EFI GOP, we can simply prepare such a block for VxWorks.
+ */
+#define EFI_GOP_INFO_OFFSET0x6100
+
+/* EFI GOP info signatiure */
+#define EFI_GOP_INFO_MAGIC 0xfeedface
+
+struct efi_gop_info {
+   u32 magic;  /* signature */
+   struct efi_gop_mode_info info;  /* EFI GOP mode info structure */
+   phys_addr_t fb_base;/* framebuffer base address */
+   u32 fb_size;/* framebuffer size */
+};
+
 int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 void boot_prep_vxworks(bootm_headers_t *images);
 void boot_jump_vxworks(bootm_headers_t *images);
-- 
2.7.4

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot