On 6/11/25 00:59, Tom Rini wrote:
On Tue, Jun 10, 2025 at 06:50:51PM +0200, Casey Connolly wrote:

Qualcomm peripherals like UART, SPI, I2C, etc are all exposed under a
common GENI Serial Engine wrapper device. Replace the stub driver we use
for this currently with a full-on misc device and implement support for
loading peripheral firmware.

Each of the peripherals has it's own protocol-specific firmware, this is
stored on the internal storage of the device with a well-known partition
type GUID.

To support this, GENI will bind peripherals in two stages. First the
ones that already have firmware loaded (such as the serial port) are
bound in the typical way. But devices that require firmware loading are
deferred until EVT_LAST_STAGE_INIT. At this point we can be sure that
the storage device is available, so we load the firmware and then bind
and probe the remaining children.

Child devices are expected to determine if firmware loading is necessary
and call qcom_geni_load_firmware().

Since Linux currently doesn't support loading firmware (and firmware may
not be available), we probe all GENI peripherals to ensure that they
always load firmware if necessary.

Signed-off-by: Casey Connolly <casey.conno...@linaro.org>
[snip]
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 
579c8acfcb466122c4fe66950ec7ca24c355b43a..5b83e3386be6ab7fa8d7f5306851d90a87fb75c3
 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1124,8 +1124,9 @@ config ARCH_SNAPDRAGON
        select LINUX_KERNEL_IMAGE_HEADER if !ENABLE_ARM_SOC_BOOT0_HOOK
        select SYSRESET
        select SYSRESET_PSCI
        select ANDROID_BOOT_IMAGE_IGNORE_BLOB_ADDR
+       select QCOM_GENI
        imply OF_UPSTREAM
        imply CMD_DM
        imply DM_USB_GADGET
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 
ffc5868c0dd3e884fddb98b10f4b878d3f08b43a..78aaf003852aab96450963d93678787d30892f1b
 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -82,8 +82,17 @@ config GATEWORKS_SC
          Enable access for the Gateworks System Controller used on Gateworks
          boards to provide a boot watchdog, power control, temperature monitor,
          voltage ADCs, and EEPROM.
+config QCOM_GENI
+       bool "Qualcomm Generic Interface (GENI) driver"
+       depends on MISC

So, this can get tricky. In ARCH_SNAPDRAGON you do not select MISC.
QCOM_GENI correctly depends on MISC. Therefore there's a possible
dependency problem that Kconfig might start complaining about. In fact,

Oh good point... on reflection i don't think it's correct to select QCOM_GENI for ARCH_SNAPDRAGON anyways since some of the older platforms don't use GENI anyway.

I'll rework this so that the GENI peripherals themselves (i2c, spi, uart) depend on QCOM_GENI instead, then all these will be added to the defconfigs.

Thanks,

using qconfig to poke at what has which things set:
dragonboard410c dragonboard820c hmibsc qcom_ipq9574_mmc
should all have some warning? But IIRC, annoyingly, we couldn't
figure out how to make those kind of Kconfig warnings fatal in CI.

That's annoying... What about having a script that verifies that all the =y options in the defconfig are also present in the .config? I guess that solves a slightly different problem but may be useful regardless...

Thanks,


--
Casey (she/they)

Reply via email to