All of lore.kernel.org
 help / color / mirror / Atom feed
From: glen lee <glen.lee@atmel.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Johnny Kim <johnny.kim@atmel.com>,
	Austin Shin <austin.shin@atmel.com>,
	Chris Park <chris.park@atmel.com>, Tony Cho <tony.cho@atmel.com>,
	Leo Kim <leo.kim@atmel.com>, <linux-wireless@vger.kernel.org>,
	<devel@driverdev.osuosl.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 15/20] staging/wilc1000: pass hif operations through initialization
Date: Fri, 13 Nov 2015 16:49:22 +0900	[thread overview]
Message-ID: <56459602.9060707@atmel.com> (raw)
In-Reply-To: <4207649.2OaxOXWCyM@wuerfel>



On 2015년 11월 12일 20:39, Arnd Bergmann wrote:
> On Thursday 12 November 2015 19:05:41 glen lee wrote:
>> Hi arnd,
>>
>> I appreciate the patches.
>> I did test this patch series on h/w which is arm based MCU.
>>   From this patch wilc is not working properly. After downloading firmware, the firmware cannot start and it fails.
>> I double check this patch and the previous one(14/20) which works fine.
>> I cannot find the problem in this patch at the moment. I will see if I can find something,
>> and I'd appreciate if you would help with it.
>>
> I've looked at it some more, but didn't find anything obvious, here are some
> possible things I found:
>
>
>>> -struct wilc_hif_func wilc_hif_sdio = {
>>> -	sdio_init,
>>> -	sdio_deinit,
>>> -	sdio_read_reg,
>>> -	sdio_write_reg,
>>> -	sdio_read,
>>> -	sdio_write,
>>> -	sdio_sync,
>>> -	sdio_clear_int,
>>> -	sdio_read_int,
>>> -	sdio_clear_int_ext,
>>> -	sdio_read_size,
>>> -	sdio_write,
>>> -	sdio_read,
>>> -	sdio_sync_ext,
>>> -
>>> -	sdio_set_max_speed,
>>> -	sdio_set_default_speed,
>>> +const struct wilc_hif_func wilc_hif_sdio = {
>>> +	.hif_init = sdio_init,
>>> +	.hif_deinit = sdio_deinit,
>>> +	.hif_read_reg = sdio_read_reg,
>>> +	.hif_write_reg = sdio_write_reg,
>>> +	.hif_block_rx = sdio_read,
>>> +	.hif_block_tx = sdio_write,
>>> +	.hif_sync = sdio_sync,
>>> +	.hif_clear_int = sdio_clear_int,
>>> +	.hif_read_int = sdio_read_int,
>>> +	.hif_clear_int_ext = sdio_clear_int_ext,
>>> +	.hif_read_size = sdio_read_size,
>>> +	.hif_block_rx_ext = sdio_write,
>>> +	.hif_block_tx_ext = sdio_read,

Hi arnd,

I found this. These should be like this. It works fine.
+	.hif_block_tx_ext = sdio_write,
+	.hif_block_rx_ext = sdio_read,

also, wilc_hif_spi need to be fixed together like this.
+	.hif_block_tx_ext = _wilc_spi_write,
+	.hif_block_rx_ext = _wilc_spi_read,

Thank you for all the patches.

regards,
glen lee

>>> +	.hif_sync_ext = sdio_sync_ext,
>>> +	.hif_set_max_bus_speed = sdio_set_max_speed,
>>> +	.hif_set_default_bus_speed = sdio_set_default_speed,
>>>    };
> If the callbacks are not in the same order here, something could
> in theory go wrong. I've tried to verify them by inspection and
> could not find anything here, but you can try reverting this part.
>
>>>    	memset((void *)&g_wlan, 0, sizeof(wilc_wlan_dev_t));
>>>    	g_wlan.io_type = wilc->io_type;
>>> -
>>> -#ifdef WILC_SDIO
>>> -	if (!wilc_hif_sdio.hif_init(wilc, wilc_debug)) {
>>> -		ret = -EIO;
>>> -		goto _fail_;
>>> -	}
>>> -	memcpy((void *)&g_wlan.hif_func, &wilc_hif_sdio,
>>> -	       sizeof(struct wilc_hif_func));
>>> -#else
>>> -	if (!wilc_hif_spi.hif_init(wilc, wilc_debug)) {
>>> +	g_wlan.hif_func = *wilc->ops;
>>> +	if (!g_wlan.hif_func.hif_init(wilc, wilc_debug)) {
>>>    		ret = -EIO;
>>>    		goto _fail_;
>>>    	}
>>> -	memcpy((void *)&g_wlan.hif_func, &wilc_hif_spi,
>>> -	       sizeof(struct wilc_hif_func));
>>> -#endif
> This is the most likely part I found:
>
> doing an assigment instead of memcpy should not make a difference,
> but my new version also called init after copying over the
> operations rather than before. This seemed to be the correct
> order when I did it, but it is a change in behavior that might
> cause problems if some code relies on the hif_func structure
> to be empty at the time that hif_init is called.
>
> 	Arnd


  reply	other threads:[~2015-11-13  7:46 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10 23:42 [PATCH 00/20] staging/wilc1000: cleanups once again Arnd Bergmann
2015-11-10 23:42 ` [PATCH 01/20] staging/wilc1000: add struct net_device declaration Arnd Bergmann
2015-11-10 23:47   ` Joe Perches
2015-11-10 23:53     ` Arnd Bergmann
2015-11-11  0:02   ` Greg Kroah-Hartman
2015-11-11  0:13     ` Arnd Bergmann
2015-11-11  0:33       ` Greg Kroah-Hartman
2015-11-10 23:42 ` [PATCH 02/20] staging/wilc1000: remove unused functions Arnd Bergmann
2015-11-10 23:42 ` [PATCH 03/20] staging/wilc1000: make symbols static if possible Arnd Bergmann
2015-11-10 23:42 ` [PATCH 04/20] staging/wilc1000: use proper naming for global symbols Arnd Bergmann
2015-11-10 23:42 ` [PATCH 05/20] staging/wilc1000: move extern declarations to headers Arnd Bergmann
2015-11-10 23:42 ` [PATCH 06/20] staging/wilc1000: use NO_SECURITY instead of NO_ENCRYPT Arnd Bergmann
2015-11-10 23:42 ` [PATCH 07/20] staging/wilc1000: avoid static definitions in header Arnd Bergmann
2015-11-10 23:42 ` [PATCH 08/20] staging/wilc1000: remove linux_wlan_{device_power,device_detection} Arnd Bergmann
2015-11-10 23:42 ` [PATCH 09/20] staging/wilc1000: move wilc_wlan_inp_t into struct wilc Arnd Bergmann
2015-11-10 23:42 ` [PATCH 10/20] staging/wilc1000: move init/exit functions to driver files Arnd Bergmann
2015-11-10 23:42 ` [PATCH 11/20] staging/wilc1000: unify device pointer Arnd Bergmann
2015-11-10 23:42 ` [PATCH 12/20] staging/wilc1000: pass io_type to wilc_netdev_init Arnd Bergmann
2015-11-10 23:42 ` [PATCH 13/20] staging/wilc1000: use device pointer for phy creation Arnd Bergmann
2015-11-10 23:42 ` [PATCH 14/20] staging/wilc1000: get rid of WILC_SDIO_IRQ_GPIO Arnd Bergmann
2015-11-10 23:42 ` [PATCH 15/20] staging/wilc1000: pass hif operations through initialization Arnd Bergmann
2015-11-12 10:05   ` glen lee
2015-11-12 11:39     ` Arnd Bergmann
2015-11-13  7:49       ` glen lee [this message]
2015-11-13  9:17         ` Arnd Bergmann
2015-11-16  1:36           ` glen lee
2015-11-16 14:05             ` Arnd Bergmann
2015-11-10 23:42 ` [PATCH 16/20] staging/wilc1000: turn enable_irq/disable_irq into callbacks Arnd Bergmann
2015-11-10 23:42 ` [PATCH 17/20] staging/wilc1000: remove WILC_SDIO/WILC_SPI macros Arnd Bergmann
2015-11-10 23:42 ` [PATCH 18/20] staging/wilc1000: split out bus specific modules Arnd Bergmann
2015-11-11 11:52   ` kbuild test robot
2015-11-10 23:42 ` [PATCH 19/20] staging/wilc1000: use more regular probing Arnd Bergmann
2015-11-11  7:54   ` Andy Shevchenko
2015-11-11  8:51     ` Arnd Bergmann
2015-11-10 23:42 ` [PATCH 20/20] staging/wilc1000: pass struct wilc to most linux_wlan.c functions Arnd Bergmann

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=56459602.9060707@atmel.com \
    --to=glen.lee@atmel.com \
    --cc=arnd@arndb.de \
    --cc=austin.shin@atmel.com \
    --cc=chris.park@atmel.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=johnny.kim@atmel.com \
    --cc=leo.kim@atmel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=tony.cho@atmel.com \
    /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.