SMEM is a highly Qualcomm specific interface, while having a dedicated
UCLASS for it offers a nice abstraction, for things like memory layout
parsing we need to use it before the driver model is available.

Therefore, it doesn't make sense to fit SMEM into the driver model.
Instead let's adopt a model closer to Linux, and parse SMEM really early
during boot (as soon as we have the FDT).

This reverts commit 7b384eccc785b596f68448b155cbda26df57fb23.

Signed-off-by: Casey Connolly <[email protected]>
---
 arch/arm/Kconfig           |  1 -
 drivers/Kconfig            |  2 --
 drivers/Makefile           |  1 -
 drivers/smem/Kconfig       | 25 -------------
 drivers/smem/Makefile      |  7 ----
 drivers/smem/smem-uclass.c | 46 ------------------------
 include/dm/uclass-id.h     |  1 -
 include/smem.h             | 90 ----------------------------------------------
 8 files changed, 173 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f624675eadf8..dadb18e0b8cd 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1141,9 +1141,8 @@ config ARCH_SNAPDRAGON
        select POWER_DOMAIN
        select GPIO_EXTRA_HEADER
        select MSM_SMEM
        select OF_CONTROL
-       select SMEM
        select SPMI
        select BOARD_LATE_INIT
        select OF_BOARD
        select SAVE_PREV_BL_FDT_ADDR if !ENABLE_ARM_SOC_BOOT0_HOOK
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 47606ddc6c8b..aa293df37c57 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -123,10 +123,8 @@ source "drivers/scsi/Kconfig"
 source "drivers/serial/Kconfig"
 
 source "drivers/sm/Kconfig"
 
-source "drivers/smem/Kconfig"
-
 source "drivers/sound/Kconfig"
 
 source "drivers/soc/Kconfig"
 
diff --git a/drivers/Makefile b/drivers/Makefile
index 43d0ba332818..ca3e87ffb102 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -118,9 +118,8 @@ obj-y += pwm/
 obj-y += reset/
 obj-y += input/
 obj-y += iommu/
 # SOC specific infrastructure drivers.
-obj-y += smem/
 obj-y += thermal/
 obj-$(CONFIG_TEE) += tee/
 obj-$(CONFIG_ARM_FFA_TRANSPORT) += firmware/arm-ffa/
 obj-y += axi/
diff --git a/drivers/smem/Kconfig b/drivers/smem/Kconfig
deleted file mode 100644
index e5d7dcc81b17..000000000000
--- a/drivers/smem/Kconfig
+++ /dev/null
@@ -1,25 +0,0 @@
-menuconfig SMEM
-       bool  "SMEM (Shared Memory mamanger) support"
-
-if SMEM
-
-config SANDBOX_SMEM
-    bool "Sandbox Shared Memory Manager (SMEM)"
-    depends on SANDBOX && DM
-    help
-      enable SMEM support for sandbox. This is an emulation of a real SMEM
-      manager.
-      The sandbox driver allocates a shared memory from the heap and
-      initialzies it on start.
-
-config MSM_SMEM
-    bool "Qualcomm Shared Memory Manager (SMEM)"
-    depends on DM
-    depends on ARCH_SNAPDRAGON || ARCH_IPQ40XX
-    select DEVRES
-    help
-      Enable support for the Qualcomm Shared Memory Manager.
-      The driver provides an interface to items in a heap shared among all
-      processors in a Qualcomm platform.
-
-endif # menu "SMEM Support"
diff --git a/drivers/smem/Makefile b/drivers/smem/Makefile
deleted file mode 100644
index af3e9b50883c..000000000000
--- a/drivers/smem/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# Makefile for the U-Boot SMEM interface drivers
-
-obj-$(CONFIG_SANDBOX_SMEM) += sandbox_smem.o
-obj-$(CONFIG_SMEM) += smem-uclass.o
-obj-$(CONFIG_MSM_SMEM) += msm_smem.o
diff --git a/drivers/smem/smem-uclass.c b/drivers/smem/smem-uclass.c
deleted file mode 100644
index 4dea5cc4bf1c..000000000000
--- a/drivers/smem/smem-uclass.c
+++ /dev/null
@@ -1,46 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (c) 2018 Ramon Fried <[email protected]>
- */
-
-#define LOG_CATEGORY UCLASS_SMEM
-
-#include <dm.h>
-#include <smem.h>
-
-int smem_alloc(struct udevice *dev, unsigned int host,
-               unsigned int item, size_t size)
-{
-       struct smem_ops *ops = smem_get_ops(dev);
-
-       if (!ops->alloc)
-               return -ENOSYS;
-
-       return ops->alloc(host, item, size);
-}
-
-void *smem_get(struct udevice *dev, unsigned int host,
-               unsigned int item, size_t *size)
-{
-       struct smem_ops *ops = smem_get_ops(dev);
-
-       if (!ops->get)
-               return NULL;
-
-       return ops->get(host, item, size);
-}
-
-int smem_get_free_space(struct udevice *dev, unsigned int host)
-{
-       struct smem_ops *ops = smem_get_ops(dev);
-
-       if (!ops->get_free_space)
-               return -ENOSYS;
-
-       return ops->get_free_space(host);
-}
-
-UCLASS_DRIVER(smem) = {
-       .id     = UCLASS_SMEM,
-       .name       = "smem",
-};
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 36b5d87c304f..fe0aae2720ca 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -133,9 +133,8 @@ enum uclass_id {
        UCLASS_SCMI_BASE,       /* Interface for SCMI Base protocol */
        UCLASS_SCSI,            /* SCSI device */
        UCLASS_SERIAL,          /* Serial UART */
        UCLASS_SIMPLE_BUS,      /* Bus with child devices */
-       UCLASS_SMEM,            /* Shared memory interface */
        UCLASS_SOC,             /* SOC Device */
        UCLASS_SOUND,           /* Playing simple sounds */
        UCLASS_SPI,             /* SPI bus */
        UCLASS_SPI_FLASH,       /* SPI flash */
diff --git a/include/smem.h b/include/smem.h
deleted file mode 100644
index b19c534ebc43..000000000000
--- a/include/smem.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * The shared memory system is an allocate-only heap structure that
- * consists of one of more memory areas that can be accessed by the processors
- * in the SoC.
- *
- * Allocation can be done globally for all processors or to an individual 
processor.
- * This is controlled by the @host parameter.
- *
- * Allocation and management of heap can be implemented in various ways,
- * The @item parameter should be used as an index/hash to the memory region.
- *
- * Copyright (c) 2018 Ramon Fried <[email protected]>
- */
-
-#ifndef _smemh_
-#define _smemh_
-
-/* struct smem_ops: Operations for the SMEM uclass */
-struct smem_ops {
-       /**
-        * alloc() - allocate space for a smem item
-        *
-        * @host:       remote processor id, or -1 for all processors.
-        * @item:       smem item handle
-        * @size:       number of bytes to be allocated
-        * @return 0 if OK, -ve on error
-        */
-       int (*alloc)(unsigned int host,
-               unsigned int item, size_t size);
-
-       /**
-        * get() - Resolve ptr of size of a smem item
-        *
-        * @host:       the remote processor, of -1 for all processors.
-        * @item:       smem item handle
-        * @size:       pointer to be filled out with the size of the item
-        * @return      pointer on success, NULL on error
-        */
-       void *(*get)(unsigned int host,
-               unsigned int item, size_t *size);
-
-       /**
-        * get_free_space() - Get free space in smem in bytes
-        *
-        * @host:   the remote processor identifying a partition, or -1
-        *                      for all processors.
-        * @return      free space, -ve on error
-        */
-       int (*get_free_space)(unsigned int host);
-};
-
-#define smem_get_ops(dev)      ((struct smem_ops *)(dev)->driver->ops)
-
-/**
- * smem_alloc() - allocate space for a smem item
- * @host:      remote processor id, or -1
- * @item:      smem item handle
- * @size:      number of bytes to be allocated
- * Return: 0 if OK, -ve on error
- *
- * Allocate space for a given smem item of size @size, given that the item is
- * not yet allocated.
- */
-int smem_alloc(struct udevice *dev, unsigned int host, unsigned int item, 
size_t size);
-
-/**
- * smem_get() - resolve ptr of size of a smem item
- * @host:      the remote processor, or -1 for all processors.
- * @item:      smem item handle
- * @size:      pointer to be filled out with size of the item
- * Return:     pointer on success, NULL on error
- *
- * Looks up smem item and returns pointer to it. Size of smem
- * item is returned in @size.
- */
-void *smem_get(struct udevice *dev, unsigned int host, unsigned int item, 
size_t *size);
-
-/**
- * smem_get_free_space() - retrieve amount of free space in a partition
- * @host:      the remote processor identifying a partition, or -1
- *                     for all processors.
- * Return:     size in bytes, -ve on error
- *
- * To be used by smem clients as a quick way to determine if any new
- * allocations has been made.
- */
-int smem_get_free_space(struct udevice *dev, unsigned int host);
-
-#endif /* _smem_h_ */

-- 
2.53.0

Reply via email to