public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement
@ 2016-06-06 22:57 Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 1/5] efi_loader: Allow boards to implement get_time and reset_system Alexander Graf
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

This is a follow-up to the RTS patch set from yesterday.

With this patch set I can successfully boot a Raspberry Pi 3 into Linux, with
efifb, efi based reset/power off and spin table secondary bringup working.

I've put all of this into a single patch set so it doesn't get lost.
In theory most patches could live by themselves, but it doesn't make
much sense to introduce frameworks without adding users to them :).

Enjoy,

Alex

Alexander Graf (5):
  efi_loader: Allow boards to implement get_time and reset_system
  ARM: bcm283x: Implement EFI RTS reset_system
  efi_loader: gop: Expose fb when 32bpp
  bcm2835 video: Map frame buffer as 32bpp
  bcm2835: Reserve the spin table in efi memory map

 arch/arm/mach-bcm283x/include/mach/wdog.h |   2 +-
 arch/arm/mach-bcm283x/reset.c             |  59 +++++++++++++++--
 board/raspberrypi/rpi/rpi.c               |   6 ++
 cmd/bootefi.c                             |   4 ++
 drivers/video/bcm2835.c                   |   6 +-
 include/configs/rpi.h                     |   2 +-
 include/efi_loader.h                      |  18 ++++++
 lib/efi_loader/efi_gop.c                  |  16 +++++
 lib/efi_loader/efi_runtime.c              | 101 ++++++++++++++++++++++++++----
 9 files changed, 192 insertions(+), 22 deletions(-)

-- 
1.8.5.6

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 1/5] efi_loader: Allow boards to implement get_time and reset_system
  2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
@ 2016-06-06 22:57 ` Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 2/5] ARM: bcm283x: Implement EFI RTS reset_system Alexander Graf
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

EFI allows an OS to leverage firmware drivers while the OS is running. In the
generic code we so far had to stub those implementations out, because we would
need board specific knowledge about MMIO setups for it.

However, boards can easily implement those themselves. This patch provides the
framework so that a board can implement its own versions of get_time and
reset_system which would actually do something useful.

While at it we also introduce a simple way for code to reserve MMIO pointers
as runtime available.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 cmd/bootefi.c                |   4 ++
 include/efi_loader.h         |  18 ++++++++
 lib/efi_loader/efi_runtime.c | 101 ++++++++++++++++++++++++++++++++++++++-----
 3 files changed, 112 insertions(+), 11 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 2169065..edbe0b4 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -205,6 +205,10 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt)
 		loaded_image_info.device_handle = nethandle;
 #endif
 
+	/* Initialize EFI runtime services */
+	efi_reset_system_init();
+	efi_get_time_init();
+
 	/* Call our payload! */
 	debug("%s:%d Jumping to 0x%lx\n", __func__, __LINE__, (long)entry);
 
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 9738835..91d6a84 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -150,11 +150,29 @@ static inline void ascii2unicode(u16 *unicode, const char *ascii)
 #define EFI_RUNTIME_DATA __attribute__ ((section ("efi_runtime_data")))
 #define EFI_RUNTIME_TEXT __attribute__ ((section ("efi_runtime_text")))
 
+/* Call this with mmio_ptr as the _pointer_ to a pointer to an MMIO region
+ * to make it available at runtime */
+void efi_add_runtime_mmio(void *mmio_ptr, u64 len);
+
+/* Boards may provide the functions below to implement RTS functionality */
+
+void EFI_RUNTIME_TEXT EFIAPI efi_reset_system(
+			enum efi_reset_type reset_type,
+			efi_status_t reset_status,
+			unsigned long data_size, void *reset_data);
+void efi_reset_system_init(void);
+
+efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_get_time(
+			struct efi_time *time,
+			struct efi_time_cap *capabilities);
+void efi_get_time_init(void);
+
 #else /* defined(EFI_LOADER) && !defined(CONFIG_SPL_BUILD) */
 
 /* Without CONFIG_EFI_LOADER we don't have a runtime section, stub it out */
 #define EFI_RUNTIME_DATA
 #define EFI_RUNTIME_TEXT
+static inline void efi_add_runtime_mmio(void **mmio_ptr, u64 len) { }
 
 /* No loader configured, stub out EFI_ENTRY */
 static inline void efi_restore_gd(void) { }
diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c
index 99b5ef1..5301d68 100644
--- a/lib/efi_loader/efi_runtime.c
+++ b/lib/efi_loader/efi_runtime.c
@@ -16,6 +16,16 @@
 /* For manual relocation support */
 DECLARE_GLOBAL_DATA_PTR;
 
+struct efi_runtime_mmio_list {
+	struct list_head link;
+	void **ptr;
+	u64 paddr;
+	u64 len;
+};
+
+/* This list contains all runtime available mmio regions */
+LIST_HEAD(efi_runtime_mmio);
+
 static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_unimplemented(void);
 static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_device_error(void);
 static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_invalid_parameter(void);
@@ -55,9 +65,10 @@ struct elf_rela {
  * handle a good number of runtime callbacks
  */
 
-static void EFIAPI efi_reset_system(enum efi_reset_type reset_type,
-				    efi_status_t reset_status,
-				    unsigned long data_size, void *reset_data)
+static void EFIAPI efi_reset_system_boottime(
+			enum efi_reset_type reset_type,
+			efi_status_t reset_status,
+			unsigned long data_size, void *reset_data)
 {
 	EFI_ENTRY("%d %lx %lx %p", reset_type, reset_status, data_size,
 		  reset_data);
@@ -72,11 +83,12 @@ static void EFIAPI efi_reset_system(enum efi_reset_type reset_type,
 		break;
 	}
 
-	EFI_EXIT(EFI_SUCCESS);
+	while (1) { }
 }
 
-static efi_status_t EFIAPI efi_get_time(struct efi_time *time,
-					struct efi_time_cap *capabilities)
+static efi_status_t EFIAPI efi_get_time_boottime(
+			struct efi_time *time,
+			struct efi_time_cap *capabilities)
 {
 #if defined(CONFIG_CMD_DATE) && defined(CONFIG_DM_RTC)
 	struct rtc_time tm;
@@ -107,6 +119,33 @@ static efi_status_t EFIAPI efi_get_time(struct efi_time *time,
 #endif
 }
 
+/* Boards may override the helpers below to implement RTS functionality */
+
+void __weak EFI_RUNTIME_TEXT EFIAPI efi_reset_system(
+			enum efi_reset_type reset_type,
+			efi_status_t reset_status,
+			unsigned long data_size, void *reset_data)
+{
+	/* Nothing we can do */
+	while (1) { }
+}
+
+void __weak efi_reset_system_init(void)
+{
+}
+
+efi_status_t __weak EFI_RUNTIME_TEXT EFIAPI efi_get_time(
+			struct efi_time *time,
+			struct efi_time_cap *capabilities)
+{
+	/* Nothing we can do */
+	return EFI_DEVICE_ERROR;
+}
+
+void __weak efi_get_time_init(void)
+{
+}
+
 struct efi_runtime_detach_list_struct {
 	void *ptr;
 	void *patchto;
@@ -116,7 +155,7 @@ static const struct efi_runtime_detach_list_struct efi_runtime_detach_list[] = {
 	{
 		/* do_reset is gone */
 		.ptr = &efi_runtime_services.reset_system,
-		.patchto = NULL,
+		.patchto = efi_reset_system,
 	}, {
 		/* invalidate_*cache_all are gone */
 		.ptr = &efi_runtime_services.set_virtual_address_map,
@@ -124,7 +163,7 @@ static const struct efi_runtime_detach_list_struct efi_runtime_detach_list[] = {
 	}, {
 		/* RTC accessors are gone */
 		.ptr = &efi_runtime_services.get_time,
-		.patchto = &efi_device_error,
+		.patchto = &efi_get_time,
 	}, {
 		/* Clean up system table */
 		.ptr = &systab.con_in,
@@ -233,12 +272,38 @@ static efi_status_t EFIAPI efi_set_virtual_address_map(
 	EFI_ENTRY("%lx %lx %x %p", memory_map_size, descriptor_size,
 		  descriptor_version, virtmap);
 
+	/* Rebind mmio pointers */
+	for (i = 0; i < n; i++) {
+		struct efi_mem_desc *map = (void*)virtmap +
+					   (descriptor_size * i);
+		struct list_head *lhandle;
+		efi_physical_addr_t map_start = map->physical_start;
+		efi_physical_addr_t map_len = map->num_pages << EFI_PAGE_SHIFT;
+		efi_physical_addr_t map_end = map_start + map_len;
+
+		/* Adjust all mmio pointers in this region */
+		list_for_each(lhandle, &efi_runtime_mmio) {
+			struct efi_runtime_mmio_list *lmmio;
+
+			lmmio = list_entry(lhandle,
+					   struct efi_runtime_mmio_list,
+					   link);
+			if ((map_start <= lmmio->paddr) &&
+			    (map_end >= lmmio->paddr)) {
+				u64 off = map->virtual_start - map_start;
+				*lmmio->ptr = (void*)(lmmio->paddr + off);
+			}
+		}
+	}
+
+	/* Move the actual runtime code over */
 	for (i = 0; i < n; i++) {
 		struct efi_mem_desc *map;
 
 		map = (void*)virtmap + (descriptor_size * i);
 		if (map->type == EFI_RUNTIME_SERVICES_CODE) {
-			ulong new_offset = map->virtual_start - (runtime_start - gd->relocaddr);
+			ulong new_offset = map->virtual_start -
+					   (runtime_start - gd->relocaddr);
 
 			efi_runtime_relocate(new_offset, map);
 			/* Once we're virtual, we can no longer handle
@@ -251,6 +316,20 @@ static efi_status_t EFIAPI efi_set_virtual_address_map(
 	return EFI_EXIT(EFI_INVALID_PARAMETER);
 }
 
+void efi_add_runtime_mmio(void *mmio_ptr, u64 len)
+{
+	struct efi_runtime_mmio_list *newmmio;
+
+	u64 pages = (len + EFI_PAGE_SIZE - 1) >> EFI_PAGE_SHIFT;
+	efi_add_memory_map(*(uintptr_t *)mmio_ptr, pages, EFI_MMAP_IO, false);
+
+	newmmio = calloc(1, sizeof(*newmmio));
+	newmmio->ptr = mmio_ptr;
+	newmmio->paddr = *(uintptr_t *)mmio_ptr;
+	newmmio->len = len;
+        list_add_tail(&newmmio->link, &efi_runtime_mmio);
+}
+
 /*
  * In the second stage, U-Boot has disappeared. To isolate our runtime code
  * that at this point still exists from the rest, we put it into a special
@@ -292,7 +371,7 @@ struct efi_runtime_services EFI_RUNTIME_DATA efi_runtime_services = {
 		.revision = EFI_RUNTIME_SERVICES_REVISION,
 		.headersize = sizeof(struct efi_table_hdr),
 	},
-	.get_time = &efi_get_time,
+	.get_time = &efi_get_time_boottime,
 	.set_time = (void *)&efi_device_error,
 	.get_wakeup_time = (void *)&efi_unimplemented,
 	.set_wakeup_time = (void *)&efi_unimplemented,
@@ -302,5 +381,5 @@ struct efi_runtime_services EFI_RUNTIME_DATA efi_runtime_services = {
 	.get_next_variable = (void *)&efi_device_error,
 	.set_variable = (void *)&efi_device_error,
 	.get_next_high_mono_count = (void *)&efi_device_error,
-	.reset_system = &efi_reset_system,
+	.reset_system = &efi_reset_system_boottime,
 };
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 2/5] ARM: bcm283x: Implement EFI RTS reset_system
  2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 1/5] efi_loader: Allow boards to implement get_time and reset_system Alexander Graf
@ 2016-06-06 22:57 ` Alexander Graf
  2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 3/5] efi_loader: gop: Expose fb when 32bpp Alexander Graf
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

The rpi has a pretty simple way of resetting the whole system. All it takes
is to poke a few registers at a well defined location in MMIO space.

This patch adds support for the EFI loader implementation to allow an OS to
reset and power off the system when we're outside of boot time.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 arch/arm/mach-bcm283x/include/mach/wdog.h |  2 +-
 arch/arm/mach-bcm283x/reset.c             | 59 +++++++++++++++++++++++++++----
 2 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-bcm283x/include/mach/wdog.h b/arch/arm/mach-bcm283x/include/mach/wdog.h
index 7741d7b..b4caca1 100644
--- a/arch/arm/mach-bcm283x/include/mach/wdog.h
+++ b/arch/arm/mach-bcm283x/include/mach/wdog.h
@@ -16,7 +16,7 @@
 struct bcm2835_wdog_regs {
 	u32 unknown0[7];
 	u32 rstc;
-	u32 unknown1;
+	u32 rsts;
 	u32 wdog;
 };
 
diff --git a/arch/arm/mach-bcm283x/reset.c b/arch/arm/mach-bcm283x/reset.c
index 72cdc31..e87241d 100644
--- a/arch/arm/mach-bcm283x/reset.c
+++ b/arch/arm/mach-bcm283x/reset.c
@@ -10,19 +10,66 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/wdog.h>
+#include <efi_loader.h>
 
 #define RESET_TIMEOUT 10
 
-void reset_cpu(ulong addr)
+/*
+ * The Raspberry Pi firmware uses the RSTS register to know which partiton
+ * to boot from. The partiton value is spread into bits 0, 2, 4, 6, 8, 10.
+ * Partiton 63 is a special partition used by the firmware to indicate halt.
+ */
+#define BCM2835_WDOG_RSTS_RASPBERRYPI_HALT	0x555
+
+EFI_RUNTIME_DATA struct bcm2835_wdog_regs *wdog_regs =
+	(struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
+
+void EFI_RUNTIME_TEXT reset_cpu(ulong addr)
 {
-	struct bcm2835_wdog_regs *regs =
-		(struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
 	uint32_t rstc;
 
-	rstc = readl(&regs->rstc);
+	rstc = readl(&wdog_regs->rstc);
 	rstc &= ~BCM2835_WDOG_RSTC_WRCFG_MASK;
 	rstc |= BCM2835_WDOG_RSTC_WRCFG_FULL_RESET;
 
-	writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, &regs->wdog);
-	writel(BCM2835_WDOG_PASSWORD | rstc, &regs->rstc);
+	writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, &wdog_regs->wdog);
+	writel(BCM2835_WDOG_PASSWORD | rstc, &wdog_regs->rstc);
+}
+
+#ifdef CONFIG_EFI_LOADER
+
+void EFI_RUNTIME_TEXT EFIAPI efi_reset_system(
+			enum efi_reset_type reset_type,
+			efi_status_t reset_status,
+			unsigned long data_size, void *reset_data)
+{
+	u32 val;
+
+	switch (reset_type) {
+	case EFI_RESET_COLD:
+	case EFI_RESET_WARM:
+		reset_cpu(0);
+		break;
+	case EFI_RESET_SHUTDOWN:
+		/*
+		 * We set the watchdog hard reset bit here to distinguish this reset
+		 * from the normal (full) reset. bootcode.bin will not reboot after a
+		 * hard reset.
+		 */
+		val = readl(&wdog_regs->rsts);
+		val |= BCM2835_WDOG_PASSWORD;
+		val |= BCM2835_WDOG_RSTS_RASPBERRYPI_HALT;
+		writel(val, &wdog_regs->rsts);
+		reset_cpu(0);
+		break;
+	}
+
+	while (1) { }
 }
+
+void efi_reset_system_init(void)
+{
+	efi_add_runtime_mmio(&wdog_regs, sizeof(*wdog_regs));
+}
+
+#endif
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 3/5] efi_loader: gop: Expose fb when 32bpp
  2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 1/5] efi_loader: Allow boards to implement get_time and reset_system Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 2/5] ARM: bcm283x: Implement EFI RTS reset_system Alexander Graf
@ 2016-06-06 22:57 ` Alexander Graf
  2016-10-13 14:34   ` [U-Boot] [U-Boot,v2,3/5] " Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 4/5] bcm2835 video: Map frame buffer as 32bpp Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 5/5] bcm2835: Reserve the spin table in efi memory map Alexander Graf
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

When we're running in 32bpp mode, expose the frame buffer address
to our payloads so that Linux efifb can pick it up.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 lib/efi_loader/efi_gop.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
index 33a3d71..286ad83 100644
--- a/lib/efi_loader/efi_gop.c
+++ b/lib/efi_loader/efi_gop.c
@@ -129,6 +129,7 @@ int efi_gop_register(void)
 {
 	struct efi_gop_obj *gopobj;
 	u32 bpix, col, row;
+	u64 fb_base, fb_size;
 
 #ifdef CONFIG_DM_VIDEO
 	struct udevice *vdev;
@@ -141,11 +142,16 @@ int efi_gop_register(void)
 	bpix = priv->bpix;
 	col = video_get_xsize(vdev);
 	row = video_get_ysize(vdev);
+	fb_base = (uintptr_t)priv->fb;
+	fb_size = priv->fb_size;
 #else
+	int line_len;
 
 	bpix = panel_info.vl_bpix;
 	col = panel_info.vl_col;
 	row = panel_info.vl_row;
+	fb_base = gd->fb_base;
+	fb_size = lcd_get_size(&line_len);
 #endif
 
 	switch (bpix) {
@@ -177,6 +183,16 @@ int efi_gop_register(void)
 	gopobj->mode.info = &gopobj->info;
 	gopobj->mode.info_size = sizeof(gopobj->info);
 
+#ifdef CONFIG_DM_VIDEO
+	if (bpix == VIDEO_BPP32) {
+#else
+	if (bpix == LCD_COLOR32) {
+#endif
+		/* With 32bit color space we can directly expose the fb */
+		gopobj->mode.fb_base = fb_base;
+		gopobj->mode.fb_size = fb_size;
+	}
+
 	gopobj->info.version = 0;
 	gopobj->info.width = col;
 	gopobj->info.height = row;
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 4/5] bcm2835 video: Map frame buffer as 32bpp
  2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
                   ` (2 preceding siblings ...)
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 3/5] efi_loader: gop: Expose fb when 32bpp Alexander Graf
@ 2016-06-06 22:57 ` Alexander Graf
  2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 5/5] bcm2835: Reserve the spin table in efi memory map Alexander Graf
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

To enable working efifb support, let's map the frame buffer as 32bpp
instead of 16bpp.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 drivers/video/bcm2835.c | 6 +++---
 include/configs/rpi.h   | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
index cd605e6..cc6454f 100644
--- a/drivers/video/bcm2835.c
+++ b/drivers/video/bcm2835.c
@@ -71,9 +71,9 @@ void lcd_ctrl_init(void *lcdbase)
 	msg_setup->virtual_w_h.body.req.width = w;
 	msg_setup->virtual_w_h.body.req.height = h;
 	BCM2835_MBOX_INIT_TAG(&msg_setup->depth, SET_DEPTH);
-	msg_setup->depth.body.req.bpp = 16;
+	msg_setup->depth.body.req.bpp = 32;
 	BCM2835_MBOX_INIT_TAG(&msg_setup->pixel_order, SET_PIXEL_ORDER);
-	msg_setup->pixel_order.body.req.order = BCM2835_MBOX_PIXEL_ORDER_BGR;
+	msg_setup->pixel_order.body.req.order = BCM2835_MBOX_PIXEL_ORDER_RGB;
 	BCM2835_MBOX_INIT_TAG(&msg_setup->alpha_mode, SET_ALPHA_MODE);
 	msg_setup->alpha_mode.body.req.alpha = BCM2835_MBOX_ALPHA_MODE_IGNORED;
 	BCM2835_MBOX_INIT_TAG(&msg_setup->virtual_offset, SET_VIRTUAL_OFFSET);
@@ -103,7 +103,7 @@ void lcd_ctrl_init(void *lcdbase)
 
 	panel_info.vl_col = w;
 	panel_info.vl_row = h;
-	panel_info.vl_bpix = LCD_COLOR16;
+	panel_info.vl_bpix = LCD_COLOR32;
 
 	gd->fb_base = bus_to_phys(
 		msg_setup->allocate_buffer.body.resp.fb_address);
diff --git a/include/configs/rpi.h b/include/configs/rpi.h
index 9ef5eae..dc8d22a 100644
--- a/include/configs/rpi.h
+++ b/include/configs/rpi.h
@@ -78,7 +78,7 @@
 /* LCD */
 #define CONFIG_LCD
 #define CONFIG_LCD_DT_SIMPLEFB
-#define LCD_BPP				LCD_COLOR16
+#define LCD_BPP				LCD_COLOR32
 /*
  * Prevent allocation of RAM for FB; the real FB address is queried
  * dynamically from the VideoCore co-processor, and comes from RAM
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 5/5] bcm2835: Reserve the spin table in efi memory map
  2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
                   ` (3 preceding siblings ...)
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 4/5] bcm2835 video: Map frame buffer as 32bpp Alexander Graf
@ 2016-06-06 22:57 ` Alexander Graf
  2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Graf @ 2016-06-06 22:57 UTC (permalink / raw)
  To: u-boot

Firmware provides a spin table on the raspberry pi. This table shouldn't
get overwritten by payloads, so we need to mark it as reserved.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 board/raspberrypi/rpi/rpi.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index c45ddb1..a2336fc 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -8,6 +8,7 @@
 #include <inttypes.h>
 #include <config.h>
 #include <dm.h>
+#include <efi_loader.h>
 #include <fdt_support.h>
 #include <fdt_simplefb.h>
 #include <lcd.h>
@@ -480,5 +481,10 @@ int ft_board_setup(void *blob, bd_t *bd)
 	 */
 	lcd_dt_simplefb_add_node(blob);
 
+#ifdef CONFIG_EFI_LOADER
+	/* Reserve the spin table */
+	efi_add_memory_map(0, 1, EFI_RESERVED_MEMORY_TYPE, 0);
+#endif
+
 	return 0;
 }
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [U-Boot,v2,3/5] efi_loader: gop: Expose fb when 32bpp
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 3/5] efi_loader: gop: Expose fb when 32bpp Alexander Graf
@ 2016-10-13 14:34   ` Alexander Graf
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Graf @ 2016-10-13 14:34 UTC (permalink / raw)
  To: u-boot

> When we're running in 32bpp mode, expose the frame buffer address
> to our payloads so that Linux efifb can pick it up.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>

Thanks, applied to 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [U-Boot, v2, 2/5] ARM: bcm283x: Implement EFI RTS reset_system
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 2/5] ARM: bcm283x: Implement EFI RTS reset_system Alexander Graf
@ 2016-11-14  9:23   ` Alexander Graf
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Graf @ 2016-11-14  9:23 UTC (permalink / raw)
  To: u-boot

> The rpi has a pretty simple way of resetting the whole system. All it takes
> is to poke a few registers at a well defined location in MMIO space.
> 
> This patch adds support for the EFI loader implementation to allow an OS to
> reset and power off the system when we're outside of boot time.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>

Thanks, applied to efi-next

Alex

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [U-Boot, v2, 5/5] bcm2835: Reserve the spin table in efi memory map
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 5/5] bcm2835: Reserve the spin table in efi memory map Alexander Graf
@ 2016-11-14  9:23   ` Alexander Graf
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Graf @ 2016-11-14  9:23 UTC (permalink / raw)
  To: u-boot

> Firmware provides a spin table on the raspberry pi. This table shouldn't
> get overwritten by payloads, so we need to mark it as reserved.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>

Thanks, applied to efi-next

Alex

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [U-Boot, v2, 4/5] bcm2835 video: Map frame buffer as 32bpp
  2016-06-06 22:57 ` [U-Boot] [PATCH v2 4/5] bcm2835 video: Map frame buffer as 32bpp Alexander Graf
@ 2016-11-14  9:23   ` Alexander Graf
  2016-11-14  9:25     ` Alexander Graf
  0 siblings, 1 reply; 11+ messages in thread
From: Alexander Graf @ 2016-11-14  9:23 UTC (permalink / raw)
  To: u-boot

> To enable working efifb support, let's map the frame buffer as 32bpp
> instead of 16bpp.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>

Thanks, applied to efi-next

Alex

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [U-Boot, v2, 4/5] bcm2835 video: Map frame buffer as 32bpp
  2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
@ 2016-11-14  9:25     ` Alexander Graf
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Graf @ 2016-11-14  9:25 UTC (permalink / raw)
  To: u-boot



On 14/11/2016 10:23, Alexander Graf wrote:
>> To enable working efifb support, let's map the frame buffer as 32bpp
>> instead of 16bpp.
>>
>> Signed-off-by: Alexander Graf <agraf@suse.de>
>
> Thanks, applied to efi-next
>
> Alex
>

Sorry, that was script magic going wild. Bcm2835 patches obviously have 
to go via Stephen's tree :)


Alex

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-11-14  9:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-06 22:57 [U-Boot] [PATCH v2 0/5] Raspberry Pi EFI enablement Alexander Graf
2016-06-06 22:57 ` [U-Boot] [PATCH v2 1/5] efi_loader: Allow boards to implement get_time and reset_system Alexander Graf
2016-06-06 22:57 ` [U-Boot] [PATCH v2 2/5] ARM: bcm283x: Implement EFI RTS reset_system Alexander Graf
2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
2016-06-06 22:57 ` [U-Boot] [PATCH v2 3/5] efi_loader: gop: Expose fb when 32bpp Alexander Graf
2016-10-13 14:34   ` [U-Boot] [U-Boot,v2,3/5] " Alexander Graf
2016-06-06 22:57 ` [U-Boot] [PATCH v2 4/5] bcm2835 video: Map frame buffer as 32bpp Alexander Graf
2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf
2016-11-14  9:25     ` Alexander Graf
2016-06-06 22:57 ` [U-Boot] [PATCH v2 5/5] bcm2835: Reserve the spin table in efi memory map Alexander Graf
2016-11-14  9:23   ` [U-Boot] [U-Boot, v2, " Alexander Graf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox