cyclic: use a flag in gd->flags for recursion protection
[platform/kernel/u-boot.git] / include / asm-generic / global_data.h
index e1a5f4b..8d348b0 100644 (file)
  */
 
 #ifndef __ASSEMBLY__
+#include <cyclic.h>
+#include <event_internal.h>
 #include <fdtdec.h>
 #include <membuff.h>
 #include <linux/list.h>
+#include <linux/build_bug.h>
+#include <asm-offsets.h>
 
 struct acpi_ctx;
 struct driver_rt;
@@ -64,7 +68,7 @@ struct global_data {
         * @mem_clk: memory clock rate in Hz
         */
        unsigned long mem_clk;
-#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO)
+#if defined(CONFIG_VIDEO)
        /**
         * @fb_base: base address of frame buffer memory
         */
@@ -112,10 +116,14 @@ struct global_data {
        /**
         * @precon_buf_idx: pre-console buffer index
         *
-        * @precon_buf_idx indicates the current position of the buffer used to
-        * collect output before the console becomes available
-        */
-       unsigned long precon_buf_idx;
+        * @precon_buf_idx indicates the current position of the
+        * buffer used to collect output before the console becomes
+        * available. When negative, the pre-console buffer is
+        * temporarily disabled (used when the pre-console buffer is
+        * being written out, to prevent adding its contents to
+        * itself).
+        */
+       long precon_buf_idx;
 #endif
        /**
         * @env_addr: address of environment structure
@@ -184,12 +192,6 @@ struct global_data {
 
 #ifdef CONFIG_DM
        /**
-        * @dm_flags: additional flags for Driver Model
-        *
-        * See &enum gd_dm_flags
-        */
-       unsigned long dm_flags;
-       /**
         * @dm_root: root instance for Driver Model
         */
        struct udevice *dm_root;
@@ -248,6 +250,10 @@ struct global_data {
         * @fdt_size: space reserved for relocated device space
         */
        unsigned long fdt_size;
+       /**
+        * @fdt_src: Source of FDT
+        */
+       enum fdt_source_t fdt_src;
 #if CONFIG_IS_ENABLED(OF_LIVE)
        /**
         * @of_root: root node of the live tree
@@ -281,7 +287,7 @@ struct global_data {
         */
        void *trace_buff;
 #endif
-#if defined(CONFIG_SYS_I2C)
+#if CONFIG_IS_ENABLED(SYS_I2C_LEGACY)
        /**
         * @cur_i2c_bus: currently used I2C bus
         */
@@ -353,7 +359,7 @@ struct global_data {
         */
        struct membuff console_in;
 #endif
-#ifdef CONFIG_DM_VIDEO
+#ifdef CONFIG_VIDEO
        /**
         * @video_top: top of video frame buffer area
         */
@@ -451,17 +457,15 @@ struct global_data {
         */
        fdt_addr_t translation_offset;
 #endif
-#if CONFIG_IS_ENABLED(WDT)
-       /**
-        * @watchdog_dev: watchdog device
-        */
-       struct udevice *watchdog_dev;
-#endif
 #ifdef CONFIG_GENERATE_ACPI_TABLE
        /**
         * @acpi_ctx: ACPI context pointer
         */
        struct acpi_ctx *acpi_ctx;
+       /**
+        * @acpi_start: Start address of ACPI tables
+        */
+       ulong acpi_start;
 #endif
 #if CONFIG_IS_ENABLED(GENERATE_SMBIOS_TABLE)
        /**
@@ -469,7 +473,26 @@ struct global_data {
         */
        char *smbios_version;
 #endif
+#if CONFIG_IS_ENABLED(EVENT)
+       /**
+        * @event_state: Points to the current state of events
+        */
+       struct event_state event_state;
+#endif
+#ifdef CONFIG_CYCLIC
+       /**
+        * @cyclic: cyclic driver data
+        */
+       struct cyclic_drv *cyclic;
+#endif
+       /**
+        * @dmtag_list: List of DM tags
+        */
+       struct list_head dmtag_list;
 };
+#ifndef DO_DEPS_ONLY
+static_assert(sizeof(struct global_data) == GD_SIZE);
+#endif
 
 /**
  * gd_board_type() - retrieve board type
@@ -515,14 +538,26 @@ struct global_data {
 
 #ifdef CONFIG_GENERATE_ACPI_TABLE
 #define gd_acpi_ctx()          gd->acpi_ctx
+#define gd_acpi_start()                gd->acpi_start
+#define gd_set_acpi_start(addr)        gd->acpi_start = addr
 #else
 #define gd_acpi_ctx()          NULL
+#define gd_acpi_start()                0UL
+#define gd_set_acpi_start(addr)
+#endif
+
+#if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
+#define gd_multi_dtb_fit()     gd->multi_dtb_fit
+#define gd_set_multi_dtb_fit(_dtb)     gd->multi_dtb_fit = _dtb
+#else
+#define gd_multi_dtb_fit()     NULL
+#define gd_set_multi_dtb_fit(_dtb)
 #endif
 
-#if CONFIG_IS_ENABLED(DM)
-#define gd_size_cells_0()      (gd->dm_flags & GD_DM_FLG_SIZE_CELLS_0)
+#if CONFIG_IS_ENABLED(EVENT_DYNAMIC)
+#define gd_event_state()       ((struct event_state *)&gd->event_state)
 #else
-#define gd_size_cells_0()      (0)
+#define gd_event_state()       NULL
 #endif
 
 /**
@@ -584,41 +619,41 @@ enum gd_flags {
         */
        GD_FLG_RECORD = 0x01000,
        /**
+        * @GD_FLG_RECORD_OVF: record console overflow
+        */
+       GD_FLG_RECORD_OVF = 0x02000,
+       /**
         * @GD_FLG_ENV_DEFAULT: default variable flag
         */
-       GD_FLG_ENV_DEFAULT = 0x02000,
+       GD_FLG_ENV_DEFAULT = 0x04000,
        /**
         * @GD_FLG_SPL_EARLY_INIT: early SPL initialization is done
         */
-       GD_FLG_SPL_EARLY_INIT = 0x04000,
+       GD_FLG_SPL_EARLY_INIT = 0x08000,
        /**
         * @GD_FLG_LOG_READY: log system is ready for use
         */
-       GD_FLG_LOG_READY = 0x08000,
+       GD_FLG_LOG_READY = 0x10000,
        /**
         * @GD_FLG_WDT_READY: watchdog is ready for use
         */
-       GD_FLG_WDT_READY = 0x10000,
+       GD_FLG_WDT_READY = 0x20000,
        /**
         * @GD_FLG_SKIP_LL_INIT: don't perform low-level initialization
         */
-       GD_FLG_SKIP_LL_INIT = 0x20000,
+       GD_FLG_SKIP_LL_INIT = 0x40000,
        /**
         * @GD_FLG_SMP_READY: SMP initialization is complete
         */
-       GD_FLG_SMP_READY = 0x40000,
-};
-
-/**
- * enum gd_dm_flags - global data flags for Driver Model
- *
- * See field dm_flags of &struct global_data.
- */
-enum gd_dm_flags {
+       GD_FLG_SMP_READY = 0x80000,
+       /**
+        * @GD_FLG_FDT_CHANGED: Device tree change has been detected by tests
+        */
+       GD_FLG_FDT_CHANGED = 0x100000,
        /**
-        * @GD_DM_FLG_SIZE_CELLS_0: Enable #size-cells=<0> translation
+        * GD_FLG_CYCLIC_RUNNING: cyclic_run is in progress
         */
-       GD_DM_FLG_SIZE_CELLS_0 = 0x00001,
+       GD_FLG_CYCLIC_RUNNING = 0x200000,
 };
 
 #endif /* __ASSEMBLY__ */