[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT/PLAT_RASPI PATCH 14/14] plats/raspi: Adding independent LVGL driver compile option



Adding independent LVGL driver compile option plus a few minor
changes.

Signed-off-by: Santiago Pagani <santiagopagani@xxxxxxxxx>
---
 Config.uk               | 22 ++++++++++++++++------
 Makefile.uk             |  7 +++++++
 entry.S                 |  2 ++
 include/raspi/sysregs.h | 20 +++++++++++++++-----
 lfb.c                   | 18 +++++++++++-------
 mbox.c                  |  1 +
 setup.c                 |  2 +-
 start.S                 | 21 +++++++++++++++++++--
 touchscreen.c           |  5 ++++-
 9 files changed, 76 insertions(+), 22 deletions(-)

diff --git a/Config.uk b/Config.uk
index 618d51d..836283d 100644
--- a/Config.uk
+++ b/Config.uk
@@ -11,21 +11,18 @@ menu "Console Options"
 config RASPI_PRINTF_SERIAL_CONSOLE
         bool "Serial console for printf"
         default y
-        depends on ARCH_ARM_64
         help
           Choose serial console for printf
 
 config RASPI_KERNEL_SERIAL_CONSOLE
         bool "Serial console for the kernel prints"
         default n
-        depends on ARCH_ARM_64
         help
           Choose serial console for the kernel printing
 
 config RASPI_DEBUG_SERIAL_CONSOLE
         bool "Serial console for the debug prints"
         default n
-        depends on ARCH_ARM_64
         help
           Choose serial console for the debug printing
 endmenu
@@ -34,19 +31,32 @@ menu "Devices"
 config RASPI_LCD
        bool "DSI LCD screen"
        default n
-       depends on ARCH_ARM_64
+
+choice 
+       prompt "LCD print driver"
+       default RASPI_LVGL_DRIVER if (LIBLVGL)
+       default RASPI_SIMPLE_LCD_PRINT_FUNCTIONS
+       depends on RASPI_LCD
+
+       config RASPI_SIMPLE_LCD_PRINT_FUNCTIONS
+               bool "Simple LCD print functions"
+
+       config RASPI_LVGL_DRIVER
+               bool "LVGL LCD driver"
+               depends on LIBLVGL
+endchoice
 
 config RASPI_TOUCHSCREEN
        bool "Touch screen"
        default n
-       depends on ARCH_ARM_64
+          depends on RASPI_LCD
+          depends on LIBLVGL
 endmenu
 
 menu "Profiling"
 config RASPI_WATERMARK_STACK
        bool "Watermark Stack"
        default n
-       depends on ARCH_ARM_64
 endmenu
 
 endif
diff --git a/Makefile.uk b/Makefile.uk
index 967a1c0..1c0e4c0 100644
--- a/Makefile.uk
+++ b/Makefile.uk
@@ -19,6 +19,13 @@ LIBRASPIPLAT_CINCLUDES-y         += 
-I$(LIBRASPIPLAT_BASE)/include
 LIBRASPIPLAT_CINCLUDES-y         += -I$(UK_PLAT_COMMON_BASE)/include
 LIBRASPIPLAT_CINCLUDES-y         += -I$(UK_PLAT_DRIVERS_BASE)/include
 
+# When running WAMR on the Raspberry Pi, we add support to WAMR for 
clock_gettime
+# using the Raspberry Pi's system timer. Therefore, WAMR will need to include
+# the raspi/time.h header to use the get_system_timer() function.
+ifeq ($(CONFIG_PLAT_RASPI),y)
+CINCLUDES-$(CONFIG_LIBWAMR) += -I$(LIBRASPIPLAT_BASE)/include
+endif
+
 LIBRASPIPLAT_ASFLAGS             += -DRASPIPLAT
 LIBRASPIPLAT_CFLAGS              += -DRASPIPLAT
 LIBRASPIPLAT_CXXFLAGS            += -DRASPIPLAT
diff --git a/entry.S b/entry.S
index 4b7ff6c..a9d0deb 100644
--- a/entry.S
+++ b/entry.S
@@ -298,6 +298,7 @@ fiq_invalid_el0_32:
 error_invalid_el0_32:
        handle_invalid_entry  ERROR_INVALID_EL0_32
 
+.align 6
 el1_sync:
        kernel_entry
        mrs     x0, ESR_EL1
@@ -305,6 +306,7 @@ el1_sync:
        bl      show_invalid_entry_message_el1_sync
        b       err_hang
 
+.align 6
 el1_irq:
        kernel_entry 
        bl      ukplat_irq_handle
diff --git a/include/raspi/sysregs.h b/include/raspi/sysregs.h
index f1d73e3..ef673c7 100644
--- a/include/raspi/sysregs.h
+++ b/include/raspi/sysregs.h
@@ -54,12 +54,22 @@
 // ***************************************
 // SCTLR_EL1, System Control Register (EL1), Page 2654 of 
AArch64-Reference-Manual.
 // ***************************************
-#define SCTLR_EL1_WFE_NORMAL                           (1 << 18)
-#define SCTLR_EL1_WFI_NORMAL                           (1 << 16)
-#define SCTLR_EL1_MMU_ENABLED               (1 << 0)
+#define SCTLR_EL1_WFE_NORMAL                                           (1 << 
18)
+#define SCTLR_EL1_WFI_NORMAL                                           (1 << 
16)
+#define SCTLR_EL1_INSTRUCTION_CACHE_ENABLED                    (1 << 12)
+#define SCTLR_EL1_DATA_AND_UNIFIED_CACHE_ENABLED       (1 << 2)
+#define SCTLR_EL1_MMU_ENABLED                                          (1 << 0)
+
+#define SCTLR_EL1_VALUE_MMU_AND_CACHES_DISABLED                
(SCTLR_EL1_WFE_NORMAL | SCTLR_EL1_WFI_NORMAL)
+#define SCTLR_EL1_VALUE_MMU_ENABLED                                    
(SCTLR_EL1_WFE_NORMAL | SCTLR_EL1_WFI_NORMAL | SCTLR_EL1_MMU_ENABLED)
+#define SCTLR_EL1_VALUE_MMU_AND_CACHES_ENABLED         (SCTLR_EL1_WFE_NORMAL | 
SCTLR_EL1_WFI_NORMAL | SCTLR_EL1_INSTRUCTION_CACHE_ENABLED | 
SCTLR_EL1_DATA_AND_UNIFIED_CACHE_ENABLED | SCTLR_EL1_MMU_ENABLED)
+
+#define SCTLR_EL1_KVM_VALUE    \
+               ((1 << 26) | (1 << 18) | (1 << 16) | (1 << 15) | (1 << 14) | (1 
<< 12) | (1 << 8) | (1 << 4) | (1 << 3) | \
+               (1 << 2) | (1 << 0) | (1 << 5) | \
+               (1 << 11) | (1 << 20) | (1 << 22) | (1 << 23) | (1 << 28) | (1 
<< 29))
+
 
-#define SCTLR_EL1_VALUE_MMU_DISABLED   (SCTLR_EL1_WFE_NORMAL | 
SCTLR_EL1_WFI_NORMAL)
-#define SCTLR_EL1_VALUE_MMU_ENABLED            (SCTLR_EL1_WFE_NORMAL | 
SCTLR_EL1_WFI_NORMAL | SCTLR_EL1_MMU_ENABLED)
 #define SCTLR_EL2_VALUE                                (0)
 
 // ***************************************
diff --git a/lfb.c b/lfb.c
index b0ed92a..b2b49aa 100644
--- a/lfb.c
+++ b/lfb.c
@@ -27,10 +27,13 @@
 #include <uk/print.h>
 #include <raspi/mbox.h>
 
-#if CONFIG_LIBLVGL
-#define LV_CONF_INCLUDE_SIMPLE
+#if CONFIG_RASPI_LVGL_DRIVER
+#ifndef LV_CONF_INCLUDE_SIMPLE
+       #define LV_CONF_INCLUDE_SIMPLE
+#endif
 #include <lvgl.h>
-#else
+#endif
+#if CONFIG_RASPI_SIMPLE_LCD_PRINT_FUNCTIONS
 #include <raspi/pixmaps.h>
 #endif
 
@@ -42,7 +45,7 @@ static unsigned int width, height, pitch;
 static unsigned char *lfb;
 
 
-#if CONFIG_LIBLVGL
+#if CONFIG_RASPI_LVGL_DRIVER
 static lv_disp_buf_t lv_disp_buf;
 static lv_color_t lv_color_buf[SCREEN_WIDTH * 10];
 static lv_disp_drv_t disp_drv;
@@ -122,7 +125,7 @@ void lfb_init(void)
     }
 
 
-#if CONFIG_LIBLVGL
+#if CONFIG_RASPI_LVGL_DRIVER
        lv_init();
        lv_disp_buf_init(&lv_disp_buf, lv_color_buf, NULL, SCREEN_WIDTH * 10);
 
@@ -130,7 +133,8 @@ void lfb_init(void)
        disp_drv.flush_cb = lvgl_disp_flush;
        disp_drv.buffer = &lv_disp_buf;
        lv_disp_drv_register(&disp_drv);
-#else
+#endif
+#if CONFIG_RASPI_SIMPLE_LCD_PRINT_FUNCTIONS
        letters_data [0x20 - LETTER_MIN] = (char *)letter_space_data;           
                // 0x20
        letters_data [0x21 - LETTER_MIN] = (char *)letter_exclamationmark_data; 
        // 0x21
        letters_data [0x22 - LETTER_MIN] = (char *)letter_quote_data;           
                // 0x22
@@ -231,7 +235,7 @@ void lfb_init(void)
 }
 
 
-#if !CONFIG_LIBLVGL
+#if CONFIG_RASPI_SIMPLE_LCD_PRINT_FUNCTIONS
 #define HEADER_PIXEL(data,pixel) {\
 pixel[2] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
 pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
diff --git a/mbox.c b/mbox.c
index a19b0e9..196e0de 100644
--- a/mbox.c
+++ b/mbox.c
@@ -26,6 +26,7 @@
 
 #include <raspi/mbox.h>
 #include <raspi/sysregs.h>
+#include <uk/arch/lcpu.h>
 
 /* mailbox message buffer */
 volatile unsigned int  __attribute__((aligned(16))) mbox[MBOX_BUFFER_LENGTH];
diff --git a/setup.c b/setup.c
index 6081cc6..48353a0 100644
--- a/setup.c
+++ b/setup.c
@@ -47,7 +47,7 @@
 #include <uk/print.h>
 #include <uk/arch/types.h>
 
-//smcc_psci_callfn_t smcc_psci_call;
+smcc_psci_callfn_t smcc_psci_call;
 
 static uint64_t assembly_entry;
 static uint64_t hardware_init_done;
diff --git a/start.S b/start.S
index 04c938d..7a068a2 100644
--- a/start.S
+++ b/start.S
@@ -50,7 +50,7 @@ hang:  wfe
 
 // Continue if cpu id == 0
 master:
-       ldr             x0, =SCTLR_EL1_VALUE_MMU_DISABLED
+       ldr             x0, =SCTLR_EL1_VALUE_MMU_AND_CACHES_DISABLED
        msr             sctlr_el1, x0
 
        ldr             x0, =SCTLR_EL2_VALUE
@@ -78,6 +78,22 @@ master:
        eret
 
 el1_entry:
+       /* Set the context id */
+       msr contextidr_el1, xzr
+       
+       /*
+        * Using dsb here to guarantee the create_pagetables has
+        * been done.
+        */
+       dsb sy
+
+       /* Clear the Monitor Debug System control register */
+       msr mdscr_el1, xzr
+
+       /* Invalidate the TLB to avoid stale one */
+       tlbi vmalle1
+       dsb nsh
+
        bl      create_page_tables
 
        adrp    x0, _pagetables                         
@@ -91,8 +107,9 @@ el1_entry:
        msr             mair_el1, x0
 
        ldr             x4, =_libraspiplat_entry
-       ldr             x5, =SCTLR_EL1_VALUE_MMU_ENABLED
+       ldr             x5, =SCTLR_EL1_KVM_VALUE
        msr             sctlr_el1, x5
+       isb
 
 
 #if CONFIG_RASPI_WATERMARK_STACK
diff --git a/touchscreen.c b/touchscreen.c
index a9b1d8a..5f18576 100644
--- a/touchscreen.c
+++ b/touchscreen.c
@@ -13,8 +13,11 @@
 #include <string.h>
 #include <raspi/mbox.h>
 #include <raspi/touchscreen.h>
+#include <uk/arch/lcpu.h>
 
-#define LV_CONF_INCLUDE_SIMPLE
+#ifndef LV_CONF_INCLUDE_SIMPLE
+       #define LV_CONF_INCLUDE_SIMPLE
+#endif
 #include <lvgl.h>
 
 static unsigned char *touchscreen;
-- 
2.17.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.