All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] drm/dp: i2c-over-aux short write support
@ 2015-03-13 16:13 ville.syrjala
  2015-03-13 16:13 ` [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/ ville.syrjala
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

This series tries to implement support for short i2c-over-aux writes.

I did notice that my monitor (HP ZR24w) does support DDC/CI so I was
able to do some writes, but I only saw native defers instead of i2c
defers/short acks. So I've not actually been able to test this.

Another complication with DDC/CI seems to be that the monitor doesn't
seem to like the default 100kHz bus speed. I had to drop it to 10kHz
to make it reliable (my dongle supports bus speed control fortunately).
Currently we have no standard way to configure the bus speed AFAICS,
so at least with this monitor DDC/CI is a bit useless.

I tried to fix up radeon and tegra too. gma500 I left alone since it's
not using dp i2c helper.

Ville Syrjälä (5):
  drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/
  drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
  drm/radeon: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
  drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes
  drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE
    requests

 drivers/gpu/drm/drm_dp_helper.c      | 42 ++++++++++++++++++++++++++++++++----
 drivers/gpu/drm/i915/intel_dp.c      |  1 +
 drivers/gpu/drm/radeon/atombios_dp.c |  1 +
 drivers/gpu/drm/tegra/dpaux.c        |  3 ++-
 include/drm/drm_dp_helper.h          |  2 +-
 5 files changed, 43 insertions(+), 6 deletions(-)

-- 
2.0.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/
  2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
@ 2015-03-13 16:13 ` ville.syrjala
  2015-03-18 11:49   ` [Intel-gfx] " Jani Nikula
  2015-03-13 16:13 ` [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE ville.syrjala
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Rename the I2C_STATUS request to I2C_WRITE_STATUS_UPDATE to match the
spec.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/tegra/dpaux.c | 2 +-
 include/drm/drm_dp_helper.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
index d6b55e3..b1617af 100644
--- a/drivers/gpu/drm/tegra/dpaux.c
+++ b/drivers/gpu/drm/tegra/dpaux.c
@@ -152,7 +152,7 @@ static ssize_t tegra_dpaux_transfer(struct drm_dp_aux *aux,
 
 		break;
 
-	case DP_AUX_I2C_STATUS:
+	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
 		if (msg->request & DP_AUX_I2C_MOT)
 			value |= DPAUX_DP_AUXCTL_CMD_MOT_RQ;
 		else
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 523f04c..27301f5 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -46,7 +46,7 @@
 
 #define DP_AUX_I2C_WRITE		0x0
 #define DP_AUX_I2C_READ			0x1
-#define DP_AUX_I2C_STATUS		0x2
+#define DP_AUX_I2C_WRITE_STATUS_UPDATE	0x2
 #define DP_AUX_I2C_MOT			0x4
 #define DP_AUX_NATIVE_WRITE		0x8
 #define DP_AUX_NATIVE_READ		0x9
-- 
2.0.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
  2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
  2015-03-13 16:13 ` [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/ ville.syrjala
@ 2015-03-13 16:13 ` ville.syrjala
  2015-03-18 11:52   ` Jani Nikula
  2015-03-13 16:13 ` [PATCH 3/5] drm/radeon: " ville.syrjala
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

When we get an i2c defer or short ack for i2c-over-aux write we need
to switch to WRITE_STATUS_UPDATE to poll for the completion of the
original request.

i915 doesn't try to interpret wht request type apart from separating
reads from writes, and so we should be able to treat this the same as
a normal i2c write.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 33d5877..aed5f26 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -956,6 +956,7 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
 	switch (msg->request & ~DP_AUX_I2C_MOT) {
 	case DP_AUX_NATIVE_WRITE:
 	case DP_AUX_I2C_WRITE:
+	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
 		txsize = msg->size ? HEADER_SIZE + msg->size : BARE_ADDRESS_SIZE;
 		rxsize = 1;
 
-- 
2.0.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 3/5] drm/radeon: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
  2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
  2015-03-13 16:13 ` [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/ ville.syrjala
  2015-03-13 16:13 ` [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE ville.syrjala
@ 2015-03-13 16:13 ` ville.syrjala
  2015-03-13 16:13 ` [PATCH 4/5] drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes ville.syrjala
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, intel-gfx, Christian König

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

When we get an i2c defer or short ack for i2c-over-aux write we need
to switch to WRITE_STATUS_UPDATE to poll for the completion of the
original request.

Looks like radeon doesn't do anything special with the request type,
so hopefully just treating it the same as a i2c write is enough.

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/radeon/atombios_dp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index 8d74de8..9960b69 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -178,6 +178,7 @@ radeon_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
 	switch (msg->request & ~DP_AUX_I2C_MOT) {
 	case DP_AUX_NATIVE_WRITE:
 	case DP_AUX_I2C_WRITE:
+	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
 		/* The atom implementation only supports writes with a max payload of
 		 * 12 bytes since it uses 4 bits for the total count (header + payload)
 		 * in the parameter space.  The atom interface supports 16 byte
-- 
2.0.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH 4/5] drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes
  2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
                   ` (2 preceding siblings ...)
  2015-03-13 16:13 ` [PATCH 3/5] drm/radeon: " ville.syrjala
@ 2015-03-13 16:13 ` ville.syrjala
  2015-03-13 16:13 ` [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests ville.syrjala
       [not found] ` <CADnq5_NZyw-vY761GyrDapWjdY94Jk-2+6uoj906yG3BPWBsNQ@mail.gmail.com>
  5 siblings, 0 replies; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, Terje Bergström

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

A address-only I2C_WRITE can't be replied with a short i2c ack, but I
suppose it could be replied with an i2c defer. So the code should be
prepared for an address-only I2C_WRITE_STATUS_UPDATE.

Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: "Terje Bergström" <tbergstrom@nvidia.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/tegra/dpaux.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
index b1617af..a48687a 100644
--- a/drivers/gpu/drm/tegra/dpaux.c
+++ b/drivers/gpu/drm/tegra/dpaux.c
@@ -122,6 +122,7 @@ static ssize_t tegra_dpaux_transfer(struct drm_dp_aux *aux,
 	 */
 	if (msg->size < 1) {
 		switch (msg->request & ~DP_AUX_I2C_MOT) {
+		case DP_AUX_I2C_WRITE_STATUS_UPDATE:
 		case DP_AUX_I2C_WRITE:
 		case DP_AUX_I2C_READ:
 			value = DPAUX_DP_AUXCTL_CMD_ADDRESS_ONLY;
-- 
2.0.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests
  2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
                   ` (3 preceding siblings ...)
  2015-03-13 16:13 ` [PATCH 4/5] drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes ville.syrjala
@ 2015-03-13 16:13 ` ville.syrjala
  2015-03-14  5:02   ` shuang.he
                     ` (2 more replies)
       [not found] ` <CADnq5_NZyw-vY761GyrDapWjdY94Jk-2+6uoj906yG3BPWBsNQ@mail.gmail.com>
  5 siblings, 3 replies; 13+ messages in thread
From: ville.syrjala @ 2015-03-13 16:13 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

When an i2c WRITE gets an i2c defer or short i2c ack reply, we are
supposed to switch the request from I2C_WRITE to I2C_WRITE_STATUS_UPDATE
when we continue to poll for the completion of the request.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/drm_dp_helper.c | 41 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index d5368ea..4db81a6 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -422,6 +422,25 @@ static u32 drm_dp_i2c_functionality(struct i2c_adapter *adapter)
 	       I2C_FUNC_10BIT_ADDR;
 }
 
+static void drm_dp_i2c_msg_set_request(struct drm_dp_aux_msg *msg,
+				       const struct i2c_msg *i2c_msg)
+{
+	msg->request = (i2c_msg->flags & I2C_M_RD) ?
+		DP_AUX_I2C_READ : DP_AUX_I2C_WRITE;
+	msg->request |= DP_AUX_I2C_MOT;
+}
+
+static void drm_dp_i2c_msg_write_status_update(struct drm_dp_aux_msg *msg)
+{
+	/*
+	 * In case of i2c defer or short i2c ack reply to a write,
+	 * we need to switch to WRITE_STATUS_UPDATE to drain the
+	 * rest of the message
+	 */
+	if ((msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_I2C_WRITE)
+		msg->request |= DP_AUX_I2C_WRITE_STATUS_UPDATE;
+}
+
 /*
  * Transfer a single I2C-over-AUX message and handle various error conditions,
  * retrying the transaction as appropriate.  It is assumed that the
@@ -490,6 +509,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
 			 * Both native ACK and I2C ACK replies received. We
 			 * can assume the transfer was successful.
 			 */
+			if (ret != msg->size)
+				drm_dp_i2c_msg_write_status_update(msg);
 			return ret;
 
 		case DP_AUX_I2C_REPLY_NACK:
@@ -501,6 +522,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
 			DRM_DEBUG_KMS("I2C defer\n");
 			aux->i2c_defer_count++;
 			usleep_range(400, 500);
+			drm_dp_i2c_msg_write_status_update(msg);
 			continue;
 
 		default:
@@ -566,10 +588,7 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
 
 	for (i = 0; i < num; i++) {
 		msg.address = msgs[i].addr;
-		msg.request = (msgs[i].flags & I2C_M_RD) ?
-			DP_AUX_I2C_READ :
-			DP_AUX_I2C_WRITE;
-		msg.request |= DP_AUX_I2C_MOT;
+		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
 		/* Send a bare address packet to start the transaction.
 		 * Zero sized messages specify an address only (bare
 		 * address) transaction.
@@ -577,6 +596,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
 		msg.buffer = NULL;
 		msg.size = 0;
 		err = drm_dp_i2c_do_msg(aux, &msg);
+
+		/*
+		 * Reset msg.request in case in case it got
+		 * changed into a WRITE_STATUS_UPDATE.
+		 */
+		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
+
 		if (err < 0)
 			break;
 		/* We want each transaction to be as large as possible, but
@@ -589,6 +615,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
 			msg.size = min(transfer_size, msgs[i].len - j);
 
 			err = drm_dp_i2c_drain_msg(aux, &msg);
+
+			/*
+			 * Reset msg.request in case in case it got
+			 * changed into a WRITE_STATUS_UPDATE.
+			 */
+			drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
+
 			if (err < 0)
 				break;
 			transfer_size = err;
-- 
2.0.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests
  2015-03-13 16:13 ` [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests ville.syrjala
@ 2015-03-14  5:02   ` shuang.he
  2015-03-17 15:22   ` Jani Nikula
  2015-03-18 12:05   ` Jani Nikula
  2 siblings, 0 replies; 13+ messages in thread
From: shuang.he @ 2015-03-14  5:02 UTC (permalink / raw)
  To: shuang.he, ethan.gao, intel-gfx, ville.syrjala

Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 5948
-------------------------------------Summary-------------------------------------
Platform          Delta          drm-intel-nightly          Series Applied
PNV                                  276/276              276/276
ILK                                  303/303              303/303
SNB                 -1              279/279              278/279
IVB                                  343/343              343/343
BYT                                  287/287              287/287
HSW                                  363/363              363/363
BDW                                  308/308              308/308
-------------------------------------Detailed-------------------------------------
Platform  Test                                drm-intel-nightly          Series Applied
*SNB  igt_gem_persistent_relocs_forked-interruptible-faulting-reloc-thrash-inactive      PASS(2)      DMESG_WARN(1)PASS(1)
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests
  2015-03-13 16:13 ` [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests ville.syrjala
  2015-03-14  5:02   ` shuang.he
@ 2015-03-17 15:22   ` Jani Nikula
  2015-03-19  9:21     ` Ville Syrjälä
  2015-03-18 12:05   ` Jani Nikula
  2 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2015-03-17 15:22 UTC (permalink / raw)
  To: ville.syrjala, dri-devel; +Cc: intel-gfx

On Fri, 13 Mar 2015, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> When an i2c WRITE gets an i2c defer or short i2c ack reply, we are
> supposed to switch the request from I2C_WRITE to I2C_WRITE_STATUS_UPDATE
> when we continue to poll for the completion of the request.

As I said IRL, it's a bit unfortunate that setting and resetting of
DP_AUX_I2C_WRITE_STATUS_UPDATE happen at different levels of the
abstraction. But I can live with that.

We also have another problem with reporting short writes in i915,
hopefully fixed by [1]. Before that gets fixed, can't really r-b.

BR,
Jani.


[1] http://mid.gmane.org/1426605534-5780-1-git-send-email-jani.nikula@intel.com

>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/drm_dp_helper.c | 41 +++++++++++++++++++++++++++++++++++++----
>  1 file changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
> index d5368ea..4db81a6 100644
> --- a/drivers/gpu/drm/drm_dp_helper.c
> +++ b/drivers/gpu/drm/drm_dp_helper.c
> @@ -422,6 +422,25 @@ static u32 drm_dp_i2c_functionality(struct i2c_adapter *adapter)
>  	       I2C_FUNC_10BIT_ADDR;
>  }
>  
> +static void drm_dp_i2c_msg_set_request(struct drm_dp_aux_msg *msg,
> +				       const struct i2c_msg *i2c_msg)
> +{
> +	msg->request = (i2c_msg->flags & I2C_M_RD) ?
> +		DP_AUX_I2C_READ : DP_AUX_I2C_WRITE;
> +	msg->request |= DP_AUX_I2C_MOT;
> +}
> +
> +static void drm_dp_i2c_msg_write_status_update(struct drm_dp_aux_msg *msg)
> +{
> +	/*
> +	 * In case of i2c defer or short i2c ack reply to a write,
> +	 * we need to switch to WRITE_STATUS_UPDATE to drain the
> +	 * rest of the message
> +	 */
> +	if ((msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_I2C_WRITE)
> +		msg->request |= DP_AUX_I2C_WRITE_STATUS_UPDATE;
> +}
> +
>  /*
>   * Transfer a single I2C-over-AUX message and handle various error conditions,
>   * retrying the transaction as appropriate.  It is assumed that the
> @@ -490,6 +509,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
>  			 * Both native ACK and I2C ACK replies received. We
>  			 * can assume the transfer was successful.
>  			 */
> +			if (ret != msg->size)
> +				drm_dp_i2c_msg_write_status_update(msg);
>  			return ret;
>  
>  		case DP_AUX_I2C_REPLY_NACK:
> @@ -501,6 +522,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
>  			DRM_DEBUG_KMS("I2C defer\n");
>  			aux->i2c_defer_count++;
>  			usleep_range(400, 500);
> +			drm_dp_i2c_msg_write_status_update(msg);
>  			continue;
>  
>  		default:
> @@ -566,10 +588,7 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  
>  	for (i = 0; i < num; i++) {
>  		msg.address = msgs[i].addr;
> -		msg.request = (msgs[i].flags & I2C_M_RD) ?
> -			DP_AUX_I2C_READ :
> -			DP_AUX_I2C_WRITE;
> -		msg.request |= DP_AUX_I2C_MOT;
> +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
>  		/* Send a bare address packet to start the transaction.
>  		 * Zero sized messages specify an address only (bare
>  		 * address) transaction.
> @@ -577,6 +596,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  		msg.buffer = NULL;
>  		msg.size = 0;
>  		err = drm_dp_i2c_do_msg(aux, &msg);
> +
> +		/*
> +		 * Reset msg.request in case in case it got
> +		 * changed into a WRITE_STATUS_UPDATE.
> +		 */
> +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> +
>  		if (err < 0)
>  			break;
>  		/* We want each transaction to be as large as possible, but
> @@ -589,6 +615,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  			msg.size = min(transfer_size, msgs[i].len - j);
>  
>  			err = drm_dp_i2c_drain_msg(aux, &msg);
> +
> +			/*
> +			 * Reset msg.request in case in case it got
> +			 * changed into a WRITE_STATUS_UPDATE.
> +			 */
> +			drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> +
>  			if (err < 0)
>  				break;
>  			transfer_size = err;
> -- 
> 2.0.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/
  2015-03-13 16:13 ` [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/ ville.syrjala
@ 2015-03-18 11:49   ` Jani Nikula
  0 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2015-03-18 11:49 UTC (permalink / raw)
  To: ville.syrjala, dri-devel; +Cc: intel-gfx

On Fri, 13 Mar 2015, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Rename the I2C_STATUS request to I2C_WRITE_STATUS_UPDATE to match the
> spec.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  drivers/gpu/drm/tegra/dpaux.c | 2 +-
>  include/drm/drm_dp_helper.h   | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
> index d6b55e3..b1617af 100644
> --- a/drivers/gpu/drm/tegra/dpaux.c
> +++ b/drivers/gpu/drm/tegra/dpaux.c
> @@ -152,7 +152,7 @@ static ssize_t tegra_dpaux_transfer(struct drm_dp_aux *aux,
>  
>  		break;
>  
> -	case DP_AUX_I2C_STATUS:
> +	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
>  		if (msg->request & DP_AUX_I2C_MOT)
>  			value |= DPAUX_DP_AUXCTL_CMD_MOT_RQ;
>  		else
> diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
> index 523f04c..27301f5 100644
> --- a/include/drm/drm_dp_helper.h
> +++ b/include/drm/drm_dp_helper.h
> @@ -46,7 +46,7 @@
>  
>  #define DP_AUX_I2C_WRITE		0x0
>  #define DP_AUX_I2C_READ			0x1
> -#define DP_AUX_I2C_STATUS		0x2
> +#define DP_AUX_I2C_WRITE_STATUS_UPDATE	0x2
>  #define DP_AUX_I2C_MOT			0x4
>  #define DP_AUX_NATIVE_WRITE		0x8
>  #define DP_AUX_NATIVE_READ		0x9
> -- 
> 2.0.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
  2015-03-13 16:13 ` [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE ville.syrjala
@ 2015-03-18 11:52   ` Jani Nikula
  0 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2015-03-18 11:52 UTC (permalink / raw)
  To: ville.syrjala, dri-devel; +Cc: intel-gfx

On Fri, 13 Mar 2015, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> When we get an i2c defer or short ack for i2c-over-aux write we need
> to switch to WRITE_STATUS_UPDATE to poll for the completion of the
> original request.
>
> i915 doesn't try to interpret wht request type apart from separating
> reads from writes, and so we should be able to treat this the same as
> a normal i2c write.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

Probably needs a refresh due to context change due to my short writes
patch though.

> ---
>  drivers/gpu/drm/i915/intel_dp.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 33d5877..aed5f26 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -956,6 +956,7 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
>  	switch (msg->request & ~DP_AUX_I2C_MOT) {
>  	case DP_AUX_NATIVE_WRITE:
>  	case DP_AUX_I2C_WRITE:
> +	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
>  		txsize = msg->size ? HEADER_SIZE + msg->size : BARE_ADDRESS_SIZE;
>  		rxsize = 1;
>  
> -- 
> 2.0.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests
  2015-03-13 16:13 ` [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests ville.syrjala
  2015-03-14  5:02   ` shuang.he
  2015-03-17 15:22   ` Jani Nikula
@ 2015-03-18 12:05   ` Jani Nikula
  2 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2015-03-18 12:05 UTC (permalink / raw)
  To: ville.syrjala, dri-devel; +Cc: intel-gfx

On Fri, 13 Mar 2015, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> When an i2c WRITE gets an i2c defer or short i2c ack reply, we are
> supposed to switch the request from I2C_WRITE to I2C_WRITE_STATUS_UPDATE
> when we continue to poll for the completion of the request.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/drm_dp_helper.c | 41 +++++++++++++++++++++++++++++++++++++----
>  1 file changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
> index d5368ea..4db81a6 100644
> --- a/drivers/gpu/drm/drm_dp_helper.c
> +++ b/drivers/gpu/drm/drm_dp_helper.c
> @@ -422,6 +422,25 @@ static u32 drm_dp_i2c_functionality(struct i2c_adapter *adapter)
>  	       I2C_FUNC_10BIT_ADDR;
>  }
>  
> +static void drm_dp_i2c_msg_set_request(struct drm_dp_aux_msg *msg,
> +				       const struct i2c_msg *i2c_msg)
> +{
> +	msg->request = (i2c_msg->flags & I2C_M_RD) ?
> +		DP_AUX_I2C_READ : DP_AUX_I2C_WRITE;
> +	msg->request |= DP_AUX_I2C_MOT;
> +}
> +
> +static void drm_dp_i2c_msg_write_status_update(struct drm_dp_aux_msg *msg)
> +{
> +	/*
> +	 * In case of i2c defer or short i2c ack reply to a write,
> +	 * we need to switch to WRITE_STATUS_UPDATE to drain the
> +	 * rest of the message
> +	 */
> +	if ((msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_I2C_WRITE)
> +		msg->request |= DP_AUX_I2C_WRITE_STATUS_UPDATE;

This only works because DP_AUX_I2C_WRITE == 0, and it may not be obvious
to the casual reader that DP_AUX_I2C_WRITE_STATUS_UPDATE is a
replacement not an addition to DP_AUX_I2C_WRITE.

Whether you fix that or not, this is

Reviewed-by: Jani Nikula <jani.nikula@intel.com>



> +}
> +
>  /*
>   * Transfer a single I2C-over-AUX message and handle various error conditions,
>   * retrying the transaction as appropriate.  It is assumed that the
> @@ -490,6 +509,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
>  			 * Both native ACK and I2C ACK replies received. We
>  			 * can assume the transfer was successful.
>  			 */
> +			if (ret != msg->size)
> +				drm_dp_i2c_msg_write_status_update(msg);
>  			return ret;
>  
>  		case DP_AUX_I2C_REPLY_NACK:
> @@ -501,6 +522,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
>  			DRM_DEBUG_KMS("I2C defer\n");
>  			aux->i2c_defer_count++;
>  			usleep_range(400, 500);
> +			drm_dp_i2c_msg_write_status_update(msg);
>  			continue;
>  
>  		default:
> @@ -566,10 +588,7 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  
>  	for (i = 0; i < num; i++) {
>  		msg.address = msgs[i].addr;
> -		msg.request = (msgs[i].flags & I2C_M_RD) ?
> -			DP_AUX_I2C_READ :
> -			DP_AUX_I2C_WRITE;
> -		msg.request |= DP_AUX_I2C_MOT;
> +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
>  		/* Send a bare address packet to start the transaction.
>  		 * Zero sized messages specify an address only (bare
>  		 * address) transaction.
> @@ -577,6 +596,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  		msg.buffer = NULL;
>  		msg.size = 0;
>  		err = drm_dp_i2c_do_msg(aux, &msg);
> +
> +		/*
> +		 * Reset msg.request in case in case it got
> +		 * changed into a WRITE_STATUS_UPDATE.
> +		 */
> +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> +
>  		if (err < 0)
>  			break;
>  		/* We want each transaction to be as large as possible, but
> @@ -589,6 +615,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
>  			msg.size = min(transfer_size, msgs[i].len - j);
>  
>  			err = drm_dp_i2c_drain_msg(aux, &msg);
> +
> +			/*
> +			 * Reset msg.request in case in case it got
> +			 * changed into a WRITE_STATUS_UPDATE.
> +			 */
> +			drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> +
>  			if (err < 0)
>  				break;
>  			transfer_size = err;
> -- 
> 2.0.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Fwd: [PATCH 0/5] drm/dp: i2c-over-aux short write support
       [not found] ` <CADnq5_NZyw-vY761GyrDapWjdY94Jk-2+6uoj906yG3BPWBsNQ@mail.gmail.com>
@ 2015-03-18 13:26   ` Alex Deucher
  0 siblings, 0 replies; 13+ messages in thread
From: Alex Deucher @ 2015-03-18 13:26 UTC (permalink / raw)
  To: Maling list - DRI developers

fwd to the list.


---------- Forwarded message ----------
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, Mar 16, 2015 at 9:49 AM
Subject: Re: [PATCH 0/5] drm/dp: i2c-over-aux short write support
To: Ville Syrjälä <ville.syrjala@linux.intel.com>


On Fri, Mar 13, 2015 at 12:13 PM,  <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> This series tries to implement support for short i2c-over-aux writes.
>
> I did notice that my monitor (HP ZR24w) does support DDC/CI so I was
> able to do some writes, but I only saw native defers instead of i2c
> defers/short acks. So I've not actually been able to test this.
>
> Another complication with DDC/CI seems to be that the monitor doesn't
> seem to like the default 100kHz bus speed. I had to drop it to 10kHz
> to make it reliable (my dongle supports bus speed control fortunately).
> Currently we have no standard way to configure the bus speed AFAICS,
> so at least with this monitor DDC/CI is a bit useless.
>
> I tried to fix up radeon and tegra too. gma500 I left alone since it's
> not using dp i2c helper.
>
> Ville Syrjälä (5):
>   drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/
>   drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
>   drm/radeon: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE
>   drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes
>   drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE
>     requests

Patches 1, 3, 5 are:
Acked-by: Alex Deucher <alexander.deucher@amd.com>


>
>  drivers/gpu/drm/drm_dp_helper.c      | 42 ++++++++++++++++++++++++++++++++----
>  drivers/gpu/drm/i915/intel_dp.c      |  1 +
>  drivers/gpu/drm/radeon/atombios_dp.c |  1 +
>  drivers/gpu/drm/tegra/dpaux.c        |  3 ++-
>  include/drm/drm_dp_helper.h          |  2 +-
>  5 files changed, 43 insertions(+), 6 deletions(-)
>
> --
> 2.0.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests
  2015-03-17 15:22   ` Jani Nikula
@ 2015-03-19  9:21     ` Ville Syrjälä
  0 siblings, 0 replies; 13+ messages in thread
From: Ville Syrjälä @ 2015-03-19  9:21 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, dri-devel

On Tue, Mar 17, 2015 at 05:22:08PM +0200, Jani Nikula wrote:
> On Fri, 13 Mar 2015, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > When an i2c WRITE gets an i2c defer or short i2c ack reply, we are
> > supposed to switch the request from I2C_WRITE to I2C_WRITE_STATUS_UPDATE
> > when we continue to poll for the completion of the request.
> 
> As I said IRL, it's a bit unfortunate that setting and resetting of
> DP_AUX_I2C_WRITE_STATUS_UPDATE happen at different levels of the
> abstraction. But I can live with that.
> 
> We also have another problem with reporting short writes in i915,
> hopefully fixed by [1]. Before that gets fixed, can't really r-b.
> 
> BR,
> Jani.
> 
> 
> [1] http://mid.gmane.org/1426605534-5780-1-git-send-email-jani.nikula@intel.com

BTW I notice now that radeon seems to have that same problem. I won't
try to fix that, so just a FYI for the radeon folks...

> 
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/drm_dp_helper.c | 41 +++++++++++++++++++++++++++++++++++++----
> >  1 file changed, 37 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
> > index d5368ea..4db81a6 100644
> > --- a/drivers/gpu/drm/drm_dp_helper.c
> > +++ b/drivers/gpu/drm/drm_dp_helper.c
> > @@ -422,6 +422,25 @@ static u32 drm_dp_i2c_functionality(struct i2c_adapter *adapter)
> >  	       I2C_FUNC_10BIT_ADDR;
> >  }
> >  
> > +static void drm_dp_i2c_msg_set_request(struct drm_dp_aux_msg *msg,
> > +				       const struct i2c_msg *i2c_msg)
> > +{
> > +	msg->request = (i2c_msg->flags & I2C_M_RD) ?
> > +		DP_AUX_I2C_READ : DP_AUX_I2C_WRITE;
> > +	msg->request |= DP_AUX_I2C_MOT;
> > +}
> > +
> > +static void drm_dp_i2c_msg_write_status_update(struct drm_dp_aux_msg *msg)
> > +{
> > +	/*
> > +	 * In case of i2c defer or short i2c ack reply to a write,
> > +	 * we need to switch to WRITE_STATUS_UPDATE to drain the
> > +	 * rest of the message
> > +	 */
> > +	if ((msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_I2C_WRITE)
> > +		msg->request |= DP_AUX_I2C_WRITE_STATUS_UPDATE;
> > +}
> > +
> >  /*
> >   * Transfer a single I2C-over-AUX message and handle various error conditions,
> >   * retrying the transaction as appropriate.  It is assumed that the
> > @@ -490,6 +509,8 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
> >  			 * Both native ACK and I2C ACK replies received. We
> >  			 * can assume the transfer was successful.
> >  			 */
> > +			if (ret != msg->size)
> > +				drm_dp_i2c_msg_write_status_update(msg);
> >  			return ret;
> >  
> >  		case DP_AUX_I2C_REPLY_NACK:
> > @@ -501,6 +522,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
> >  			DRM_DEBUG_KMS("I2C defer\n");
> >  			aux->i2c_defer_count++;
> >  			usleep_range(400, 500);
> > +			drm_dp_i2c_msg_write_status_update(msg);
> >  			continue;
> >  
> >  		default:
> > @@ -566,10 +588,7 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
> >  
> >  	for (i = 0; i < num; i++) {
> >  		msg.address = msgs[i].addr;
> > -		msg.request = (msgs[i].flags & I2C_M_RD) ?
> > -			DP_AUX_I2C_READ :
> > -			DP_AUX_I2C_WRITE;
> > -		msg.request |= DP_AUX_I2C_MOT;
> > +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> >  		/* Send a bare address packet to start the transaction.
> >  		 * Zero sized messages specify an address only (bare
> >  		 * address) transaction.
> > @@ -577,6 +596,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
> >  		msg.buffer = NULL;
> >  		msg.size = 0;
> >  		err = drm_dp_i2c_do_msg(aux, &msg);
> > +
> > +		/*
> > +		 * Reset msg.request in case in case it got
> > +		 * changed into a WRITE_STATUS_UPDATE.
> > +		 */
> > +		drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> > +
> >  		if (err < 0)
> >  			break;
> >  		/* We want each transaction to be as large as possible, but
> > @@ -589,6 +615,13 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
> >  			msg.size = min(transfer_size, msgs[i].len - j);
> >  
> >  			err = drm_dp_i2c_drain_msg(aux, &msg);
> > +
> > +			/*
> > +			 * Reset msg.request in case in case it got
> > +			 * changed into a WRITE_STATUS_UPDATE.
> > +			 */
> > +			drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
> > +
> >  			if (err < 0)
> >  				break;
> >  			transfer_size = err;
> > -- 
> > 2.0.5
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> -- 
> Jani Nikula, Intel Open Source Technology Center

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2015-03-19  9:21 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-13 16:13 [PATCH 0/5] drm/dp: i2c-over-aux short write support ville.syrjala
2015-03-13 16:13 ` [PATCH 1/5] drm/dp: s/I2C_STATUS/I2C_WRITE_STATUS_UPDATE/ ville.syrjala
2015-03-18 11:49   ` [Intel-gfx] " Jani Nikula
2015-03-13 16:13 ` [PATCH 2/5] drm/i915: Handle DP_AUX_I2C_WRITE_STATUS_UPDATE ville.syrjala
2015-03-18 11:52   ` Jani Nikula
2015-03-13 16:13 ` [PATCH 3/5] drm/radeon: " ville.syrjala
2015-03-13 16:13 ` [PATCH 4/5] drm/tegra: Handle I2C_WRITE_STATUS_UPDATE for address only writes ville.syrjala
2015-03-13 16:13 ` [PATCH 5/5] drm/dp: Use I2C_WRITE_STATUS_UPDATE to drain partial I2C_WRITE requests ville.syrjala
2015-03-14  5:02   ` shuang.he
2015-03-17 15:22   ` Jani Nikula
2015-03-19  9:21     ` Ville Syrjälä
2015-03-18 12:05   ` Jani Nikula
     [not found] ` <CADnq5_NZyw-vY761GyrDapWjdY94Jk-2+6uoj906yG3BPWBsNQ@mail.gmail.com>
2015-03-18 13:26   ` Fwd: [PATCH 0/5] drm/dp: i2c-over-aux short write support Alex Deucher

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.