Skip to content

Commit 0fc1e16

Browse files
committed
add support for raspberry pi hardware video decoder
1 parent d041793 commit 0fc1e16

File tree

10 files changed

+106
-9
lines changed

10 files changed

+106
-9
lines changed

baseboard-rpi3/chromeos-base/baseboard-bsp/baseboard-bsp-0.0.1-r5.ebuild renamed to baseboard-rpi3/chromeos-base/baseboard-bsp/baseboard-bsp-0.0.1-r6.ebuild

File renamed without changes.

chipset-bcm2837/sys-kernel/raspberry-kernel/files/017-fix-vc4-driver-for-rpi3.patch

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,101 @@ Index: rpi-kernel/drivers/gpu/drm/vc4/vc4_drv.c
1515
===================================================================
1616
--- rpi-kernel.orig/drivers/gpu/drm/vc4/vc4_drv.c
1717
+++ rpi-kernel/drivers/gpu/drm/vc4/vc4_drv.c
18-
@@ -184,7 +184,9 @@ static const struct drm_ioctl_desc vc4_d
18+
@@ -184,7 +184,7 @@ static const struct drm_ioctl_desc vc4_d
1919

2020
static struct drm_driver vc4_drm_driver = {
2121
.driver_features = (DRIVER_MODESET |
2222
- // DRIVER_ATOMIC |
23-
+#ifndef CONFIG_DRM_V3D
2423
+ DRIVER_ATOMIC |
25-
+#endif
2624
DRIVER_GEM |
2725
DRIVER_RENDER |
2826
DRIVER_SYNCOBJ),
27+
Index: rpi-kernel/drivers/gpu/drm/vc4/vc4_crtc.c
28+
===================================================================
29+
--- rpi-kernel.orig/drivers/gpu/drm/vc4/vc4_crtc.c
30+
+++ rpi-kernel/drivers/gpu/drm/vc4/vc4_crtc.c
31+
@@ -1237,7 +1237,7 @@ static int vc4_crtc_bind(struct device *
32+
struct vc4_dev *vc4 = to_vc4_dev(drm);
33+
struct vc4_crtc *vc4_crtc;
34+
struct drm_crtc *crtc;
35+
- struct drm_plane *primary_plane, *destroy_plane, *temp;
36+
+ struct drm_plane *primary_plane, *destroy_plane, *temp, *cursor_plane;
37+
const struct of_device_id *match;
38+
int ret, i;
39+
40+
@@ -1272,8 +1272,14 @@ static int vc4_crtc_bind(struct device *
41+
ret = PTR_ERR(primary_plane);
42+
goto err;
43+
}
44+
+ cursor_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_CURSOR, VC4_KMS_OVERLAY_PLANE_NUM + 1);
45+
+ if (IS_ERR(cursor_plane)) {
46+
+ dev_err(dev, "failed to construct cusrsor plane\n");
47+
+ ret = PTR_ERR(primary_plane);
48+
+ goto err;
49+
+ }
50+
51+
- drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
52+
+ drm_crtc_init_with_planes(drm, crtc, primary_plane, cursor_plane,
53+
&vc4_crtc_funcs, NULL);
54+
drm_crtc_helper_add(crtc, &vc4_crtc_helper_funcs);
55+
56+
Index: rpi-kernel/drivers/gpu/drm/vc4/vc4_drv.h
57+
===================================================================
58+
--- rpi-kernel.orig/drivers/gpu/drm/vc4/vc4_drv.h
59+
+++ rpi-kernel/drivers/gpu/drm/vc4/vc4_drv.h
60+
@@ -19,6 +19,7 @@
61+
62+
#include "uapi/drm/vc4_drm.h"
63+
#define V3D_BIND (1<<7)
64+
+#define VC4_KMS_OVERLAY_PLANE_NUM 8
65+
struct drm_device;
66+
struct drm_gem_object;
67+
68+
Index: rpi-kernel/drivers/gpu/drm/vc4/vc4_plane.c
69+
===================================================================
70+
--- rpi-kernel.orig/drivers/gpu/drm/vc4/vc4_plane.c
71+
+++ rpi-kernel/drivers/gpu/drm/vc4/vc4_plane.c
72+
@@ -1487,15 +1487,12 @@ struct drm_plane *vc4_plane_init(struct
73+
BIT(DRM_COLOR_YCBCR_FULL_RANGE),
74+
DRM_COLOR_YCBCR_BT709,
75+
DRM_COLOR_YCBCR_LIMITED_RANGE);
76+
-
77+
drm_plane_create_zpos_property(plane, zpos, 0, 127);
78+
return plane;
79+
}
80+
81+
int vc4_plane_create_additional_planes(struct drm_device *drm)
82+
{
83+
- struct drm_plane *cursor_plane;
84+
- struct drm_crtc *crtc;
85+
unsigned int i;
86+
87+
/* Set up some arbitrary number of planes. We're not limited
88+
@@ -1507,7 +1504,7 @@ int vc4_plane_create_additional_planes(s
89+
* modest number of planes to expose, that should hopefully
90+
* still cover any sane usecase.
91+
*/
92+
- for (i = 0; i < 16; i++) {
93+
+ for (i = 0; i < VC4_KMS_OVERLAY_PLANE_NUM; i++) {
94+
struct drm_plane *plane =
95+
vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY, i+1);
96+
97+
@@ -1517,18 +1514,5 @@ int vc4_plane_create_additional_planes(s
98+
plane->possible_crtcs =
99+
GENMASK(drm->mode_config.num_crtc - 1, 0);
100+
}
101+
-
102+
- drm_for_each_crtc(crtc, drm) {
103+
- /* Set up the legacy cursor after overlay initialization,
104+
- * since we overlay planes on the CRTC in the order they were
105+
- * initialized.
106+
- */
107+
- cursor_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_CURSOR, 17);
108+
- if (!IS_ERR(cursor_plane)) {
109+
- cursor_plane->possible_crtcs = drm_crtc_mask(crtc);
110+
- crtc->cursor = cursor_plane;
111+
- }
112+
- }
113+
-
114+
return 0;
115+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
raspberry-kernel-5.4.83.ebuild

overlay-rpi4-fydeos/chromeos-base/chromeos-bsp-rpi4-fydeos/files/kernel-config/config.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ disable_overscan=1
44
dtparam=audio=on
55
cma_lwm=16
66
cma_hwm=32
7+
gpu_mem=128
78

89
# better graphic performance,but need fydeos-force-cursor-compositing in /etc/chrome_dev.conf
910
dtoverlay=vc4-kms-v3d-pi4

overlay-rpi4-fydeos/make.conf

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@ ARC_VERSION_CODENAME="pi"
99
ARC_LLVM_VERSION="6.0"
1010
ARC_VERSION_MAJOR="9"
1111
ARC_PLATFORM_SDK_VERSION="28"
12-
#TTY_CONSOLE="ttyS0"
1312

1413
CHROME_DEV_FLAGS="${CHROME_DEV_FLAGS}
15-
--fydeos-force-show-cursor
16-
--enable-features=UseAlternateVideoDecoderImplementation
1714
--use-vulkan=swiftshader
1815
--enable-gpu-rasterization"
1916
COLLISION_IGNORE="/etc/hardware_features.xml"

overlay-rpi4/chromeos-base/chromeos-bsp-rpi4/files/kernel-config/config.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ disable_overscan=1
44
dtparam=audio=on
55
cma_lwm=16
66
cma_hwm=32
7+
gpu_mem=128
78

89
# better graphic performance,but need fydeos-force-cursor-compositing in /etc/chrome_dev.conf
9-
#dtoverlay=vc4-kms-v3d
10+
dtoverlay=vc4-kms-v3d
1011

1112
# fit for rpi3/rpi4
12-
dtoverlay=vc4-fkms-v3d
13+
#dtoverlay=vc4-fkms-v3d
1314

1415
# for more power
1516
#force_turbo=1

overlay-rpi4/make.conf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,10 @@ USE="${USE} libcamera"
2828
#Use chromium source code from git@github.com:FydeOS/chromium-raspberry_pi.git
2929
CHROME_ORIGIN=LOCAL_SOURCE
3030

31-
TTY_CONSOLE="ttyS0"
31+
#TTY_CONSOLE="ttyS0"
32+
33+
CHROME_DEV_FLAGS="${CHROME_DEV_FLAGS}
34+
--fydeos-force-show-cursor
35+
--enable-rpi-video-decoder
36+
--no-sandbox
37+
--use-legacy-plane-manager"

project-cros-pi/chromeos-base/chromeos-chrome/chromeos-chrome-92.0.4515.138_rc-r1.ebuild

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,9 @@ setup_compile_flags() {
812812
# https://crbug.com/1190544
813813
use arm && append-ldflags "-Wl,--no-fatal-warnings"
814814
use vtable_verify && append-ldflags -fvtable-verify=preinit
815+
816+
#link flags for raspberry mmal video decoder layer in ffmpeg
817+
append-ldflags -lmmal -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host
815818

816819
local flags
817820
einfo "Building with the compiler settings:"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
chromeos-chrome-92.0.4515.138_rc-r1.ebuild
Binary file not shown.

0 commit comments

Comments
 (0)