[PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-08 Thread Arend van Spriel
Upon PSM watchdog event received from firmware the driver will obtain
a memory snapshot of the device and expose it to user-space through
the devcoredump framework. This will trigger a uevent.

Reviewed-by: Hante Meuleman 
Reviewed-by: Franky (Zhenhui) Lin 
Reviewed-by: Pieter-Paul Giesberts 
Signed-off-by: Arend van Spriel 
---
 drivers/net/wireless/brcm80211/Kconfig  |  1 +
 drivers/net/wireless/brcm80211/brcmfmac/bus.h   | 21 
 drivers/net/wireless/brcm80211/brcmfmac/core.c  |  6 +--
 drivers/net/wireless/brcm80211/brcmfmac/debug.c | 42 ++--
 drivers/net/wireless/brcm80211/brcmfmac/debug.h |  8 +--
 drivers/net/wireless/brcm80211/brcmfmac/pcie.c  | 65 +
 drivers/net/wireless/brcm80211/brcmfmac/sdio.c  | 49 ++-
 7 files changed, 181 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/Kconfig 
b/drivers/net/wireless/brcm80211/Kconfig
index fe3dc12..ab42b1f 100644
--- a/drivers/net/wireless/brcm80211/Kconfig
+++ b/drivers/net/wireless/brcm80211/Kconfig
@@ -82,5 +82,6 @@ config BRCM_TRACING
 config BRCMDBG
bool "Broadcom driver debug functions"
depends on BRCMSMAC || BRCMFMAC
+   select WANT_DEV_COREDUMP
---help---
  Selecting this enables additional code for debug purposes.
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bus.h 
b/drivers/net/wireless/brcm80211/brcmfmac/bus.h
index 89e6a4d..230cad7 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/bus.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bus.h
@@ -65,6 +65,8 @@ struct brcmf_bus_dcmd {
  * @rxctl: receive a control response message from dongle.
  * @gettxq: obtain a reference of bus transmit queue (optional).
  * @wowl_config: specify if dongle is configured for wowl when going to suspend
+ * @get_ramsize: obtain size of device memory.
+ * @get_memdump: obtain device memory dump in provided buffer.
  *
  * This structure provides an abstract interface towards the
  * bus specific driver. For control messages to common driver
@@ -79,6 +81,8 @@ struct brcmf_bus_ops {
int (*rxctl)(struct device *dev, unsigned char *msg, uint len);
struct pktq * (*gettxq)(struct device *dev);
void (*wowl_config)(struct device *dev, bool enabled);
+   size_t (*get_ramsize)(struct device *dev);
+   int (*get_memdump)(struct device *dev, void *data, size_t len);
 };
 
 
@@ -185,6 +189,23 @@ void brcmf_bus_wowl_config(struct brcmf_bus *bus, bool 
enabled)
bus->ops->wowl_config(bus->dev, enabled);
 }
 
+static inline size_t brcmf_bus_get_ramsize(struct brcmf_bus *bus)
+{
+   if (!bus->ops->get_ramsize)
+   return 0;
+
+   return bus->ops->get_ramsize(bus->dev);
+}
+
+static inline
+int brcmf_bus_get_memdump(struct brcmf_bus *bus, void *data, size_t len)
+{
+   if (!bus->ops->get_memdump)
+   return -EOPNOTSUPP;
+
+   return bus->ops->get_memdump(bus->dev, data, len);
+}
+
 /*
  * interface functions from common layer
  */
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/core.c 
b/drivers/net/wireless/brcm80211/brcmfmac/core.c
index 8c2a280..a1d39b196 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
@@ -957,8 +957,8 @@ int brcmf_attach(struct device *dev)
drvr->bus_if = dev_get_drvdata(dev);
drvr->bus_if->drvr = drvr;
 
-   /* create device debugfs folder */
-   brcmf_debugfs_attach(drvr);
+   /* attach debug facilities */
+   brcmf_debug_attach(drvr);
 
/* Attach and link in the protocol */
ret = brcmf_proto_attach(drvr);
@@ -1155,7 +1155,7 @@ void brcmf_detach(struct device *dev)
 
brcmf_proto_detach(drvr);
 
-   brcmf_debugfs_detach(drvr);
+   brcmf_debug_detach(drvr);
bus_if->drvr = NULL;
kfree(drvr);
 }
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/debug.c 
b/drivers/net/wireless/brcm80211/brcmfmac/debug.c
index 2d6d005..1299dcc 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/debug.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/debug.c
@@ -16,15 +16,45 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
 #include "core.h"
 #include "bus.h"
+#include "fweh.h"
 #include "debug.h"
 
 static struct dentry *root_folder;
 
+static int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
+ size_t len)
+{
+   void *dump;
+   size_t ramsize;
+
+   ramsize = brcmf_bus_get_ramsize(bus);
+   if (ramsize) {
+   dump = vzalloc(len + ramsize);
+   if (!dump)
+   return -ENOMEM;
+   memcpy(dump, data, len);
+   brcmf_bus_get_memdump(bus, dump + len, ramsize);
+   dev_coredumpv(bus->dev, dump, len + ramsize, GFP_KERNEL);
+   }
+   return 0;
+}
+
+static int brcmf_debug_psm_watchdog_notify(struct brcmf_if *ifp,
+  

Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-08 Thread kbuild test robot
Hi Arend,

[auto build test ERROR on next-20151008 -- if it's inappropriate base, please 
ignore]

config: x86_64-randconfig-x011-201540 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/net/wireless/brcm80211/brcmfmac/debug.c:58:6: error: redefinition of 
'brcmf_debugfs_init'
void brcmf_debugfs_init(void)
 ^
   In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
   drivers/net/wireless/brcm80211/brcmfmac/debug.h:118:20: note: previous 
definition of 'brcmf_debugfs_init' was here
static inline void brcmf_debugfs_init(void)
   ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:65:6: error: redefinition of 
'brcmf_debugfs_exit'
void brcmf_debugfs_exit(void)
 ^
   In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
   drivers/net/wireless/brcm80211/brcmfmac/debug.h:121:20: note: previous 
definition of 'brcmf_debugfs_exit' was here
static inline void brcmf_debugfs_exit(void)
   ^
>> drivers/net/wireless/brcm80211/brcmfmac/debug.c:74:5: error: redefinition of 
>> 'brcmf_debug_attach'
int brcmf_debug_attach(struct brcmf_pub *drvr)
^
   In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
   drivers/net/wireless/brcm80211/brcmfmac/debug.h:124:19: note: previous 
definition of 'brcmf_debug_attach' was here
static inline int brcmf_debug_attach(struct brcmf_pub *drvr)
  ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: In function 
'brcmf_debug_attach':
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:81:6: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
 drvr->dbgfs_dir = debugfs_create_dir(dev_name(dev), root_folder);
 ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:82:17: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
 if (IS_ERR(drvr->dbgfs_dir))
^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:83:22: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
  return PTR_ERR(drvr->dbgfs_dir);
 ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: At top level:
>> drivers/net/wireless/brcm80211/brcmfmac/debug.c:90:6: error: redefinition of 
>> 'brcmf_debug_detach'
void brcmf_debug_detach(struct brcmf_pub *drvr)
 ^
   In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
   drivers/net/wireless/brcm80211/brcmfmac/debug.h:128:20: note: previous 
definition of 'brcmf_debug_detach' was here
static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
   ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: In function 
'brcmf_debug_detach':
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:94:26: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
 if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
 ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:95:32: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
  debugfs_remove_recursive(drvr->dbgfs_dir);
   ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: In function 
'brcmf_debugfs_get_devdir':
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:100:13: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
 return drvr->dbgfs_dir;
^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: At top level:
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:103:5: error: redefinition 
of 'brcmf_debugfs_add_entry'
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
^
   In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
   drivers/net/wireless/brcm80211/brcmfmac/debug.h:132:5: note: previous 
definition of 'brcmf_debugfs_add_entry' was here
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: In function 
'brcmf_debugfs_add_entry':
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:109:10: error: 'struct 
brcmf_pub' has no member named 'dbgfs_dir'
 drvr->dbgfs_dir, read_fn);
 ^
   drivers/net/wireless/brcm80211/brcmfmac/debug.c: In function 
'brcmf_debugfs_get_devdir':
   drivers/net/wireless/brcm80211/brcmfmac/debug.c:101:1: warning: control 
reaches end of non-void function [-Wreturn-type]
}
^

vim +/brcmf_debug_attach +74 drivers/net/wireless/brcm80211/brcmfmac/debug.c

59  {
60  root

Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-12 Thread Kalle Valo
kbuild test robot  writes:

> Hi Arend,
>
> [auto build test ERROR on next-20151008 -- if it's inappropriate base, please 
> ignore]
>
> config: x86_64-randconfig-x011-201540 (attached as .config)
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64 
>
> All errors (new ones prefixed by >>):
>
>drivers/net/wireless/brcm80211/brcmfmac/debug.c:58:6: error: redefinition 
> of 'brcmf_debugfs_init'
> void brcmf_debugfs_init(void)
>  ^
>In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
> from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
>drivers/net/wireless/brcm80211/brcmfmac/debug.h:118:20: note: previous 
> definition of 'brcmf_debugfs_init' was here
> static inline void brcmf_debugfs_init(void)
>^

Arend, are the kbuild errors valid? I would guess they are as
wireless-drivers-next should be in linux-next.

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-12 Thread Arend van Spriel

On 10/12/2015 10:59 AM, Kalle Valo wrote:

kbuild test robot  writes:


Hi Arend,

[auto build test ERROR on next-20151008 -- if it's inappropriate base, please 
ignore]

config: x86_64-randconfig-x011-201540 (attached as .config)
reproduce:
 # save the attached .config to linux build tree
 make ARCH=x86_64

All errors (new ones prefixed by >>):

drivers/net/wireless/brcm80211/brcmfmac/debug.c:58:6: error: redefinition 
of 'brcmf_debugfs_init'
 void brcmf_debugfs_init(void)
  ^
In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
 from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
drivers/net/wireless/brcm80211/brcmfmac/debug.h:118:20: note: previous 
definition of 'brcmf_debugfs_init' was here
 static inline void brcmf_debugfs_init(void)
^


Arend, are the kbuild errors valid? I would guess they are as
wireless-drivers-next should be in linux-next.


Hi Kalle,

Actually they are not. I am not sure about the build infrastructure, but 
the errors above can only occur when CONFIG_BRCMDBG is set, but DEBUG is 
not. However, that can not happen as we have following line in 
drivers/net/wireless/brcm80211/Makefile:


subdir-ccflags-$(CONFIG_BRCMDBG)+= -DDEBUG

Regards,
Arend

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-14 Thread Kalle Valo
Arend van Spriel  writes:

> On 10/12/2015 10:59 AM, Kalle Valo wrote:
>> kbuild test robot  writes:
>>
>>> Hi Arend,
>>>
>>> [auto build test ERROR on next-20151008 -- if it's inappropriate base, 
>>> please ignore]
>>>
>>> config: x86_64-randconfig-x011-201540 (attached as .config)
>>> reproduce:
>>>  # save the attached .config to linux build tree
>>>  make ARCH=x86_64
>>>
>>> All errors (new ones prefixed by >>):
>>>
>>> drivers/net/wireless/brcm80211/brcmfmac/debug.c:58:6: error: 
>>> redefinition of 'brcmf_debugfs_init'
>>>  void brcmf_debugfs_init(void)
>>>   ^
>>> In file included from 
>>> drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
>>>  from 
>>> drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
>>> drivers/net/wireless/brcm80211/brcmfmac/debug.h:118:20: note: previous 
>>> definition of 'brcmf_debugfs_init' was here
>>>  static inline void brcmf_debugfs_init(void)
>>> ^
>>
>> Arend, are the kbuild errors valid? I would guess they are as
>> wireless-drivers-next should be in linux-next.
>
> Actually they are not. I am not sure about the build infrastructure,
> but the errors above can only occur when CONFIG_BRCMDBG is set, but
> DEBUG is not. However, that can not happen as we have following line
> in drivers/net/wireless/brcm80211/Makefile:
>
> subdir-ccflags-$(CONFIG_BRCMDBG)  += -DDEBUG

I didn't check the details but I'm still not convinced :) In my opinion
the code should always compile, with and without -DDEBUG. Anyways, I
pushed this script to the pending branch to get kbuild test this patch
once again.

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-14 Thread Arend van Spriel

On 10/14/2015 01:01 PM, Kalle Valo wrote:

Arend van Spriel  writes:


On 10/12/2015 10:59 AM, Kalle Valo wrote:

kbuild test robot  writes:


Hi Arend,

[auto build test ERROR on next-20151008 -- if it's inappropriate base, please 
ignore]

config: x86_64-randconfig-x011-201540 (attached as .config)
reproduce:
  # save the attached .config to linux build tree
  make ARCH=x86_64

All errors (new ones prefixed by >>):

 drivers/net/wireless/brcm80211/brcmfmac/debug.c:58:6: error: redefinition 
of 'brcmf_debugfs_init'
  void brcmf_debugfs_init(void)
   ^
 In file included from drivers/net/wireless/brcm80211/brcmfmac/bus.h:20:0,
  from drivers/net/wireless/brcm80211/brcmfmac/debug.c:24:
 drivers/net/wireless/brcm80211/brcmfmac/debug.h:118:20: note: previous 
definition of 'brcmf_debugfs_init' was here
  static inline void brcmf_debugfs_init(void)
 ^


Arend, are the kbuild errors valid? I would guess they are as
wireless-drivers-next should be in linux-next.


Actually they are not. I am not sure about the build infrastructure,
but the errors above can only occur when CONFIG_BRCMDBG is set, but
DEBUG is not. However, that can not happen as we have following line
in drivers/net/wireless/brcm80211/Makefile:

subdir-ccflags-$(CONFIG_BRCMDBG)+= -DDEBUG


I didn't check the details but I'm still not convinced :) In my opinion
the code should always compile, with and without -DDEBUG. Anyways, I
pushed this script to the pending branch to get kbuild test this patch
once again.


Ok, Kalle

Let me try to be a bit more convincing ;-)

I checked out linux-next/master, taken the provided .config and ran:

$ make prepare
$ make M=scripts
$ make M=drivers/net/wireless/brcm80211

  WARNING: Symbol version dump ./Module.symvers
   is missing; modules will have no dependencies and modversions.

  CC  drivers/net/wireless/brcm80211/brcmfmac/cfg80211.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/chip.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/fwil.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/fweh.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/fwsignal.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/p2p.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/proto.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/common.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/core.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/firmware.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/feature.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/btcoex.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/vendor.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/bcdc.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/sdio.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/debug.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/tracepoint.o
  CC  drivers/net/wireless/brcm80211/brcmfmac/of.o
  LD  drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.o
  LD  drivers/net/wireless/brcm80211/brcmfmac/built-in.o
  CC  drivers/net/wireless/brcm80211/brcmutil/utils.o
  CC  drivers/net/wireless/brcm80211/brcmutil/d11.o
  LD  drivers/net/wireless/brcm80211/brcmutil/brcmutil.o
  LD  drivers/net/wireless/brcm80211/brcmutil/built-in.o
  LD  drivers/net/wireless/brcm80211/built-in.o
  Building modules, stage 2.
  MODPOST 0 modules

No compile issues.

Regards,
Arend
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 01/11] brcmfmac: expose device memory to devcoredump subsystem

2015-10-15 Thread Kalle Valo
Arend van Spriel  writes:

> On 10/14/2015 01:01 PM, Kalle Valo wrote:
>> Arend van Spriel  writes:
>>
>>> On 10/12/2015 10:59 AM, Kalle Valo wrote:
>>>
 Arend, are the kbuild errors valid? I would guess they are as
 wireless-drivers-next should be in linux-next.
>>>
>>> Actually they are not. I am not sure about the build infrastructure,
>>> but the errors above can only occur when CONFIG_BRCMDBG is set, but
>>> DEBUG is not. However, that can not happen as we have following line
>>> in drivers/net/wireless/brcm80211/Makefile:
>>>
>>> subdir-ccflags-$(CONFIG_BRCMDBG)+= -DDEBUG
>>
>> I didn't check the details but I'm still not convinced :) In my opinion
>> the code should always compile, with and without -DDEBUG. Anyways, I
>> pushed this script to the pending branch to get kbuild test this patch
>> once again.
>
> Ok, Kalle
>
> Let me try to be a bit more convincing ;-)
>
> I checked out linux-next/master, taken the provided .config and ran:
>
> $ make prepare
> $ make M=scripts
> $ make M=drivers/net/wireless/brcm80211

Thanks, I'm convinced now :) But the kbuild found this warning (I guess
you also got an email about that):

drivers/net/wireless/brcm80211/brcmfmac/sdio.c:3562:2: warning: format '%zu' 
expects argument of type 'size_t', but argument 5 has type 'unsigned int' 
[-Wformat=]

Can you fix that and respin, please?

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html