[PATCH] event: Correct dependencies on the EVENT framework
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Jan 16 21:42:17 CET 2023
On 1/16/23 21:23, Tom Rini wrote:
> On Mon, Jan 16, 2023 at 09:21:51PM +0100, Heinrich Schuchardt wrote:
>> On 1/16/23 20:12, Tom Rini wrote:
>>> The event framework is just that, a framework. Enabling it by itself
>>> does nothing, so we shouldn't ask the user about it. Reword (and correct
>>> typos) around this the option and help text. This also applies to
>>> DM_EVENT and EVENT_DYNAMIC. Only EVENT_DEBUG and CMD_EVENT should be
>>> visible to the user to select, when EVENT is selected.
>>>
>>> With this, it's time to address the larger problems. When functionality
>>> uses events, typically via EVENT_SPY, the appropriate framework then
>>> must be select'd and NOT imply'd. As the functionality will cease to
>>> work (and so, platforms will fail to boot) this is non-optional and
>>> where select is appropriate. Audit the current users of EVENT_SPY to
>>> have a more fine-grained approach to select'ing the framework where
>>> used. Audit the current users of event_register and also select
>>> EVENT_DYNAMIC.
>>>
>>> Cc: AKASHI Takahiro <takahiro.akashi at linaro.org>
>>> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>> Reported-by: Oliver Graute <Oliver.Graute at kococonnector.com>
>>> Reported-by: Francesco Dolcini <francesco.dolcini at toradex.com>
>>> Fixes: 7fe32b3442f0 ("event: Convert arch_cpu_init_dm() to use events")
>>> Fixes: 42fdcebf859f ("event: Convert misc_init_f() to use events")
>>> Fixes: c5ef2025579e ("dm: fix DM_EVENT dependencies")
>>> Signed-off-by: Tom Rini <trini at konsulko.com>
>>> Tested-by: Simon Glass <sjg at chromium.org>
>>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>> Reviewed-by: Fabio Estevam <festevam at denx.de>
>>> ---
>>> Changes in v2:
>>> - Collect tags
>>> - Reword the commit message a little, reword and comment on the
>>> EFI_LOADER case.
>>> - Add the rest of the VBE cases I had forgotten.
>>> ---
>>> arch/Kconfig | 6 +++---
>>> arch/arm/Kconfig | 9 ++++-----
>>> arch/arm/mach-omap2/Kconfig | 3 +++
>>> arch/mips/Kconfig | 2 +-
>>> arch/powerpc/cpu/mpc85xx/Kconfig | 1 +
>>> arch/x86/Kconfig | 1 +
>>> arch/x86/cpu/baytrail/Kconfig | 1 +
>>> arch/x86/cpu/broadwell/Kconfig | 1 +
>>> arch/x86/cpu/ivybridge/Kconfig | 1 +
>>> arch/x86/cpu/quark/Kconfig | 1 +
>>> board/google/Kconfig | 1 +
>>> board/keymile/Kconfig | 1 +
>>> boot/Kconfig | 3 +++
>>> cmd/Kconfig | 1 +
>>> common/Kconfig | 17 ++++++++---------
>>> drivers/core/Kconfig | 9 +++++----
>>> drivers/cpu/Kconfig | 1 -
>>> lib/efi_loader/Kconfig | 6 +++---
>>> 18 files changed, 39 insertions(+), 26 deletions(-)
>>>
>>> diff --git a/arch/Kconfig b/arch/Kconfig
>>> index 8fb87b7d857c..d30676ae817b 100644
>>> --- a/arch/Kconfig
>>> +++ b/arch/Kconfig
>>> @@ -93,7 +93,7 @@ config NIOS2
>>> bool "Nios II architecture"
>>> select CPU
>>> select DM
>>> - imply DM_EVENT
>>> + select DM_EVENT
>>> select OF_CONTROL
>>> select SUPPORT_OF_CONTROL
>>> imply CMD_DM
>>> @@ -111,9 +111,9 @@ config RISCV
>>> select SUPPORT_OF_CONTROL
>>> select OF_CONTROL
>>> select DM
>>> + select DM_EVENT
>>> imply SPL_SEPARATE_BSS if SPL
>>> imply DM_SERIAL
>>> - imply DM_EVENT
>>> imply DM_MMC
>>> imply DM_SPI
>>> imply DM_SPI_FLASH
>>> @@ -136,6 +136,7 @@ config SANDBOX
>>> select BZIP2
>>> select CMD_POWEROFF
>>> select DM
>>> + select DM_EVENT
>>> select DM_FUZZING_ENGINE
>>> select DM_GPIO
>>> select DM_I2C
>>> @@ -240,7 +241,6 @@ config X86
>>> imply CMD_SF
>>> imply CMD_SF_TEST
>>> imply CMD_ZBOOT
>>> - imply DM_EVENT
>>> imply DM_GPIO
>>> imply DM_KEYBOARD
>>> imply DM_MMC
>>> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
>>> index bbf1d5227b3f..c9a44ebc2213 100644
>>> --- a/arch/arm/Kconfig
>>> +++ b/arch/arm/Kconfig
>>> @@ -778,7 +778,6 @@ config ARCH_OMAP2PLUS
>>> select SUPPORT_SPL
>>> imply TI_SYSC if DM && OF_CONTROL
>>> imply FIT
>>> - imply DM_EVENT
>>> imply SPL_SEPARATE_BSS
>>>
>>> config ARCH_MESON
>>> @@ -823,11 +822,11 @@ config ARCH_IMX8
>>> select SYS_FSL_SEC_COMPAT_4
>>> select SYS_FSL_SEC_LE
>>> select DM
>>> + select DM_EVENT
>>> select GPIO_EXTRA_HEADER
>>> select MACH_IMX
>>> select OF_CONTROL
>>> select ENABLE_ARM_SOC_BOOT0_HOOK
>>> - imply DM_EVENT
>>>
>>> config ARCH_IMX8M
>>> bool "NXP i.MX8M platform"
>>> @@ -839,14 +838,15 @@ config ARCH_IMX8M
>>> select SYS_FSL_SEC_LE
>>> select SYS_I2C_MXC
>>> select DM
>>> + select DM_EVENT if CLK
>>> select SUPPORT_SPL
>>> imply CMD_DM
>>> - imply DM_EVENT
>>>
>>> config ARCH_IMX8ULP
>>> bool "NXP i.MX8ULP platform"
>>> select ARM64
>>> select DM
>>> + select DM_EVENT
>>> select MACH_IMX
>>> select OF_CONTROL
>>> select SUPPORT_SPL
>>> @@ -854,19 +854,18 @@ config ARCH_IMX8ULP
>>> select MISC
>>> select IMX_SENTINEL
>>> imply CMD_DM
>>> - imply DM_EVENT
>>>
>>> config ARCH_IMX9
>>> bool "NXP i.MX9 platform"
>>> select ARM64
>>> select DM
>>> + select DM_EVENT
>>> select MACH_IMX
>>> select SUPPORT_SPL
>>> select GPIO_EXTRA_HEADER
>>> select MISC
>>> select IMX_SENTINEL
>>> imply CMD_DM
>>> - imply DM_EVENT
>>>
>>> config ARCH_IMXRT
>>> bool "NXP i.MXRT platform"
>>> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
>>> index 1db71df27212..309b967b0dd5 100644
>>> --- a/arch/arm/mach-omap2/Kconfig
>>> +++ b/arch/arm/mach-omap2/Kconfig
>>> @@ -31,6 +31,7 @@ config OMAP34XX
>>>
>>> config OMAP44XX
>>> bool "OMAP44XX SoC"
>>> + select DM_EVENT
>>> select SPL_USE_TINY_PRINTF
>>> select SPL_SYS_NO_VECTOR_TABLE if SPL
>>> imply NAND_OMAP_ELM
>>> @@ -55,6 +56,7 @@ config OMAP54XX
>>> bool "OMAP54XX SoC"
>>> select ARM_CORTEX_A15_CVE_2017_5715
>>> select ARM_ERRATA_798870
>>> + select DM_EVENT
>>> select SYS_THUMB_BUILD
>>> imply NAND_OMAP_ELM
>>> imply NAND_OMAP_GPMC
>>> @@ -111,6 +113,7 @@ config AM43XX
>>> config AM33XX
>>> bool "AM33XX SoC"
>>> select ARM_CORTEX_A8_CVE_2017_5715
>>> + select DM_EVENT
>>> select SPECIFY_CONSOLE_INDEX
>>> imply NAND_OMAP_ELM
>>> imply NAND_OMAP_GPMC
>>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
>>> index 23142bd2700d..569f5f48bc6c 100644
>>> --- a/arch/mips/Kconfig
>>> +++ b/arch/mips/Kconfig
>>> @@ -121,6 +121,7 @@ config MACH_PIC32
>>> bool "Support Microchip PIC32"
>>> select HAS_FIXED_TIMER_FREQUENCY
>>> select DM
>>> + select DM_EVENT
>>> select OF_CONTROL
>>> imply CMD_DM
>>>
>>> @@ -128,7 +129,6 @@ config TARGET_BOSTON
>>> bool "Support Boston"
>>> select HAS_FIXED_TIMER_FREQUENCY
>>> select DM
>>> - imply DM_EVENT
>>> select DM_SERIAL
>>> select MIPS_CM
>>> select SYS_CACHE_SHIFT_6
>>> diff --git a/arch/powerpc/cpu/mpc85xx/Kconfig b/arch/powerpc/cpu/mpc85xx/Kconfig
>>> index 1b180481a483..2c54a9e2120f 100644
>>> --- a/arch/powerpc/cpu/mpc85xx/Kconfig
>>> +++ b/arch/powerpc/cpu/mpc85xx/Kconfig
>>> @@ -248,6 +248,7 @@ config TARGET_KMP204X
>>> config TARGET_KMCENT2
>>> bool "Support kmcent2"
>>> select VENDOR_KM
>>> + select EVENT
>>> select FSL_CORENET
>>> select SYS_DPAA_FMAN
>>> select SYS_DPAA_PME
>>> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>>> index 93f1c77be3f3..07be5cd05ec0 100644
>>> --- a/arch/x86/Kconfig
>>> +++ b/arch/x86/Kconfig
>>> @@ -395,6 +395,7 @@ config FSP_VERSION1
>>>
>>> config FSP_VERSION2
>>> bool "FSP version 2.x"
>>> + select DM_EVENT
>>> help
>>> This covers versions 2.0 and 2.1. See here for details:
>>> https://github.com/IntelFsp/fsp/wiki
>>> diff --git a/arch/x86/cpu/baytrail/Kconfig b/arch/x86/cpu/baytrail/Kconfig
>>> index d2c3473d6abf..a8efea8a3413 100644
>>> --- a/arch/x86/cpu/baytrail/Kconfig
>>> +++ b/arch/x86/cpu/baytrail/Kconfig
>>> @@ -7,6 +7,7 @@ config INTEL_BAYTRAIL
>>> select HAVE_FSP
>>> select ARCH_MISC_INIT
>>> select CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED
>>> + select DM_EVENT
>>> imply HAVE_INTEL_ME
>>> imply ENABLE_MRC_CACHE
>>> imply AHCI_PCI
>>> diff --git a/arch/x86/cpu/broadwell/Kconfig b/arch/x86/cpu/broadwell/Kconfig
>>> index 5b015c89d950..39deda364479 100644
>>> --- a/arch/x86/cpu/broadwell/Kconfig
>>> +++ b/arch/x86/cpu/broadwell/Kconfig
>>> @@ -6,6 +6,7 @@
>>> config INTEL_BROADWELL
>>> bool
>>> select CACHE_MRC_BIN
>>> + select DM_EVENT
>>> select ARCH_EARLY_INIT_R
>>> imply HAVE_INTEL_ME
>>> imply ENABLE_MRC_CACHE
>>> diff --git a/arch/x86/cpu/ivybridge/Kconfig b/arch/x86/cpu/ivybridge/Kconfig
>>> index be3ef5e5d8f8..704f145adf88 100644
>>> --- a/arch/x86/cpu/ivybridge/Kconfig
>>> +++ b/arch/x86/cpu/ivybridge/Kconfig
>>> @@ -8,6 +8,7 @@
>>> config NORTHBRIDGE_INTEL_IVYBRIDGE
>>> bool
>>> select CACHE_MRC_BIN if HAVE_MRC
>>> + select DM_EVENT
>>> imply HAVE_INTEL_ME
>>> imply ENABLE_MRC_CACHE
>>> imply AHCI_PCI
>>> diff --git a/arch/x86/cpu/quark/Kconfig b/arch/x86/cpu/quark/Kconfig
>>> index 61bb5792c868..0d4008a31f4c 100644
>>> --- a/arch/x86/cpu/quark/Kconfig
>>> +++ b/arch/x86/cpu/quark/Kconfig
>>> @@ -7,6 +7,7 @@ config INTEL_QUARK
>>> select HAVE_RMU
>>> select ARCH_EARLY_INIT_R
>>> select ARCH_MISC_INIT
>>> + select DM_EVENT
>>> imply ENABLE_MRC_CACHE
>>> imply ETH_DESIGNWARE
>>> imply ICH_SPI
>>> diff --git a/board/google/Kconfig b/board/google/Kconfig
>>> index 0474b4e69384..a0f1a6097641 100644
>>> --- a/board/google/Kconfig
>>> +++ b/board/google/Kconfig
>>> @@ -18,6 +18,7 @@ choice
>>> config TARGET_CHROMEBOOK_CORAL
>>> bool "Chromebook coral"
>>> select BIOSEMU
>>> + select EVENT
>>> help
>>> This is a range of Intel-based laptops released in 2018. They use an
>>> Intel Apollo Lake SoC. The design supports WiFi, 4GB to 16GB of
>>> diff --git a/board/keymile/Kconfig b/board/keymile/Kconfig
>>> index e5d7c80a869d..bf899d005c46 100644
>>> --- a/board/keymile/Kconfig
>>> +++ b/board/keymile/Kconfig
>>> @@ -124,6 +124,7 @@ config SYS_IVM_EEPROM_PAGE_LEN
>>>
>>> config PG_WCOM_UBOOT_UPDATE_SUPPORTED
>>> bool "Enable U-boot Field Fail-Safe Update Functionality"
>>> + select EVENT
>>> default n
>>> help
>>> Indicates that field fail-safe u-boot update is supported.
>>> diff --git a/boot/Kconfig b/boot/Kconfig
>>> index 30bc182fcd5c..daa01a10ebdc 100644
>>> --- a/boot/Kconfig
>>> +++ b/boot/Kconfig
>>> @@ -474,6 +474,7 @@ config BOOTMETH_VBE
>>> depends on FIT
>>> default y
>>> select BOOTMETH_GLOBAL
>>> + select EVENT
>>> help
>>> Enables support for VBE boot. This is a standard boot method which
>>> supports selection of various firmware components, seleciton of an OS to
>>> @@ -482,6 +483,7 @@ config BOOTMETH_VBE
>>> config SPL_BOOTMETH_VBE
>>> bool "Bootdev support for Verified Boot for Embedded (SPL)"
>>> depends on SPL && FIT
>>> + select EVENT
>>> default y if VPL
>>> help
>>> Enables support for VBE boot. This is a standard boot method which
>>> @@ -491,6 +493,7 @@ config SPL_BOOTMETH_VBE
>>> config VPL_BOOTMETH_VBE
>>> bool "Bootdev support for Verified Boot for Embedded (VPL)"
>>> depends on VPL && FIT
>>> + select EVENT
>>> default y
>>> help
>>> Enables support for VBE boot. This is a standard boot method which
>>> diff --git a/cmd/Kconfig b/cmd/Kconfig
>>> index b2aefae9cb70..4fe2c75de256 100644
>>> --- a/cmd/Kconfig
>>> +++ b/cmd/Kconfig
>>> @@ -2622,6 +2622,7 @@ config CMD_DIAG
>>>
>>> config CMD_EVENT
>>> bool "event - Show information about events"
>>> + depends on EVENT
>>> default y if EVENT_DEBUG
>>> help
>>> This enables the 'event' command which provides information about
>>> diff --git a/common/Kconfig b/common/Kconfig
>>> index 439b2198f605..1c9f4774ba7a 100644
>>> --- a/common/Kconfig
>>> +++ b/common/Kconfig
>>> @@ -604,24 +604,23 @@ config CYCLIC_MAX_CPU_TIME_US
>>> endif # CYCLIC
>>>
>>> config EVENT
>>> - bool "General-purpose event-handling mechanism"
>>> - default y if SANDBOX
>>> + bool
>>> help
>>> - This enables sending and processing of events, to allow interested
>>> - parties to be alerted when something happens. This is an attempt to
>>> - stem the flow of weak functions, hooks, functions in board_f.c
>>> - and board_r.c and the Kconfig options below.
>>> + This adds a framework for general purpose sending and processing of
>>> + events, to allow interested parties to be alerted when something
>>> + happens. This is an attempt to stem the flow of weak functions,
>>> + hooks, functions in board_f.c and board_r.c and the Kconfig options
>>> + below.
>>>
>>> See doc/develop/event.rst for more information.
>>>
>>> if EVENT
>>>
>>> config EVENT_DYNAMIC
>>> - bool "Support event registration at runtime"
>>> - default y if SANDBOX
>>> + bool
>>> help
>>> Enable this to support adding an event spy at runtime, without adding
>>> - it to the EVENT_SPy() linker list. This increases code size slightly
>>> + it to the EVENT_SPY() linker list. This increases code size slightly
>>> but provides more flexibility for boards and subsystems that need it.
>>>
>>> config EVENT_DEBUG
>>> diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
>>> index 8fde77c23ee0..6fc8854b574b 100644
>>> --- a/drivers/core/Kconfig
>>> +++ b/drivers/core/Kconfig
>>> @@ -109,13 +109,14 @@ config DM_DEVICE_REMOVE
>>> causes USB host controllers to not be stopped when booting the OS.
>>>
>>> config DM_EVENT
>>> - bool "Support events with driver model"
>>> - depends on DM && EVENT
>>> - default y if SANDBOX
>>> + bool
>>> + depends on DM
>>> + select EVENT
>>> help
>>> This enables support for generating events related to driver model
>>> operations, such as prbing or removing a device. Subsystems can
>>> - register a 'spy' function that is called when the event occurs.
>>> + register a 'spy' function that is called when the event occurs. Such
>>> + subsystems must select this option.
>>>
>>> config SPL_DM_DEVICE_REMOVE
>>> bool "Support device removal in SPL"
>>> diff --git a/drivers/cpu/Kconfig b/drivers/cpu/Kconfig
>>> index 21874335c873..3bf04105e5e9 100644
>>> --- a/drivers/cpu/Kconfig
>>> +++ b/drivers/cpu/Kconfig
>>> @@ -23,7 +23,6 @@ config CPU_RISCV
>>> config CPU_MICROBLAZE
>>> bool "Enable Microblaze CPU driver"
>>> depends on CPU && MICROBLAZE
>>> - select EVENT
>>> select DM_EVENT
>>> select XILINX_MICROBLAZE0_PVR
>>> help
>>> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
>>> index b498c72206fd..c5c045e59349 100644
>>> --- a/lib/efi_loader/Kconfig
>>> +++ b/lib/efi_loader/Kconfig
>>> @@ -14,9 +14,9 @@ config EFI_LOADER
>>> depends on !EFI_APP
>>> default y if !ARM || SYS_CPU = armv7 || SYS_CPU = armv8
>>> select CHARSET
>>> - select DM_EVENT
>>> - select EVENT
>>> - select EVENT_DYNAMIC
>>> + # We need to send DM events, dynamically, in the EFI block driver
>>> + select DM_EVENT if PARTITIONS
>>> + select EVENT_DYNAMIC if PARTITIONS
>>
>> lib/efi_driver/efi_block_device.o is not related to partitions but to
>> block devices.
>>
>> These 'if's don't make sense.
>
> Yes, it's based on function. From lib/efi_driver/Makefile:
> ifeq ($(CONFIG_PARTITIONS),y)
> obj-y += efi_block_device.o
> endif
The code in efi_block_device.c does not contain any reference to
partitions. Codewise it depends only CONFIG_BLK which is required for
CONFIG_EFI_LOADER.
It is code in lib/efi_loader/efi_disk.c which does not compile without
CONFIG_PARTITIONS due to missing '#if's.
Please, remove "if PARTITIONS" because it only makes clean-up more
complicated.
Best regards
Heinrich
More information about the U-Boot
mailing list