Yet another version of the card pausing patch
Subsystems (3)
PATCH 1/1 Yet another version of the card pausing patch
Hi everyone,
I would like devs to test this patch on all their cards(<nvc0) and report bugs/instability. It shouldn't ever crash (but it may not always work and return -EAGAIN).
I've attached a little bash script that you need to modify according to the available perf levels. Please launch it and play, watch videos or browse the internet.
Also, if you could look at the hold_spin variable and tell me how you would deal with that, it would be kind of you. The problem is that PGRAPH may take an awful lot of time to pause in certain conditions and holding the lock at this position isn't needed (as far as I can tell, the critical ressource is fifo_reassign).
Martin
PS: I'll be out in an hour for a week so I may be slower to answer messages.
From 1fd18aa03020f64567bc2a711babb190b49a1520 Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Wed, 19 Jan 2011 10:03:08 +0100
Subject: [PATCH 1/2] Add pm.(un)pause functions
With this patch, cards without internal memory (IONs and other IGPs) and cards with no memory reclock (a lot of nv40) should support safe reclocking even in games.
Please test this patch on all your hardware(< nvc0) and report bugs.
WARNING: This patch disables memory reclocking
--- drivers/gpu/drm/nouveau/nouveau_drv.h | 9 ++ drivers/gpu/drm/nouveau/nouveau_pm.c | 26 ++++- drivers/gpu/drm/nouveau/nouveau_pm.h | 4 + drivers/gpu/drm/nouveau/nouveau_reg.h | 3 + drivers/gpu/drm/nouveau/nouveau_state.c | 15 +++- drivers/gpu/drm/nouveau/nv04_pm.c | 126 ++++++++++++++++++++++ drivers/gpu/drm/nouveau/nv50_pm.c | 172 +++++++++++++++++++++++++++++++ 7 files changed, 351 insertions(+), 4 deletions(-)
drivers/gpu/drm/nouveau/nouveau_drv.h +9 -0
@@ -471,6 +471,10 @@ struct nouveau_pm_memtimings {int nr_timing; }; +struct nouveau_pm_pause_card_state { +u32 reg_c040; +}; +struct nouveau_pm_engine {struct nouveau_pm_voltage voltage;struct nouveau_pm_level perflvl[NOUVEAU_PM_MAX_LEVEL ];
@@ -485,6 +489,11 @@ struct nouveau_pm_engine {struct device *hwmon;struct notifier_block acpi_nb; +struct nouveau_pm_pause_card_state pause_state; + +int (*pause)(struct drm_device *); +void (*unpause)(struct drm_device *); +int (*clock_get)(struct drm_device *,u32 id);void *(*clock_pre)(struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);
drivers/gpu/drm/nouveau/nouveau_pm.c +23 -3
@@ -45,6 +45,10 @@ nouveau_pm_clock_set(struct drm_device *dev, struct nouveau_pm_level *perflvl,if (khz ==0 )return 0 ; +/* Do no reclock the memory if the frequencies didn't change */ +if (id ==PLL_MEMORY && pm->cur->memory == khz) +return 0 ; + pre_state = pm->clock_pre (dev, perflvl, id, khz);if (IS_ERR (pre_state))return PTR_ERR (pre_state);
@@ -60,10 +64,13 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl)struct drm_nouveau_private *dev_priv = dev->dev_private;struct nouveau_pm_engine *pm = &dev_priv->engine.pm;int ret; +uint64_t start =nv04_timer_read (dev);if (perflvl == pm->cur)return 0 ; +NV_INFO (dev,"setting performance level: %s\n" , perflvl->name); +if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set (dev, perflvl->voltage);if (ret) {
@@ -72,13 +79,27 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl) } } + ret = pm->pause (dev); +if (ret) +return ret; +nouveau_pm_clock_set (dev, perflvl,PLL_CORE , perflvl->core);nouveau_pm_clock_set (dev, perflvl,PLL_SHADER , perflvl->shader); -nouveau_pm_clock_set (dev, perflvl,PLL_MEMORY , perflvl->memory); +/*nouveau_pm_clock_set(dev, perflvl, PLL_MEMORY, perflvl->memory);*/ nouveau_pm_clock_set (dev, perflvl,PLL_UNK05 , perflvl->unk05); +/* Wait for PLLs to stabilize */ +udelay (100 ); + pm->cur = perflvl; -return 0 ; + ret =0 ; + + pm->unpause (dev); + +NV_DEBUG (dev,"Reclocking took %lluµs\n" , + (nv04_timer_read (dev) - start)/1000 ); + +return ret; } static int
@@ -112,7 +133,6 @@ nouveau_pm_profile_set(struct drm_device *dev, const char *profile)return -EINVAL ; } -NV_INFO (dev,"setting performance level: %s\n" , profile);return nouveau_pm_perflvl_set (dev, perflvl); }
drivers/gpu/drm/nouveau/nouveau_pm.h +4 -0
@@ -51,12 +51,16 @@ int nv04_pm_clock_get(struct drm_device *, u32 id);void *nv04_pm_clock_pre (struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);void nv04_pm_clock_set (struct drm_device *,void *); +int nv04_pm_pause (struct drm_device *dev); +void nv04_pm_unpause (struct drm_device *dev);/* nv50_pm.c */ int nv50_pm_clock_get (struct drm_device *,u32 id);void *nv50_pm_clock_pre (struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);void nv50_pm_clock_set (struct drm_device *,void *); +int nv50_pm_pause (struct drm_device *dev); +void nv50_pm_unpause (struct drm_device *dev);/* nva3_pm.c */ int nva3_pm_clock_get (struct drm_device *,u32 id);
drivers/gpu/drm/nouveau/nouveau_reg.h +3 -0
@@ -695,8 +695,11 @@#define NV50_PROM__ESIZE 0x10000#define NV50_PGRAPH 0x00400000 +#define NV50_PGRAPH_CONTROL 0x00400500 +#define NV50_PGRAPH_FIFO_STATUS 0x00400504#define NV50_PGRAPH__LEN 0x1#define NV50_PGRAPH__ESIZE 0x10000 +#define NV50_PFIFO_FREEZE 0x2504#define NV50_PDISPLAY 0x00610000#define NV50_PDISPLAY_OBJECTS 0x00610010
drivers/gpu/drm/nouveau/nouveau_state.c +14 -1
@@ -98,6 +98,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -157,6 +159,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -216,6 +220,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -277,6 +283,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_set = nv04_pm_clock_set; engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -340,6 +348,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; engine->pm.temp_get = nv40_temp_get; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -432,6 +442,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) } engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; + engine->pm.pause = nv50_pm_pause; + engine->pm.unpause = nv50_pm_unpause;if (dev_priv->chipset >=0x84 ) engine->pm.temp_get = nv84_temp_get;else
@@ -507,6 +519,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->gpio.irq_register = nv50_gpio_irq_register; engine->gpio.irq_unregister = nv50_gpio_irq_unregister; engine->gpio.irq_enable = nv50_gpio_irq_enable; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nvc0_vram_init;
@@ -1211,4 +1225,3 @@ bool nouveau_wait_for_idle(struct drm_device *dev)return true; } -
drivers/gpu/drm/nouveau/nv04_pm.c +126 -0
129 lines not on this page · raw message
drivers/gpu/drm/nouveau/nv50_pm.c +172 -0
181 lines not on this page · raw message
Signature · 1 line
1.7.3.5
From 6e593a9751c065977ef20a3a36d004b7087c7ecf Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Sun, 23 Jan 2011 15:00:53 +0100
Subject: [PATCH 2/2] PM: Enable (unsafe) memory reclocking
This patch re-enable the memory reclocking (for those feeling like crashing their hardware).
--- drivers/gpu/drm/nouveau/nouveau_pm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/gpu/drm/nouveau/nouveau_pm.c +1 -1
@@ -85,7 +85,7 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl)nouveau_pm_clock_set (dev, perflvl,PLL_CORE , perflvl->core);nouveau_pm_clock_set (dev, perflvl,PLL_SHADER , perflvl->shader); -/*nouveau_pm_clock_set(dev, perflvl, PLL_MEMORY, perflvl->memory);*/ +nouveau_pm_clock_set (dev, perflvl,PLL_MEMORY , perflvl->memory);nouveau_pm_clock_set (dev, perflvl,PLL_UNK05 , perflvl->unk05);/* Wait for PLLs to stabilize */
Signature · 1 line
1.7.3.5
_______________________________________________
Nouveau mailing list [email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 4 lines · Martin Peres
Hi everyone,
I would like devs to test this patch on all their cards(<nvc0) and report bugs/instability. It shouldn't ever crash (but it may not always work and return
-EAGAIN).
Quoted 8 lines
I've attached a little bash script that you need to modify according to the available perf levels. Please launch it and play, watch videos or browse the internet.
Also, if you could look at the
hold_spinvariable and tell me how you would deal with that, it would be kind of you. The problem is that PGRAPH may take an awful lot of time to pause in certain conditions and holding the lock at this position isn't needed (as far as I can tell, the critical ressource isfifo_reassign).Martin
PS: I'll be out in an hour for a week so I may be slower to answer messages.
Patch 3: Don't forget to set the name of the boot perf level.
From a7bb68ea2f2aefffd6a1254658b0d424c45622b5 Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Thu, 3 Feb 2011 00:51:00 +0100
Subject: [PATCH 3/3] Don't forget to name the boot perflvl "boot"
--- drivers/gpu/drm/nouveau/nouveau_pm.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
drivers/gpu/drm/nouveau/nouveau_pm.c +1 -0
@@ -510,6 +510,7 @@ nouveau_pm_init(struct drm_device *dev)/* determine current ("boot") performance level */ ret =nouveau_pm_perflvl_get (dev, &pm->boot);if (ret ==0 ) { +strcpy (pm->boot.name,"boot" ); pm->cur = &pm->boot;nouveau_pm_perflvl_info (&pm->boot, info,sizeof (info));
Signature · 1 line
1.7.4
_______________________________________________
Nouveau mailing list [email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau
Hi everyone,
This is another update following to Ben's feedback.
Looking forward to some testing on your side (nv30 -> nva0).
Martin
From 84fd9da1e34c1bc863d0274b3928333e4db39a20 Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Wed, 19 Jan 2011 10:03:08 +0100
Subject: [PATCH 1/3] Add pm.(un)pause functions
With this patch, cards without internal memory (IONs and other IGPs) and cards with no memory reclock (a lot of nv40) should support safe reclocking while gaming.
This should work on all hardware(< nva3), report bugs if it doesn't.
--- drivers/gpu/drm/nouveau/nouveau_drv.h | 9 ++ drivers/gpu/drm/nouveau/nouveau_pm.c | 24 ++++- drivers/gpu/drm/nouveau/nouveau_pm.h | 4 + drivers/gpu/drm/nouveau/nouveau_reg.h | 3 + drivers/gpu/drm/nouveau/nouveau_state.c | 15 +++- drivers/gpu/drm/nouveau/nv04_pm.c | 126 ++++++++++++++++++++++ drivers/gpu/drm/nouveau/nv50_pm.c | 172 +++++++++++++++++++++++++++++++ 7 files changed, 350 insertions(+), 3 deletions(-)
drivers/gpu/drm/nouveau/nouveau_drv.h +9 -0
@@ -474,6 +474,10 @@ struct nouveau_pm_memtimings {int nr_timing; }; +struct nouveau_pm_pause_card_state { +u32 reg_c040; +}; +struct nouveau_pm_engine {struct nouveau_pm_voltage voltage;struct nouveau_pm_level perflvl[NOUVEAU_PM_MAX_LEVEL ];
@@ -488,6 +492,11 @@ struct nouveau_pm_engine {struct device *hwmon;struct notifier_block acpi_nb; +struct nouveau_pm_pause_card_state pause_state; + +int (*pause)(struct drm_device *); +void (*unpause)(struct drm_device *); +int (*clock_get)(struct drm_device *,u32 id);void *(*clock_pre)(struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);
drivers/gpu/drm/nouveau/nouveau_pm.c +22 -2
@@ -45,6 +45,10 @@ nouveau_pm_clock_set(struct drm_device *dev, struct nouveau_pm_level *perflvl,if (khz ==0 )return 0 ; +/* Do no reclock the memory if the frequencies didn't change */ +if (id ==PLL_MEMORY && pm->cur->memory == khz) +return 0 ; + pre_state = pm->clock_pre (dev, perflvl, id, khz);if (IS_ERR (pre_state))return PTR_ERR (pre_state);
@@ -60,10 +64,13 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl)struct drm_nouveau_private *dev_priv = dev->dev_private;struct nouveau_pm_engine *pm = &dev_priv->engine.pm;int ret; +uint64_t start =nv04_timer_read (dev);if (perflvl == pm->cur)return 0 ; +NV_INFO (dev,"setting performance level: %s\n" , perflvl->name); +if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set (dev, perflvl->voltage);if (ret) {
@@ -72,13 +79,27 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl) } } + ret = pm->pause (dev); +if (ret) +return ret; +nouveau_pm_clock_set (dev, perflvl,PLL_CORE , perflvl->core);nouveau_pm_clock_set (dev, perflvl,PLL_SHADER , perflvl->shader);nouveau_pm_clock_set (dev, perflvl,PLL_MEMORY , perflvl->memory);nouveau_pm_clock_set (dev, perflvl,PLL_UNK05 , perflvl->unk05); +/* Wait for PLLs to stabilize */ +udelay (100 ); + pm->cur = perflvl; -return 0 ; + ret =0 ; + + pm->unpause (dev); + +NV_DEBUG (dev,"Reclocking took %lluµs\n" , + (nv04_timer_read (dev) - start)/1000 ); + +return ret; } static int
@@ -112,7 +133,6 @@ nouveau_pm_profile_set(struct drm_device *dev, const char *profile)return -EINVAL ; } -NV_INFO (dev,"setting performance level: %s\n" , profile);return nouveau_pm_perflvl_set (dev, perflvl); }
drivers/gpu/drm/nouveau/nouveau_pm.h +4 -0
@@ -51,12 +51,16 @@ int nv04_pm_clock_get(struct drm_device *, u32 id);void *nv04_pm_clock_pre (struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);void nv04_pm_clock_set (struct drm_device *,void *); +int nv04_pm_pause (struct drm_device *dev); +void nv04_pm_unpause (struct drm_device *dev);/* nv50_pm.c */ int nv50_pm_clock_get (struct drm_device *,u32 id);void *nv50_pm_clock_pre (struct drm_device *,struct nouveau_pm_level *,u32 id,int khz);void nv50_pm_clock_set (struct drm_device *,void *); +int nv50_pm_pause (struct drm_device *dev); +void nv50_pm_unpause (struct drm_device *dev);/* nva3_pm.c */ int nva3_pm_clock_get (struct drm_device *,u32 id);
drivers/gpu/drm/nouveau/nouveau_reg.h +3 -0
@@ -695,8 +695,11 @@#define NV50_PROM__ESIZE 0x10000#define NV50_PGRAPH 0x00400000 +#define NV50_PGRAPH_CONTROL 0x00400500 +#define NV50_PGRAPH_FIFO_STATUS 0x00400504#define NV50_PGRAPH__LEN 0x1#define NV50_PGRAPH__ESIZE 0x10000 +#define NV50_PFIFO_FREEZE 0x2504#define NV50_PDISPLAY 0x00610000#define NV50_PDISPLAY_OBJECTS 0x00610010
drivers/gpu/drm/nouveau/nouveau_state.c +14 -1
@@ -98,6 +98,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -157,6 +159,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -216,6 +220,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_get = nv04_pm_clock_get; engine->pm.clock_pre = nv04_pm_clock_pre; engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -277,6 +283,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.clock_set = nv04_pm_clock_set; engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -340,6 +348,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; engine->pm.temp_get = nv40_temp_get; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nouveau_mem_detect;
@@ -432,6 +442,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) } engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; + engine->pm.pause = nv50_pm_pause; + engine->pm.unpause = nv50_pm_unpause;if (dev_priv->chipset >=0x84 ) engine->pm.temp_get = nv84_temp_get;else
@@ -507,6 +519,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) engine->gpio.irq_register = nv50_gpio_irq_register; engine->gpio.irq_unregister = nv50_gpio_irq_unregister; engine->gpio.irq_enable = nv50_gpio_irq_enable; + engine->pm.pause = nv04_pm_pause; + engine->pm.unpause = nv04_pm_unpause; engine->crypt.init = nouveau_stub_init; engine->crypt.takedown = nouveau_stub_takedown; engine->vram.init = nvc0_vram_init;
@@ -1169,4 +1183,3 @@ bool nouveau_wait_for_idle(struct drm_device *dev)return true; } -
drivers/gpu/drm/nouveau/nv04_pm.c +126 -0
129 lines not on this page · raw message
drivers/gpu/drm/nouveau/nv50_pm.c +172 -0
181 lines not on this page · raw message
Signature · 1 line
1.7.4.1
From de7bd5e2a8cdbc4c033ed04b907c9e6f24fe1d5d Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Thu, 3 Feb 2011 00:51:00 +0100
Subject: [PATCH 2/3] Don't forget to name the boot perflvl "boot"
--- drivers/gpu/drm/nouveau/nouveau_pm.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
drivers/gpu/drm/nouveau/nouveau_pm.c +1 -0
@@ -510,6 +510,7 @@ nouveau_pm_init(struct drm_device *dev)/* determine current ("boot") performance level */ ret =nouveau_pm_perflvl_get (dev, &pm->boot);if (ret ==0 ) { +strcpy (pm->boot.name,"boot" ); pm->cur = &pm->boot;nouveau_pm_perflvl_info (&pm->boot, info,sizeof (info));
Signature · 1 line
1.7.4.1
From c32d7435fa4d0a3107a1d3b63717435d0fca1e2d Mon Sep 17 00:00:00 2001
From: Martin Peres <[email protected]>
Date: Mon, 7 Feb 2011 00:18:26 +0100
Subject: [PATCH 3/3] Reclock memory using PMS on nv50
--- drivers/gpu/drm/nouveau/nouveau_pms.h | 98 +++++++++++++++++++++++++ drivers/gpu/drm/nouveau/nv50_pm.c | 127 +++++++++++++++++++++++++++++---- 2 files changed, 212 insertions(+), 13 deletions(-) create mode 100644 drivers/gpu/drm/nouveau/nouveau_pms.h
drivers/gpu/drm/nouveau/nouveau_pms.h new file +98 -0
99 lines not on this page · raw message
drivers/gpu/drm/nouveau/nv50_pm.c +115 -14
178 lines not on this page · raw message
Signature · 1 line
1.7.4.1
_______________________________________________
Nouveau mailing list [email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau