mirror of
https://github.com/torvalds/linux
synced 2024-10-23 19:57:28 +00:00
drm/nouveau/core: make all info-level messages silent for runtime pm
Removes the need for special handling of messages in init paths. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
16c4f227ff
commit
c52f4fa61d
|
@ -105,7 +105,7 @@ nouveau_dbgopt(const char *optstr, const char *sub)
|
||||||
else if (!strncasecmpz(optstr, "warn", len))
|
else if (!strncasecmpz(optstr, "warn", len))
|
||||||
level = NV_DBG_WARN;
|
level = NV_DBG_WARN;
|
||||||
else if (!strncasecmpz(optstr, "info", len))
|
else if (!strncasecmpz(optstr, "info", len))
|
||||||
level = NV_DBG_INFO;
|
level = NV_DBG_INFO_NORMAL;
|
||||||
else if (!strncasecmpz(optstr, "debug", len))
|
else if (!strncasecmpz(optstr, "debug", len))
|
||||||
level = NV_DBG_DEBUG;
|
level = NV_DBG_DEBUG;
|
||||||
else if (!strncasecmpz(optstr, "trace", len))
|
else if (!strncasecmpz(optstr, "trace", len))
|
||||||
|
|
|
@ -27,16 +27,38 @@
|
||||||
#include <core/subdev.h>
|
#include <core/subdev.h>
|
||||||
#include <core/printk.h>
|
#include <core/printk.h>
|
||||||
|
|
||||||
int nv_printk_suspend_level = NV_DBG_DEBUG;
|
int nv_info_debug_level = NV_DBG_INFO_NORMAL;
|
||||||
|
|
||||||
void
|
void
|
||||||
nv_printk_(struct nouveau_object *object, const char *pfx, int level,
|
nv_printk_(struct nouveau_object *object, int level, const char *fmt, ...)
|
||||||
const char *fmt, ...)
|
|
||||||
{
|
{
|
||||||
static const char name[] = { '!', 'E', 'W', ' ', 'D', 'T', 'P', 'S' };
|
static const char name[] = { '!', 'E', 'W', ' ', 'D', 'T', 'P', 'S' };
|
||||||
|
const char *pfx;
|
||||||
char mfmt[256];
|
char mfmt[256];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
switch (level) {
|
||||||
|
case NV_DBG_FATAL:
|
||||||
|
pfx = KERN_CRIT;
|
||||||
|
break;
|
||||||
|
case NV_DBG_ERROR:
|
||||||
|
pfx = KERN_ERR;
|
||||||
|
break;
|
||||||
|
case NV_DBG_WARN:
|
||||||
|
pfx = KERN_WARNING;
|
||||||
|
break;
|
||||||
|
case NV_DBG_INFO_NORMAL:
|
||||||
|
pfx = KERN_INFO;
|
||||||
|
break;
|
||||||
|
case NV_DBG_DEBUG:
|
||||||
|
case NV_DBG_PARANOIA:
|
||||||
|
case NV_DBG_TRACE:
|
||||||
|
case NV_DBG_SPAM:
|
||||||
|
default:
|
||||||
|
pfx = KERN_DEBUG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (object && !nv_iclass(object, NV_CLIENT_CLASS)) {
|
if (object && !nv_iclass(object, NV_CLIENT_CLASS)) {
|
||||||
struct nouveau_object *device = object;
|
struct nouveau_object *device = object;
|
||||||
struct nouveau_object *subdev = object;
|
struct nouveau_object *subdev = object;
|
||||||
|
@ -74,20 +96,3 @@ nv_printk_(struct nouveau_object *object, const char *pfx, int level,
|
||||||
vprintk(mfmt, args);
|
vprintk(mfmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CONV_LEVEL(x) case NV_DBG_##x: return NV_PRINTK_##x
|
|
||||||
|
|
||||||
const char *nv_printk_level_to_pfx(int level)
|
|
||||||
{
|
|
||||||
switch (level) {
|
|
||||||
CONV_LEVEL(FATAL);
|
|
||||||
CONV_LEVEL(ERROR);
|
|
||||||
CONV_LEVEL(WARN);
|
|
||||||
CONV_LEVEL(INFO);
|
|
||||||
CONV_LEVEL(DEBUG);
|
|
||||||
CONV_LEVEL(PARANOIA);
|
|
||||||
CONV_LEVEL(TRACE);
|
|
||||||
CONV_LEVEL(SPAM);
|
|
||||||
}
|
|
||||||
return NV_PRINTK_DEBUG;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,13 +1,20 @@
|
||||||
#ifndef __NOUVEAU_DEBUG_H__
|
#ifndef __NOUVEAU_DEBUG_H__
|
||||||
#define __NOUVEAU_DEBUG_H__
|
#define __NOUVEAU_DEBUG_H__
|
||||||
|
|
||||||
|
extern int nv_info_debug_level;
|
||||||
|
|
||||||
#define NV_DBG_FATAL 0
|
#define NV_DBG_FATAL 0
|
||||||
#define NV_DBG_ERROR 1
|
#define NV_DBG_ERROR 1
|
||||||
#define NV_DBG_WARN 2
|
#define NV_DBG_WARN 2
|
||||||
#define NV_DBG_INFO 3
|
#define NV_DBG_INFO nv_info_debug_level
|
||||||
#define NV_DBG_DEBUG 4
|
#define NV_DBG_DEBUG 4
|
||||||
#define NV_DBG_TRACE 5
|
#define NV_DBG_TRACE 5
|
||||||
#define NV_DBG_PARANOIA 6
|
#define NV_DBG_PARANOIA 6
|
||||||
#define NV_DBG_SPAM 7
|
#define NV_DBG_SPAM 7
|
||||||
|
|
||||||
|
#define NV_DBG_INFO_NORMAL 3
|
||||||
|
#define NV_DBG_INFO_SILENT NV_DBG_DEBUG
|
||||||
|
|
||||||
|
#define nv_debug_level(a) nv_info_debug_level = NV_DBG_INFO_##a
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,27 +6,12 @@
|
||||||
|
|
||||||
struct nouveau_object;
|
struct nouveau_object;
|
||||||
|
|
||||||
#define NV_PRINTK_FATAL KERN_CRIT
|
void __printf(3, 4)
|
||||||
#define NV_PRINTK_ERROR KERN_ERR
|
nv_printk_(struct nouveau_object *, int, const char *, ...);
|
||||||
#define NV_PRINTK_WARN KERN_WARNING
|
|
||||||
#define NV_PRINTK_INFO KERN_INFO
|
|
||||||
#define NV_PRINTK_DEBUG KERN_DEBUG
|
|
||||||
#define NV_PRINTK_PARANOIA KERN_DEBUG
|
|
||||||
#define NV_PRINTK_TRACE KERN_DEBUG
|
|
||||||
#define NV_PRINTK_SPAM KERN_DEBUG
|
|
||||||
|
|
||||||
extern int nv_printk_suspend_level;
|
|
||||||
|
|
||||||
#define NV_DBG_SUSPEND (nv_printk_suspend_level)
|
|
||||||
#define NV_PRINTK_SUSPEND (nv_printk_level_to_pfx(nv_printk_suspend_level))
|
|
||||||
|
|
||||||
const char *nv_printk_level_to_pfx(int level);
|
|
||||||
void __printf(4, 5)
|
|
||||||
nv_printk_(struct nouveau_object *, const char *, int, const char *, ...);
|
|
||||||
|
|
||||||
#define nv_printk(o,l,f,a...) do { \
|
#define nv_printk(o,l,f,a...) do { \
|
||||||
if (NV_DBG_##l <= CONFIG_NOUVEAU_DEBUG) \
|
if (NV_DBG_##l <= CONFIG_NOUVEAU_DEBUG) \
|
||||||
nv_printk_(nv_object(o), NV_PRINTK_##l, NV_DBG_##l, f, ##a); \
|
nv_printk_(nv_object(o), NV_DBG_##l, f, ##a); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
#define nv_fatal(o,f,a...) nv_printk((o), FATAL, f, ##a)
|
#define nv_fatal(o,f,a...) nv_printk((o), FATAL, f, ##a)
|
||||||
|
@ -37,16 +22,9 @@ nv_printk_(struct nouveau_object *, const char *, int, const char *, ...);
|
||||||
#define nv_trace(o,f,a...) nv_printk((o), TRACE, f, ##a)
|
#define nv_trace(o,f,a...) nv_printk((o), TRACE, f, ##a)
|
||||||
#define nv_spam(o,f,a...) nv_printk((o), SPAM, f, ##a)
|
#define nv_spam(o,f,a...) nv_printk((o), SPAM, f, ##a)
|
||||||
|
|
||||||
#define nv_suspend(o,f,a...) nv_printk((o), SUSPEND, f, ##a)
|
|
||||||
|
|
||||||
static inline void nv_suspend_set_printk_level(int level)
|
|
||||||
{
|
|
||||||
nv_printk_suspend_level = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define nv_assert(f,a...) do { \
|
#define nv_assert(f,a...) do { \
|
||||||
if (NV_DBG_FATAL <= CONFIG_NOUVEAU_DEBUG) \
|
if (NV_DBG_FATAL <= CONFIG_NOUVEAU_DEBUG) \
|
||||||
nv_printk_(NULL, NV_PRINTK_FATAL, NV_DBG_FATAL, f "\n", ##a); \
|
nv_printk_(NULL, NV_DBG_FATAL, f "\n", ##a); \
|
||||||
BUG_ON(1); \
|
BUG_ON(1); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
|
|
@ -2180,7 +2180,7 @@ nvbios_init(struct nouveau_subdev *subdev, bool execute)
|
||||||
u16 data;
|
u16 data;
|
||||||
|
|
||||||
if (execute)
|
if (execute)
|
||||||
nv_suspend(bios, "running init tables\n");
|
nv_info(bios, "running init tables\n");
|
||||||
while (!ret && (data = (init_script(bios, ++i)))) {
|
while (!ret && (data = (init_script(bios, ++i)))) {
|
||||||
struct nvbios_init init = {
|
struct nvbios_init init = {
|
||||||
.subdev = subdev,
|
.subdev = subdev,
|
||||||
|
|
|
@ -457,7 +457,7 @@ nouveau_display_suspend(struct drm_device *dev)
|
||||||
|
|
||||||
nouveau_display_fini(dev);
|
nouveau_display_fini(dev);
|
||||||
|
|
||||||
NV_SUSPEND(drm, "unpinning framebuffer(s)...\n");
|
NV_INFO(drm, "unpinning framebuffer(s)...\n");
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||||
struct nouveau_framebuffer *nouveau_fb;
|
struct nouveau_framebuffer *nouveau_fb;
|
||||||
|
|
||||||
|
|
|
@ -462,16 +462,16 @@ nouveau_do_suspend(struct drm_device *dev)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (dev->mode_config.num_crtc) {
|
if (dev->mode_config.num_crtc) {
|
||||||
NV_SUSPEND(drm, "suspending display...\n");
|
NV_INFO(drm, "suspending display...\n");
|
||||||
ret = nouveau_display_suspend(dev);
|
ret = nouveau_display_suspend(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
NV_SUSPEND(drm, "evicting buffers...\n");
|
NV_INFO(drm, "evicting buffers...\n");
|
||||||
ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
|
ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
|
||||||
|
|
||||||
NV_SUSPEND(drm, "waiting for kernel channels to go idle...\n");
|
NV_INFO(drm, "waiting for kernel channels to go idle...\n");
|
||||||
if (drm->cechan) {
|
if (drm->cechan) {
|
||||||
ret = nouveau_channel_idle(drm->cechan);
|
ret = nouveau_channel_idle(drm->cechan);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -484,7 +484,7 @@ nouveau_do_suspend(struct drm_device *dev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
NV_SUSPEND(drm, "suspending client object trees...\n");
|
NV_INFO(drm, "suspending client object trees...\n");
|
||||||
if (drm->fence && nouveau_fence(drm)->suspend) {
|
if (drm->fence && nouveau_fence(drm)->suspend) {
|
||||||
if (!nouveau_fence(drm)->suspend(drm))
|
if (!nouveau_fence(drm)->suspend(drm))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -496,7 +496,7 @@ nouveau_do_suspend(struct drm_device *dev)
|
||||||
goto fail_client;
|
goto fail_client;
|
||||||
}
|
}
|
||||||
|
|
||||||
NV_SUSPEND(drm, "suspending kernel object tree...\n");
|
NV_INFO(drm, "suspending kernel object tree...\n");
|
||||||
ret = nouveau_client_fini(&drm->client.base, true);
|
ret = nouveau_client_fini(&drm->client.base, true);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail_client;
|
goto fail_client;
|
||||||
|
@ -510,7 +510,7 @@ nouveau_do_suspend(struct drm_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->mode_config.num_crtc) {
|
if (dev->mode_config.num_crtc) {
|
||||||
NV_SUSPEND(drm, "resuming display...\n");
|
NV_INFO(drm, "resuming display...\n");
|
||||||
nouveau_display_resume(dev);
|
nouveau_display_resume(dev);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -529,7 +529,6 @@ int nouveau_pmops_suspend(struct device *dev)
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_fbcon_set_suspend(drm_dev, 1);
|
nouveau_fbcon_set_suspend(drm_dev, 1);
|
||||||
|
|
||||||
nv_suspend_set_printk_level(NV_DBG_INFO);
|
|
||||||
ret = nouveau_do_suspend(drm_dev);
|
ret = nouveau_do_suspend(drm_dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -537,8 +536,6 @@ int nouveau_pmops_suspend(struct device *dev)
|
||||||
pci_save_state(pdev);
|
pci_save_state(pdev);
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
pci_set_power_state(pdev, PCI_D3hot);
|
pci_set_power_state(pdev, PCI_D3hot);
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -548,15 +545,15 @@ nouveau_do_resume(struct drm_device *dev)
|
||||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||||
struct nouveau_cli *cli;
|
struct nouveau_cli *cli;
|
||||||
|
|
||||||
NV_SUSPEND(drm, "re-enabling device...\n");
|
NV_INFO(drm, "re-enabling device...\n");
|
||||||
|
|
||||||
nouveau_agp_reset(drm);
|
nouveau_agp_reset(drm);
|
||||||
|
|
||||||
NV_SUSPEND(drm, "resuming kernel object tree...\n");
|
NV_INFO(drm, "resuming kernel object tree...\n");
|
||||||
nouveau_client_init(&drm->client.base);
|
nouveau_client_init(&drm->client.base);
|
||||||
nouveau_agp_init(drm);
|
nouveau_agp_init(drm);
|
||||||
|
|
||||||
NV_SUSPEND(drm, "resuming client object trees...\n");
|
NV_INFO(drm, "resuming client object trees...\n");
|
||||||
if (drm->fence && nouveau_fence(drm)->resume)
|
if (drm->fence && nouveau_fence(drm)->resume)
|
||||||
nouveau_fence(drm)->resume(drm);
|
nouveau_fence(drm)->resume(drm);
|
||||||
|
|
||||||
|
@ -568,7 +565,7 @@ nouveau_do_resume(struct drm_device *dev)
|
||||||
nouveau_pm_resume(dev);
|
nouveau_pm_resume(dev);
|
||||||
|
|
||||||
if (dev->mode_config.num_crtc) {
|
if (dev->mode_config.num_crtc) {
|
||||||
NV_SUSPEND(drm, "resuming display...\n");
|
NV_INFO(drm, "resuming display...\n");
|
||||||
nouveau_display_repin(dev);
|
nouveau_display_repin(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,19 +589,15 @@ int nouveau_pmops_resume(struct device *dev)
|
||||||
return ret;
|
return ret;
|
||||||
pci_set_master(pdev);
|
pci_set_master(pdev);
|
||||||
|
|
||||||
nv_suspend_set_printk_level(NV_DBG_INFO);
|
|
||||||
ret = nouveau_do_resume(drm_dev);
|
ret = nouveau_do_resume(drm_dev);
|
||||||
if (ret) {
|
if (ret)
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_fbcon_set_suspend(drm_dev, 0);
|
nouveau_fbcon_set_suspend(drm_dev, 0);
|
||||||
|
|
||||||
nouveau_fbcon_zfill_all(drm_dev);
|
nouveau_fbcon_zfill_all(drm_dev);
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_display_resume(drm_dev);
|
nouveau_display_resume(drm_dev);
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,12 +607,10 @@ static int nouveau_pmops_freeze(struct device *dev)
|
||||||
struct drm_device *drm_dev = pci_get_drvdata(pdev);
|
struct drm_device *drm_dev = pci_get_drvdata(pdev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
nv_suspend_set_printk_level(NV_DBG_INFO);
|
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_fbcon_set_suspend(drm_dev, 1);
|
nouveau_fbcon_set_suspend(drm_dev, 1);
|
||||||
|
|
||||||
ret = nouveau_do_suspend(drm_dev);
|
ret = nouveau_do_suspend(drm_dev);
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,18 +620,14 @@ static int nouveau_pmops_thaw(struct device *dev)
|
||||||
struct drm_device *drm_dev = pci_get_drvdata(pdev);
|
struct drm_device *drm_dev = pci_get_drvdata(pdev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
nv_suspend_set_printk_level(NV_DBG_INFO);
|
|
||||||
ret = nouveau_do_resume(drm_dev);
|
ret = nouveau_do_resume(drm_dev);
|
||||||
if (ret) {
|
if (ret)
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_fbcon_set_suspend(drm_dev, 0);
|
nouveau_fbcon_set_suspend(drm_dev, 0);
|
||||||
nouveau_fbcon_zfill_all(drm_dev);
|
nouveau_fbcon_zfill_all(drm_dev);
|
||||||
if (drm_dev->mode_config.num_crtc)
|
if (drm_dev->mode_config.num_crtc)
|
||||||
nouveau_display_resume(drm_dev);
|
nouveau_display_resume(drm_dev);
|
||||||
nv_suspend_set_printk_level(NV_DBG_DEBUG);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -844,6 +831,7 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)
|
||||||
if (nouveau_runtime_pm == 0)
|
if (nouveau_runtime_pm == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
nv_debug_level(SILENT);
|
||||||
drm_kms_helper_poll_disable(drm_dev);
|
drm_kms_helper_poll_disable(drm_dev);
|
||||||
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_OFF);
|
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_OFF);
|
||||||
nouveau_switcheroo_optimus_dsm();
|
nouveau_switcheroo_optimus_dsm();
|
||||||
|
@ -880,6 +868,7 @@ static int nouveau_pmops_runtime_resume(struct device *dev)
|
||||||
nv_mask(device, 0x88488, (1 << 25), (1 << 25));
|
nv_mask(device, 0x88488, (1 << 25), (1 << 25));
|
||||||
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON);
|
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON);
|
||||||
drm_dev->switch_power_state = DRM_SWITCH_POWER_ON;
|
drm_dev->switch_power_state = DRM_SWITCH_POWER_ON;
|
||||||
|
nv_debug_level(NORMAL);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,6 @@ nouveau_dev(struct drm_device *dev)
|
||||||
int nouveau_pmops_suspend(struct device *);
|
int nouveau_pmops_suspend(struct device *);
|
||||||
int nouveau_pmops_resume(struct device *);
|
int nouveau_pmops_resume(struct device *);
|
||||||
|
|
||||||
#define NV_SUSPEND(cli, fmt, args...) nv_suspend((cli), fmt, ##args)
|
|
||||||
#define NV_FATAL(cli, fmt, args...) nv_fatal((cli), fmt, ##args)
|
#define NV_FATAL(cli, fmt, args...) nv_fatal((cli), fmt, ##args)
|
||||||
#define NV_ERROR(cli, fmt, args...) nv_error((cli), fmt, ##args)
|
#define NV_ERROR(cli, fmt, args...) nv_error((cli), fmt, ##args)
|
||||||
#define NV_WARN(cli, fmt, args...) nv_warn((cli), fmt, ##args)
|
#define NV_WARN(cli, fmt, args...) nv_warn((cli), fmt, ##args)
|
||||||
|
|
Loading…
Reference in a new issue