2023-09-23 20:41:00

by Umang Jain

[permalink] [raw]
Subject: [PATCH v12 0/6] staging: vc04_services: vchiq: Register devices with a custom bus_type

The patch series added a new bus type vchiq_bus_type and registers
child devices in order to move them away from using platform
device/driver.

Tested on RPi-3-b with media tree master branch.

Patch 1/6 and 2/6 adds explicit DMA mask to bcm2835-camera
and bcm2835-audio respectively to avoid regression when moving
to away from platform device/driver model.

Patch 3/6 and 4/6 adds a new bus_type and registers them to vchiq
interface

Patch 5/6 and 6/6 moves the bcm2835-camera and bcm2835-audio
to the new bus respectively

Patch 5/5 removes a platform registeration helper which is no
longer required.

Changes in v12:
- Add initial two patches to set DMA Mask explicitly to avoid regression
- fixup vchiq_device.c bad squash in v11
- Rename vchiq_device.[ch] to vchiq_bus.[ch]
- Fix memory leak if device cannot be registered
- Make vchiq_bus_type_match() use bool values
- vchiq_register_child() helper removal folded in 6/6
instead of creating extra patch.

Changes in v11:
- Move setting of DMA mask in child devices (3/5 and 4/5)
- Fixes "DMA mask not set issue" reported in v10.

Changes in v10:
- fix dma_attr WARN issue with bcm2835-audio module loading
- Unregister bus on parent platform device fails to register
- Reword commit to highlight bcm2835_audio to bcm2835-audio name change

Changes in v9:
- Fix module autoloading
- Implement bus_type's probe() callback to load drivers
- Implement bus_type's uevent() to make sure appropriate drivers are
loaded when device are registed from vchiq.

Changes in v8:
- Drop dual licensing. Instead use GPL-2.0 only for patch 1/5

Changes in v7:
(5 out of 6 patches from v6 merged)
- Split the main patch (6/6) as requested.
- Use struct vchiq_device * instead of struct device * in
all bus functions.
- Drop additional name attribute displayed in sysfs (redundant info)
- Document vchiq_interface doesn't enumerate device discovery
- remove EXPORT_SYMBOL_GPL(vchiq_bus_type)

Changes in v6:
- Split struct device and struct driver wrappers in vchiq_device.[ch]
- Move vchiq_bus_type definition to vchiq_device.[ch] as well
- return error on bus_register() failure
- drop dma_set_mask_and_coherent
- trivial variable name change

Changes in v5:
- Fixup missing "staging: " in commits' subject line
- No code changes from v4

Changes in v4:
- Introduce patches to drop include directives from Makefile

Changes in v3:
- Rework entirely to replace platform devices/driver model

-v2:
https://lore.kernel.org/all/[email protected]/

-v1:
https://lore.kernel.org/all/[email protected]/

Umang Jain (6):
staging: vc04_services: bcm2835-camera: Explicitly set DMA mask
staging: vc04_services: bcm2835-audio: Explicitly set DMA mask
staging: vc04_services: vchiq_arm: Add new bus type and device type
staging: vc04_services: vchiq_arm: Register vchiq_bus_type
staging: bcm2835-camera: Register bcm2835-camera with vchiq_bus_type
staging: bcm2835-audio: Register bcm2835-audio with vchiq_bus_type

drivers/staging/vc04_services/Makefile | 1 +
.../vc04_services/bcm2835-audio/bcm2835.c | 26 +++--
.../bcm2835-camera/bcm2835-camera.c | 23 ++--
.../interface/vchiq_arm/vchiq_arm.c | 52 ++++-----
.../interface/vchiq_arm/vchiq_bus.c | 100 ++++++++++++++++++
.../interface/vchiq_arm/vchiq_bus.h | 54 ++++++++++
6 files changed, 209 insertions(+), 47 deletions(-)
create mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_bus.c
create mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_bus.h


base-commit: 0bb80ecc33a8fb5a682236443c1e740d5c917d1d
--
2.40.1


2023-09-23 21:50:34

by Umang Jain

[permalink] [raw]
Subject: [PATCH v12 4/6] staging: vc04_services: vchiq_arm: Register vchiq_bus_type

Register the vchiq_bus_type bus with the vchiq interface.
The bcm2835-camera and bcm2835_audio will be registered to this bus type
going ahead.

Signed-off-by: Umang Jain <[email protected]>
Reviewed-by: Kieran Bingham <[email protected]>
---
.../vc04_services/interface/vchiq_arm/vchiq_arm.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

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 aa2313f3bcab..9388859b9b56 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -12,6 +12,7 @@
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/device.h>
+#include <linux/device/bus.h>
#include <linux/mm.h>
#include <linux/highmem.h>
#include <linux/pagemap.h>
@@ -33,6 +34,7 @@
#include "vchiq_core.h"
#include "vchiq_ioctl.h"
#include "vchiq_arm.h"
+#include "vchiq_bus.h"
#include "vchiq_debugfs.h"
#include "vchiq_connected.h"
#include "vchiq_pagelist.h"
@@ -1870,9 +1872,17 @@ static int __init vchiq_driver_init(void)
{
int ret;

+ ret = bus_register(&vchiq_bus_type);
+ if (ret) {
+ pr_err("Failed to register %s\n", vchiq_bus_type.name);
+ return ret;
+ }
+
ret = platform_driver_register(&vchiq_driver);
- if (ret)
+ if (ret) {
pr_err("Failed to register vchiq driver\n");
+ bus_unregister(&vchiq_bus_type);
+ }

return ret;
}
@@ -1880,6 +1890,7 @@ module_init(vchiq_driver_init);

static void __exit vchiq_driver_exit(void)
{
+ bus_unregister(&vchiq_bus_type);
platform_driver_unregister(&vchiq_driver);
}
module_exit(vchiq_driver_exit);
--
2.40.1

2023-09-24 01:38:19

by Umang Jain

[permalink] [raw]
Subject: [PATCH v12 2/6] staging: vc04_services: bcm2835-audio: Explicitly set DMA mask

In the following patches, vchiq_arm will be migrated to create and use
its own bus and all the vchiq drivers (bcm2835-camera, bcm2835-audio)
will be registered to it. Since the platform driver/device model
internally sets the DMA mask for its registered devices, we would have
to do it ourself when we remove the platform driver/device registration
for vchiq devices.

This patch explicitly sets the DMA mask to bcm2835-audio so as not
to introduce a regression when we move away from platform
device/driver model.

Signed-off-by: Umang Jain <[email protected]>
---
drivers/staging/vc04_services/bcm2835-audio/bcm2835.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
index 00bc898b0189..f3ad2543d1c0 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
@@ -3,6 +3,7 @@

#include <linux/platform_device.h>

+#include <linux/dma-mapping.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
@@ -273,6 +274,12 @@ static int snd_bcm2835_alsa_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
int err;

+ err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
+ if (err) {
+ dev_err(dev, "dma_set_mask_and_coherent failed: %d\n", err);
+ return err;
+ }
+
if (num_channels <= 0 || num_channels > MAX_SUBSTREAMS) {
num_channels = MAX_SUBSTREAMS;
dev_warn(dev, "Illegal num_channels value, will use %u\n",
--
2.40.1

2023-09-30 12:56:36

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH v12 0/6] staging: vc04_services: vchiq: Register devices with a custom bus_type


Am 23.09.23 um 16:31 schrieb Umang Jain:
> The patch series added a new bus type vchiq_bus_type and registers
> child devices in order to move them away from using platform
> device/driver.
>
> Tested on RPi-3-b with media tree master branch.
>
> Patch 1/6 and 2/6 adds explicit DMA mask to bcm2835-camera
> and bcm2835-audio respectively to avoid regression when moving
> to away from platform device/driver model.
>
> Patch 3/6 and 4/6 adds a new bus_type and registers them to vchiq
> interface
>
> Patch 5/6 and 6/6 moves the bcm2835-camera and bcm2835-audio
> to the new bus respectively
>
> Patch 5/5 removes a platform registeration helper which is no
> longer required.
>
> Changes in v12:
> - Add initial two patches to set DMA Mask explicitly to avoid regression
> - fixup vchiq_device.c bad squash in v11
> - Rename vchiq_device.[ch] to vchiq_bus.[ch]
> - Fix memory leak if device cannot be registered
> - Make vchiq_bus_type_match() use bool values
> - vchiq_register_child() helper removal folded in 6/6
> instead of creating extra patch.

The whole series is

Reviewed-by: Stefan Wahren <[email protected]>

2023-10-05 14:42:40

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v12 0/6] staging: vc04_services: vchiq: Register devices with a custom bus_type

On Sat, Sep 23, 2023 at 08:01:54PM +0530, Umang Jain wrote:
> The patch series added a new bus type vchiq_bus_type and registers
> child devices in order to move them away from using platform
> device/driver.
>
> Tested on RPi-3-b with media tree master branch.

Thanks for sticking with this through so many different revisions. I
only had minor comments on the series, you can address them in follow-on
patches if needed (one at the least is needed.) All are now queued up
in my tree.

greg k-h