Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92b96187 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau: display error message for any failed init table opcode



Some handlers don't report specific errors, but we still *really* want to
know if we failed to parse a complete init table.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 9170a824
Loading
Loading
Loading
Loading
+23 −16
Original line number Diff line number Diff line
@@ -3130,7 +3130,7 @@ parse_init_table(struct nvbios *bios, unsigned int offset,
	 * is changed back to EXECUTE.
	 */

	int count = 0, i, res;
	int count = 0, i, ret;
	uint8_t id;

	/*
@@ -3145,26 +3145,33 @@ parse_init_table(struct nvbios *bios, unsigned int offset,
		for (i = 0; itbl_entry[i].name && (itbl_entry[i].id != id); i++)
			;

		if (itbl_entry[i].name) {
			BIOSLOG(bios, "0x%04X: [ (0x%02X) - %s ]\n",
				offset, itbl_entry[i].id, itbl_entry[i].name);
		if (!itbl_entry[i].name) {
			NV_ERROR(bios->dev,
				 "0x%04X: Init table command not found: "
				 "0x%02X\n", offset, id);
			return -ENOENT;
		}

		BIOSLOG(bios, "0x%04X: [ (0x%02X) - %s ]\n", offset,
			itbl_entry[i].id, itbl_entry[i].name);

		/* execute eventual command handler */
			res = (*itbl_entry[i].handler)(bios, offset, iexec);
			if (!res)
		ret = (*itbl_entry[i].handler)(bios, offset, iexec);
		if (ret < 0) {
			NV_ERROR(bios->dev, "0x%04X: Failed parsing init "
				 "table opcode: %s %d\n", offset,
				 itbl_entry[i].name, ret);
		}

		if (ret <= 0)
			break;

		/*
		 * Add the offset of the current command including all data
		 * of that command. The offset will then be pointing on the
		 * next op code.
		 */
			offset += res;
		} else {
			NV_ERROR(bios->dev,
				 "0x%04X: Init table command not found: "
				 "0x%02X\n", offset, id);
			return -ENOENT;
		}
		offset += ret;
	}

	if (offset >= bios->length)