linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arend van Spriel <arend.vanspriel@broadcom.com>
To: Ian Molton <ian@mnementh.co.uk>, linux-wireless@vger.kernel.org
Cc: franky.lin@broadcom.com, hante.meuleman@broadcom.com
Subject: Re: [PATCH 07/34] brcmfmac: Remove brcmf_sdiod_request_data()
Date: Wed, 30 Aug 2017 21:32:44 +0200	[thread overview]
Message-ID: <fd3f46d5-82e8-be94-919f-a864be20495e@broadcom.com> (raw)
In-Reply-To: <1cad185b-a720-9c13-0c45-43240803162f@mnementh.co.uk>

On 19-08-17 22:02, Ian Molton wrote:
> On 07/08/17 18:51, Ian Molton wrote:
>> On 07/08/17 12:25, Arend van Spriel wrote:
>>>> Handling of -ENOMEDIUM is altered, but as that's pretty much broken
>>>> anyway
>>>> we can ignore that.
>>>
>>> Please explain why you think it is broken.
>>
>> Not got the code to hand right now, but from memory, theres a trapdoor
>> case where the state can wind up set to something that prevents it ever
>> being changed again. I'll dig it up when I get back from holiday (this
>> next few days).
> 
> Hi,
> 
> Here is the function I had in mind:
> 
> 
> void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev,
>                                enum brcmf_sdiod_state state)
> {
>          if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM ||
>              state == sdiodev->state)
>                  return;
> 
>          brcmf_dbg(TRACE, "%d -> %d\n", sdiodev->state, state);
>          switch (sdiodev->state) {
>          case BRCMF_SDIOD_DATA:
>                  /* any other state means bus interface is down */
>                  brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN);
>                  break;
>          case BRCMF_SDIOD_DOWN:
>                  /* transition from DOWN to DATA means bus interface is up */
>                  if (state == BRCMF_SDIOD_DATA)
>                          brcmf_bus_change_state(sdiodev->bus_if,
> BRCMF_BUS_UP);
>                  break;
>          default:
>                  break;
>          }
>          sdiodev->state = state;
> }
> 
> 
> If it's *ever*  called with state = BRCMF_SDIOD_NOMEDIUM it will
> eventually (last line) set sdiodev->state to the same value.
> 
> If its ever called again, the first if() statement will make it return
> before ever changing sdiodev->state again, no matter what value is
> passed for state.
> 
> This has to be a bug, surely?

I thought I already responded this email. So it is not a bug. It really 
was made like this intentional. It is the end state of this little FSM. 
The thing is that there was no way to recover. Maybe nowadays with the 
MMC stack being able to power sequence the device (provided it is 
properly configured in device tree) we may get lucky using 
mmc_hw_reset(). But now you need to consider how many times to call that 
before giving up and what driver components/states need to be reset as 
well. So I would prefer to keep the current behavior until a more 
graceful approach has been designed and implemented to replace it.

Regards,
Arend

  reply	other threads:[~2017-08-30 19:32 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-26 20:25 Patch v4: Clean up brcmfmac driver Ian Molton
2017-07-26 20:25 ` [PATCH 01/34] brcmfmac: Fix parameter order in brcmf_sdiod_f0_writeb() Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-08-19 19:52     ` Ian Molton
2017-07-26 20:25 ` [PATCH 02/34] brcmfmac: Register sizes on hardware are not dependent on compiler types Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 03/34] brcmfmac: Split brcmf_sdiod_regrw_helper() up Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-08-07 17:49     ` Ian Molton
2017-07-26 20:25 ` [PATCH 04/34] brcmfmac: Clean up brcmf_sdiod_set_sbaddr_window() Ian Molton
2017-08-05 20:08   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 05/34] brcmfmac: Remove dead IO code Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 06/34] brcmfmac: Remove bandaid for SleepCSR Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-08-19 20:57     ` Ian Molton
2017-07-26 20:25 ` [PATCH 07/34] brcmfmac: Remove brcmf_sdiod_request_data() Ian Molton
2017-08-07 11:25   ` Arend van Spriel
2017-08-07 17:51     ` Ian Molton
2017-08-19 20:02       ` Ian Molton
2017-08-30 19:32         ` Arend van Spriel [this message]
2017-07-26 20:25 ` [PATCH 08/34] brcmfmac: Fix uninitialised variable Ian Molton
2017-08-07 11:26   ` Arend van Spriel
2017-08-19 21:06     ` Ian Molton
2017-07-26 20:25 ` [PATCH 09/34] brcmfmac: Remove noisy debugging Ian Molton
2017-08-07 11:26   ` Arend van Spriel
2017-08-19 20:18     ` Ian Molton
2017-07-26 20:25 ` [PATCH 10/34] brcmfmac: Rename bcmerror to err Ian Molton
2017-08-07 11:26   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 11/34] brcmfmac: Split brcmf_sdiod_buffrw function up Ian Molton
2017-08-07 11:26   ` Arend van Spriel
2017-08-19 21:41     ` Ian Molton
2017-07-26 20:25 ` [PATCH 12/34] brcmfmac: Replace old IO functions with simpler ones Ian Molton
2017-08-07 11:26   ` Arend van Spriel
2017-08-07 17:55     ` Ian Molton
2017-08-19 21:50       ` Ian Molton
2017-07-26 20:25 ` [PATCH 13/34] brcmfmac: Tidy register definitions a little Ian Molton
2017-08-07 19:30   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 14/34] brcmfmac: Remove brcmf_sdiod_addrprep() Ian Molton
2017-08-07 11:27   ` Arend van Spriel
2017-08-19 20:27     ` Ian Molton
2017-07-26 20:25 ` [PATCH 15/34] brcmfamc: remove unnecessary call to brcmf_sdiod_set_backplane_window() Ian Molton
2017-08-07 11:11   ` Arend van Spriel
2017-08-07 11:54     ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 16/34] brcmfmac: Cleanup offsetof() Ian Molton
2017-07-26 20:25 ` [PATCH 17/34] brcmfmac: Remove unused macro Ian Molton
2017-07-26 20:25 ` [PATCH 18/34] brcmfmac: Rename SOC_AI to SOC_AXI Ian Molton
2017-07-26 20:25 ` [PATCH 19/34] brcmfmac: Get rid of chip_priv and core_priv structs Ian Molton
2017-07-29 10:12   ` kbuild test robot
2017-07-26 20:25 ` [PATCH 20/34] brcmfmac: Whitespace patch Ian Molton
2017-07-26 20:25 ` [PATCH 21/34] brcmfmac: Simplify chip probe routine Ian Molton
2017-07-26 20:25 ` [PATCH 22/34] brcmfmac: Rename axi functions for clarity Ian Molton
2017-07-26 20:25 ` [PATCH 23/34] brcmfmac: HUGE cleanup of IO access functions Ian Molton
2017-07-26 20:25 ` [PATCH 24/34] brcmfmac: Rename chip.ctx -> chip.bus_priv Ian Molton
2017-07-26 20:25 ` [PATCH 25/34] brcmfmac: Remove repeated calls to brcmf_chip_get_core() Ian Molton
2017-07-26 20:25 ` [PATCH 26/34] brcmfmac: General cleaning up. whitespace and comments fix Ian Molton
2017-07-26 20:25 ` [PATCH 27/34] brcmfmac: Remove {r,w}_sdreg32 Ian Molton
2017-07-26 20:25 ` [PATCH 28/34] brcmfmac: Rename buscore->core for consistency Ian Molton
2017-07-26 20:25 ` [PATCH 29/34] brcmfmac: stabilise the value of ->sbwad in use for some xfer routines Ian Molton
2017-08-07 12:32   ` Arend van Spriel
2017-08-19 20:31     ` Ian Molton
2017-07-26 20:25 ` [PATCH 30/34] brcmfmac: Correctly handle accesses to SDIO func0 Ian Molton
2017-08-08 12:36   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 31/34] brcmfmac: Remove func0 from function array Ian Molton
2017-08-08 11:19   ` Arend van Spriel
2017-08-08 11:27     ` Ian Molton
2017-08-08 12:33       ` Arend van Spriel
2017-08-19 20:33     ` Ian Molton
2017-07-26 20:25 ` [PATCH 32/34] brcmfmac: Replace function index with function pointer Ian Molton
2017-07-28 15:55   ` [PATCH] brcmfmac: fix semicolon.cocci warnings kbuild test robot
2017-07-28 15:55   ` [PATCH 32/34] brcmfmac: Replace function index with function pointer kbuild test robot
2017-08-08 12:29   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 33/34] brcmfmac: Remove array of functions Ian Molton
2017-08-08 12:29   ` Arend van Spriel
2017-07-26 20:25 ` [PATCH 34/34] brcmfmac: Reduce the noise from repeatedly dereferencing common pointers Ian Molton
2017-08-08 12:29   ` Arend van Spriel
2017-08-19 20:39     ` Ian Molton
2017-07-27  6:17 ` Patch v4: Clean up brcmfmac driver Kalle Valo
2017-07-27  9:47   ` Ian Molton
2017-07-27  9:52     ` Arend van Spriel
2017-07-27 10:00       ` Ian Molton
2017-07-27 10:09         ` Arend van Spriel
2017-07-27 10:12           ` Ian Molton
2017-07-27 10:31     ` Kalle Valo
  -- strict thread matches above, loose matches on Subject: below --
2017-07-19 19:07 PATCH v3 brcmfmac driver cleanup Ian Molton
2017-07-19 19:07 ` [PATCH 07/34] brcmfmac: Remove brcmf_sdiod_request_data() Ian Molton

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=fd3f46d5-82e8-be94-919f-a864be20495e@broadcom.com \
    --to=arend.vanspriel@broadcom.com \
    --cc=franky.lin@broadcom.com \
    --cc=hante.meuleman@broadcom.com \
    --cc=ian@mnementh.co.uk \
    --cc=linux-wireless@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).