aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Spliet <rspliet@eclipso.eu>2015-09-29 19:23:46 -0400
committerBen Skeggs <bskeggs@redhat.com>2015-11-03 00:02:18 -0500
commitef6e8f4c7fd017ee66fc4b0fd3cfeae48c2e26d5 (patch)
treeb39648ae1ade0e4f067973da04d6d3d119cbb958
parente0a37f85fc95e3f2550446316bc4a27d00d75993 (diff)
drm/nouveau/fb/ramgt215: Change FBVDD/Q when BIOS asks for it
Signed-off-by: Roy Spliet <rspliet@eclipso.eu> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h1
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c1
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c18
3 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
index dd48db7fee06..dca6c060a24f 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
@@ -39,6 +39,7 @@ struct nvbios_ramcfg {
39 unsigned ramcfg_timing; 39 unsigned ramcfg_timing;
40 unsigned ramcfg_DLLoff; 40 unsigned ramcfg_DLLoff;
41 unsigned ramcfg_RON; 41 unsigned ramcfg_RON;
42 unsigned ramcfg_FBVDDQ;
42 union { 43 union {
43 struct { 44 struct {
44 unsigned ramcfg_00_03_01:1; 45 unsigned ramcfg_00_03_01:1;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c
index 3bbb1a76c378..74a4ab5b6ad1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c
@@ -205,6 +205,7 @@ nvbios_rammapSp(struct nvkm_bios *bios, u32 data,
205 p->ramcfg_DLLoff = (nvbios_rd08(bios, data + 0x02) & 0x40) >> 6; 205 p->ramcfg_DLLoff = (nvbios_rd08(bios, data + 0x02) & 0x40) >> 6;
206 p->ramcfg_10_03_0f = (nvbios_rd08(bios, data + 0x03) & 0x0f) >> 0; 206 p->ramcfg_10_03_0f = (nvbios_rd08(bios, data + 0x03) & 0x0f) >> 0;
207 p->ramcfg_10_04_01 = (nvbios_rd08(bios, data + 0x04) & 0x01) >> 0; 207 p->ramcfg_10_04_01 = (nvbios_rd08(bios, data + 0x04) & 0x01) >> 0;
208 p->ramcfg_FBVDDQ = (nvbios_rd08(bios, data + 0x04) & 0x08) >> 3;
208 p->ramcfg_10_05 = (nvbios_rd08(bios, data + 0x05) & 0xff) >> 0; 209 p->ramcfg_10_05 = (nvbios_rd08(bios, data + 0x05) & 0xff) >> 0;
209 p->ramcfg_10_06 = (nvbios_rd08(bios, data + 0x06) & 0xff) >> 0; 210 p->ramcfg_10_06 = (nvbios_rd08(bios, data + 0x06) & 0xff) >> 0;
210 p->ramcfg_10_07 = (nvbios_rd08(bios, data + 0x07) & 0xff) >> 0; 211 p->ramcfg_10_07 = (nvbios_rd08(bios, data + 0x07) & 0xff) >> 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
index 0c28f38cb8b3..8d81bf1e9a55 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
@@ -498,6 +498,7 @@ gt215_ram_calc(struct nvkm_ram *base, u32 freq)
498 struct nvkm_device *device = subdev->device; 498 struct nvkm_device *device = subdev->device;
499 struct nvkm_bios *bios = device->bios; 499 struct nvkm_bios *bios = device->bios;
500 struct gt215_clk_info mclk; 500 struct gt215_clk_info mclk;
501 struct nvkm_gpio *gpio = device->gpio;
501 struct nvkm_ram_data *next; 502 struct nvkm_ram_data *next;
502 u8 ver, hdr, cnt, len, strap; 503 u8 ver, hdr, cnt, len, strap;
503 u32 data; 504 u32 data;
@@ -656,6 +657,23 @@ gt215_ram_calc(struct nvkm_ram *base, u32 freq)
656 if (device->chipset == 0xa3 && freq <= 500000) 657 if (device->chipset == 0xa3 && freq <= 500000)
657 ram_mask(fuc, 0x100700, 0x00000006, 0x00000006); 658 ram_mask(fuc, 0x100700, 0x00000006, 0x00000006);
658 659
660 /* Alter FBVDD/Q, apparently must be done with PLL disabled, thus
661 * set it to bypass */
662 if (nvkm_gpio_get(gpio, 0, 0x18, DCB_GPIO_UNUSED) ==
663 next->bios.ramcfg_FBVDDQ) {
664 data = ram_rd32(fuc, 0x004000) & 0x9;
665
666 if (data == 0x1)
667 ram_mask(fuc, 0x004000, 0x8, 0x8);
668 if (data & 0x1)
669 ram_mask(fuc, 0x004000, 0x1, 0x0);
670
671 gt215_ram_gpio(fuc, 0x18, !next->bios.ramcfg_FBVDDQ);
672
673 if (data & 0x1)
674 ram_mask(fuc, 0x004000, 0x1, 0x1);
675 }
676
659 /* Fiddle with clocks */ 677 /* Fiddle with clocks */
660 /* There's 4 scenario's 678 /* There's 4 scenario's
661 * pll->pll: first switch to a 324MHz clock, set up new PLL, switch 679 * pll->pll: first switch to a 324MHz clock, set up new PLL, switch