Skip to content

Commit

Permalink
media: venus: core: add support to dump FW region
Browse files Browse the repository at this point in the history
Add support to dump video FW region during FW crash
using devcoredump helpers.

Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  • Loading branch information
Dikshita Agarwal authored and Mauro Carvalho Chehab committed Jan 27, 2021
1 parent 0f9774d commit 0ca0ca9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
30 changes: 30 additions & 0 deletions drivers/media/platform/qcom/venus/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <linux/interconnect.h>
#include <linux/ioctl.h>
#include <linux/delay.h>
#include <linux/devcoredump.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/of_device.h>
Expand All @@ -22,6 +23,33 @@
#include "firmware.h"
#include "pm_helpers.h"

static void venus_coredump(struct venus_core *core)
{
struct device *dev;
phys_addr_t mem_phys;
size_t mem_size;
void *mem_va;
void *data;

dev = core->dev;
mem_phys = core->fw.mem_phys;
mem_size = core->fw.mem_size;

mem_va = memremap(mem_phys, mem_size, MEMREMAP_WC);
if (!mem_va)
return;

data = vmalloc(mem_size);
if (!data) {
memunmap(mem_va);
return;
}

memcpy(data, mem_va, mem_size);
memunmap(mem_va);
dev_coredumpv(dev, data, mem_size, GFP_KERNEL);
}

static void venus_event_notify(struct venus_core *core, u32 event)
{
struct venus_inst *inst;
Expand Down Expand Up @@ -67,6 +95,8 @@ static void venus_sys_error_handler(struct work_struct *work)

venus_shutdown(core);

venus_coredump(core);

pm_runtime_put_sync(core->dev);

while (core->pmdomains[0] && pm_runtime_active(core->pmdomains[0]))
Expand Down
2 changes: 2 additions & 0 deletions drivers/media/platform/qcom/venus/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,8 @@ struct venus_core {
struct device *dev;
struct iommu_domain *iommu_domain;
size_t mapped_mem_size;
phys_addr_t mem_phys;
size_t mem_size;
} fw;
struct mutex lock;
struct list_head instances;
Expand Down
3 changes: 3 additions & 0 deletions drivers/media/platform/qcom/venus/firmware.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@ int venus_boot(struct venus_core *core)
return -EINVAL;
}

core->fw.mem_size = mem_size;
core->fw.mem_phys = mem_phys;

if (core->use_tz)
ret = qcom_scm_pas_auth_and_reset(VENUS_PAS_ID);
else
Expand Down

0 comments on commit 0ca0ca9

Please sign in to comment.