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

Commit 56a7d920 authored by Zhen Kong's avatar Zhen Kong
Browse files

qseecom: set 64bit dma mask



Set 64bit dma mask for qseecom to perform dma on 64bit address
properly. Also reset local dmabuf pointers after unmapping dmabuf
to avoid double free.

Change-Id: I4ead045721c290fdb7742dbea3d5de614d703420
Signed-off-by: default avatarZhen Kong <zkong@codeaurora.org>
parent 967c44cd
Loading
Loading
Loading
Loading
+21 −9
Original line number Original line Diff line number Diff line
@@ -3574,12 +3574,14 @@ static int __qseecom_update_cmd_buf(void *msg, bool cleanup,
			}
			}
		}
		}
		/* Deallocate the kbuf */
		/* Deallocate the kbuf */
		if (!IS_ERR(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		sg_ptr = NULL;
		dmabuf = NULL;
		attach = NULL;
	}
	}
	return ret;
	return ret;
err:
err:
	if (!IS_ERR(sg_ptr))
	if (!IS_ERR_OR_NULL(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
	return -ENOMEM;
	return -ENOMEM;
}
}
@@ -3803,8 +3805,10 @@ static int __qseecom_update_cmd_buf_64(void *msg, bool cleanup,
			}
			}
		}
		}
		/* unmap the dmabuf */
		/* unmap the dmabuf */
		if (!IS_ERR(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		sg_ptr = NULL;
		dmabuf = NULL;
		attach = NULL;
	}
	}
	return ret;
	return ret;
err:
err:
@@ -3815,7 +3819,7 @@ static int __qseecom_update_cmd_buf_64(void *msg, bool cleanup,
				data->client.sec_buf_fd[i].size,
				data->client.sec_buf_fd[i].size,
				data->client.sec_buf_fd[i].vbase,
				data->client.sec_buf_fd[i].vbase,
				data->client.sec_buf_fd[i].pbase);
				data->client.sec_buf_fd[i].pbase);
	if (!IS_ERR(sg_ptr))
	if (!IS_ERR_OR_NULL(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
	return -ENOMEM;
	return -ENOMEM;
}
}
@@ -6569,12 +6573,14 @@ static int __qseecom_update_qteec_req_buf(struct qseecom_qteec_modfd_req *req,
			data->sglist_cnt = i + 1;
			data->sglist_cnt = i + 1;
		}
		}
		/* unmap the dmabuf */
		/* unmap the dmabuf */
		if (!IS_ERR(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		sg_ptr = NULL;
		dmabuf = NULL;
		attach = NULL;
	}
	}
	return ret;
	return ret;
err:
err:
	if (!IS_ERR(sg_ptr))
	if (!IS_ERR_OR_NULL(sg_ptr))
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
		qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
	return -ENOMEM;
	return -ENOMEM;
}
}
@@ -8567,6 +8573,12 @@ static int qseecom_probe(struct platform_device *pdev)
	qseecom.pdev = class_dev;
	qseecom.pdev = class_dev;
	qseecom.dev = &pdev->dev;
	qseecom.dev = &pdev->dev;


	rc = dma_set_mask(qseecom.dev, DMA_BIT_MASK(64));
	if (rc) {
		pr_err("qseecom failed to set dma mask\n", rc);
		goto exit_del_cdev;
	}

	/* register client for bus scaling */
	/* register client for bus scaling */
	if (pdev->dev.of_node) {
	if (pdev->dev.of_node) {
		qseecom.pdev->of_node = pdev->dev.of_node;
		qseecom.pdev->of_node = pdev->dev.of_node;