mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 09:34:12 +08:00
b713442214
Adding driver to handle errors from Control Backbone (CBB) which are generated due to illegal accesses. CBB 1.0 is used in Tegra194 SoCs. When an error is reported from a NOC within CBB, the driver prints debug information about failed transaction like Error Code, Error Description, Master, Address, AXI ID, Cache, Protection, Security Group etc. It then causes system crash using BUG_ON() or call WARN() based on whether the error type is fatal or not. Signed-off-by: Sumit Gupta <sumitg@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved
|
|
*/
|
|
|
|
#ifndef TEGRA_CBB_H
|
|
#define TEGRA_CBB_H
|
|
|
|
#include <linux/list.h>
|
|
|
|
struct tegra_cbb_error {
|
|
const char *code;
|
|
const char *source;
|
|
const char *desc;
|
|
};
|
|
|
|
struct tegra_cbb {
|
|
struct device *dev;
|
|
const struct tegra_cbb_ops *ops;
|
|
struct list_head node;
|
|
};
|
|
|
|
struct tegra_cbb_ops {
|
|
int (*debugfs_show)(struct tegra_cbb *cbb, struct seq_file *s, void *v);
|
|
int (*interrupt_enable)(struct tegra_cbb *cbb);
|
|
void (*error_enable)(struct tegra_cbb *cbb);
|
|
void (*fault_enable)(struct tegra_cbb *cbb);
|
|
void (*stall_enable)(struct tegra_cbb *cbb);
|
|
void (*error_clear)(struct tegra_cbb *cbb);
|
|
u32 (*get_status)(struct tegra_cbb *cbb);
|
|
};
|
|
|
|
int tegra_cbb_get_irq(struct platform_device *pdev, unsigned int *nonsec_irq,
|
|
unsigned int *sec_irq);
|
|
__printf(2, 3)
|
|
void tegra_cbb_print_err(struct seq_file *file, const char *fmt, ...);
|
|
|
|
void tegra_cbb_print_cache(struct seq_file *file, u32 cache);
|
|
void tegra_cbb_print_prot(struct seq_file *file, u32 prot);
|
|
int tegra_cbb_register(struct tegra_cbb *cbb);
|
|
|
|
void tegra_cbb_fault_enable(struct tegra_cbb *cbb);
|
|
void tegra_cbb_stall_enable(struct tegra_cbb *cbb);
|
|
void tegra_cbb_error_clear(struct tegra_cbb *cbb);
|
|
u32 tegra_cbb_get_status(struct tegra_cbb *cbb);
|
|
|
|
#endif /* TEGRA_CBB_H */
|