diff mbox series

ARM: dts: bcm2835: Enable 3D rendering through V3D

Message ID 20240412132559.2365947-1-mcanal@igalia.com (mailing list archive)
State New, archived
Headers show
Series ARM: dts: bcm2835: Enable 3D rendering through V3D | expand

Commit Message

Maíra Canal April 12, 2024, 1:25 p.m. UTC
RPi 0-3 is packed with a GPU that provides 3D rendering capabilities to
the RPi. Currently, the downstream kernel uses an overlay to enable the
GPU and use GPU hardware acceleration. When deploying a mainline kernel
to the RPi 0-3, we end up without any GPU hardware acceleration
(essentially, we can't use the OpenGL driver).

Therefore, enable the V3D core for the RPi 0-3 in the mainline kernel.

Signed-off-by: Maíra Canal <mcanal@igalia.com>
---

I decided to add the status property to the `bcm2835-common.dtsi`, but
there are two other options:

1. To add the status property to the `bcm2835-rpi-common.dtsi` file
2. To add the status property to each individual RPi model, e.g.
`bcm2837-rpi-3-b.dts`.

Let me know which option is more suitable, and if `bcm2835-common.dtsi`
is not the best option, I can send a v2.

Best Regards,
- Maíra

 arch/arm/boot/dts/broadcom/bcm2835-common.dtsi | 1 +
 1 file changed, 1 insertion(+)

Comments

Stefan Wahren April 12, 2024, 5:17 p.m. UTC | #1
Hi Maíra,

[add Phil & Dave]

Am 12.04.24 um 15:25 schrieb Maíra Canal:
> RPi 0-3 is packed with a GPU that provides 3D rendering capabilities to
> the RPi. Currently, the downstream kernel uses an overlay to enable the
> GPU and use GPU hardware acceleration. When deploying a mainline kernel
> to the RPi 0-3, we end up without any GPU hardware acceleration
> (essentially, we can't use the OpenGL driver).
>
> Therefore, enable the V3D core for the RPi 0-3 in the mainline kernel.
thanks for trying to improve the combination Raspberry Pi OS + Mainline
Kernel. I think i'm able to reproduce the issue with Raspberry Pi 3 B +
on Buster. From the kernel side everything looks good:

[   11.054833] vc4-drm soc:gpu: bound 3f902000.hdmi (ops vc4_hdmi_ops [vc4])
[   11.055118] vc4-drm soc:gpu: bound 3f806000.vec (ops vc4_vec_ops [vc4])
[   11.055340] vc4-drm soc:gpu: bound 3f004000.txp (ops vc4_txp_ops [vc4])
[   11.055521] vc4-drm soc:gpu: bound 3f206000.pixelvalve (ops
vc4_crtc_ops [vc4])
[   11.055695] vc4-drm soc:gpu: bound 3f207000.pixelvalve (ops
vc4_crtc_ops [vc4])
[   11.055874] vc4-drm soc:gpu: bound 3f807000.pixelvalve (ops
vc4_crtc_ops [vc4])
[   11.056020] vc4-drm soc:gpu: bound 3fc00000.v3d (ops vc4_v3d_ops [vc4])
[   11.063277] Bluetooth: hci0: BCM4345C0
'brcm/BCM4345C0.raspberrypi,3-model-b-plus.hcd' Patch
[   11.070466] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
[   11.174803] Console: switching to colour frame buffer device 240x75
[   11.205125] vc4-drm soc:gpu: [drm] fb0: vc4drmfb frame buffer device

But in Raspberry Pi OS there is a systemd script which is trying to
check for the V3D driver /usr/lib/systemd/scripts/gldriver_test.sh
Within the first check "raspi-config nonint is_kms" is called, which
always seems to fail. If i run strace on this command it seems to check
for /proc/device-tree/soc/v3d@7ec00000/status which doesn't exists in
the Mainline device tree.

Maybe there is a chance to improve the userspace tool?

>
> Signed-off-by: Maíra Canal <mcanal@igalia.com>
> ---
>
> I decided to add the status property to the `bcm2835-common.dtsi`, but
> there are two other options:
>
> 1. To add the status property to the `bcm2835-rpi-common.dtsi` file
> 2. To add the status property to each individual RPi model, e.g.
> `bcm2837-rpi-3-b.dts`.
>
> Let me know which option is more suitable, and if `bcm2835-common.dtsi`
> is not the best option, I can send a v2.
>
> Best Regards,
> - Maíra
>
>   arch/arm/boot/dts/broadcom/bcm2835-common.dtsi | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> index 9261b67dbee1..851a6bce1939 100644
> --- a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> +++ b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> @@ -139,6 +139,7 @@ v3d: v3d@7ec00000 {
>   			compatible = "brcm,bcm2835-v3d";
>   			reg = <0x7ec00000 0x1000>;
>   			interrupts = <1 10>;
> +			status = "okay";
>   		};
>
>   		vc4: gpu {
Phil Elwell April 14, 2024, 6:43 p.m. UTC | #2
Hello all,

On Fri, 12 Apr 2024 at 18:17, Stefan Wahren <wahrenst@gmx.net> wrote:
>
> Hi Maíra,
>
> [add Phil & Dave]
>
> Am 12.04.24 um 15:25 schrieb Maíra Canal:
> > RPi 0-3 is packed with a GPU that provides 3D rendering capabilities to
> > the RPi. Currently, the downstream kernel uses an overlay to enable the
> > GPU and use GPU hardware acceleration. When deploying a mainline kernel
> > to the RPi 0-3, we end up without any GPU hardware acceleration
> > (essentially, we can't use the OpenGL driver).
> >
> > Therefore, enable the V3D core for the RPi 0-3 in the mainline kernel.
> thanks for trying to improve the combination Raspberry Pi OS + Mainline
> Kernel. I think i'm able to reproduce the issue with Raspberry Pi 3 B +
> on Buster.

Buster? We launched Buster with 4.19 and ended on 5.10. We've moved
onto Bookworm now. A lot has changed in that time...

> From the kernel side everything looks good:
>
> [   11.054833] vc4-drm soc:gpu: bound 3f902000.hdmi (ops vc4_hdmi_ops [vc4])
> [   11.055118] vc4-drm soc:gpu: bound 3f806000.vec (ops vc4_vec_ops [vc4])
> [   11.055340] vc4-drm soc:gpu: bound 3f004000.txp (ops vc4_txp_ops [vc4])
> [   11.055521] vc4-drm soc:gpu: bound 3f206000.pixelvalve (ops
> vc4_crtc_ops [vc4])
> [   11.055695] vc4-drm soc:gpu: bound 3f207000.pixelvalve (ops
> vc4_crtc_ops [vc4])
> [   11.055874] vc4-drm soc:gpu: bound 3f807000.pixelvalve (ops
> vc4_crtc_ops [vc4])
> [   11.056020] vc4-drm soc:gpu: bound 3fc00000.v3d (ops vc4_v3d_ops [vc4])
> [   11.063277] Bluetooth: hci0: BCM4345C0
> 'brcm/BCM4345C0.raspberrypi,3-model-b-plus.hcd' Patch
> [   11.070466] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
> [   11.174803] Console: switching to colour frame buffer device 240x75
> [   11.205125] vc4-drm soc:gpu: [drm] fb0: vc4drmfb frame buffer device
>
> But in Raspberry Pi OS there is a systemd script which is trying to
> check for the V3D driver /usr/lib/systemd/scripts/gldriver_test.sh
> Within the first check "raspi-config nonint is_kms" is called, which
> always seems to fail. If i run strace on this command it seems to check
> for /proc/device-tree/soc/v3d@7ec00000/status which doesn't exists in
> the Mainline device tree.
>
> Maybe there is a chance to improve the userspace tool?

...such as the raspi-config tool, which now always succeeds for is_kms.

Phil

> >
> > Signed-off-by: Maíra Canal <mcanal@igalia.com>
> > ---
> >
> > I decided to add the status property to the `bcm2835-common.dtsi`, but
> > there are two other options:
> >
> > 1. To add the status property to the `bcm2835-rpi-common.dtsi` file
> > 2. To add the status property to each individual RPi model, e.g.
> > `bcm2837-rpi-3-b.dts`.
> >
> > Let me know which option is more suitable, and if `bcm2835-common.dtsi`
> > is not the best option, I can send a v2.
> >
> > Best Regards,
> > - Maíra
> >
> >   arch/arm/boot/dts/broadcom/bcm2835-common.dtsi | 1 +
> >   1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> > index 9261b67dbee1..851a6bce1939 100644
> > --- a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> > +++ b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
> > @@ -139,6 +139,7 @@ v3d: v3d@7ec00000 {
> >                       compatible = "brcm,bcm2835-v3d";
> >                       reg = <0x7ec00000 0x1000>;
> >                       interrupts = <1 10>;
> > +                     status = "okay";
> >               };
> >
> >               vc4: gpu {
>
Stefan Wahren April 14, 2024, 6:54 p.m. UTC | #3
Hi Phil,

Am 14.04.24 um 20:43 schrieb Phil Elwell:
> Hello all,
>
> On Fri, 12 Apr 2024 at 18:17, Stefan Wahren <wahrenst@gmx.net> wrote:
>> Hi Maíra,
>>
>> [add Phil & Dave]
>>
>> Am 12.04.24 um 15:25 schrieb Maíra Canal:
>>> RPi 0-3 is packed with a GPU that provides 3D rendering capabilities to
>>> the RPi. Currently, the downstream kernel uses an overlay to enable the
>>> GPU and use GPU hardware acceleration. When deploying a mainline kernel
>>> to the RPi 0-3, we end up without any GPU hardware acceleration
>>> (essentially, we can't use the OpenGL driver).
>>>
>>> Therefore, enable the V3D core for the RPi 0-3 in the mainline kernel.
>> thanks for trying to improve the combination Raspberry Pi OS + Mainline
>> Kernel. I think i'm able to reproduce the issue with Raspberry Pi 3 B +
>> on Buster.
> Buster? We launched Buster with 4.19 and ended on 5.10. We've moved
> onto Bookworm now. A lot has changed in that time...
Sorry, i meant Bullseye but yes it's not up to date. Anyway i cannot see
a problem with the devicetree.
Maíra Canal April 14, 2024, 7:09 p.m. UTC | #4
Hi Phil,

On 4/14/24 15:43, Phil Elwell wrote:
> Hello all,
> 
> On Fri, 12 Apr 2024 at 18:17, Stefan Wahren <wahrenst@gmx.net> wrote:
>>
>> Hi Maíra,
>>
>> [add Phil & Dave]
>>
>> Am 12.04.24 um 15:25 schrieb Maíra Canal:
>>> RPi 0-3 is packed with a GPU that provides 3D rendering capabilities to
>>> the RPi. Currently, the downstream kernel uses an overlay to enable the
>>> GPU and use GPU hardware acceleration. When deploying a mainline kernel
>>> to the RPi 0-3, we end up without any GPU hardware acceleration
>>> (essentially, we can't use the OpenGL driver).
>>>
>>> Therefore, enable the V3D core for the RPi 0-3 in the mainline kernel.
>> thanks for trying to improve the combination Raspberry Pi OS + Mainline
>> Kernel. I think i'm able to reproduce the issue with Raspberry Pi 3 B +
>> on Buster.
> 
> Buster? We launched Buster with 4.19 and ended on 5.10. We've moved
> onto Bookworm now. A lot has changed in that time...
> 
>>  From the kernel side everything looks good:
>>
>> [   11.054833] vc4-drm soc:gpu: bound 3f902000.hdmi (ops vc4_hdmi_ops [vc4])
>> [   11.055118] vc4-drm soc:gpu: bound 3f806000.vec (ops vc4_vec_ops [vc4])
>> [   11.055340] vc4-drm soc:gpu: bound 3f004000.txp (ops vc4_txp_ops [vc4])
>> [   11.055521] vc4-drm soc:gpu: bound 3f206000.pixelvalve (ops
>> vc4_crtc_ops [vc4])
>> [   11.055695] vc4-drm soc:gpu: bound 3f207000.pixelvalve (ops
>> vc4_crtc_ops [vc4])
>> [   11.055874] vc4-drm soc:gpu: bound 3f807000.pixelvalve (ops
>> vc4_crtc_ops [vc4])
>> [   11.056020] vc4-drm soc:gpu: bound 3fc00000.v3d (ops vc4_v3d_ops [vc4])
>> [   11.063277] Bluetooth: hci0: BCM4345C0
>> 'brcm/BCM4345C0.raspberrypi,3-model-b-plus.hcd' Patch
>> [   11.070466] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
>> [   11.174803] Console: switching to colour frame buffer device 240x75
>> [   11.205125] vc4-drm soc:gpu: [drm] fb0: vc4drmfb frame buffer device
>>
>> But in Raspberry Pi OS there is a systemd script which is trying to
>> check for the V3D driver /usr/lib/systemd/scripts/gldriver_test.sh
>> Within the first check "raspi-config nonint is_kms" is called, which
>> always seems to fail. If i run strace on this command it seems to check
>> for /proc/device-tree/soc/v3d@7ec00000/status which doesn't exists in
>> the Mainline device tree.
>>
>> Maybe there is a chance to improve the userspace tool?
> 
> ...such as the raspi-config tool, which now always succeeds for is_kms.
> 

I'm using Raspberry Pi OS Bulleye with the raspi-config tool on version
20231012~bulleye. I can still reproduce this issue when using a upstream
kernel.

I ran `sudo apt upgrade`, but a new version of the raspi-config tool
didn't appeared.

Best Regards,
- Maíra

> Phil
> 
>>>
>>> Signed-off-by: Maíra Canal <mcanal@igalia.com>
>>> ---
>>>
>>> I decided to add the status property to the `bcm2835-common.dtsi`, but
>>> there are two other options:
>>>
>>> 1. To add the status property to the `bcm2835-rpi-common.dtsi` file
>>> 2. To add the status property to each individual RPi model, e.g.
>>> `bcm2837-rpi-3-b.dts`.
>>>
>>> Let me know which option is more suitable, and if `bcm2835-common.dtsi`
>>> is not the best option, I can send a v2.
>>>
>>> Best Regards,
>>> - Maíra
>>>
>>>    arch/arm/boot/dts/broadcom/bcm2835-common.dtsi | 1 +
>>>    1 file changed, 1 insertion(+)
>>>
>>> diff --git a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
>>> index 9261b67dbee1..851a6bce1939 100644
>>> --- a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
>>> +++ b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
>>> @@ -139,6 +139,7 @@ v3d: v3d@7ec00000 {
>>>                        compatible = "brcm,bcm2835-v3d";
>>>                        reg = <0x7ec00000 0x1000>;
>>>                        interrupts = <1 10>;
>>> +                     status = "okay";
>>>                };
>>>
>>>                vc4: gpu {
>>
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
index 9261b67dbee1..851a6bce1939 100644
--- a/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm2835-common.dtsi
@@ -139,6 +139,7 @@  v3d: v3d@7ec00000 {
 			compatible = "brcm,bcm2835-v3d";
 			reg = <0x7ec00000 0x1000>;
 			interrupts = <1 10>;
+			status = "okay";
 		};
 
 		vc4: gpu {