Commit d544d623 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nv50: fix connector table parsing for some cards



The connector table index in the DCB entry for each output type is an
index into the connector table, and does *not* necessarily match up
with what was previously called "index" in the connector table entries
themselves.

Not real sure what that index is exactly, renamed to "index2" as we
still use it to prevent creating multiple TV connectors.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent ce48fa93
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -5253,13 +5253,14 @@ parse_dcb_connector_table(struct nvbios *bios)
	entry = conntab + conntab[1];
	cte = &ct->entry[0];
	for (i = 0; i < conntab[2]; i++, entry += conntab[3], cte++) {
		cte->index = i;
		if (conntab[3] == 2)
			cte->entry = ROM16(entry[0]);
		else
			cte->entry = ROM32(entry[0]);

		cte->type  = (cte->entry & 0x000000ff) >> 0;
		cte->index = (cte->entry & 0x00000f00) >> 8;
		cte->index2 = (cte->entry & 0x00000f00) >> 8;
		switch (cte->entry & 0x00033000) {
		case 0x00001000:
			cte->gpio_tag = 0x07;
+2 −1
Original line number Diff line number Diff line
@@ -72,9 +72,10 @@ enum dcb_connector_type {
};

struct dcb_connector_table_entry {
	uint8_t index;
	uint32_t entry;
	enum dcb_connector_type type;
	uint8_t index;
	uint8_t index2;
	uint8_t gpio_tag;
};

+2 −2
Original line number Diff line number Diff line
@@ -522,8 +522,8 @@ int nv50_display_create(struct drm_device *dev)
	}

	for (i = 0 ; i < dcb->connector.entries; i++) {
		if (i != 0 && dcb->connector.entry[i].index ==
			      dcb->connector.entry[i - 1].index)
		if (i != 0 && dcb->connector.entry[i].index2 ==
			      dcb->connector.entry[i - 1].index2)
			continue;
		nouveau_connector_create(dev, &dcb->connector.entry[i]);
	}