dm: SMEM (Shared memory) uclass
PATCH v4 1/6 dm: SMEM (Shared memory) uclass
This is a uclass for Shared memory manager drivers.
A Shared Memory Manager driver implements an interface for allocating and accessing items in the memory area shared among all of the processors.
---
Changes in v4: None
Changes in v3:
(As suggested by Simon Glass)
- Fixed line wrap
- Fixed smem_get_free_space() interface to match smem_get_free_space()
- Added more documentation to ops.
Changes in v2:
(As suggested by Simon Glass)
- Introduced a new dm class (CLASS_SMEM) instead of CLASS_SOC.
- Added sandbox driver
- Added testing for DM class.
drivers/Makefile | 1 + drivers/smem/Kconfig | 2 + drivers/smem/Makefile | 5 +++ drivers/smem/smem-uclass.c | 45 +++++++++++++++++++++ include/dm/uclass-id.h | 1 + include/smem.h | 83 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 137 insertions(+) create mode 100644 drivers/smem/Kconfig create mode 100644 drivers/smem/Makefile create mode 100644 drivers/smem/smem-uclass.c create mode 100644 include/smem.h
drivers/Makefile +1 -0
@@ -98,6 +98,7 @@ obj-y += pwm/ obj-y += reset/ obj-y += input/ # SOC specific infrastructure drivers. +obj-y += smem/ obj-y += soc/ obj-$(CONFIG_REMOTEPROC) += remoteproc/ obj-y += thermal/
drivers/smem/Kconfig new file +2 -0
@@ -0,0 +1,2 @@ +menuconfig SMEM + bool "SMEM (Shared Memory mamanger) support"
drivers/smem/Makefile new file +5 -0
@@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Makefile for the U-Boot SMEM interface drivers + +obj-$(CONFIG_SMEM) += smem-uclass.o
drivers/smem/smem-uclass.c new file +45 -0
45 lines not on this page · raw message
include/dm/uclass-id.h +1 -0
@@ -74,6 +74,7 @@ enum uclass_id {UCLASS_RTC ,/* Real time clock device */ UCLASS_SCSI ,/* SCSI device */ UCLASS_SERIAL ,/* Serial UART */ +UCLASS_SMEM ,/* Shared memory interface */ UCLASS_SPI ,/* SPI bus */ UCLASS_SPMI ,/* System Power Management Interface bus */ UCLASS_SPI_FLASH, /* SPI flash */
include/smem.h new file +83 -0
83 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v4 2/6 soc: qualcomm: Add Shared Memory Manager driver
The Shared Memory Manager driver implements an interface for allocating and accessing items in the memory area shared among all of the processors in a Qualcomm platform.
Adapted from the Linux driver (4.17)
Changes from the original Linux driver:
* Removed HW spinlock mechanism, which is irrelevant
in U-boot particualar use case, which is just reading from the smem.
* Adapted from Linux driver model to U-Boot's.
---
Changes in v4: None
Changes in v3:
- Removed license, SPDX is enough.
- Text and grammar fixes.
Changes in v2:
- Applied checkpatch fixes (also sent these to Linux upstream)
- Changed UCLASS_SOC to UCLASS_SMEM
- Removed function exports and registered functionality through .ops
MAINTAINERS | 1 + arch/arm/Kconfig | 2 + drivers/Kconfig | 2 + drivers/smem/Kconfig | 13 + drivers/smem/Makefile | 1 + drivers/smem/msm_smem.c | 932 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 951 insertions(+) create mode 100644 drivers/smem/msm_smem.c
MAINTAINERS +1 -0
@@ -187,6 +187,7 @@ ARM SNAPDRAGON M: Ramon Fried <[email protected]> S: Maintained F: arch/arm/mach-snapdragon/ +F: drivers/smem/msm_smem.c ARM STI M: Patrice Chotard <[email protected]>
arch/arm/Kconfig +2 -0
@@ -728,6 +728,8 @@ config ARCH_SNAPDRAGON select SPMI select OF_CONTROL select OF_SEPARATE + select SMEM + select MSM_SMEM config ARCH_SOCFPGA bool "Altera SOCFPGA family"
drivers/Kconfig +2 -0
@@ -84,6 +84,8 @@ source "drivers/scsi/Kconfig" source "drivers/serial/Kconfig" +source "drivers/smem/Kconfig" + source "drivers/sound/Kconfig" source "drivers/spi/Kconfig"
drivers/smem/Kconfig +13 -0
@@ -1,2 +1,15 @@ menuconfig SMEM bool "SMEM (Shared Memory mamanger) support" + +if SMEM + +config MSM_SMEM + bool "Qualcomm Shared Memory Manager (SMEM)" + depends on DM + depends on ARCH_SNAPDRAGON + 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"
drivers/smem/Makefile +1 -0
@@ -3,3 +3,4 @@ # Makefile for the U-Boot SMEM interface drivers obj-$(CONFIG_SMEM) += smem-uclass.o +obj-$(CONFIG_MSM_SMEM) += msm_smem.o
drivers/smem/msm_smem.c new file +932 -0
932 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v4 3/6 dts: db410c: added smem nodes
In reply to Ramon FriedAdded necessary nodes for Qualcomm smem driver.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
arch/arm/dts/dragonboard410c-uboot.dtsi | 5 +++++ arch/arm/dts/dragonboard410c.dts | 16 ++++++++++++++++ 2 files changed, 21 insertions(+)
arch/arm/dts/dragonboard410c-uboot.dtsi +5 -0
@@ -6,6 +6,11 @@ */ / { + + smem { + u-boot,dm-pre-reloc; + }; + soc { u-boot,dm-pre-reloc;
arch/arm/dts/dragonboard410c.dts +16 -0
@@ -27,18 +27,34 @@ #address-cells = <2>; #size-cells = <2>; ranges; + + smem_mem: smem_region at 86300000 { + reg = <0x0 0x86300000 0x0 0x100000>; + no-map; + }; }; chosen { stdout-path = "/soc/serial at 78b0000"; }; + smem { + compatible = "qcom,smem"; + memory-region = <&smem_mem>; + qcom,rpm-msg-ram = <&rpm_msg_ram>; + }; + soc { #address-cells = <0x1>; #size-cells = <0x1>; ranges = <0x0 0x0 0x0 0xffffffff>; compatible = "simple-bus"; + rpm_msg_ram: memory at 60000 { + compatible = "qcom,rpm-msg-ram"; + reg = <0x60000 0x8000>; + }; + pinctrl: qcom,tlmm at 1000000 { compatible = "qcom,tlmm-apq8016"; reg = <0x1000000 0x400000>;
Signature · 1 line
2.17.1
PATCH v4 4/6 dts: db820c: added smem nodes
In reply to Ramon FriedAdded necessary nodes for Qualcomm smem driver.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
arch/arm/dts/dragonboard820c-uboot.dtsi | 4 ++++ arch/arm/dts/dragonboard820c.dts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+)
arch/arm/dts/dragonboard820c-uboot.dtsi +4 -0
@@ -6,6 +6,10 @@ */ / { + smem { + u-boot,dm-pre-reloc; + }; + soc { u-boot,dm-pre-reloc;
arch/arm/dts/dragonboard820c.dts +16 -0
@@ -28,11 +28,27 @@ reg = <0 0x80000000 0 0xc0000000>; }; + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + smem_mem: smem_region at 86300000 { + reg = <0x0 0x86300000 0x0 0x200000>; + no-map; + }; + }; + psci { compatible = "arm,psci-1.0"; method = "smc"; }; + smem { + compatible = "qcom,smem"; + memory-region = <&smem_mem>; + }; + soc: soc { #address-cells = <1>; #size-cells = <1>;
Signature · 1 line
2.17.1
PATCH v4 5/6 drivers: smem: sandbox
In reply to Ramon FriedAdd Sandbox driver for SMEM. mostly stub operations.
---
Changes in v4: None
Changes in v3: None
Changes in v2: None
arch/sandbox/dts/test.dts | 4 ++++ configs/sandbox64_defconfig | 2 ++ configs/sandbox_defconfig | 2 ++ drivers/smem/Kconfig | 9 ++++++++ drivers/smem/Makefile | 1 + drivers/smem/sandbox_smem.c | 45 +++++++++++++++++++++++++++++++++++++ 6 files changed, 63 insertions(+) create mode 100644 drivers/smem/sandbox_smem.c
arch/sandbox/dts/test.dts +4 -0
@@ -382,6 +382,10 @@ remoteproc-name = "remoteproc-test-dev2"; }; + smem at 0 { + compatible = "sandbox,smem"; + }; + spi at 0 { #address-cells = <1>; #size-cells = <0>;
configs/sandbox64_defconfig +2 -0
@@ -199,3 +199,5 @@ CONFIG_UT_TIME=y CONFIG_UT_DM=y CONFIG_UT_ENV=y CONFIG_UT_OVERLAY=y +CONFIG_SMEM=y +CONFIG_SANDBOX_SMEM=y
configs/sandbox_defconfig +2 -0
@@ -200,3 +200,5 @@ CONFIG_UT_TIME=y CONFIG_UT_DM=y CONFIG_UT_ENV=y CONFIG_UT_OVERLAY=y +CONFIG_SMEM=y +CONFIG_SANDBOX_SMEM=y
drivers/smem/Kconfig +9 -0
@@ -3,6 +3,15 @@ menuconfig SMEM 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
drivers/smem/Makefile +1 -0
@@ -2,5 +2,6 @@ # # 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
drivers/smem/sandbox_smem.c new file +45 -0
45 lines not on this page · raw message
Signature · 1 line
2.17.1
PATCH v4 6/6 test: smem: add basic smem test
In reply to Ramon FriedAdd basic smem sandbox testing.
---
Tom, this patch depends on https://patchwork.ozlabs.org/patch/932965/
Changes in v4:
- Fixed typo in function name.
Changes in v3:
- Adapt to smem_get_free_space() new interface in series 3.
Changes in v2: None
test/dm/Makefile | 1 + test/dm/smem.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 test/dm/smem.c
test/dm/Makefile +1 -0
@@ -33,6 +33,7 @@ obj-$(CONFIG_DM_RESET) += reset.o obj-$(CONFIG_SYSRESET) += sysreset.o obj-$(CONFIG_DM_RTC) += rtc.o obj-$(CONFIG_DM_SPI_FLASH) += sf.o +obj-$(CONFIG_SMEM) += smem.o obj-$(CONFIG_DM_SPI) += spi.o obj-y += syscon.o obj-$(CONFIG_DM_USB) += usb.o
test/dm/smem.c new file +28 -0
@@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* +* Copyright (C) 2018 Ramon Fried <[email protected]> +*/ + +#include <common.h> +#include <dm.h> +#include <smem.h> +#include <dm/test.h> +#include <test/ut.h> + +/* Basic test of the smem uclass */ +static int dm_test_smem_base (struct unit_test_state *uts) +{ +struct udevice *dev; +size_t size; +int space; + +ut_assertok (uclass_get_device (UCLASS_SMEM ,0 , &dev)); +ut_assertnonnull (dev); +ut_assertok (smem_alloc (dev,-1 ,0 ,16 )); +ut_asserteq (0 ,smem_get_free_space (dev,-1 )); +ut_assertnull (smem_get (dev,-1 ,0 , &size)); + +return 0 ; +} +DM_TEST (dm_test_smem_base,DM_TESTF_SCAN_PDATA |DM_TESTF_SCAN_FDT ); +
Signature · 1 line
2.17.1