All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs
@ 2016-09-30 17:08 Alex Deucher
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Never used.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 35 ++++++--------------------------
 1 file changed, 6 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index 359fe56..cf43caa 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -209,10 +209,9 @@ static void dce_virtual_crtc_dpms(struct drm_crtc *crtc, int mode)
 	switch (mode) {
 	case DRM_MODE_DPMS_ON:
 		amdgpu_crtc->enabled = true;
-		/* Make sure VBLANK and PFLIP interrupts are still enabled */
+		/* Make sure VBLANK interrupts are still enabled */
 		type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
 		amdgpu_irq_update(adev, &adev->crtc_irq, type);
-		amdgpu_irq_update(adev, &adev->pageflip_irq, type);
 		drm_vblank_on(dev, amdgpu_crtc->crtc_id);
 		break;
 	case DRM_MODE_DPMS_STANDBY:
@@ -672,8 +671,8 @@ static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer *vbla
 }
 
 static void dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *adev,
-						     int crtc,
-						     enum amdgpu_interrupt_state state)
+							int crtc,
+							enum amdgpu_interrupt_state state)
 {
 	if (crtc >= adev->mode_info.num_crtc) {
 		DRM_DEBUG("invalid crtc %d\n", crtc);
@@ -697,9 +696,9 @@ static void dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *ad
 
 
 static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
-                                       struct amdgpu_irq_src *source,
-                                       unsigned type,
-                                       enum amdgpu_interrupt_state state)
+					  struct amdgpu_irq_src *source,
+					  unsigned type,
+					  enum amdgpu_interrupt_state state)
 {
 	switch (type) {
 	case AMDGPU_CRTC_IRQ_VBLANK1:
@@ -726,20 +725,6 @@ static int dce_virtual_crtc_irq(struct amdgpu_device *adev,
 	return 0;
 }
 
-static int dce_virtual_set_pageflip_irq_state(struct amdgpu_device *adev,
-					    struct amdgpu_irq_src *src,
-					    unsigned type,
-					    enum amdgpu_interrupt_state state)
-{
-	if (type >= adev->mode_info.num_crtc) {
-		DRM_ERROR("invalid pageflip crtc %d\n", type);
-		return -EINVAL;
-	}
-	DRM_DEBUG("[FM]set pageflip irq type %d state %d\n", type, state);
-
-	return 0;
-}
-
 static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
 				  struct amdgpu_irq_src *source,
 				  struct amdgpu_iv_entry *entry)
@@ -793,17 +778,9 @@ static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
 	.process = dce_virtual_crtc_irq,
 };
 
-static const struct amdgpu_irq_src_funcs dce_virtual_pageflip_irq_funcs = {
-	.set = dce_virtual_set_pageflip_irq_state,
-	.process = dce_virtual_pageflip_irq,
-};
-
 static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)
 {
 	adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
 	adev->crtc_irq.funcs = &dce_virtual_crtc_irq_funcs;
-
-	adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
-	adev->pageflip_irq.funcs = &dce_virtual_pageflip_irq_funcs;
 }
 
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process callback
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-2-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling Alex Deucher
                     ` (6 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Virtual crtcs interrupts do not show up in the IV ring,
so it will never be called.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index cf43caa..8163622 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -710,21 +710,6 @@ static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
 	return 0;
 }
 
-static int dce_virtual_crtc_irq(struct amdgpu_device *adev,
-			      struct amdgpu_irq_src *source,
-			      struct amdgpu_iv_entry *entry)
-{
-	unsigned crtc = 0;
-	unsigned irq_type = AMDGPU_CRTC_IRQ_VBLANK1;
-
-	if (amdgpu_irq_enabled(adev, source, irq_type)) {
-		drm_handle_vblank(adev->ddev, crtc);
-	}
-	dce_virtual_pageflip_irq(adev, NULL, NULL);
-	DRM_DEBUG("IH: D%d vblank\n", crtc + 1);
-	return 0;
-}
-
 static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
 				  struct amdgpu_irq_src *source,
 				  struct amdgpu_iv_entry *entry)
@@ -775,7 +760,7 @@ static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
 
 static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
 	.set = dce_virtual_set_crtc_irq_state,
-	.process = dce_virtual_crtc_irq,
+	.process = NULL,
 };
 
 static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process callback Alex Deucher
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-3-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup Alex Deucher
                     ` (5 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

We handle the virtual interrupts from a timer so no
need to try an look like we are handling IV ring events.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 109 +++++++++++++++----------------
 1 file changed, 54 insertions(+), 55 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index 8163622..29e0ce0 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -39,9 +39,6 @@
 
 static void dce_virtual_set_display_funcs(struct amdgpu_device *adev);
 static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev);
-static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
-				  struct amdgpu_irq_src *source,
-				  struct amdgpu_iv_entry *entry);
 
 /**
  * dce_virtual_vblank_wait - vblank wait asic callback.
@@ -659,14 +656,64 @@ static void dce_virtual_set_display_funcs(struct amdgpu_device *adev)
 		adev->mode_info.funcs = &dce_virtual_display_funcs;
 }
 
+static int dce_virtual_pageflip(struct amdgpu_device *adev,
+				unsigned crtc_id)
+{
+	unsigned long flags;
+	struct amdgpu_crtc *amdgpu_crtc;
+	struct amdgpu_flip_work *works;
+
+	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
+
+	if (crtc_id >= adev->mode_info.num_crtc) {
+		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
+		return -EINVAL;
+	}
+
+	/* IRQ could occur when in initial stage */
+	if (amdgpu_crtc == NULL)
+		return 0;
+
+	spin_lock_irqsave(&adev->ddev->event_lock, flags);
+	works = amdgpu_crtc->pflip_works;
+	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
+		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
+			"AMDGPU_FLIP_SUBMITTED(%d)\n",
+			amdgpu_crtc->pflip_status,
+			AMDGPU_FLIP_SUBMITTED);
+		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
+		return 0;
+	}
+
+	/* page flip completed. clean up */
+	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
+	amdgpu_crtc->pflip_works = NULL;
+
+	/* wakeup usersapce */
+	if (works->event)
+		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works->event);
+
+	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
+
+	drm_crtc_vblank_put(&amdgpu_crtc->base);
+	schedule_work(&works->unpin_work);
+
+	return 0;
+}
+
 static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer *vblank_timer)
 {
-	struct amdgpu_mode_info *mode_info = container_of(vblank_timer, struct amdgpu_mode_info ,vblank_timer);
-	struct amdgpu_device *adev = container_of(mode_info, struct amdgpu_device ,mode_info);
+	struct amdgpu_mode_info *mode_info =
+		container_of(vblank_timer, struct amdgpu_mode_info , vblank_timer);
+	struct amdgpu_device *adev =
+		container_of(mode_info, struct amdgpu_device , mode_info);
 	unsigned crtc = 0;
+
 	drm_handle_vblank(adev->ddev, crtc);
-	dce_virtual_pageflip_irq(adev, NULL, NULL);
-	hrtimer_start(vblank_timer, ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
+	dce_virtual_pageflip(adev, crtc);
+	hrtimer_start(vblank_timer, ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD),
+		      HRTIMER_MODE_REL);
+
 	return HRTIMER_NORESTART;
 }
 
@@ -710,54 +757,6 @@ static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
 	return 0;
 }
 
-static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
-				  struct amdgpu_irq_src *source,
-				  struct amdgpu_iv_entry *entry)
-{
-	unsigned long flags;
-	unsigned crtc_id = 0;
-	struct amdgpu_crtc *amdgpu_crtc;
-	struct amdgpu_flip_work *works;
-
-	crtc_id = 0;
-	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
-
-	if (crtc_id >= adev->mode_info.num_crtc) {
-		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
-		return -EINVAL;
-	}
-
-	/* IRQ could occur when in initial stage */
-	if (amdgpu_crtc == NULL)
-		return 0;
-
-	spin_lock_irqsave(&adev->ddev->event_lock, flags);
-	works = amdgpu_crtc->pflip_works;
-	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
-		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
-			"AMDGPU_FLIP_SUBMITTED(%d)\n",
-			amdgpu_crtc->pflip_status,
-			AMDGPU_FLIP_SUBMITTED);
-		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
-		return 0;
-	}
-
-	/* page flip completed. clean up */
-	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
-	amdgpu_crtc->pflip_works = NULL;
-
-	/* wakeup usersapce */
-	if (works->event)
-		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works->event);
-
-	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
-
-	drm_crtc_vblank_put(&amdgpu_crtc->base);
-	schedule_work(&works->unpin_work);
-
-	return 0;
-}
-
 static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
 	.set = dce_virtual_set_crtc_irq_state,
 	.process = NULL,
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process callback Alex Deucher
  2016-09-30 17:08   ` [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling Alex Deucher
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-4-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and encoder macros." Alex Deucher
                     ` (4 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

No need to emulate all of the stuff for real hw.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c |  93 ----------
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c       | 231 +++++++++++++++----------
 2 files changed, 144 insertions(+), 180 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index decbba5..ff0b55a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -1504,88 +1504,6 @@ static const struct drm_connector_funcs amdgpu_connector_edp_funcs = {
 	.force = amdgpu_connector_dvi_force,
 };
 
-static struct drm_encoder *
-amdgpu_connector_virtual_encoder(struct drm_connector *connector)
-{
-	int enc_id = connector->encoder_ids[0];
-	struct drm_encoder *encoder;
-	int i;
-	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-		if (connector->encoder_ids[i] == 0)
-			break;
-
-		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
-		if (!encoder)
-			continue;
-
-		if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL)
-			return encoder;
-	}
-
-	/* pick the first one */
-	if (enc_id)
-		return drm_encoder_find(connector->dev, enc_id);
-	return NULL;
-}
-
-static int amdgpu_connector_virtual_get_modes(struct drm_connector *connector)
-{
-	struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector);
-
-	if (encoder) {
-		amdgpu_connector_add_common_modes(encoder, connector);
-	}
-
-	return 0;
-}
-
-static int amdgpu_connector_virtual_mode_valid(struct drm_connector *connector,
-					   struct drm_display_mode *mode)
-{
-	return MODE_OK;
-}
-
-static int
-amdgpu_connector_virtual_dpms(struct drm_connector *connector, int mode)
-{
-	return 0;
-}
-
-static enum drm_connector_status
-
-amdgpu_connector_virtual_detect(struct drm_connector *connector, bool force)
-{
-	return connector_status_connected;
-}
-
-static int
-amdgpu_connector_virtual_set_property(struct drm_connector *connector,
-				  struct drm_property *property,
-				  uint64_t val)
-{
-	return 0;
-}
-
-static void amdgpu_connector_virtual_force(struct drm_connector *connector)
-{
-	return;
-}
-
-static const struct drm_connector_helper_funcs amdgpu_connector_virtual_helper_funcs = {
-	.get_modes = amdgpu_connector_virtual_get_modes,
-	.mode_valid = amdgpu_connector_virtual_mode_valid,
-	.best_encoder = amdgpu_connector_virtual_encoder,
-};
-
-static const struct drm_connector_funcs amdgpu_connector_virtual_funcs = {
-	.dpms = amdgpu_connector_virtual_dpms,
-	.detect = amdgpu_connector_virtual_detect,
-	.fill_modes = drm_helper_probe_single_connector_modes,
-	.set_property = amdgpu_connector_virtual_set_property,
-	.destroy = amdgpu_connector_destroy,
-	.force = amdgpu_connector_virtual_force,
-};
-
 void
 amdgpu_connector_add(struct amdgpu_device *adev,
 		      uint32_t connector_id,
@@ -1970,17 +1888,6 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 			connector->interlace_allowed = false;
 			connector->doublescan_allowed = false;
 			break;
-		case DRM_MODE_CONNECTOR_VIRTUAL:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
-			if (!amdgpu_dig_connector)
-				goto failed;
-			amdgpu_connector->con_priv = amdgpu_dig_connector;
-			drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_virtual_funcs, connector_type);
-			drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_virtual_helper_funcs);
-			subpixel_order = SubPixelHorizontalRGB;
-			connector->interlace_allowed = false;
-			connector->doublescan_allowed = false;
-			break;
 		}
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index 29e0ce0..0c8b21e 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -39,6 +39,8 @@
 
 static void dce_virtual_set_display_funcs(struct amdgpu_device *adev);
 static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev);
+static int dce_virtual_connector_encoder_init(struct amdgpu_device *adev,
+					      int index);
 
 /**
  * dce_virtual_vblank_wait - vblank wait asic callback.
@@ -274,24 +276,6 @@ static bool dce_virtual_crtc_mode_fixup(struct drm_crtc *crtc,
 				     const struct drm_display_mode *mode,
 				     struct drm_display_mode *adjusted_mode)
 {
-	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	struct drm_device *dev = crtc->dev;
-	struct drm_encoder *encoder;
-
-	/* assign the encoder to the amdgpu crtc to avoid repeated lookups later */
-	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-		if (encoder->crtc == crtc) {
-			amdgpu_crtc->encoder = encoder;
-			amdgpu_crtc->connector = amdgpu_get_connector_for_encoder(encoder);
-			break;
-		}
-	}
-	if ((amdgpu_crtc->encoder == NULL) || (amdgpu_crtc->connector == NULL)) {
-		amdgpu_crtc->encoder = NULL;
-		amdgpu_crtc->connector = NULL;
-		return false;
-	}
-
 	return true;
 }
 
@@ -370,38 +354,120 @@ static int dce_virtual_early_init(void *handle)
 	return 0;
 }
 
-static bool dce_virtual_get_connector_info(struct amdgpu_device *adev)
+static struct drm_encoder *
+dce_virtual_encoder(struct drm_connector *connector)
 {
-	struct amdgpu_i2c_bus_rec ddc_bus;
-	struct amdgpu_router router;
-	struct amdgpu_hpd hpd;
+	int enc_id = connector->encoder_ids[0];
+	struct drm_encoder *encoder;
+	int i;
+
+	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+		if (connector->encoder_ids[i] == 0)
+			break;
+
+		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
+		if (!encoder)
+			continue;
 
-	/* look up gpio for ddc, hpd */
-	ddc_bus.valid = false;
-	hpd.hpd = AMDGPU_HPD_NONE;
-	/* needed for aux chan transactions */
-	ddc_bus.hpd = hpd.hpd;
+		if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL)
+			return encoder;
+	}
 
-	memset(&router, 0, sizeof(router));
-	router.ddc_valid = false;
-	router.cd_valid = false;
-	amdgpu_display_add_connector(adev,
-				      0,
-				      ATOM_DEVICE_CRT1_SUPPORT,
-				      DRM_MODE_CONNECTOR_VIRTUAL, &ddc_bus,
-				      CONNECTOR_OBJECT_ID_VIRTUAL,
-				      &hpd,
-				      &router);
+	/* pick the first one */
+	if (enc_id)
+		return drm_encoder_find(connector->dev, enc_id);
+	return NULL;
+}
+
+static int dce_virtual_get_modes(struct drm_connector *connector)
+{
+	struct drm_device *dev = connector->dev;
+	struct drm_display_mode *mode = NULL;
+	unsigned i;
+	static const struct mode_size {
+		int w;
+		int h;
+	} common_modes[17] = {
+		{ 640,  480},
+		{ 720,  480},
+		{ 800,  600},
+		{ 848,  480},
+		{1024,  768},
+		{1152,  768},
+		{1280,  720},
+		{1280,  800},
+		{1280,  854},
+		{1280,  960},
+		{1280, 1024},
+		{1440,  900},
+		{1400, 1050},
+		{1680, 1050},
+		{1600, 1200},
+		{1920, 1080},
+		{1920, 1200}
+	};
+
+	for (i = 0; i < 17; i++) {
+		mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
+		drm_mode_probed_add(connector, mode);
+	}
 
-	amdgpu_display_add_encoder(adev, ENCODER_VIRTUAL_ENUM_VIRTUAL,
-							ATOM_DEVICE_CRT1_SUPPORT,
-							0);
+	return 0;
+}
 
-	amdgpu_link_encoder_connector(adev->ddev);
+static int dce_virtual_mode_valid(struct drm_connector *connector,
+				  struct drm_display_mode *mode)
+{
+	return MODE_OK;
+}
 
-	return true;
+static int
+dce_virtual_dpms(struct drm_connector *connector, int mode)
+{
+	return 0;
 }
 
+static enum drm_connector_status
+dce_virtual_detect(struct drm_connector *connector, bool force)
+{
+	return connector_status_connected;
+}
+
+static int
+dce_virtual_set_property(struct drm_connector *connector,
+			 struct drm_property *property,
+			 uint64_t val)
+{
+	return 0;
+}
+
+static void dce_virtual_destroy(struct drm_connector *connector)
+{
+	drm_connector_unregister(connector);
+	drm_connector_cleanup(connector);
+	kfree(connector);
+}
+
+static void dce_virtual_force(struct drm_connector *connector)
+{
+	return;
+}
+
+static const struct drm_connector_helper_funcs dce_virtual_connector_helper_funcs = {
+	.get_modes = dce_virtual_get_modes,
+	.mode_valid = dce_virtual_mode_valid,
+	.best_encoder = dce_virtual_encoder,
+};
+
+static const struct drm_connector_funcs dce_virtual_connector_funcs = {
+	.dpms = dce_virtual_dpms,
+	.detect = dce_virtual_detect,
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.set_property = dce_virtual_set_property,
+	.destroy = dce_virtual_destroy,
+	.force = dce_virtual_force,
+};
+
 static int dce_virtual_sw_init(void *handle)
 {
 	int r, i;
@@ -430,16 +496,16 @@ static int dce_virtual_sw_init(void *handle)
 	adev->ddev->mode_config.max_width = 16384;
 	adev->ddev->mode_config.max_height = 16384;
 
-	/* allocate crtcs */
+	/* allocate crtcs, encoders, connectors */
 	for (i = 0; i < adev->mode_info.num_crtc; i++) {
 		r = dce_virtual_crtc_init(adev, i);
 		if (r)
 			return r;
+		r = dce_virtual_connector_encoder_init(adev, i);
+		if (r)
+			return r;
 	}
 
-	dce_virtual_get_connector_info(adev);
-	amdgpu_print_display_setup(adev->ddev);
-
 	drm_kms_helper_poll_init(adev->ddev);
 
 	adev->mode_info.mode_config_initialized = true;
@@ -540,8 +606,8 @@ static void dce_virtual_encoder_commit(struct drm_encoder *encoder)
 
 static void
 dce_virtual_encoder_mode_set(struct drm_encoder *encoder,
-		      struct drm_display_mode *mode,
-		      struct drm_display_mode *adjusted_mode)
+			     struct drm_display_mode *mode,
+			     struct drm_display_mode *adjusted_mode)
 {
 	return;
 }
@@ -561,10 +627,6 @@ static bool dce_virtual_encoder_mode_fixup(struct drm_encoder *encoder,
 				    const struct drm_display_mode *mode,
 				    struct drm_display_mode *adjusted_mode)
 {
-
-	/* set the active encoder to connector routing */
-	amdgpu_encoder_set_active_device(encoder);
-
 	return true;
 }
 
@@ -590,45 +652,40 @@ static const struct drm_encoder_funcs dce_virtual_encoder_funcs = {
 	.destroy = dce_virtual_encoder_destroy,
 };
 
-static void dce_virtual_encoder_add(struct amdgpu_device *adev,
-				 uint32_t encoder_enum,
-				 uint32_t supported_device,
-				 u16 caps)
+static int dce_virtual_connector_encoder_init(struct amdgpu_device *adev,
+					      int index)
 {
-	struct drm_device *dev = adev->ddev;
 	struct drm_encoder *encoder;
-	struct amdgpu_encoder *amdgpu_encoder;
-
-	/* see if we already added it */
-	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-		amdgpu_encoder = to_amdgpu_encoder(encoder);
-		if (amdgpu_encoder->encoder_enum == encoder_enum) {
-			amdgpu_encoder->devices |= supported_device;
-			return;
-		}
+	struct drm_connector *connector;
 
+	/* add a new encoder */
+	encoder = kzalloc(sizeof(struct drm_encoder), GFP_KERNEL);
+	if (!encoder) {
+		kfree(connector);
+		return -ENOMEM;
 	}
+	encoder->possible_crtcs = 1 << index;
+	drm_encoder_init(adev->ddev, encoder, &dce_virtual_encoder_funcs,
+			 DRM_MODE_ENCODER_VIRTUAL, NULL);
+	drm_encoder_helper_add(encoder, &dce_virtual_encoder_helper_funcs);
 
-	/* add a new one */
-	amdgpu_encoder = kzalloc(sizeof(struct amdgpu_encoder), GFP_KERNEL);
-	if (!amdgpu_encoder)
-		return;
+	connector = kzalloc(sizeof(struct drm_connector), GFP_KERNEL);
+	if (!connector)
+		return -ENOMEM;
 
-	encoder = &amdgpu_encoder->base;
-	encoder->possible_crtcs = 0x1;
-	amdgpu_encoder->enc_priv = NULL;
-	amdgpu_encoder->encoder_enum = encoder_enum;
-	amdgpu_encoder->encoder_id = (encoder_enum & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
-	amdgpu_encoder->devices = supported_device;
-	amdgpu_encoder->rmx_type = RMX_OFF;
-	amdgpu_encoder->underscan_type = UNDERSCAN_OFF;
-	amdgpu_encoder->is_ext_encoder = false;
-	amdgpu_encoder->caps = caps;
-
-	drm_encoder_init(dev, encoder, &dce_virtual_encoder_funcs,
-					 DRM_MODE_ENCODER_VIRTUAL, NULL);
-	drm_encoder_helper_add(encoder, &dce_virtual_encoder_helper_funcs);
-	DRM_INFO("[FM]encoder: %d is VIRTUAL\n", amdgpu_encoder->encoder_id);
+	/* add a new connector */
+	drm_connector_init(adev->ddev, connector, &dce_virtual_connector_funcs,
+			   DRM_MODE_CONNECTOR_VIRTUAL);
+	drm_connector_helper_add(connector, &dce_virtual_connector_helper_funcs);
+	connector->display_info.subpixel_order = SubPixelHorizontalRGB;
+	connector->interlace_allowed = false;
+	connector->doublescan_allowed = false;
+	drm_connector_register(connector);
+
+	/* link them */
+	drm_mode_connector_attach_encoder(connector, encoder);
+
+	return 0;
 }
 
 static const struct amdgpu_display_funcs dce_virtual_display_funcs = {
@@ -644,8 +701,8 @@ static const struct amdgpu_display_funcs dce_virtual_display_funcs = {
 	.hpd_get_gpio_reg = &dce_virtual_hpd_get_gpio_reg,
 	.page_flip = &dce_virtual_page_flip,
 	.page_flip_get_scanoutpos = &dce_virtual_crtc_get_scanoutpos,
-	.add_encoder = &dce_virtual_encoder_add,
-	.add_connector = &amdgpu_connector_add,
+	.add_encoder = NULL,
+	.add_connector = NULL,
 	.stop_mc_access = &dce_virtual_stop_mc_access,
 	.resume_mc_access = &dce_virtual_resume_mc_access,
 };
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and encoder macros."
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (2 preceding siblings ...)
  2016-09-30 17:08   ` [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup Alex Deucher
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-5-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 6/7] drm/amdgpu: rename amdgpu_whether_enable_virtual_display Alex Deucher
                     ` (3 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

This reverts commit 16925c92dbd97524655525b6816625e1f0063d12.

This is no longer necessary.
---
 drivers/gpu/drm/amd/amdgpu/ObjectID.h | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/ObjectID.h b/drivers/gpu/drm/amd/amdgpu/ObjectID.h
index b8d6667..0619269 100644
--- a/drivers/gpu/drm/amd/amdgpu/ObjectID.h
+++ b/drivers/gpu/drm/amd/amdgpu/ObjectID.h
@@ -90,7 +90,6 @@
 #define ENCODER_OBJECT_ID_INTERNAL_VCE            0x24
 #define ENCODER_OBJECT_ID_INTERNAL_UNIPHY3        0x25
 #define ENCODER_OBJECT_ID_INTERNAL_AMCLK          0x27
-#define ENCODER_OBJECT_ID_VIRTUAL                 0x28
 
 #define ENCODER_OBJECT_ID_GENERAL_EXTERNAL_DVO    0xFF
 
@@ -120,7 +119,6 @@
 #define CONNECTOR_OBJECT_ID_eDP                   0x14
 #define CONNECTOR_OBJECT_ID_MXM                   0x15
 #define CONNECTOR_OBJECT_ID_LVDS_eDP              0x16
-#define CONNECTOR_OBJECT_ID_VIRTUAL               0x17
 
 /* deleted */
 
@@ -149,7 +147,6 @@
 #define GRAPH_OBJECT_ENUM_ID5                     0x05
 #define GRAPH_OBJECT_ENUM_ID6                     0x06
 #define GRAPH_OBJECT_ENUM_ID7                     0x07
-#define GRAPH_OBJECT_ENUM_VIRTUAL                 0x08
 
 /****************************************************/
 /* Graphics Object ID Bit definition                */
@@ -411,10 +408,6 @@
                                                   GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\
                                                   ENCODER_OBJECT_ID_HDMI_ANX9805 << OBJECT_ID_SHIFT)
 
-#define ENCODER_VIRTUAL_ENUM_VIRTUAL            ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\
-                                                  GRAPH_OBJECT_ENUM_VIRTUAL << ENUM_ID_SHIFT |\
-                                                  ENCODER_OBJECT_ID_VIRTUAL << OBJECT_ID_SHIFT)
-
 /****************************************************/
 /* Connector Object ID definition - Shared with BIOS */
 /****************************************************/
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/7] drm/amdgpu: rename amdgpu_whether_enable_virtual_display
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (3 preceding siblings ...)
  2016-09-30 17:08   ` [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and encoder macros." Alex Deucher
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-6-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:08   ` [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi crtcs. (v3) Alex Deucher
                     ` (2 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

to match the other functions in that file.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 99a15ca..13caa52 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1231,7 +1231,7 @@ int amdgpu_ip_block_version_cmp(struct amdgpu_device *adev,
 	return 1;
 }
 
-static void amdgpu_whether_enable_virtual_display(struct amdgpu_device *adev)
+static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev)
 {
 	adev->enable_virtual_display = false;
 
@@ -1261,7 +1261,7 @@ static int amdgpu_early_init(struct amdgpu_device *adev)
 {
 	int i, r;
 
-	amdgpu_whether_enable_virtual_display(adev);
+	amdgpu_device_enable_virtual_display(adev);
 
 	switch (adev->asic_type) {
 	case CHIP_TOPAZ:
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi crtcs. (v3)
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (4 preceding siblings ...)
  2016-09-30 17:08   ` [PATCH 6/7] drm/amdgpu: rename amdgpu_whether_enable_virtual_display Alex Deucher
@ 2016-09-30 17:08   ` Alex Deucher
       [not found]     ` <1475255328-21598-7-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-09-30 17:52   ` [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs Christian König
  2016-10-08  8:24   ` Deng, Emily
  7 siblings, 1 reply; 16+ messages in thread
From: Alex Deucher @ 2016-09-30 17:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher, Emily Deng

From: Emily Deng <Emily.Deng@amd.com>

Enable multi crtcs for virtual display, user can set the number of crtcs
by amdgpu module parameter  virtual_display.

v2: make timers per crtc
v3: agd: simplify implementation

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 28 +++++++++++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h   |  5 ++--
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c   | 48 +++++++++++++++---------------
 4 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 13caa52..91dc851 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1238,20 +1238,38 @@ static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev)
 	if (amdgpu_virtual_display) {
 		struct drm_device *ddev = adev->ddev;
 		const char *pci_address_name = pci_name(ddev->pdev);
-		char *pciaddstr, *pciaddstr_tmp, *pciaddname;
+		char *pciaddstr, *pciaddstr_tmp, *pciaddname_tmp, *pciaddname;
 
 		pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL);
 		pciaddstr_tmp = pciaddstr;
-		while ((pciaddname = strsep(&pciaddstr_tmp, ";"))) {
+		while ((pciaddname_tmp = strsep(&pciaddstr_tmp, ";"))) {
+			pciaddname = strsep(&pciaddname_tmp, ",");
 			if (!strcmp(pci_address_name, pciaddname)) {
+				long num_crtc;
+				int res = -1;
+
 				adev->enable_virtual_display = true;
+
+				if (pciaddname_tmp)
+					res = kstrtol(pciaddname_tmp, 10,
+						      &num_crtc);
+
+				if (!res) {
+					if (num_crtc < 1)
+						num_crtc = 1;
+					if (num_crtc > 6)
+						num_crtc = 6;
+					adev->mode_info.num_crtc = num_crtc;
+				} else {
+					adev->mode_info.num_crtc = 1;
+				}
 				break;
 			}
 		}
 
-		DRM_INFO("virtual display string:%s, %s:virtual_display:%d\n",
-				 amdgpu_virtual_display, pci_address_name,
-				 adev->enable_virtual_display);
+		DRM_INFO("virtual display string:%s, %s:virtual_display:%d, num_crtc:%d\n",
+			 amdgpu_virtual_display, pci_address_name,
+			 adev->enable_virtual_display, adev->mode_info.num_crtc);
 
 		kfree(pciaddstr);
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 728e8ca..721ef24 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -201,7 +201,8 @@ module_param_named(pg_mask, amdgpu_pg_mask, uint, 0444);
 MODULE_PARM_DESC(disable_cu, "Disable CUs (se.sh.cu,...)");
 module_param_named(disable_cu, amdgpu_disable_cu, charp, 0444);
 
-MODULE_PARM_DESC(virtual_display, "Enable virtual display feature (the virtual_display will be set like xxxx:xx:xx.x;xxxx:xx:xx.x)");
+MODULE_PARM_DESC(virtual_display,
+		 "Enable virtual display feature (the virtual_display will be set like xxxx:xx:xx.x,x;xxxx:xx:xx.x,x)");
 module_param_named(virtual_display, amdgpu_virtual_display, charp, 0444);
 
 static const struct pci_device_id pciidlist[] = {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
index 7b0eff7..1e23334 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
@@ -341,8 +341,6 @@ struct amdgpu_mode_info {
 	int			num_dig; /* number of dig blocks */
 	int			disp_priority;
 	const struct amdgpu_display_funcs *funcs;
-	struct hrtimer vblank_timer;
-	enum amdgpu_interrupt_state vsync_timer_enabled;
 };
 
 #define AMDGPU_MAX_BL_LEVEL 0xFF
@@ -413,6 +411,9 @@ struct amdgpu_crtc {
 	u32 wm_high;
 	u32 lb_vblank_lead_lines;
 	struct drm_display_mode hw_mode;
+	/* for virtual dce */
+	struct hrtimer vblank_timer;
+	enum amdgpu_interrupt_state vsync_timer_enabled;
 };
 
 struct amdgpu_encoder_atom_dig {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index 0c8b21e..682e066 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -335,6 +335,7 @@ static int dce_virtual_crtc_init(struct amdgpu_device *adev, int index)
 	amdgpu_crtc->pll_id = ATOM_PPLL_INVALID;
 	amdgpu_crtc->encoder = NULL;
 	amdgpu_crtc->connector = NULL;
+	amdgpu_crtc->vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
 	drm_crtc_helper_add(&amdgpu_crtc->base, &dce_virtual_crtc_helper_funcs);
 
 	return 0;
@@ -344,11 +345,9 @@ static int dce_virtual_early_init(void *handle)
 {
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-	adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
 	dce_virtual_set_display_funcs(adev);
 	dce_virtual_set_irq_funcs(adev);
 
-	adev->mode_info.num_crtc = 1;
 	adev->mode_info.num_hpd = 1;
 	adev->mode_info.num_dig = 1;
 	return 0;
@@ -760,14 +759,13 @@ static int dce_virtual_pageflip(struct amdgpu_device *adev,
 
 static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer *vblank_timer)
 {
-	struct amdgpu_mode_info *mode_info =
-		container_of(vblank_timer, struct amdgpu_mode_info , vblank_timer);
-	struct amdgpu_device *adev =
-		container_of(mode_info, struct amdgpu_device , mode_info);
-	unsigned crtc = 0;
+	struct amdgpu_crtc *amdgpu_crtc = container_of(vblank_timer,
+						       struct amdgpu_crtc, vblank_timer);
+	struct drm_device *ddev = amdgpu_crtc->base.dev;
+	struct amdgpu_device *adev = ddev->dev_private;
 
-	drm_handle_vblank(adev->ddev, crtc);
-	dce_virtual_pageflip(adev, crtc);
+	drm_handle_vblank(ddev, amdgpu_crtc->crtc_id);
+	dce_virtual_pageflip(adev, amdgpu_crtc->crtc_id);
 	hrtimer_start(vblank_timer, ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD),
 		      HRTIMER_MODE_REL);
 
@@ -783,18 +781,22 @@ static void dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *ad
 		return;
 	}
 
-	if (state && !adev->mode_info.vsync_timer_enabled) {
+	if (state && !adev->mode_info.crtcs[crtc]->vsync_timer_enabled) {
 		DRM_DEBUG("Enable software vsync timer\n");
-		hrtimer_init(&adev->mode_info.vblank_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-		hrtimer_set_expires(&adev->mode_info.vblank_timer, ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD));
-		adev->mode_info.vblank_timer.function = dce_virtual_vblank_timer_handle;
-		hrtimer_start(&adev->mode_info.vblank_timer, ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
-	} else if (!state && adev->mode_info.vsync_timer_enabled) {
+		hrtimer_init(&adev->mode_info.crtcs[crtc]->vblank_timer,
+			     CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+		hrtimer_set_expires(&adev->mode_info.crtcs[crtc]->vblank_timer,
+				    ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD));
+		adev->mode_info.crtcs[crtc]->vblank_timer.function =
+			dce_virtual_vblank_timer_handle;
+		hrtimer_start(&adev->mode_info.crtcs[crtc]->vblank_timer,
+			      ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
+	} else if (!state && adev->mode_info.crtcs[crtc]->vsync_timer_enabled) {
 		DRM_DEBUG("Disable software vsync timer\n");
-		hrtimer_cancel(&adev->mode_info.vblank_timer);
+		hrtimer_cancel(&adev->mode_info.crtcs[crtc]->vblank_timer);
 	}
 
-	adev->mode_info.vsync_timer_enabled = state;
+	adev->mode_info.crtcs[crtc]->vsync_timer_enabled = state;
 	DRM_DEBUG("[FM]set crtc %d vblank interrupt state %d\n", crtc, state);
 }
 
@@ -804,13 +806,11 @@ static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
 					  unsigned type,
 					  enum amdgpu_interrupt_state state)
 {
-	switch (type) {
-	case AMDGPU_CRTC_IRQ_VBLANK1:
-		dce_virtual_set_crtc_vblank_interrupt_state(adev, 0, state);
-		break;
-	default:
-		break;
-	}
+	if (type > AMDGPU_CRTC_IRQ_VBLANK6)
+		return -EINVAL;
+
+	dce_virtual_set_crtc_vblank_interrupt_state(adev, type, state);
+
 	return 0;
 }
 
-- 
2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (5 preceding siblings ...)
  2016-09-30 17:08   ` [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi crtcs. (v3) Alex Deucher
@ 2016-09-30 17:52   ` Christian König
  2016-10-08  8:24   ` Deng, Emily
  7 siblings, 0 replies; 16+ messages in thread
From: Christian König @ 2016-09-30 17:52 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Alex Deucher

Am 30.09.2016 um 19:08 schrieb Alex Deucher:
> Never used.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

Acked-by: Christian König <christian.koenig@amd.com>.

> ---
>   drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 35 ++++++--------------------------
>   1 file changed, 6 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 359fe56..cf43caa 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -209,10 +209,9 @@ static void dce_virtual_crtc_dpms(struct drm_crtc *crtc, int mode)
>   	switch (mode) {
>   	case DRM_MODE_DPMS_ON:
>   		amdgpu_crtc->enabled = true;
> -		/* Make sure VBLANK and PFLIP interrupts are still enabled */
> +		/* Make sure VBLANK interrupts are still enabled */
>   		type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
>   		amdgpu_irq_update(adev, &adev->crtc_irq, type);
> -		amdgpu_irq_update(adev, &adev->pageflip_irq, type);
>   		drm_vblank_on(dev, amdgpu_crtc->crtc_id);
>   		break;
>   	case DRM_MODE_DPMS_STANDBY:
> @@ -672,8 +671,8 @@ static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer *vbla
>   }
>   
>   static void dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *adev,
> -						     int crtc,
> -						     enum amdgpu_interrupt_state state)
> +							int crtc,
> +							enum amdgpu_interrupt_state state)
>   {
>   	if (crtc >= adev->mode_info.num_crtc) {
>   		DRM_DEBUG("invalid crtc %d\n", crtc);
> @@ -697,9 +696,9 @@ static void dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *ad
>   
>   
>   static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
> -                                       struct amdgpu_irq_src *source,
> -                                       unsigned type,
> -                                       enum amdgpu_interrupt_state state)
> +					  struct amdgpu_irq_src *source,
> +					  unsigned type,
> +					  enum amdgpu_interrupt_state state)
>   {
>   	switch (type) {
>   	case AMDGPU_CRTC_IRQ_VBLANK1:
> @@ -726,20 +725,6 @@ static int dce_virtual_crtc_irq(struct amdgpu_device *adev,
>   	return 0;
>   }
>   
> -static int dce_virtual_set_pageflip_irq_state(struct amdgpu_device *adev,
> -					    struct amdgpu_irq_src *src,
> -					    unsigned type,
> -					    enum amdgpu_interrupt_state state)
> -{
> -	if (type >= adev->mode_info.num_crtc) {
> -		DRM_ERROR("invalid pageflip crtc %d\n", type);
> -		return -EINVAL;
> -	}
> -	DRM_DEBUG("[FM]set pageflip irq type %d state %d\n", type, state);
> -
> -	return 0;
> -}
> -
>   static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
>   				  struct amdgpu_irq_src *source,
>   				  struct amdgpu_iv_entry *entry)
> @@ -793,17 +778,9 @@ static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
>   	.process = dce_virtual_crtc_irq,
>   };
>   
> -static const struct amdgpu_irq_src_funcs dce_virtual_pageflip_irq_funcs = {
> -	.set = dce_virtual_set_pageflip_irq_state,
> -	.process = dce_virtual_pageflip_irq,
> -};
> -
>   static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)
>   {
>   	adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
>   	adev->crtc_irq.funcs = &dce_virtual_crtc_irq_funcs;
> -
> -	adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
> -	adev->pageflip_irq.funcs = &dce_virtual_pageflip_irq_funcs;
>   }
>   


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process callback
       [not found]     ` <1475255328-21598-2-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:22       ` Deng, Emily
  0 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:22 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process
> callback
> 
> Virtual crtcs interrupts do not show up in the IV ring, so it will never be called.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 17 +----------------
>  1 file changed, 1 insertion(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index cf43caa..8163622 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -710,21 +710,6 @@ static int dce_virtual_set_crtc_irq_state(struct
> amdgpu_device *adev,
>  	return 0;
>  }
> 
> -static int dce_virtual_crtc_irq(struct amdgpu_device *adev,
> -			      struct amdgpu_irq_src *source,
> -			      struct amdgpu_iv_entry *entry)
> -{
> -	unsigned crtc = 0;
> -	unsigned irq_type = AMDGPU_CRTC_IRQ_VBLANK1;
> -
> -	if (amdgpu_irq_enabled(adev, source, irq_type)) {
> -		drm_handle_vblank(adev->ddev, crtc);
> -	}
> -	dce_virtual_pageflip_irq(adev, NULL, NULL);
> -	DRM_DEBUG("IH: D%d vblank\n", crtc + 1);
> -	return 0;
> -}
> -
>  static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
>  				  struct amdgpu_irq_src *source,
>  				  struct amdgpu_iv_entry *entry)
> @@ -775,7 +760,7 @@ static int dce_virtual_pageflip_irq(struct
> amdgpu_device *adev,
> 
>  static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
>  	.set = dce_virtual_set_crtc_irq_state,
> -	.process = dce_virtual_crtc_irq,
> +	.process = NULL,
>  };
> 
>  static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi crtcs. (v3)
       [not found]     ` <1475255328-21598-7-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:22       ` Deng, Emily
  0 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:22 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: Alex Deucher [mailto:alexdeucher@gmail.com]
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deng, Emily <Emily.Deng@amd.com>; Deucher, Alexander
> <Alexander.Deucher@amd.com>
> Subject: [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi
> crtcs. (v3)
> 
> From: Emily Deng <Emily.Deng@amd.com>
> 
> Enable multi crtcs for virtual display, user can set the number of crtcs by
> amdgpu module parameter  virtual_display.
> 
> v2: make timers per crtc
> v3: agd: simplify implementation
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 28 +++++++++++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  3 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h   |  5 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c   | 48 +++++++++++++++--------
> -------
>  4 files changed, 52 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 13caa52..91dc851 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1238,20 +1238,38 @@ static void
> amdgpu_device_enable_virtual_display(struct amdgpu_device *adev)
>  	if (amdgpu_virtual_display) {
>  		struct drm_device *ddev = adev->ddev;
>  		const char *pci_address_name = pci_name(ddev->pdev);
> -		char *pciaddstr, *pciaddstr_tmp, *pciaddname;
> +		char *pciaddstr, *pciaddstr_tmp, *pciaddname_tmp,
> *pciaddname;
> 
>  		pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL);
>  		pciaddstr_tmp = pciaddstr;
> -		while ((pciaddname = strsep(&pciaddstr_tmp, ";"))) {
> +		while ((pciaddname_tmp = strsep(&pciaddstr_tmp, ";"))) {
> +			pciaddname = strsep(&pciaddname_tmp, ",");
>  			if (!strcmp(pci_address_name, pciaddname)) {
> +				long num_crtc;
> +				int res = -1;
> +
>  				adev->enable_virtual_display = true;
> +
> +				if (pciaddname_tmp)
> +					res = kstrtol(pciaddname_tmp, 10,
> +						      &num_crtc);
> +
> +				if (!res) {
> +					if (num_crtc < 1)
> +						num_crtc = 1;
> +					if (num_crtc > 6)
> +						num_crtc = 6;
> +					adev->mode_info.num_crtc =
> num_crtc;
> +				} else {
> +					adev->mode_info.num_crtc = 1;
> +				}
>  				break;
>  			}
>  		}
> 
> -		DRM_INFO("virtual display
> string:%s, %s:virtual_display:%d\n",
> -				 amdgpu_virtual_display, pci_address_name,
> -				 adev->enable_virtual_display);
> +		DRM_INFO("virtual display string:%s, %s:virtual_display:%d,
> num_crtc:%d\n",
> +			 amdgpu_virtual_display, pci_address_name,
> +			 adev->enable_virtual_display, adev-
> >mode_info.num_crtc);
> 
>  		kfree(pciaddstr);
>  	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 728e8ca..721ef24 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -201,7 +201,8 @@ module_param_named(pg_mask, amdgpu_pg_mask,
> uint, 0444);  MODULE_PARM_DESC(disable_cu, "Disable CUs (se.sh.cu,...)");
> module_param_named(disable_cu, amdgpu_disable_cu, charp, 0444);
> 
> -MODULE_PARM_DESC(virtual_display, "Enable virtual display feature (the
> virtual_display will be set like xxxx:xx:xx.x;xxxx:xx:xx.x)");
> +MODULE_PARM_DESC(virtual_display,
> +		 "Enable virtual display feature (the virtual_display will be set
> +like xxxx:xx:xx.x,x;xxxx:xx:xx.x,x)");
>  module_param_named(virtual_display, amdgpu_virtual_display, charp,
> 0444);
> 
>  static const struct pci_device_id pciidlist[] = { diff --git
> a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> index 7b0eff7..1e23334 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> @@ -341,8 +341,6 @@ struct amdgpu_mode_info {
>  	int			num_dig; /* number of dig blocks */
>  	int			disp_priority;
>  	const struct amdgpu_display_funcs *funcs;
> -	struct hrtimer vblank_timer;
> -	enum amdgpu_interrupt_state vsync_timer_enabled;
>  };
> 
>  #define AMDGPU_MAX_BL_LEVEL 0xFF
> @@ -413,6 +411,9 @@ struct amdgpu_crtc {
>  	u32 wm_high;
>  	u32 lb_vblank_lead_lines;
>  	struct drm_display_mode hw_mode;
> +	/* for virtual dce */
> +	struct hrtimer vblank_timer;
> +	enum amdgpu_interrupt_state vsync_timer_enabled;
>  };
> 
>  struct amdgpu_encoder_atom_dig {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 0c8b21e..682e066 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -335,6 +335,7 @@ static int dce_virtual_crtc_init(struct amdgpu_device
> *adev, int index)
>  	amdgpu_crtc->pll_id = ATOM_PPLL_INVALID;
>  	amdgpu_crtc->encoder = NULL;
>  	amdgpu_crtc->connector = NULL;
> +	amdgpu_crtc->vsync_timer_enabled =
> AMDGPU_IRQ_STATE_DISABLE;
>  	drm_crtc_helper_add(&amdgpu_crtc->base,
> &dce_virtual_crtc_helper_funcs);
> 
>  	return 0;
> @@ -344,11 +345,9 @@ static int dce_virtual_early_init(void *handle)  {
>  	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> 
> -	adev->mode_info.vsync_timer_enabled =
> AMDGPU_IRQ_STATE_DISABLE;
>  	dce_virtual_set_display_funcs(adev);
>  	dce_virtual_set_irq_funcs(adev);
> 
> -	adev->mode_info.num_crtc = 1;
>  	adev->mode_info.num_hpd = 1;
>  	adev->mode_info.num_dig = 1;
>  	return 0;
> @@ -760,14 +759,13 @@ static int dce_virtual_pageflip(struct
> amdgpu_device *adev,
> 
>  static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer
> *vblank_timer)  {
> -	struct amdgpu_mode_info *mode_info =
> -		container_of(vblank_timer, struct amdgpu_mode_info ,
> vblank_timer);
> -	struct amdgpu_device *adev =
> -		container_of(mode_info, struct amdgpu_device ,
> mode_info);
> -	unsigned crtc = 0;
> +	struct amdgpu_crtc *amdgpu_crtc = container_of(vblank_timer,
> +						       struct amdgpu_crtc,
> vblank_timer);
> +	struct drm_device *ddev = amdgpu_crtc->base.dev;
> +	struct amdgpu_device *adev = ddev->dev_private;
> 
> -	drm_handle_vblank(adev->ddev, crtc);
> -	dce_virtual_pageflip(adev, crtc);
> +	drm_handle_vblank(ddev, amdgpu_crtc->crtc_id);
> +	dce_virtual_pageflip(adev, amdgpu_crtc->crtc_id);
>  	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD),
>  		      HRTIMER_MODE_REL);
> 
> @@ -783,18 +781,22 @@ static void
> dce_virtual_set_crtc_vblank_interrupt_state(struct amdgpu_device *ad
>  		return;
>  	}
> 
> -	if (state && !adev->mode_info.vsync_timer_enabled) {
> +	if (state && !adev->mode_info.crtcs[crtc]->vsync_timer_enabled) {
>  		DRM_DEBUG("Enable software vsync timer\n");
> -		hrtimer_init(&adev->mode_info.vblank_timer,
> CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> -		hrtimer_set_expires(&adev->mode_info.vblank_timer,
> ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD));
> -		adev->mode_info.vblank_timer.function =
> dce_virtual_vblank_timer_handle;
> -		hrtimer_start(&adev->mode_info.vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
> -	} else if (!state && adev->mode_info.vsync_timer_enabled) {
> +		hrtimer_init(&adev->mode_info.crtcs[crtc]->vblank_timer,
> +			     CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> +		hrtimer_set_expires(&adev->mode_info.crtcs[crtc]-
> >vblank_timer,
> +				    ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD));
> +		adev->mode_info.crtcs[crtc]->vblank_timer.function =
> +			dce_virtual_vblank_timer_handle;
> +		hrtimer_start(&adev->mode_info.crtcs[crtc]->vblank_timer,
> +			      ktime_set(0, DCE_VIRTUAL_VBLANK_PERIOD),
> HRTIMER_MODE_REL);
> +	} else if (!state && adev->mode_info.crtcs[crtc]-
> >vsync_timer_enabled)
> +{
>  		DRM_DEBUG("Disable software vsync timer\n");
> -		hrtimer_cancel(&adev->mode_info.vblank_timer);
> +		hrtimer_cancel(&adev->mode_info.crtcs[crtc]-
> >vblank_timer);
>  	}
> 
> -	adev->mode_info.vsync_timer_enabled = state;
> +	adev->mode_info.crtcs[crtc]->vsync_timer_enabled = state;
>  	DRM_DEBUG("[FM]set crtc %d vblank interrupt state %d\n", crtc,
> state);  }
> 
> @@ -804,13 +806,11 @@ static int dce_virtual_set_crtc_irq_state(struct
> amdgpu_device *adev,
>  					  unsigned type,
>  					  enum amdgpu_interrupt_state state)
> {
> -	switch (type) {
> -	case AMDGPU_CRTC_IRQ_VBLANK1:
> -		dce_virtual_set_crtc_vblank_interrupt_state(adev, 0, state);
> -		break;
> -	default:
> -		break;
> -	}
> +	if (type > AMDGPU_CRTC_IRQ_VBLANK6)
> +		return -EINVAL;
> +
> +	dce_virtual_set_crtc_vblank_interrupt_state(adev, type, state);
> +
>  	return 0;
>  }
> 
> --
> 2.5.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and encoder macros."
       [not found]     ` <1475255328-21598-5-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:22       ` Deng, Emily
  0 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:22 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and
> encoder macros."
> 
> This reverts commit 16925c92dbd97524655525b6816625e1f0063d12.
> 
> This is no longer necessary.
> ---
>  drivers/gpu/drm/amd/amdgpu/ObjectID.h | 7 -------
>  1 file changed, 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/ObjectID.h
> b/drivers/gpu/drm/amd/amdgpu/ObjectID.h
> index b8d6667..0619269 100644
> --- a/drivers/gpu/drm/amd/amdgpu/ObjectID.h
> +++ b/drivers/gpu/drm/amd/amdgpu/ObjectID.h
> @@ -90,7 +90,6 @@
>  #define ENCODER_OBJECT_ID_INTERNAL_VCE            0x24
>  #define ENCODER_OBJECT_ID_INTERNAL_UNIPHY3        0x25
>  #define ENCODER_OBJECT_ID_INTERNAL_AMCLK          0x27
> -#define ENCODER_OBJECT_ID_VIRTUAL                 0x28
> 
>  #define ENCODER_OBJECT_ID_GENERAL_EXTERNAL_DVO    0xFF
> 
> @@ -120,7 +119,6 @@
>  #define CONNECTOR_OBJECT_ID_eDP                   0x14
>  #define CONNECTOR_OBJECT_ID_MXM                   0x15
>  #define CONNECTOR_OBJECT_ID_LVDS_eDP              0x16
> -#define CONNECTOR_OBJECT_ID_VIRTUAL               0x17
> 
>  /* deleted */
> 
> @@ -149,7 +147,6 @@
>  #define GRAPH_OBJECT_ENUM_ID5                     0x05
>  #define GRAPH_OBJECT_ENUM_ID6                     0x06
>  #define GRAPH_OBJECT_ENUM_ID7                     0x07
> -#define GRAPH_OBJECT_ENUM_VIRTUAL                 0x08
> 
>  /****************************************************/
>  /* Graphics Object ID Bit definition                */
> @@ -411,10 +408,6 @@
>                                                    GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT
> |\
>                                                    ENCODER_OBJECT_ID_HDMI_ANX9805 <<
> OBJECT_ID_SHIFT)
> 
> -#define ENCODER_VIRTUAL_ENUM_VIRTUAL
> ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\
> -                                                  GRAPH_OBJECT_ENUM_VIRTUAL <<
> ENUM_ID_SHIFT |\
> -                                                  ENCODER_OBJECT_ID_VIRTUAL <<
> OBJECT_ID_SHIFT)
> -
>  /****************************************************/
>  /* Connector Object ID definition - Shared with BIOS */
> /****************************************************/
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup
       [not found]     ` <1475255328-21598-4-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:22       ` Deng, Emily
  0 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:22 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup
> 
> No need to emulate all of the stuff for real hw.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c |  93 ----------
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c       | 231 +++++++++++++++----
> ------
>  2 files changed, 144 insertions(+), 180 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> index decbba5..ff0b55a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> @@ -1504,88 +1504,6 @@ static const struct drm_connector_funcs
> amdgpu_connector_edp_funcs = {
>  	.force = amdgpu_connector_dvi_force,
>  };
> 
> -static struct drm_encoder *
> -amdgpu_connector_virtual_encoder(struct drm_connector *connector) -{
> -	int enc_id = connector->encoder_ids[0];
> -	struct drm_encoder *encoder;
> -	int i;
> -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
> -		if (connector->encoder_ids[i] == 0)
> -			break;
> -
> -		encoder = drm_encoder_find(connector->dev, connector-
> >encoder_ids[i]);
> -		if (!encoder)
> -			continue;
> -
> -		if (encoder->encoder_type ==
> DRM_MODE_ENCODER_VIRTUAL)
> -			return encoder;
> -	}
> -
> -	/* pick the first one */
> -	if (enc_id)
> -		return drm_encoder_find(connector->dev, enc_id);
> -	return NULL;
> -}
> -
> -static int amdgpu_connector_virtual_get_modes(struct drm_connector
> *connector) -{
> -	struct drm_encoder *encoder =
> amdgpu_connector_best_single_encoder(connector);
> -
> -	if (encoder) {
> -		amdgpu_connector_add_common_modes(encoder,
> connector);
> -	}
> -
> -	return 0;
> -}
> -
> -static int amdgpu_connector_virtual_mode_valid(struct drm_connector
> *connector,
> -					   struct drm_display_mode *mode)
> -{
> -	return MODE_OK;
> -}
> -
> -static int
> -amdgpu_connector_virtual_dpms(struct drm_connector *connector, int
> mode) -{
> -	return 0;
> -}
> -
> -static enum drm_connector_status
> -
> -amdgpu_connector_virtual_detect(struct drm_connector *connector, bool
> force) -{
> -	return connector_status_connected;
> -}
> -
> -static int
> -amdgpu_connector_virtual_set_property(struct drm_connector *connector,
> -				  struct drm_property *property,
> -				  uint64_t val)
> -{
> -	return 0;
> -}
> -
> -static void amdgpu_connector_virtual_force(struct drm_connector
> *connector) -{
> -	return;
> -}
> -
> -static const struct drm_connector_helper_funcs
> amdgpu_connector_virtual_helper_funcs = {
> -	.get_modes = amdgpu_connector_virtual_get_modes,
> -	.mode_valid = amdgpu_connector_virtual_mode_valid,
> -	.best_encoder = amdgpu_connector_virtual_encoder,
> -};
> -
> -static const struct drm_connector_funcs amdgpu_connector_virtual_funcs
> = {
> -	.dpms = amdgpu_connector_virtual_dpms,
> -	.detect = amdgpu_connector_virtual_detect,
> -	.fill_modes = drm_helper_probe_single_connector_modes,
> -	.set_property = amdgpu_connector_virtual_set_property,
> -	.destroy = amdgpu_connector_destroy,
> -	.force = amdgpu_connector_virtual_force,
> -};
> -
>  void
>  amdgpu_connector_add(struct amdgpu_device *adev,
>  		      uint32_t connector_id,
> @@ -1970,17 +1888,6 @@ amdgpu_connector_add(struct amdgpu_device
> *adev,
>  			connector->interlace_allowed = false;
>  			connector->doublescan_allowed = false;
>  			break;
> -		case DRM_MODE_CONNECTOR_VIRTUAL:
> -			amdgpu_dig_connector = kzalloc(sizeof(struct
> amdgpu_connector_atom_dig), GFP_KERNEL);
> -			if (!amdgpu_dig_connector)
> -				goto failed;
> -			amdgpu_connector->con_priv =
> amdgpu_dig_connector;
> -			drm_connector_init(dev, &amdgpu_connector->base,
> &amdgpu_connector_virtual_funcs, connector_type);
> -			drm_connector_helper_add(&amdgpu_connector-
> >base, &amdgpu_connector_virtual_helper_funcs);
> -			subpixel_order = SubPixelHorizontalRGB;
> -			connector->interlace_allowed = false;
> -			connector->doublescan_allowed = false;
> -			break;
>  		}
>  	}
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 29e0ce0..0c8b21e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -39,6 +39,8 @@
> 
>  static void dce_virtual_set_display_funcs(struct amdgpu_device *adev);
> static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev);
> +static int dce_virtual_connector_encoder_init(struct amdgpu_device *adev,
> +					      int index);
> 
>  /**
>   * dce_virtual_vblank_wait - vblank wait asic callback.
> @@ -274,24 +276,6 @@ static bool dce_virtual_crtc_mode_fixup(struct
> drm_crtc *crtc,
>  				     const struct drm_display_mode *mode,
>  				     struct drm_display_mode *adjusted_mode)
> {
> -	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	struct drm_device *dev = crtc->dev;
> -	struct drm_encoder *encoder;
> -
> -	/* assign the encoder to the amdgpu crtc to avoid repeated lookups
> later */
> -	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
> head) {
> -		if (encoder->crtc == crtc) {
> -			amdgpu_crtc->encoder = encoder;
> -			amdgpu_crtc->connector =
> amdgpu_get_connector_for_encoder(encoder);
> -			break;
> -		}
> -	}
> -	if ((amdgpu_crtc->encoder == NULL) || (amdgpu_crtc->connector ==
> NULL)) {
> -		amdgpu_crtc->encoder = NULL;
> -		amdgpu_crtc->connector = NULL;
> -		return false;
> -	}
> -
>  	return true;
>  }
> 
> @@ -370,38 +354,120 @@ static int dce_virtual_early_init(void *handle)
>  	return 0;
>  }
> 
> -static bool dce_virtual_get_connector_info(struct amdgpu_device *adev)
> +static struct drm_encoder *
> +dce_virtual_encoder(struct drm_connector *connector)
>  {
> -	struct amdgpu_i2c_bus_rec ddc_bus;
> -	struct amdgpu_router router;
> -	struct amdgpu_hpd hpd;
> +	int enc_id = connector->encoder_ids[0];
> +	struct drm_encoder *encoder;
> +	int i;
> +
> +	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
> +		if (connector->encoder_ids[i] == 0)
> +			break;
> +
> +		encoder = drm_encoder_find(connector->dev, connector-
> >encoder_ids[i]);
> +		if (!encoder)
> +			continue;
> 
> -	/* look up gpio for ddc, hpd */
> -	ddc_bus.valid = false;
> -	hpd.hpd = AMDGPU_HPD_NONE;
> -	/* needed for aux chan transactions */
> -	ddc_bus.hpd = hpd.hpd;
> +		if (encoder->encoder_type ==
> DRM_MODE_ENCODER_VIRTUAL)
> +			return encoder;
> +	}
> 
> -	memset(&router, 0, sizeof(router));
> -	router.ddc_valid = false;
> -	router.cd_valid = false;
> -	amdgpu_display_add_connector(adev,
> -				      0,
> -				      ATOM_DEVICE_CRT1_SUPPORT,
> -				      DRM_MODE_CONNECTOR_VIRTUAL,
> &ddc_bus,
> -				      CONNECTOR_OBJECT_ID_VIRTUAL,
> -				      &hpd,
> -				      &router);
> +	/* pick the first one */
> +	if (enc_id)
> +		return drm_encoder_find(connector->dev, enc_id);
> +	return NULL;
> +}
> +
> +static int dce_virtual_get_modes(struct drm_connector *connector) {
> +	struct drm_device *dev = connector->dev;
> +	struct drm_display_mode *mode = NULL;
> +	unsigned i;
> +	static const struct mode_size {
> +		int w;
> +		int h;
> +	} common_modes[17] = {
> +		{ 640,  480},
> +		{ 720,  480},
> +		{ 800,  600},
> +		{ 848,  480},
> +		{1024,  768},
> +		{1152,  768},
> +		{1280,  720},
> +		{1280,  800},
> +		{1280,  854},
> +		{1280,  960},
> +		{1280, 1024},
> +		{1440,  900},
> +		{1400, 1050},
> +		{1680, 1050},
> +		{1600, 1200},
> +		{1920, 1080},
> +		{1920, 1200}
> +	};
> +
> +	for (i = 0; i < 17; i++) {
> +		mode = drm_cvt_mode(dev, common_modes[i].w,
> common_modes[i].h, 60, false, false, false);
> +		drm_mode_probed_add(connector, mode);
> +	}
> 
> -	amdgpu_display_add_encoder(adev,
> ENCODER_VIRTUAL_ENUM_VIRTUAL,
> -
> 	ATOM_DEVICE_CRT1_SUPPORT,
> -							0);
> +	return 0;
> +}
> 
> -	amdgpu_link_encoder_connector(adev->ddev);
> +static int dce_virtual_mode_valid(struct drm_connector *connector,
> +				  struct drm_display_mode *mode)
> +{
> +	return MODE_OK;
> +}
> 
> -	return true;
> +static int
> +dce_virtual_dpms(struct drm_connector *connector, int mode) {
> +	return 0;
>  }
> 
> +static enum drm_connector_status
> +dce_virtual_detect(struct drm_connector *connector, bool force) {
> +	return connector_status_connected;
> +}
> +
> +static int
> +dce_virtual_set_property(struct drm_connector *connector,
> +			 struct drm_property *property,
> +			 uint64_t val)
> +{
> +	return 0;
> +}
> +
> +static void dce_virtual_destroy(struct drm_connector *connector) {
> +	drm_connector_unregister(connector);
> +	drm_connector_cleanup(connector);
> +	kfree(connector);
> +}
> +
> +static void dce_virtual_force(struct drm_connector *connector) {
> +	return;
> +}
> +
> +static const struct drm_connector_helper_funcs
> dce_virtual_connector_helper_funcs = {
> +	.get_modes = dce_virtual_get_modes,
> +	.mode_valid = dce_virtual_mode_valid,
> +	.best_encoder = dce_virtual_encoder,
> +};
> +
> +static const struct drm_connector_funcs dce_virtual_connector_funcs = {
> +	.dpms = dce_virtual_dpms,
> +	.detect = dce_virtual_detect,
> +	.fill_modes = drm_helper_probe_single_connector_modes,
> +	.set_property = dce_virtual_set_property,
> +	.destroy = dce_virtual_destroy,
> +	.force = dce_virtual_force,
> +};
> +
>  static int dce_virtual_sw_init(void *handle)  {
>  	int r, i;
> @@ -430,16 +496,16 @@ static int dce_virtual_sw_init(void *handle)
>  	adev->ddev->mode_config.max_width = 16384;
>  	adev->ddev->mode_config.max_height = 16384;
> 
> -	/* allocate crtcs */
> +	/* allocate crtcs, encoders, connectors */
>  	for (i = 0; i < adev->mode_info.num_crtc; i++) {
>  		r = dce_virtual_crtc_init(adev, i);
>  		if (r)
>  			return r;
> +		r = dce_virtual_connector_encoder_init(adev, i);
> +		if (r)
> +			return r;
>  	}
> 
> -	dce_virtual_get_connector_info(adev);
> -	amdgpu_print_display_setup(adev->ddev);
> -
>  	drm_kms_helper_poll_init(adev->ddev);
> 
>  	adev->mode_info.mode_config_initialized = true; @@ -540,8 +606,8
> @@ static void dce_virtual_encoder_commit(struct drm_encoder *encoder)
> 
>  static void
>  dce_virtual_encoder_mode_set(struct drm_encoder *encoder,
> -		      struct drm_display_mode *mode,
> -		      struct drm_display_mode *adjusted_mode)
> +			     struct drm_display_mode *mode,
> +			     struct drm_display_mode *adjusted_mode)
>  {
>  	return;
>  }
> @@ -561,10 +627,6 @@ static bool dce_virtual_encoder_mode_fixup(struct
> drm_encoder *encoder,
>  				    const struct drm_display_mode *mode,
>  				    struct drm_display_mode *adjusted_mode)
> {
> -
> -	/* set the active encoder to connector routing */
> -	amdgpu_encoder_set_active_device(encoder);
> -
>  	return true;
>  }
> 
> @@ -590,45 +652,40 @@ static const struct drm_encoder_funcs
> dce_virtual_encoder_funcs = {
>  	.destroy = dce_virtual_encoder_destroy,  };
> 
> -static void dce_virtual_encoder_add(struct amdgpu_device *adev,
> -				 uint32_t encoder_enum,
> -				 uint32_t supported_device,
> -				 u16 caps)
> +static int dce_virtual_connector_encoder_init(struct amdgpu_device *adev,
> +					      int index)
>  {
> -	struct drm_device *dev = adev->ddev;
>  	struct drm_encoder *encoder;
> -	struct amdgpu_encoder *amdgpu_encoder;
> -
> -	/* see if we already added it */
> -	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
> head) {
> -		amdgpu_encoder = to_amdgpu_encoder(encoder);
> -		if (amdgpu_encoder->encoder_enum == encoder_enum) {
> -			amdgpu_encoder->devices |= supported_device;
> -			return;
> -		}
> +	struct drm_connector *connector;
> 
> +	/* add a new encoder */
> +	encoder = kzalloc(sizeof(struct drm_encoder), GFP_KERNEL);
> +	if (!encoder) {
> +		kfree(connector);
> +		return -ENOMEM;
>  	}
> +	encoder->possible_crtcs = 1 << index;
> +	drm_encoder_init(adev->ddev, encoder,
> &dce_virtual_encoder_funcs,
> +			 DRM_MODE_ENCODER_VIRTUAL, NULL);
> +	drm_encoder_helper_add(encoder,
> &dce_virtual_encoder_helper_funcs);
> 
> -	/* add a new one */
> -	amdgpu_encoder = kzalloc(sizeof(struct amdgpu_encoder),
> GFP_KERNEL);
> -	if (!amdgpu_encoder)
> -		return;
> +	connector = kzalloc(sizeof(struct drm_connector), GFP_KERNEL);
> +	if (!connector)
> +		return -ENOMEM;
> 
> -	encoder = &amdgpu_encoder->base;
> -	encoder->possible_crtcs = 0x1;
> -	amdgpu_encoder->enc_priv = NULL;
> -	amdgpu_encoder->encoder_enum = encoder_enum;
> -	amdgpu_encoder->encoder_id = (encoder_enum &
> OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
> -	amdgpu_encoder->devices = supported_device;
> -	amdgpu_encoder->rmx_type = RMX_OFF;
> -	amdgpu_encoder->underscan_type = UNDERSCAN_OFF;
> -	amdgpu_encoder->is_ext_encoder = false;
> -	amdgpu_encoder->caps = caps;
> -
> -	drm_encoder_init(dev, encoder, &dce_virtual_encoder_funcs,
> -					 DRM_MODE_ENCODER_VIRTUAL,
> NULL);
> -	drm_encoder_helper_add(encoder,
> &dce_virtual_encoder_helper_funcs);
> -	DRM_INFO("[FM]encoder: %d is VIRTUAL\n", amdgpu_encoder-
> >encoder_id);
> +	/* add a new connector */
> +	drm_connector_init(adev->ddev, connector,
> &dce_virtual_connector_funcs,
> +			   DRM_MODE_CONNECTOR_VIRTUAL);
> +	drm_connector_helper_add(connector,
> &dce_virtual_connector_helper_funcs);
> +	connector->display_info.subpixel_order = SubPixelHorizontalRGB;
> +	connector->interlace_allowed = false;
> +	connector->doublescan_allowed = false;
> +	drm_connector_register(connector);
> +
> +	/* link them */
> +	drm_mode_connector_attach_encoder(connector, encoder);
> +
> +	return 0;
>  }
> 
>  static const struct amdgpu_display_funcs dce_virtual_display_funcs = { @@
> -644,8 +701,8 @@ static const struct amdgpu_display_funcs
> dce_virtual_display_funcs = {
>  	.hpd_get_gpio_reg = &dce_virtual_hpd_get_gpio_reg,
>  	.page_flip = &dce_virtual_page_flip,
>  	.page_flip_get_scanoutpos = &dce_virtual_crtc_get_scanoutpos,
> -	.add_encoder = &dce_virtual_encoder_add,
> -	.add_connector = &amdgpu_connector_add,
> +	.add_encoder = NULL,
> +	.add_connector = NULL,
>  	.stop_mc_access = &dce_virtual_stop_mc_access,
>  	.resume_mc_access = &dce_virtual_resume_mc_access,  };
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling
       [not found]     ` <1475255328-21598-3-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:23       ` Deng, Emily
  2016-10-08  8:23       ` Deng, Emily
  1 sibling, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:23 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling
> 
> We handle the virtual interrupts from a timer so no need to try an look like
> we are handling IV ring events.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 109 +++++++++++++++--------
> --------
>  1 file changed, 54 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 8163622..29e0ce0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -39,9 +39,6 @@
> 
>  static void dce_virtual_set_display_funcs(struct amdgpu_device *adev);
> static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev); -static
> int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
> -				  struct amdgpu_irq_src *source,
> -				  struct amdgpu_iv_entry *entry);
> 
>  /**
>   * dce_virtual_vblank_wait - vblank wait asic callback.
> @@ -659,14 +656,64 @@ static void dce_virtual_set_display_funcs(struct
> amdgpu_device *adev)
>  		adev->mode_info.funcs = &dce_virtual_display_funcs;  }
> 
> +static int dce_virtual_pageflip(struct amdgpu_device *adev,
> +				unsigned crtc_id)
> +{
> +	unsigned long flags;
> +	struct amdgpu_crtc *amdgpu_crtc;
> +	struct amdgpu_flip_work *works;
> +
> +	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
> +
> +	if (crtc_id >= adev->mode_info.num_crtc) {
> +		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
> +		return -EINVAL;
> +	}
> +
> +	/* IRQ could occur when in initial stage */
> +	if (amdgpu_crtc == NULL)
> +		return 0;
> +
> +	spin_lock_irqsave(&adev->ddev->event_lock, flags);
> +	works = amdgpu_crtc->pflip_works;
> +	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
> +		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
> +			"AMDGPU_FLIP_SUBMITTED(%d)\n",
> +			amdgpu_crtc->pflip_status,
> +			AMDGPU_FLIP_SUBMITTED);
> +		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> +		return 0;
> +	}
> +
> +	/* page flip completed. clean up */
> +	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
> +	amdgpu_crtc->pflip_works = NULL;
> +
> +	/* wakeup usersapce */
> +	if (works->event)
> +		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works-
> >event);
> +
> +	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> +
> +	drm_crtc_vblank_put(&amdgpu_crtc->base);
> +	schedule_work(&works->unpin_work);
> +
> +	return 0;
> +}
> +
>  static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer
> *vblank_timer)  {
> -	struct amdgpu_mode_info *mode_info = container_of(vblank_timer,
> struct amdgpu_mode_info ,vblank_timer);
> -	struct amdgpu_device *adev = container_of(mode_info, struct
> amdgpu_device ,mode_info);
> +	struct amdgpu_mode_info *mode_info =
> +		container_of(vblank_timer, struct amdgpu_mode_info ,
> vblank_timer);
> +	struct amdgpu_device *adev =
> +		container_of(mode_info, struct amdgpu_device ,
> mode_info);
>  	unsigned crtc = 0;
> +
>  	drm_handle_vblank(adev->ddev, crtc);
> -	dce_virtual_pageflip_irq(adev, NULL, NULL);
> -	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
> +	dce_virtual_pageflip(adev, crtc);
> +	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD),
> +		      HRTIMER_MODE_REL);
> +
>  	return HRTIMER_NORESTART;
>  }
> 
> @@ -710,54 +757,6 @@ static int dce_virtual_set_crtc_irq_state(struct
> amdgpu_device *adev,
>  	return 0;
>  }
> 
> -static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
> -				  struct amdgpu_irq_src *source,
> -				  struct amdgpu_iv_entry *entry)
> -{
> -	unsigned long flags;
> -	unsigned crtc_id = 0;
> -	struct amdgpu_crtc *amdgpu_crtc;
> -	struct amdgpu_flip_work *works;
> -
> -	crtc_id = 0;
> -	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
> -
> -	if (crtc_id >= adev->mode_info.num_crtc) {
> -		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
> -		return -EINVAL;
> -	}
> -
> -	/* IRQ could occur when in initial stage */
> -	if (amdgpu_crtc == NULL)
> -		return 0;
> -
> -	spin_lock_irqsave(&adev->ddev->event_lock, flags);
> -	works = amdgpu_crtc->pflip_works;
> -	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
> -		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
> -			"AMDGPU_FLIP_SUBMITTED(%d)\n",
> -			amdgpu_crtc->pflip_status,
> -			AMDGPU_FLIP_SUBMITTED);
> -		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> -		return 0;
> -	}
> -
> -	/* page flip completed. clean up */
> -	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
> -	amdgpu_crtc->pflip_works = NULL;
> -
> -	/* wakeup usersapce */
> -	if (works->event)
> -		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works-
> >event);
> -
> -	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> -
> -	drm_crtc_vblank_put(&amdgpu_crtc->base);
> -	schedule_work(&works->unpin_work);
> -
> -	return 0;
> -}
> -
>  static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
>  	.set = dce_virtual_set_crtc_irq_state,
>  	.process = NULL,
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 6/7] drm/amdgpu: rename amdgpu_whether_enable_virtual_display
       [not found]     ` <1475255328-21598-6-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
@ 2016-10-08  8:23       ` Deng, Emily
  0 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:23 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 6/7] drm/amdgpu: rename
> amdgpu_whether_enable_virtual_display
> 
> to match the other functions in that file.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 99a15ca..13caa52 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1231,7 +1231,7 @@ int amdgpu_ip_block_version_cmp(struct
> amdgpu_device *adev,
>  	return 1;
>  }
> 
> -static void amdgpu_whether_enable_virtual_display(struct amdgpu_device
> *adev)
> +static void amdgpu_device_enable_virtual_display(struct amdgpu_device
> +*adev)
>  {
>  	adev->enable_virtual_display = false;
> 
> @@ -1261,7 +1261,7 @@ static int amdgpu_early_init(struct
> amdgpu_device *adev)  {
>  	int i, r;
> 
> -	amdgpu_whether_enable_virtual_display(adev);
> +	amdgpu_device_enable_virtual_display(adev);
> 
>  	switch (adev->asic_type) {
>  	case CHIP_TOPAZ:
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling
       [not found]     ` <1475255328-21598-3-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
  2016-10-08  8:23       ` Deng, Emily
@ 2016-10-08  8:23       ` Deng, Emily
  1 sibling, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:23 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling
> 
> We handle the virtual interrupts from a timer so no need to try an look like
> we are handling IV ring events.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 109 +++++++++++++++--------
> --------
>  1 file changed, 54 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 8163622..29e0ce0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -39,9 +39,6 @@
> 
>  static void dce_virtual_set_display_funcs(struct amdgpu_device *adev);
> static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev); -static
> int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
> -				  struct amdgpu_irq_src *source,
> -				  struct amdgpu_iv_entry *entry);
> 
>  /**
>   * dce_virtual_vblank_wait - vblank wait asic callback.
> @@ -659,14 +656,64 @@ static void dce_virtual_set_display_funcs(struct
> amdgpu_device *adev)
>  		adev->mode_info.funcs = &dce_virtual_display_funcs;  }
> 
> +static int dce_virtual_pageflip(struct amdgpu_device *adev,
> +				unsigned crtc_id)
> +{
> +	unsigned long flags;
> +	struct amdgpu_crtc *amdgpu_crtc;
> +	struct amdgpu_flip_work *works;
> +
> +	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
> +
> +	if (crtc_id >= adev->mode_info.num_crtc) {
> +		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
> +		return -EINVAL;
> +	}
> +
> +	/* IRQ could occur when in initial stage */
> +	if (amdgpu_crtc == NULL)
> +		return 0;
> +
> +	spin_lock_irqsave(&adev->ddev->event_lock, flags);
> +	works = amdgpu_crtc->pflip_works;
> +	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
> +		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
> +			"AMDGPU_FLIP_SUBMITTED(%d)\n",
> +			amdgpu_crtc->pflip_status,
> +			AMDGPU_FLIP_SUBMITTED);
> +		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> +		return 0;
> +	}
> +
> +	/* page flip completed. clean up */
> +	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
> +	amdgpu_crtc->pflip_works = NULL;
> +
> +	/* wakeup usersapce */
> +	if (works->event)
> +		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works-
> >event);
> +
> +	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> +
> +	drm_crtc_vblank_put(&amdgpu_crtc->base);
> +	schedule_work(&works->unpin_work);
> +
> +	return 0;
> +}
> +
>  static enum hrtimer_restart dce_virtual_vblank_timer_handle(struct hrtimer
> *vblank_timer)  {
> -	struct amdgpu_mode_info *mode_info = container_of(vblank_timer,
> struct amdgpu_mode_info ,vblank_timer);
> -	struct amdgpu_device *adev = container_of(mode_info, struct
> amdgpu_device ,mode_info);
> +	struct amdgpu_mode_info *mode_info =
> +		container_of(vblank_timer, struct amdgpu_mode_info ,
> vblank_timer);
> +	struct amdgpu_device *adev =
> +		container_of(mode_info, struct amdgpu_device ,
> mode_info);
>  	unsigned crtc = 0;
> +
>  	drm_handle_vblank(adev->ddev, crtc);
> -	dce_virtual_pageflip_irq(adev, NULL, NULL);
> -	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD), HRTIMER_MODE_REL);
> +	dce_virtual_pageflip(adev, crtc);
> +	hrtimer_start(vblank_timer, ktime_set(0,
> DCE_VIRTUAL_VBLANK_PERIOD),
> +		      HRTIMER_MODE_REL);
> +
>  	return HRTIMER_NORESTART;
>  }
> 
> @@ -710,54 +757,6 @@ static int dce_virtual_set_crtc_irq_state(struct
> amdgpu_device *adev,
>  	return 0;
>  }
> 
> -static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
> -				  struct amdgpu_irq_src *source,
> -				  struct amdgpu_iv_entry *entry)
> -{
> -	unsigned long flags;
> -	unsigned crtc_id = 0;
> -	struct amdgpu_crtc *amdgpu_crtc;
> -	struct amdgpu_flip_work *works;
> -
> -	crtc_id = 0;
> -	amdgpu_crtc = adev->mode_info.crtcs[crtc_id];
> -
> -	if (crtc_id >= adev->mode_info.num_crtc) {
> -		DRM_ERROR("invalid pageflip crtc %d\n", crtc_id);
> -		return -EINVAL;
> -	}
> -
> -	/* IRQ could occur when in initial stage */
> -	if (amdgpu_crtc == NULL)
> -		return 0;
> -
> -	spin_lock_irqsave(&adev->ddev->event_lock, flags);
> -	works = amdgpu_crtc->pflip_works;
> -	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
> -		DRM_DEBUG_DRIVER("amdgpu_crtc->pflip_status = %d != "
> -			"AMDGPU_FLIP_SUBMITTED(%d)\n",
> -			amdgpu_crtc->pflip_status,
> -			AMDGPU_FLIP_SUBMITTED);
> -		spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> -		return 0;
> -	}
> -
> -	/* page flip completed. clean up */
> -	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
> -	amdgpu_crtc->pflip_works = NULL;
> -
> -	/* wakeup usersapce */
> -	if (works->event)
> -		drm_crtc_send_vblank_event(&amdgpu_crtc->base, works-
> >event);
> -
> -	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
> -
> -	drm_crtc_vblank_put(&amdgpu_crtc->base);
> -	schedule_work(&works->unpin_work);
> -
> -	return 0;
> -}
> -
>  static const struct amdgpu_irq_src_funcs dce_virtual_crtc_irq_funcs = {
>  	.set = dce_virtual_set_crtc_irq_state,
>  	.process = NULL,
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs
       [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
                     ` (6 preceding siblings ...)
  2016-09-30 17:52   ` [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs Christian König
@ 2016-10-08  8:24   ` Deng, Emily
  7 siblings, 0 replies; 16+ messages in thread
From: Deng, Emily @ 2016-10-08  8:24 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Deucher, Alexander

Reviewed-By: Emily Deng <Emily.Deng@amd.com>

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Saturday, October 01, 2016 1:09 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs
> 
> Never used.
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 35 ++++++-----------------------
> ---
>  1 file changed, 6 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> index 359fe56..cf43caa 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
> @@ -209,10 +209,9 @@ static void dce_virtual_crtc_dpms(struct drm_crtc
> *crtc, int mode)
>  	switch (mode) {
>  	case DRM_MODE_DPMS_ON:
>  		amdgpu_crtc->enabled = true;
> -		/* Make sure VBLANK and PFLIP interrupts are still enabled */
> +		/* Make sure VBLANK interrupts are still enabled */
>  		type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc-
> >crtc_id);
>  		amdgpu_irq_update(adev, &adev->crtc_irq, type);
> -		amdgpu_irq_update(adev, &adev->pageflip_irq, type);
>  		drm_vblank_on(dev, amdgpu_crtc->crtc_id);
>  		break;
>  	case DRM_MODE_DPMS_STANDBY:
> @@ -672,8 +671,8 @@ static enum hrtimer_restart
> dce_virtual_vblank_timer_handle(struct hrtimer *vbla  }
> 
>  static void dce_virtual_set_crtc_vblank_interrupt_state(struct
> amdgpu_device *adev,
> -						     int crtc,
> -						     enum
> amdgpu_interrupt_state state)
> +							int crtc,
> +							enum
> amdgpu_interrupt_state state)
>  {
>  	if (crtc >= adev->mode_info.num_crtc) {
>  		DRM_DEBUG("invalid crtc %d\n", crtc); @@ -697,9 +696,9
> @@ static void dce_virtual_set_crtc_vblank_interrupt_state(struct
> amdgpu_device *ad
> 
> 
>  static int dce_virtual_set_crtc_irq_state(struct amdgpu_device *adev,
> -                                       struct amdgpu_irq_src *source,
> -                                       unsigned type,
> -                                       enum amdgpu_interrupt_state state)
> +					  struct amdgpu_irq_src *source,
> +					  unsigned type,
> +					  enum amdgpu_interrupt_state state)
>  {
>  	switch (type) {
>  	case AMDGPU_CRTC_IRQ_VBLANK1:
> @@ -726,20 +725,6 @@ static int dce_virtual_crtc_irq(struct
> amdgpu_device *adev,
>  	return 0;
>  }
> 
> -static int dce_virtual_set_pageflip_irq_state(struct amdgpu_device *adev,
> -					    struct amdgpu_irq_src *src,
> -					    unsigned type,
> -					    enum amdgpu_interrupt_state
> state)
> -{
> -	if (type >= adev->mode_info.num_crtc) {
> -		DRM_ERROR("invalid pageflip crtc %d\n", type);
> -		return -EINVAL;
> -	}
> -	DRM_DEBUG("[FM]set pageflip irq type %d state %d\n", type, state);
> -
> -	return 0;
> -}
> -
>  static int dce_virtual_pageflip_irq(struct amdgpu_device *adev,
>  				  struct amdgpu_irq_src *source,
>  				  struct amdgpu_iv_entry *entry)
> @@ -793,17 +778,9 @@ static const struct amdgpu_irq_src_funcs
> dce_virtual_crtc_irq_funcs = {
>  	.process = dce_virtual_crtc_irq,
>  };
> 
> -static const struct amdgpu_irq_src_funcs dce_virtual_pageflip_irq_funcs = {
> -	.set = dce_virtual_set_pageflip_irq_state,
> -	.process = dce_virtual_pageflip_irq,
> -};
> -
>  static void dce_virtual_set_irq_funcs(struct amdgpu_device *adev)  {
>  	adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
>  	adev->crtc_irq.funcs = &dce_virtual_crtc_irq_funcs;
> -
> -	adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
> -	adev->pageflip_irq.funcs = &dce_virtual_pageflip_irq_funcs;
>  }
> 
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2016-10-08  8:24 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-30 17:08 [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs Alex Deucher
     [not found] ` <1475255328-21598-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-09-30 17:08   ` [PATCH 2/7] drm/amdgpu/virtual_dce: no need to an irq process callback Alex Deucher
     [not found]     ` <1475255328-21598-2-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:22       ` Deng, Emily
2016-09-30 17:08   ` [PATCH 3/7] drm/amdgpu/virtual_dce: clean up interrupt handling Alex Deucher
     [not found]     ` <1475255328-21598-3-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:23       ` Deng, Emily
2016-10-08  8:23       ` Deng, Emily
2016-09-30 17:08   ` [PATCH 4/7] drm/amdgpu: simplify encoder and connector setup Alex Deucher
     [not found]     ` <1475255328-21598-4-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:22       ` Deng, Emily
2016-09-30 17:08   ` [PATCH 5/7] Revert "drm/amdgpu: Add virtual connector and encoder macros." Alex Deucher
     [not found]     ` <1475255328-21598-5-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:22       ` Deng, Emily
2016-09-30 17:08   ` [PATCH 6/7] drm/amdgpu: rename amdgpu_whether_enable_virtual_display Alex Deucher
     [not found]     ` <1475255328-21598-6-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:23       ` Deng, Emily
2016-09-30 17:08   ` [PATCH 7/7] drm/amd/amdgpu: For virtual display, enable multi crtcs. (v3) Alex Deucher
     [not found]     ` <1475255328-21598-7-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org>
2016-10-08  8:22       ` Deng, Emily
2016-09-30 17:52   ` [PATCH 1/7] drm/amdgpu/virtual_dce: drop pageflip_irq funcs Christian König
2016-10-08  8:24   ` Deng, Emily

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.