[PATCH v3,5/5] powerpc: sysdev: support userspace access of fsl_85xx_sram
Christophe Leroy
christophe.leroy at c-s.fr
Fri Apr 24 17:21:10 AEST 2020
Le 24/04/2020 à 09:05, 王文虎 a écrit :
>> Le 24/04/2020 à 04:45, Wang Wenhu a écrit :
>>> New module which registers its memory allocation and free APIs to the
>>> sram_dynamic module, which would create a device of struct sram_device
>>> type to act as an interface for user level applications to access the
>>> backend hardware device, fsl_85xx_cache_sram, which is drived by the
>>> FSL_85XX_CACHE_SRAM module.
>>>
>>> Signed-off-by: Wang Wenhu <wenhu.wang at vivo.com>
>>> Cc: Christophe Leroy <christophe.leroy at c-s.fr>
>>> Cc: Scott Wood <oss at buserror.net>
>>> Cc: Michael Ellerman <mpe at ellerman.id.au>
>>> Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
>>> Cc: Arnd Bergmann <arnd at arndb.de>
>>> Cc: linuxppc-dev at lists.ozlabs.org
>>> ---
>>> .../powerpc/include/asm/fsl_85xx_cache_sram.h | 4 ++
>>> arch/powerpc/platforms/85xx/Kconfig | 10 +++++
>>> arch/powerpc/sysdev/Makefile | 1 +
>>> arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h | 6 +++
>>> arch/powerpc/sysdev/fsl_85xx_cache_sram.c | 12 ++++++
>>> arch/powerpc/sysdev/fsl_85xx_sram_uapi.c | 39 +++++++++++++++++++
>>> 6 files changed, 72 insertions(+)
>>> create mode 100644 arch/powerpc/sysdev/fsl_85xx_sram_uapi.c
>>
>> We shouldn't add more stuff in arch/powerpc/sysdev/
>>
>> Either it is dedicated to 85xx, and it should go into
>> arch/powerpc/platform/85xx/ , or it is common to several
>> platforms/architectures and should be moved to drivers/soc/fsl/
>>
>
> Sure, actually I tried to find a better place, but did not recognize
> the driver/soc. Thanks, and I will put fsl_85xx_sram_uapi there.
>
>>>
>>> diff --git a/arch/powerpc/include/asm/fsl_85xx_cache_sram.h b/arch/powerpc/include/asm/fsl_85xx_cache_sram.h
>>> index 0235a0447baa..99cb7e202c38 100644
>>> --- a/arch/powerpc/include/asm/fsl_85xx_cache_sram.h
>>> +++ b/arch/powerpc/include/asm/fsl_85xx_cache_sram.h
>>> @@ -26,6 +26,10 @@ struct mpc85xx_cache_sram {
>>> unsigned int size;
>>> rh_info_t *rh;
>>> spinlock_t lock;
>>> +
>>> +#ifdef CONFIG_FSL_85XX_SRAM_UAPI
>>> + struct device *dev;
>>> +#endif
>>> };
>>>
>>> extern void mpc85xx_cache_sram_free(void *ptr);
>>> diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig
>>> index fa3d29dcb57e..3a6f6af973eb 100644
>>> --- a/arch/powerpc/platforms/85xx/Kconfig
>>> +++ b/arch/powerpc/platforms/85xx/Kconfig
>>> @@ -16,6 +16,16 @@ if FSL_SOC_BOOKE
>>>
>>> if PPC32
>>>
>>> +config FSL_85XX_SRAM_UAPI
>>> + tristate "Freescale MPC85xx SRAM UAPI Support"
>>> + depends on FSL_SOC_BOOKE && SRAM_DYNAMIC
>>
>> Is SRAM_DYNAMIC usefull on its own, without a driver like this one ? Is
>> that worth allowing tiny selection of both drivers ? Shouldn't one of
>> them imply the other one ?
>
> Truely the module like this is the top level selection, and SRAM_DYNAMIC
> should be selected by any caller modules. As SRAM_DYNAMIC may be used by
> other drivers(in the future, but currently only us here), I think make it
> seleted by this is better? (show below)
>
> diff --git a/drivers/soc/fsl/Kconfig b/drivers/soc/fsl/Kconfig
> index 4df32bc4c7a6..ceeebb22f6d3 100644
> --- a/drivers/soc/fsl/Kconfig
> +++ b/drivers/soc/fsl/Kconfig
> @@ -50,4 +50,16 @@ config FSL_RCPM
> tasks associated with power management, such as wakeup source control.
> Note that currently this driver will not support PowerPC based
> QorIQ processor.
> +
> +config FSL_85XX_SRAM_UAPI
> + tristate "Freescale MPC85xx SRAM UAPI Support"
> + depends on FSL_SOC_BOOKE && PPC32
> + select FSL_85XX_CACHE_SRAM
> + select SRAM_DYNAMIC
> + help
> + This registers a device of struct sram_device type which would act as
> + an interface for user level applications to access the Freescale 85xx
> + Cache-SRAM memory dynamically, meaning allocate on demand dynamically
> + while they are running.
> +
And then in patch 4, I'm not sure it is worth to keep SRAM_DYNAMIC as
user selectable.
> endmenu
> diff --git a/drivers/soc/fsl/Makefile b/drivers/soc/fsl/Makefile
> index 906f1cd8af01..716e38f75735 100644
> --- a/drivers/soc/fsl/Makefile
> +++ b/drivers/soc/fsl/Makefile
> @@ -10,3 +10,4 @@ obj-$(CONFIG_FSL_RCPM) += rcpm.o
> obj-$(CONFIG_FSL_GUTS) += guts.o
> obj-$(CONFIG_FSL_MC_DPIO) += dpio/
> obj-$(CONFIG_DPAA2_CONSOLE) += dpaa2-console.o
> +obj-$(CONFIG_FSL_85XX_SRAM_UAPI) += fsl_85xx_sram_uapi.o
>
>>>
>>> +#ifdef CONFIG_FSL_85XX_SRAM_UAPI
>>> +extern struct mpc85xx_cache_sram *mpc85xx_get_cache_sram(void);
>>
>> 'extern' keywork is meaningless here, remove it.
>>
>
> I will remove it in patch v4.
>
>>> +#endif
>>> +
>>> extern int instantiate_cache_sram(struct platform_device *dev,
>>> struct sram_parameters sram_params);
>>> extern void remove_cache_sram(struct platform_device *dev);
>>> diff --git a/arch/powerpc/sysdev/fsl_85xx_cache_sram.c b/arch/powerpc/sysdev/fsl_85xx_cache_sram.c
>>> index 3de5ac8382c0..0156ea63a3a2 100644
>>> --- a/arch/powerpc/sysdev/fsl_85xx_cache_sram.c
>>> +++ b/arch/powerpc/sysdev/fsl_85xx_cache_sram.c
>>> @@ -23,6 +23,14 @@
>>>
>>> struct mpc85xx_cache_sram *cache_sram;
>>>
>>> +
>>> +#ifdef CONFIG_FSL_85XX_SRAM_UAPI
>>> +struct mpc85xx_cache_sram *mpc85xx_get_cache_sram(void)
>>> +{
>>> + return cache_sram;
>>> +}
>>> +#endif
>>
>> This function is not worth the mess of an #ifdef in a .c file.
>> cache_sram is already globaly visible, so this function should go in
>> fsl_85xx_cache_ctlr.h as a 'static inline'
>>
>
> Yes, and I will change it like this, with an extern of cache_sram.
>
> #define L2CR_SRAM_ZERO 0x00000000 /* L2SRAM zero size */
> @@ -81,6 +83,15 @@ struct sram_parameters {
> phys_addr_t sram_offset;
> };
>
> +#ifdef CONFIG_FSL_85XX_SRAM_UAPI
> +extern struct mpc85xx_cache_sram *cache_sram;
> +
> +static inline struct mpc85xx_cache_sram *mpc85xx_get_cache_sram(void)
> +{
> + return cache_sram;
> +}
> +#endif
> +
> extern int instantiate_cache_sram(struct platform_device *dev,
>
>>> +
>>> void *mpc85xx_cache_sram_alloc(unsigned int size,
>>> phys_addr_t *phys, unsigned int align)
>>> {
>>> @@ -115,6 +123,10 @@ int instantiate_cache_sram(struct platform_device *dev,
>>> rh_attach_region(cache_sram->rh, 0, cache_sram->size);
>>> spin_lock_init(&cache_sram->lock);
>>>
>>> +#ifdef CONFIG_FSL_85XX_SRAM_UAPI
>>> + cache_sram->dev = &dev->dev;
>>> +#endif
>>
>> Can we avoid the #ifdef in .c file ? (see
>> https://www.kernel.org/doc/html/latest/process/coding-style.html#conditional-compilation)
>>
>
> Definitely, and I will change it as below in patch v4:
>
> + if (IS_ENABLED(CONFIG_FSL_85XX_SRAM_UAPI))
> + cache_sram->dev = &dev->dev;
> +
This will work only if is defined all the time in the .h regardless of
CONFIG_FSL_85XX_SRAM_UAPI. Otherwise you should have something like that
in the .h, that you call all the time from the .c:
#ifdef CONFIG_FSL_85XX_SRAM_UAPI
static inline void set_cache_sram_dev(struct mpc85xx_cache_sram *sram,
struct device *dev)
{
sram->dev = dev;
}
#else
static inline void set_cache_sram_dev(struct mpc85xx_cache_sram *sram,
struct device *dev) { }
#endif
> dev_info(&dev->dev, "[base:0x%llx, size:0x%x] configured and loaded\n",
>
> Thanks, for your suggestions, as these are minor modifications,
> I will send a new patch series v4 soon.
>
> Regards,
> Wenhu
>
Christophe
More information about the Linuxppc-dev
mailing list