* [PATCH v3 1/2] platform/x86/intel: Introduce Intel Elkhart Lake PSE I/O
2025-11-12 3:40 [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Raag Jadav
@ 2025-11-12 3:40 ` Raag Jadav
2025-11-19 11:27 ` Ilpo Järvinen
2025-11-12 3:40 ` [PATCH v3 2/2] gpio: elkhartlake: Convert to auxiliary driver Raag Jadav
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Raag Jadav @ 2025-11-12 3:40 UTC (permalink / raw)
To: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij, brgl
Cc: platform-driver-x86, linux-gpio, linux-kernel, Raag Jadav
Intel Elkhart Lake Programmable Service Engine (PSE) includes two PCI
devices that expose two different capabilities of GPIO and Timed I/O
as a single PCI function through shared MMIO with below layout.
GPIO: 0x0000 - 0x1000
TIO: 0x1000 - 0x2000
This driver enumerates the PCI parent device and creates auxiliary child
devices for these capabilities. The actual functionalities are provided
by their respective auxiliary drivers.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
MAINTAINERS | 7 ++
drivers/platform/x86/intel/Kconfig | 13 ++++
drivers/platform/x86/intel/Makefile | 1 +
drivers/platform/x86/intel/ehl_pse_io.c | 86 +++++++++++++++++++++++++
include/linux/ehl_pse_io_aux.h | 24 +++++++
5 files changed, 131 insertions(+)
create mode 100644 drivers/platform/x86/intel/ehl_pse_io.c
create mode 100644 include/linux/ehl_pse_io_aux.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 46126ce2f968..bd2a009d73c6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12499,6 +12499,13 @@ F: drivers/gpu/drm/xe/
F: include/drm/intel/
F: include/uapi/drm/xe_drm.h
+INTEL ELKHART LAKE PSE I/O DRIVER
+M: Raag Jadav <raag.jadav@intel.com>
+L: platform-driver-x86@vger.kernel.org
+S: Supported
+F: drivers/platform/x86/intel/ehl_pse_io.c
+F: include/linux/ehl_pse_io_aux.h
+
INTEL ETHERNET DRIVERS
M: Tony Nguyen <anthony.l.nguyen@intel.com>
M: Przemek Kitszel <przemyslaw.kitszel@intel.com>
diff --git a/drivers/platform/x86/intel/Kconfig b/drivers/platform/x86/intel/Kconfig
index 19a2246f2770..2900407d6095 100644
--- a/drivers/platform/x86/intel/Kconfig
+++ b/drivers/platform/x86/intel/Kconfig
@@ -41,6 +41,19 @@ config INTEL_VBTN
To compile this driver as a module, choose M here: the module will
be called intel_vbtn.
+config INTEL_EHL_PSE_IO
+ tristate "Intel Elkhart Lake PSE I/O driver"
+ depends on PCI
+ select AUXILIARY_BUS
+ help
+ Select this option to enable Intel Elkhart Lake PSE GPIO and Timed
+ I/O support. This driver enumerates the PCI parent device and
+ creates auxiliary child devices for these capabilities. The actual
+ functionalities are provided by their respective auxiliary drivers.
+
+ To compile this driver as a module, choose M here: the module will
+ be called intel_ehl_pse_io.
+
config INTEL_INT0002_VGPIO
tristate "Intel ACPI INT0002 Virtual GPIO driver"
depends on GPIOLIB && ACPI && PM_SLEEP
diff --git a/drivers/platform/x86/intel/Makefile b/drivers/platform/x86/intel/Makefile
index 78acb414e154..138b13756158 100644
--- a/drivers/platform/x86/intel/Makefile
+++ b/drivers/platform/x86/intel/Makefile
@@ -21,6 +21,7 @@ intel-target-$(CONFIG_INTEL_HID_EVENT) += hid.o
intel-target-$(CONFIG_INTEL_VBTN) += vbtn.o
# Intel miscellaneous drivers
+intel-target-$(CONFIG_INTEL_EHL_PSE_IO) += ehl_pse_io.o
intel-target-$(CONFIG_INTEL_INT0002_VGPIO) += int0002_vgpio.o
intel-target-$(CONFIG_INTEL_ISHTP_ECLITE) += ishtp_eclite.o
intel-target-$(CONFIG_INTEL_OAKTRAIL) += oaktrail.o
diff --git a/drivers/platform/x86/intel/ehl_pse_io.c b/drivers/platform/x86/intel/ehl_pse_io.c
new file mode 100644
index 000000000000..861e14808b35
--- /dev/null
+++ b/drivers/platform/x86/intel/ehl_pse_io.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Intel Elkhart Lake Programmable Service Engine (PSE) I/O
+ *
+ * Copyright (c) 2025 Intel Corporation.
+ *
+ * Author: Raag Jadav <raag.jadav@intel.com>
+ */
+
+#include <linux/auxiliary_bus.h>
+#include <linux/device/devres.h>
+#include <linux/errno.h>
+#include <linux/gfp_types.h>
+#include <linux/ioport.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/sizes.h>
+#include <linux/types.h>
+
+#include <linux/ehl_pse_io_aux.h>
+
+#define EHL_PSE_IO_DEV_SIZE SZ_4K
+
+static int ehl_pse_io_dev_create(struct pci_dev *pci, const char *name, int idx)
+{
+ struct device *dev = &pci->dev;
+ struct auxiliary_device *adev;
+ struct ehl_pse_io_data *data;
+ resource_size_t start, offset;
+ u32 id;
+
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ id = (pci_domain_nr(pci->bus) << 16) | pci_dev_id(pci);
+ start = pci_resource_start(pci, 0);
+ offset = EHL_PSE_IO_DEV_SIZE * idx;
+
+ data->mem = DEFINE_RES_MEM(start + offset, EHL_PSE_IO_DEV_SIZE);
+ data->irq = pci_irq_vector(pci, idx);
+
+ adev = __devm_auxiliary_device_create(dev, EHL_PSE_IO_NAME, name, data, id);
+
+ return adev ? 0 : -ENODEV;
+}
+
+static int ehl_pse_io_probe(struct pci_dev *pci, const struct pci_device_id *id)
+{
+ int ret;
+
+ ret = pcim_enable_device(pci);
+ if (ret)
+ return ret;
+
+ pci_set_master(pci);
+
+ ret = pci_alloc_irq_vectors(pci, 2, 2, PCI_IRQ_MSI);
+ if (ret < 0)
+ return ret;
+
+ ret = ehl_pse_io_dev_create(pci, EHL_PSE_GPIO_NAME, 0);
+ if (ret)
+ return ret;
+
+ return ehl_pse_io_dev_create(pci, EHL_PSE_TIO_NAME, 1);
+}
+
+static const struct pci_device_id ehl_pse_io_ids[] = {
+ { PCI_VDEVICE(INTEL, 0x4b88) },
+ { PCI_VDEVICE(INTEL, 0x4b89) },
+ { }
+};
+MODULE_DEVICE_TABLE(pci, ehl_pse_io_ids);
+
+static struct pci_driver ehl_pse_io_driver = {
+ .name = EHL_PSE_IO_NAME,
+ .id_table = ehl_pse_io_ids,
+ .probe = ehl_pse_io_probe,
+};
+module_pci_driver(ehl_pse_io_driver);
+
+MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>");
+MODULE_DESCRIPTION("Intel Elkhart Lake PSE I/O driver");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/ehl_pse_io_aux.h b/include/linux/ehl_pse_io_aux.h
new file mode 100644
index 000000000000..afb8587ee5fb
--- /dev/null
+++ b/include/linux/ehl_pse_io_aux.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Intel Elkhart Lake PSE I/O Auxiliary Device
+ *
+ * Copyright (c) 2025 Intel Corporation.
+ *
+ * Author: Raag Jadav <raag.jadav@intel.com>
+ */
+
+#ifndef _EHL_PSE_IO_AUX_H_
+#define _EHL_PSE_IO_AUX_H_
+
+#include <linux/ioport.h>
+
+#define EHL_PSE_IO_NAME "ehl_pse_io"
+#define EHL_PSE_GPIO_NAME "gpio"
+#define EHL_PSE_TIO_NAME "pps_tio"
+
+struct ehl_pse_io_data {
+ struct resource mem;
+ int irq;
+};
+
+#endif /* _EHL_PSE_IO_AUX_H_ */
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v3 1/2] platform/x86/intel: Introduce Intel Elkhart Lake PSE I/O
2025-11-12 3:40 ` [PATCH v3 1/2] platform/x86/intel: " Raag Jadav
@ 2025-11-19 11:27 ` Ilpo Järvinen
0 siblings, 0 replies; 9+ messages in thread
From: Ilpo Järvinen @ 2025-11-19 11:27 UTC (permalink / raw)
To: Raag Jadav
Cc: Hans de Goede, Andy Shevchenko, linus.walleij, brgl,
platform-driver-x86, linux-gpio, LKML
[-- Attachment #1: Type: text/plain, Size: 6819 bytes --]
On Wed, 12 Nov 2025, Raag Jadav wrote:
> Intel Elkhart Lake Programmable Service Engine (PSE) includes two PCI
> devices that expose two different capabilities of GPIO and Timed I/O
> as a single PCI function through shared MMIO with below layout.
>
> GPIO: 0x0000 - 0x1000
> TIO: 0x1000 - 0x2000
>
> This driver enumerates the PCI parent device and creates auxiliary child
> devices for these capabilities. The actual functionalities are provided
> by their respective auxiliary drivers.
>
> Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Acked-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
--
i.
> ---
> MAINTAINERS | 7 ++
> drivers/platform/x86/intel/Kconfig | 13 ++++
> drivers/platform/x86/intel/Makefile | 1 +
> drivers/platform/x86/intel/ehl_pse_io.c | 86 +++++++++++++++++++++++++
> include/linux/ehl_pse_io_aux.h | 24 +++++++
> 5 files changed, 131 insertions(+)
> create mode 100644 drivers/platform/x86/intel/ehl_pse_io.c
> create mode 100644 include/linux/ehl_pse_io_aux.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 46126ce2f968..bd2a009d73c6 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12499,6 +12499,13 @@ F: drivers/gpu/drm/xe/
> F: include/drm/intel/
> F: include/uapi/drm/xe_drm.h
>
> +INTEL ELKHART LAKE PSE I/O DRIVER
> +M: Raag Jadav <raag.jadav@intel.com>
> +L: platform-driver-x86@vger.kernel.org
> +S: Supported
> +F: drivers/platform/x86/intel/ehl_pse_io.c
> +F: include/linux/ehl_pse_io_aux.h
> +
> INTEL ETHERNET DRIVERS
> M: Tony Nguyen <anthony.l.nguyen@intel.com>
> M: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> diff --git a/drivers/platform/x86/intel/Kconfig b/drivers/platform/x86/intel/Kconfig
> index 19a2246f2770..2900407d6095 100644
> --- a/drivers/platform/x86/intel/Kconfig
> +++ b/drivers/platform/x86/intel/Kconfig
> @@ -41,6 +41,19 @@ config INTEL_VBTN
> To compile this driver as a module, choose M here: the module will
> be called intel_vbtn.
>
> +config INTEL_EHL_PSE_IO
> + tristate "Intel Elkhart Lake PSE I/O driver"
> + depends on PCI
> + select AUXILIARY_BUS
> + help
> + Select this option to enable Intel Elkhart Lake PSE GPIO and Timed
> + I/O support. This driver enumerates the PCI parent device and
> + creates auxiliary child devices for these capabilities. The actual
> + functionalities are provided by their respective auxiliary drivers.
> +
> + To compile this driver as a module, choose M here: the module will
> + be called intel_ehl_pse_io.
> +
> config INTEL_INT0002_VGPIO
> tristate "Intel ACPI INT0002 Virtual GPIO driver"
> depends on GPIOLIB && ACPI && PM_SLEEP
> diff --git a/drivers/platform/x86/intel/Makefile b/drivers/platform/x86/intel/Makefile
> index 78acb414e154..138b13756158 100644
> --- a/drivers/platform/x86/intel/Makefile
> +++ b/drivers/platform/x86/intel/Makefile
> @@ -21,6 +21,7 @@ intel-target-$(CONFIG_INTEL_HID_EVENT) += hid.o
> intel-target-$(CONFIG_INTEL_VBTN) += vbtn.o
>
> # Intel miscellaneous drivers
> +intel-target-$(CONFIG_INTEL_EHL_PSE_IO) += ehl_pse_io.o
> intel-target-$(CONFIG_INTEL_INT0002_VGPIO) += int0002_vgpio.o
> intel-target-$(CONFIG_INTEL_ISHTP_ECLITE) += ishtp_eclite.o
> intel-target-$(CONFIG_INTEL_OAKTRAIL) += oaktrail.o
> diff --git a/drivers/platform/x86/intel/ehl_pse_io.c b/drivers/platform/x86/intel/ehl_pse_io.c
> new file mode 100644
> index 000000000000..861e14808b35
> --- /dev/null
> +++ b/drivers/platform/x86/intel/ehl_pse_io.c
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Intel Elkhart Lake Programmable Service Engine (PSE) I/O
> + *
> + * Copyright (c) 2025 Intel Corporation.
> + *
> + * Author: Raag Jadav <raag.jadav@intel.com>
> + */
> +
> +#include <linux/auxiliary_bus.h>
> +#include <linux/device/devres.h>
> +#include <linux/errno.h>
> +#include <linux/gfp_types.h>
> +#include <linux/ioport.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/pci.h>
> +#include <linux/sizes.h>
> +#include <linux/types.h>
> +
> +#include <linux/ehl_pse_io_aux.h>
> +
> +#define EHL_PSE_IO_DEV_SIZE SZ_4K
> +
> +static int ehl_pse_io_dev_create(struct pci_dev *pci, const char *name, int idx)
> +{
> + struct device *dev = &pci->dev;
> + struct auxiliary_device *adev;
> + struct ehl_pse_io_data *data;
> + resource_size_t start, offset;
> + u32 id;
> +
> + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> + if (!data)
> + return -ENOMEM;
> +
> + id = (pci_domain_nr(pci->bus) << 16) | pci_dev_id(pci);
> + start = pci_resource_start(pci, 0);
> + offset = EHL_PSE_IO_DEV_SIZE * idx;
> +
> + data->mem = DEFINE_RES_MEM(start + offset, EHL_PSE_IO_DEV_SIZE);
> + data->irq = pci_irq_vector(pci, idx);
> +
> + adev = __devm_auxiliary_device_create(dev, EHL_PSE_IO_NAME, name, data, id);
> +
> + return adev ? 0 : -ENODEV;
> +}
> +
> +static int ehl_pse_io_probe(struct pci_dev *pci, const struct pci_device_id *id)
> +{
> + int ret;
> +
> + ret = pcim_enable_device(pci);
> + if (ret)
> + return ret;
> +
> + pci_set_master(pci);
> +
> + ret = pci_alloc_irq_vectors(pci, 2, 2, PCI_IRQ_MSI);
> + if (ret < 0)
> + return ret;
> +
> + ret = ehl_pse_io_dev_create(pci, EHL_PSE_GPIO_NAME, 0);
> + if (ret)
> + return ret;
> +
> + return ehl_pse_io_dev_create(pci, EHL_PSE_TIO_NAME, 1);
> +}
> +
> +static const struct pci_device_id ehl_pse_io_ids[] = {
> + { PCI_VDEVICE(INTEL, 0x4b88) },
> + { PCI_VDEVICE(INTEL, 0x4b89) },
> + { }
> +};
> +MODULE_DEVICE_TABLE(pci, ehl_pse_io_ids);
> +
> +static struct pci_driver ehl_pse_io_driver = {
> + .name = EHL_PSE_IO_NAME,
> + .id_table = ehl_pse_io_ids,
> + .probe = ehl_pse_io_probe,
> +};
> +module_pci_driver(ehl_pse_io_driver);
> +
> +MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>");
> +MODULE_DESCRIPTION("Intel Elkhart Lake PSE I/O driver");
> +MODULE_LICENSE("GPL");
> diff --git a/include/linux/ehl_pse_io_aux.h b/include/linux/ehl_pse_io_aux.h
> new file mode 100644
> index 000000000000..afb8587ee5fb
> --- /dev/null
> +++ b/include/linux/ehl_pse_io_aux.h
> @@ -0,0 +1,24 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Intel Elkhart Lake PSE I/O Auxiliary Device
> + *
> + * Copyright (c) 2025 Intel Corporation.
> + *
> + * Author: Raag Jadav <raag.jadav@intel.com>
> + */
> +
> +#ifndef _EHL_PSE_IO_AUX_H_
> +#define _EHL_PSE_IO_AUX_H_
> +
> +#include <linux/ioport.h>
> +
> +#define EHL_PSE_IO_NAME "ehl_pse_io"
> +#define EHL_PSE_GPIO_NAME "gpio"
> +#define EHL_PSE_TIO_NAME "pps_tio"
> +
> +struct ehl_pse_io_data {
> + struct resource mem;
> + int irq;
> +};
> +
> +#endif /* _EHL_PSE_IO_AUX_H_ */
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/2] gpio: elkhartlake: Convert to auxiliary driver
2025-11-12 3:40 [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Raag Jadav
2025-11-12 3:40 ` [PATCH v3 1/2] platform/x86/intel: " Raag Jadav
@ 2025-11-12 3:40 ` Raag Jadav
2025-11-19 11:42 ` Ilpo Järvinen
2025-11-12 15:14 ` [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Bartosz Golaszewski
2025-11-19 13:09 ` Bartosz Golaszewski
3 siblings, 1 reply; 9+ messages in thread
From: Raag Jadav @ 2025-11-12 3:40 UTC (permalink / raw)
To: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij, brgl
Cc: platform-driver-x86, linux-gpio, linux-kernel, Raag Jadav,
Bartosz Golaszewski
Since PCI device should not be abusing platform device, MFD parent to
platform child path is no longer being pursued for this driver. Convert
it to auxiliary driver, which will be used by EHL PSE auxiliary device.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/Kconfig | 2 +-
drivers/gpio/gpio-elkhartlake.c | 36 +++++++++++++++++----------------
2 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 7ee3afbc2b05..d4b4451b4696 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -1413,7 +1413,7 @@ config HTC_EGPIO
config GPIO_ELKHARTLAKE
tristate "Intel Elkhart Lake PSE GPIO support"
- depends on X86 || COMPILE_TEST
+ depends on INTEL_EHL_PSE_IO
select GPIO_TANGIER
help
Select this option to enable GPIO support for Intel Elkhart Lake
diff --git a/drivers/gpio/gpio-elkhartlake.c b/drivers/gpio/gpio-elkhartlake.c
index 95de52d2cc63..b96e7928b6e5 100644
--- a/drivers/gpio/gpio-elkhartlake.c
+++ b/drivers/gpio/gpio-elkhartlake.c
@@ -2,43 +2,46 @@
/*
* Intel Elkhart Lake PSE GPIO driver
*
- * Copyright (c) 2023 Intel Corporation.
+ * Copyright (c) 2023, 2025 Intel Corporation.
*
* Authors: Pandith N <pandith.n@intel.com>
* Raag Jadav <raag.jadav@intel.com>
*/
+#include <linux/auxiliary_bus.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/module.h>
-#include <linux/platform_device.h>
#include <linux/pm.h>
+#include <linux/ehl_pse_io_aux.h>
+
#include "gpio-tangier.h"
/* Each Intel EHL PSE GPIO Controller has 30 GPIO pins */
#define EHL_PSE_NGPIO 30
-static int ehl_gpio_probe(struct platform_device *pdev)
+static int ehl_gpio_probe(struct auxiliary_device *adev, const struct auxiliary_device_id *id)
{
- struct device *dev = &pdev->dev;
+ struct device *dev = &adev->dev;
+ struct ehl_pse_io_data *data;
struct tng_gpio *priv;
- int irq, ret;
+ int ret;
- irq = platform_get_irq(pdev, 0);
- if (irq < 0)
- return irq;
+ data = dev_get_platdata(dev);
+ if (!data)
+ return -ENODATA;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
- priv->reg_base = devm_platform_ioremap_resource(pdev, 0);
+ priv->reg_base = devm_ioremap_resource(dev, &data->mem);
if (IS_ERR(priv->reg_base))
return PTR_ERR(priv->reg_base);
priv->dev = dev;
- priv->irq = irq;
+ priv->irq = data->irq;
priv->info.base = -1;
priv->info.ngpio = EHL_PSE_NGPIO;
@@ -51,25 +54,24 @@ static int ehl_gpio_probe(struct platform_device *pdev)
if (ret)
return dev_err_probe(dev, ret, "tng_gpio_probe error\n");
- platform_set_drvdata(pdev, priv);
+ auxiliary_set_drvdata(adev, priv);
return 0;
}
-static const struct platform_device_id ehl_gpio_ids[] = {
- { "gpio-elkhartlake" },
+static const struct auxiliary_device_id ehl_gpio_ids[] = {
+ { EHL_PSE_IO_NAME "." EHL_PSE_GPIO_NAME },
{ }
};
-MODULE_DEVICE_TABLE(platform, ehl_gpio_ids);
+MODULE_DEVICE_TABLE(auxiliary, ehl_gpio_ids);
-static struct platform_driver ehl_gpio_driver = {
+static struct auxiliary_driver ehl_gpio_driver = {
.driver = {
- .name = "gpio-elkhartlake",
.pm = pm_sleep_ptr(&tng_gpio_pm_ops),
},
.probe = ehl_gpio_probe,
.id_table = ehl_gpio_ids,
};
-module_platform_driver(ehl_gpio_driver);
+module_auxiliary_driver(ehl_gpio_driver);
MODULE_AUTHOR("Pandith N <pandith.n@intel.com>");
MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>");
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v3 2/2] gpio: elkhartlake: Convert to auxiliary driver
2025-11-12 3:40 ` [PATCH v3 2/2] gpio: elkhartlake: Convert to auxiliary driver Raag Jadav
@ 2025-11-19 11:42 ` Ilpo Järvinen
0 siblings, 0 replies; 9+ messages in thread
From: Ilpo Järvinen @ 2025-11-19 11:42 UTC (permalink / raw)
To: Raag Jadav
Cc: Hans de Goede, Andy Shevchenko, linus.walleij, brgl,
platform-driver-x86, linux-gpio, LKML, Bartosz Golaszewski
[-- Attachment #1: Type: text/plain, Size: 4067 bytes --]
On Wed, 12 Nov 2025, Raag Jadav wrote:
> Since PCI device should not be abusing platform device, MFD parent to
> platform child path is no longer being pursued for this driver. Convert
> it to auxiliary driver, which will be used by EHL PSE auxiliary device.
>
> Signed-off-by: Raag Jadav <raag.jadav@intel.com>
> Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> drivers/gpio/Kconfig | 2 +-
> drivers/gpio/gpio-elkhartlake.c | 36 +++++++++++++++++----------------
> 2 files changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
> index 7ee3afbc2b05..d4b4451b4696 100644
> --- a/drivers/gpio/Kconfig
> +++ b/drivers/gpio/Kconfig
> @@ -1413,7 +1413,7 @@ config HTC_EGPIO
>
> config GPIO_ELKHARTLAKE
> tristate "Intel Elkhart Lake PSE GPIO support"
> - depends on X86 || COMPILE_TEST
> + depends on INTEL_EHL_PSE_IO
> select GPIO_TANGIER
> help
> Select this option to enable GPIO support for Intel Elkhart Lake
> diff --git a/drivers/gpio/gpio-elkhartlake.c b/drivers/gpio/gpio-elkhartlake.c
> index 95de52d2cc63..b96e7928b6e5 100644
> --- a/drivers/gpio/gpio-elkhartlake.c
> +++ b/drivers/gpio/gpio-elkhartlake.c
> @@ -2,43 +2,46 @@
> /*
> * Intel Elkhart Lake PSE GPIO driver
> *
> - * Copyright (c) 2023 Intel Corporation.
> + * Copyright (c) 2023, 2025 Intel Corporation.
> *
> * Authors: Pandith N <pandith.n@intel.com>
> * Raag Jadav <raag.jadav@intel.com>
> */
>
> +#include <linux/auxiliary_bus.h>
> #include <linux/device.h>
> #include <linux/err.h>
> #include <linux/module.h>
> -#include <linux/platform_device.h>
> #include <linux/pm.h>
>
> +#include <linux/ehl_pse_io_aux.h>
> +
> #include "gpio-tangier.h"
>
> /* Each Intel EHL PSE GPIO Controller has 30 GPIO pins */
> #define EHL_PSE_NGPIO 30
>
> -static int ehl_gpio_probe(struct platform_device *pdev)
> +static int ehl_gpio_probe(struct auxiliary_device *adev, const struct auxiliary_device_id *id)
> {
> - struct device *dev = &pdev->dev;
> + struct device *dev = &adev->dev;
> + struct ehl_pse_io_data *data;
> struct tng_gpio *priv;
> - int irq, ret;
> + int ret;
>
> - irq = platform_get_irq(pdev, 0);
> - if (irq < 0)
> - return irq;
> + data = dev_get_platdata(dev);
> + if (!data)
> + return -ENODATA;
>
> priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> if (!priv)
> return -ENOMEM;
>
> - priv->reg_base = devm_platform_ioremap_resource(pdev, 0);
> + priv->reg_base = devm_ioremap_resource(dev, &data->mem);
> if (IS_ERR(priv->reg_base))
> return PTR_ERR(priv->reg_base);
>
> priv->dev = dev;
> - priv->irq = irq;
> + priv->irq = data->irq;
>
> priv->info.base = -1;
> priv->info.ngpio = EHL_PSE_NGPIO;
> @@ -51,25 +54,24 @@ static int ehl_gpio_probe(struct platform_device *pdev)
> if (ret)
> return dev_err_probe(dev, ret, "tng_gpio_probe error\n");
>
> - platform_set_drvdata(pdev, priv);
> + auxiliary_set_drvdata(adev, priv);
> return 0;
> }
>
> -static const struct platform_device_id ehl_gpio_ids[] = {
> - { "gpio-elkhartlake" },
> +static const struct auxiliary_device_id ehl_gpio_ids[] = {
> + { EHL_PSE_IO_NAME "." EHL_PSE_GPIO_NAME },
> { }
> };
> -MODULE_DEVICE_TABLE(platform, ehl_gpio_ids);
> +MODULE_DEVICE_TABLE(auxiliary, ehl_gpio_ids);
>
> -static struct platform_driver ehl_gpio_driver = {
> +static struct auxiliary_driver ehl_gpio_driver = {
> .driver = {
> - .name = "gpio-elkhartlake",
> .pm = pm_sleep_ptr(&tng_gpio_pm_ops),
> },
> .probe = ehl_gpio_probe,
> .id_table = ehl_gpio_ids,
> };
> -module_platform_driver(ehl_gpio_driver);
> +module_auxiliary_driver(ehl_gpio_driver);
>
> MODULE_AUTHOR("Pandith N <pandith.n@intel.com>");
> MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>");
>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
--
i.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O
2025-11-12 3:40 [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Raag Jadav
2025-11-12 3:40 ` [PATCH v3 1/2] platform/x86/intel: " Raag Jadav
2025-11-12 3:40 ` [PATCH v3 2/2] gpio: elkhartlake: Convert to auxiliary driver Raag Jadav
@ 2025-11-12 15:14 ` Bartosz Golaszewski
2025-11-19 6:40 ` Raag Jadav
2025-11-19 13:09 ` Bartosz Golaszewski
3 siblings, 1 reply; 9+ messages in thread
From: Bartosz Golaszewski @ 2025-11-12 15:14 UTC (permalink / raw)
To: Raag Jadav
Cc: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij,
platform-driver-x86, linux-gpio, linux-kernel
On Wed, Nov 12, 2025 at 4:41 AM Raag Jadav <raag.jadav@intel.com> wrote:
>
> This series adds Intel Elkhart Lake PSE I/O driver which enumerates the
> PCI parent device and splits two child I/O devices (GPIO and Timed I/O
> which are available as a single PCI function through shared MMIO) to their
> respective I/O drivers.
>
> In spirit, it is a continuation of PSE TIO series[1] which received
> objection from Greg for abusing platform device and has now been reworked
> to use auxiliary device instead.
>
> Currently TIO driver[2] falls under PPS subsystem supporting generator
> functionality and will be coming up in a separate follow-up series for
> its independent design changes as per below roadmap.
>
> => Extend TIO driver[2] to support PPS client functionality.
> => Develop a PPS common driver which hooks to both generator and client
> counterparts.
> => Develop an auxiliary glue driver for PPS common driver.
>
> [1] https://lore.kernel.org/r/20250307052231.551737-1-raag.jadav@intel.com
> [2] https://lore.kernel.org/r/20250219040618.70962-1-subramanian.mohan@intel.com
>
> v2:
> - Consolidate OFFSET and SIZE macros (Andy)
> - Make child device objects parent managed (Andy)
> - Fix double free on error path (Andy)
> - Shorten child device names to fit id string length (Andy)
>
> v3:
> - Use auxiliary_device_create() (Andy)
>
> Raag Jadav (2):
> platform/x86/intel: Introduce Intel Elkhart Lake PSE I/O
> gpio: elkhartlake: Convert to auxiliary driver
>
> MAINTAINERS | 7 ++
> drivers/gpio/Kconfig | 2 +-
> drivers/gpio/gpio-elkhartlake.c | 36 ++++++-----
> drivers/platform/x86/intel/Kconfig | 13 ++++
> drivers/platform/x86/intel/Makefile | 1 +
> drivers/platform/x86/intel/ehl_pse_io.c | 86 +++++++++++++++++++++++++
> include/linux/ehl_pse_io_aux.h | 24 +++++++
> 7 files changed, 151 insertions(+), 18 deletions(-)
> create mode 100644 drivers/platform/x86/intel/ehl_pse_io.c
> create mode 100644 include/linux/ehl_pse_io_aux.h
>
> --
> 2.43.0
>
When this goes into the x86 tree, can you make it available on an
immutable branch for me to pull into the GPIO tree? Either just patch
1/2 or both of them with my Ack.
Bart
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O
2025-11-12 15:14 ` [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Bartosz Golaszewski
@ 2025-11-19 6:40 ` Raag Jadav
2025-11-19 7:29 ` Bartosz Golaszewski
0 siblings, 1 reply; 9+ messages in thread
From: Raag Jadav @ 2025-11-19 6:40 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij,
platform-driver-x86, linux-gpio, linux-kernel
On Wed, Nov 12, 2025 at 04:14:11PM +0100, Bartosz Golaszewski wrote:
...
> When this goes into the x86 tree, can you make it available on an
> immutable branch for me to pull into the GPIO tree? Either just patch
> 1/2 or both of them with my Ack.
Anything I can do to move this forward?
Raag
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O
2025-11-19 6:40 ` Raag Jadav
@ 2025-11-19 7:29 ` Bartosz Golaszewski
0 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2025-11-19 7:29 UTC (permalink / raw)
To: Raag Jadav
Cc: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij,
platform-driver-x86, linux-gpio, linux-kernel
On Wed, Nov 19, 2025 at 7:40 AM Raag Jadav <raag.jadav@intel.com> wrote:
>
> On Wed, Nov 12, 2025 at 04:14:11PM +0100, Bartosz Golaszewski wrote:
>
> ...
>
> > When this goes into the x86 tree, can you make it available on an
> > immutable branch for me to pull into the GPIO tree? Either just patch
> > 1/2 or both of them with my Ack.
>
> Anything I can do to move this forward?
>
> Raag
With an Ack from Ilpo I can take it through my tree.
Bart
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O
2025-11-12 3:40 [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Raag Jadav
` (2 preceding siblings ...)
2025-11-12 15:14 ` [PATCH v3 0/2] Introduce Intel Elkhart Lake PSE I/O Bartosz Golaszewski
@ 2025-11-19 13:09 ` Bartosz Golaszewski
3 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2025-11-19 13:09 UTC (permalink / raw)
To: hansg, ilpo.jarvinen, andriy.shevchenko, linus.walleij, brgl,
Raag Jadav
Cc: Bartosz Golaszewski, platform-driver-x86, linux-gpio,
linux-kernel
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
On Wed, 12 Nov 2025 09:10:09 +0530, Raag Jadav wrote:
> This series adds Intel Elkhart Lake PSE I/O driver which enumerates the
> PCI parent device and splits two child I/O devices (GPIO and Timed I/O
> which are available as a single PCI function through shared MMIO) to their
> respective I/O drivers.
>
> In spirit, it is a continuation of PSE TIO series[1] which received
> objection from Greg for abusing platform device and has now been reworked
> to use auxiliary device instead.
>
> [...]
Applied, thanks!
[1/2] platform/x86/intel: Introduce Intel Elkhart Lake PSE I/O
https://git.kernel.org/brgl/linux/c/a0c83150eea5807dbedf786f55cd49b14af118a8
[2/2] gpio: elkhartlake: Convert to auxiliary driver
https://git.kernel.org/brgl/linux/c/10c15296906952016a84e1e45d8dc361f35afbd8
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
^ permalink raw reply [flat|nested] 9+ messages in thread