mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-09-28 17:40:21 +10:00
media: venus: Add support for SSR trigger using fault injection
Here we introduce a new fault injection for SSR trigger. To trigger the SSR: echo 100 > /sys/kernel/debug/venus/fail_ssr/probability echo 1 > /sys/kernel/debug/venus/fail_ssr/times Co-developed-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com> Reviewed-by: Stephen Boyd <swboyd@chromium.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
81e005842d
commit
748b080f21
@ -265,6 +265,19 @@ static void venus_assign_register_offsets(struct venus_core *core)
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t venus_isr_thread(int irq, void *dev_id)
|
||||
{
|
||||
struct venus_core *core = dev_id;
|
||||
irqreturn_t ret;
|
||||
|
||||
ret = hfi_isr_thread(irq, dev_id);
|
||||
|
||||
if (ret == IRQ_HANDLED && venus_fault_inject_ssr())
|
||||
hfi_core_trigger_ssr(core, HFI_TEST_SSR_SW_ERR_FATAL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int venus_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@ -320,7 +333,7 @@ static int venus_probe(struct platform_device *pdev)
|
||||
INIT_DELAYED_WORK(&core->work, venus_sys_error_handler);
|
||||
init_waitqueue_head(&core->sys_err_done);
|
||||
|
||||
ret = devm_request_threaded_irq(dev, core->irq, hfi_isr, hfi_isr_thread,
|
||||
ret = devm_request_threaded_irq(dev, core->irq, hfi_isr, venus_isr_thread,
|
||||
IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
|
||||
"venus", core);
|
||||
if (ret)
|
||||
|
@ -4,13 +4,22 @@
|
||||
*/
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/fault-inject.h>
|
||||
|
||||
#include "core.h"
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION
|
||||
DECLARE_FAULT_ATTR(venus_ssr_attr);
|
||||
#endif
|
||||
|
||||
void venus_dbgfs_init(struct venus_core *core)
|
||||
{
|
||||
core->root = debugfs_create_dir("venus", NULL);
|
||||
debugfs_create_x32("fw_level", 0644, core->root, &venus_fw_debug);
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION
|
||||
fault_create_debugfs_attr("fail_ssr", core->root, &venus_ssr_attr);
|
||||
#endif
|
||||
}
|
||||
|
||||
void venus_dbgfs_deinit(struct venus_core *core)
|
||||
|
@ -4,8 +4,21 @@
|
||||
#ifndef __VENUS_DBGFS_H__
|
||||
#define __VENUS_DBGFS_H__
|
||||
|
||||
#include <linux/fault-inject.h>
|
||||
|
||||
struct venus_core;
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION
|
||||
extern struct fault_attr venus_ssr_attr;
|
||||
static inline bool venus_fault_inject_ssr(void)
|
||||
{
|
||||
return should_fail(&venus_ssr_attr, 1);
|
||||
}
|
||||
#else
|
||||
static inline bool venus_fault_inject_ssr(void) { return false; }
|
||||
#endif
|
||||
|
||||
|
||||
void venus_dbgfs_init(struct venus_core *core);
|
||||
void venus_dbgfs_deinit(struct venus_core *core);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user