a2630f3d58fb796a6be4cab238e91b6b8f0c1864
[openwrt/openwrt.git] / target / linux / bcm27xx / patches-5.15 / 950-0616-staging-bcm2835-isp-Fix-cleanup-after-init-fail.patch
1 From f5b1e0398dc2f3b80c62c06ad7bb39224cd07bf8 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.com>
3 Date: Thu, 16 Dec 2021 16:25:00 +0000
4 Subject: [PATCH] staging/bcm2835-isp: Fix cleanup after init fail
5
6 bcm2835_isp_remove is called on an initialisation failure, but at that
7 point the drvdata hasn't been set. This causes a crash when e.g. using
8 the cutdown firmware (gpu_mem=16).
9
10 Move platform_set_drvdata before the instance probing loop to avoid the
11 problem.
12
13 See: https://github.com/raspberrypi/linux/issues/4774
14
15 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
16 ---
17 drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c | 3 ++-
18 1 file changed, 2 insertions(+), 1 deletion(-)
19
20 --- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
21 +++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
22 @@ -1774,6 +1774,8 @@ static int bcm2835_isp_probe(struct plat
23 if (!bcm2835_isp_instances)
24 return -ENOMEM;
25
26 + platform_set_drvdata(pdev, bcm2835_isp_instances);
27 +
28 for (i = 0; i < BCM2835_ISP_NUM_INSTANCES; i++) {
29 ret = bcm2835_isp_probe_instance(pdev,
30 &bcm2835_isp_instances[i], i);
31 @@ -1781,7 +1783,6 @@ static int bcm2835_isp_probe(struct plat
32 goto error;
33 }
34
35 - platform_set_drvdata(pdev, bcm2835_isp_instances);
36 dev_info(&pdev->dev, "Loaded V4L2 %s\n", BCM2835_ISP_NAME);
37 return 0;
38