diff options
| author | Ben Skeggs <bskeggs@redhat.com> | 2010-05-10 16:59:42 +1000 | 
|---|---|---|
| committer | Ben Skeggs <bskeggs@redhat.com> | 2010-05-19 16:22:04 +1000 | 
| commit | 92b9618761465d190b68519bcc6a6fbd8847cf2c (patch) | |
| tree | df6e34413cc3e18130b06f05b3f540db4ff75dab | |
| parent | 9170a82438230da63ed09cf6fd1f4d2f87baf68c (diff) | |
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: Ben Skeggs <bskeggs@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_bios.c | 39 | 
1 files changed, 23 insertions, 16 deletions
| diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c index 387ac734e9b9..d8dcb362e8b5 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.c +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c @@ -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); - -			/* execute eventual command handler */ -			res = (*itbl_entry[i].handler)(bios, offset, iexec); -			if (!res) -				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 { +		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 */ +		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 += ret;  	}  	if (offset >= bios->length) | 
