mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-09 20:14:09 +08:00
- A handful of fixes from -next that just missed feature freeze
- More panfrost fixes that went directly in -misc-next-fixes (various) - Fix searchpaths during build (Masahiro) - msm patch to fix the driver for chips without zap shader (Rob) - Fix freeing imported buffers in drm_gem_cma_free_object() (Noralf) Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Rob Clark <robdclark@chromium.org> Cc: Noralf Trønnes <noralf@tronnes.org> -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEfxcpfMSgdnQMs+QqlvcN/ahKBwoFAlzTQGwACgkQlvcN/ahK BwplmQf+KUKGSEgeIDS3u3rVOcU5QhoOTL+hWP90hNcNlKdU3W1P6fuCTSr9526C s1KLRC6usEWPlk3cWtxt2WHGl6du0nvVBfQ8bYHQJOM14/kH078hkFiSF/MAzwxX v5ToJcP7J6XRkj9M2uuA3TF5luDdfLh7qX1PCOIGzvH7Fs677QW/Umsm53CDDYM7 UHgQChSHAz/q4TMmvHtRr72VhPbqfsFJ8Z7gvfjn7ZpO3DJyo1S0hLq6h3wlkAKz ShgnOFQ1oCTPWUE4PgzkHZmImU2+TDhIR/KpcM7ohomSGiqQSCnybNXBDbKWNhFt FzUVJoOP98WxUor6b7a8j67ZQPtVjw== =FGzZ -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-fixes-2019-05-08' of git://anongit.freedesktop.org/drm/drm-misc into drm-next - A handful of fixes from -next that just missed feature freeze - More panfrost fixes that went directly in -misc-next-fixes (various) - Fix searchpaths during build (Masahiro) - msm patch to fix the driver for chips without zap shader (Rob) - Fix freeing imported buffers in drm_gem_cma_free_object() (Noralf) Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Rob Clark <robdclark@chromium.org> Cc: Noralf Trønnes <noralf@tronnes.org> Signed-off-by: Dave Airlie <airlied@redhat.com> From: Sean Paul <sean@poorly.run> Link: https://patchwork.freedesktop.org/patch/msgid/20190508205153.GA91135@art_vandelay
This commit is contained in:
commit
eb85d03e01
@ -23,7 +23,7 @@
|
||||
# Makefile for the drm device driver. This driver provides support for the
|
||||
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
|
||||
|
||||
FULL_AMD_PATH=$(src)/..
|
||||
FULL_AMD_PATH=$(srctree)/$(src)/..
|
||||
DISPLAY_FOLDER_NAME=display
|
||||
FULL_AMD_DISPLAY_PATH = $(FULL_AMD_PATH)/$(DISPLAY_FOLDER_NAME)
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
ccflags-y := \
|
||||
-I$(src)/../include \
|
||||
-I$(src)
|
||||
-I $(srctree)/$(src)/../include \
|
||||
-I $(srctree)/$(src)
|
||||
|
||||
komeda-y := \
|
||||
komeda_drv.o \
|
||||
|
@ -1416,12 +1416,6 @@ EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
|
||||
*
|
||||
* The driver may place further restrictions within these minimum
|
||||
* and maximum bounds.
|
||||
*
|
||||
* The semantics for the vertical blank timestamp differ when
|
||||
* variable refresh rate is active. The vertical blank timestamp
|
||||
* is defined to be an estimate using the current mode's fixed
|
||||
* refresh rate timings. The semantics for the page-flip event
|
||||
* timestamp remain the same.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -186,13 +186,13 @@ void drm_gem_cma_free_object(struct drm_gem_object *gem_obj)
|
||||
|
||||
cma_obj = to_drm_gem_cma_obj(gem_obj);
|
||||
|
||||
if (cma_obj->vaddr) {
|
||||
dma_free_wc(gem_obj->dev->dev, cma_obj->base.size,
|
||||
cma_obj->vaddr, cma_obj->paddr);
|
||||
} else if (gem_obj->import_attach) {
|
||||
if (gem_obj->import_attach) {
|
||||
if (cma_obj->vaddr)
|
||||
dma_buf_vunmap(gem_obj->import_attach->dmabuf, cma_obj->vaddr);
|
||||
drm_prime_gem_destroy(gem_obj, cma_obj->sgt);
|
||||
} else if (cma_obj->vaddr) {
|
||||
dma_free_wc(gem_obj->dev->dev, cma_obj->base.size,
|
||||
cma_obj->vaddr, cma_obj->paddr);
|
||||
}
|
||||
|
||||
drm_gem_object_release(gem_obj);
|
||||
|
@ -5,5 +5,5 @@ GVT_SOURCE := gvt.o aperture_gm.o handlers.o vgpu.o trace_points.o firmware.o \
|
||||
execlist.o scheduler.o sched_policy.o mmio_context.o cmd_parser.o debugfs.o \
|
||||
fb_decoder.o dmabuf.o page_track.o
|
||||
|
||||
ccflags-y += -I$(src) -I$(src)/$(GVT_DIR)
|
||||
ccflags-y += -I $(srctree)/$(src) -I $(srctree)/$(src)/$(GVT_DIR)/
|
||||
i915-y += $(addprefix $(GVT_DIR)/, $(GVT_SOURCE))
|
||||
|
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
ccflags-y := -Idrivers/gpu/drm/msm
|
||||
ccflags-y += -Idrivers/gpu/drm/msm/disp/dpu1
|
||||
ccflags-$(CONFIG_DRM_MSM_DSI) += -Idrivers/gpu/drm/msm/dsi
|
||||
ccflags-y := -I $(srctree)/$(src)
|
||||
ccflags-y += -I $(srctree)/$(src)/disp/dpu1
|
||||
ccflags-$(CONFIG_DRM_MSM_DSI) += -I $(srctree)/$(src)/dsi
|
||||
|
||||
msm-y := \
|
||||
adreno/adreno_device.o \
|
||||
|
@ -527,6 +527,7 @@ static int a6xx_hw_init(struct msm_gpu *gpu)
|
||||
dev_warn_once(gpu->dev->dev,
|
||||
"Zap shader not enabled - using SECVID_TRUST_CNTL instead\n");
|
||||
gpu_write(gpu, REG_A6XX_RBBM_SECVID_TRUST_CNTL, 0x0);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1,7 +1,7 @@
|
||||
ccflags-y += -I$(src)/include
|
||||
ccflags-y += -I$(src)/include/nvkm
|
||||
ccflags-y += -I$(src)/nvkm
|
||||
ccflags-y += -I$(src)
|
||||
ccflags-y += -I $(srctree)/$(src)/include
|
||||
ccflags-y += -I $(srctree)/$(src)/include/nvkm
|
||||
ccflags-y += -I $(srctree)/$(src)/nvkm
|
||||
ccflags-y += -I $(srctree)/$(src)
|
||||
|
||||
# NVKM - HW resource manager
|
||||
#- code also used by various userspace tools/tests
|
||||
|
@ -3,7 +3,7 @@
|
||||
config DRM_PANFROST
|
||||
tristate "Panfrost (DRM support for ARM Mali Midgard/Bifrost GPUs)"
|
||||
depends on DRM
|
||||
depends on ARM || ARM64 || COMPILE_TEST
|
||||
depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
|
||||
depends on MMU
|
||||
select DRM_SCHED
|
||||
select IOMMU_SUPPORT
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#include "panfrost_device.h"
|
||||
#include "panfrost_devfreq.h"
|
||||
#include "panfrost_features.h"
|
||||
#include "panfrost_issues.h"
|
||||
#include "panfrost_gpu.h"
|
||||
|
@ -98,6 +98,7 @@ int panfrost_device_init(struct panfrost_device *pfdev)
|
||||
struct resource *res;
|
||||
|
||||
mutex_init(&pfdev->sched_lock);
|
||||
mutex_init(&pfdev->reset_lock);
|
||||
INIT_LIST_HEAD(&pfdev->scheduled_jobs);
|
||||
|
||||
spin_lock_init(&pfdev->hwaccess_lock);
|
||||
|
@ -78,6 +78,7 @@ struct panfrost_device {
|
||||
struct list_head scheduled_jobs;
|
||||
|
||||
struct mutex sched_lock;
|
||||
struct mutex reset_lock;
|
||||
|
||||
struct {
|
||||
struct devfreq *devfreq;
|
||||
|
@ -3,8 +3,6 @@
|
||||
/* Copyright 2019 Linaro, Ltd., Rob Herring <robh@kernel.org> */
|
||||
/* Copyright 2019 Collabora ltd. */
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/pagemap.h>
|
||||
@ -172,13 +170,27 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
|
||||
{
|
||||
struct panfrost_device *pfdev = dev->dev_private;
|
||||
struct drm_panfrost_submit *args = data;
|
||||
struct drm_syncobj *sync_out;
|
||||
struct drm_syncobj *sync_out = NULL;
|
||||
struct panfrost_job *job;
|
||||
int ret = 0;
|
||||
|
||||
if (!args->jc)
|
||||
return -EINVAL;
|
||||
|
||||
if (args->requirements && args->requirements != PANFROST_JD_REQ_FS)
|
||||
return -EINVAL;
|
||||
|
||||
if (args->out_sync > 0) {
|
||||
sync_out = drm_syncobj_find(file, args->out_sync);
|
||||
if (!sync_out)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
job = kzalloc(sizeof(*job), GFP_KERNEL);
|
||||
if (!job)
|
||||
return -ENOMEM;
|
||||
if (!job) {
|
||||
ret = -ENOMEM;
|
||||
goto fail_out_sync;
|
||||
}
|
||||
|
||||
kref_init(&job->refcount);
|
||||
|
||||
@ -190,25 +202,24 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
|
||||
|
||||
ret = panfrost_copy_in_sync(dev, file, args, job);
|
||||
if (ret)
|
||||
goto fail;
|
||||
goto fail_job;
|
||||
|
||||
ret = panfrost_lookup_bos(dev, file, args, job);
|
||||
if (ret)
|
||||
goto fail;
|
||||
goto fail_job;
|
||||
|
||||
ret = panfrost_job_push(job);
|
||||
if (ret)
|
||||
goto fail;
|
||||
goto fail_job;
|
||||
|
||||
/* Update the return sync object for the job */
|
||||
sync_out = drm_syncobj_find(file, args->out_sync);
|
||||
if (sync_out) {
|
||||
if (sync_out)
|
||||
drm_syncobj_replace_fence(sync_out, job->render_done_fence);
|
||||
drm_syncobj_put(sync_out);
|
||||
}
|
||||
|
||||
fail:
|
||||
fail_job:
|
||||
panfrost_job_put(job);
|
||||
fail_out_sync:
|
||||
drm_syncobj_put(sync_out);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -384,16 +395,15 @@ static int panfrost_probe(struct platform_device *pdev)
|
||||
|
||||
err = panfrost_device_init(pfdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "Fatal error during GPU init\n");
|
||||
if (err != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev, "Fatal error during GPU init\n");
|
||||
goto err_out0;
|
||||
}
|
||||
|
||||
dma_set_mask_and_coherent(pfdev->dev,
|
||||
DMA_BIT_MASK(FIELD_GET(0xff00, pfdev->features.mmu_features)));
|
||||
|
||||
err = panfrost_devfreq_init(pfdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "Fatal error during devfreq init\n");
|
||||
if (err != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev, "Fatal error during devfreq init\n");
|
||||
goto err_out1;
|
||||
}
|
||||
|
||||
@ -410,6 +420,7 @@ static int panfrost_probe(struct platform_device *pdev)
|
||||
err_out1:
|
||||
panfrost_device_fini(pfdev);
|
||||
err_out0:
|
||||
pm_runtime_disable(pfdev->dev);
|
||||
drm_dev_put(ddev);
|
||||
return err;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
/* Called DRM core on the last userspace/kernel unreference of the
|
||||
* BO.
|
||||
*/
|
||||
void panfrost_gem_free_object(struct drm_gem_object *obj)
|
||||
static void panfrost_gem_free_object(struct drm_gem_object *obj)
|
||||
{
|
||||
struct panfrost_gem_object *bo = to_panfrost_bo(obj);
|
||||
struct panfrost_device *pfdev = obj->dev->dev_private;
|
||||
|
@ -2,8 +2,10 @@
|
||||
/* Copyright 2018 Marty E. Plummer <hanetzer@startmail.com> */
|
||||
/* Copyright 2019 Linaro, Ltd., Rob Herring <robh@kernel.org> */
|
||||
/* Copyright 2019 Collabora ltd. */
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/bitmap.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iopoll.h>
|
||||
@ -276,13 +278,13 @@ static void panfrost_gpu_init_features(struct panfrost_device *pfdev)
|
||||
pfdev->features.hw_issues);
|
||||
|
||||
dev_info(pfdev->dev, "Features: L2:0x%08x Shader:0x%08x Tiler:0x%08x Mem:0x%0x MMU:0x%08x AS:0x%x JS:0x%x",
|
||||
gpu_read(pfdev, GPU_L2_FEATURES),
|
||||
gpu_read(pfdev, GPU_CORE_FEATURES),
|
||||
gpu_read(pfdev, GPU_TILER_FEATURES),
|
||||
gpu_read(pfdev, GPU_MEM_FEATURES),
|
||||
gpu_read(pfdev, GPU_MMU_FEATURES),
|
||||
gpu_read(pfdev, GPU_AS_PRESENT),
|
||||
gpu_read(pfdev, GPU_JS_PRESENT));
|
||||
pfdev->features.l2_features,
|
||||
pfdev->features.core_features,
|
||||
pfdev->features.tiler_features,
|
||||
pfdev->features.mem_features,
|
||||
pfdev->features.mmu_features,
|
||||
pfdev->features.as_present,
|
||||
pfdev->features.js_present);
|
||||
|
||||
dev_info(pfdev->dev, "shader_present=0x%0llx l2_present=0x%0llx",
|
||||
pfdev->features.shader_present, pfdev->features.l2_present);
|
||||
@ -332,6 +334,9 @@ int panfrost_gpu_init(struct panfrost_device *pfdev)
|
||||
|
||||
panfrost_gpu_init_features(pfdev);
|
||||
|
||||
dma_set_mask_and_coherent(pfdev->dev,
|
||||
DMA_BIT_MASK(FIELD_GET(0xff00, pfdev->features.mmu_features)));
|
||||
|
||||
irq = platform_get_irq_byname(to_platform_device(pfdev->dev), "gpu");
|
||||
if (irq <= 0)
|
||||
return -ENODEV;
|
||||
|
@ -384,6 +384,8 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job)
|
||||
job_read(pfdev, JS_TAIL_LO(js)),
|
||||
sched_job);
|
||||
|
||||
mutex_lock(&pfdev->reset_lock);
|
||||
|
||||
for (i = 0; i < NUM_JOB_SLOTS; i++)
|
||||
drm_sched_stop(&pfdev->js->queue[i].sched);
|
||||
|
||||
@ -406,6 +408,8 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job)
|
||||
/* restart scheduler after GPU is usable again */
|
||||
for (i = 0; i < NUM_JOB_SLOTS; i++)
|
||||
drm_sched_start(&pfdev->js->queue[i].sched, true);
|
||||
|
||||
mutex_unlock(&pfdev->reset_lock);
|
||||
}
|
||||
|
||||
static const struct drm_sched_backend_ops panfrost_sched_ops = {
|
||||
|
@ -448,6 +448,14 @@ static int rockchip_drm_platform_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rockchip_drm_platform_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
struct drm_device *drm = platform_get_drvdata(pdev);
|
||||
|
||||
if (drm)
|
||||
drm_atomic_helper_shutdown(drm);
|
||||
}
|
||||
|
||||
static const struct of_device_id rockchip_drm_dt_ids[] = {
|
||||
{ .compatible = "rockchip,display-subsystem", },
|
||||
{ /* sentinel */ },
|
||||
@ -457,6 +465,7 @@ MODULE_DEVICE_TABLE(of, rockchip_drm_dt_ids);
|
||||
static struct platform_driver rockchip_drm_platform_driver = {
|
||||
.probe = rockchip_drm_platform_probe,
|
||||
.remove = rockchip_drm_platform_remove,
|
||||
.shutdown = rockchip_drm_platform_shutdown,
|
||||
.driver = {
|
||||
.name = "rockchip-drm",
|
||||
.of_match_table = rockchip_drm_dt_ids,
|
||||
|
Loading…
Reference in New Issue
Block a user