All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Feng Kan <fkan-qTEPVZfXA3Y@public.gmane.org>,
	patches-qTEPVZfXA3Y@public.gmane.org,
	jassisingbrar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Hieu Le <hnle-qTEPVZfXA3Y@public.gmane.org>
Subject: Re: [PATCH 4/6] i2c: busses: add SLIMpro I2C device driver on APM X-Gene platform
Date: Tue, 11 Nov 2014 22:51:36 +0100	[thread overview]
Message-ID: <1894616.4yY7dajl4R@wuerfel> (raw)
In-Reply-To: <1412726809-7525-5-git-send-email-fkan-qTEPVZfXA3Y@public.gmane.org>

On Tuesday 07 October 2014 17:06:47 Feng Kan wrote:
> diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> index 2e45ae3..a03042c 100644
> --- a/drivers/i2c/busses/Kconfig
> +++ b/drivers/i2c/busses/Kconfig
> @@ -1009,6 +1009,15 @@ config I2C_CROS_EC_TUNNEL
>  	  connected there. This will work whatever the interface used to
>  	  talk to the EC (SPI, I2C or LPC).
>  
> +config I2C_XGENE_SLIMPRO
> +	tristate "APM X-Gene SoC I2C SLIMpro devices support"
> +	depends on ARCH_XGENE && XGENE_SLIMPRO_MBOX

Why this dependency on XGENE_SLIMPRO_MBOX?

Better replace it with a dependency on MAILBOX.

> +	} else {
> +		spin_lock_irqsave(&ctx->lock, flags);
> +		ctx->i2c_rx_poll = 1;
> +		for (count = SLIMPRO_I2C_WAIT_COUNT; count > 0; count--) {
> +			if (ctx->i2c_rx_poll == 0)
> +				break;
> +			udelay(100);
> +		}

No, you can't block the CPU for an extended amount of time with
interrupts disabled. Please kill this code.

> +	ctx->resp_msg = data;
> +	if (ctx->mbox_client.tx_block)
> +		init_completion(&ctx->rd_complete);

reinit_completion()?

> +static int slimpro_i2c_blkrd(struct slimpro_i2c_dev *ctx, u32 chip, u32 addr,
> +				u32 addrlen, u32 protocol, u32 readlen,
> +				u32 with_data_len, void *data)
> +{
> +	dma_addr_t paddr;
> +	u32 msg[3];
> +	int rc;
> +
> +	paddr = dma_map_single(ctx->dev, ctx->dma_buffer, readlen,
> +			       DMA_FROM_DEVICE);

ctx->dev is probably the wrong device here. The i2c controller is not
DMA capable itself, you need to have a pointer to the device that actually
performs the DMA here.


> +	/* Request mailbox channel */
> +	cl->dev = &pdev->dev;
> +	cl->rx_callback = slimpro_i2c_rx_cb;
> +	cl->tx_done = slimpro_i2c_tx_done;
> +	cl->tx_block = true;
> +	cl->tx_tout = SLIMPRO_OP_TO_MS;
> +	cl->knows_txdone = false;
> +	cl->chan_name = "i2c-slimpro";
> +	ctx->mbox_chan = mbox_request_channel(cl);

This is not the correct interface.

> +	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
> +	if (rc)
> +		dev_warn(&pdev->dev, "Unable to set dma mask\n");

Are you sure that this is the correct device to perform the DMA?

Moreover, the mask doesn't match the usage: the slimpro_i2c_blkrd
function passes in only the lower 32 bit of the address, which would
be DMA_BIT_MASK(32).

> +#ifdef CONFIG_OF
> +static struct of_device_id xgene_slimpro_i2c_id[] = {
> +	{.compatible = "apm,xgene-slimpro-i2c" },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, xgene_slimpro_i2c_dt_ids);
> +#endif
> +
> +static struct platform_driver xgene_slimpro_i2c_driver = {
> +	.probe	= xgene_slimpro_i2c_probe,
> +	.remove	= xgene_slimpro_i2c_remove,
> +	.driver	= {
> +		.name	= XGENE_SLIMPRO_I2C,
> +		.owner	= THIS_MODULE,
> +		.of_match_table = of_match_ptr(xgene_slimpro_i2c_id)
> +	},
> +};

The driver only supports DT, so just drop the #ifdef and the of_match_ptr().

WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/6] i2c: busses: add SLIMpro I2C device driver on APM X-Gene platform
Date: Tue, 11 Nov 2014 22:51:36 +0100	[thread overview]
Message-ID: <1894616.4yY7dajl4R@wuerfel> (raw)
In-Reply-To: <1412726809-7525-5-git-send-email-fkan@apm.com>

On Tuesday 07 October 2014 17:06:47 Feng Kan wrote:
> diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> index 2e45ae3..a03042c 100644
> --- a/drivers/i2c/busses/Kconfig
> +++ b/drivers/i2c/busses/Kconfig
> @@ -1009,6 +1009,15 @@ config I2C_CROS_EC_TUNNEL
>  	  connected there. This will work whatever the interface used to
>  	  talk to the EC (SPI, I2C or LPC).
>  
> +config I2C_XGENE_SLIMPRO
> +	tristate "APM X-Gene SoC I2C SLIMpro devices support"
> +	depends on ARCH_XGENE && XGENE_SLIMPRO_MBOX

Why this dependency on XGENE_SLIMPRO_MBOX?

Better replace it with a dependency on MAILBOX.

> +	} else {
> +		spin_lock_irqsave(&ctx->lock, flags);
> +		ctx->i2c_rx_poll = 1;
> +		for (count = SLIMPRO_I2C_WAIT_COUNT; count > 0; count--) {
> +			if (ctx->i2c_rx_poll == 0)
> +				break;
> +			udelay(100);
> +		}

No, you can't block the CPU for an extended amount of time with
interrupts disabled. Please kill this code.

> +	ctx->resp_msg = data;
> +	if (ctx->mbox_client.tx_block)
> +		init_completion(&ctx->rd_complete);

reinit_completion()?

> +static int slimpro_i2c_blkrd(struct slimpro_i2c_dev *ctx, u32 chip, u32 addr,
> +				u32 addrlen, u32 protocol, u32 readlen,
> +				u32 with_data_len, void *data)
> +{
> +	dma_addr_t paddr;
> +	u32 msg[3];
> +	int rc;
> +
> +	paddr = dma_map_single(ctx->dev, ctx->dma_buffer, readlen,
> +			       DMA_FROM_DEVICE);

ctx->dev is probably the wrong device here. The i2c controller is not
DMA capable itself, you need to have a pointer to the device that actually
performs the DMA here.


> +	/* Request mailbox channel */
> +	cl->dev = &pdev->dev;
> +	cl->rx_callback = slimpro_i2c_rx_cb;
> +	cl->tx_done = slimpro_i2c_tx_done;
> +	cl->tx_block = true;
> +	cl->tx_tout = SLIMPRO_OP_TO_MS;
> +	cl->knows_txdone = false;
> +	cl->chan_name = "i2c-slimpro";
> +	ctx->mbox_chan = mbox_request_channel(cl);

This is not the correct interface.

> +	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
> +	if (rc)
> +		dev_warn(&pdev->dev, "Unable to set dma mask\n");

Are you sure that this is the correct device to perform the DMA?

Moreover, the mask doesn't match the usage: the slimpro_i2c_blkrd
function passes in only the lower 32 bit of the address, which would
be DMA_BIT_MASK(32).

> +#ifdef CONFIG_OF
> +static struct of_device_id xgene_slimpro_i2c_id[] = {
> +	{.compatible = "apm,xgene-slimpro-i2c" },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, xgene_slimpro_i2c_dt_ids);
> +#endif
> +
> +static struct platform_driver xgene_slimpro_i2c_driver = {
> +	.probe	= xgene_slimpro_i2c_probe,
> +	.remove	= xgene_slimpro_i2c_remove,
> +	.driver	= {
> +		.name	= XGENE_SLIMPRO_I2C,
> +		.owner	= THIS_MODULE,
> +		.of_match_table = of_match_ptr(xgene_slimpro_i2c_id)
> +	},
> +};

The driver only supports DT, so just drop the #ifdef and the of_match_ptr().

WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de>
To: linux-arm-kernel@lists.infradead.org
Cc: Feng Kan <fkan@apm.com>,
	patches@apm.com, jassisingbrar@gmail.com,
	=devicetree@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-kernel@vger.kernel.org, Hieu Le <hnle@apm.com>
Subject: Re: [PATCH 4/6] i2c: busses: add SLIMpro I2C device driver on APM X-Gene platform
Date: Tue, 11 Nov 2014 22:51:36 +0100	[thread overview]
Message-ID: <1894616.4yY7dajl4R@wuerfel> (raw)
In-Reply-To: <1412726809-7525-5-git-send-email-fkan@apm.com>

On Tuesday 07 October 2014 17:06:47 Feng Kan wrote:
> diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> index 2e45ae3..a03042c 100644
> --- a/drivers/i2c/busses/Kconfig
> +++ b/drivers/i2c/busses/Kconfig
> @@ -1009,6 +1009,15 @@ config I2C_CROS_EC_TUNNEL
>  	  connected there. This will work whatever the interface used to
>  	  talk to the EC (SPI, I2C or LPC).
>  
> +config I2C_XGENE_SLIMPRO
> +	tristate "APM X-Gene SoC I2C SLIMpro devices support"
> +	depends on ARCH_XGENE && XGENE_SLIMPRO_MBOX

Why this dependency on XGENE_SLIMPRO_MBOX?

Better replace it with a dependency on MAILBOX.

> +	} else {
> +		spin_lock_irqsave(&ctx->lock, flags);
> +		ctx->i2c_rx_poll = 1;
> +		for (count = SLIMPRO_I2C_WAIT_COUNT; count > 0; count--) {
> +			if (ctx->i2c_rx_poll == 0)
> +				break;
> +			udelay(100);
> +		}

No, you can't block the CPU for an extended amount of time with
interrupts disabled. Please kill this code.

> +	ctx->resp_msg = data;
> +	if (ctx->mbox_client.tx_block)
> +		init_completion(&ctx->rd_complete);

reinit_completion()?

> +static int slimpro_i2c_blkrd(struct slimpro_i2c_dev *ctx, u32 chip, u32 addr,
> +				u32 addrlen, u32 protocol, u32 readlen,
> +				u32 with_data_len, void *data)
> +{
> +	dma_addr_t paddr;
> +	u32 msg[3];
> +	int rc;
> +
> +	paddr = dma_map_single(ctx->dev, ctx->dma_buffer, readlen,
> +			       DMA_FROM_DEVICE);

ctx->dev is probably the wrong device here. The i2c controller is not
DMA capable itself, you need to have a pointer to the device that actually
performs the DMA here.


> +	/* Request mailbox channel */
> +	cl->dev = &pdev->dev;
> +	cl->rx_callback = slimpro_i2c_rx_cb;
> +	cl->tx_done = slimpro_i2c_tx_done;
> +	cl->tx_block = true;
> +	cl->tx_tout = SLIMPRO_OP_TO_MS;
> +	cl->knows_txdone = false;
> +	cl->chan_name = "i2c-slimpro";
> +	ctx->mbox_chan = mbox_request_channel(cl);

This is not the correct interface.

> +	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
> +	if (rc)
> +		dev_warn(&pdev->dev, "Unable to set dma mask\n");

Are you sure that this is the correct device to perform the DMA?

Moreover, the mask doesn't match the usage: the slimpro_i2c_blkrd
function passes in only the lower 32 bit of the address, which would
be DMA_BIT_MASK(32).

> +#ifdef CONFIG_OF
> +static struct of_device_id xgene_slimpro_i2c_id[] = {
> +	{.compatible = "apm,xgene-slimpro-i2c" },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, xgene_slimpro_i2c_dt_ids);
> +#endif
> +
> +static struct platform_driver xgene_slimpro_i2c_driver = {
> +	.probe	= xgene_slimpro_i2c_probe,
> +	.remove	= xgene_slimpro_i2c_remove,
> +	.driver	= {
> +		.name	= XGENE_SLIMPRO_I2C,
> +		.owner	= THIS_MODULE,
> +		.of_match_table = of_match_ptr(xgene_slimpro_i2c_id)
> +	},
> +};

The driver only supports DT, so just drop the #ifdef and the of_match_ptr().


  parent reply	other threads:[~2014-11-11 21:51 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-08  0:06 [PATCH 0/6] APM X-Gene platform mailbox and proxy i2c driver Feng Kan
2014-10-08  0:06 ` Feng Kan
2014-10-08  0:06 ` [PATCH 1/6] mailbox: add support for APM X-Gene platform mailbox driver Feng Kan
2014-10-08  0:06   ` Feng Kan
2014-10-08  0:06 ` [PATCH 2/6] Documentation: mailbox: Add APM X-Gene SLIMpro mailbox dts documentation Feng Kan
2014-10-08  0:06   ` Feng Kan
     [not found]   ` <1412726809-7525-3-git-send-email-fkan-qTEPVZfXA3Y@public.gmane.org>
2014-10-08  9:50     ` Mark Rutland
2014-10-08  9:50       ` Mark Rutland
2014-10-08  9:50       ` Mark Rutland
     [not found] ` <1412726809-7525-1-git-send-email-fkan-qTEPVZfXA3Y@public.gmane.org>
2014-10-08  0:06   ` [PATCH 3/6] arm64: dts: mailbox device tree node for APM X-Gene platform Feng Kan
2014-10-08  0:06     ` Feng Kan
2014-10-08  0:06     ` Feng Kan
2014-10-08  0:06 ` [PATCH 4/6] i2c: busses: add SLIMpro I2C device driver on " Feng Kan
2014-10-08  0:06   ` Feng Kan
2014-11-11 20:32   ` Wolfram Sang
2014-11-11 20:32     ` Wolfram Sang
2014-11-17 23:39     ` Feng Kan
2014-11-17 23:39       ` Feng Kan
2015-01-09 18:52     ` Feng Kan
2015-01-09 18:52       ` Feng Kan
     [not found]       ` <CAL85gmB172hgTCHUQ=sshAAYjOwpNKc=YdovjfTFXfnW7LJTLQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 20:42         ` Wolfram Sang
2015-01-09 20:42           ` Wolfram Sang
2015-01-09 20:42           ` Wolfram Sang
     [not found]   ` <1412726809-7525-5-git-send-email-fkan-qTEPVZfXA3Y@public.gmane.org>
2014-11-11 21:51     ` Arnd Bergmann [this message]
2014-11-11 21:51       ` Arnd Bergmann
2014-11-11 21:51       ` Arnd Bergmann
2015-01-09 18:56       ` Feng Kan
2015-01-09 18:56         ` Feng Kan
     [not found]         ` <CAL85gmCOXKiHEO=URrAGBNZpJpen5P5PH1xDoF1-jasj0iDg4Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 19:42           ` Arnd Bergmann
2015-01-09 19:42             ` Arnd Bergmann
2015-01-09 19:42             ` Arnd Bergmann
2015-01-30  1:07       ` Feng Kan
2015-01-30  1:07         ` Feng Kan
2015-01-30  1:07         ` Feng Kan
     [not found]         ` <CAL85gmCuJtS2DMVHc96FtM_nP2++wMXNrrUp0Kvx0qajKsFuCw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-30  6:11           ` Wolfram Sang
2015-01-30  6:11             ` Wolfram Sang
2015-01-30  6:11             ` Wolfram Sang
2015-02-02 22:15             ` Feng Kan
2015-02-02 22:15               ` Feng Kan
2015-02-02 22:15               ` Feng Kan
     [not found]               ` <CAL85gmD+0cJfZoWo8ujmjwy9yaKjNPjJaUm00Vrv5o9kcg-ozA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-02-02 23:16                 ` Wolfram Sang
2015-02-02 23:16                   ` Wolfram Sang
2015-02-02 23:16                   ` Wolfram Sang
2014-10-08  0:06 ` [PATCH 5/6] Documentation: i2c: Add APM X-Gene platform SLIMpro I2C driver documentation Feng Kan
2014-10-08  0:06   ` Feng Kan
     [not found]   ` <1412726809-7525-6-git-send-email-fkan-qTEPVZfXA3Y@public.gmane.org>
2014-10-08 10:11     ` Mark Rutland
2014-10-08 10:11       ` Mark Rutland
2014-10-08 10:11       ` Mark Rutland
2014-11-11 21:40     ` Arnd Bergmann
2014-11-11 21:40       ` Arnd Bergmann
2014-11-11 21:40       ` Arnd Bergmann
2014-10-08  0:06 ` [PATCH 6/6] arm64: dts: add proxy I2C device driver on APM X-Gene platform Feng Kan
2014-10-08  0:06   ` Feng Kan

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=1894616.4yY7dajl4R@wuerfel \
    --to=arnd-r2ngtmty4d4@public.gmane.org \
    --cc==devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=fkan-qTEPVZfXA3Y@public.gmane.org \
    --cc=hnle-qTEPVZfXA3Y@public.gmane.org \
    --cc=jassisingbrar-Re5JQEeQqe8AvxtiuMwx3w@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=patches-qTEPVZfXA3Y@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.