On June 26, 2018 9:39:55 AM GMT+03:00, "Dr. Philipp Tomsich" 
<[email protected]> wrote:
>
>> On 22 Jun 2018, at 04:11, Ramon Fried <[email protected]> wrote:
>> 
>> 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.
>> 
>> Signed-off-by: Ramon Fried <[email protected]>
>
>Reviewed-by: Philipp Tomsich <[email protected]>
>
>See below for a requested correction.
>
>> 
Thanks. Nice catch... 
>> ---
>> 
>> 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 | 53 ++++++++++++++++++++++++
>> include/dm/uclass-id.h     |  1 +
>> include/smem.h             | 84
>++++++++++++++++++++++++++++++++++++++
>> 6 files changed, 146 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
>> 
>> diff --git a/drivers/Makefile b/drivers/Makefile
>> index a213ea9671..ba4a561358 100644
>> --- a/drivers/Makefile
>> +++ b/drivers/Makefile
>> @@ -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/
>> diff --git a/drivers/smem/Kconfig b/drivers/smem/Kconfig
>> new file mode 100644
>> index 0000000000..64337a8b8e
>> --- /dev/null
>> +++ b/drivers/smem/Kconfig
>> @@ -0,0 +1,2 @@
>> +menuconfig SMEM
>> +    bool  "SMEM (Shared Memory mamanger) support"
>> diff --git a/drivers/smem/Makefile b/drivers/smem/Makefile
>> new file mode 100644
>> index 0000000000..ca55c4512d
>> --- /dev/null
>> +++ b/drivers/smem/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0+
>> +#
>> +# Makefile for the U-Boot SMEM interface drivers
>> +
>> +obj-$(CONFIG_SMEM) += smem-uclass.o
>> diff --git a/drivers/smem/smem-uclass.c b/drivers/smem/smem-uclass.c
>> new file mode 100644
>> index 0000000000..07ed1a92d8
>> --- /dev/null
>> +++ b/drivers/smem/smem-uclass.c
>> @@ -0,0 +1,53 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (c) 2018 Ramon Fried <[email protected]>
>> + */
>> +
>> +#include <common.h>
>> +#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,
>size_t *free)
>> +{
>> +    struct smem_ops *ops = smem_get_ops(dev);
>> +
>> +    int ret;
>> +
>> +    if (!ops->get_free_space)
>> +            return -ENOSYS;
>> +
>> +    ret = ops->get_free_space(host);
>> +    if (ret > 0)
>> +            *free = ret;
>> +    else
>> +            return ret;
>> +
>> +    return 0;
>> +}
>> +
>> +UCLASS_DRIVER(smem) = {
>> +    .id     = UCLASS_SMEM,
>> +    .name       = "smem",
>> +};
>> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
>> index d7f9df3583..a39643ec5e 100644
>> --- a/include/dm/uclass-id.h
>> +++ b/include/dm/uclass-id.h
>> @@ -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 */
>> diff --git a/include/smem.h b/include/smem.h
>> new file mode 100644
>> index 0000000000..201960232c
>> --- /dev/null
>> +++ b/include/smem.h
>> @@ -0,0 +1,84 @@
>> +/* SPDX-License-Identifier: GPL-2.0+ */
>> +/*
>> + * header file for smem driver.
>> + *
>> + * 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
>> +     * @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
>> +     * @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() - Set the PWM invert
>
>The “Set the PWM invert” part seems like a mistake here...
>
>> +     *
>> +     * @host:   the remote processor identifying a partition, or -1
>> +     * @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
>> + * @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
>> + * @free_space:     pointer to be filled out with free space
>> + * @return  0 if OK, -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,
>size_t *free_space);
>> +
>> +#endif /* _smem_h_ */
>> +
>> --
>> 2.17.1
>> 


-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to