drm/nv10: introduce a new NV_11 card type
NV11/17/1F/18 come after NV10/15/16/1A. In order to facilitate using numerical comparisons, split up the two sets into different card types. This change should be a no-op except that the relevant cards will see NV11 printed instead of NV10 for the family. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
73f4b1f893
commit
4a0ff75418
7 changed files with 19 additions and 7 deletions
|
@ -161,7 +161,13 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
|
||||||
if ((boot0 & 0x0f000000) > 0) {
|
if ((boot0 & 0x0f000000) > 0) {
|
||||||
device->chipset = (boot0 & 0xff00000) >> 20;
|
device->chipset = (boot0 & 0xff00000) >> 20;
|
||||||
switch (device->chipset & 0xf0) {
|
switch (device->chipset & 0xf0) {
|
||||||
case 0x10: device->card_type = NV_10; break;
|
case 0x10: {
|
||||||
|
if (0x461 & (1 << (device->chipset & 0xf)))
|
||||||
|
device->card_type = NV_10;
|
||||||
|
else
|
||||||
|
device->card_type = NV_11;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0x20: device->card_type = NV_20; break;
|
case 0x20: device->card_type = NV_20; break;
|
||||||
case 0x30: device->card_type = NV_30; break;
|
case 0x30: device->card_type = NV_30; break;
|
||||||
case 0x40:
|
case 0x40:
|
||||||
|
@ -188,7 +194,8 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
|
||||||
|
|
||||||
switch (device->card_type) {
|
switch (device->card_type) {
|
||||||
case NV_04: ret = nv04_identify(device); break;
|
case NV_04: ret = nv04_identify(device); break;
|
||||||
case NV_10: ret = nv10_identify(device); break;
|
case NV_10:
|
||||||
|
case NV_11: ret = nv10_identify(device); break;
|
||||||
case NV_20: ret = nv20_identify(device); break;
|
case NV_20: ret = nv20_identify(device); break;
|
||||||
case NV_30: ret = nv30_identify(device); break;
|
case NV_30: ret = nv30_identify(device); break;
|
||||||
case NV_40: ret = nv40_identify(device); break;
|
case NV_40: ret = nv40_identify(device); break;
|
||||||
|
|
|
@ -72,6 +72,7 @@ struct nouveau_device {
|
||||||
enum {
|
enum {
|
||||||
NV_04 = 0x04,
|
NV_04 = 0x04,
|
||||||
NV_10 = 0x10,
|
NV_10 = 0x10,
|
||||||
|
NV_11 = 0x11,
|
||||||
NV_20 = 0x20,
|
NV_20 = 0x20,
|
||||||
NV_30 = 0x30,
|
NV_30 = 0x30,
|
||||||
NV_40 = 0x40,
|
NV_40 = 0x40,
|
||||||
|
|
|
@ -114,6 +114,7 @@ pll_map(struct nouveau_bios *bios)
|
||||||
switch (nv_device(bios)->card_type) {
|
switch (nv_device(bios)->card_type) {
|
||||||
case NV_04:
|
case NV_04:
|
||||||
case NV_10:
|
case NV_10:
|
||||||
|
case NV_11:
|
||||||
case NV_20:
|
case NV_20:
|
||||||
case NV_30:
|
case NV_30:
|
||||||
return nv04_pll_mapping;
|
return nv04_pll_mapping;
|
||||||
|
|
|
@ -740,7 +740,7 @@ nv_load_state_ext(struct drm_device *dev, int head,
|
||||||
}
|
}
|
||||||
/* NV11 and NV20 stop at 0x52. */
|
/* NV11 and NV20 stop at 0x52. */
|
||||||
if (nv_gf4_disp_arch(dev)) {
|
if (nv_gf4_disp_arch(dev)) {
|
||||||
if (nv_device(drm->device)->card_type == NV_10) {
|
if (nv_device(drm->device)->card_type < NV_20) {
|
||||||
/* Not waiting for vertical retrace before modifying
|
/* Not waiting for vertical retrace before modifying
|
||||||
CRE_53/CRE_54 causes lockups. */
|
CRE_53/CRE_54 causes lockups. */
|
||||||
nouveau_timer_wait_eq(ptimer, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x8);
|
nouveau_timer_wait_eq(ptimer, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x8);
|
||||||
|
|
|
@ -87,6 +87,7 @@ nouveau_abi16_swclass(struct nouveau_drm *drm)
|
||||||
case NV_04:
|
case NV_04:
|
||||||
return 0x006e;
|
return 0x006e;
|
||||||
case NV_10:
|
case NV_10:
|
||||||
|
case NV_11:
|
||||||
case NV_20:
|
case NV_20:
|
||||||
case NV_30:
|
case NV_30:
|
||||||
case NV_40:
|
case NV_40:
|
||||||
|
|
|
@ -269,7 +269,8 @@ set_placement_range(struct nouveau_bo *nvbo, uint32_t type)
|
||||||
struct nouveau_fb *pfb = nouveau_fb(drm->device);
|
struct nouveau_fb *pfb = nouveau_fb(drm->device);
|
||||||
u32 vram_pages = pfb->ram->size >> PAGE_SHIFT;
|
u32 vram_pages = pfb->ram->size >> PAGE_SHIFT;
|
||||||
|
|
||||||
if (nv_device(drm->device)->card_type == NV_10 &&
|
if ((nv_device(drm->device)->card_type == NV_10 ||
|
||||||
|
nv_device(drm->device)->card_type == NV_11) &&
|
||||||
nvbo->tile_mode && (type & TTM_PL_FLAG_VRAM) &&
|
nvbo->tile_mode && (type & TTM_PL_FLAG_VRAM) &&
|
||||||
nvbo->bo.mem.num_pages < vram_pages / 4) {
|
nvbo->bo.mem.num_pages < vram_pages / 4) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -215,9 +215,10 @@ nouveau_connector_set_encoder(struct drm_connector *connector,
|
||||||
} else {
|
} else {
|
||||||
connector->doublescan_allowed = true;
|
connector->doublescan_allowed = true;
|
||||||
if (nv_device(drm->device)->card_type == NV_20 ||
|
if (nv_device(drm->device)->card_type == NV_20 ||
|
||||||
(nv_device(drm->device)->card_type == NV_10 &&
|
((nv_device(drm->device)->card_type == NV_10 ||
|
||||||
(dev->pdev->device & 0x0ff0) != 0x0100 &&
|
nv_device(drm->device)->card_type == NV_11) &&
|
||||||
(dev->pdev->device & 0x0ff0) != 0x0150))
|
(dev->pdev->device & 0x0ff0) != 0x0100 &&
|
||||||
|
(dev->pdev->device & 0x0ff0) != 0x0150))
|
||||||
/* HW is broken */
|
/* HW is broken */
|
||||||
connector->interlace_allowed = false;
|
connector->interlace_allowed = false;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue