From: Marek Vasut <marex-ynQEQJNshbs@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Yuan Yao <yao.yuan-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org,
mark.rutland-5wv7dgnIgG8@public.gmane.org,
shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 1/3] i2c: add DMA support for freescale i2c driver
Date: Thu, 27 Feb 2014 21:39:35 +0100 [thread overview]
Message-ID: <201402272139.36076.marex@denx.de> (raw)
In-Reply-To: <1393481115-22136-2-git-send-email-yao.yuan-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
On Thursday, February 27, 2014 at 07:05:14 AM, Yuan Yao wrote:
[...]
> *****/ @@ -63,6 +68,9 @@
> /* Default value */
> #define IMX_I2C_BIT_RATE 100000 /* 100kHz */
>
> +/* enable DMA if transfer size is bigger than this threshold */
> +#define IMX_I2C_DMA_THRESHOLD 16
So what's the unit here , potatoes or beers or what ? I suppose it's bytes , but
please make it explicit in the comment ...
[...]
> static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> @@ -193,6 +216,7 @@ static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -203,6 +227,7 @@ static const struct imx_i2c_hwdata imx21_i2c_hwdata =
> { .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -213,6 +238,7 @@ static struct imx_i2c_hwdata vf610_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(vf610_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W1C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_0,
> + .has_dma_support = true,
So why exactly don't we have a DT prop for determining whether the controller
has DMA support ?
What about the other controllers, do they not support DMA for some specific
reason? Please elaborate on that, thank you !
[...]
> +static void i2c_imx_dma_tx_callback(void *arg)
[...]
> +static int i2c_imx_dma_tx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
> +static void i2c_imx_dma_rx_callback(void *arg)
[...]
> +static int i2c_imx_dma_rx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
Looks like there's quite a bit of code duplication in the four functions above,
can you not unify them ?
Also, can the DMA not do full-duplex operation ? What I see here is just half-
duplex operations , one for RX and the other one for TX .
> +static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
> +{
> + struct imx_i2c_dma *dma = i2c_imx->dma;
> + struct dma_chan *dma_chan;
> +
> + dma_chan = dma->chan_tx;
> + dma->chan_tx = NULL;
> + dma->buf_tx = 0;
> + dma->len_tx = 0;
> + dma_release_channel(dma_chan);
> +
> + dma_chan = dma->chan_rx;
> + dma->chan_tx = NULL;
> + dma->buf_rx = 0;
> + dma->len_rx = 0;
> + dma_release_channel(dma_chan);
You must make _DEAD_ _SURE_ this function is not ever called while the DMA is
still active. In your case, I have a feeling that's not handled.
> +}
> /** Functions for IMX I2C adapter driver
> ***************************************
> **************************************************************************
> *****/
>
> @@ -425,7 +600,8 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
> return IRQ_NONE;
> }
>
> -static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_pio_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
>
> @@ -458,7 +634,56 @@ static int i2c_imx_write(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> -static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
> + int result, timeout=1000;
> + unsigned int temp = 0;
> +
> + reinit_completion(&i2c_imx->dma->cmd_complete);
> + result = i2c_imx_dma_tx(i2c_imx, msgs);
> + if(result)
> + return result;
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp |= I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write slave address */
> + imx_i2c_write_reg(msgs->addr << 1, i2c_imx, IMX_I2C_I2DR);
> + result = wait_for_completion_interruptible_timeout(
> + &i2c_imx->dma->cmd_complete,
> + msecs_to_jiffies(1000));
Pull the magic constant of 1000 out and #define it as some I2C_IMX_DMA_TIMEOUT
please .
> + if (result == 0)
> + return -ETIMEDOUT;
> +
> + /* waiting for Transfer complete. */
> + while(timeout--) {
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
> + if (temp & 0x80)
> + break;
> + udelay(10);
> + }
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp &= ~I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write the last byte */
> + imx_i2c_write_reg(msgs->buf[msgs->len-1], i2c_imx, IMX_I2C_I2DR);
> + result = i2c_imx_trx_complete(i2c_imx);
> + if (result)
> + return result;
> +
> + result = i2c_imx_acked(i2c_imx);
> + if (result)
> + return result;
> +
> + return 0;
> +}
> +
> +static int i2c_imx_pio_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
> unsigned int temp;
> @@ -518,6 +743,80 @@ static int i2c_imx_read(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> +static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
Looks like almost an duplication as well...
Besides, full-duplex DMA operation is missing, please explain why.
THanks!
WARNING: multiple messages have this Message-ID (diff)
From: marex@denx.de (Marek Vasut)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/3] i2c: add DMA support for freescale i2c driver
Date: Thu, 27 Feb 2014 21:39:35 +0100 [thread overview]
Message-ID: <201402272139.36076.marex@denx.de> (raw)
In-Reply-To: <1393481115-22136-2-git-send-email-yao.yuan@freescale.com>
On Thursday, February 27, 2014 at 07:05:14 AM, Yuan Yao wrote:
[...]
> *****/ @@ -63,6 +68,9 @@
> /* Default value */
> #define IMX_I2C_BIT_RATE 100000 /* 100kHz */
>
> +/* enable DMA if transfer size is bigger than this threshold */
> +#define IMX_I2C_DMA_THRESHOLD 16
So what's the unit here , potatoes or beers or what ? I suppose it's bytes , but
please make it explicit in the comment ...
[...]
> static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> @@ -193,6 +216,7 @@ static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -203,6 +227,7 @@ static const struct imx_i2c_hwdata imx21_i2c_hwdata =
> { .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -213,6 +238,7 @@ static struct imx_i2c_hwdata vf610_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(vf610_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W1C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_0,
> + .has_dma_support = true,
So why exactly don't we have a DT prop for determining whether the controller
has DMA support ?
What about the other controllers, do they not support DMA for some specific
reason? Please elaborate on that, thank you !
[...]
> +static void i2c_imx_dma_tx_callback(void *arg)
[...]
> +static int i2c_imx_dma_tx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
> +static void i2c_imx_dma_rx_callback(void *arg)
[...]
> +static int i2c_imx_dma_rx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
Looks like there's quite a bit of code duplication in the four functions above,
can you not unify them ?
Also, can the DMA not do full-duplex operation ? What I see here is just half-
duplex operations , one for RX and the other one for TX .
> +static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
> +{
> + struct imx_i2c_dma *dma = i2c_imx->dma;
> + struct dma_chan *dma_chan;
> +
> + dma_chan = dma->chan_tx;
> + dma->chan_tx = NULL;
> + dma->buf_tx = 0;
> + dma->len_tx = 0;
> + dma_release_channel(dma_chan);
> +
> + dma_chan = dma->chan_rx;
> + dma->chan_tx = NULL;
> + dma->buf_rx = 0;
> + dma->len_rx = 0;
> + dma_release_channel(dma_chan);
You must make _DEAD_ _SURE_ this function is not ever called while the DMA is
still active. In your case, I have a feeling that's not handled.
> +}
> /** Functions for IMX I2C adapter driver
> ***************************************
> **************************************************************************
> *****/
>
> @@ -425,7 +600,8 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
> return IRQ_NONE;
> }
>
> -static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_pio_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
>
> @@ -458,7 +634,56 @@ static int i2c_imx_write(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> -static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
> + int result, timeout=1000;
> + unsigned int temp = 0;
> +
> + reinit_completion(&i2c_imx->dma->cmd_complete);
> + result = i2c_imx_dma_tx(i2c_imx, msgs);
> + if(result)
> + return result;
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp |= I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write slave address */
> + imx_i2c_write_reg(msgs->addr << 1, i2c_imx, IMX_I2C_I2DR);
> + result = wait_for_completion_interruptible_timeout(
> + &i2c_imx->dma->cmd_complete,
> + msecs_to_jiffies(1000));
Pull the magic constant of 1000 out and #define it as some I2C_IMX_DMA_TIMEOUT
please .
> + if (result == 0)
> + return -ETIMEDOUT;
> +
> + /* waiting for Transfer complete. */
> + while(timeout--) {
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
> + if (temp & 0x80)
> + break;
> + udelay(10);
> + }
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp &= ~I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write the last byte */
> + imx_i2c_write_reg(msgs->buf[msgs->len-1], i2c_imx, IMX_I2C_I2DR);
> + result = i2c_imx_trx_complete(i2c_imx);
> + if (result)
> + return result;
> +
> + result = i2c_imx_acked(i2c_imx);
> + if (result)
> + return result;
> +
> + return 0;
> +}
> +
> +static int i2c_imx_pio_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
> unsigned int temp;
> @@ -518,6 +743,80 @@ static int i2c_imx_read(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> +static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
Looks like almost an duplication as well...
Besides, full-duplex DMA operation is missing, please explain why.
THanks!
WARNING: multiple messages have this Message-ID (diff)
From: Marek Vasut <marex@denx.de>
To: linux-arm-kernel@lists.infradead.org
Cc: Yuan Yao <yao.yuan@freescale.com>,
wsa@the-dreams.de, mark.rutland@arm.com, shawn.guo@linaro.org,
linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org
Subject: Re: [PATCH 1/3] i2c: add DMA support for freescale i2c driver
Date: Thu, 27 Feb 2014 21:39:35 +0100 [thread overview]
Message-ID: <201402272139.36076.marex@denx.de> (raw)
In-Reply-To: <1393481115-22136-2-git-send-email-yao.yuan@freescale.com>
On Thursday, February 27, 2014 at 07:05:14 AM, Yuan Yao wrote:
[...]
> *****/ @@ -63,6 +68,9 @@
> /* Default value */
> #define IMX_I2C_BIT_RATE 100000 /* 100kHz */
>
> +/* enable DMA if transfer size is bigger than this threshold */
> +#define IMX_I2C_DMA_THRESHOLD 16
So what's the unit here , potatoes or beers or what ? I suppose it's bytes , but
please make it explicit in the comment ...
[...]
> static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> @@ -193,6 +216,7 @@ static const struct imx_i2c_hwdata imx1_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -203,6 +227,7 @@ static const struct imx_i2c_hwdata imx21_i2c_hwdata =
> { .ndivs = ARRAY_SIZE(imx_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W0C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_1,
> + .has_dma_support = false,
>
> };
>
> @@ -213,6 +238,7 @@ static struct imx_i2c_hwdata vf610_i2c_hwdata = {
> .ndivs = ARRAY_SIZE(vf610_i2c_clk_div),
> .i2sr_clr_opcode = I2SR_CLR_OPCODE_W1C,
> .i2cr_ien_opcode = I2CR_IEN_OPCODE_0,
> + .has_dma_support = true,
So why exactly don't we have a DT prop for determining whether the controller
has DMA support ?
What about the other controllers, do they not support DMA for some specific
reason? Please elaborate on that, thank you !
[...]
> +static void i2c_imx_dma_tx_callback(void *arg)
[...]
> +static int i2c_imx_dma_tx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
> +static void i2c_imx_dma_rx_callback(void *arg)
[...]
> +static int i2c_imx_dma_rx(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +{
[...]
Looks like there's quite a bit of code duplication in the four functions above,
can you not unify them ?
Also, can the DMA not do full-duplex operation ? What I see here is just half-
duplex operations , one for RX and the other one for TX .
> +static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
> +{
> + struct imx_i2c_dma *dma = i2c_imx->dma;
> + struct dma_chan *dma_chan;
> +
> + dma_chan = dma->chan_tx;
> + dma->chan_tx = NULL;
> + dma->buf_tx = 0;
> + dma->len_tx = 0;
> + dma_release_channel(dma_chan);
> +
> + dma_chan = dma->chan_rx;
> + dma->chan_tx = NULL;
> + dma->buf_rx = 0;
> + dma->len_rx = 0;
> + dma_release_channel(dma_chan);
You must make _DEAD_ _SURE_ this function is not ever called while the DMA is
still active. In your case, I have a feeling that's not handled.
> +}
> /** Functions for IMX I2C adapter driver
> ***************************************
> **************************************************************************
> *****/
>
> @@ -425,7 +600,8 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
> return IRQ_NONE;
> }
>
> -static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_pio_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
>
> @@ -458,7 +634,56 @@ static int i2c_imx_write(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> -static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg
> *msgs) +static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
> + int result, timeout=1000;
> + unsigned int temp = 0;
> +
> + reinit_completion(&i2c_imx->dma->cmd_complete);
> + result = i2c_imx_dma_tx(i2c_imx, msgs);
> + if(result)
> + return result;
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp |= I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write slave address */
> + imx_i2c_write_reg(msgs->addr << 1, i2c_imx, IMX_I2C_I2DR);
> + result = wait_for_completion_interruptible_timeout(
> + &i2c_imx->dma->cmd_complete,
> + msecs_to_jiffies(1000));
Pull the magic constant of 1000 out and #define it as some I2C_IMX_DMA_TIMEOUT
please .
> + if (result == 0)
> + return -ETIMEDOUT;
> +
> + /* waiting for Transfer complete. */
> + while(timeout--) {
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
> + if (temp & 0x80)
> + break;
> + udelay(10);
> + }
> +
> + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> + temp &= ~I2CR_DMAEN;
> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
> +
> + /* write the last byte */
> + imx_i2c_write_reg(msgs->buf[msgs->len-1], i2c_imx, IMX_I2C_I2DR);
> + result = i2c_imx_trx_complete(i2c_imx);
> + if (result)
> + return result;
> +
> + result = i2c_imx_acked(i2c_imx);
> + if (result)
> + return result;
> +
> + return 0;
> +}
> +
> +static int i2c_imx_pio_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> {
> int i, result;
> unsigned int temp;
> @@ -518,6 +743,80 @@ static int i2c_imx_read(struct imx_i2c_struct
> *i2c_imx, struct i2c_msg *msgs) return 0;
> }
>
> +static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
> + struct i2c_msg *msgs)
> +{
Looks like almost an duplication as well...
Besides, full-duplex DMA operation is missing, please explain why.
THanks!
next prev parent reply other threads:[~2014-02-27 20:39 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 6:05 [PATCH 0/3] i2c: add DMA support for freescale i2c driver Yuan Yao
2014-02-27 6:05 ` Yuan Yao
2014-02-27 6:05 ` Yuan Yao
[not found] ` <1393481115-22136-1-git-send-email-yao.yuan-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2014-02-27 6:05 ` [PATCH 1/3] " Yuan Yao
2014-02-27 6:05 ` Yuan Yao
2014-02-27 6:05 ` Yuan Yao
[not found] ` <1393481115-22136-2-git-send-email-yao.yuan-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2014-02-27 12:55 ` Shawn Guo
2014-02-27 12:55 ` Shawn Guo
2014-02-27 12:55 ` Shawn Guo
2014-02-27 13:21 ` Shawn Guo
2014-02-27 13:21 ` Shawn Guo
2014-02-27 13:21 ` Shawn Guo
2014-02-27 20:39 ` Marek Vasut [this message]
2014-02-27 20:39 ` Marek Vasut
2014-02-27 20:39 ` Marek Vasut
2014-02-28 2:13 ` Shawn Guo
2014-02-28 2:13 ` Shawn Guo
2014-02-28 2:13 ` Shawn Guo
[not found] ` <20140228021300.GJ13537-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2014-02-28 2:23 ` Shawn Guo
2014-02-28 2:23 ` Shawn Guo
2014-02-28 2:23 ` Shawn Guo
2014-02-28 8:57 ` Marek Vasut
2014-02-28 8:57 ` Marek Vasut
2014-02-28 5:19 ` Yao Yuan
2014-02-28 5:19 ` Yao Yuan
2014-02-28 5:19 ` Yao Yuan
[not found] ` <3f58a8abdda74100b4f7b14d0c31c90e-AZ66ij2kwaZYLYlmg7qx2OO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-02-28 9:04 ` Marek Vasut
2014-02-28 9:04 ` Marek Vasut
2014-02-28 9:04 ` Marek Vasut
[not found] ` <201402281004.10238.marex-ynQEQJNshbs@public.gmane.org>
2014-02-28 10:59 ` Lothar Waßmann
2014-02-28 10:59 ` Lothar Waßmann
2014-02-28 10:59 ` Lothar Waßmann
[not found] ` <20140228115925.5fe07693-VjFSrY7JcPWvSplVBqRQBQ@public.gmane.org>
2014-02-28 12:00 ` Marek Vasut
2014-02-28 12:00 ` Marek Vasut
2014-02-28 12:00 ` Marek Vasut
2014-02-28 11:36 ` Yao Yuan
2014-02-28 11:36 ` Yao Yuan
2014-02-28 11:36 ` Yao Yuan
2014-02-28 12:03 ` Marek Vasut
2014-02-28 12:03 ` Marek Vasut
2014-03-03 10:23 ` Yao Yuan
2014-03-03 10:23 ` Yao Yuan
2014-03-03 10:23 ` Yao Yuan
[not found] ` <3bbad0af0bc74f04bc386b141dadedb3-AZ66ij2kwaZYLYlmg7qx2OO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-03-03 11:14 ` Marek Vasut
2014-03-03 11:14 ` Marek Vasut
2014-03-03 11:14 ` Marek Vasut
2014-02-27 6:05 ` [PATCH 3/3] Documentation:add " Yuan Yao
2014-02-27 6:05 ` Yuan Yao
2014-02-27 6:05 ` Yuan Yao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201402272139.36076.marex@denx.de \
--to=marex-ynqeqjnshbs@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org \
--cc=yao.yuan-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.