mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
drm: sync solution from seabrook to kernel6.12 [1/1]
PD#SWPL-216053 Problem: osd fail to alloc memory from heap-fb/heap-gfx, so alloc memory from codec-mm Solution: 1.set afbc_aligned_size is 1 in drm_dtsi file instead of drm code 2.osd alloc memory only from heap-fb/heap-gfx and not alloc memory from codec-mm Verify: S7D Test: DRM-OSD-69 Change-Id: I08f964311e8d34cf91ae3e0f6e228b7d73247f57 Signed-off-by: linfang.zhao <linfang.zhao@amlogic.com>
This commit is contained in:
committed by
gerrit autosubmit
parent
a04ad3ea6d
commit
2910738b68
@@ -92,6 +92,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
pxp_mode = <0>;
|
||||
gfcd_enable = /bits/ 8 <0>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
osd_afbc_mask = <3>;
|
||||
memory-region = <&logo_reserved>;
|
||||
crtc_masks = <0 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
/* OSD1&OSD2 with afbc, OSD3 has no afbc */
|
||||
osd_afbc_mask = <3>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
osd1_block: block@0 {
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
osd_afbc_mask = <3>;
|
||||
memory-region = <&logo_reserved>;
|
||||
crtc_masks = <0 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
crtcmask_of_osd = <0 0 0>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
crtc_masks = <1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -82,6 +82,8 @@
|
||||
crtcmask_of_osd = <0 0 0>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
crtc_masks = <1 2 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
osd1_block: block@0 {
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
panel2logo = <0 2 3>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -68,6 +68,8 @@
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
logo_skip = <0>;
|
||||
pref_mode = "2160p"; /* indicate support 4k UI of recovery system */
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
osd1_block: block@0 {
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
pxp_mode = <0>;
|
||||
gfcd_enable = /bits/ 8 <1>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
pxp_mode = <0>;
|
||||
gfcd_enable = /bits/ 8 <0>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
gamma_ctl = <0>; /*0:skip gamma init 1:gamma init*/
|
||||
pxp_mode = <0>;
|
||||
gfcd_enable = /bits/ 8 <0>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
crtcmask_of_osd = <0 0>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
crtc_masks = <1 2 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
osd1_block: block@0 {
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
memory-region = <&logo_reserved>;
|
||||
primary_plane_index = <0>; /* primary plane index for crtcs */
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
logo_skip = <0>;
|
||||
force_slice = <1>; /*1: enable force slice 0: disable force slice */
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
crtcmask_of_osd = <0 0 1>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
logo_skip = <0>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
osd_afbc_mask = <3>;
|
||||
memory-region = <&logo_reserved>;
|
||||
crtc_masks = <0 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
/* OSD1&OSD2 with afbc, OSD3 has no afbc */
|
||||
osd_afbc_mask = <3>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
osd_afbc_mask = <3>;
|
||||
memory-region = <&logo_reserved>;
|
||||
crtc_masks = <0 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
@@ -90,6 +90,7 @@
|
||||
crtcmask_of_osd = <0 0 1 2>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 1 2>; /* indicate the crtc mask of video plane */
|
||||
vpu_block_select = <&vpu_blocks>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
/* 3 vpp output */
|
||||
|
||||
@@ -90,6 +90,7 @@
|
||||
crtcmask_of_osd = <0 0 1 2>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 1 2>; /* indicate the crtc mask of video plane */
|
||||
vpu_block_select = <&vpu_blocks>;
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
/* 3 vpp output */
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
crtc_masks = <1 1 1>; /*for encoder: 0:hdmi 1:lcd 2:cvbs*/
|
||||
crtcmask_of_osd = <0 0 0>; /* indicate the crtc mask of osd plane */
|
||||
crtcmask_of_video = <0 0>; /* indicate the crtc mask of video plane */
|
||||
afbc_aligned_size = <1>; /*0:fbdev alloc non-afbc memory 1:fbdev alloc afbc memory*/
|
||||
|
||||
vpu_topology: vpu_topology {
|
||||
vpu_blocks {
|
||||
|
||||
+6
-46
@@ -27,38 +27,7 @@
|
||||
#define uvm_to_gem_obj(x) container_of(x, struct am_meson_gem_object, ubo)
|
||||
#define MESON_GEM_NAME "meson_gem"
|
||||
|
||||
#if (defined CONFIG_AMLOGIC_HEAP_CMA) || (defined CONFIG_AMLOGIC_HEAP_CODEC_MM)
|
||||
static void zap_dma_buf_range(struct page *dma_page, unsigned long len)
|
||||
{
|
||||
struct page *page;
|
||||
void *vaddr;
|
||||
int num_pages = len / PAGE_SIZE;
|
||||
|
||||
if (PageHighMem(dma_page)) {
|
||||
page = dma_page;
|
||||
|
||||
while (num_pages > 0) {
|
||||
vaddr = kmap_atomic(page);
|
||||
memset(vaddr, 0, PAGE_SIZE);
|
||||
kunmap_atomic(vaddr);
|
||||
|
||||
/*
|
||||
*Avoid wasting time zeroing memory if the process
|
||||
*has been killed by SIGKILL
|
||||
*/
|
||||
if (fatal_signal_pending(current))
|
||||
return;
|
||||
|
||||
page++;
|
||||
num_pages--;
|
||||
}
|
||||
} else {
|
||||
memset(page_address(dma_page), 0, PAGE_ALIGN(len));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int am_meson_gem_alloc_ion_buff(struct am_meson_gem_object *
|
||||
static int am_meson_gem_alloc_buff(struct am_meson_gem_object *
|
||||
meson_gem_obj, int flags)
|
||||
{
|
||||
#if (defined CONFIG_AMLOGIC_HEAP_CMA) || (defined CONFIG_AMLOGIC_HEAP_CODEC_MM)
|
||||
@@ -67,8 +36,7 @@ static int am_meson_gem_alloc_ion_buff(struct am_meson_gem_object *
|
||||
struct dma_buf_attachment *attachment = NULL;
|
||||
struct sg_table *sg_table = NULL;
|
||||
struct page *page;
|
||||
bool from_heap_codecmm = false;
|
||||
char DMAHEAP[][20] = {"heap-fb", "heap-gfx", "heap-codecmm"};
|
||||
char DMAHEAP[][20] = {"heap-fb", "heap-gfx"};
|
||||
#endif
|
||||
#ifdef CONFIG_AMLOGIC_ION_DEV
|
||||
size_t len;
|
||||
@@ -99,24 +67,19 @@ static int am_meson_gem_alloc_ion_buff(struct am_meson_gem_object *
|
||||
#endif
|
||||
} else if (((flags & (MESON_USE_SCANOUT | MESON_USE_CURSOR)) != 0) || flags == 0) {
|
||||
#if (defined CONFIG_AMLOGIC_HEAP_CMA) || (defined CONFIG_AMLOGIC_HEAP_CODEC_MM)
|
||||
for (i = 0; i < 3; i++) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
heap = dma_heap_find(DMAHEAP[i]);
|
||||
if (!IS_ERR_OR_NULL(heap)) {
|
||||
dmabuf = dma_heap_buffer_alloc(heap, meson_gem_obj->base.size,
|
||||
O_RDWR, DMA_HEAP_VALID_HEAP_FLAGS);
|
||||
if (!IS_ERR_OR_NULL(dmabuf)) {
|
||||
DRM_DEBUG("%s alloc success.\n", DMAHEAP[i]);
|
||||
if (i == 2)
|
||||
from_heap_codecmm = true;
|
||||
meson_gem_obj->is_dma = true;
|
||||
break;
|
||||
} else {
|
||||
DRM_DEBUG("%s:%s alloc fail\n", __func__, DMAHEAP[i]);
|
||||
}
|
||||
if (IS_ERR_OR_NULL(dmabuf) && i == 2)
|
||||
DRM_ERROR("%s: dma_heap_alloc fail.\n", __func__);
|
||||
} else {
|
||||
DRM_DEBUG("%s: dma_heap_find %s fail.\n", __func__, DMAHEAP[i]);
|
||||
if (i == 2)
|
||||
DRM_ERROR("%s: dma_heap_find fail.\n", __func__);
|
||||
}
|
||||
}
|
||||
DRM_DEBUG("%s: dmabuf(%p) dma_heap_alloc success. size = %zu\n",
|
||||
@@ -218,9 +181,6 @@ static int am_meson_gem_alloc_ion_buff(struct am_meson_gem_object *
|
||||
sg_dma_address(sg_table->sgl) = sg_phys(sg_table->sgl);
|
||||
page = sg_page(sg_table->sgl);
|
||||
|
||||
if (from_heap_codecmm)
|
||||
zap_dma_buf_range(page, meson_gem_obj->base.size);
|
||||
|
||||
dma_sync_sg_for_device(meson_gem_obj->base.dev->dev,
|
||||
sg_table->sgl,
|
||||
sg_table->nents,
|
||||
@@ -722,7 +682,7 @@ struct am_meson_gem_object *am_meson_gem_object_create(struct drm_device *dev,
|
||||
if ((flags & MESON_USE_VIDEO_PLANE) && (flags & MESON_USE_PROTECTED))
|
||||
ret = am_meson_gem_alloc_video_secure_buff(meson_gem_obj);
|
||||
else
|
||||
ret = am_meson_gem_alloc_ion_buff(meson_gem_obj, flags);
|
||||
ret = am_meson_gem_alloc_buff(meson_gem_obj, flags);
|
||||
if (ret < 0) {
|
||||
drm_gem_object_release(&meson_gem_obj->base);
|
||||
goto error;
|
||||
|
||||
@@ -66,7 +66,7 @@ static void meson_osd_parse_config(struct drm_device *dev, struct meson_of_conf
|
||||
{
|
||||
u32 osd_afbc_mask = 0xff;
|
||||
u32 osd_force_slice = 0;
|
||||
u32 afbc_aligned_size = 1;
|
||||
u32 afbc_aligned_size = 0;
|
||||
int ret;
|
||||
|
||||
ret = of_property_read_u32(dev->dev->of_node,
|
||||
|
||||
Reference in New Issue
Block a user