The Sahara protocol driver currently lives under the QAIC accelerator subsystem even though the protocol is transported over MHI and is used by multiple Qualcomm flashless devices. This makes Sahara appear QAIC specific and complicates reuse by other MHI based devices.
Move the Sahara protocol driver under drivers/bus/mhi as a host client driver and build it as an independent MHI protocol driver. This keeps the QAIC driver focused on the accelerator device while allowing other MHI users to enable Sahara without depending on QAIC. As part of the move, add a dedicated Kconfig/Makefile hierarchy under the MHI host client drivers and convert the driver to use module_mhi_driver() instead of register/unregister hooks. Signed-off-by: Kishore Batta <[email protected]> --- drivers/accel/qaic/Kconfig | 1 + drivers/accel/qaic/Makefile | 3 +-- drivers/accel/qaic/qaic_drv.c | 9 --------- drivers/accel/qaic/sahara.h | 10 ---------- drivers/bus/mhi/host/Makefile | 2 +- drivers/bus/mhi/host/clients/Kconfig | 6 ++++++ drivers/bus/mhi/host/clients/Makefile | 1 + drivers/bus/mhi/host/clients/sahara/Kconfig | 15 +++++++++++++++ drivers/bus/mhi/host/clients/sahara/Makefile | 2 ++ .../qaic => bus/mhi/host/clients/sahara}/sahara.c | 21 ++++++++------------- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/drivers/accel/qaic/Kconfig b/drivers/accel/qaic/Kconfig index 116e42d152ca885b8c59e33c7a87519a0abc6bb3..af90fdfcf77eeb6dd5ad309b33d793d4fdc91b1e 100644 --- a/drivers/accel/qaic/Kconfig +++ b/drivers/accel/qaic/Kconfig @@ -8,6 +8,7 @@ config DRM_ACCEL_QAIC depends on DRM_ACCEL depends on PCI && HAS_IOMEM depends on MHI_BUS + depends on MHI_SAHARA select CRC32 select WANT_DEV_COREDUMP help diff --git a/drivers/accel/qaic/Makefile b/drivers/accel/qaic/Makefile index 71f727b74da3bb4478324689f02a7cea24a05c2d..e7b8458800072aa627f7f36c3257883aa56f4ce4 100644 --- a/drivers/accel/qaic/Makefile +++ b/drivers/accel/qaic/Makefile @@ -13,7 +13,6 @@ qaic-y := \ qaic_ras.o \ qaic_ssr.o \ qaic_sysfs.o \ - qaic_timesync.o \ - sahara.o + qaic_timesync.o qaic-$(CONFIG_DEBUG_FS) += qaic_debugfs.o diff --git a/drivers/accel/qaic/qaic_drv.c b/drivers/accel/qaic/qaic_drv.c index 0acf6cdd44f81430ec52c7120b8b50c60721a615..64e87dfaa560376ecdf1e6f8bf7abf6153160926 100644 --- a/drivers/accel/qaic/qaic_drv.c +++ b/drivers/accel/qaic/qaic_drv.c @@ -32,7 +32,6 @@ #include "qaic_ras.h" #include "qaic_ssr.h" #include "qaic_timesync.h" -#include "sahara.h" MODULE_IMPORT_NS("DMA_BUF"); @@ -789,12 +788,6 @@ static int __init qaic_init(void) goto free_pci; } - ret = sahara_register(); - if (ret) { - pr_debug("qaic: sahara_register failed %d\n", ret); - goto free_mhi; - } - ret = qaic_timesync_init(); if (ret) pr_debug("qaic: qaic_timesync_init failed %d\n", ret); @@ -816,7 +809,6 @@ static int __init qaic_init(void) free_bootlog: qaic_bootlog_unregister(); -free_mhi: mhi_driver_unregister(&qaic_mhi_driver); free_pci: pci_unregister_driver(&qaic_pci_driver); @@ -845,7 +837,6 @@ static void __exit qaic_exit(void) qaic_ras_unregister(); qaic_bootlog_unregister(); qaic_timesync_deinit(); - sahara_unregister(); mhi_driver_unregister(&qaic_mhi_driver); pci_unregister_driver(&qaic_pci_driver); } diff --git a/drivers/accel/qaic/sahara.h b/drivers/accel/qaic/sahara.h deleted file mode 100644 index 08037281c80e28f6c85b924c45ce2c2f9dc60c39..0000000000000000000000000000000000000000 --- a/drivers/accel/qaic/sahara.h +++ /dev/null @@ -1,10 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -/* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ - -#ifndef __SAHARA_H__ -#define __SAHARA_H__ - -int sahara_register(void); -void sahara_unregister(void); -#endif /* __SAHARA_H__ */ diff --git a/drivers/bus/mhi/host/Makefile b/drivers/bus/mhi/host/Makefile index 2a16008aeb38127494782bbff4e1656428d2b776..2e8949f1a2fe6f3f3b2e1dc541f97d2c393d6a0f 100644 --- a/drivers/bus/mhi/host/Makefile +++ b/drivers/bus/mhi/host/Makefile @@ -4,4 +4,4 @@ mhi-$(CONFIG_MHI_BUS_DEBUG) += debugfs.o obj-$(CONFIG_MHI_BUS_PCI_GENERIC) += mhi_pci_generic.o mhi_pci_generic-y += pci_generic.o -obj-y += clients/ +obj-$(CONFIG_MHI_BUS) += clients/ diff --git a/drivers/bus/mhi/host/clients/Kconfig b/drivers/bus/mhi/host/clients/Kconfig index 8bb5715e61d0d6e64a51012b4e1594ba46e5bfc1..1932344157a5b1dc25c8d63f6d4ac38f896d08a7 100644 --- a/drivers/bus/mhi/host/clients/Kconfig +++ b/drivers/bus/mhi/host/clients/Kconfig @@ -15,3 +15,9 @@ config MHI_BUS_LOOPBACK To compile this driver as a module, choose M here. The module will be called mhi_loopback. + +menu "MHI host client drivers" + +source "drivers/bus/mhi/host/clients/sahara/Kconfig" + +endmenu diff --git a/drivers/bus/mhi/host/clients/Makefile b/drivers/bus/mhi/host/clients/Makefile index 3811b6928f42b38f94b1167941cf3b0fe512d32b..67e70de280369870164b4808f39d9b3340f2589b 100644 --- a/drivers/bus/mhi/host/clients/Makefile +++ b/drivers/bus/mhi/host/clients/Makefile @@ -1,2 +1,3 @@ obj-$(CONFIG_MHI_BUS_LOOPBACK) += mhi_loopback.o mhi_loopback-y += loopback.o +obj-$(CONFIG_MHI_SAHARA) += sahara/ diff --git a/drivers/bus/mhi/host/clients/sahara/Kconfig b/drivers/bus/mhi/host/clients/sahara/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..f1fc7013a2dee0be645c50f32305659e591de7e7 --- /dev/null +++ b/drivers/bus/mhi/host/clients/sahara/Kconfig @@ -0,0 +1,15 @@ +config MHI_SAHARA + tristate "Sahara protocol driver" + depends on MHI_BUS + help + Enable support for the Sahara protocol transported over the MHI bus. + + The Sahara protocol is used to transfer firmware images, retrieve + memory dumps and exchange command mode DDR calibration data between + host and device. This driver is not tied to a specific SoC and may be + used by multiple MHI based devices. + + If unsure, say N. + + To compile this driver as a module, choose M here: the module will be + called mhi_sahara. diff --git a/drivers/bus/mhi/host/clients/sahara/Makefile b/drivers/bus/mhi/host/clients/sahara/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fc02a25935011cbd7138ea8f24b88cf5b032a4ce --- /dev/null +++ b/drivers/bus/mhi/host/clients/sahara/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_MHI_SAHARA) += mhi_sahara.o +mhi_sahara-y := sahara.o diff --git a/drivers/accel/qaic/sahara.c b/drivers/bus/mhi/host/clients/sahara/sahara.c similarity index 99% rename from drivers/accel/qaic/sahara.c rename to drivers/bus/mhi/host/clients/sahara/sahara.c index c7c0b3eb4b65fb7776a6c724cb3105046cf6f7eb..dc64beae06ada6915a506ed8f4ae4d71c03158bb 100644 --- a/drivers/accel/qaic/sahara.c +++ b/drivers/bus/mhi/host/clients/sahara/sahara.c @@ -1,19 +1,20 @@ // SPDX-License-Identifier: GPL-2.0-only - -/* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ +/* + * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. + * + */ #include <linux/devcoredump.h> #include <linux/firmware.h> #include <linux/limits.h> #include <linux/mhi.h> +#include <linux/mod_devicetable.h> #include <linux/minmax.h> #include <linux/overflow.h> #include <linux/types.h> #include <linux/vmalloc.h> #include <linux/workqueue.h> -#include "sahara.h" - #define SAHARA_HELLO_CMD 0x1 /* Min protocol version 1.0 */ #define SAHARA_HELLO_RESP_CMD 0x2 /* Min protocol version 1.0 */ #define SAHARA_READ_DATA_CMD 0x3 /* Min protocol version 1.0 */ @@ -922,13 +923,7 @@ static struct mhi_driver sahara_mhi_driver = { .name = "sahara", }, }; +module_mhi_driver(sahara_mhi_driver); -int sahara_register(void) -{ - return mhi_driver_register(&sahara_mhi_driver); -} - -void sahara_unregister(void) -{ - mhi_driver_unregister(&sahara_mhi_driver); -} +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Qualcomm Sahara MHI protocol driver"); -- 2.34.1
