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

Commit cad878b8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm: get an iova from the address space instead of an id"

parents b50d5677 d8e96528
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ int adreno_hw_init(struct msm_gpu *gpu)

	DBG("%s", gpu->name);

	ret = msm_gem_get_iova(gpu->rb->bo, gpu->id, &gpu->rb_iova);
	ret = msm_gem_get_iova(gpu->rb->bo, gpu->aspace, &gpu->rb_iova);
	if (ret) {
		gpu->rb_iova = 0;
		dev_err(gpu->dev->dev, "could not map ringbuffer: %d\n", ret);
@@ -406,7 +406,7 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
		return -ENOMEM;
	}

	ret = msm_gem_get_iova(adreno_gpu->memptrs_bo, gpu->id,
	ret = msm_gem_get_iova(adreno_gpu->memptrs_bo, gpu->aspace,
			&adreno_gpu->memptrs_iova);
	if (ret) {
		dev_err(drm->dev, "could not map memptrs: %d\n", ret);
@@ -423,8 +423,7 @@ void adreno_gpu_cleanup(struct adreno_gpu *gpu)
			msm_gem_put_vaddr(gpu->memptrs_bo);

		if (gpu->memptrs_iova)
			msm_gem_put_iova(gpu->memptrs_bo, gpu->base.id);

			msm_gem_put_iova(gpu->memptrs_bo, gpu->base.aspace);
		drm_gem_object_unreference_unlocked(gpu->memptrs_bo);
	}
	release_firmware(gpu->pm4);
+29 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include "msm_drv.h"
#include "msm_kms.h"
#include "msm_gpu.h"
#include "msm_mmu.h"
#include "dsi_ctrl.h"
#include "dsi_ctrl_hw.h"
#include "dsi_clk.h"
@@ -252,6 +253,16 @@ static int dsi_ctrl_debugfs_deinit(struct dsi_ctrl *dsi_ctrl)
	return 0;
}

static inline struct msm_gem_address_space*
dsi_ctrl_get_aspace(struct dsi_ctrl *dsi_ctrl,
		int domain)
{
	if (!dsi_ctrl || !dsi_ctrl->drm_dev)
		return NULL;

	return msm_gem_smmu_address_space_get(dsi_ctrl->drm_dev, domain);
}

static int dsi_ctrl_check_state(struct dsi_ctrl *dsi_ctrl,
				enum dsi_ctrl_driver_ops op,
				u32 op_state)
@@ -1170,8 +1181,17 @@ static int dsi_ctrl_drv_state_init(struct dsi_ctrl *dsi_ctrl)

static int dsi_ctrl_buffer_deinit(struct dsi_ctrl *dsi_ctrl)
{
	struct msm_gem_address_space *aspace = NULL;

	if (dsi_ctrl->tx_cmd_buf) {
		msm_gem_put_iova(dsi_ctrl->tx_cmd_buf, 0);
		aspace = dsi_ctrl_get_aspace(dsi_ctrl,
				MSM_SMMU_DOMAIN_UNSECURE);
		if (!aspace) {
			pr_err("failed to get address space\n");
			return -ENOMEM;
		}

		msm_gem_put_iova(dsi_ctrl->tx_cmd_buf, aspace);

		msm_gem_free_object(dsi_ctrl->tx_cmd_buf);
		dsi_ctrl->tx_cmd_buf = NULL;
@@ -1184,6 +1204,13 @@ int dsi_ctrl_buffer_init(struct dsi_ctrl *dsi_ctrl)
{
	int rc = 0;
	u32 iova = 0;
	struct msm_gem_address_space *aspace = NULL;

	aspace = dsi_ctrl_get_aspace(dsi_ctrl, MSM_SMMU_DOMAIN_UNSECURE);
	if (!aspace) {
		pr_err("failed to get address space\n");
		return -ENOMEM;
	}

	dsi_ctrl->tx_cmd_buf = msm_gem_new(dsi_ctrl->drm_dev,
					   SZ_4K,
@@ -1198,7 +1225,7 @@ int dsi_ctrl_buffer_init(struct dsi_ctrl *dsi_ctrl)

	dsi_ctrl->cmd_buffer_size = SZ_4K;

	rc = msm_gem_get_iova(dsi_ctrl->tx_cmd_buf, 0, &iova);
	rc = msm_gem_get_iova(dsi_ctrl->tx_cmd_buf, aspace, &iova);
	if (rc) {
		pr_err("failed to get iova, rc=%d\n", rc);
		(void)dsi_ctrl_buffer_deinit(dsi_ctrl);
+13 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include "msm_drv.h"
#include "sde_connector.h"
#include "msm_mmu.h"
#include "dsi_display.h"
#include "dsi_panel.h"
#include "dsi_ctrl.h"
@@ -1321,6 +1322,7 @@ static ssize_t dsi_host_transfer(struct mipi_dsi_host *host,
{
	struct dsi_display *display = to_dsi_display(host);
	struct dsi_display_ctrl *display_ctrl;
	struct msm_gem_address_space *aspace = NULL;
	int rc = 0, cnt = 0;

	if (!host || !msg) {
@@ -1363,7 +1365,16 @@ static ssize_t dsi_host_transfer(struct mipi_dsi_host *host,
			pr_err("value of display->tx_cmd_buf is NULL");
			goto error_disable_cmd_engine;
		}
		rc = msm_gem_get_iova(display->tx_cmd_buf, 0,

		aspace = msm_gem_smmu_address_space_get(display->drm_dev,
				MSM_SMMU_DOMAIN_UNSECURE);
		if (!aspace) {
			pr_err("failed to get aspace\n");
			rc = -EINVAL;
			goto free_gem;
		}

		rc = msm_gem_get_iova(display->tx_cmd_buf, aspace,
					&(display->cmd_buffer_iova));
		if (rc) {
			pr_err("failed to get the iova rc %d\n", rc);
@@ -1419,7 +1430,7 @@ static ssize_t dsi_host_transfer(struct mipi_dsi_host *host,
	}
	return rc;
put_iova:
	msm_gem_put_iova(display->tx_cmd_buf, 0);
	msm_gem_put_iova(display->tx_cmd_buf, aspace);
free_gem:
	msm_gem_free_object(display->tx_cmd_buf);
error:
+4 −3
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
		container_of(work, struct mdp4_crtc, unref_cursor_work);
	struct mdp4_kms *mdp4_kms = get_kms(&mdp4_crtc->base);

	msm_gem_put_iova(val, mdp4_kms->id);
	msm_gem_put_iova(val, mdp4_kms->aspace);
	drm_gem_object_unreference_unlocked(val);
}

@@ -378,7 +378,8 @@ static void update_cursor(struct drm_crtc *crtc)
		if (next_bo) {
			/* take a obj ref + iova ref when we start scanning out: */
			drm_gem_object_reference(next_bo);
			msm_gem_get_iova_locked(next_bo, mdp4_kms->id, &iova);
			msm_gem_get_iova_locked(next_bo, mdp4_kms->aspace,
				&iova);

			/* enable cursor: */
			mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_SIZE(dma),
@@ -435,7 +436,7 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc,
	}

	if (cursor_bo) {
		ret = msm_gem_get_iova(cursor_bo, mdp4_kms->id, &iova);
		ret = msm_gem_get_iova(cursor_bo, mdp4_kms->aspace, &iova);
		if (ret)
			goto fail;
	} else {
+2 −9
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ static void mdp4_destroy(struct msm_kms *kms)
	}

	if (mdp4_kms->blank_cursor_iova)
		msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id);
		msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->aspace);
	drm_gem_object_unreference_unlocked(mdp4_kms->blank_cursor_bo);

	if (mdp4_kms->rpm_enabled)
@@ -582,13 +582,6 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
		aspace = NULL;
	}

	mdp4_kms->id = msm_register_address_space(dev, aspace);
	if (mdp4_kms->id < 0) {
		ret = mdp4_kms->id;
		dev_err(dev->dev, "failed to register mdp4 iommu: %d\n", ret);
		goto fail;
	}

	ret = modeset_init(mdp4_kms);
	if (ret) {
		dev_err(dev->dev, "modeset_init failed: %d\n", ret);
@@ -605,7 +598,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
		goto fail;
	}

	ret = msm_gem_get_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id,
	ret = msm_gem_get_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->aspace,
			&mdp4_kms->blank_cursor_iova);
	if (ret) {
		dev_err(dev->dev, "could not pin blank-cursor bo: %d\n", ret);
Loading