From c39ccbb0e9137648a30e326d820ecbd66e0d8c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= Date: Thu, 9 Jan 2014 02:30:57 +0100 Subject: [PATCH] nva: Use the common pmc_id parsing function. --- hwtest/hwtest.c | 4 ++-- hwtest/nv10_tile.c | 12 ++++++------ hwtest/vram.c | 12 ++++++------ include/nva.h | 6 ++---- nva/CMakeLists.txt | 2 +- nva/evotiming.c | 6 +++--- nva/nva.c | 38 ++---------------------------------- nva/nvacounter.c | 8 ++++---- nva/nvaevo.c | 6 +++--- nva/nvafakebios.c | 8 ++++---- nva/nvagetbios.c | 22 ++++++++++----------- nva/nvalist.c | 4 ++-- nva/nvapms.c | 2 +- nva/nvapy.pyx | 19 +++++++++++------- nva/nvaspyi2c.c | 4 ++-- nva/nvatiming.c | 44 +++++++++++++++++++++--------------------- nva/regspace.c | 48 +++++++++++++++++++++++----------------------- nva/set_timings.c | 6 +++--- nva/vbios_mgmt.c | 8 ++++---- vdpow/vdpow.c | 2 +- 20 files changed, 115 insertions(+), 146 deletions(-) diff --git a/hwtest/hwtest.c b/hwtest/hwtest.c index 9b34aa94..f5e34bfc 100644 --- a/hwtest/hwtest.c +++ b/hwtest/hwtest.c @@ -79,8 +79,8 @@ int main(int argc, char **argv) { fprintf (stderr, "No cards found.\n"); return 1; } - ctx->chipset = nva_cards[ctx->cnum].chipset; - ctx->card_type = nva_cards[ctx->cnum].card_type; + ctx->chipset = nva_cards[ctx->cnum].chipset.chipset; + ctx->card_type = nva_cards[ctx->cnum].chipset.card_type; if (pci_device_has_kernel_driver(nva_cards[ctx->cnum].pci)) { if (force) { fprintf(stderr, "WARNING: Kernel driver in use.\n"); diff --git a/hwtest/nv10_tile.c b/hwtest/nv10_tile.c index b26ffa09..015bbcb5 100644 --- a/hwtest/nv10_tile.c +++ b/hwtest/nv10_tile.c @@ -351,24 +351,24 @@ static int test_comp_size(struct hwtest_ctx *ctx) { } static uint32_t comp_seek(int cnum, int part, int addr) { - if (nva_cards[cnum].chipset == 0x20) { + if (nva_cards[cnum].chipset.chipset == 0x20) { nva_wr32(cnum, 0x1000f0, 0x1300000 | (part << 16) | (addr & 0x1fc0)); return 0x100100 + (addr & 0x3c); - } else if (nva_cards[cnum].chipset < 0x30) { + } else if (nva_cards[cnum].chipset.chipset < 0x30) { nva_wr32(cnum, 0x1000f0, 0x2380000 | ((addr << 6) & 0x40000) | (part << 16) | (addr & 0xfc0)); return 0x100100 + (addr & 0x3c); - } else if (nva_cards[cnum].chipset < 0x35) { + } else if (nva_cards[cnum].chipset.chipset < 0x35) { nva_wr32(cnum, 0x1000f0, 0x2380000 | (part << 16) | (addr & 0x7fc0)); return 0x100100 + (addr & 0x3c); - } else if (nva_cards[cnum].chipset < 0x36) { + } else if (nva_cards[cnum].chipset.chipset < 0x36) { nva_wr32(cnum, 0x1000f0, 0x2380000 | (addr & 4) << 16 | (part << 16) | (addr >> 1 & 0x7fc0)); return 0x100100 + (addr >> 1 & 0x3c); - } else if (nva_cards[cnum].chipset < 0x40) { + } else if (nva_cards[cnum].chipset.chipset < 0x40) { nva_wr32(cnum, 0x1000f0, 0x2380000 | (addr & 0xc) << 15 | (part << 16) | (addr >> 2 & 0x7fc0)); return 0x100100 + (addr >> 2 & 0x3c); @@ -396,7 +396,7 @@ void comp_wr32(int cnum, int part, int addr, uint32_t v) { void clear_comp(int cnum) { uint32_t size = (nva_rd32(cnum, 0x100320) + 1) / 8; int i, j; - for (i = 0; i < get_maxparts(nva_cards[cnum].chipset); i++) { + for (i = 0; i < get_maxparts(nva_cards[cnum].chipset.chipset); i++) { for (j = 0; j < size; j += 0x4) comp_wr32(cnum, i, j, 0); } diff --git a/hwtest/vram.c b/hwtest/vram.c index 48ebbc34..a00788a0 100644 --- a/hwtest/vram.c +++ b/hwtest/vram.c @@ -26,11 +26,11 @@ #include "nva.h" uint32_t vram_rd32(int card, uint64_t addr) { - if (nva_cards[card].card_type < 3) { + if (nva_cards[card].chipset.card_type < 3) { return nva_rd32(card, 0x1000000 + addr); - } else if (nva_cards[card].card_type < 0x30) { + } else if (nva_cards[card].chipset.card_type < 0x30) { return nva_grd32(nva_cards[card].bar1, addr); - } else if (nva_cards[card].card_type < 0x50) { + } else if (nva_cards[card].chipset.card_type < 0x50) { nva_wr32(card, 0x1570, addr); return nva_rd32(card, 0x1574); } else { @@ -43,11 +43,11 @@ uint32_t vram_rd32(int card, uint64_t addr) { } void vram_wr32(int card, uint64_t addr, uint32_t val) { - if (nva_cards[card].card_type < 3) { + if (nva_cards[card].chipset.card_type < 3) { nva_wr32(card, 0x1000000 + addr, val); - } else if (nva_cards[card].card_type < 0x30) { + } else if (nva_cards[card].chipset.card_type < 0x30) { nva_gwr32(nva_cards[card].bar1, addr, val); - } else if (nva_cards[card].card_type < 0x50) { + } else if (nva_cards[card].chipset.card_type < 0x50) { nva_wr32(card, 0x1570, addr); nva_wr32(card, 0x1574, val); } else { diff --git a/include/nva.h b/include/nva.h index 84f51707..d42e60b4 100644 --- a/include/nva.h +++ b/include/nva.h @@ -26,13 +26,11 @@ #define NVA_H #include #include +#include "nvhw.h" struct nva_card { struct pci_device *pci; - uint32_t boot0; - int chipset; - int card_type; - int is_nv03t; + struct chipset_info chipset; void *bar0; size_t bar0len; int hasbar1; diff --git a/nva/CMakeLists.txt b/nva/CMakeLists.txt index bbbf57b8..21d52d80 100644 --- a/nva/CMakeLists.txt +++ b/nva/CMakeLists.txt @@ -17,7 +17,7 @@ if (NOT DISABLE_NVA) link_directories(${PC_PCIACCESS_LIBRARY_DIRS}) add_library(nva nva.c regspace.c) - target_link_libraries(nva ${PC_PCIACCESS_LIBRARIES}) + target_link_libraries(nva nvhw ${PC_PCIACCESS_LIBRARIES}) SET(NVA_PROGS nvalist diff --git a/nva/evotiming.c b/nva/evotiming.c index aeb24251..a3bb93ca 100644 --- a/nva/evotiming.c +++ b/nva/evotiming.c @@ -45,7 +45,7 @@ int evosend (int cnum, int c, int m, int d) { uint32_t ctrl; - if (nva_cards[cnum].chipset >= 0xd0) { + if (nva_cards[cnum].chipset.chipset >= 0xd0) { ctrl = nva_rd32(cnum, 0x610700 + (c * 8)); nva_wr32(cnum, 0x610700 + (c * 8), ctrl | 1); nva_wr32(cnum, 0x610704 + (c * 8), d); @@ -53,8 +53,8 @@ int evosend (int cnum, int c, int m, int d) while (nva_rd32(cnum, 0x610700 + (c * 8)) & 0x80000000); nva_wr32(cnum, 0x610700 + (c * 8), ctrl); } else - if (nva_cards[cnum].chipset == 0x50 || - nva_cards[cnum].chipset >= 0x84) { + if (nva_cards[cnum].chipset.chipset == 0x50 || + nva_cards[cnum].chipset.chipset >= 0x84) { ctrl = nva_rd32(cnum, 0x610300 + (c * 8)); nva_wr32(cnum, 0x610300 + (c * 8), ctrl | 1); nva_wr32(cnum, 0x610304 + (c * 8), d); diff --git a/nva/nva.c b/nva/nva.c index 0a47ec8b..a01807cb 100644 --- a/nva/nva.c +++ b/nva/nva.c @@ -134,42 +134,8 @@ int nva_init() { nva_cards[i].bar2 = 0; } } - nva_cards[i].boot0 = nva_rd32(i, 0); - nva_cards[i].chipset = nva_cards[i].boot0 >> 20 & 0xff; - if (nva_cards[i].chipset < 0x10) { - if ((nva_cards[i].boot0 & 0xfff00000) == 0x10800000) { - nva_cards[i].chipset = 0x108; - } else if (nva_cards[i].boot0 & 0xf000) { - if (nva_cards[i].boot0 & 0xf00000) - nva_cards[i].chipset = 5; - else - nva_cards[i].chipset = 4; - } else { - nva_cards[i].chipset = nva_cards[i].boot0 >> 16 & 0xf; - if ((nva_cards[i].boot0 & 0xff) >= 0x20) - nva_cards[i].is_nv03t = 1; - } - } - if (dev->vendor_id == 0x104a && dev->device_id == 0x0009) - nva_cards[i].chipset = 0x01; - - if (nva_cards[i].chipset < 0x04) - nva_cards[i].card_type = nva_cards[i].chipset; - else if (nva_cards[i].chipset < 0x10) - nva_cards[i].card_type = 0x04; - else if (nva_cards[i].chipset < 0x20) - nva_cards[i].card_type = 0x10; - else if (nva_cards[i].chipset < 0x30) - nva_cards[i].card_type = 0x20; - else if (nva_cards[i].chipset < 0x40) - nva_cards[i].card_type = 0x30; - else if (nva_cards[i].chipset < 0x50 || - (nva_cards[i].chipset & 0xf0) == 0x60) - nva_cards[i].card_type = 0x40; - else if (nva_cards[i].chipset < 0xc0) - nva_cards[i].card_type = 0x50; - else - nva_cards[i].card_type = 0xc0; + uint32_t pmc_id = nva_rd32(i, 0); + parse_pmc_id(pmc_id, &nva_cards[i].chipset); } return (nva_cardsnum == 0); } diff --git a/nva/nvacounter.c b/nva/nvacounter.c index 4fa954d5..b31032fb 100644 --- a/nva/nvacounter.c +++ b/nva/nvacounter.c @@ -566,18 +566,18 @@ int main(int argc, char **argv) return 1; } - if (nva_cards[cnum].chipset < 0x10 || - nva_cards[cnum].chipset >= 0xc0) + if (nva_cards[cnum].chipset.chipset < 0x10 || + nva_cards[cnum].chipset.chipset >= 0xc0) { fprintf(stderr, "The chipset nv%x isn't currently supported\n", - nva_cards[cnum].chipset); + nva_cards[cnum].chipset.chipset); return 1; } /* Init */ nva_wr32(cnum, 0x200, 0xffffffff); - printf("Chipset nv%x:\n\n", nva_cards[cnum].chipset); + printf("Chipset nv%x:\n\n", nva_cards[cnum].chipset.chipset); poll_signals(cnum, signals_ref); find_counter_noise(cnum); diff --git a/nva/nvaevo.c b/nva/nvaevo.c index 311cdf34..d819fed4 100644 --- a/nva/nvaevo.c +++ b/nva/nvaevo.c @@ -58,7 +58,7 @@ int main(int argc, char **argv) { sscanf (argv[optind + 1], "%x", &m); sscanf (argv[optind + 2], "%x", &d); - if (nva_cards[cnum].chipset >= 0xd0) { + if (nva_cards[cnum].chipset.chipset >= 0xd0) { ctrl = nva_rd32(cnum, 0x610700 + (c * 8)); nva_wr32(cnum, 0x610700 + (c * 8), ctrl | 1); nva_wr32(cnum, 0x610704 + (c * 8), d); @@ -66,8 +66,8 @@ int main(int argc, char **argv) { while (nva_rd32(cnum, 0x610700 + (c * 8)) & 0x80000000); nva_wr32(cnum, 0x610700 + (c * 8), ctrl); } else - if (nva_cards[cnum].chipset == 0x50 || - nva_cards[cnum].chipset >= 0x84) { + if (nva_cards[cnum].chipset.chipset == 0x50 || + nva_cards[cnum].chipset.chipset >= 0x84) { ctrl = nva_rd32(cnum, 0x610300 + (c * 8)); nva_wr32(cnum, 0x610300 + (c * 8), ctrl | 1); nva_wr32(cnum, 0x610304 + (c * 8), d); diff --git a/nva/nvafakebios.c b/nva/nvafakebios.c index 1cc85427..df35dbaa 100644 --- a/nva/nvafakebios.c +++ b/nva/nvafakebios.c @@ -66,7 +66,7 @@ int vbios_upload_pramin(int cnum, uint8_t *vbios, int length) uint32_t ret = EUNK; int i = 0; - if (nva_cards[cnum].chipset < 0x04) { + if (nva_cards[cnum].chipset.chipset < 0x04) { return ECARD; } @@ -74,9 +74,9 @@ int vbios_upload_pramin(int cnum, uint8_t *vbios, int length) chksum(vbios, length); fprintf(stderr, "Attempt to upload the vbios to card %i (nv%02x) using PRAMIN\n", - cnum, nva_cards[cnum].chipset); + cnum, nva_cards[cnum].chipset.chipset); - if (nva_cards[cnum].card_type >= 0x50) { + if (nva_cards[cnum].chipset.card_type >= 0x50) { uint64_t vbios_vram = (uint64_t)(nva_rd32(cnum, 0x619f04) & ~0xff) << 8; if (!vbios_vram) @@ -93,7 +93,7 @@ int vbios_upload_pramin(int cnum, uint8_t *vbios, int length) ret = EOK; - if (nva_cards[cnum].card_type >= 0x50) + if (nva_cards[cnum].chipset.card_type >= 0x50) nva_wr32(cnum, 0x1700, old_bar0_pramin); return ret; diff --git a/nva/nvagetbios.c b/nva/nvagetbios.c index 692d1821..257edaa3 100644 --- a/nva/nvagetbios.c +++ b/nva/nvagetbios.c @@ -124,20 +124,20 @@ int vbios_extract_prom(int cnum, uint8_t *vbios, int *length) int i; fprintf(stderr, "Attempt to extract the vbios from card %i (nv%02x) using PROM\n", - cnum, nva_cards[cnum].chipset); + cnum, nva_cards[cnum].chipset.chipset); int32_t prom_offset; int32_t prom_size; int32_t pbus_offset = 0; - if (nva_cards[cnum].chipset < 0x03) { + if (nva_cards[cnum].chipset.chipset < 0x03) { prom_offset = 0x610000; prom_size = NV01_PROM_SIZE; - } else if (nva_cards[cnum].chipset < 0x04) { + } else if (nva_cards[cnum].chipset.chipset < 0x04) { prom_offset = 0x110000; prom_size = NV03_PROM_SIZE; } else { - if (nva_cards[cnum].chipset < 0x40) + if (nva_cards[cnum].chipset.chipset < 0x40) pbus_offset = 0x1800; else pbus_offset = 0x88000; @@ -156,7 +156,7 @@ int vbios_extract_prom(int cnum, uint8_t *vbios, int *length) vbios[i] = nva_rd32(cnum, prom_offset + (i & ~3)) >> (i & 3) * 8; ret = nv_ckbios(vbios); - if (nva_cards[cnum].chipset >= 0x04) { + if (nva_cards[cnum].chipset.chipset >= 0x04) { nva_wr32(cnum, pbus_offset + 0x50, pci_cfg_50); } *length = prom_size; @@ -170,16 +170,16 @@ int vbios_extract_pramin(int cnum, uint8_t *vbios, int *length) uint32_t ret = EUNK; int i; - if (nva_cards[cnum].chipset < 0x04) { + if (nva_cards[cnum].chipset.chipset < 0x04) { fprintf(stderr, "Card %i (nv%02x) does not support PRAMIN!\n", - cnum, nva_cards[cnum].chipset); + cnum, nva_cards[cnum].chipset.chipset); return ECARD; } fprintf(stderr, "Attempt to extract the vbios from card %i (nv%02x) using PRAMIN\n", - cnum, nva_cards[cnum].chipset); + cnum, nva_cards[cnum].chipset.chipset); - if (nva_cards[cnum].card_type >= 0x50) { + if (nva_cards[cnum].chipset.card_type >= 0x50) { uint64_t vbios_vram = (uint64_t)(nva_rd32(cnum, 0x619f04) & ~0xff) << 8; if (!vbios_vram) @@ -196,7 +196,7 @@ int vbios_extract_pramin(int cnum, uint8_t *vbios, int *length) vbios[i] = nva_rd8(cnum, NV_PRAMIN_OFFSET + i); ret = nv_ckbios(vbios); - if (nva_cards[cnum].card_type >= 0x50) + if (nva_cards[cnum].chipset.card_type >= 0x50) nva_wr32(cnum, 0x1700, old_bar0_pramin); return ret; @@ -245,7 +245,7 @@ int main(int argc, char **argv) { } if (source == NULL) { - if (nva_cards[cnum].chipset < 4) + if (nva_cards[cnum].chipset.chipset < 4) source = "PROM"; else source = "PRAMIN"; diff --git a/nva/nvalist.c b/nva/nvalist.c index 1f79c2c9..0d51d69b 100644 --- a/nva/nvalist.c +++ b/nva/nvalist.c @@ -33,8 +33,8 @@ int main() { } int i; for (i = 0; i < nva_cardsnum; i++) - printf ("%d: %04x:%02x:%02x.%x NV%02X%s %08x\n", i, + printf ("%d: %04x:%02x:%02x.%x %s %08x\n", i, nva_cards[i].pci->domain, nva_cards[i].pci->bus, nva_cards[i].pci->dev, nva_cards[i].pci->func, - nva_cards[i].chipset, (nva_cards[i].is_nv03t?"T":""), nva_cards[i].boot0); + nva_cards[i].chipset.name, nva_cards[i].chipset.pmc_id); return 0; } diff --git a/nva/nvapms.c b/nva/nvapms.c index 1b6b26e7..a27d9626 100644 --- a/nva/nvapms.c +++ b/nva/nvapms.c @@ -78,7 +78,7 @@ pms_launch(int cnum, struct pms_ucode* pms, ptime_t *wall_time) struct timeval wall_start, wall_end; int i; - if (nva_cards[cnum].chipset < 0x90) { + if (nva_cards[cnum].chipset.chipset < 0x90) { pms_data = 0x001400; pms_kick = 0x00000003; } else { diff --git a/nva/nvapy.pyx b/nva/nvapy.pyx index d0f4a50a..6deab346 100644 --- a/nva/nvapy.pyx +++ b/nva/nvapy.pyx @@ -1,9 +1,13 @@ -cdef extern from "nva.h": - struct nva_card: - unsigned boot0 +cdef extern from "nvhw.h": + struct chipset_info: + unsigned pmc_id int chipset int card_type int is_nv03t + +cdef extern from "nva.h": + struct nva_card: + chipset_info chipset void *bar0 void *bar1 void *bar2 @@ -62,10 +66,11 @@ cdef NvaCard_ nva_wrapcard(nva_card *ccard): card.bar0 = nva_wrapbar(ccard.bar0, ccard.bar0len) card.bar1 = nva_wrapbar(ccard.bar1, ccard.bar1len) if ccard.hasbar1 else None card.bar2 = nva_wrapbar(ccard.bar2, ccard.bar2len) if ccard.hasbar2 else None - card.chipset = ccard.chipset - card.boot0 = ccard.boot0 - card.card_type = ccard.card_type - card.is_nv03t = ccard.is_nv03t + # XXX clean up? + card.chipset = ccard.chipset.chipset + card.pmc_id = ccard.chipset.pmc_id + card.card_type = ccard.chipset.card_type + card.is_nv03t = ccard.chipset.is_nv03t return card if nva_init(): diff --git a/nva/nvaspyi2c.c b/nva/nvaspyi2c.c index c206bebc..ed9f0b50 100644 --- a/nva/nvaspyi2c.c +++ b/nva/nvaspyi2c.c @@ -252,10 +252,10 @@ int main(int argc, char **argv) } sscanf (argv[optind], "%i", &port); - if (nva_cards[cnum].chipset < 0xd9 && port >= 4) { + if (nva_cards[cnum].chipset.chipset < 0xd9 && port >= 4) { printf("Invalid port number: This chipset has 4 ports\n"); return 1; - } else if (nva_cards[cnum].chipset >= 0xd9 && port >= 10) { + } else if (nva_cards[cnum].chipset.chipset >= 0xd9 && port >= 10) { printf("Invalid port number: NVD9+ chipsets have 10 ports\n"); return 1; } diff --git a/nva/nvatiming.c b/nva/nvatiming.c index 3f8f7561..bf5dd039 100644 --- a/nva/nvatiming.c +++ b/nva/nvatiming.c @@ -112,7 +112,7 @@ void time_pcounter_nv10(unsigned int cnum) nva_wr32(cnum, 0xa624, 0); nva_wr32(cnum, 0xa628, 0); nva_wr32(cnum, 0xa62c, 0); - if (nva_cards[cnum].card_type >= 0x20) { + if (nva_cards[cnum].chipset.card_type >= 0x20) { nva_wr32(cnum, 0xa504, 0); nva_wr32(cnum, 0xa50c, 0xffff); nva_wr32(cnum, 0xa514, 0xffff); @@ -126,7 +126,7 @@ void time_pcounter_nv10(unsigned int cnum) nva_wr32(cnum, 0xa404, 0xffff); sleep(1); printf ("Set 0: %d Hz\n", nva_rd32(cnum, 0xa608)); - if (nva_cards[cnum].card_type >= 0x20) { + if (nva_cards[cnum].chipset.card_type >= 0x20) { printf ("Set 1: %u Hz\n", nva_rd32(cnum, 0xa708)); } } @@ -240,9 +240,9 @@ void time_pgraph_dispatch_clock(unsigned int card) ptime_t t_start, t_end; u32 reg; - if (nva_cards[card].card_type == 0x50) + if (nva_cards[card].chipset.card_type == 0x50) reg = 0x4008f8; - else if (nva_cards[card].card_type == 0xc0) + else if (nva_cards[card].chipset.card_type == 0xc0) reg = 0x4040f4; else { printf("pgraph_dispatch_clock is only available on nv50+ chipsets\n"); @@ -288,7 +288,7 @@ u64 crystal_type(unsigned int card) { unsigned int crystal, chipset; - chipset = nva_cards[card].chipset; + chipset = nva_cards[card].chipset.chipset; crystal = (nva_rd32(card, 0x101000) & 0x40) >> 6; @@ -333,7 +333,7 @@ void time_ptimer(unsigned int card) printf("PTIMER's clock source: 1s = %llu cycles --> frequency = %f MHz\n", ptimer_default, ptimer_default/1000000.0); - if (nva_cards[card].card_type >= 0x40) { + if (nva_cards[card].chipset.card_type >= 0x40) { /* Calibrate to max frequency */ nva_wr32(card, 0x9200, 0x1); nva_wr32(card, 0x9210, 0x1); @@ -524,7 +524,7 @@ int main(int argc, char **argv) if (print_filter & NVATIMING_PRINT_CRYSTAL) printf("Using card nv%x, crystal frequency = %f MHz\n\n", - card->chipset, crystal_type(cnum)/1000000.0); + card->chipset.chipset, crystal_type(cnum)/1000000.0); if (print_filter & NVATIMING_PRINT_PTIMER) { time_ptimer(cnum); @@ -536,28 +536,28 @@ int main(int argc, char **argv) printf("\n"); } - if (card->card_type >= 0x50 && print_filter & NVATIMING_PRINT_PWM) { + if (card->chipset.card_type >= 0x50 && print_filter & NVATIMING_PRINT_PWM) { time_pwm_nv50(cnum); printf("\n"); } if (print_filter & NVATIMING_PRINT_COUNTERS) { - if (card->card_type == 0xc0) { + if (card->chipset.card_type == 0xc0) { time_pcounter_nvc0(cnum); printf("\n"); - } else if (card->chipset >= 0x84){ + } else if (card->chipset.chipset >= 0x84){ time_pcounter_nv84(cnum); printf("\n"); - } else if (card->chipset >= 0x40) { + } else if (card->chipset.chipset >= 0x40) { time_pcounter_nv40(cnum); printf("\n"); - } else if (card->chipset >= 0x10) { + } else if (card->chipset.chipset >= 0x10) { time_pcounter_nv10(cnum); printf("\n"); } } - if (card->card_type >= 0x50 && print_filter & NVATIMING_PRINT_DISPLAY_CLK) { + if (card->chipset.card_type >= 0x50 && print_filter & NVATIMING_PRINT_DISPLAY_CLK) { uint32_t t0 = nva_rd32(cnum, 0x610018); sleep(1); uint32_t t1 = nva_rd32(cnum, 0x610018); @@ -565,7 +565,7 @@ int main(int argc, char **argv) printf("\n"); } - if (card->chipset < 0x98 || card->chipset == 0xa0) { + if (card->chipset.chipset < 0x98 || card->chipset.chipset == 0xa0) { /* restore PMC enable */ nva_wr32(cnum, 0x200, pmc_enable); @@ -586,7 +586,7 @@ int main(int argc, char **argv) time_fuc_engine_watchdog(cnum, "PPPP", 0x86000); printf("\n"); - if (card->chipset == 0x98 || card->chipset == 0xaa || card->chipset == 0xac) { + if (card->chipset.chipset == 0x98 || card->chipset.chipset == 0xaa || card->chipset.chipset == 0xac) { time_fuc_engine_periodic(cnum, "PCRYPT3", 0x87000); time_fuc_engine_watchdog(cnum, "PCRYPT3", 0x87000); printf("\n"); @@ -594,7 +594,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PCOPY (chipset < nva3 only)\n\n"); } - if (card->chipset >= 0xa3 && card->chipset != 0xaa && card->chipset != 0xac) { + if (card->chipset.chipset >= 0xa3 && card->chipset.chipset != 0xaa && card->chipset.chipset != 0xac) { time_fuc_engine_periodic(cnum, "PCOPY[0]", 0x104000); time_fuc_engine_watchdog(cnum, "PCOPY[0]", 0x104000); printf("\n"); @@ -602,7 +602,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PCOPY[0] (nva3+ only)\n\n"); } - if (card->chipset >= 0xc0 && card->chipset < 0xd9) { + if (card->chipset.chipset >= 0xc0 && card->chipset.chipset < 0xd9) { time_fuc_engine_periodic(cnum, "PCOPY[1]", 0x105000); time_fuc_engine_watchdog(cnum, "PCOPY[1]", 0x105000); printf("\n"); @@ -610,7 +610,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PCOPY[0] (nva3+ only)\n\n"); } - if (card->chipset >= 0xa3 && card->chipset != 0xaa && card->chipset != 0xac) { + if (card->chipset.chipset >= 0xa3 && card->chipset.chipset != 0xaa && card->chipset.chipset != 0xac) { time_fuc_engine_periodic(cnum, "PDAEMON", 0x10a000); time_fuc_engine_watchdog(cnum, "PDAEMON", 0x10a000); printf("\n"); @@ -618,7 +618,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PDAEMON (nva3+ only)\n\n"); } - if (card->chipset == 0xaf) { + if (card->chipset.chipset == 0xaf) { time_fuc_engine_periodic(cnum, "PVCOMP", 0x1c1000); time_fuc_engine_watchdog(cnum, "PVCOMP", 0x1c1000); printf("\n"); @@ -626,7 +626,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PVCOMP (nvaf only)\n\n"); } - if (card->chipset == 0xd9) { + if (card->chipset.chipset == 0xd9) { time_fuc_engine_periodic(cnum, "PUNK1C3", 0x1c3000); time_fuc_engine_watchdog(cnum, "PUNK1C3", 0x1c3000); printf("\n"); @@ -634,7 +634,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PUNK1C3 (nvd9 only)\n\n"); } - if (card->chipset == 0xd9) { + if (card->chipset.chipset == 0xd9) { time_fuc_engine_periodic(cnum, "PDISPLAY", 0x627000); time_fuc_engine_watchdog(cnum, "PDISPLAY", 0x627000); printf("\n"); @@ -642,7 +642,7 @@ int main(int argc, char **argv) printf("Your card doesn't support PDISPLAY (nvd9 only)\n\n"); } - if (card->chipset >= 0xc0) { + if (card->chipset.chipset >= 0xc0) { time_fuc_engine_periodic(cnum, "PGRAPH.CTXCTL", 0x409000); time_fuc_engine_watchdog(cnum, "PGRAPH.CTXCTL", 0x409000); printf("\n"); diff --git a/nva/regspace.c b/nva/regspace.c index c12b71b1..e17ec7f0 100644 --- a/nva/regspace.c +++ b/nva/regspace.c @@ -76,7 +76,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { return NVA_ERR_REGSZ; } case NVA_REGSPACE_PDAC: - if (regspace->card->chipset != 0x01) + if (regspace->card->chipset.chipset != 0x01) return NVA_ERR_NOSPC; if (addr > 0x10000 - regspace->regsz) return NVA_ERR_RANGE; @@ -88,7 +88,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, 0x609018, (val >> i * 8) & 0xff); return 0; case NVA_REGSPACE_EEPROM: - if (regspace->card->chipset != 0x01) + if (regspace->card->chipset.chipset != 0x01) return NVA_ERR_NOSPC; if (regspace->regsz != 1) return NVA_ERR_REGSZ; @@ -121,18 +121,18 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { vga: if (regspace->regsz != 1) return NVA_ERR_REGSZ; - if (regspace->card->card_type == 0x01) { + if (regspace->card->chipset.card_type == 0x01) { vgabase = 0x6d0000; if (regspace->idx != 0) return NVA_ERR_NOSPC; - } else if (regspace->card->card_type < 0x50) { + } else if (regspace->card->chipset.card_type < 0x50) { if (vgaio == 0x3c4 || vgaio == 0x3ce) vgabase = 0x0c0000; else vgabase = 0x601000; if (regspace->idx > 2) return NVA_ERR_NOSPC; - if ((regspace->card->chipset < 0x17 || regspace->card->chipset == 0x1a || regspace->card->chipset == 0x20) && regspace->idx == 1) + if ((regspace->card->chipset.chipset < 0x17 || regspace->card->chipset.chipset == 0x1a || regspace->card->chipset.chipset == 0x20) && regspace->idx == 1) return NVA_ERR_NOSPC; vgabase += regspace->idx * 0x2000; } else { @@ -155,12 +155,12 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { } return 0; case NVA_REGSPACE_VGA_ST: - if (regspace->card->chipset < 0x41) + if (regspace->card->chipset.chipset < 0x41) return NVA_ERR_NOSPC; if (regspace->regsz != 1) return NVA_ERR_REGSZ; uint32_t vstbase = 0x1380; - if (regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type >= 0x50) vstbase = 0x619e40; uint32_t savepos = nva_rd32(regspace->cnum, vstbase+0xc); uint32_t savecfg = nva_rd32(regspace->cnum, vstbase+0x8); @@ -171,7 +171,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, vstbase+0xc, savepos); return 0; case NVA_REGSPACE_PIPE: - if (regspace->card->card_type < 0x10 || regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type < 0x10 || regspace->card->chipset.card_type >= 0x50) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -179,7 +179,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, 0x400f54, val); return 0; case NVA_REGSPACE_RDI: - if (regspace->card->card_type < 0x20 || regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type < 0x20 || regspace->card->chipset.card_type >= 0x50) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -187,7 +187,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, 0x400754, val); return 0; case NVA_REGSPACE_VCOMP_CODE: - if (regspace->card->chipset != 0xaf) + if (regspace->card->chipset.chipset != 0xaf) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -195,7 +195,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, 0x1c17cc, val); return 0; case NVA_REGSPACE_VCOMP_REG: - if (regspace->card->chipset != 0xaf) + if (regspace->card->chipset.chipset != 0xaf) return NVA_ERR_NOSPC; if (regspace->regsz != 8) return NVA_ERR_REGSZ; @@ -204,7 +204,7 @@ int nva_wr(struct nva_regspace *regspace, uint32_t addr, uint64_t val) { nva_wr32(regspace->cnum, 0x1c17d8, val >> 32); return 0; case NVA_REGSPACE_MACRO_CODE: - if (regspace->card->chipset < 0xc0) + if (regspace->card->chipset.chipset < 0xc0) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -285,7 +285,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { return NVA_ERR_REGSZ; } case NVA_REGSPACE_PDAC: - if (regspace->card->chipset != 0x01) + if (regspace->card->chipset.chipset != 0x01) return NVA_ERR_NOSPC; if (addr > 0x10000 - regspace->regsz) return NVA_ERR_RANGE; @@ -298,7 +298,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { *val |= (uint64_t)(nva_rd32(regspace->cnum, 0x609018) & 0xff) << i * 8; return 0; case NVA_REGSPACE_EEPROM: - if (regspace->card->chipset != 0x01) + if (regspace->card->chipset.chipset != 0x01) return NVA_ERR_NOSPC; if (regspace->regsz != 1) return NVA_ERR_REGSZ; @@ -332,18 +332,18 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { vga: if (regspace->regsz != 1) return NVA_ERR_REGSZ; - if (regspace->card->card_type == 0x01) { + if (regspace->card->chipset.card_type == 0x01) { vgabase = 0x6d0000; if (regspace->idx != 0) return NVA_ERR_NOSPC; - } else if (regspace->card->card_type < 0x50) { + } else if (regspace->card->chipset.card_type < 0x50) { if (vgaio == 0x3c4 || vgaio == 0x3ce) vgabase = 0x0c0000; else vgabase = 0x601000; if (regspace->idx > 2) return NVA_ERR_NOSPC; - if ((regspace->card->chipset < 0x17 || regspace->card->chipset == 0x1a || regspace->card->chipset == 0x20) && regspace->idx == 1) + if ((regspace->card->chipset.chipset < 0x17 || regspace->card->chipset.chipset == 0x1a || regspace->card->chipset.chipset == 0x20) && regspace->idx == 1) return NVA_ERR_NOSPC; vgabase += regspace->idx * 0x2000; } else { @@ -367,12 +367,12 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { } return 0; case NVA_REGSPACE_VGA_ST: - if (regspace->card->chipset < 0x41) + if (regspace->card->chipset.chipset < 0x41) return NVA_ERR_NOSPC; if (regspace->regsz != 1) return NVA_ERR_REGSZ; uint32_t vstbase = 0x1380; - if (regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type >= 0x50) vstbase = 0x619e40; uint32_t savepos = nva_rd32(regspace->cnum, vstbase+0xc); uint32_t savecfg = nva_rd32(regspace->cnum, vstbase+0x8); @@ -383,7 +383,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { nva_wr32(regspace->cnum, vstbase+0xc, savepos); return 0; case NVA_REGSPACE_PIPE: - if (regspace->card->card_type < 0x10 || regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type < 0x10 || regspace->card->chipset.card_type >= 0x50) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -391,7 +391,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { *val = nva_rd32(regspace->cnum, 0x400f54); return 0; case NVA_REGSPACE_RDI: - if (regspace->card->card_type < 0x20 || regspace->card->card_type >= 0x50) + if (regspace->card->chipset.card_type < 0x20 || regspace->card->chipset.card_type >= 0x50) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -399,7 +399,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { *val = nva_rd32(regspace->cnum, 0x400754); return 0; case NVA_REGSPACE_VCOMP_CODE: - if (regspace->card->chipset != 0xaf) + if (regspace->card->chipset.chipset != 0xaf) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; @@ -407,7 +407,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { *val = nva_rd32(regspace->cnum, 0x1c17cc); return 0; case NVA_REGSPACE_VCOMP_REG: - if (regspace->card->chipset != 0xaf) + if (regspace->card->chipset.chipset != 0xaf) return NVA_ERR_NOSPC; if (regspace->regsz != 8) return NVA_ERR_REGSZ; @@ -416,7 +416,7 @@ int nva_rd(struct nva_regspace *regspace, uint32_t addr, uint64_t *val) { *val |= (uint64_t)nva_rd32(regspace->cnum, 0x1c17d8) << 32; return 0; case NVA_REGSPACE_MACRO_CODE: - if (regspace->card->chipset < 0xc0) + if (regspace->card->chipset.chipset < 0xc0) return NVA_ERR_NOSPC; if (regspace->regsz != 4) return NVA_ERR_REGSZ; diff --git a/nva/set_timings.c b/nva/set_timings.c index f0dd98ca..3271950a 100644 --- a/nva/set_timings.c +++ b/nva/set_timings.c @@ -318,7 +318,7 @@ dump_timings(struct nvamemtiming_conf *conf, FILE* outf, } fprintf(outf, "\n"); - if (nva_cards[conf->cnum].card_type >= 0xc0) { + if (nva_cards[conf->cnum].chipset.card_type >= 0xc0) { dump_regs(conf->cnum, outf, ref_val3, ref_exist, 0x10f240, 0x20, color && progression > 0); dump_regs(conf->cnum, outf, ref_val1, ref_exist, 0x10f290, 0xa0, color && progression > 0); dump_regs(conf->cnum, outf, ref_val4, ref_exist, 0x10f610, 0x10, color && progression > 0); @@ -440,7 +440,7 @@ deep_dump(struct nvamemtiming_conf *conf) return 1; } - if (nva_cards[conf->cnum].card_type >= 0xc0) + if (nva_cards[conf->cnum].chipset.card_type >= 0xc0) timing_value_types = nvc0_timing_value_types; else timing_value_types = nv40_timing_value_types; @@ -498,7 +498,7 @@ shallow_dump(struct nvamemtiming_conf *conf) return 1; } - if (nva_cards[conf->cnum].card_type >= 0xc0) + if (nva_cards[conf->cnum].chipset.card_type >= 0xc0) timing_value_types = nvc0_timing_value_types; else timing_value_types = nv40_timing_value_types; diff --git a/nva/vbios_mgmt.c b/nva/vbios_mgmt.c index 72151a05..f3a02dca 100644 --- a/nva/vbios_mgmt.c +++ b/nva/vbios_mgmt.c @@ -63,17 +63,17 @@ int vbios_upload_pramin(int cnum, uint8_t *vbios, int length) uint32_t old_bar0_pramin = 0; int i = 0; - if (nva_cards[cnum].chipset < 0x04) { + if (nva_cards[cnum].chipset.chipset < 0x04) { return ECARD; } fprintf(stderr, "Attempt to upload the vbios to card %i (nv%02x) using PRAMIN\n", - cnum, nva_cards[cnum].chipset); + cnum, nva_cards[cnum].chipset.chipset); /* Update the checksum */ chksum(vbios, length); - if (nva_cards[cnum].card_type >= 0x50) { + if (nva_cards[cnum].chipset.card_type >= 0x50) { uint32_t vbios_vram = (nva_rd32(cnum, 0x619f04) & ~0xff) << 8; if (!vbios_vram) @@ -88,7 +88,7 @@ int vbios_upload_pramin(int cnum, uint8_t *vbios, int length) for (i = 0; i < length; i++) nva_wr8(cnum, NV_PRAMIN_OFFSET + i, vbios[i]); - if (nva_cards[cnum].card_type >= 0x50) + if (nva_cards[cnum].chipset.card_type >= 0x50) nva_wr32(cnum, 0x1700, old_bar0_pramin); return EOK; diff --git a/vdpow/vdpow.c b/vdpow/vdpow.c index b9a8396b..068fdbc6 100644 --- a/vdpow/vdpow.c +++ b/vdpow/vdpow.c @@ -223,7 +223,7 @@ static uint32_t mask_pvp(enum vs_type codec, uint32_t idx) { case 0x688 ... 0x69c: return 0U; case 0x440 ... 0x444: - return nva_cards[cnum].chipset < 0xd0 ? 0U : ~0U; + return nva_cards[cnum].chipset.chipset < 0xd0 ? 0U : ~0U; default: return ~0U; }