diff options
author | Roy Spliet <rspliet@eclipso.eu> | 2015-09-29 19:23:46 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-11-03 00:02:18 -0500 |
commit | ef6e8f4c7fd017ee66fc4b0fd3cfeae48c2e26d5 (patch) | |
tree | b39648ae1ade0e4f067973da04d6d3d119cbb958 | |
parent | e0a37f85fc95e3f2550446316bc4a27d00d75993 (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.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c | 18 |
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 |