All of lore.kernel.org
 help / color / mirror / Atom feed
From: Uri Mashiach <uri.mashiach@compulab.co.il>
To: igor.grinberg@compulab.co.il
Cc: stable@vger.kernel.org
Subject: Re: [PATCH v2] wlcore/wl12xx: spi: fix oops on firmware load
Date: Thu, 10 Dec 2015 10:28:46 +0200	[thread overview]
Message-ID: <566937BE.5090100@compulab.co.il> (raw)
In-Reply-To: <1449733086-17060-1-git-send-email-uri.mashiach@compulab.co.il>

Sorry,
sent out by mistake.

On 12/10/2015 09:38 AM, Uri Mashiach wrote:
> The maximum chunks used by the function is
> (SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE + 1).
> The original commands array had space for
> (SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE) commands.
> When the last chunk is used (len > 4 * WSPI_MAX_CHUNK_SIZE), the last
> command is stored outside the bounds of the commands array.
>
> Oops 5 (page fault) is generated during current wl1271 firmware load
> attempt:
>
> root@debian-armhf:~# ifconfig wlan0 up
> [  294.312399] Unable to handle kernel paging request at virtual address
> 00203fc4
> [  294.320173] pgd = de528000
> [  294.323028] [00203fc4] *pgd=00000000
> [  294.326916] Internal error: Oops: 5 [#1] SMP ARM
> [  294.331789] Modules linked in: bnep rfcomm bluetooth ipv6 arc4 wl12xx
> wlcore mac80211 musb_dsps cfg80211 musb_hdrc usbcore usb_common
> wlcore_spi omap_rng rng_core musb_am335x omap_wdt cpufreq_dt thermal_sys
> hwmon
> [  294.351838] CPU: 0 PID: 1827 Comm: ifconfig Not tainted
> 4.2.0-00002-g3e9ad27-dirty #78
> [  294.360154] Hardware name: Generic AM33XX (Flattened Device Tree)
> [  294.366557] task: dc9d6d40 ti: de550000 task.ti: de550000
> [  294.372236] PC is at __spi_validate+0xa8/0x2ac
> [  294.376902] LR is at __spi_sync+0x78/0x210
> [  294.381200] pc : [<c049c760>]    lr : [<c049ebe0>]    psr: 60000013
> [  294.381200] sp : de551998  ip : de5519d8  fp : 00200000
> [  294.393242] r10: de551c8c  r9 : de5519d8  r8 : de3a9000
> [  294.398730] r7 : de3a9258  r6 : de3a9400  r5 : de551a48  r4 :
> 00203fbc
> [  294.405577] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 :
> de3a9000
> [  294.412420] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM
> Segment user
> [  294.419918] Control: 10c5387d  Table: 9e528019  DAC: 00000015
> [  294.425954] Process ifconfig (pid: 1827, stack limit = 0xde550218)
> [  294.432437] Stack: (0xde551998 to 0xde552000)
>
> ...
>
> [  294.883613] [<c049c760>] (__spi_validate) from [<c049ebe0>]
> (__spi_sync+0x78/0x210)
> [  294.891670] [<c049ebe0>] (__spi_sync) from [<bf036598>]
> (wl12xx_spi_raw_write+0xfc/0x148 [wlcore_spi])
> [  294.901661] [<bf036598>] (wl12xx_spi_raw_write [wlcore_spi]) from
> [<bf21c694>] (wlcore_boot_upload_firmware+0x1ec/0x458 [wlcore])
> [  294.914038] [<bf21c694>] (wlcore_boot_upload_firmware [wlcore]) from
> [<bf24532c>] (wl12xx_boot+0xc10/0xfac [wl12xx])
> [  294.925161] [<bf24532c>] (wl12xx_boot [wl12xx]) from [<bf20d5cc>]
> (wl1271_op_add_interface+0x5b0/0x910 [wlcore])
> [  294.936364] [<bf20d5cc>] (wl1271_op_add_interface [wlcore]) from
> [<bf15c4ac>] (ieee80211_do_open+0x44c/0xf7c [mac80211])
> [  294.947963] [<bf15c4ac>] (ieee80211_do_open [mac80211]) from
> [<c0537978>] (__dev_open+0xa8/0x110)
> [  294.957307] [<c0537978>] (__dev_open) from [<c0537bf8>]
> (__dev_change_flags+0x88/0x148)
> [  294.965713] [<c0537bf8>] (__dev_change_flags) from [<c0537cd0>]
> (dev_change_flags+0x18/0x48)
> [  294.974576] [<c0537cd0>] (dev_change_flags) from [<c05a55a0>]
> (devinet_ioctl+0x6b4/0x7d0)
> [  294.983191] [<c05a55a0>] (devinet_ioctl) from [<c0517040>]
> (sock_ioctl+0x1e4/0x2bc)
> [  294.991244] [<c0517040>] (sock_ioctl) from [<c017d378>]
> (do_vfs_ioctl+0x420/0x6b0)
> [  294.999208] [<c017d378>] (do_vfs_ioctl) from [<c017d674>]
> (SyS_ioctl+0x6c/0x7c)
> [  295.006880] [<c017d674>] (SyS_ioctl) from [<c000f4c0>]
> (ret_fast_syscall+0x0/0x54)
> [  295.014835] Code: e1550004 e2444034 0a00007d e5953018 (e5942008)
> [  295.021544] ---[ end trace 66ed188198f4e24e ]---
>
> Signed-off-by: Uri Mashiach <uri.mashiach@compulab.co.il>
> Acked-by: Igor Grinberg <grinberg@compulab.co.il>
> Cc: stable@vger.kernel.org
> ---
> v1 -> v2: patch apply verification was made into the wireless trees:
>            wireless-drivers-next wireless-drivers
>
>   drivers/net/wireless/ti/wlcore/spi.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/wireless/ti/wlcore/spi.c b/drivers/net/wireless/ti/wlcore/spi.c
> index f1ac283..720e4e4 100644
> --- a/drivers/net/wireless/ti/wlcore/spi.c
> +++ b/drivers/net/wireless/ti/wlcore/spi.c
> @@ -73,7 +73,10 @@
>    */
>   #define SPI_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
>
> -#define WSPI_MAX_NUM_OF_CHUNKS (SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE)
> +/* Maximum number of SPI write chunks */
> +#define WSPI_MAX_NUM_OF_CHUNKS \
> +	((SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE) + 1)
> +
>
>   struct wl12xx_spi_glue {
>   	struct device *dev;
> @@ -268,9 +271,10 @@ static int __must_check wl12xx_spi_raw_write(struct device *child, int addr,
>   					     void *buf, size_t len, bool fixed)
>   {
>   	struct wl12xx_spi_glue *glue = dev_get_drvdata(child->parent);
> -	struct spi_transfer t[2 * (WSPI_MAX_NUM_OF_CHUNKS + 1)];
> +	/* SPI write buffers - 2 for each chunk */
> +	struct spi_transfer t[2 * WSPI_MAX_NUM_OF_CHUNKS];
>   	struct spi_message m;
> -	u32 commands[WSPI_MAX_NUM_OF_CHUNKS];
> +	u32 commands[WSPI_MAX_NUM_OF_CHUNKS]; /* 1 command per chunk */
>   	u32 *cmd;
>   	u32 chunk_len;
>   	int i;
>

-- 
Regards,
Uri

  reply	other threads:[~2015-12-10  8:28 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-10  7:38 [PATCH v2] wlcore/wl12xx: spi: fix oops on firmware load Uri Mashiach
2015-12-10  8:28 ` Uri Mashiach [this message]
  -- strict thread matches above, loose matches on Subject: below --
2015-12-10 13:12 Uri Mashiach

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=566937BE.5090100@compulab.co.il \
    --to=uri.mashiach@compulab.co.il \
    --cc=igor.grinberg@compulab.co.il \
    --cc=stable@vger.kernel.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.