Skip to content

Commit

Permalink
staging: vc04_services: Drop vchiq_connected.[ch] files
Browse files Browse the repository at this point in the history
The vchiq_connected.[ch] just implements two function:

- vchiq_add_connected_callback()
- vchiq_call_connected_callbacks()

for the deferred vchiq callbacks. Those can easily live in
vchiq_arm.[ch], hence move them. This allows making the
vchiq_call_connected_callbacks() function static.

The move doesn't copy over MAX_CALLBACKS because it is the same as
VCHIQ_DRV_MAX_CALLBACKS. Hence, it now being used in
vchiq_add_connected_callback().

No functional changes intended in this patch.

Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Link: https://lore.kernel.org/r/20240412075743.60712-6-umang.jain@ideasonboard.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Umang Jain authored and Greg Kroah-Hartman committed Apr 18, 2024
1 parent e1c0af4 commit f875976
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 76 deletions.
1 change: 0 additions & 1 deletion drivers/staging/vc04_services/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ vchiq-objs := \
interface/vchiq_arm/vchiq_arm.o \
interface/vchiq_arm/vchiq_bus.o \
interface/vchiq_arm/vchiq_debugfs.o \
interface/vchiq_arm/vchiq_connected.o \

ifdef CONFIG_VCHIQ_CDEV
vchiq-objs += interface/vchiq_arm/vchiq_dev.o
Expand Down
51 changes: 50 additions & 1 deletion drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
#include "vchiq_arm.h"
#include "vchiq_bus.h"
#include "vchiq_debugfs.h"
#include "vchiq_connected.h"
#include "vchiq_pagelist.h"

#define DEVICE_NAME "vchiq"
Expand Down Expand Up @@ -189,6 +188,56 @@ is_adjacent_block(u32 *addrs, u32 addr, unsigned int k)
return tmp == (addr & PAGE_MASK);
}

/*
* This function is called by the vchiq stack once it has been connected to
* the videocore and clients can start to use the stack.
*/
static void vchiq_call_connected_callbacks(struct vchiq_drv_mgmt *drv_mgmt)
{
int i;

if (mutex_lock_killable(&drv_mgmt->connected_mutex))
return;

for (i = 0; i < drv_mgmt->num_deferred_callbacks; i++)
drv_mgmt->deferred_callback[i]();

drv_mgmt->num_deferred_callbacks = 0;
drv_mgmt->connected = true;
mutex_unlock(&drv_mgmt->connected_mutex);
}

/*
* This function is used to defer initialization until the vchiq stack is
* initialized. If the stack is already initialized, then the callback will
* be made immediately, otherwise it will be deferred until
* vchiq_call_connected_callbacks is called.
*/
void vchiq_add_connected_callback(struct vchiq_device *device, void (*callback)(void))
{
struct vchiq_drv_mgmt *drv_mgmt = device->drv_mgmt;

if (mutex_lock_killable(&drv_mgmt->connected_mutex))
return;

if (drv_mgmt->connected) {
/* We're already connected. Call the callback immediately. */
callback();
} else {
if (drv_mgmt->num_deferred_callbacks >= VCHIQ_DRV_MAX_CALLBACKS) {
dev_err(&device->dev,
"core: deferred callbacks(%d) exceeded the maximum limit(%d)\n",
drv_mgmt->num_deferred_callbacks, VCHIQ_DRV_MAX_CALLBACKS);
} else {
drv_mgmt->deferred_callback[drv_mgmt->num_deferred_callbacks] =
callback;
drv_mgmt->num_deferred_callbacks++;
}
}
mutex_unlock(&drv_mgmt->connected_mutex);
}
EXPORT_SYMBOL(vchiq_add_connected_callback);

/* There is a potential problem with partial cache lines (pages?)
* at the ends of the block when reading. If the CPU accessed anything in
* the same line (page?) then it may have pulled old data into the cache,
Expand Down
5 changes: 5 additions & 0 deletions drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#define VCHIQ_DRV_MAX_CALLBACKS 10

struct rpi_firmware;
struct vchiq_device;

enum USE_TYPE_E {
USE_TYPE_SERVICE,
Expand Down Expand Up @@ -132,6 +133,10 @@ vchiq_instance_get_trace(struct vchiq_instance *instance);
extern void
vchiq_instance_set_trace(struct vchiq_instance *instance, int trace);

extern void
vchiq_add_connected_callback(struct vchiq_device *device,
void (*callback)(void));

#if IS_ENABLED(CONFIG_VCHIQ_CDEV)

extern void
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit f875976

Please sign in to comment.