Commit c52f4fa6 authored by Ben Skeggs's avatar Ben Skeggs

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: default avatarBen Skeggs <bskeggs@redhat.com>
parent 16c4f227
...@@ -105,7 +105,7 @@ nouveau_dbgopt(const char *optstr, const char *sub) ...@@ -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 @@ ...@@ -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, ...@@ -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;
}
#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 @@ ...@@ -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 *, ...); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment