summaryrefslogtreecommitdiff
path: root/drivers/gpio
AgeCommit message (Collapse)Author
3 daysgpio: scmi: Add gpio_scmi driverDan Carpenter
This provides GPIO support over SCMI. It is built on top of the pinctrl-scmi driver. A typical device tree entry might look like this: gpio1 { compatible = "scmi-pinctrl-gpio"; gpio-controller; #gpio-cells = <2>; ngpios = <10>; gpio-ranges = <&scmi_pinctrl 0 8 4>, <&scmi_pinctrl 4 12 1>, <&scmi_pinctrl 5 15 1>, <&scmi_pinctrl 6 17 4>; pinctrl-names = "default"; pinctrl-0 = <&i2c2_pins>; }; In this GPIO driver the one thing which is different is that in the gpio-ranges the first numbers which represent how the pins are exposed to the users have to start at zero and it can't have gaps. Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: Peng Fan <[email protected]>
8 daysgpio: Correct dependencies for legacy CMD_PCA953XTom Rini
The legacy CMD_PCA953X command can only be built when the matching legacy driver is enabled, add that dependency to Kconfig. Signed-off-by: Tom Rini <[email protected]>
2026-03-09Merge tag 'v2026.04-rc4' into nextTom Rini
Prepare v2026.04-rc4
2026-03-04treewide: Remove Timesys from ADI ADSP maintenancePhilip Molloy
After years of developing the ADI ADSP platform, Timesys was purchased by another company and is no longer contracted to maintain the platform. Signed-off-by: Philip Molloy <[email protected]> Reviewed-by: Greg Malysa <[email protected]>
2026-02-24gpio: stm32-gpio: prevent the use of the secure protected pinsFabien Dessenne
The hardware denies any access from the U-Boot non-secure world to the secure-protected pins. Hence, prevent any driver to request such a pin. Signed-off-by: Fabien Dessenne <[email protected]> Signed-off-by: Patrice Chotard <[email protected]> Reviewed-by: Patrick Delaunay <[email protected]>
2026-02-17Merge patch series "treewide: Clean up usage of DECLARE_GLOBAL_DATA_PTR"Tom Rini
Peng Fan (OSS) <[email protected]> says: This patch set primarily removes unused DECLARE_GLOBAL_DATA_PTR instances. Many files declare DECLARE_GLOBAL_DATA_PTR and include asm/global_data.h even though gd is never used. In these cases, asm/global_data.h is effectively treated as a proxy header, which is not a good practice. Following the Include What You Use principle, files should include only the headers they actually depend on, rather than relying on global_data.h indirectly. This approach is also adopted in Linux kernel [1]. The first few patches are prepartion to avoid building break after remove the including of global_data.h. A script is for filtering the files: list=`find . -name "*.[ch]"` for source in ${list} do result=`sed -n '/DECLARE_GLOBAL_DATA_PTR/p' ${source}` if [ "${result}" == "DECLARE_GLOBAL_DATA_PTR;" ]; then echo "Found in ${source}" result=`sed -n '/\<gd\>/p' ${source}` result2=`sed -n '/\<gd_/p' ${source}` result3=`sed -n '/\<gd->/p' ${source}` if [ "${result}" == "" ] && [ "${result2}" == "" ] && [ "${result3}" == "" ];then echo "Cleanup ${source}" sed -i '/DECLARE_GLOBAL_DATA_PTR/{N;/\n[[:space:]]*$/d;s/.*\n//;}' ${source} sed -i '/DECLARE_GLOBAL_DATA_PTR/d' ${source} sed -i '/global_data.h/d' ${source} git add ${source} fi fi done [1] https://lpc.events/event/17/contributions/1620/attachments/1228/2520/Linux%20Kernel%20Header%20Optimization.pdf CI: https://github.com/u-boot/u-boot/pull/865 Link: https://lore.kernel.org/r/[email protected]
2026-02-17treewide: Clean up DECLARE_GLOBAL_DATA_PTR usagePeng Fan
Remove DECLARE_GLOBAL_DATA_PTR from files where gd is not used, and drop the unnecessary inclusion of asm/global_data.h. Headers should be included directly by the files that need them, rather than indirectly via global_data.h. Reviewed-by: Patrice Chotard <[email protected]> #STMicroelectronics boards and STM32MP1 ram test driver Tested-by: Anshul Dalal <[email protected]> #TI boards Acked-by: Yao Zi <[email protected]> #TH1520 Signed-off-by: Peng Fan <[email protected]>
2026-02-13gpio: Add GPIO delay driverMichal Simek
Add a GPIO controller driver that provides configurable delays when setting GPIO output values. This is useful for hardware that requires specific timing delays during power sequencing or GPIO state changes. The driver wraps underlying GPIO controllers and adds programmable ramp-up and ramp-down delays specified in microseconds through the device tree. Each GPIO can have independent delay timings. Device tree binding matches Linux. Signed-off-by: Michal Simek <[email protected]> Link: https://lore.kernel.org/r/575998efc6ba0e405640789cf8d05f0b633f496e.1770105146.git.michal.simek@amd.com
2026-01-09Merge patch series "Enable / require DEVRES for devm_.alloc usage outside xPL"Tom Rini
Tom Rini <[email protected]> says: As seen by a number of patches fixing memory leaks, U-Boot has a problem with developer expectations around devm_kmalloc and friends. Namely, whereas in Linux these memory allocations will be freed automatically in most cases, in U-Boot this is only true if DEVRES is enabled. Now, intentionally, in xPL phases, we do not (and do not offer as an option) enabling DEVRES. However in full U-Boot this is left either to the user, or some drivers have select'd DEVRES on their own. This inconsistency is a problem. This series goes and deals with two small issues that were shown by having all drivers that use devm_.alloc to allocate memory also select DEVRES and then we make DEVRES no longer be a prompted option and instead select'd as needed. We do not make this unconditional as it would result in growing the resulting binary on the many platforms which have no users of the devm_.alloc family of functions. Link: https://lore.kernel.org/r/[email protected]
2026-01-09dm: core: Default to using DEVRES outside of xPLTom Rini
The devm alloc functions that we have may follow the Linux kernel model where allocations are (almost always) automatically free()'d. However, quite often we don't enable, in full U-Boot, the tracking and free()'ing functionality. This in turn leads to memory leaks because the driver author expects that since the functions have the same name as in the Linux Kernel they have the same behavior. In turn we then get functionally correct commits such as commit 00e1fed93c8c ("firmware: ti_sci: Fix memory leaks in devm_ti_sci_get_of_resource") that manually add these calls. Rather than manually tracking allocations and implementing free()s, rework things so that we follow expectations by enabling the DEVRES functionality (outside of xPL phases). This turns DEVRES from a prompted symbol to a symbol that must be select'd, and we now remove our non-managed alloc/free functions from outside of xPL builds. Reviewed-by: Michael Trimarchi <[email protected]> Signed-off-by: Tom Rini <[email protected]>
2025-12-31Merge patch series "modify npcm7xx/8xx feature and bug fixed"Tom Rini
Jim Liu <[email protected]> says: Modify npcm7xx/8xx features and bug fixes. Link: https://lore.kernel.org/r/[email protected]
2025-12-31gpio: sgpio: modify persist check conditionJim Liu
Modify the persist check condition to fix init error. Signed-off-by: Jim Liu <[email protected]>
2025-12-27gpio: sandbox: Avoid calling dev_read_*() if CONFIG_OF_PLATDATA=yMarek Vasut
If CONFIG_OF_PLATDATA=y , then the udevice has no valid OF node associated with it and ofnode_valid(node) evaluates to 0. The dev_read_u32_default() call ultimately reaches ofnode_read_u32_index() which invokes fdt_getprop() and passes result of ofnode_to_offset(node) as an offset parameter into it. The ofnode_to_offset(node) returns -1 for invalid node, which leads to an fdt_getprop(..., -1, ...) invocation, which will crash sandbox with SIGSEGV because libfdt can not handle negative node offsets without full tree check, which U-Boot inhibits to keep size lower. Since gpio_sandbox_probe() already calls dev_has_ofnode(dev) and assigns uc_priv->gpio_count to CONFIG_SANDBOX_GPIO_COUNT accordingly, add matching dev_has_ofnode(dev) check into sandbox_gpio_of_to_plat() and do not call any of the dev_read_*() functions for devices without valid nodes there either. Signed-off-by: Marek Vasut <[email protected]>
2025-12-08Merge tag 'v2026.01-rc4' into nextTom Rini
Prepare v2026.01-rc4
2025-12-02Merge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-samsungTom Rini
- Assorted updates
2025-12-01gpio: dwapb: Enable SPL support for DWAPB GPIO driverTanmay Kathpalia
Add SPL_DWAPB_GPIO configuration option to enable the Designware APB GPIO driver in SPL builds. Changes: - Add SPL_DWAPB_GPIO Kconfig option with SPL_DM_GPIO dependency - Update Makefile to use CONFIG_$(PHASE_)DWAPB_GPIO pattern for conditional compilation in both SPL and main U-Boot builds Signed-off-by: Tanmay Kathpalia <[email protected]> Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2025-11-25gpio: s5p: increment bank base address only if bank is initializedKaustabh Chakraborty
There is a condition guard which ensures that the GPIO node, indeed describes a GPIO controller. if (!fdtdec_get_bool(blob, node, "gpio-controller")) continue; Since the bank base is being incremented in the loop, it is done so irrespective of whether the node is a GPIO controller or not. This leads to the incorrect resolution of bank base addresses. Move it out of the loop, and instead increment the bank base address only if the driver successfully binds a GPIO controller. Reviewed-by: Henrik Grimler <[email protected]> Fixes: b8809e60cdb5 ("dm: exynos: gpio: Convert to driver model") Signed-off-by: Kaustabh Chakraborty <[email protected]> Signed-off-by: Minkyu Kang <[email protected]>
2025-11-24Merge tag 'v2026.01-rc3' into nextTom Rini
Prepare v2026.01-rc3
2025-11-11Merge patch series "reenable dm_gpio tests, add support for gpio-line-names ↵Tom Rini
lookup" Rasmus Villemoes <[email protected]> says: Hopefully third time's the charm. I merely wanted to add support (mostly for use by the 'gpio' shell command) for looking up a gpio via the gpio-line-names DT property. We already have a "gpio_request_by_line_name()", but cmd/gpio.c does a separate "lookup + request", so it felt more natural to teach the lookup machinery this as well. That ran into OF_CONTROL-but-not-OF_LIBFDT being a thing for SPL, so here's yet another attempt. Now, when trying to do my civic duty and add tests for this, I found that test/dm/gpio.c has been defunct for a couple of years, and reinstating it is not entirely trivial. After a couple of rounds CI is now happy with this: https://github.com/u-boot/u-boot/pull/828 Link: https://lore.kernel.org/r/[email protected]
2025-11-11gpio: search gpio-line-names property in dm_gpio_lookup_nameRasmus Villemoes
In scripts as well as interactively, it's much nicer to be able to refer to GPIOs via their names defined in the device tree property "gpio-line-names", instead of the rather opaque names derived from the bank name with a _xx suffix. E.g. gpio read factory_reset FACTORY_RESET if test $factory_reset = 1 ; then ... versus gpio read factory_reset gpio@481ac000_16 if test $factory_reset = 1 ; then ... This is also consistent with the move on the linux/userspace side towards using line names instead of legacy chip+offset or the even more legacy global gpio numbering in sysfs. As dev_read_stringlist_search() depends on both OF_CONTROL and OF_LIBFDT (which matters for the SPL case), we need some .config conditional. However, it only adds about ~50 bytes of code to U-Boot proper, and dm_gpio_lookup_name() most often ends up being GC'ed for SPL, thus adds no overhead there, so for now make it a hidden symbol which is merely a convenient shorthand for CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(OF_LIBFDT). Signed-off-by: Rasmus Villemoes <[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2025-11-11gpio: OMAP: add dependency to TI_SYSCYegor Yefremov
OMAP GPIO driver needs TI_SYSC to initialize its clocks when using a devicetree-based setup. Signed-off-by: Yegor Yefremov <[email protected]>
2025-11-06gpio: renesas: Add R-Car Gen5 supportHuy Bui
Add support for the GPIO controller block in the R-Car Gen5 SoC family. The GPIO controller has a General Input Enable Register (INEN), whose reset state is to have all input disabled. The GPIO controller also has updated offsets for its control registers. U-Boot uses three registers, INDT, POSNEG, INEN, which have updated offsets, those are handled by the driver. Signed-off-by: Huy Bui <[email protected]> Signed-off-by: Hai Pham <[email protected]> Signed-off-by: Marek Vasut <[email protected]> [Marek: - Access Gen5 specific registers via driver data offsets, - Update commit message]
2025-11-06gpio: renesas: Access INDT, POSNEG, INEN registers via match data offsetsMarek Vasut
The Renesas R-Car Gen5 GPIO controller has INDT, POSNEG, INEN registers at different offsets compared to previous generations. Introduce three new entries in struct rcar_gpio_data {} match data to describe these register offsets for each GPIO controller. Update the driver to access these three registers through the match data offsets. No functional change. Signed-off-by: Marek Vasut <[email protected]>
2025-11-06gpio: renesas: Wrap quirks in struct rcar_gpio_dataMarek Vasut
Wrap the RCAR_GPIO_HAS_INEN quirk in more flexible struct rcar_gpio_data {} in preparation for addition of Renesas R-Car Gen5 GPIO controller support. The Renesas R-Car Gen5 GPIO controller requires more than a single quirk to properly describe it, therefore increase the flexibility and introduce full match data structure, and use it throughout the driver. No functional change. Signed-off-by: Marek Vasut <[email protected]>
2025-11-06gpio: renesas: Drop unused register macrosMarek Vasut
Remove register macros for registers which are not used by this driver. This makes it easier to get an overview of which registers are really used by the driver. No functional change. Signed-off-by: Marek Vasut <[email protected]>
2025-11-06gpio: renesas: Drop pfc_offset parsingMarek Vasut
The PFC offset is no longer used directly in the driver since commit fbf26bea3964 ("gpio: renesas: Migrate to pinctrl GPIO accessors") Drop the pfc_offset parsing. Fixes: fbf26bea3964 ("gpio: renesas: Migrate to pinctrl GPIO accessors") Signed-off-by: Marek Vasut <[email protected]>
2025-11-06gpio: Return -ENODEV if gpio_hog_lookup_name() is emptyWolfgang Wallner
If CONFIG_GPIO_HOG is not set, then gpio_hog_lookup_name() is empty, and thus does not initialize any of its parameters. It does still return 0 though, and so any calling function might assume that the parameters have been initialized successfully. Change the return value to -ENODEV in this case, as the function would in the case when CONFIG_GPIO_HOG is set but the gpio hog could not be found. Signed-off-by: Wolfgang Wallner <[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2025-11-04Merge branch 'staging' of https://source.denx.de/u-boot/custodians/u-boot-tegraTom Rini
2025-10-29gpio: qcom: Support GPIOs on PM7325 PMICLuca Weiss
The GPIOs on PM7325 work fine using the qcom_spmi_gpio driver and enables the use of the Volume Up button Fairphone 5 smartphone. Signed-off-by: Luca Weiss <[email protected]> Reviewed-by: Neil Armstrong <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Casey Connolly <[email protected]>
2025-10-29gpio: qcom: Support GPIOs on PM6350 PMICLuca Weiss
The GPIOs on PM6350 work fine using the qcom_spmi_gpio driver and enables the use of the Volume Up button Fairphone 4 smartphone. Signed-off-by: Luca Weiss <[email protected]>
2025-10-29gpio: qcom_spmi: add pm660lDavid Wronek
This is used for the volume keys on some SDM670 devices. Reviewed-by: Neil Armstrong <[email protected]> Signed-off-by: David Wronek <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Casey Connolly <[email protected]>
2025-10-29gpio: qcom: qcom_spmi_gpio: add compatible for pm6150lJens Reidel
Add support for the GPIOs in the PM6150L to the new driver. Signed-off-by: Jens Reidel <[email protected]> Reviewed-by: Neil Armstrong <[email protected]> Reviewed-by: Casey Connolly <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Casey Connolly <[email protected]>
2025-10-28gpio: intel_gpio: Initialise or0 and or1Andrew Goodbody
In intel_gpio_set_flags the two variables or0 and or1 may be used uninitialised. Correct this by setting initial values in the declaration. Also there is no need to use '|=' when the initial value is 0 and there is only one assignment performed to each variable so just use '=' instead. This issue was found by Smatch. Signed-off-by: Andrew Goodbody <[email protected]>
2025-10-28gpio: tegra_gpio: convert to use set_flagsLukasz Majewski
Convert to use set_flags operation. For now following flags are supported: - GPIOD_IS_AF (i.e. "alternate function"). - GPIOD_IS_IN - GPIOD_IS_OUT Tested-by: Łukasz Majewski <[email protected]> # Colibri T30 Signed-off-by: Lukasz Majewski <[email protected]> Reviewed-by: Svyatoslav Ryhel <[email protected]> Signed-off-by: Svyatoslav Ryhel <[email protected]>
2025-10-14Merge tag 'xilinx-for-v2026.01-rc1-v2' of ↵Tom Rini
https://source.denx.de/u-boot/custodians/u-boot-microblaze AMD/Xilinx/FPGA changes for v2026.01-rc1 v2 zynqmp: - DT updates - Enable new commands mbv: - Simplify defconfigs clk: - Separate legacy handler and use SMC handler misc: - Tighten TTC Kconfig dependency net: - Add 10GBE support to Gem pwm: - cadence-ttc: Fix array sizes fwu: - Add platform hook support spi: - Remove undocumented cdns,is-dma property video: - Fix DPSUB RGB handling
2025-10-10gpio: Remove FTGPIO0010 driverTom Rini
This driver has never been enabled and currently has build problems related in part to incorrect out_le32 calls. Remove it. Signed-off-by: Tom Rini <[email protected]>
2025-10-09drivers: firmware: update xilinx_pm_request to support max payloadNaman Trivedi
Currently xilinx_pm_request API supports four u32 payloads. However the legacy SMC format supports five u32 request payloads and extended SMC format supports six u32 request payloads. Add support for the same in xilinx_pm_request API. Also add two dummy arguments to all the callers of xilinx_pm_request. The TF-A always fills seven u32 return payload so add support for the same in xilinx_pm_request API. Signed-off-by: Naman Trivedi <[email protected]> Signed-off-by: Venkatesh Yadav Abbarapu <[email protected]> Acked-by: Senthil Nathan Thangaraj <[email protected]> Signed-off-by: Michal Simek <[email protected]> Link: https://lore.kernel.org/r/5ae6b560741f3ca8b89059c4ebb87acf75b4718e.1756388537.git.michal.simek@amd.com
2025-10-08gpio: aspeed: Make U_BOOT_DRIVER entries uniqueTom Rini
All instances of the U_BOOT_DRIVER must use a unique name or they will lead to link time failures due to name space conflicts when both are present. In this case gpio-aspeed-g7 was using the same name as gpio-aspeed. Signed-off-by: Tom Rini <[email protected]>
2025-09-19gpio: mpfs_gpio: fix compilation warningsEoin Dickson
mchp_gpio_get_value() should return int instead of bool, and some casts are needed. Signed-off-by: Eoin Dickson <[email protected]> Reviewed-by: Leo Yu-Chi Liang <[email protected]>
2025-09-16gpio: adp5588: Add ADP5587 as compatiblePhilip Molloy
The ADP5587 is a simpler version of the ADP5588. The ADP5588 can configure two pins, C8 and C9, as GPIOs or light sensors. The ADP5587 does not include the light sensors. Signed-off-by: Philip Molloy <[email protected]>
2025-08-11gpio: dwapb_gpio: Using wrong function to free memoryAndrew Goodbody
In gpio_dwapb_bind plat is used to reference memory allocated by devm_kcalloc but it is attempted to be freed using kfree. Instead free this memory using the correct devm_kfree function. This issue was found by Smatch. Signed-off-by: Andrew Goodbody <[email protected]> Acked-by: Quentin Schulz <[email protected]>
2025-07-24gpio: zynq: Fix the documentation warning in zynq_gpio_get_bank_pinVenkatesh Yadav Abbarapu
The 'dev' parameter in the zynq_gpio_get_bank_pin function was not described in its kernel-doc comment block, leading to a Sparse warning. drivers/gpio/zynq_gpio.c:194: warning: Function parameter or member 'dev' not described in 'zynq_gpio_get_bank_pin' Add a description for the 'dev' parameter to satisfy the documentation requirements and improve code clarity for this function. Signed-off-by: Venkatesh Yadav Abbarapu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Michal Simek <[email protected]>
2025-07-17gpio: add PolarFire SoC GPIO and Core GPIO driverEoin Dickson
This driver adds GPIO support for PolarFire SoC family, this is required to add sd card support on the Beagle-V-Fire as it uses GPIO chip selects Signed-off-by: Eoin Dickson <[email protected]> Acked-by: Leo Yu-Chi Liang <[email protected]>
2025-07-14gpio: add SPL to Kconfig option descriptionPhilip Molloy
DM_GPIO_LOOKUP_LABEL and SPL_DM_GPIO_LOOKUP_LABEL had the same description and therefore appeared to be duplicates in Kconfig frontends Signed-off-by: Philip Molloy <[email protected]>
2025-07-14Merge tag 'qcom-main-20250714' of ↵Tom Rini
https://source.denx.de/u-boot/custodians/u-boot-snapdragon CI: https://source.denx.de/u-boot/custodians/u-boot-snapdragon/-/pipelines/27056 - Fix unused access in ufetch - Add missing clock for SM8650 - Port the Linux SPMI GPIO driver and port over SM8550 (other platforms should follow)
2025-07-14gpio: qcom: move pm8550 gpio to new driverNeil Armstrong
Move support of the pm8550 gpios to the newly introduced driver and drop the compatible entry and the read-only quirk at the same time from the old driver. Signed-off-by: Neil Armstrong <[email protected]> Reviewed-by: Rui Miguel Silva <[email protected]> Acked-by: Sumit Garg <[email protected]> Link: https://lore.kernel.org/r/20250630-topic-sm8x50-pmic-gpio-pinctrl-new-v2-2-cc1512931197@linaro.org Signed-off-by: Casey Connolly <[email protected]>
2025-07-14gpio: qcom: add new driver for SPMI gpiosNeil Armstrong
The current qcom_pmic_gpio driver is too limited and doesn't support state tracking for all pins like the Linux driver. Adding full pinconf support would require adding the state and it's much simpler to restart from scratch with a new driver based on the Linux one adapted to the U-Boot GPIO and Pinctrl APIs. For now only the PMICs I've been able to validate are added in the compatible list but we should be able to add the entire list from the Linux driver. There's a few difference from the Linux driver: - no IRQ support - uses the U-Boot GPIO flags that maps very well - uses the gpio-ranges to get the pins count - no debugfs but prints the pin state via pinmux callback It uses the same CONFIG entry as the old one, since the ultimate goal is to migrate entirely on this new driver once we verify it doesn't break the older platforms. Tested-by: Alexey Minnekhanov <[email protected]> Signed-off-by: Neil Armstrong <[email protected]> Reviewed-by: Rui Miguel Silva <[email protected]> Acked-by: Sumit Garg <[email protected]> Link: https://lore.kernel.org/r/20250630-topic-sm8x50-pmic-gpio-pinctrl-new-v2-1-cc1512931197@linaro.org Signed-off-by: Casey Connolly <[email protected]>
2025-07-10gpio: Tighten some gpio driver dependenciesTom Rini
A large number of gpio drivers cannot build without access to some platform specific header files. Express those requirements in Kconfig as well. Signed-off-by: Tom Rini <[email protected]>
2025-07-09gpio: Remove tca642x supportTom Rini
This driver has no users after we removed the last supported platform in 2023. Fixes: 7a3ee61f5551 ("arm: Remove omap5_uevm board") Signed-off-by: Tom Rini <[email protected]>
2025-06-24gpio: msm_gpio: return correct value for gpio readAswin Murugan
In the current implementation, the GPIO read operation considers both the input and outbut bits (bits 0 and 1). It should only consider the state of input bit, i.e bit 0. To address this, mask input bit alone and read it. Signed-off-by: Aswin Murugan <[email protected]> Reviewed-by: Sumit Garg <[email protected]> Reviewed-by: Casey Connolly <[email protected]> Reviewed-by: Neil Armstrong <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Casey Connolly <[email protected]>