mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 01:50:07 +03:00
gpu: nvgpu: move debug dump to HAL
Move the debug dump to HAL and add a stub for vgpu. Bug 1595164 Change-Id: Ifdcdd8a8caca7a41919dad075fee1c87032f53b0 Signed-off-by: Aingara Paramakuru <aparamakuru@nvidia.com> Reviewed-on: http://git-master/r/662722 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
Dan Willemsen
parent
58233492fc
commit
7e9b9c0b3e
@@ -58,7 +58,8 @@ nvgpu-y := \
|
|||||||
gm20b/pmu_gm20b.o \
|
gm20b/pmu_gm20b.o \
|
||||||
gm20b/mm_gm20b.o \
|
gm20b/mm_gm20b.o \
|
||||||
gm20b/regops_gm20b.o \
|
gm20b/regops_gm20b.o \
|
||||||
gm20b/mc_gm20b.o
|
gm20b/mc_gm20b.o \
|
||||||
|
gm20b/debug_gm20b.o
|
||||||
|
|
||||||
nvgpu-$(CONFIG_TEGRA_GK20A) += gk20a/platform_gk20a_tegra.o
|
nvgpu-$(CONFIG_TEGRA_GK20A) += gk20a/platform_gk20a_tegra.o
|
||||||
nvgpu-$(CONFIG_SYNC) += gk20a/sync_gk20a.o
|
nvgpu-$(CONFIG_SYNC) += gk20a/sync_gk20a.o
|
||||||
@@ -69,6 +70,7 @@ nvgpu-$(CONFIG_TEGRA_GR_VIRTUALIZATION) += \
|
|||||||
vgpu/gr_vgpu.o \
|
vgpu/gr_vgpu.o \
|
||||||
vgpu/fifo_vgpu.o \
|
vgpu/fifo_vgpu.o \
|
||||||
vgpu/mm_vgpu.o \
|
vgpu/mm_vgpu.o \
|
||||||
|
vgpu/debug_vgpu.o \
|
||||||
vgpu/vgpu.o
|
vgpu/vgpu.o
|
||||||
|
|
||||||
nvgpu-$(CONFIG_TEGRA_CLK_FRAMEWORK) += \
|
nvgpu-$(CONFIG_TEGRA_CLK_FRAMEWORK) += \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* drivers/video/tegra/host/t20/debug_gk20a.c
|
* drivers/video/tegra/host/t20/debug_gk20a.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011-2014 NVIDIA Corporation. All rights reserved.
|
* Copyright (C) 2011-2015 NVIDIA Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is licensed under the terms of the GNU General Public
|
* This software is licensed under the terms of the GNU General Public
|
||||||
* License version 2, as published by the Free Software Foundation, and
|
* License version 2, as published by the Free Software Foundation, and
|
||||||
@@ -34,12 +34,6 @@
|
|||||||
unsigned int gk20a_debug_trace_cmdbuf;
|
unsigned int gk20a_debug_trace_cmdbuf;
|
||||||
static struct platform_device *gk20a_device;
|
static struct platform_device *gk20a_device;
|
||||||
|
|
||||||
struct gk20a_debug_output {
|
|
||||||
void (*fn)(void *ctx, const char *str, size_t len);
|
|
||||||
void *ctx;
|
|
||||||
char buf[256];
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char * const ccsr_chan_status_str[] = {
|
static const char * const ccsr_chan_status_str[] = {
|
||||||
"idle",
|
"idle",
|
||||||
"pending",
|
"pending",
|
||||||
@@ -160,11 +154,8 @@ static void gk20a_debug_show_channel(struct gk20a *g,
|
|||||||
gk20a_debug_output(o, "\n");
|
gk20a_debug_output(o, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gk20a_debug_show_dump(struct platform_device *pdev,
|
void gk20a_debug_show_dump(struct gk20a *g, struct gk20a_debug_output *o)
|
||||||
struct gk20a_debug_output *o)
|
|
||||||
{
|
{
|
||||||
struct gk20a_platform *platform = gk20a_get_platform(pdev);
|
|
||||||
struct gk20a *g = platform->g;
|
|
||||||
struct fifo_gk20a *f = &g->fifo;
|
struct fifo_gk20a *f = &g->fifo;
|
||||||
u32 chid;
|
u32 chid;
|
||||||
int i, err;
|
int i, err;
|
||||||
@@ -235,6 +226,7 @@ static void gk20a_debug_show_dump(struct platform_device *pdev,
|
|||||||
void gk20a_debug_dump(struct platform_device *pdev)
|
void gk20a_debug_dump(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct gk20a_platform *platform = gk20a_get_platform(pdev);
|
struct gk20a_platform *platform = gk20a_get_platform(pdev);
|
||||||
|
struct gk20a *g = platform->g;
|
||||||
struct gk20a_debug_output o = {
|
struct gk20a_debug_output o = {
|
||||||
.fn = gk20a_debug_write_printk
|
.fn = gk20a_debug_write_printk
|
||||||
};
|
};
|
||||||
@@ -242,7 +234,9 @@ void gk20a_debug_dump(struct platform_device *pdev)
|
|||||||
if (platform->dump_platform_dependencies)
|
if (platform->dump_platform_dependencies)
|
||||||
platform->dump_platform_dependencies(pdev);
|
platform->dump_platform_dependencies(pdev);
|
||||||
|
|
||||||
gk20a_debug_show_dump(pdev, &o);
|
/* HAL only initialized after 1st power-on */
|
||||||
|
if (g->ops.debug.show_dump)
|
||||||
|
g->ops.debug.show_dump(g, &o);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gk20a_debug_dump_device(struct platform_device *pdev)
|
void gk20a_debug_dump_device(struct platform_device *pdev)
|
||||||
@@ -250,6 +244,7 @@ void gk20a_debug_dump_device(struct platform_device *pdev)
|
|||||||
struct gk20a_debug_output o = {
|
struct gk20a_debug_output o = {
|
||||||
.fn = gk20a_debug_write_printk
|
.fn = gk20a_debug_write_printk
|
||||||
};
|
};
|
||||||
|
struct gk20a *g;
|
||||||
|
|
||||||
/* Dump the first device if no info is provided */
|
/* Dump the first device if no info is provided */
|
||||||
if (!pdev) {
|
if (!pdev) {
|
||||||
@@ -259,7 +254,10 @@ void gk20a_debug_dump_device(struct platform_device *pdev)
|
|||||||
pdev = gk20a_device;
|
pdev = gk20a_device;
|
||||||
}
|
}
|
||||||
|
|
||||||
gk20a_debug_show_dump(pdev, &o);
|
g = gk20a_get_platform(pdev)->g;
|
||||||
|
/* HAL only initialized after 1st power-on */
|
||||||
|
if (g->ops.debug.show_dump)
|
||||||
|
g->ops.debug.show_dump(g, &o);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gk20a_debug_dump_device);
|
EXPORT_SYMBOL(gk20a_debug_dump_device);
|
||||||
|
|
||||||
@@ -270,7 +268,12 @@ static int gk20a_debug_show(struct seq_file *s, void *unused)
|
|||||||
.fn = gk20a_debug_write_to_seqfile,
|
.fn = gk20a_debug_write_to_seqfile,
|
||||||
.ctx = s,
|
.ctx = s,
|
||||||
};
|
};
|
||||||
gk20a_debug_show_dump(pdev, &o);
|
struct gk20a *g;
|
||||||
|
|
||||||
|
g = gk20a_get_platform(pdev)->g;
|
||||||
|
/* HAL only initialized after 1st power-on */
|
||||||
|
if (g->ops.debug.show_dump)
|
||||||
|
g->ops.debug.show_dump(g, &o);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +289,11 @@ static const struct file_operations gk20a_debug_fops = {
|
|||||||
.release = single_release,
|
.release = single_release,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void gk20a_init_debug_ops(struct gpu_ops *gops)
|
||||||
|
{
|
||||||
|
gops->debug.show_dump = gk20a_debug_show_dump;
|
||||||
|
}
|
||||||
|
|
||||||
void gk20a_debug_init(struct platform_device *pdev)
|
void gk20a_debug_init(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct gk20a_platform *platform = platform_get_drvdata(pdev);
|
struct gk20a_platform *platform = platform_get_drvdata(pdev);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GK20A Debug functionality
|
* GK20A Debug functionality
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011-2014 NVIDIA CORPORATION. All rights reserved.
|
* Copyright (C) 2011-2015 NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is licensed under the terms of the GNU General Public
|
* This software is licensed under the terms of the GNU General Public
|
||||||
* License version 2, as published by the Free Software Foundation, and
|
* License version 2, as published by the Free Software Foundation, and
|
||||||
@@ -18,10 +18,20 @@
|
|||||||
#define _DEBUG_GK20A_H_
|
#define _DEBUG_GK20A_H_
|
||||||
|
|
||||||
struct platform_device;
|
struct platform_device;
|
||||||
|
struct gk20a;
|
||||||
|
struct gpu_ops;
|
||||||
|
|
||||||
extern unsigned int gk20a_debug_trace_cmdbuf;
|
extern unsigned int gk20a_debug_trace_cmdbuf;
|
||||||
|
|
||||||
|
struct gk20a_debug_output {
|
||||||
|
void (*fn)(void *ctx, const char *str, size_t len);
|
||||||
|
void *ctx;
|
||||||
|
char buf[256];
|
||||||
|
};
|
||||||
|
|
||||||
void gk20a_debug_dump(struct platform_device *pdev);
|
void gk20a_debug_dump(struct platform_device *pdev);
|
||||||
|
void gk20a_debug_show_dump(struct gk20a *g, struct gk20a_debug_output *o);
|
||||||
void gk20a_debug_init(struct platform_device *pdev);
|
void gk20a_debug_init(struct platform_device *pdev);
|
||||||
|
void gk20a_init_debug_ops(struct gpu_ops *gops);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GK20A Graphics
|
* GK20A Graphics
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2011-2015, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -47,6 +47,7 @@ struct acr_gm20b;
|
|||||||
#include "platform_gk20a.h"
|
#include "platform_gk20a.h"
|
||||||
#include "gm20b/acr_gm20b.h"
|
#include "gm20b/acr_gm20b.h"
|
||||||
#include "cde_gk20a.h"
|
#include "cde_gk20a.h"
|
||||||
|
#include "debug_gk20a.h"
|
||||||
|
|
||||||
struct cooling_device_gk20a {
|
struct cooling_device_gk20a {
|
||||||
struct thermal_cooling_device *gk20a_cooling_dev;
|
struct thermal_cooling_device *gk20a_cooling_dev;
|
||||||
@@ -367,6 +368,10 @@ struct gpu_ops {
|
|||||||
irqreturn_t (*isr_thread_nonstall)(struct gk20a *g);
|
irqreturn_t (*isr_thread_nonstall)(struct gk20a *g);
|
||||||
u32 intr_mask_restore[4];
|
u32 intr_mask_restore[4];
|
||||||
} mc;
|
} mc;
|
||||||
|
struct {
|
||||||
|
void (*show_dump)(struct gk20a *g,
|
||||||
|
struct gk20a_debug_output *o);
|
||||||
|
} debug;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gk20a {
|
struct gk20a {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* GK20A Tegra HAL interface.
|
* GK20A Tegra HAL interface.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -62,6 +62,7 @@ int gk20a_init_hal(struct gk20a *g)
|
|||||||
gk20a_init_pmu_ops(gops);
|
gk20a_init_pmu_ops(gops);
|
||||||
gk20a_init_clk_ops(gops);
|
gk20a_init_clk_ops(gops);
|
||||||
gk20a_init_regops(gops);
|
gk20a_init_regops(gops);
|
||||||
|
gk20a_init_debug_ops(gops);
|
||||||
gops->name = "gk20a";
|
gops->name = "gk20a";
|
||||||
|
|
||||||
c->twod_class = FERMI_TWOD_A;
|
c->twod_class = FERMI_TWOD_A;
|
||||||
|
|||||||
21
drivers/gpu/nvgpu/gm20b/debug_gm20b.c
Normal file
21
drivers/gpu/nvgpu/gm20b/debug_gm20b.c
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 NVIDIA Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under the terms of the GNU General Public
|
||||||
|
* License version 2, as published by the Free Software Foundation, and
|
||||||
|
* may be copied, distributed, and modified under those terms.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gk20a/gk20a.h"
|
||||||
|
#include "debug_gm20b.h"
|
||||||
|
|
||||||
|
void gm20b_init_debug_ops(struct gpu_ops *gops)
|
||||||
|
{
|
||||||
|
gops->debug.show_dump = gk20a_debug_show_dump;
|
||||||
|
}
|
||||||
24
drivers/gpu/nvgpu/gm20b/debug_gm20b.h
Normal file
24
drivers/gpu/nvgpu/gm20b/debug_gm20b.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* GM20B Debug functionality
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 NVIDIA CORPORATION. All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under the terms of the GNU General Public
|
||||||
|
* License version 2, as published by the Free Software Foundation, and
|
||||||
|
* may be copied, distributed, and modified under those terms.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DEBUG_GM20B_H_
|
||||||
|
#define _DEBUG_GM20B_H_
|
||||||
|
|
||||||
|
struct gpu_ops;
|
||||||
|
|
||||||
|
void gm20b_init_debug_ops(struct gpu_ops *gops);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GM20B Graphics
|
* GM20B Graphics
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "mc_gm20b.h"
|
#include "mc_gm20b.h"
|
||||||
#include <linux/tegra-fuse.h>
|
#include <linux/tegra-fuse.h>
|
||||||
#include "regops_gm20b.h"
|
#include "regops_gm20b.h"
|
||||||
|
#include "debug_gm20b.h"
|
||||||
|
|
||||||
#define FUSE_OPT_PRIV_SEC_DIS_0 0x264
|
#define FUSE_OPT_PRIV_SEC_DIS_0 0x264
|
||||||
#define PRIV_SECURITY_DISABLE 0x01
|
#define PRIV_SECURITY_DISABLE 0x01
|
||||||
@@ -128,6 +129,7 @@ int gm20b_init_hal(struct gk20a *g)
|
|||||||
gm20b_init_pmu_ops(gops);
|
gm20b_init_pmu_ops(gops);
|
||||||
gm20b_init_clk_ops(gops);
|
gm20b_init_clk_ops(gops);
|
||||||
gm20b_init_regops(gops);
|
gm20b_init_regops(gops);
|
||||||
|
gm20b_init_debug_ops(gops);
|
||||||
gops->name = "gm20b";
|
gops->name = "gm20b";
|
||||||
|
|
||||||
c->twod_class = FERMI_TWOD_A;
|
c->twod_class = FERMI_TWOD_A;
|
||||||
|
|||||||
25
drivers/gpu/nvgpu/vgpu/debug_vgpu.c
Normal file
25
drivers/gpu/nvgpu/vgpu/debug_vgpu.c
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 NVIDIA Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under the terms of the GNU General Public
|
||||||
|
* License version 2, as published by the Free Software Foundation, and
|
||||||
|
* may be copied, distributed, and modified under those terms.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "vgpu/vgpu.h"
|
||||||
|
|
||||||
|
static void vgpu_debug_show_dump(struct gk20a *g, struct gk20a_debug_output *o)
|
||||||
|
{
|
||||||
|
/* debug dump not supported */
|
||||||
|
}
|
||||||
|
|
||||||
|
void vgpu_init_debug_ops(struct gpu_ops *gops)
|
||||||
|
{
|
||||||
|
gops->debug.show_dump = vgpu_debug_show_dump;
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Virtualized GPU
|
* Virtualized GPU
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014 NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2014-2015 NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -247,6 +247,7 @@ static int vgpu_init_hal(struct gk20a *g)
|
|||||||
vgpu_init_gr_ops(&g->ops);
|
vgpu_init_gr_ops(&g->ops);
|
||||||
vgpu_init_ltc_ops(&g->ops);
|
vgpu_init_ltc_ops(&g->ops);
|
||||||
vgpu_init_mm_ops(&g->ops);
|
vgpu_init_mm_ops(&g->ops);
|
||||||
|
vgpu_init_debug_ops(&g->ops);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gk20a_err(&g->dev->dev, "no support for %x", ver);
|
gk20a_err(&g->dev->dev, "no support for %x", ver);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Virtualized GPU Interfaces
|
* Virtualized GPU Interfaces
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -31,6 +31,7 @@ void vgpu_init_fifo_ops(struct gpu_ops *gops);
|
|||||||
void vgpu_init_gr_ops(struct gpu_ops *gops);
|
void vgpu_init_gr_ops(struct gpu_ops *gops);
|
||||||
void vgpu_init_ltc_ops(struct gpu_ops *gops);
|
void vgpu_init_ltc_ops(struct gpu_ops *gops);
|
||||||
void vgpu_init_mm_ops(struct gpu_ops *gops);
|
void vgpu_init_mm_ops(struct gpu_ops *gops);
|
||||||
|
void vgpu_init_debug_ops(struct gpu_ops *gops);
|
||||||
int vgpu_init_mm_support(struct gk20a *g);
|
int vgpu_init_mm_support(struct gk20a *g);
|
||||||
int vgpu_init_gr_support(struct gk20a *g);
|
int vgpu_init_gr_support(struct gk20a *g);
|
||||||
int vgpu_init_fifo_support(struct gk20a *g);
|
int vgpu_init_fifo_support(struct gk20a *g);
|
||||||
@@ -75,6 +76,9 @@ static inline void vgpu_init_ltc_ops(struct gpu_ops *gops)
|
|||||||
static inline void vgpu_init_mm_ops(struct gpu_ops *gops)
|
static inline void vgpu_init_mm_ops(struct gpu_ops *gops)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
static inline void vgpu_init_debug_ops(struct gpu_ops *gops)
|
||||||
|
{
|
||||||
|
}
|
||||||
static inline int vgpu_init_mm_support(struct gk20a *g)
|
static inline int vgpu_init_mm_support(struct gk20a *g)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|||||||
Reference in New Issue
Block a user