diff options
Diffstat (limited to 'drivers/misc/mei/bus-fixup.c')
| -rw-r--r-- | drivers/misc/mei/bus-fixup.c | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c index 71fbf0bc8453..6df7679d9739 100644 --- a/drivers/misc/mei/bus-fixup.c +++ b/drivers/misc/mei/bus-fixup.c @@ -188,17 +188,20 @@ static int mei_fwver(struct mei_cl_device *cldev)  	return ret;  } +#define GFX_MEMORY_READY_TIMEOUT 200 /* timeout in milliseconds */ +  static int mei_gfx_memory_ready(struct mei_cl_device *cldev)  {  	struct mkhi_gfx_mem_ready req = {0}; -	unsigned int mode = MEI_CL_IO_TX_INTERNAL; +	unsigned int mode = MEI_CL_IO_TX_INTERNAL | MEI_CL_IO_TX_BLOCKING;  	req.hdr.group_id = MKHI_GROUP_ID_GFX;  	req.hdr.command = MKHI_GFX_MEMORY_READY_CMD_REQ;  	req.flags = MKHI_GFX_MEM_READY_PXP_ALLOWED;  	dev_dbg(&cldev->dev, "Sending memory ready command\n"); -	return __mei_cl_send(cldev->cl, (u8 *)&req, sizeof(req), 0, mode); +	return __mei_cl_send_timeout(cldev->cl, (u8 *)&req, sizeof(req), 0, +				     mode, GFX_MEMORY_READY_TIMEOUT);  }  static void mei_mkhi_fix(struct mei_cl_device *cldev) @@ -263,12 +266,13 @@ static void mei_gsc_mkhi_fix_ver(struct mei_cl_device *cldev)  	if (cldev->bus->pxp_mode == MEI_DEV_PXP_INIT) {  		ret = mei_gfx_memory_ready(cldev); -		if (ret < 0) +		if (ret < 0) {  			dev_err(&cldev->dev, "memory ready command failed %d\n", ret); -		else +		} else {  			dev_dbg(&cldev->dev, "memory ready command sent\n"); +			cldev->bus->pxp_mode = MEI_DEV_PXP_SETUP; +		}  		/* we go to reset after that */ -		cldev->bus->pxp_mode = MEI_DEV_PXP_SETUP;  		goto out;  	} |