[PATCH v3 5/5] staging: vchiq: Combine vchiq platform code into single file

Stefan Wahren stefan.wahren at i2se.com
Sun Jul 11 03:49:35 PDT 2021


Am 04.07.21 um 17:59 schrieb Ojaswin Mujoo:
> Combine the vchiq platform initialization code into a single file by
> merging vchiq_2835_arm.c into vchiq_arm.c
>
> Signed-off-by: Ojaswin Mujoo <ojaswin98 at gmail.com>
> ---
>  drivers/staging/vc04_services/Makefile        |   1 -
>  .../interface/vchiq_arm/vchiq_2835_arm.c      | 564 ------------------
>  .../interface/vchiq_arm/vchiq_arm.c           | 549 +++++++++++++++++
>  3 files changed, 549 insertions(+), 565 deletions(-)
>  delete mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
>
> diff --git a/drivers/staging/vc04_services/Makefile b/drivers/staging/vc04_services/Makefile
> index 0a04338fc962..1fd191e2e2a5 100644
> --- a/drivers/staging/vc04_services/Makefile
> +++ b/drivers/staging/vc04_services/Makefile
> @@ -4,7 +4,6 @@ obj-$(CONFIG_BCM2835_VCHIQ)	+= vchiq.o
>  vchiq-objs := \
>     interface/vchiq_arm/vchiq_core.o  \
>     interface/vchiq_arm/vchiq_arm.o \
> -   interface/vchiq_arm/vchiq_2835_arm.o \
>     interface/vchiq_arm/vchiq_debugfs.o \
>     interface/vchiq_arm/vchiq_connected.o \
>  
...
> diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> index 0f2de571eba7..9057d01ffd48 100644
> --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
> @@ -25,15 +25,32 @@
>  #include <linux/rcupdate.h>
>  #include <linux/delay.h>
>  #include <linux/slab.h>
> +#include <linux/interrupt.h>
> +#include <linux/io.h>
> +#include <linux/uaccess.h>
>  #include <soc/bcm2835/raspberrypi-firmware.h>
>  
>  #include "vchiq_core.h"
>  #include "vchiq_ioctl.h"
>  #include "vchiq_arm.h"
>  #include "vchiq_debugfs.h"
> +#include "vchiq_connected.h"
> +#include "vchiq_pagelist.h"
>  
>  #define DEVICE_NAME "vchiq"
>  
> +#define TOTAL_SLOTS (VCHIQ_SLOT_ZERO_SLOTS + 2 * 32)
> +
> +#define MAX_FRAGMENTS (VCHIQ_NUM_CURRENT_BULKS * 2)
> +
> +#define VCHIQ_PLATFORM_FRAGMENTS_OFFSET_IDX 0
> +#define VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX  1
> +
> +#define BELL0	0x00
> +#define BELL2	0x08
> +
> +#define ARM_DS_ACTIVE	BIT(2)
> +
>  /* Override the default prefix, which would be vchiq_arm (from the filename) */
>  #undef MODULE_PARAM_PREFIX
>  #define MODULE_PARAM_PREFIX DEVICE_NAME "."
> @@ -59,10 +76,542 @@ static struct vchiq_drvdata bcm2836_drvdata = {
>  	.cache_line_size = 64,
>  };
>  
> +struct vchiq_2835_state {
> +	int inited;
> +	struct vchiq_arm_state arm_state;
> +};
> +
> +struct vchiq_pagelist_info {
> +	struct pagelist *pagelist;
> +	size_t pagelist_buffer_size;
> +	dma_addr_t dma_addr;
> +	enum dma_data_direction dma_dir;
> +	unsigned int num_pages;
> +	unsigned int pages_need_release;
> +	struct page **pages;
> +	struct scatterlist *scatterlist;
> +	unsigned int scatterlist_mapped;
> +};
> +
> +static void __iomem *g_regs;
> +/* This value is the size of the L2 cache lines as understood by the
> + * VPU firmware, which determines the required alignment of the
> + * offsets/sizes in pagelists.
> + *
> + * Modern VPU firmware looks for a DT "cache-line-size" property in
> + * the VCHIQ node and will overwrite it with the actual L2 cache size,
> + * which the kernel must then respect.  That property was rejected
> + * upstream, so we have to use the VPU firmware's compatibility value
> + * of 32.
> + */
> +static unsigned int g_cache_line_size = 32;
> +static unsigned int g_fragments_size;
> +static char *g_fragments_base;
> +static char *g_free_fragments;
> +static struct semaphore g_free_fragments_sema;
> +static struct device *g_dev;
> +
> +static DEFINE_SEMAPHORE(g_free_fragments_mutex);
> +
> +static irqreturn_t
> +vchiq_doorbell_irq(int irq, void *dev_id);
> +
> +static struct vchiq_pagelist_info *
> +create_pagelist(char *buf, char __user *ubuf, size_t count, unsigned short type);
> +
> +static void
> +free_pagelist(struct vchiq_pagelist_info *pagelistinfo,
> +	      int actual);

please no forward declarations of these 3 functions. Put them into the
right order instead ...

Since this patch is independent from the other ones from the series,
maybe Greg can merg the rest of the series.






More information about the linux-arm-kernel mailing list