From 476e9a28a8f1cf8f0cdf329861ea375672854506 Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Mon, 11 Apr 2022 11:12:48 +0200 Subject: [PATCH 1/4] iGRiSP: Detect iGRiSP GRiSP2 and iGRiSP use the same BSP. So it's not possible to just use the header guard. Use the FDT instead. --- include/grisp.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/grisp.h b/include/grisp.h index 868df85..c3d61f1 100644 --- a/include/grisp.h +++ b/include/grisp.h @@ -36,11 +36,24 @@ extern "C" { #define GRISP #define GRISP_PLATFORM_GRISP_BASE #define GRISP_PLATFORM "grisp_base" +#define grisp_is_industrialgrisp() false #endif #if defined LIBBSP_ARM_IMX_BSP_H #define GRISP #define GRISP_PLATFORM_GRISP2 #define GRISP_PLATFORM "grisp2" + +#include +#include + +static inline bool grisp_is_industrialgrisp(void) +{ + const void *fdt = bsp_fdt_get(); + const int node = fdt_path_offset(fdt, "/"); + const char igrisp_compat[] = "embeddedbrains,industrialgrisp"; + + return (fdt_node_check_compatible(fdt, node, igrisp_compat) == 0); +} #endif #ifdef __cplusplus From 76919e1b633403fe69d7525938ca7423a21132d6 Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Mon, 11 Apr 2022 17:00:59 +0200 Subject: [PATCH 2/4] iGRiSP: Add FDT alias define --- include/grisp/init.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/grisp/init.h b/include/grisp/init.h index e27552c..4d99e06 100644 --- a/include/grisp/init.h +++ b/include/grisp/init.h @@ -50,6 +50,10 @@ extern "C" { #define GRISP_I2C0_DEVICE "/dev/i2c-0" #define GRISP_I2C1_FDT_ALIAS "i2c1" #define GRISP_I2C1_DEVICE "/dev/i2c-1" + +#define GRISP_INDUSTRIAL_SPI_ONBOARD_FDT_ALIAS "spi0" +#define GRISP_INDUSTRIAL_SPI_PMOD_FDT_ALIAS "spi2" +#define GRISP_INDUSTRIAL_I2C_FDT_ALIAS "i2c0" #endif typedef void (*grisp_check_and_create_wlandev)(void); From 5cb490ee48bafea95a02c0314f8c854df93c5d9d Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Fri, 13 May 2022 13:31:44 +0200 Subject: [PATCH 3/4] IGRiSP: Doesn't have the multi-colored LEDs --- src/led.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/led.c b/src/led.c index c425078..0d86bff 100644 --- a/src/led.c +++ b/src/led.c @@ -32,6 +32,7 @@ #include #include +#include #include #ifdef LIBBSP_ARM_ATSAM_BSP_H @@ -109,7 +110,8 @@ static struct { struct imx_gpio_pin green; struct imx_gpio_pin blue; } leds[2]; -struct imx_gpio_pin led_som; +static struct imx_gpio_pin led_som; +static bool only_green_led; static void grisp2_init_led_by_fdt( @@ -133,12 +135,19 @@ grisp2_init_leds(void) const void *fdt; fdt = bsp_fdt_get(); - grisp2_init_led_by_fdt(&leds[0].red, fdt, "/leds/grisp-rgb1-red"); - grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/grisp-rgb1-green"); - grisp2_init_led_by_fdt(&leds[0].blue, fdt, "/leds/grisp-rgb1-blue"); - grisp2_init_led_by_fdt(&leds[1].red, fdt, "/leds/grisp-rgb2-red"); - grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/grisp-rgb2-green"); - grisp2_init_led_by_fdt(&leds[1].blue, fdt, "/leds/grisp-rgb2-blue"); + if (grisp_is_industrialgrisp()) { + grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/igrisp-mcu-led"); + grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/igrisp-rfid-led"); + only_green_led = true; + } else { + grisp2_init_led_by_fdt(&leds[0].red, fdt, "/leds/grisp-rgb1-red"); + grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/grisp-rgb1-green"); + grisp2_init_led_by_fdt(&leds[0].blue, fdt, "/leds/grisp-rgb1-blue"); + grisp2_init_led_by_fdt(&leds[1].red, fdt, "/leds/grisp-rgb2-red"); + grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/grisp-rgb2-green"); + grisp2_init_led_by_fdt(&leds[1].blue, fdt, "/leds/grisp-rgb2-blue"); + only_green_led = false; + } grisp2_init_led_by_fdt(&led_som, fdt, "/leds/phycore-green"); } @@ -149,9 +158,11 @@ grisp_led_set(int led_nr, bool r, bool g, bool b) pthread_once(&once, grisp2_init_leds); if (led_nr != LED_SOM) { - imx_gpio_set_output(&leds[led_nr-1].red, r ? 1 : 0); + if (!only_green_led) { + imx_gpio_set_output(&leds[led_nr-1].red, r ? 1 : 0); + imx_gpio_set_output(&leds[led_nr-1].blue, b ? 1 : 0); + } imx_gpio_set_output(&leds[led_nr-1].green, g ? 1 : 0); - imx_gpio_set_output(&leds[led_nr-1].blue, b ? 1 : 0); } else { imx_gpio_set_output(&led_som, g ? 1 : 0); } From 9f71df780a307f46e3016afea11c6d887c2fdfc6 Mon Sep 17 00:00:00 2001 From: Luca Succi Date: Tue, 25 Jun 2024 11:44:05 +0200 Subject: [PATCH 4/4] Use a rootdir path to ensure to wait for the desired partition --- include/grisp/init.h | 2 +- src/init.c | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/grisp/init.h b/include/grisp/init.h index 4d99e06..cab3bde 100644 --- a/include/grisp/init.h +++ b/include/grisp/init.h @@ -60,7 +60,7 @@ typedef void (*grisp_check_and_create_wlandev)(void); void grisp_init_buses(void); void grisp_init_libbsd(void); -void grisp_init_sd_card(void); +void grisp_init_sd_card(const char *rootdir); void grisp_init_lower_self_prio(void); rtems_status_code grisp_init_wait_for_sd(void); void grisp_saf1761_basic_init(void); diff --git a/src/init.c b/src/init.c index fe299b3..f4f8a1c 100644 --- a/src/init.c +++ b/src/init.c @@ -88,8 +88,10 @@ static rtems_id wait_mounted_task_id = RTEMS_INVALID_ID; static rtems_status_code media_listener(rtems_media_event event, rtems_media_state state, - const char *src, const char *dest, void *arg) + const char *src, const char *dest, const char *arg) { + char fdt_target[192] = ""; + printf( "media listener: event = %s, state = %s, src = %s", rtems_media_event_description(event), @@ -102,13 +104,20 @@ media_listener(rtems_media_event event, rtems_media_state state, } if (arg != NULL) { - printf(", arg = %p\n", arg); + strlcpy(fdt_target, arg, 192); + size_t length = strlen(arg); + if (fdt_target[length - 1] == '/') { + fdt_target[length - 1] = '\0'; + } + printf(", fdt_target = %s\n", fdt_target); } printf("\n"); if (event == RTEMS_MEDIA_EVENT_MOUNT && - state == RTEMS_MEDIA_STATE_SUCCESS) { + state == RTEMS_MEDIA_STATE_SUCCESS && + dest != NULL && arg != NULL && + strcmp(dest, fdt_target) == 0) { rtems_event_send(wait_mounted_task_id, EVT_MOUNTED); } @@ -168,7 +177,7 @@ grisp_init_lower_self_prio(void) } void -grisp_init_sd_card(void) +grisp_init_sd_card(const char *rootdir) { rtems_status_code sc; @@ -180,7 +189,7 @@ grisp_init_sd_card(void) sc = rtems_media_initialize(); assert(sc == RTEMS_SUCCESSFUL); - sc = rtems_media_listener_add(media_listener, NULL); + sc = rtems_media_listener_add(media_listener, rootdir); assert(sc == RTEMS_SUCCESSFUL); sc = rtems_media_server_initialize(