Re: [RFC 3/4] clk: renesas: r8a7796: Add Z clock

2016-05-10 Thread Geert Uytterhoeven
Hi Khiem,

On Tue, May 10, 2016 at 6:44 AM, Khiem Nguyen
 wrote:
> index c84b549..7368805 100644
> --- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
> +++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
> @@ -94,6 +94,8 @@ static const struct cpg_core_clk r8a7796_core_clks[]
> __initconst = {
>
> DEF_FIXED("cl", R8A7796_CLK_CL,CLK_PLL1_DIV2, 48, 1),
> DEF_FIXED("cp", R8A7796_CLK_CP,CLK_EXTAL,  2, 1),
> +
> +   DEF_BASE("z",   R8A7795_CLK_Z,   CLK_TYPE_GEN3_Z,   CLK_PLL0),

R8A7796_CLK_Z?

How could that work?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH 1/2] cpufreq: rcar: Add support for R8A7795 SoC

2016-05-10 Thread Geert Uytterhoeven
Hi Viresh,

On Tue, May 10, 2016 at 7:07 AM, Viresh Kumar  wrote:
> On 10-05-16, 11:57, Khiem Nguyen wrote:
>> After the commit "a399dc9fc50 cpufreq: shmobile: Use generic platdev
>> driver", will use cpufreq-dt-platdev driver to enable cpufreq-dt support.
>> Hence, follow the implementation to support new R8A7795 SoC.
>>
>> Signed-off-by: Khiem Nguyen 
>> ---
>>  drivers/cpufreq/cpufreq-dt-platdev.c | 1 +
>>  1 file changed, 1 insertion(+)
>
> Acked-by: Viresh Kumar 

Quoting Viresh when this file was introduced:
| This is going to be done once per boot and this shouldn't hurt. And for new
| platforms we may do things differently as they are going to use
opp-v2 bindings.

As r8a7795/r8a7796 are not arm32 "shmobile", but arm64, perhaps we should
use this new "opp-v2" binding instead? Has it been finalized?

Thanks!

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH 1/2] cpufreq: rcar: Add support for R8A7795 SoC

2016-05-10 Thread Viresh Kumar
On 10-05-16, 10:17, Geert Uytterhoeven wrote:
> Hi Viresh,
> 
> On Tue, May 10, 2016 at 7:07 AM, Viresh Kumar  wrote:
> > On 10-05-16, 11:57, Khiem Nguyen wrote:
> >> After the commit "a399dc9fc50 cpufreq: shmobile: Use generic platdev
> >> driver", will use cpufreq-dt-platdev driver to enable cpufreq-dt support.
> >> Hence, follow the implementation to support new R8A7795 SoC.
> >>
> >> Signed-off-by: Khiem Nguyen 
> >> ---
> >>  drivers/cpufreq/cpufreq-dt-platdev.c | 1 +
> >>  1 file changed, 1 insertion(+)
> >
> > Acked-by: Viresh Kumar 
> 
> Quoting Viresh when this file was introduced:
> | This is going to be done once per boot and this shouldn't hurt. And for new
> | platforms we may do things differently as they are going to use
> opp-v2 bindings.
> 
> As r8a7795/r8a7796 are not arm32 "shmobile", but arm64, perhaps we should
> use this new "opp-v2" binding instead? Has it been finalized?

Yeah, that would be preferred.

-- 
viresh


Re: [PATCH v2] fbdev: sh_mipi_dsi: remove driver

2016-05-10 Thread Tomi Valkeinen

On 04/04/16 04:48, Simon Horman wrote:
> Remove the sh_mipi_dsi driver as it appears to be unused since
> c0bb9b302769 ("ARCH: ARM: shmobile: Remove ag5evm board support").
> 
> Signed-off-by: Simon Horman 
> ---
> Based on v4.6-rc1
> 
> v2
> * Update patch referred to in changelog
> ---
>  drivers/video/Kconfig |   4 -
>  drivers/video/fbdev/Kconfig   |   1 -
>  drivers/video/fbdev/Makefile  |   1 -
>  drivers/video/fbdev/sh_mipi_dsi.c | 587 
> --
>  include/video/sh_mipi_dsi.h   |  59 
>  5 files changed, 652 deletions(-)
>  delete mode 100644 drivers/video/fbdev/sh_mipi_dsi.c
>  delete mode 100644 include/video/sh_mipi_dsi.h

Thanks, queued for 4.7.

 Tomi



signature.asc
Description: OpenPGP digital signature


Re: [PATCH 0/2] fbdev: sh_mobile_meram: use ARCH_RENESAS

2016-05-10 Thread Tomi Valkeinen

On 11/03/16 04:28, Simon Horman wrote:
> Use ARCH_RENESAS in place of ARCH_SHMOBILE.
> 
> This is part of an ongoing process to migrate from ARCH_SHMOBILE to
> ARCH_RENESAS the motivation for which being that RENESAS seems to be a more
> appropriate name than SHMOBILE for the majority of Renesas ARM based SoCs.
> 
> As a follow-up also depend on COMPILE_TEST to provided for increased
> compile testing.
> 
> Based on v4.5-rc1
> 
> Simon Horman (2):
>   fbdev: sh_mobile_meram: use ARCH_RENESAS
>   fbdev: sh_mobile_meram: depend on COMPILE_TEST
> 
>  drivers/video/fbdev/Kconfig | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 

What was the conclusion in this thread? Should I apply these?

 Tomi



signature.asc
Description: OpenPGP digital signature


Re: [PATCH/RFC 3/3] ARM: dts: r8a7790: lager: Enable UHS-I SDR-104

2016-05-10 Thread Magnus Damm
On Tue, May 10, 2016 at 2:52 PM, Simon Horman
 wrote:
> Add the sd-uhs-sdr104 property to SDHI0.
>
> Signed-off-by: Simon Horman 
> ---
>  arch/arm/boot/dts/r8a7790-lager.dts | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm/boot/dts/r8a7790-lager.dts 
> b/arch/arm/boot/dts/r8a7790-lager.dts
> index 749ba02b6a53..05d1ff7acee2 100644
> --- a/arch/arm/boot/dts/r8a7790-lager.dts
> +++ b/arch/arm/boot/dts/r8a7790-lager.dts
> @@ -559,6 +559,7 @@
> vqmmc-supply = <&vccq_sdhi0>;
> cd-gpios = <&gpio3 6 GPIO_ACTIVE_LOW>;
> sd-uhs-sdr50;
> +   sd-uhs-sdr104;
> status = "okay";

Hi Simon,

Thanks for this - interesting to see!! From what I can tell this code
is targeting r8a7790 Lager, and based on the data sheet and the DTS
there are four SDHI channels for the r8a7790 SoC. All R-Car Gen2 SDHI
channels are not identical, so on r8a7790 it looks like SDHI0 and
SDHI1 have extended capabilities for the clocks (and probably support
SDR104) while SDHI2 and SDHI3 do not have this hardware feature. How
is this difference handled today? In my mind it would make sense to
have different compat strings, but I think we differentiate with
resource size today?

So with this patches I can see that you enable SDR104 on SDHI0 on
Lager which makes sense, but is SDHI2 support still OK?

Cheers,

/ magnus


Re: [PATCH] MAINTAINERS: update entry for TMIO MMC driver

2016-05-10 Thread Ulf Hansson
On 9 May 2016 at 10:26, Wolfram Sang  wrote:
> From: Wolfram Sang 
>
> I have some more additions planned for this driver, so I'd like to get
> notified of other changes and coordinate them. Drop Ian as maintainer
> because he hasn't been involved in development for a while. Thanks for
> all the initial work, of course! Also, reflect the recent changes to
> the include file layout.
>
> Signed-off-by: Wolfram Sang 
> Cc: Ian Molton 

Thanks, applied for next!

> ---
>
> Ian: If you'd like to stay involved, please speak up and I'll change my patch
> accordingly.

As I applied this patch with quite short delay, I will instead
recommend Ian to send a patch re-adding himself as co-maintainer. I am
happy to apply such patch if it shows up.

Kind regards
Uffe

>
>  MAINTAINERS | 9 -
>  1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 42e65d128d015e..d22540c44b534b 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -11245,14 +11245,13 @@ S:Maintained
>  F: drivers/media/i2c/tc358743*
>  F: include/media/i2c/tc358743.h
>
> -TMIO MMC DRIVER
> -M: Ian Molton 
> +TMIO/SDHI MMC DRIVER
> +M: Wolfram Sang 
>  L: linux-...@vger.kernel.org
> -S: Maintained
> +S: Supported
>  F: drivers/mmc/host/tmio_mmc*
>  F: drivers/mmc/host/sh_mobile_sdhi.c
> -F: include/linux/mmc/tmio.h
> -F: include/linux/mmc/sh_mobile_sdhi.h
> +F: include/linux/mfd/tmio.h
>
>  TMP401 HARDWARE MONITOR DRIVER
>  M: Guenter Roeck 
> --
> 2.7.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] mmc: sdio: fall back to SDIO 1.0 for broken 1.1 cards

2016-05-10 Thread Ulf Hansson
On 9 May 2016 at 09:59, Wolfram Sang  wrote:
> From: Wolfram Sang 
>
> I have two SDIO WLAN cards which specify being SDIO Rev. 1.1 cards but
> their FUNCE tuple reports the smaller size of a Rev 1.0 card. So,
> enforce 1.0 on these cards to avoid reading the not present registers.
> They are not really used anyhow. My cards initialize properly after this
> patch.
>
> Signed-off-by: Wolfram Sang 

Thanks, applied for next!

Kind regards
Uffe

> ---
>  drivers/mmc/core/sdio_cis.c | 7 ++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c
> index 6f6fc527a26338..dcb3dee59fa5f2 100644
> --- a/drivers/mmc/core/sdio_cis.c
> +++ b/drivers/mmc/core/sdio_cis.c
> @@ -177,8 +177,13 @@ static int cistpl_funce_func(struct mmc_card *card, 
> struct sdio_func *func,
> vsn = func->card->cccr.sdio_vsn;
> min_size = (vsn == SDIO_SDIO_REV_1_00) ? 28 : 42;
>
> -   if (size < min_size)
> +   if (size == 28 && vsn == SDIO_SDIO_REV_1_10) {
> +   pr_warn("%s: card has broken SDIO 1.1 CIS, forcing SDIO 
> 1.0\n",
> +   mmc_hostname(card->host));
> +   vsn = SDIO_SDIO_REV_1_00;
> +   } else if (size < min_size) {
> return -EINVAL;
> +   }
>
> /* TPLFE_MAX_BLK_SIZE */
> func->max_blksize = buf[12] | (buf[13] << 8);
> --
> 2.7.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


renesas-drivers-2016-05-10-v4.6-rc7

2016-05-10 Thread Geert Uytterhoeven
I have pushed renesas-drivers-2016-05-10-v4.6-rc7 to
https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git

This tree is meant to ease development of platform support and drivers
for Renesas ARM SoCs. It is created by merging (a) the for-next branches
of various subsystem trees and (b) branches with driver code submitted
or planned for submission to maintainers into the development branch of
Simon Horman's renesas.git tree.

Today's version is based on renesas-devel-20160509-v4.6-rc7.

Included branches with driver code:
  - topic/rcar-dmac-residue-v1
  - topic/rcar-dmac-hamza-v3
  - topic/ipmmu-multi-arch-v2
  - topic/ipmmu-CONFIG_IOMMU_DMA-update-v1
  - topic/r8a7795-ipmmu-v1
  - topic/salvator-x-ipmmu-rfc-v3-rebased2
  - topic/r8a7796-clk-v1
  - topic/r8a7796-sysc-v1
  - topic/r8a7796-integration-wip
  - git://linuxtv.org/pinchartl/media.git#drm/du/vsp1-kms/boards
  - topic/salvator-x-hdmi-prototype-v1-rebased4

Included subsystem trees:
  - git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git#linux-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git#clk-next
  - 
git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git#for-next
  - git://git.infradead.org/users/dedekind/l2-mtd-2.6.git#master
  - git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git#master
  - git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git#tty-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git#i2c/for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git#master
  - git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git#usb-next
  - git://people.freedesktop.org/~airlied/linux#drm-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git#next
  - git://linuxtv.org/mchehab/media-next.git#master
  - git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git#mmc-next
  - git://git.linaro.org/people/ulf.hansson/mmc.git#next
  - 
git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm.git#for-next
  - git://git.linaro.org/people/daniel.lezcano/linux.git#clockevents/next
  - git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git#testing/next
  - git://git.kernel.org/pub/scm/linux/kernel/git/djbw/dmaengine.git#next
  - git://git.infradead.org/users/vkoul/slave-dma.git#next
  - 
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git#staging-next
  - 
git://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-arm.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git#next
  - git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git#for-next
  - git://git.infradead.org/users/jcooper/linux.git#irqchip/for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git#for-next
  - git://git.infradead.org/battery-2.6.git#master
  - git://www.linux-watchdog.org/linux-watchdog-next.git#master
  - git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git#for-next
  - git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git#for-next/core
  - git://anongit.freedesktop.org/drm-intel#topic/drm-misc
  - git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git#next
  - git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git#next
  - 
git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git#next

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH] arm64: dts: r8a7795: Increase the size of GIC-400 mapped registers

2016-05-10 Thread Geert Uytterhoeven
CC Marc, lakml

On Tue, Apr 19, 2016 at 8:29 AM, Dirk Behme  wrote:
> From: Pooya Keshavarzi 
>
> There are some requirements about the GIC-400 memory layout and its
> mapping if using 64k aligned base addresses like on r8a7795.
>
> See e.g.
>
> http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=21550029f709072aacf3b9
>
> Map the whole memory range instead of only 0x2000. This will fix
> the issue that some hypervisors, e.g. Xen, fail to handle the
> interrupts correctly.
>
> Signed-off-by: Pooya Keshavarzi 
> Signed-off-by: Dirk Behme 

Based on my understanding below
Acked-by: Geert Uytterhoeven 

> ---
> Note: This patch is against renesas-drivers-2016-04-12-v4.6-rc3
>
>  arch/arm64/boot/dts/renesas/r8a7795.dtsi | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
> b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
> index 8be9424..d880fd4 100644
> --- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
> +++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
> @@ -160,9 +160,9 @@
> #address-cells = <0>;
> interrupt-controller;
> reg = <0x0 0xf101 0 0x1000>,
> - <0x0 0xf102 0 0x2000>,
> + <0x0 0xf102 0 0x2>,
>   <0x0 0xf104 0 0x2>,
> - <0x0 0xf106 0 0x2000>;
> + <0x0 0xf106 0 0x2>;
> interrupts =  (GIC_CPU_MASK_SIMPLE(4) | 
> IRQ_TYPE_LEVEL_HIGH)>;
> };

Region 0:
4 KiB-pages 0xf1011000-0xf101 are aliased to 0xf101-0xf1010fff,
but we need the first 4 KiB only.

Region 1:
4 KiB-pages 0xf1021000-0xf102 are aliased to 0xf102-0xf1020fff,
4 KiB-pages 0xf103-0xf103 are all zeroes, probably due to
non-secure mode?

Region 2:
4 KiB-pages 0xf1041000-0xf104 are aliased to 0xf104-0xf1040fff,
4 KiB-pages 0xf105-0xf105 are all zeroes, probably due to
non-secure mode?

Region 3:
4 KiB-pages 0xf1061000-0xf106 are aliased to 0xf106-0xf1060fff,
4 KiB-pages 0xf107-0xf107 are all zeroes, probably due to
non-secure mode?

Region 2 already had a 128 KiB size before, which allowed to use 8 KiB at
0xf104f000.

An 8 KiB size for regions 1 and 3 indeed didn't make much sense, as this
covered two identical (aliased) 4 KiB pages, instead of two different pages
at offset 0xf000.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


[PATCH 17/27] staging: ks7010: indent ks7010_sdio.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.h | 64 +---
 1 file changed, 30 insertions(+), 34 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index 1d16673e5dae02..aea3727caf483b 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -21,7 +21,7 @@
 #define DEVICE_ALIGNMENT 32
 
 /*  SDIO KeyStream vendor and device */
-#define SDIO_VENDOR_ID_KS_CODE_A   0x005b 
+#define SDIO_VENDOR_ID_KS_CODE_A   0x005b
 #define SDIO_VENDOR_ID_KS_CODE_B   0x0023
 #define SDIO_DEVICE_ID_KS_7010 0x7910
 
@@ -48,8 +48,8 @@
  * for network packet (less than 2048 bytes data)
  */
 #define WSTATUS_RSIZE  0x14
-#define WSTATUS_MASK   0x80 /* Write Status Register value */
-#define RSIZE_MASK 0x7F /* Read Data Size Register value [10:4] */
+#define WSTATUS_MASK   0x80/* Write Status Register value */
+#define RSIZE_MASK 0x7F/* Read Data Size Register value [10:4] 
*/
 
 /* ARM to SD interrupt Enable */
 #define INT_ENABLE 0x20
@@ -88,52 +88,48 @@
 
 #define KS7010_IRAM_ADDRESS0x0600
 
-
 /* 
  * struct define
  */
 struct hw_info_t {
-   struct ks_sdio_card *sdio_card; 
+   struct ks_sdio_card *sdio_card;
struct completion ks7010_sdio_wait;
struct workqueue_struct *ks7010sdio_wq;
struct delayed_work rw_wq;
-   unsigned char   *read_buf;
+   unsigned char *read_buf;
struct tasklet_struct rx_bh_task;
 };
 
 struct ks_sdio_packet {
-struct ks_sdio_packet   *next;
-u16 nb;
-u8  buffer[0] __attribute__((aligned(4)));
+   struct ks_sdio_packet *next;
+   u16 nb;
+   u8 buffer[0] __attribute__ ((aligned(4)));
 };
 
-
 struct ks_sdio_card {
-   struct sdio_func*func;
+   struct sdio_func *func;
struct ks_wlan_private *priv;
-   int model;
-   const char  *firmware;
-spinlock_t  lock;
+   int model;
+   const char *firmware;
+   spinlock_t lock;
 };
 
-
-
 /* Tx Device struct */
-#defineTX_DEVICE_BUFF_SIZE 1024 
+#defineTX_DEVICE_BUFF_SIZE 1024
 
 struct tx_device_buffer {
-unsigned char *sendp;  /* pointer of send req data */
-unsigned int  size;
-   void(*complete_handler)(void *arg1, void *arg2);
-   void*arg1;
-   void*arg2;
+   unsigned char *sendp;   /* pointer of send req data */
+   unsigned int size;
+   void (*complete_handler) (void *arg1, void *arg2);
+   void *arg1;
+   void *arg2;
 };
 
-struct tx_device{
-struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
-unsigned int   qhead; /* tx buffer queue first pointer */
-unsigned int   qtail; /* tx buffer queue last pointer */
-spinlock_t  tx_dev_lock;
+struct tx_device {
+   struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
+   unsigned int qhead; /* tx buffer queue first pointer */
+   unsigned int qtail; /* tx buffer queue last pointer */
+   spinlock_t tx_dev_lock;
 };
 
 /* Rx Device struct */
@@ -141,15 +137,15 @@ struct tx_device{
 #defineRX_DEVICE_BUFF_SIZE 32
 
 struct rx_device_buffer {
-   unsigned char   data[RX_DATA_SIZE];
-   unsigned intsize;
+   unsigned char data[RX_DATA_SIZE];
+   unsigned int size;
 };
 
-struct rx_device{
-struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
-unsigned int   qhead; /* rx buffer queue first pointer */
-   unsigned intqtail; /* rx buffer queue last pointer */
-   spinlock_t  rx_dev_lock;
+struct rx_device {
+   struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
+   unsigned int qhead; /* rx buffer queue first pointer */
+   unsigned int qtail; /* rx buffer queue last pointer */
+   spinlock_t rx_dev_lock;
 };
 #defineROM_FILE "ks7010sd.rom"
 #defineCFG_FILE "ks79xx.cfg"
-- 
2.8.1



[PATCH 16/27] staging: ks7010: indent ks7010_config.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 353 +
 1 file changed, 184 insertions(+), 169 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 48809bcc779739..4b495cbef48165 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -15,7 +15,8 @@ static int wep_type;
 #defineWEP_KEY_HEX   1
 
 static
-void analyze_character_wep_key(struct ks_wlan_parameter *param, int 
wep_key_index, char *value)
+void analyze_character_wep_key(struct ks_wlan_parameter *param,
+  int wep_key_index, char *value)
 {
int i;
unsigned char wep_key[26], key_length;
@@ -23,64 +24,69 @@ void analyze_character_wep_key(struct ks_wlan_parameter 
*param, int wep_key_inde
key_length = (wep_on_off == WEP_ON_64BIT) ? 5 : 13;
/* 64bit key_length = 5; 128bit key_length = 13; */
 
-   for (i=0; i 3)
+   if (wep_key_index < 0 || wep_key_index > 3)
return;
 
param->wep_key[wep_key_index].size = key_length;
-   for (i=0; i<(param->wep_key[wep_key_index].size); i++) {
+   for (i = 0; i < (param->wep_key[wep_key_index].size); i++) {
param->wep_key[wep_key_index].val[i] = wep_key[i];
}
 }
 
 static
-void analyze_hex_wep_key(struct ks_wlan_parameter *param, int wep_key_index, 
char *value)
+void analyze_hex_wep_key(struct ks_wlan_parameter *param, int wep_key_index,
+char *value)
 {
unsigned char wep_end[26], i, j, key_length;
 
key_length = (wep_on_off == WEP_ON_64BIT) ? 10 : 26;
/* 64bit key_length = 10; 128bit key_length = 26; */
 
-   for (i=0; i 3)
-   return ;
+   if (wep_key_index < 0 || wep_key_index > 3)
+   return;
 
-   param->wep_key[wep_key_index].size = key_length/2;
-   for (i=0; i<(param->wep_key[wep_key_index].size); i++) {
+   param->wep_key[wep_key_index].size = key_length / 2;
+   for (i = 0; i < (param->wep_key[wep_key_index].size); i++) {
param->wep_key[wep_key_index].val[i] = wep_end[i];
}
 
@@ -89,62 +95,57 @@ void analyze_hex_wep_key(struct ks_wlan_parameter *param, 
int wep_key_index, cha
 static
 int rate_set_configuration(struct ks_wlan_private *priv, char *value)
 {
-   int rc=0;
+   int rc = 0;
 
priv->reg.tx_rate = TX_RATE_FIXED;
priv->reg.rate_set.size = 1;
 
-   switch(*value){
-   case '1': /* 1M 11M 12M 18M */
-   if(*(value+1) == '8'){
+   switch (*value) {
+   case '1':   /* 1M 11M 12M 18M */
+   if (*(value + 1) == '8') {
priv->reg.rate_set.body[0] = TX_RATE_18M;
-   }
-   else if(*(value+1) == '2'){
-   priv->reg.rate_set.body[0] = TX_RATE_12M|BASIC_RATE;
-   }
-   else if(*(value+1) == '1'){
-   priv->reg.rate_set.body[0] = TX_RATE_11M|BASIC_RATE;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_1M|BASIC_RATE;
+   } else if (*(value + 1) == '2') {
+   priv->reg.rate_set.body[0] = TX_RATE_12M | BASIC_RATE;
+   } else if (*(value + 1) == '1') {
+   priv->reg.rate_set.body[0] = TX_RATE_11M | BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_1M | BASIC_RATE;
}
break;
-   case '2': /* 2M 24M */
-   if(*(value+1) == '4'){
-   priv->reg.rate_set.body[0] = TX_RATE_24M|BASIC_RATE;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_2M|BASIC_RATE;
+   case '2':   /* 2M 24M */
+   if (*(value + 1) == '4') {
+   priv->reg.rate_set.body[0] = TX_RATE_24M | BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_2M | BASIC_RATE;
}
break;
-   case '3': /* 36M */
+   case '3':   /* 36M */
priv->reg.rate_set.body[0] = TX_RATE_36M;
break;
-   case '4': /* 48M */
+   case '4':   /* 48M */
priv->reg.rate_set.body[0] = TX_RATE_48M;
break;
-   case '5': /* 5.5M 54M */
-   if(*(value+1) == '4'){
+   case '5':   /* 5.5M 54M */
+   if (*(value + 1) == '4') {
priv->reg.rate_set.body[0] = TX_RATE_54M;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_5M|BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_5M | BASIC_RATE;
}
break;
-   case '6': /* 6M */
-

[PATCH 15/27] staging: ks7010: indent eap_packet.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/eap_packet.h | 49 ++---
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/ks7010/eap_packet.h 
b/drivers/staging/ks7010/eap_packet.h
index b664bdd8c961db..88384fb19d9580 100644
--- a/drivers/staging/ks7010/eap_packet.h
+++ b/drivers/staging/ks7010/eap_packet.h
@@ -14,13 +14,13 @@
 #endif
 
 struct ether_hdr {
-   unsigned char   h_dest[ETH_ALEN];   /* destination eth addr */
-   unsigned char   h_source[ETH_ALEN]; /* source ether addr*/
-   unsigned char   h_dest_snap;
-   unsigned char   h_source_snap;
-   unsigned char   h_command;
-   unsigned char   h_vendor_id[3];
-   unsigned short  h_proto;/* packet type ID field */
+   unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
+   unsigned char h_source[ETH_ALEN];   /* source ether addr*/
+   unsigned char h_dest_snap;
+   unsigned char h_source_snap;
+   unsigned char h_command;
+   unsigned char h_vendor_id[3];
+   unsigned short h_proto; /* packet type ID field */
 #define ETHER_PROTOCOL_TYPE_EAP0x888e
 #define ETHER_PROTOCOL_TYPE_IP 0x0800
 #define ETHER_PROTOCOL_TYPE_ARP0x0806
@@ -37,15 +37,15 @@ struct ieee802_1x_hdr {
 #define EAPOL_VERSION 2
 
 enum { IEEE802_1X_TYPE_EAP_PACKET = 0,
-   IEEE802_1X_TYPE_EAPOL_START = 1,
-   IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
-   IEEE802_1X_TYPE_EAPOL_KEY = 3,
-   IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
+   IEEE802_1X_TYPE_EAPOL_START = 1,
+   IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
+   IEEE802_1X_TYPE_EAPOL_KEY = 3,
+   IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
 };
 
 enum { EAPOL_KEY_TYPE_RC4 = 1, EAPOL_KEY_TYPE_RSN = 2,
-   EAPOL_KEY_TYPE_WPA = 254 };
-
+   EAPOL_KEY_TYPE_WPA = 254
+};
 
 #define IEEE8021X_REPLAY_COUNTER_LEN 8
 #define IEEE8021X_KEY_SIGN_LEN 16
@@ -60,11 +60,11 @@ struct ieee802_1x_eapol_key {
/* does not repeat within the life of the keying material used to
 * encrypt the Key field; 64-bit NTP timestamp MAY be used here */
unsigned char replay_counter[IEEE8021X_REPLAY_COUNTER_LEN];
-   unsigned char key_iv[IEEE8021X_KEY_IV_LEN]; /* cryptographically random 
number */
-   unsigned char key_index; /* key flag in the most significant bit:
-  * 0 = broadcast (default key),
-  * 1 = unicast (key mapping key); key index is in the
-  * 7 least significant bits */
+   unsigned char key_iv[IEEE8021X_KEY_IV_LEN]; /* cryptographically 
random number */
+   unsigned char key_index;/* key flag in the most significant bit:
+* 0 = broadcast (default key),
+* 1 = unicast (key mapping key); key 
index is in the
+* 7 least significant bits */
/* HMAC-MD5 message integrity check computed with MS-MPPE-Send-Key as
 * the key */
unsigned char key_signature[IEEE8021X_KEY_SIGN_LEN];
@@ -77,19 +77,18 @@ struct ieee802_1x_eapol_key {
 * RC4 key used in encryption = Key-IV + MS-MPPE-Recv-Key */
 } __attribute__ ((packed));
 
-
 #define WPA_NONCE_LEN 32
 #define WPA_REPLAY_COUNTER_LEN 8
 
 struct wpa_eapol_key {
unsigned char type;
-   unsigned short key_info;
+   unsigned short key_info;
unsigned short key_length;
unsigned char replay_counter[WPA_REPLAY_COUNTER_LEN];
unsigned char key_nonce[WPA_NONCE_LEN];
unsigned char key_iv[16];
unsigned char key_rsc[8];
-   unsigned char key_id[8]; /* Reserved in IEEE 802.11i/RSN */
+   unsigned char key_id[8];/* Reserved in IEEE 802.11i/RSN */
unsigned char key_mic[16];
unsigned short key_data_length;
/* followed by key_data_length bytes of key_data */
@@ -98,18 +97,18 @@ struct wpa_eapol_key {
 #define WPA_KEY_INFO_TYPE_MASK (WBIT(0) | WBIT(1) | WBIT(2))
 #define WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 WBIT(0)
 #define WPA_KEY_INFO_TYPE_HMAC_SHA1_AES WBIT(1)
-#define WPA_KEY_INFO_KEY_TYPE WBIT(3) /* 1 = Pairwise, 0 = Group key */
+#define WPA_KEY_INFO_KEY_TYPE WBIT(3)  /* 1 = Pairwise, 0 = Group key */
 /* bit4..5 is used in WPA, but is reserved in IEEE 802.11i/RSN */
 #define WPA_KEY_INFO_KEY_INDEX_MASK (WBIT(4) | WBIT(5))
 #define WPA_KEY_INFO_KEY_INDEX_SHIFT 4
-#define WPA_KEY_INFO_INSTALL WBIT(6) /* pairwise */
-#define WPA_KEY_INFO_TXRX WBIT(6) /* group */
+#define WPA_KEY_INFO_INSTALL WBIT(6)   /* pairwise */
+#define WPA_KEY_INFO_TXRX WBIT(6)  /* group */
 #define WPA_KEY_INFO_ACK WBIT(7)
 #define WPA_KEY_INFO_MIC WBIT(8)
 #define WPA_KEY_INFO_SECURE WBIT(9)
 #define WPA_KEY_INFO_ERROR WBIT(10)
 #define WPA_KEY_INFO_REQUEST WBIT(11)
-#define WPA_KEY_INFO_ENCR_KEY_DATA WBIT(12) /* IEEE 802.11i/RSN only */

[PATCH 03/27] staging: ks7010: remove custom firmware loader

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

FW_LOADER works fine, no need for a open coded fallback.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Kconfig |  1 +
 drivers/staging/ks7010/ks7010_config.c | 62 --
 drivers/staging/ks7010/ks7010_sdio.c   | 56 --
 drivers/staging/ks7010/ks7010_sdio.h   |  5 ---
 4 files changed, 1 insertion(+), 123 deletions(-)

diff --git a/drivers/staging/ks7010/Kconfig b/drivers/staging/ks7010/Kconfig
index dfd4eed539bebc..0b9217674d5b54 100644
--- a/drivers/staging/ks7010/Kconfig
+++ b/drivers/staging/ks7010/Kconfig
@@ -3,6 +3,7 @@ config KS7010
depends on MMC && WIRELESS
select WIRELESS_EXT
select WEXT_PRIV
+   select FW_LOADER
help
  This is a driver for KeyStream KS7010 based SDIO WIFI cards. It is
  found on at least later Spectec SDW-821 (FCC-ID "S2Y-WLAN-11G-K" only,
diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index e8a42077a4b381..7d33070b3428e7 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -169,11 +169,7 @@ int rate_set_configuration(ks_wlan_private *priv, char 
*value)
return rc;
 }
 
-#ifndef NO_FIRMWARE_CLASS
 #include 
-#else
-#define MAX_CONFIG_FILE_SIZE (1024*10)
-#endif
 int ks_wlan_read_config_file(ks_wlan_private *priv)
 {
struct {
@@ -206,18 +202,9 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
{0,"",""},
};
 
-#ifndef NO_FIRMWARE_CLASS
const struct firmware *fw_entry;
struct device *dev = NULL;
int retval;
-#else
-   struct file *srcf;
-   int nr_read ;
-   int retval;
-   char *cfg_buf=NULL;
-   int orgfsuid, orgfsgid;
-   mm_segment_t orgfs;
-#endif
char cfg_file[]=CFG_FILE;
char *cur_p, *end_p;
char wk_buff[256], *wk_p;
@@ -267,7 +254,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.tx_rate = TX_RATE_FULL_AUTO;
priv->reg.rate_set.size = 12;
 
-#ifndef NO_FIRMWARE_CLASS
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
@@ -277,46 +263,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
end_p = cur_p + fw_entry->size;
-#else
-   orgfsuid=current->fsuid;
-   orgfsgid=current->fsgid;
-   orgfs=get_fs();
-   set_fs(KERNEL_DS);
-
-   srcf = filp_open(cfg_file, O_RDONLY, 0);
-   if (IS_ERR(srcf)) {
-   printk(KERN_ERR "error %ld opening %s\n", 
-PTR_ERR(srcf),cfg_file);
-   goto no_config_file;
-   }
-
-   if (!(srcf->f_op && srcf->f_op->read)) {
-   printk(KERN_ERR "%s does not have a read 
method\n", cfg_file);
-   goto no_config_file;
-   }
-
-   cfg_buf = (char *)kzalloc(MAX_CONFIG_FILE_SIZE, GFP_ATOMIC);
-   if (!cfg_buf) {
-   printk(KERN_ERR "%s does not read : out of 
memory \n", cfg_file);
-   goto no_config_file;
-   }
-
-   nr_read = srcf->f_op->read(srcf, (unsigned char *)cfg_buf, 
MAX_CONFIG_FILE_SIZE, &srcf->f_pos);
-
-   DPRINTK(1, "read retval=%d  file=%s\n", nr_read, priv->reg.cfg_file);
-   retval=filp_close(srcf ,NULL);
-   if (retval)
-   DPRINTK(1, "error %d closing %s\n", -retval,priv->reg.cfg_file);
-
-   if (nr_read < 1) {
-   printk(KERN_ERR "%s does not read : file is 
empty  num=%d\n", cfg_file, nr_read);
-   goto no_config_file;
-   }else if(nr_read > MAX_CONFIG_FILE_SIZE){
-   printk(KERN_ERR "%s does not read : file is too 
big \n", cfg_file);
-   goto no_config_file;
-   }
-   cur_p = cfg_buf;
-   end_p = cur_p + nr_read;
-#endif
*end_p = '\0';
 
while (cur_p < end_p) {
@@ -524,15 +470,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
}
 
}
-#ifndef NO_FIRMWARE_CLASS
release_firmware(fw_entry);
-#else
-no_config_file:
-   kfree(cfg_buf);
-   set_fs(orgfs);
-   current->fsuid=orgfsuid;
-   current->fsgid=orgfsgid;
-#endif
 
DPRINTK(3,"\noperation_mode = %d\nchannel = %d\nssid = %s\n 
   tx_rate = %d\n \
preamble = %d\npowermgt = %d\nscan_type = %d\nbeacon_lost_count 
= %d\nrts = %d\n \
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 7cc49a4ccac549..9300658c4aed8d 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -56,10 +56,6 @@ static

[PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Wolfram Sang
This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
See patch 1 and README for more details about its origin. To have the card
working, you need another patch which is already in mmc/next:

https://patchwork.kernel.org/patch/9043341/

A working topic branch for the Renesas H3 can be found here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
renesas/topic/gen3-sdio

This series only can be found here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010

Note: I needed this driver to verify SDIO capabilities for the new Renesas H3
SoC. The fact that the original KS7010 driver also comes from Renesas is a
coincidence. It does not mean official support for this driver. Parts of this
work were backed by the above mentioned SDIO verification task while other
parts were my personal interest. Future patches and reviews will also done by
me as a private person (unless something very surprising happens ;))

Please comment, review, apply...

Thanks,

   Wolfram

Wolfram Sang (27):
  staging: ks7010: add driver from Nanonote extra-repository
  staging: ks7010: remove non-SDIO code and #ifdefs
  staging: ks7010: remove custom firmware loader
  staging: ks7010: remove checks for WIRELESS_EXT version
  staging: ks7010: remove code for old kernel versions
  staging: ks7010: avoid workqueue races
  staging: ks7010: use long preamble as default
  staging: ks7010: use kernel helper to print buffer
  staging: ks7010: delete seperate debug header
  staging: ks7010: really iterate over multicast addresses
  staging: ks7010: make loading config file optional
  staging: ks7010: fix printk format warnings
  staging: ks7010: add example cfg file as a reference
  staging: ks7010: remove unecessary typedef
  staging: ks7010: indent eap_packet.h
  staging: ks7010: indent ks7010_config.c
  staging: ks7010: indent ks7010_sdio.h
  staging: ks7010: indent ks_hostif.c
  staging: ks7010: indent ks_hostif.h
  staging: ks7010: indent ks_wlan.h
  staging: ks7010: indent ks_wlan_ioctl.h
  staging: ks7010: indent ks_wlan_net.c
  staging: ks7010: indent michael_mic.c
  staging: ks7010: indent michael_mic.h
  staging: ks7010: indent ks7010_sdio.c
  staging: ks7010: remove supported card table with one element
  staging: ks7010: fix module annotations

 drivers/staging/Kconfig|2 +
 drivers/staging/Makefile   |1 +
 drivers/staging/ks7010/Kconfig |   10 +
 drivers/staging/ks7010/Makefile|5 +
 drivers/staging/ks7010/README  |   37 +
 drivers/staging/ks7010/eap_packet.h|  135 ++
 drivers/staging/ks7010/ks7010_config.c |  500 +
 drivers/staging/ks7010/ks7010_sdio.c   | 1267 
 drivers/staging/ks7010/ks7010_sdio.h   |  152 ++
 drivers/staging/ks7010/ks79xx.cfg  |  116 ++
 drivers/staging/ks7010/ks_hostif.c | 2763 +
 drivers/staging/ks7010/ks_hostif.h |  647 ++
 drivers/staging/ks7010/ks_wlan.h   |  508 +
 drivers/staging/ks7010/ks_wlan_ioctl.h |   70 +
 drivers/staging/ks7010/ks_wlan_net.c   | 3547 
 drivers/staging/ks7010/michael_mic.c   |  142 ++
 drivers/staging/ks7010/michael_mic.h   |   29 +
 17 files changed, 9931 insertions(+)
 create mode 100644 drivers/staging/ks7010/Kconfig
 create mode 100644 drivers/staging/ks7010/Makefile
 create mode 100644 drivers/staging/ks7010/README
 create mode 100644 drivers/staging/ks7010/eap_packet.h
 create mode 100644 drivers/staging/ks7010/ks7010_config.c
 create mode 100644 drivers/staging/ks7010/ks7010_sdio.c
 create mode 100644 drivers/staging/ks7010/ks7010_sdio.h
 create mode 100644 drivers/staging/ks7010/ks79xx.cfg
 create mode 100644 drivers/staging/ks7010/ks_hostif.c
 create mode 100644 drivers/staging/ks7010/ks_hostif.h
 create mode 100644 drivers/staging/ks7010/ks_wlan.h
 create mode 100644 drivers/staging/ks7010/ks_wlan_ioctl.h
 create mode 100644 drivers/staging/ks7010/ks_wlan_net.c
 create mode 100644 drivers/staging/ks7010/michael_mic.c
 create mode 100644 drivers/staging/ks7010/michael_mic.h

-- 
2.8.1



[PATCH 04/27] staging: ks7010: remove checks for WIRELESS_EXT version

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We are by far newer than that anyhow.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c   | 23 ---
 drivers/staging/ks7010/ks_wlan_net.c | 14 --
 2 files changed, 37 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 0295bb4921fa20..6bea699655eec4 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -22,12 +22,7 @@
 #include 
 
 /* Include Wireless Extension definition and check version */
-#ifndef WIRELESS_EXT
-#include 
-#endif /* WIRELESS_EXT */
-#if WIRELESS_EXT > 12
 #include /* New driver API */
-#endif /* WIRELESS_EXT > 12 */
 
 extern int ks_wlan_hw_tx(ks_wlan_private *priv, void *p, unsigned long size,
 void (*complete_handler)(void *arg1, void *arg2),
@@ -121,10 +116,8 @@ static
 int get_current_ap(ks_wlan_private *priv, struct link_ap_info_t *ap_info)
 {
struct local_ap_t *ap;
-#if WIRELESS_EXT > 13
union iwreq_data wrqu;
struct net_device *netdev=priv->net_dev;
-#endif /* WIRELESS_EXT > 13 */
int rc=0;
 
DPRINTK(3,"\n");
@@ -190,7 +183,6 @@ int get_current_ap(ks_wlan_private *priv, struct 
link_ap_info_t *ap_info)
ap->wpa_ie.size = 0;
}
 
-#if WIRELESS_EXT > 13
wrqu.data.length = 0;
wrqu.data.flags = 0;
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
@@ -203,7 +195,6 @@ int get_current_ap(ks_wlan_private *priv, struct 
link_ap_info_t *ap_info)
(unsigned char)wrqu.ap_addr.sa_data[4],(unsigned 
char)wrqu.ap_addr.sa_data[5]);
wireless_send_event(netdev, SIOCGIWAP, &wrqu, NULL);
}
-#endif
DPRINTK(4,"\nLink AP\n");
DPRINTK(4,"bssid=%02X:%02X:%02X:%02X:%02X:%02X\n \
essid=%s\nrate_set=%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X\n
channel=%d\n \
@@ -338,9 +329,7 @@ void hostif_data_indication(ks_wlan_private *priv)
struct ieee802_1x_hdr *aa1x_hdr;
struct wpa_eapol_key *eap_key;
struct michel_mic_t michel_mic;
-#if WIRELESS_EXT > 14
union iwreq_data wrqu;
-#endif /* WIRELESS_EXT > 14 */
 
DPRINTK(3,"\n");
 
@@ -412,7 +401,6 @@ void hostif_data_indication(ks_wlan_private *priv)
mic_failure->counter = 
1;
}
priv->wpa.mic_failure.last_failure_time 
= now;
-#if WIRELESS_EXT > 14
/*  needed parameters: count, keyid, 
key type, TSC */
sprintf(buf, 
"MLME-MICHAELMICFAILURE.indication(keyid=%d %scast addr="

"%02x:%02x:%02x:%02x:%02x:%02x)",
@@ -424,7 +412,6 @@ void hostif_data_indication(ks_wlan_private *priv)
wrqu.data.length = strlen(buf);

DPRINTK(4,"IWEVENT:MICHAELMICFAILURE\n");
wireless_send_event(priv->net_dev, 
IWEVCUSTOM, &wrqu, buf);
-#endif /* WIRELESS_EXT > 14 */
return;
}
}
@@ -754,9 +741,7 @@ void hostif_connect_indication(ks_wlan_private *priv)
unsigned int tmp=0;
unsigned int old_status=priv->connect_status;
struct net_device *netdev=priv->net_dev;
-#if WIRELESS_EXT > 13
union iwreq_data wrqu0;
-#endif /* WIRELESS_EXT > 13 */
connect_code = get_WORD(priv);
 
switch(connect_code){
@@ -791,7 +776,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
}
ks_wlan_do_power_save(priv);
 
-#if WIRELESS_EXT > 13
wrqu0.data.length = 0;
wrqu0.data.flags = 0;
wrqu0.ap_addr.sa_family = ARPHRD_ETHER;
@@ -802,7 +786,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
DPRINTK(3,"disconnect :: 
scan_ind_count=%d\n",priv->scan_ind_count);
wireless_send_event(netdev, SIOCGIWAP, &wrqu0, NULL);
}
-#endif /* WIRELESS_EXT > 13 */
priv->scan_ind_count=0;
 }
 
@@ -904,7 +887,6 @@ void hostif_adhoc_set_confirm(ks_wlan_private *priv)
 static
 void hostif_associate_indication(ks_wlan_private *priv)
 {
-#if WIRELESS_EXT > 14
struct association_request_t *assoc_req;
struct association_response_t *assoc_resp;
unsigned char *pb;
@@ -944,29 +926,24 @@ void hostif_associate_indication(ks_wlan_private *priv)
 
DPRINTK(3,"IWEVENT:ASSOCINFO\n");
wireless_send_event(priv->net_dev, IWEVCUSTOM, &wrqu, buf);
-#endif /* WIRELESS_EXT > 14 */
 }
 
 static
 void hostif_bss_scan_confirm(ks_wlan_private *priv)
 {
unsigned int result_code;
-#if WIRELESS_EXT > 13
struct net_device *dev = priv->net_dev;
union iwreq_data wrqu;
-#endif /* WIRELESS_EXT > 13 */
result_code =

[PATCH 05/27] staging: ks7010: remove code for old kernel versions

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

No need to be backwards compatible.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c   |  9 -
 drivers/staging/ks7010/ks_wlan.h | 28 +---
 drivers/staging/ks7010/ks_wlan_net.c |  3 ---
 3 files changed, 1 insertion(+), 39 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 6bea699655eec4..146a1357909b39 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -2103,11 +2103,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
 
 struct net_device *dev = priv->net_dev;
int mc_count;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
struct netdev_hw_addr *ha;
-#else
-   struct dev_mc_list *mclist;
-#endif
charset_address[NIC_MAX_MCAST_LIST*ETH_ALEN];
unsigned long filter_type;
int i;
@@ -2131,14 +2127,9 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
else {
if (priv->sme_i.sme_flag & SME_MULTICAST){
mc_count = netdev_mc_count(dev);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
netdev_for_each_mc_addr(ha, dev) {
memcpy(&set_address[i*ETH_ALEN], ha->addr, 
ETH_ALEN);
}
-#else
-   for (i = 0, mclist = dev->mc_list; mclist && i < 
mc_count; i++, mclist = mclist->next)
-   memcpy(&set_address[i*ETH_ALEN], 
mclist->dmi_addr, ETH_ALEN);
-#endif
priv->sme_i.sme_flag &= ~SME_MULTICAST;
hostif_mib_set_request(priv, LOCAL_MULTICAST_ADDRESS,
   (ETH_ALEN*mc_count), 
MIB_VALUE_TYPE_OSTRING, &set_address[0]);
diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 329a062419fe4a..6bd016414a4f1d 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -18,9 +18,6 @@
 #define WPS
 
 #include 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) 
-#include 
-#endif
 #include 
 #include 
 #include 
@@ -35,32 +32,9 @@
 #include/* struct timer_list */
 #include 
 #include/* struct completion */
-
-#include 
-
-/* Workqueue / task queue backwards compatibility stuff */
-#if ((LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41)) || (defined _MVL31_) || 
(defined _CELF3_))
 #include 
-#else
-#include 
-#define work_struct tq_struct
-#define INIT_WORK INIT_TQUEUE
-#define schedule_work schedule_task
-#endif
 
-/* Interrupt handler backwards compatibility stuff */
-/*
-#ifndef IRQ_NONE
-#define IRQ_NONE
-#define IRQ_HANDLED
-typedef void irqreturn_t;
-#endif
-*/
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
-#define free_netdev(x) kfree(x) 
-#define pci_name(x) x->slot_name 
-#endif
+#include 
 
 #include "ks7010_sdio.h"
 
diff --git a/drivers/staging/ks7010/ks_wlan_net.c 
b/drivers/staging/ks7010/ks_wlan_net.c
index 185630cb423d5e..776a544031495f 100644
--- a/drivers/staging/ks7010/ks_wlan_net.c
+++ b/drivers/staging/ks7010/ks_wlan_net.c
@@ -13,9 +13,6 @@
  */
 
 #include 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
-#include 
-#endif
 #include 
 #include 
 #include 
-- 
2.8.1



[PATCH 02/27] staging: ks7010: remove non-SDIO code and #ifdefs

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

I couldn't find any trace of code or even products using ks7010 with
something else than SDIO. So, remove the conditionals.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Makefile|  2 +-
 drivers/staging/ks7010/ks7010_config.c |  6 ---
 drivers/staging/ks7010/ks_hostif.c | 70 --
 drivers/staging/ks7010/ks_wlan.h   | 10 -
 4 files changed, 1 insertion(+), 87 deletions(-)

diff --git a/drivers/staging/ks7010/Makefile b/drivers/staging/ks7010/Makefile
index 68b7ebf57bebd6..32b0efc7bd00e8 100644
--- a/drivers/staging/ks7010/Makefile
+++ b/drivers/staging/ks7010/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_KS7010) += ks7010.o
 
-ccflags-y   += -D_SDIO_ -DKS_WLAN_DEBUG=0
+ccflags-y   += -DKS_WLAN_DEBUG=0
 ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o ks_debug.o \
ks7010_sdio.o ks7010_config.o
diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 4a8098452cdd28..e8a42077a4b381 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -268,13 +268,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.rate_set.size = 12;
 
 #ifndef NO_FIRMWARE_CLASS
-#if (defined _PCMCIA_)
-   dev = &priv->ks_wlan_hw.pcmcia_dev->dev;
-#elif (defined _PCI_)
-   dev = &priv->ks_wlan_hw.pci_dev->dev;
-#elif (defined _SDIO_)
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
-#endif
if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
return 1;
diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 402ddba400ffdd..0295bb4921fa20 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -108,51 +108,12 @@ int ks_wlan_do_power_save(ks_wlan_private *priv)
 
DPRINTK(4,"psstatus.status=%d\n",atomic_read(&priv->psstatus.status));
 
-#ifdef _SDIO_
if((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS){
hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
}
else{
priv->dev_state = DEVICE_STATE_READY;
}
-#else
-   if((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS){
-   switch(atomic_read(&priv->psstatus.status)){
-   case PS_ACTIVE_SET:
-   case PS_WAKEUP:
-   case PS_SAVE_SET:
-   case PS_SNOOZE:
-   break;
-   case PS_CONF_WAIT:
-   atomic_set(&priv->psstatus.confirm_wait,0);
-   break;
-   case PS_NONE:
-   default:
-   hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
-   break;
-   }
-
-   }
-   else{
-   switch(atomic_read(&priv->psstatus.status)){
-   case PS_ACTIVE_SET:
-   case PS_WAKEUP:
-   case PS_SAVE_SET:
-   break;
-   case PS_CONF_WAIT:
-   atomic_set(&priv->psstatus.confirm_wait,0);
-   atomic_set(&priv->psstatus.status, PS_WAKEUP);
-   break;
-   case PS_SNOOZE:
-   ks_wlan_hw_power_save(priv);
-   break;
-   case PS_NONE:
-   default:
-   hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
-   break;
-   }
-   }
-#endif
return rc;
 }
 
@@ -750,17 +711,11 @@ void hostif_power_mngmt_confirm(ks_wlan_private *priv)
 
if(priv->reg.powermgt > POWMGT_ACTIVE_MODE &&
   priv->reg.operation_mode == MODE_INFRASTRUCTURE){
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status,PS_SAVE_SET);
-#endif
atomic_set(&priv->psstatus.confirm_wait, 0);
priv->dev_state = DEVICE_STATE_SLEEP;
ks_wlan_hw_power_save(priv);
}else{
priv->dev_state = DEVICE_STATE_READY;
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status,PS_ACTIVE_SET);
-#endif
}
 
 }
@@ -833,9 +788,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
/* for power save */
atomic_set(&priv->psstatus.snooze_guard, 0);
atomic_set(&priv->psstatus.confirm_wait,0);
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status, PS_NONE);
-#endif
}
ks_wlan_do_power_save(priv);
 
@@ -894,10 +846,8 @@ void hostif_stop_confirm(ks_wlan_private *priv)
union iwreq_data wrqu0;
 
DPRINTK(3,"\n");
-#ifdef _SDIO_
if(priv->dev_state == DEVICE_STATE_SLEEP)
priv->dev_state = DEVICE_STATE_READY;
-#endif
 
/* discon

[PATCH 19/27] staging: ks7010: indent ks_hostif.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.h | 525 ++---
 1 file changed, 262 insertions(+), 263 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.h 
b/drivers/staging/ks7010/ks_hostif.h
index c333ce1a4baa6e..01de478d45ea60 100644
--- a/drivers/staging/ks7010/ks_hostif.h
+++ b/drivers/staging/ks7010/ks_hostif.h
@@ -62,141 +62,140 @@
  */
 
 struct hostif_hdr {
-   uint16_tsize;
-   uint16_tevent;
-} __attribute__((packed));
+   uint16_t size;
+   uint16_t event;
+} __attribute__ ((packed));
 
 struct hostif_data_request_t {
struct hostif_hdr header;
-   uint16_tauth_type;
+   uint16_t auth_type;
 #define TYPE_DATA 0x
 #define TYPE_AUTH 0x0001
-   uint16_treserved;
-   uint8_t data[0];
-} __attribute__((packed));
+   uint16_t reserved;
+   uint8_t data[0];
+} __attribute__ ((packed));
 
 struct hostif_data_indication_t {
struct hostif_hdr header;
-   uint16_tauth_type;
+   uint16_t auth_type;
 /* #define TYPE_DATA 0x */
 #define TYPE_PMK1 0x0001
 #define TYPE_GMK1 0x0002
 #define TYPE_GMK2 0x0003
-   uint16_treserved;
-   uint8_t data[0];
-} __attribute__((packed));
+   uint16_t reserved;
+   uint8_t data[0];
+} __attribute__ ((packed));
 
 #define CHANNEL_LIST_MAX_SIZE 14
 struct channel_list_t {
-   uint8_t size;
-   uint8_t body[CHANNEL_LIST_MAX_SIZE];
-   uint8_t pad;
-} __attribute__((packed));
+   uint8_t size;
+   uint8_t body[CHANNEL_LIST_MAX_SIZE];
+   uint8_t pad;
+} __attribute__ ((packed));
 
 /* MIB Attribute */
-#define DOT11_MAC_ADDRESS 0x21010100 /* MAC Address (R) */
-#define DOT11_PRODUCT_VERSION 0x31024100 /* FirmWare Version (R)*/
-#define DOT11_RTS_THRESHOLD   0x21020100 /* RTS Threshold (R/W) */
-#define DOT11_FRAGMENTATION_THRESHOLD 0x21050100 /* Fragment Threshold 
(R/W) */
-#define DOT11_PRIVACY_INVOKED 0x15010100 /* WEP ON/OFF (W) */
-#define DOT11_WEP_DEFAULT_KEY_ID  0x15020100 /* WEP Index (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE1  0x13020101 /* WEP Key#1(TKIP AES: 
PairwiseTemporalKey) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE2  0x13020102 /* WEP Key#2(TKIP AES: 
GroupKey1) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE3  0x13020103 /* WEP Key#3(TKIP AES: 
GroupKey2) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE4  0x13020104 /* WEP Key#4 (W) */
-#define DOT11_WEP_LIST0x13020100 /* WEP LIST */
-#defineDOT11_DESIRED_SSID0x11090100 /* SSID */
-#defineDOT11_CURRENT_CHANNEL 0x45010100 /* channel set */
-#defineDOT11_OPERATION_RATE_SET  0x0100 /* rate set */
-
-#define LOCAL_AP_SEARCH_INTEAVAL  0xF1010100 /* AP search interval 
(R/W) */
-#define LOCAL_CURRENTADDRESS  0xF1050100 /* MAC Adress change (W) 
*/
-#define LOCAL_MULTICAST_ADDRESS   0xF1060100 /* Multicast Adress (W) */
-#define LOCAL_MULTICAST_FILTER0xF1060200 /* Multicast Adress 
Filter enable/disable (W) */
-#define LOCAL_SEARCHED_AP_LIST0xF1030100 /* AP list (R) */
-#define LOCAL_LINK_AP_STATUS  0xF1040100 /* Link AP status (R) */
-#defineLOCAL_PACKET_STATISTICS   0xF1020100 /* tx,rx packets 
statistics */
-#define LOCAL_AP_SCAN_LIST_TYPE_SET  0xF1030200 /* AP_SCAN_LIST_TYPE */
-
-#define DOT11_RSN_ENABLED 0x15070100 /* WPA enable/disable (W) 
*/
-#define LOCAL_RSN_MODE0x56010100 /* RSN mode WPA/WPA2 (W) 
*/
-#define DOT11_RSN_CONFIG_MULTICAST_CIPHER 0x51040100 /* GroupKeyCipherSuite 
(W) */
-#define DOT11_RSN_CONFIG_UNICAST_CIPHER   0x52020100 /* PairwiseKeyCipherSuite 
(W) */
-#define DOT11_RSN_CONFIG_AUTH_SUITE   0x53020100 /* 
AuthenticationKeyManagementSuite (W) */
-#define DOT11_RSN_CONFIG_VERSION  0x51020100 /* RSN version (W) */
-#define LOCAL_RSN_CONFIG_ALL  0x5F010100 /* RSN CONFIG ALL (W) */
-#define DOT11_PMK_TSC 0x55010100 /* PMK_TSC (W) */
-#define DOT11_GMK1_TSC0x55010101 /* GMK1_TSC (W) */
-#define DOT11_GMK2_TSC0x55010102 /* GMK2_TSC (W) */
-#define DOT11_GMK3_TSC   0x55010103 /* GMK3_TSC */
-#define LOCAL_PMK 0x58010100 /* Pairwise Master Key 
cache (W) */
-
-#define LOCAL_REGION  0xF10A0100 /* Region setting */
+#define DOT11_MAC_ADDRESS 0x21010100   /* MAC Address (R) */
+#define DOT11_PRODUCT_VERSION 0x31024100   /* FirmWare Version (R) 
*/
+#define DOT11_RTS_THRESHOLD   0x21020100   /* RTS Threshold (R/W) 
*/
+#define DOT11_FRAGMENTATION_THRESHOLD 0x21050100   /* Fragment Threshold 
(R/W) */
+#define DOT11_PRIVACY_INVOKED 0x15010100   /* WEP ON/OFF (W) */
+#define DOT1

[PATCH 21/27] staging: ks7010: indent ks_wlan_ioctl.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_wlan_ioctl.h | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/ks7010/ks_wlan_ioctl.h 
b/drivers/staging/ks7010/ks_wlan_ioctl.h
index e7469f7338f7af..cc4669eddcc1f7 100644
--- a/drivers/staging/ks7010/ks_wlan_ioctl.h
+++ b/drivers/staging/ks7010/ks_wlan_ioctl.h
@@ -36,8 +36,8 @@
 #define KS_WLAN_GET_SCAN_TYPE  SIOCIWFIRSTPRIV+13
 #define KS_WLAN_SET_RX_GAINSIOCIWFIRSTPRIV+14
 #define KS_WLAN_GET_RX_GAINSIOCIWFIRSTPRIV+15
-#define KS_WLAN_HOSTT  SIOCIWFIRSTPRIV+16  /* unused */
-//#define KS_WLAN_SET_REGION   SIOCIWFIRSTPRIV+17
+#define KS_WLAN_HOSTT  SIOCIWFIRSTPRIV+16  /* unused */
+//#define KS_WLAN_SET_REGIONSIOCIWFIRSTPRIV+17
 #define KS_WLAN_SET_BEACON_LOSTSIOCIWFIRSTPRIV+18
 #define KS_WLAN_GET_BEACON_LOSTSIOCIWFIRSTPRIV+19
 
@@ -51,8 +51,8 @@
 #define KS_WLAN_GET_CTS_MODE   SIOCIWFIRSTPRIV+25
 /* SIOCIWFIRSTPRIV+26 */
 /* SIOCIWFIRSTPRIV+27 */
-#define KS_WLAN_SET_SLEEP_MODE SIOCIWFIRSTPRIV+28 /* sleep mode */
-#define KS_WLAN_GET_SLEEP_MODE SIOCIWFIRSTPRIV+29 /* sleep mode */
+#define KS_WLAN_SET_SLEEP_MODE SIOCIWFIRSTPRIV+28  /* sleep mode */
+#define KS_WLAN_GET_SLEEP_MODE SIOCIWFIRSTPRIV+29  /* sleep mode */
 /* SIOCIWFIRSTPRIV+30 */
 /* SIOCIWFIRSTPRIV+31 */
 
@@ -62,7 +62,8 @@
 #include 
 
 extern int ks_wlan_read_config_file(struct ks_wlan_private *priv);
-extern int ks_wlan_setup_parameter(struct ks_wlan_private *priv, unsigned int 
commit_flag);
+extern int ks_wlan_setup_parameter(struct ks_wlan_private *priv,
+  unsigned int commit_flag);
 
 #endif /* __KERNEL__ */
 
-- 
2.8.1



[PATCH 23/27] staging: ks7010: indent michael_mic.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/michael_mic.c | 43 ++--
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/ks7010/michael_mic.c 
b/drivers/staging/ks7010/michael_mic.c
index ec8769a974427a..adb17df46f939b 100644
--- a/drivers/staging/ks7010/michael_mic.c
+++ b/drivers/staging/ks7010/michael_mic.c
@@ -34,11 +34,11 @@
A->nBytesInM = 0;
 
 static
-void MichaelInitializeFunction( struct michel_mic_t *Mic, uint8_t *key )
+void MichaelInitializeFunction(struct michel_mic_t *Mic, uint8_t * key)
 {
// Set the key
-   Mic->K0 = getUInt32( key , 0 );
-   Mic->K1 = getUInt32( key , 4 );
+   Mic->K0 = getUInt32(key, 0);
+   Mic->K1 = getUInt32(key, 4);
 
//clear();
MichaelClear(Mic);
@@ -56,11 +56,10 @@ do{ 
\
L += R; \
 }while(0)
 
-
 static
-void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, int nBytes )
+void MichaelAppend(struct michel_mic_t *Mic, uint8_t * src, int nBytes)
 {
-   int addlen ;
+   int addlen;
if (Mic->nBytesInM) {
addlen = 4 - Mic->nBytesInM;
if (addlen > nBytes)
@@ -73,13 +72,13 @@ void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, 
int nBytes )
if (Mic->nBytesInM < 4)
return;
 
-   Mic->L ^= getUInt32(Mic->M,0);
+   Mic->L ^= getUInt32(Mic->M, 0);
MichaelBlockFunction(Mic->L, Mic->R);
Mic->nBytesInM = 0;
}
 
-   while(nBytes >= 4){
-   Mic->L ^= getUInt32(src,0);
+   while (nBytes >= 4) {
+   Mic->L ^= getUInt32(src, 0);
MichaelBlockFunction(Mic->L, Mic->R);
src += 4;
nBytes -= 4;
@@ -92,7 +91,7 @@ void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, 
int nBytes )
 }
 
 static
-void MichaelGetMIC( struct michel_mic_t *Mic, uint8_t *dst )
+void MichaelGetMIC(struct michel_mic_t *Mic, uint8_t * dst)
 {
uint8_t *data = Mic->M;
switch (Mic->nBytesInM) {
@@ -107,24 +106,24 @@ void MichaelGetMIC( struct michel_mic_t *Mic, uint8_t 
*dst )
break;
case 3:
Mic->L ^= data[0] | (data[1] << 8) | (data[2] << 16) |
-   0x5a00;
+   0x5a00;
break;
}
MichaelBlockFunction(Mic->L, Mic->R);
MichaelBlockFunction(Mic->L, Mic->R);
// The appendByte function has already computed the result.
-   putUInt32( dst, 0, Mic->L );
-   putUInt32( dst, 4, Mic->R );
+   putUInt32(dst, 0, Mic->L);
+   putUInt32(dst, 4, Mic->R);
 
// Reset to the empty message.
MichaelClear(Mic);
 }
 
-void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t *Key,
-uint8_t *Data, int Len, uint8_t priority,
-uint8_t *Result )
+void MichaelMICFunction(struct michel_mic_t *Mic, uint8_t * Key,
+   uint8_t * Data, int Len, uint8_t priority,
+   uint8_t * Result)
 {
-   uint8_t pad_data[4] = {priority,0,0,0};
+   uint8_t pad_data[4] = { priority, 0, 0, 0 };
// Compute the MIC value
/*
 * IEEE802.11i  page 47
@@ -135,9 +134,9 @@ void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t 
*Key,
 * |DA|SA|Priority|0 |Data|M0|M1|M2|M3|M4|M5|M6|M7|
 * +--+--++--++--+--+--+--+--+--+--+--+
 */
-   MichaelInitializeFunction( Mic, Key ) ;
-   MichaelAppend( Mic, (uint8_t*)Data, 12 ); /* |DA|SA| */
-   MichaelAppend( Mic, pad_data, 4 ); /* |Priority|0|0|0| */
-   MichaelAppend( Mic, (uint8_t*)(Data+12), Len -12 ); /* |Data| */
-   MichaelGetMIC( Mic, Result ) ;
+   MichaelInitializeFunction(Mic, Key);
+   MichaelAppend(Mic, (uint8_t *) Data, 12);   /* |DA|SA| */
+   MichaelAppend(Mic, pad_data, 4);/* |Priority|0|0|0| */
+   MichaelAppend(Mic, (uint8_t *) (Data + 12), Len - 12);  /* |Data| */
+   MichaelGetMIC(Mic, Result);
 }
-- 
2.8.1



[PATCH 24/27] staging: ks7010: indent michael_mic.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/michael_mic.h | 16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/ks7010/michael_mic.h 
b/drivers/staging/ks7010/michael_mic.h
index f14f160ad46549..57ecbe34153202 100644
--- a/drivers/staging/ks7010/michael_mic.h
+++ b/drivers/staging/ks7010/michael_mic.h
@@ -16,14 +16,14 @@
 struct michel_mic_t {
uint32_t K0;// Key 
uint32_t K1;// Key 
-   uint32_t L; // Current state 
-   uint32_t R; // Current state 
-   uint8_t M[4];   // Message accumulator (single word) 
-   int nBytesInM;  // # bytes in M 
-   uint8_t Result[8];
+   uint32_t L; // Current state 
+   uint32_t R; // Current state 
+   uint8_t M[4];   // Message accumulator (single word) 
+   int nBytesInM;  // # bytes in M 
+   uint8_t Result[8];
 };
 
 extern
-void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t *Key, 
-uint8_t *Data, int Len, uint8_t priority, 
-uint8_t *Result );
+void MichaelMICFunction(struct michel_mic_t *Mic, uint8_t * Key,
+   uint8_t * Data, int Len, uint8_t priority,
+   uint8_t * Result);
-- 
2.8.1



[PATCH 27/27] staging: ks7010: fix module annotations

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

List all authors, beautify description, match license to what is stated
in file headers, add firmware information.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 10 --
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 8e8476b52cedbc..8c0d1bb58dcd9c 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -1261,9 +1261,7 @@ static void __exit ks7010_sdio_exit(void)
 module_init(ks7010_sdio_init);
 module_exit(ks7010_sdio_exit);
 
-MODULE_AUTHOR("Qi-Hardware based on KeyStream driver");
-MODULE_DESCRIPTION("Driver for KeyStream, KS7010 based SDIO cards. ");
-#ifdef MODULE_LICENSE
-MODULE_LICENSE("GPL");
-#endif
-MODULE_SUPPORTED_DEVICE("KS7910");
+MODULE_AUTHOR("Sang Engineering, Qi-Hardware, KeyStream");
+MODULE_DESCRIPTION("Driver for KeyStream KS7010 based SDIO cards");
+MODULE_LICENSE("GPL v2");
+MODULE_FIRMWARE(ROM_FILE);
-- 
2.8.1



[PATCH 25/27] staging: ks7010: indent ks7010_sdio.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Unlike the previous patches which are plain indent outcomes, this has
some manual fixups to be not overly strict with the 80 char limit.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 807 ---
 1 file changed, 460 insertions(+), 347 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index fb9f0b533d867e..ed4d579300ad96 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -30,31 +30,32 @@
 static int reg_net = 0;
 
 static const struct sdio_device_id if_sdio_ids[] = {
-   { SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_A, SDIO_DEVICE_ID_KS_7010) },
-   { SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_B, SDIO_DEVICE_ID_KS_7010) },
+   {SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_A, SDIO_DEVICE_ID_KS_7010)},
+   {SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_B, SDIO_DEVICE_ID_KS_7010)},
{ /* all zero */ }
 };
 
 struct ks_sdio_model {
-int model;
-const char *firmware;
+   int model;
+   const char *firmware;
 };
 
 static struct ks_sdio_model ks_sdio_models[] = {
-{
-/* ks7010 */
-.model = 0x10,
-.firmware = "ks7010sd.rom",
-},
+   {
+   /* ks7010 */
+   .model = 0x10,
+   .firmware = "ks7010sd.rom",
+   },
 };
 
-static int ks7910_sdio_probe(struct sdio_func *function, const struct 
sdio_device_id *device);
+static int ks7910_sdio_probe(struct sdio_func *function,
+const struct sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
 static void ks7010_rw_function(struct work_struct *work);
-static int ks7010_sdio_read( struct ks_wlan_private *priv, unsigned int 
address,
-unsigned char *buffer, int length );
-static int ks7010_sdio_write( struct ks_wlan_private *priv, unsigned int 
address,
- unsigned char *buffer, int length );
+static int ks7010_sdio_read(struct ks_wlan_private *priv, unsigned int address,
+   unsigned char *buffer, int length);
+static int ks7010_sdio_write(struct ks_wlan_private *priv, unsigned int 
address,
+unsigned char *buffer, int length);
 /* macro */
 
 #define inc_txqhead(priv) \
@@ -79,25 +80,25 @@ void ks_wlan_hw_sleep_doze_request(struct ks_wlan_private 
*priv)
DPRINTK(4, "\n");
 
/* clear request */
-   atomic_set(&priv->sleepstatus.doze_request,0);
+   atomic_set(&priv->sleepstatus.doze_request, 0);
 
-   if( atomic_read(&priv->sleepstatus.status) == 0){
+   if (atomic_read(&priv->sleepstatus.status) == 0) {
rw_data = GCR_B_DOZE;
-   retval = ks7010_sdio_write(priv, GCR_B, &rw_data, 
sizeof(rw_data));
-   if(retval){
+   retval =
+   ks7010_sdio_write(priv, GCR_B, &rw_data, sizeof(rw_data));
+   if (retval) {
DPRINTK(1, " error : GCR_B=%02X\n", rw_data);
goto out;
}
DPRINTK(4, "PMG SET!! : GCR_B=%02X\n", rw_data);
-   DPRINTK(3,"sleep_mode=SLP_SLEEP\n");
+   DPRINTK(3, "sleep_mode=SLP_SLEEP\n");
atomic_set(&priv->sleepstatus.status, 1);
-   priv->last_doze = jiffies;
-   }
-   else{
-   DPRINTK(1,"sleep_mode=%d\n",priv->sleep_mode);
+   priv->last_doze = jiffies;
+   } else {
+   DPRINTK(1, "sleep_mode=%d\n", priv->sleep_mode);
}
 
-out:
+ out:
priv->sleep_mode = atomic_read(&priv->sleepstatus.status);
return;
 }
@@ -110,110 +111,126 @@ void ks_wlan_hw_sleep_wakeup_request(struct 
ks_wlan_private *priv)
DPRINTK(4, "\n");
 
/* clear request */
-   atomic_set(&priv->sleepstatus.wakeup_request,0);
+   atomic_set(&priv->sleepstatus.wakeup_request, 0);
 
-   if( atomic_read(&priv->sleepstatus.status) == 1){
+   if (atomic_read(&priv->sleepstatus.status) == 1) {
rw_data = WAKEUP_REQ;
-   retval = ks7010_sdio_write(priv, WAKEUP, &rw_data, 
sizeof(rw_data));
-   if(retval){
+   retval =
+   ks7010_sdio_write(priv, WAKEUP, &rw_data, sizeof(rw_data));
+   if (retval) {
DPRINTK(1, " error : WAKEUP=%02X\n", rw_data);
goto out;
}
DPRINTK(4, "wake up : WAKEUP=%02X\n", rw_data);
atomic_set(&priv->sleepstatus.status, 0);
-   priv->last_wakeup = jiffies;
+   priv->last_wakeup = jiffies;
++priv->wakeup_count;
-   }
-   else{
-   DPRINTK(1,"sleep_mode=%d\n",priv->sleep_mode);
+   } else {
+   DPRINTK(1, "sleep_mode=%d\n", priv->sleep_mode);
}
 
-out:

[PATCH 20/27] staging: ks7010: indent ks_wlan.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_wlan.h | 246 +++
 1 file changed, 121 insertions(+), 125 deletions(-)

diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 58e3a5a6b44472..f0f9f8ef7d6185 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -22,16 +22,16 @@
 #include 
 #include 
 
-#include /* spinlock_t   
*/
-#include/* wait_queue_head_t
*/
-#include/* pid_t
*/
-#include/* struct net_device_stats,  struct sk_buff 
*/
+#include /* spinlock_t   
*/
+#include/* wait_queue_head_t
*/
+#include/* pid_t
*/
+#include/* struct net_device_stats,  struct sk_buff 
*/
 #include 
 #include 
-#include /* struct atmic_t   
*/
+#include /* struct atmic_t   
*/
 #include/* struct timer_list */
 #include 
-#include/* struct completion */
+#include   /* struct completion */
 #include 
 
 #include 
@@ -46,37 +46,37 @@
 #endif
 
 struct ks_wlan_parameter {
-   uint8_t operation_mode;/* Operation Mode */
-   uint8_t channel;   /*  Channel */
-   uint8_t tx_rate;   /*  Transmit Rate */
+   uint8_t operation_mode; /* Operation Mode */
+   uint8_t channel;/*  Channel */
+   uint8_t tx_rate;/*  Transmit Rate */
struct {
uint8_t size;
uint8_t body[16];
} rate_set;
-   uint8_t bssid[ETH_ALEN];/* BSSID */
+   uint8_t bssid[ETH_ALEN];/* BSSID */
struct {
uint8_t size;
-   uint8_t body[32+1];
-   } ssid;/*  SSID */
-   uint8_t preamble;  /*  Preamble */
-   uint8_t powermgt;  /*  PowerManagementMode */
-   uint32_tscan_type; /*  AP List Scan Type */
+   uint8_t body[32 + 1];
+   } ssid; /*  SSID */
+   uint8_t preamble;   /*  Preamble */
+   uint8_t powermgt;   /*  PowerManagementMode */
+   uint32_t scan_type; /*  AP List Scan Type */
 #define BEACON_LOST_COUNT_MIN 0
 #define BEACON_LOST_COUNT_MAX 65535
-   uint32_tbeacon_lost_count; /*  Beacon Lost Count */
-   uint32_trts;   /*  RTS Threashold */
-   uint32_tfragment;  /*  Fragmentation Threashold */
-   uint32_tprivacy_invoked;
-   uint32_twep_index;
+   uint32_t beacon_lost_count; /*  Beacon Lost Count */
+   uint32_t rts;   /*  RTS Threashold */
+   uint32_t fragment;  /*  Fragmentation Threashold */
+   uint32_t privacy_invoked;
+   uint32_t wep_index;
struct {
uint8_t size;
-   uint8_t val[13*2+1];
+   uint8_t val[13 * 2 + 1];
} wep_key[4];
-   uint16_tauthenticate_type;  
-   uint16_tphy_type; /* 11b/11g/11bg mode type*/
-   uint16_tcts_mode; /* for 11g/11bg mode cts mode */
-   uint16_tphy_info_timer; /* phy information timer */
-   charrom_file[256];
+   uint16_t authenticate_type;
+   uint16_t phy_type;  /* 11b/11g/11bg mode type */
+   uint16_t cts_mode;  /* for 11g/11bg mode cts mode */
+   uint16_t phy_info_timer;/* phy information timer */
+   char rom_file[256];
 };
 
 enum {
@@ -157,7 +157,6 @@ enum {
SME_START_REQUEST,
SME_GET_EEPROM_CKSUM,
 
-
SME_MIC_FAILURE_CONFIRM,
SME_START_CONFIRM,
 
@@ -187,7 +186,7 @@ enum {
SME_WEP_SET_CONFIRM,
SME_TERMINATE,
 
-   SME_EVENT_SIZE/* end */
+   SME_EVENT_SIZE  /* end */
 };
 
 /* SME Status */
@@ -200,58 +199,58 @@ enum {
 
 #defineSME_EVENT_BUFF_SIZE 128
 
-struct sme_info{
-   int sme_status;
-   int event_buff[SME_EVENT_BUFF_SIZE];
-   unsigned intqhead;
-   unsigned intqtail;
+struct sme_info {
+   int sme_status;
+   int event_buff[SME_EVENT_BUFF_SIZE];
+   unsigned int qhead;
+   unsigned int qtail;
 #ifdef KS_WLAN_DEBUG
-  /* for debug */
+   /* for debug */
unsigned int max_event_count;
 #endif
-   spinlock_tsme_spin;
+   spinlock_t sme_spin;
unsigned long sme_flag;
 };
 
-struct hostt_t{
-   int buff[SME_EVENT_BUFF_SIZE];
-   unsigned intqhead;
-   unsigned intqtail;
+struct hostt_t {
+   int buff[SME_EVENT_BUFF_SIZE];
+   unsigned int qhead;
+   unsigned int qtail;
 };
 
 #define RSN_IE_BODY_MAX 64
 struct rsn_ie_t {
-   uint8_t id; /* 0xdd = WPA or 0x3

[PATCH 26/27] staging: ks7010: remove supported card table with one element

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

There is only this card supported, no need to iterate over the table.
The resulting firmware filename wasn't used anyway, but came from the
config file or hardcoded default.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 31 ++-
 drivers/staging/ks7010/ks7010_sdio.h |  2 --
 2 files changed, 2 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index ed4d579300ad96..8e8476b52cedbc 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -35,19 +35,6 @@ static const struct sdio_device_id if_sdio_ids[] = {
{ /* all zero */ }
 };
 
-struct ks_sdio_model {
-   int model;
-   const char *firmware;
-};
-
-static struct ks_sdio_model ks_sdio_models[] = {
-   {
-   /* ks7010 */
-   .model = 0x10,
-   .firmware = "ks7010sd.rom",
-   },
-};
-
 static int ks7910_sdio_probe(struct sdio_func *function,
 const struct sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
@@ -996,7 +983,7 @@ static int ks7910_sdio_probe(struct sdio_func *func,
struct ks_sdio_card *card;
struct net_device *netdev;
unsigned char rw_data;
-   int i = 0, ret;
+   int ret;
 
DPRINTK(5, "ks7910_sdio_probe()\n");
 
@@ -1009,22 +996,8 @@ static int ks7910_sdio_probe(struct sdio_func *func,
return -ENOMEM;
 
card->func = func;
-   card->model = 0x10;
spin_lock_init(&card->lock);
 
-   /* select model */
-   for (i = 0; i < ARRAY_SIZE(ks_sdio_models); i++) {
-   if (card->model == ks_sdio_models[i].model)
-   break;
-   }
-
-   if (i == ARRAY_SIZE(ks_sdio_models)) {
-   DPRINTK(5, "unkown card model 0x%x\n", card->model);
-   goto error;
-   }
-
-   card->firmware = ks_sdio_models[i].firmware;
-
/*** Initialize  SDIO ***/
sdio_claim_host(func);
 
@@ -1172,7 +1145,7 @@ static int ks7910_sdio_probe(struct sdio_func *func,
sdio_release_host(func);
sdio_set_drvdata(func, NULL);
kfree(card);
- error:
+
return -ENODEV;
 }
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index aea3727caf483b..2d7be5dae157c7 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -109,8 +109,6 @@ struct ks_sdio_packet {
 struct ks_sdio_card {
struct sdio_func *func;
struct ks_wlan_private *priv;
-   int model;
-   const char *firmware;
spinlock_t lock;
 };
 
-- 
2.8.1



[PATCH 08/27] staging: ks7010: use kernel helper to print buffer

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

No need for an open coded one.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Makefile  |  2 +-
 drivers/staging/ks7010/ks7010_sdio.c |  9 +
 drivers/staging/ks7010/ks_debug.c| 30 --
 drivers/staging/ks7010/ks_debug.h|  2 --
 4 files changed, 6 insertions(+), 37 deletions(-)
 delete mode 100644 drivers/staging/ks7010/ks_debug.c

diff --git a/drivers/staging/ks7010/Makefile b/drivers/staging/ks7010/Makefile
index 32b0efc7bd00e8..f6a2cc8fd0276d 100644
--- a/drivers/staging/ks7010/Makefile
+++ b/drivers/staging/ks7010/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_KS7010) += ks7010.o
 
 ccflags-y   += -DKS_WLAN_DEBUG=0
-ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o ks_debug.o \
+ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o \
ks7010_sdio.o ks7010_config.o
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 5b78522fad1ec1..1a1a43ff306aae 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -441,10 +441,11 @@ static void ks_wlan_hw_rx(void *dev, uint16_t size)
 
/* length check */
if(size > 2046 || size == 0){
-
-   DPRINTK(5,"-INVAILED DATA dump\n");
-   print_buffer(&rx_buffer->data[0],32);
-
+#ifdef KS_WLAN_DEBUG
+   if (KS_WLAN_DEBUG > 5)
+   print_hex_dump_bytes("INVALID DATA dump: ", 
DUMP_PREFIX_OFFSET,
+rx_buffer->data, 32);
+#endif
/* rx_status update */
read_status = READ_STATUS_IDLE;
retval = ks7010_sdio_write(priv, READ_STATUS, &read_status, 
sizeof(read_status));
diff --git a/drivers/staging/ks7010/ks_debug.c 
b/drivers/staging/ks7010/ks_debug.c
deleted file mode 100644
index 009f5f6df8f4e6..00
--- a/drivers/staging/ks7010/ks_debug.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *   Driver for KeyStream 11b/g wireless LAN cards.
- *   
- *   ks_debug.c
- *   $Id: ks_debug.c 991 2009-09-14 01:38:58Z sekine $
- *
- *   Copyright (C) 2005-2008 KeyStream Corp.
- *   Copyright (C) 2009 Renesas Technology Corp.
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it undr the terms of the GNU General Public License version 2 as
- *   published by the Free Sotware Foundation.
- */
-#include "ks_wlan.h"
-#include "ks_debug.h"
-
-void print_buffer(unsigned char *p, int length)
-{
-#ifdef KS_WLAN_DEBUG
-int i;
-#define HEX_OFFSET "\
-   +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F"
-printk(HEX_OFFSET);
-for (i=0; i

[PATCH 12/27] staging: ks7010: fix printk format warnings

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Use proper type for size_t.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 2 +-
 drivers/staging/ks7010/ks7010_sdio.c   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 06ff8852e17f33..4b00d25cd8f575 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -257,7 +257,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
if (request_firmware_direct(&fw_entry, cfg_file, dev))
return 0;
 
-   DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
+   DPRINTK(4, "success request_firmware() file=%s size=%zu\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
end_p = cur_p + fw_entry->size;
*end_p = '\0';
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 3fb432c9dd314d..50364909449aec 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -750,7 +750,7 @@ static int ks79xx_upload_firmware(ks_wlan_private *priv, 
struct ks_sdio_card *ca
DPRINTK(1,"error request_firmware() file=%s\n", 
priv->reg.rom_file);
return 1;
}
-   DPRINTK(4,"success request_firmware() file=%s size=%d\n", 
priv->reg.rom_file, fw_entry->size);
+   DPRINTK(4,"success request_firmware() file=%s size=%zu\n", 
priv->reg.rom_file, fw_entry->size);
length = fw_entry->size;
 
/* Load Program */
-- 
2.8.1



[PATCH 09/27] staging: ks7010: delete seperate debug header

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Move the one debug macro to the generic wlan header.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c |  1 -
 drivers/staging/ks7010/ks7010_sdio.c   |  1 -
 drivers/staging/ks7010/ks_debug.h  | 28 
 drivers/staging/ks7010/ks_hostif.c |  1 -
 drivers/staging/ks7010/ks_wlan.h   |  7 +++
 drivers/staging/ks7010/ks_wlan_net.c   |  1 -
 6 files changed, 7 insertions(+), 32 deletions(-)
 delete mode 100644 drivers/staging/ks7010/ks_debug.h

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index abe99a52ae1ad8..7f273dafaf3583 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -4,7 +4,6 @@
 #include "ks_wlan.h"
 #include "ks_hostif.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 
 static int wep_on_off;
 #defineWEP_OFF 0
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 1a1a43ff306aae..3fb432c9dd314d 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -19,7 +19,6 @@
 
 #include "ks_wlan.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 #include "ks_hostif.h"
 
 #include "ks7010_sdio.h"
diff --git a/drivers/staging/ks7010/ks_debug.h 
b/drivers/staging/ks7010/ks_debug.h
deleted file mode 100644
index adad5f927dfda9..00
--- a/drivers/staging/ks7010/ks_debug.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *   Driver for KeyStream 11b/g wireless LAN cards.
- *   
- *   ks_debug.h
- *   $Id: ks_debug.h 991 2009-09-14 01:38:58Z sekine $
- *
- *   Copyright (C) 2005-2008 KeyStream Corp.
- *   Copyright (C) 2009 Renesas Technology Corp.
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it undr the terms of the GNU General Public License version 2 as
- *   published by the Free Sotware Foundation.
- */
-
-#ifndef _KS_DEBUG_H
-#define _KS_DEBUG_H
-
-#include 
-
-
-#ifdef KS_WLAN_DEBUG
-#define DPRINTK(n, fmt, args...) \
- if (KS_WLAN_DEBUG>(n)) printk(KERN_NOTICE "%s: "fmt, 
__FUNCTION__, ## args)
-#else
-#define DPRINTK(n, fmt, args...)
-#endif
-
-#endif /* _KS_DEBUG_H */
diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 146a1357909b39..367d487cef1ba8 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -13,7 +13,6 @@
  */
 
 #include "ks_wlan.h"
-#include "ks_debug.h"
 #include "ks_hostif.h"
 #include "eap_packet.h"
 #include "michael_mic.h"
diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 6bd016414a4f1d..c460741c6606ee 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -38,6 +38,13 @@
 
 #include "ks7010_sdio.h"
 
+#ifdef KS_WLAN_DEBUG
+#define DPRINTK(n, fmt, args...) \
+ if (KS_WLAN_DEBUG>(n)) printk(KERN_NOTICE "%s: "fmt, 
__FUNCTION__, ## args)
+#else
+#define DPRINTK(n, fmt, args...)
+#endif
+
 struct ks_wlan_parameter {
uint8_t operation_mode;/* Operation Mode */
uint8_t channel;   /*  Channel */
diff --git a/drivers/staging/ks7010/ks_wlan_net.c 
b/drivers/staging/ks7010/ks_wlan_net.c
index 776a544031495f..1da2768ea9f31b 100644
--- a/drivers/staging/ks7010/ks_wlan_net.c
+++ b/drivers/staging/ks7010/ks_wlan_net.c
@@ -40,7 +40,6 @@ static int wep_on_off;
 #include "ks_wlan.h"
 #include "ks_hostif.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 
 /* Include Wireless Extension definition and check version */
 #include 
-- 
2.8.1



[PATCH 07/27] staging: ks7010: use long preamble as default

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

I had a problem connecting to a network with a short preamble, so let's
make the safer option the default.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 7d33070b3428e7..abe99a52ae1ad8 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -193,7 +193,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
{8,"WepIndex","1"}, /* 13 */
{7,"WepType","STRING"}, /* 14 */
{3,"Wep","OFF"},/* 15 */
-   {13,"PREAMBLE_TYPE","SHORT"},   /* 16 */
+   {13,"PREAMBLE_TYPE","LONG"},/* 16 */
{8,"ScanType","ACTIVE_SCAN"},   /* 17 */
{8,"ROM_FILE", ROM_FILE},   /* 18 */
{7,"PhyType", "BG_MODE"},   /* 19 */
@@ -216,7 +216,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.ssid.body[0] = '\0';  /* SSID */
priv->reg.ssid.size = 0;/* SSID size */
priv->reg.tx_rate = TX_RATE_AUTO;   /* TxRate Fully Auto */
-   priv->reg.preamble = SHORT_PREAMBLE;/* Preamble = SHORT */
+   priv->reg.preamble = LONG_PREAMBLE; /* Preamble = LONG */
priv->reg.powermgt = POWMGT_ACTIVE_MODE;/* POWMGT_ACTIVE_MODE */
priv->reg.scan_type = ACTIVE_SCAN;  /* Active */
priv->reg.beacon_lost_count = 20;   /* Beacon Lost Count */
-- 
2.8.1



[PATCH 14/27] staging: ks7010: remove unecessary typedef

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Let's simply specify the struct to keep in sync with kernel coding
style.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c |   4 +-
 drivers/staging/ks7010/ks7010_sdio.c   |  44 -
 drivers/staging/ks7010/ks7010_sdio.h   |   2 +-
 drivers/staging/ks7010/ks_hostif.c | 114 +++---
 drivers/staging/ks7010/ks_hostif.h |  10 +-
 drivers/staging/ks7010/ks_wlan.h   |   4 +-
 drivers/staging/ks7010/ks_wlan_ioctl.h |   4 +-
 drivers/staging/ks7010/ks_wlan_net.c   | 168 -
 8 files changed, 175 insertions(+), 175 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 4b00d25cd8f575..48809bcc779739 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -87,7 +87,7 @@ void analyze_hex_wep_key(struct ks_wlan_parameter *param, int 
wep_key_index, cha
 }
 
 static
-int rate_set_configuration(ks_wlan_private *priv, char *value)
+int rate_set_configuration(struct ks_wlan_private *priv, char *value)
 {
int rc=0;
 
@@ -169,7 +169,7 @@ int rate_set_configuration(ks_wlan_private *priv, char 
*value)
 }
 
 #include 
-int ks_wlan_read_config_file(ks_wlan_private *priv)
+int ks_wlan_read_config_file(struct ks_wlan_private *priv)
 {
struct {
const int key_len;
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 50364909449aec..fb9f0b533d867e 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -51,9 +51,9 @@ static struct ks_sdio_model ks_sdio_models[] = {
 static int ks7910_sdio_probe(struct sdio_func *function, const struct 
sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
 static void ks7010_rw_function(struct work_struct *work);
-static int ks7010_sdio_read( ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_read( struct ks_wlan_private *priv, unsigned int 
address,
 unsigned char *buffer, int length );
-static int ks7010_sdio_write( ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_write( struct ks_wlan_private *priv, unsigned int 
address,
  unsigned char *buffer, int length );
 /* macro */
 
@@ -71,7 +71,7 @@ static int ks7010_sdio_write( ks_wlan_private *priv, unsigned 
int address,
 #define cnt_rxqbody(priv) \
 (((priv->rx_dev.qtail + RX_DEVICE_BUFF_SIZE) - (priv->rx_dev.qhead)) % 
RX_DEVICE_BUFF_SIZE )
 
-void ks_wlan_hw_sleep_doze_request(ks_wlan_private *priv)
+void ks_wlan_hw_sleep_doze_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -102,7 +102,7 @@ out:
return;
 }
 
-void ks_wlan_hw_sleep_wakeup_request(ks_wlan_private *priv)
+void ks_wlan_hw_sleep_wakeup_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -134,7 +134,7 @@ out:
 }
 
 
-void ks_wlan_hw_wakeup_request(ks_wlan_private *priv)
+void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -155,7 +155,7 @@ void ks_wlan_hw_wakeup_request(ks_wlan_private *priv)
}
 }
 
-int _ks_wlan_hw_power_save(ks_wlan_private *priv)
+int _ks_wlan_hw_power_save(struct ks_wlan_private *priv)
 {
int rc=0;
unsigned char rw_data;
@@ -220,13 +220,13 @@ int _ks_wlan_hw_power_save(ks_wlan_private *priv)
return rc;
 }
 
-int ks_wlan_hw_power_save(ks_wlan_private *priv)
+int ks_wlan_hw_power_save(struct ks_wlan_private *priv)
 {

queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,&priv->ks_wlan_hw.rw_wq, 1);
return 0;
 }
 
-static int ks7010_sdio_read(ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_read(struct ks_wlan_private *priv, unsigned int address,
unsigned char *buffer, int length)
 {
int rc = -1;
@@ -249,7 +249,7 @@ static int ks7010_sdio_read(ks_wlan_private *priv, unsigned 
int address,
return rc;
 }
 
-static int ks7010_sdio_write(ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_write(struct ks_wlan_private *priv, unsigned int 
address,
 unsigned char *buffer, int length)
 {
int rc = -1;
@@ -272,7 +272,7 @@ static int ks7010_sdio_write(ks_wlan_private *priv, 
unsigned int address,
return rc;
 }
 
-static int enqueue_txdev(ks_wlan_private *priv, unsigned char *p, unsigned 
long size,
+static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p, 
unsigned long size,
  void (*complete_handler)(void *arg1, void *arg2),
  void *arg1, void *arg2 )
 {
@@ -306,7 +306,7 @@ static int enqueue_txdev(ks_wlan_private *priv, unsigned 
char *p, unsigned long
 }
 
 /* write data */
-static int write_to_device(ks_wlan_private *priv, unsigned char *buffer, 
u

[PATCH 06/27] staging: ks7010: avoid workqueue races

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

My Spectec SDW823 card oopsed when it was already inserted during boot.
When debugging this, I noticed that the card init was done in a seperate
workqueue which was only activated once in probe. After removing the
workqueue and calling the card init directly from probe, the OOPS went
away. It turned out this is the same OOPS which happened when removing
the card, so this seems possible now. Note: There is still a
not-understood card-removed event during boot, but at least it doesn't
crash anymore and the card will be re-probed right away.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/README|  1 -
 drivers/staging/ks7010/ks7010_sdio.c | 28 ++--
 drivers/staging/ks7010/ks7010_sdio.h |  2 --
 3 files changed, 2 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/ks7010/README b/drivers/staging/ks7010/README
index 390e821efc0bcf..5cbb4ca999747e 100644
--- a/drivers/staging/ks7010/README
+++ b/drivers/staging/ks7010/README
@@ -28,7 +28,6 @@ Now the TODOs:
   should understand the change you submit.
 - drop using a config file and use an upstream technique for configuration
 - fix the 'card removal' event when card is inserted when booting
-- driver crashes when removing the card
 - check what other upstream wireless mechanisms can be used instead of the
   custom ones here
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 9300658c4aed8d..5b78522fad1ec1 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -817,14 +817,8 @@ static int ks79xx_upload_firmware(ks_wlan_private *priv, 
struct ks_sdio_card *ca
return rc;
 }
 
-static void card_init_task(struct work_struct *work)
+static void ks7010_card_init(struct ks_wlan_private *priv)
 {
-   struct hw_info_t *hw;
-   struct ks_wlan_private *priv;
-
-   hw = container_of(work, struct hw_info_t, init_task);
-   priv = container_of(hw, struct ks_wlan_private, ks_wlan_hw);
-
DPRINTK(5,"\ncard_init_task()\n");
 
/* init_waitqueue_head(&priv->confirm_wait); */
@@ -1052,23 +1046,11 @@ static int ks7910_sdio_probe(struct sdio_func *func, 
const struct sdio_device_id
goto error_free_read_buf;
}
 
-   priv->ks_wlan_hw.ks7010sdio_init = 
create_singlethread_workqueue("ks7010sdio_init");
-   if(!priv->ks_wlan_hw.ks7010sdio_init){
-   DPRINTK(1, "create_workqueue failed !!\n");
-   goto error_free_sdio_wq;
-   }
-
-   INIT_WORK(&priv->ks_wlan_hw.init_task, card_init_task);
INIT_DELAYED_WORK(&priv->ks_wlan_hw.rw_wq, ks7010_rw_function);
-
-   queue_work(priv->ks_wlan_hw.ks7010sdio_init, 
&priv->ks_wlan_hw.init_task);
+   ks7010_card_init(priv);
 
return 0;
 
-error_free_sdio_wq:
-   flush_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);
-   destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);
-   priv->ks_wlan_hw.ks7010sdio_wq = NULL;
 error_free_read_buf:
kfree(priv->ks_wlan_hw.read_buf);
priv->ks_wlan_hw.read_buf = NULL;
@@ -1139,12 +1121,6 @@ static void ks7910_sdio_remove(struct sdio_func *func)
}
DPRINTK(1, 
"destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);\n");
 
-   if(priv->ks_wlan_hw.ks7010sdio_init){
-   flush_workqueue(priv->ks_wlan_hw.ks7010sdio_init);
-   destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_init);
-   }
-   DPRINTK(1, 
"destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_init);\n");
-
hostif_exit(priv);
DPRINTK(1, "hostif_exit\n");
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index 5bf01abbf2ab6c..93823837f19e65 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -96,8 +96,6 @@ struct hw_info_t {
struct ks_sdio_card *sdio_card; 
struct completion ks7010_sdio_wait;
struct workqueue_struct *ks7010sdio_wq;
-   struct workqueue_struct *ks7010sdio_init;
-   struct work_struct init_task;
struct delayed_work rw_wq;
unsigned char   *read_buf;
struct tasklet_struct rx_bh_task;
-- 
2.8.1



[PATCH 13/27] staging: ks7010: add example cfg file as a reference

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We want to remove it, but to do so properly, it is good to have a
working example. Needs to be copied to /lib/firmware in order to be
used.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks79xx.cfg | 116 ++
 1 file changed, 116 insertions(+)
 create mode 100644 drivers/staging/ks7010/ks79xx.cfg

diff --git a/drivers/staging/ks7010/ks79xx.cfg 
b/drivers/staging/ks7010/ks79xx.cfg
new file mode 100644
index 00..0f2d24d4e66a89
--- /dev/null
+++ b/drivers/staging/ks7010/ks79xx.cfg
@@ -0,0 +1,116 @@
+#ks79xx.cfg
+#KS79xx configuration file
+#
+
+#
+#BeaconLostCount   default 20
+BeaconLostCount=20
+#
+
+#
+#Ap List Scan Type default ACTIVE_SCAN ACTIVE_SCAN or PASSIVE_SCAN
+ScanType=ACTIVE_SCAN
+#
+
+#
+#Channel   default 10  min 1   max 14
+Channel=10
+#
+
+#
+#FragmentThreshold default 2346min 256 max 2346
+FragmentThreshold=2346
+#
+
+#
+#OperationMode default Infrastructure  Pseudo-Ad-Hoc or 802.11-Ad-Hoc 
or Infrastructure
+OperationMode=Infrastructure
+#
+
+#
+#PowerManagementMode   default ACTIVE ACTIVE or SAVE1 or SAVE2
+PowerManagementMode=ACTIVE
+#
+
+#
+#RTSThreshold  default 2347min 0   max 2347
+RTSThreshold=2347
+#
+
+#
+#SSID  default ""  max 32 character
+SSID="default"
+#
+
+#
+#TxRatedefault Auto1, 2, 5.5, 11   ex. 
TxRate=1,2 TxRate=11 TxRate=Auto ...
+TxRate=Auto
+#
+
+#
+#Wep   default OFF OFF or 64bit or 128bit
+Wep=OFF
+#
+
+#
+#WepType   default STRING  STRING or HEX
+WepType=STRING
+#
+
+#
+#WepIndex=1
+#
+
+#
+#WepKeyValue1
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue2
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue3
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue4
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#AuthenticationAlgorithm default OPEN_SYSTEM   OPEN_SYSTEM or  SHARED_KEY
+AuthenticationAlgorithm=OPEN_SYSTEM
+#
+
+#
+#PREAMBLE_TYPE default LONGLONG or  SHORT
+PREAMBLE_TYPE=SHORT
+#
+
+#
+# PhyType default BG_MODE  B_MODE, G_MODE or BG_MODE
+PhyType=BG_MODE
+#
+
+#
+# CtsMode defalut FALSETURE or FALSE
+CtsMode=FALSE
+#
+
+#
+# PhyInformationTimer defalut 0  uint 100msec 
+PhyInformationTimer=0
+#
+
+#
+#ROM_FILE default "ks7010sd.rom"
+ROM_FILE="ks7010sd.rom"
+#
-- 
2.8.1



[PATCH 11/27] staging: ks7010: make loading config file optional

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We have sane defaults, so we don't need to bail out if there is no
config file. Note that the config file should go away completely in
favour of configuration mechanisms already upstream.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 7f273dafaf3583..06ff8852e17f33 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -203,7 +203,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
 
const struct firmware *fw_entry;
struct device *dev = NULL;
-   int retval;
char cfg_file[]=CFG_FILE;
char *cur_p, *end_p;
char wk_buff[256], *wk_p;
@@ -254,10 +253,9 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.rate_set.size = 12;
 
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
-   if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
-   DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
-   return 1;
-   }
+   /* If no cfg file, stay with the defaults */
+   if (request_firmware_direct(&fw_entry, cfg_file, dev))
+   return 0;
 
DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
-- 
2.8.1



Re: [PATCH] arm64: dts: r8a7795: Increase the size of GIC-400 mapped registers

2016-05-10 Thread Marc Zyngier
On 10/05/16 14:33, Geert Uytterhoeven wrote:
> CC Marc, lakml
> 
> On Tue, Apr 19, 2016 at 8:29 AM, Dirk Behme  wrote:
>> From: Pooya Keshavarzi 
>>
>> There are some requirements about the GIC-400 memory layout and its
>> mapping if using 64k aligned base addresses like on r8a7795.
>>
>> See e.g.
>>
>> http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=21550029f709072aacf3b9
>>
>> Map the whole memory range instead of only 0x2000. This will fix
>> the issue that some hypervisors, e.g. Xen, fail to handle the
>> interrupts correctly.
>>
>> Signed-off-by: Pooya Keshavarzi 
>> Signed-off-by: Dirk Behme 
> 
> Based on my understanding below
> Acked-by: Geert Uytterhoeven 
> 
>> ---
>> Note: This patch is against renesas-drivers-2016-04-12-v4.6-rc3
>>
>>  arch/arm64/boot/dts/renesas/r8a7795.dtsi | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
>> b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
>> index 8be9424..d880fd4 100644
>> --- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
>> +++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
>> @@ -160,9 +160,9 @@
>> #address-cells = <0>;
>> interrupt-controller;
>> reg = <0x0 0xf101 0 0x1000>,
>> - <0x0 0xf102 0 0x2000>,
>> + <0x0 0xf102 0 0x2>,
>>   <0x0 0xf104 0 0x2>,
>> - <0x0 0xf106 0 0x2000>;
>> + <0x0 0xf106 0 0x2>;
>> interrupts = > (GIC_CPU_MASK_SIMPLE(4) | 
>> IRQ_TYPE_LEVEL_HIGH)>;
>> };
> 
> Region 0:
> 4 KiB-pages 0xf1011000-0xf101 are aliased to 0xf101-0xf1010fff,
> but we need the first 4 KiB only.
> 
> Region 1:
> 4 KiB-pages 0xf1021000-0xf102 are aliased to 0xf102-0xf1020fff,
> 4 KiB-pages 0xf103-0xf103 are all zeroes, probably due to
> non-secure mode?

No. This 4kB page only contain a single register (GICC_DIR), which is
WO/RAZ.

> 
> Region 2:
> 4 KiB-pages 0xf1041000-0xf104 are aliased to 0xf104-0xf1040fff,
> 4 KiB-pages 0xf105-0xf105 are all zeroes, probably due to
> non-secure mode?

Neither. The aliases are an unused feature of GIC400 exposing the other
CPUs view of the same registers...

> 
> Region 3:
> 4 KiB-pages 0xf1061000-0xf106 are aliased to 0xf106-0xf1060fff,
> 4 KiB-pages 0xf107-0xf107 are all zeroes, probably due to
> non-secure mode?

Same as region 1.

> 
> Region 2 already had a 128 KiB size before, which allowed to use 8 KiB at
> 0xf104f000.

No. This region (GICH) only needs the first 256 bytes or so. The rest is
either RAZ/WI or useless stuff.

> 
> An 8 KiB size for regions 1 and 3 indeed didn't make much sense, as this
> covered two identical (aliased) 4 KiB pages, instead of two different pages
> at offset 0xf000.

While we're at it, adding a pointer to the documentation (GIC400 and
SBSA) would be tremendously useful, as it'd avoid misinterpreting the
various bits.

Thanks,

M.
-- 
Jazz is not dead. It just smells funny...


[PATCH 10/27] staging: ks7010: really iterate over multicast addresses

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

The loop variable was defined but not really used. Fix this.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 367d487cef1ba8..b0a0a53d3a00bf 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -2105,7 +2105,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
struct netdev_hw_addr *ha;
charset_address[NIC_MAX_MCAST_LIST*ETH_ALEN];
unsigned long filter_type;
-   int i;
+   int i = 0;
 
DPRINTK(3,"\n");
 
@@ -2128,6 +2128,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
mc_count = netdev_mc_count(dev);
netdev_for_each_mc_addr(ha, dev) {
memcpy(&set_address[i*ETH_ALEN], ha->addr, 
ETH_ALEN);
+   i++;
}
priv->sme_i.sme_flag &= ~SME_MULTICAST;
hostif_mib_set_request(priv, LOCAL_MULTICAST_ADDRESS,
-- 
2.8.1



Re: [PATCH] arm64: dts: r8a7795: Increase the size of GIC-400 mapped registers

2016-05-10 Thread Dirk Behme

On 10.05.2016 16:17, Marc Zyngier wrote:

On 10/05/16 14:33, Geert Uytterhoeven wrote:

CC Marc, lakml

On Tue, Apr 19, 2016 at 8:29 AM, Dirk Behme  wrote:

From: Pooya Keshavarzi 

There are some requirements about the GIC-400 memory layout and its
mapping if using 64k aligned base addresses like on r8a7795.

See e.g.

http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=21550029f709072aacf3b9

Map the whole memory range instead of only 0x2000. This will fix
the issue that some hypervisors, e.g. Xen, fail to handle the
interrupts correctly.

Signed-off-by: Pooya Keshavarzi 
Signed-off-by: Dirk Behme 


Based on my understanding below
Acked-by: Geert Uytterhoeven 


---
Note: This patch is against renesas-drivers-2016-04-12-v4.6-rc3

  arch/arm64/boot/dts/renesas/r8a7795.dtsi | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 8be9424..d880fd4 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -160,9 +160,9 @@
 #address-cells = <0>;
 interrupt-controller;
 reg = <0x0 0xf101 0 0x1000>,
- <0x0 0xf102 0 0x2000>,
+ <0x0 0xf102 0 0x2>,
   <0x0 0xf104 0 0x2>,
- <0x0 0xf106 0 0x2000>;
+ <0x0 0xf106 0 0x2>;
 interrupts = ;
 };


Region 0:
 4 KiB-pages 0xf1011000-0xf101 are aliased to 0xf101-0xf1010fff,
 but we need the first 4 KiB only.

Region 1:
 4 KiB-pages 0xf1021000-0xf102 are aliased to 0xf102-0xf1020fff,
 4 KiB-pages 0xf103-0xf103 are all zeroes, probably due to
 non-secure mode?


No. This 4kB page only contain a single register (GICC_DIR), which is
WO/RAZ.



Region 2:
 4 KiB-pages 0xf1041000-0xf104 are aliased to 0xf104-0xf1040fff,
 4 KiB-pages 0xf105-0xf105 are all zeroes, probably due to
 non-secure mode?


Neither. The aliases are an unused feature of GIC400 exposing the other
CPUs view of the same registers...



Region 3:
 4 KiB-pages 0xf1061000-0xf106 are aliased to 0xf106-0xf1060fff,
 4 KiB-pages 0xf107-0xf107 are all zeroes, probably due to
 non-secure mode?


Same as region 1.



Region 2 already had a 128 KiB size before, which allowed to use 8 KiB at
0xf104f000.


No. This region (GICH) only needs the first 256 bytes or so. The rest is
either RAZ/WI or useless stuff.



An 8 KiB size for regions 1 and 3 indeed didn't make much sense, as this
covered two identical (aliased) 4 KiB pages, instead of two different pages
at offset 0xf000.


While we're at it, adding a pointer to the documentation (GIC400 and
SBSA) would be tremendously useful, as it'd avoid misinterpreting the
various bits.



If anybody could give a short description I could copy & paste into 
the commit message that would be quite helpful :)



Best regards

Dirk



Re: [PATCH] arm64: dts: r8a7795: Increase the size of GIC-400 mapped registers

2016-05-10 Thread Marc Zyngier
On 10/05/16 16:29, Dirk Behme wrote:
> On 10.05.2016 16:17, Marc Zyngier wrote:
>> On 10/05/16 14:33, Geert Uytterhoeven wrote:
>>> CC Marc, lakml
>>>
>>> On Tue, Apr 19, 2016 at 8:29 AM, Dirk Behme  wrote:
 From: Pooya Keshavarzi 

 There are some requirements about the GIC-400 memory layout and its
 mapping if using 64k aligned base addresses like on r8a7795.

 See e.g.

 http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=21550029f709072aacf3b9

 Map the whole memory range instead of only 0x2000. This will fix
 the issue that some hypervisors, e.g. Xen, fail to handle the
 interrupts correctly.

 Signed-off-by: Pooya Keshavarzi 
 Signed-off-by: Dirk Behme 
>>>
>>> Based on my understanding below
>>> Acked-by: Geert Uytterhoeven 
>>>
 ---
 Note: This patch is against renesas-drivers-2016-04-12-v4.6-rc3

   arch/arm64/boot/dts/renesas/r8a7795.dtsi | 4 ++--
   1 file changed, 2 insertions(+), 2 deletions(-)

 diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
 b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
 index 8be9424..d880fd4 100644
 --- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
 +++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
 @@ -160,9 +160,9 @@
  #address-cells = <0>;
  interrupt-controller;
  reg = <0x0 0xf101 0 0x1000>,
 - <0x0 0xf102 0 0x2000>,
 + <0x0 0xf102 0 0x2>,
<0x0 0xf104 0 0x2>,
 - <0x0 0xf106 0 0x2000>;
 + <0x0 0xf106 0 0x2>;
  interrupts = >>>  (GIC_CPU_MASK_SIMPLE(4) | 
 IRQ_TYPE_LEVEL_HIGH)>;
  };
>>>
>>> Region 0:
>>>  4 KiB-pages 0xf1011000-0xf101 are aliased to 0xf101-0xf1010fff,
>>>  but we need the first 4 KiB only.
>>>
>>> Region 1:
>>>  4 KiB-pages 0xf1021000-0xf102 are aliased to 0xf102-0xf1020fff,
>>>  4 KiB-pages 0xf103-0xf103 are all zeroes, probably due to
>>>  non-secure mode?
>>
>> No. This 4kB page only contain a single register (GICC_DIR), which is
>> WO/RAZ.
>>
>>>
>>> Region 2:
>>>  4 KiB-pages 0xf1041000-0xf104 are aliased to 0xf104-0xf1040fff,
>>>  4 KiB-pages 0xf105-0xf105 are all zeroes, probably due to
>>>  non-secure mode?
>>
>> Neither. The aliases are an unused feature of GIC400 exposing the other
>> CPUs view of the same registers...
>>
>>>
>>> Region 3:
>>>  4 KiB-pages 0xf1061000-0xf106 are aliased to 0xf106-0xf1060fff,
>>>  4 KiB-pages 0xf107-0xf107 are all zeroes, probably due to
>>>  non-secure mode?
>>
>> Same as region 1.
>>
>>>
>>> Region 2 already had a 128 KiB size before, which allowed to use 8 KiB at
>>> 0xf104f000.
>>
>> No. This region (GICH) only needs the first 256 bytes or so. The rest is
>> either RAZ/WI or useless stuff.
>>
>>>
>>> An 8 KiB size for regions 1 and 3 indeed didn't make much sense, as this
>>> covered two identical (aliased) 4 KiB pages, instead of two different pages
>>> at offset 0xf000.
>>
>> While we're at it, adding a pointer to the documentation (GIC400 and
>> SBSA) would be tremendously useful, as it'd avoid misinterpreting the
>> various bits.
> 
> 
> If anybody could give a short description I could copy & paste into 
> the commit message that would be quite helpful :)

Well, there is my reply to an earlier email in this very thread, as well
as the xen commit which quotes my original commit (which you could also
refer to).

I'll leave it to you to eradicate the swear words (or to leave them in
place as a testimony of what 4 years of GIC hacking can do to an
otherwise sane person).

Thanks,

M.
-- 
Jazz is not dead. It just smells funny...


Re: [PATCH 0/2] fbdev: sh_mobile_meram: use ARCH_RENESAS

2016-05-10 Thread Geert Uytterhoeven
Hi Tomi,

On Tue, May 10, 2016 at 10:56 AM, Tomi Valkeinen  wrote:
> On 11/03/16 04:28, Simon Horman wrote:
>> Use ARCH_RENESAS in place of ARCH_SHMOBILE.
>>
>> This is part of an ongoing process to migrate from ARCH_SHMOBILE to
>> ARCH_RENESAS the motivation for which being that RENESAS seems to be a more
>> appropriate name than SHMOBILE for the majority of Renesas ARM based SoCs.
>>
>> As a follow-up also depend on COMPILE_TEST to provided for increased
>> compile testing.
>>
>> Based on v4.5-rc1
>>
>> Simon Horman (2):
>>   fbdev: sh_mobile_meram: use ARCH_RENESAS
>>   fbdev: sh_mobile_meram: depend on COMPILE_TEST
>>
>>  drivers/video/fbdev/Kconfig | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> What was the conclusion in this thread? Should I apply these?

I think the conclusion was "changes requested".

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Applied "ASoC: rsnd: don't use prohibited number to PDMACHCRn.SRS" to the asoc tree

2016-05-10 Thread Mark Brown
The patch

   ASoC: rsnd: don't use prohibited number to PDMACHCRn.SRS

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From ee057d2ee73259f455cfbb7a4db808fc6b6405dd Mon Sep 17 00:00:00 2001
From: Kuninori Morimoto 
Date: Tue, 10 May 2016 02:22:37 +
Subject: [PATCH] ASoC: rsnd: don't use prohibited number to PDMACHCRn.SRS

Current rsnd_dmapp_get_id() returns 0xFF as error code if system used
strange connection. It will be used as PDMACHCRn.SRS, but 0xFF is
prohibited number.
In order not to use prohibited number, this patch indicates error message
and returns 0x00 (same as SSI00) in error case.
Special thanks to Dung-san.

Reported-by: Nguyen Viet Dung 
Signed-off-by: Kuninori Morimoto 
Signed-off-by: Mark Brown 
---
 sound/soc/sh/rcar/dma.c | 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c
index 7658e8fd7bdc..6bc93cbb3049 100644
--- a/sound/soc/sh/rcar/dma.c
+++ b/sound/soc/sh/rcar/dma.c
@@ -316,11 +316,15 @@ static u32 rsnd_dmapp_get_id(struct rsnd_dai_stream *io,
size = ARRAY_SIZE(gen2_id_table_cmd);
}
 
-   if (!entry)
-   return 0xFF;
+   if ((!entry) || (size <= id)) {
+   struct device *dev = rsnd_priv_to_dev(rsnd_io_to_priv(io));
 
-   if (size <= id)
-   return 0xFF;
+   dev_err(dev, "unknown connection (%s[%d])\n",
+   rsnd_mod_name(mod), rsnd_mod_id(mod));
+
+   /* use non-prohibited SRS number as error */
+   return 0x00; /* SSI00 */
+   }
 
return entry[id];
 }
-- 
2.8.1



Re: [PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Greg KH
On Tue, May 10, 2016 at 03:52:13PM +0200, Wolfram Sang wrote:
> This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
> See patch 1 and README for more details about its origin. To have the card
> working, you need another patch which is already in mmc/next:
> 
> https://patchwork.kernel.org/patch/9043341/
> 
> A working topic branch for the Renesas H3 can be found here:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
> renesas/topic/gen3-sdio
> 
> This series only can be found here:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010
> 
> Note: I needed this driver to verify SDIO capabilities for the new Renesas H3
> SoC. The fact that the original KS7010 driver also comes from Renesas is a
> coincidence. It does not mean official support for this driver. Parts of this
> work were backed by the above mentioned SDIO verification task while other
> parts were my personal interest. Future patches and reviews will also done by
> me as a private person (unless something very surprising happens ;))
> 
> Please comment, review, apply...

Can you change the README file to be named TODO to match all of the
other staging driver files?  That way people can look at them by just
doing a staging/*/TODO match.

thanks

greg k-h


[PATCH v2 03/10] arm: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg

2016-05-10 Thread Dirk Behme
From: Simon Horman 

Use new boot mode reg infrastructure to obtain the mode pin
value for initialising arch timer for R-Car Gen2 SoCs.

Subsequent patches will remove other calls to rcar_gen2_read_mode_pins()
and in turn that function.

rcar_init_boot_mode() is called to implicitly initialise
the R-Car Gen2 boot mod register driver as rcar_gen2_timer_init()
is run before initcalls.

Signed-off-by: Simon Horman 
---
 arch/arm/mach-shmobile/Kconfig   |  1 +
 arch/arm/mach-shmobile/setup-rcar-gen2.c | 24 +---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index fe4ccb5..314dcaa 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -23,6 +23,7 @@ config ARCH_RCAR_GEN2
select RENESAS_IRQC
select SYS_SUPPORTS_SH_CMT
select PCI_DOMAINS if PCI
+   select BOOT_MODE_REG_RCAR
 
 config ARCH_RMOBILE
bool
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c 
b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 1c6fd11..a45b05b 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -24,6 +24,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include "common.h"
 #include "rcar-gen2.h"
@@ -49,13 +50,19 @@ u32 rcar_gen2_read_mode_pins(void)
 #define CNTCR 0
 #define CNTFID0 0x20
 
-void __init rcar_gen2_timer_init(void)
+void __init rcar_gen2_timer_init_for_arch_timer(void)
 {
-   u32 mode = rcar_gen2_read_mode_pins();
 #ifdef CONFIG_ARM_ARCH_TIMER
void __iomem *base;
int extal_mhz = 0;
-   u32 freq;
+   u32 freq, mode;
+   int err;
+
+   err = boot_mode_reg_get(&mode);
+   if (err) {
+   pr_err("%s: failed obtain boot mode\n", __func__);
+   return;
+   }
 
if (of_machine_is_compatible("renesas,r8a7794")) {
freq = 26000 / 8;   /* ZS / 8 */
@@ -126,7 +133,18 @@ void __init rcar_gen2_timer_init(void)
 
iounmap(base);
 #endif /* CONFIG_ARM_ARCH_TIMER */
+}
+
+void __init rcar_gen2_timer_init(void)
+{
+   int err;
+   u32 mode = rcar_gen2_read_mode_pins();
+
+   err = rcar_init_boot_mode();
+   if (err)
+   pr_err("Could not initialise boot mode register driver\n");
 
+   rcar_gen2_timer_init_for_arch_timer();
rcar_gen2_clocks_init(mode);
clocksource_probe();
 }
-- 
2.8.0



[PATCH v2 04/10] arm: renesas: r8a7791: Obtain MD pin value using boot-mode-reg

2016-05-10 Thread Dirk Behme
From: Simon Horman 

Use new boot mode reg infrastructure to obtain the mode pin
value when initialising SMP for r8a7791 SoC.

Signed-off-by: Simon Horman 
Signed-off-by: Dirk Behme 
---
 arch/arm/mach-shmobile/smp-r8a7791.c | 13 -
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-shmobile/smp-r8a7791.c 
b/arch/arm/mach-shmobile/smp-r8a7791.c
index 2d6417a..00d794d 100644
--- a/arch/arm/mach-shmobile/smp-r8a7791.c
+++ b/arch/arm/mach-shmobile/smp-r8a7791.c
@@ -20,6 +20,8 @@
 
 #include 
 
+#include 
+
 #include "common.h"
 #include "platsmp-apmu.h"
 #include "r8a7791.h"
@@ -45,8 +47,17 @@ static void __init r8a7791_smp_prepare_cpus(unsigned int 
max_cpus)
 static int r8a7791_smp_boot_secondary(unsigned int cpu,
  struct task_struct *idle)
 {
+   int err;
+   u32 mode;
+
+   err = boot_mode_reg_get(&mode);
+   if (err) {
+   pr_warn("Unable to retrieve boot mode register\n");
+   return err;
+   }
+
/* Error out when hardware debug mode is enabled */
-   if (rcar_gen2_read_mode_pins() & BIT(21)) {
+   if (mode & BIT(21)) {
pr_warn("Unable to boot CPU%u when MD21 is set\n", cpu);
return -ENOTSUPP;
}
-- 
2.8.0



[PATCH v2 01/10] boot-mode-reg: Add core

2016-05-10 Thread Dirk Behme
From: Simon Horman 

The motivation for this new module is to add a small frame work to allow
kernel subsystems to obtain boot mode information from a centralised
source using a new, and hopefully soon well-known, API.

The new API consists of two function calls and nothing more:

boot_mode_reg_set: Should be called by platform-specific drivers
   to register the boot mode register value which
   they obtain from hardware or otherwise.

boot_mode_reg_get: Should be called by consumers; subsystems that
   wish to know he boot mode register.

The boot mode register is a 32bit unsigned entity,
the meaning of its values are implementation dependent.

Signed-off-by: Simon Horman 
Signed-off-by: Dirk Behme 
---
 MAINTAINERS |  1 +
 drivers/misc/Kconfig|  1 +
 drivers/misc/Makefile   |  1 +
 drivers/misc/boot-mode-reg/Kconfig  | 11 ++
 drivers/misc/boot-mode-reg/Makefile |  6 +++
 drivers/misc/boot-mode-reg/core.c   | 76 +
 include/misc/boot-mode-reg.h| 24 
 7 files changed, 120 insertions(+)
 create mode 100644 drivers/misc/boot-mode-reg/Kconfig
 create mode 100644 drivers/misc/boot-mode-reg/Makefile
 create mode 100644 drivers/misc/boot-mode-reg/core.c
 create mode 100644 include/misc/boot-mode-reg.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 23e68db..e2bf6ea 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -10734,6 +10734,7 @@ S:  Maintained
 F: Documentation/sh/
 F: arch/sh/
 F: drivers/sh/
+F: drivers/misc/boot-mode-reg/
 
 SUSPEND TO RAM
 M: "Rafael J. Wysocki" 
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index a216b46..deba6b6 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -816,4 +816,5 @@ source "drivers/misc/mic/Kconfig"
 source "drivers/misc/genwqe/Kconfig"
 source "drivers/misc/echo/Kconfig"
 source "drivers/misc/cxl/Kconfig"
+source "drivers/misc/boot-mode-reg/Kconfig"
 endmenu
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index b2fb6dbf..d2a8ae4 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -57,3 +57,4 @@ obj-$(CONFIG_ECHO)+= echo/
 obj-$(CONFIG_VEXPRESS_SYSCFG)  += vexpress-syscfg.o
 obj-$(CONFIG_CXL_BASE) += cxl/
 obj-$(CONFIG_PANEL) += panel.o
+obj-$(CONFIG_BOOT_MODE_REG_CORE)   += boot-mode-reg/
diff --git a/drivers/misc/boot-mode-reg/Kconfig 
b/drivers/misc/boot-mode-reg/Kconfig
new file mode 100644
index 000..3c4ddde
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/Kconfig
@@ -0,0 +1,11 @@
+#
+# Boot Mode Register Drivers
+#
+
+config BOOT_MODE_REG_CORE
+   tristate "Boot Mode Register Core Driver"
+   default n
+   depends on ARCH_SHMOBILE || ARCH_RENESAS || COMPILE_TEST
+   help
+ Say Y here to allow support for drivers to read boot mode
+ registers and make the value available to other subsystems.
diff --git a/drivers/misc/boot-mode-reg/Makefile 
b/drivers/misc/boot-mode-reg/Makefile
new file mode 100644
index 000..19134b2
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/Makefile
@@ -0,0 +1,6 @@
+
+#
+# Makefile for misc devices that really don't fit anywhere else.
+#
+
+obj-$(CONFIG_BOOT_MODE_REG_CORE)   += core.o
diff --git a/drivers/misc/boot-mode-reg/core.c 
b/drivers/misc/boot-mode-reg/core.c
new file mode 100644
index 000..983bf4c
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/core.c
@@ -0,0 +1,76 @@
+/*
+ * Boot Mode Register
+ *
+ * Copyright (C) 2015 Simon Horman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+
+#include 
+#include 
+
+#include 
+
+static DEFINE_MUTEX(boot_mode_mutex);
+static bool boot_mode_is_set;
+static u32 boot_mode;
+
+/**
+ * boot_mode_reg_get() - retrieve boot mode register value
+ * @mode: implementation-dependent boot mode register value
+ *
+ * Retrieves the boot mode register value previously registered
+ * using boot_mode_reg_set().
+ *
+ * return: 0 on success
+ */
+int boot_mode_reg_get(u32 *mode)
+{
+   int err = -ENOENT;
+
+   mutex_lock(&boot_mode_mutex);
+   if (boot_mode_is_set) {
+   *mode = boot_mode;
+   err = 0;
+   }
+   mutex_unlock(&boot_mode_mutex);
+   return err;
+}
+EXPORT_SYMBOL_GPL(boot_mode_reg_get);
+
+/**
+ * boot_mode_reg_set() - record boot mode register value
+ * @mode: implementation-dependent boot mode register value
+ *
+ * Records the boot mode register value which may subsequently
+ * be retrieved using boot_mode_reg_get().
+ *

[PATCH v2 05/10] clk: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg

2016-05-10 Thread Dirk Behme
From: Simon Horman 

Use new boot mode reg infrastructure to obtain the mode pin
value for initializing clocks for for R-Car Gen2 SoCs.

Signed-off-by: Simon Horman 
Signed-off-by: Dirk Behme 
---
 arch/arm/mach-shmobile/setup-rcar-gen2.c |  3 +--
 drivers/clk/renesas/clk-rcar-gen2.c  | 12 ++--
 include/linux/clk/renesas.h  |  2 +-
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c 
b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index a45b05b..2af84d8 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -138,14 +138,13 @@ void __init rcar_gen2_timer_init_for_arch_timer(void)
 void __init rcar_gen2_timer_init(void)
 {
int err;
-   u32 mode = rcar_gen2_read_mode_pins();
 
err = rcar_init_boot_mode();
if (err)
pr_err("Could not initialise boot mode register driver\n");
 
rcar_gen2_timer_init_for_arch_timer();
-   rcar_gen2_clocks_init(mode);
+   rcar_gen2_clocks_init();
clocksource_probe();
 }
 
diff --git a/drivers/clk/renesas/clk-rcar-gen2.c 
b/drivers/clk/renesas/clk-rcar-gen2.c
index 00e6aba..0109878 100644
--- a/drivers/clk/renesas/clk-rcar-gen2.c
+++ b/drivers/clk/renesas/clk-rcar-gen2.c
@@ -20,6 +20,8 @@
 #include 
 #include 
 
+#include 
+
 struct rcar_gen2_cpg {
struct clk_onecell_data data;
spinlock_t lock;
@@ -421,9 +423,15 @@ static void __init rcar_gen2_cpg_clocks_init(struct 
device_node *np)
 CLK_OF_DECLARE(rcar_gen2_cpg_clks, "renesas,rcar-gen2-cpg-clocks",
   rcar_gen2_cpg_clocks_init);
 
-void __init rcar_gen2_clocks_init(u32 mode)
+void __init rcar_gen2_clocks_init(void)
 {
-   cpg_mode = mode;
+   int err;
+
+   err = boot_mode_reg_get(&cpg_mode);
+   if (err) {
+   pr_err("%s: failed to obtain boot mode\n", __func__);
+   return;
+   }
 
of_clk_init(NULL);
 }
diff --git a/include/linux/clk/renesas.h b/include/linux/clk/renesas.h
index ba6fa41..d4a1518 100644
--- a/include/linux/clk/renesas.h
+++ b/include/linux/clk/renesas.h
@@ -22,7 +22,7 @@ struct generic_pm_domain;
 
 void r8a7778_clocks_init(u32 mode);
 void r8a7779_clocks_init(u32 mode);
-void rcar_gen2_clocks_init(u32 mode);
+void rcar_gen2_clocks_init(void);
 
 void cpg_mstp_add_clk_domain(struct device_node *np);
 #ifdef CONFIG_CLK_RENESAS_CPG_MSTP
-- 
2.8.0



[PATCH v2 07/10] arm: renesas: rcar-gen3: Make boot-mode-reg Gen3 compatible

2016-05-10 Thread Dirk Behme
From: Dirk Behme 

The boot mode register is available on Renesas Gen3, too.
Use the same driver on Gen3 as on Gen2.

Signed-off-by: Dirk Behme 
---
 arch/arm64/Kconfig.platforms  | 1 +
 drivers/misc/boot-mode-reg/rcar.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index fda93a2..591ab8f 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -106,6 +106,7 @@ config ARCH_SHMOBILE
 config ARCH_RENESAS
bool "Renesas SoC Platforms"
select ARCH_SHMOBILE
+   select BOOT_MODE_REG_RCAR
select PINCTRL
select PM
select PM_GENERIC_DOMAINS
diff --git a/drivers/misc/boot-mode-reg/rcar.c 
b/drivers/misc/boot-mode-reg/rcar.c
index c3b778fe..e994980 100644
--- a/drivers/misc/boot-mode-reg/rcar.c
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -48,7 +48,9 @@ int __init rcar_init_boot_mode(void)
of_machine_is_compatible("renesas,r8a7791") ||
of_machine_is_compatible("renesas,r8a7792") ||
of_machine_is_compatible("renesas,r8a7793") ||
-   of_machine_is_compatible("renesas,r8a7794"))
+   of_machine_is_compatible("renesas,r8a7794") ||
+   of_machine_is_compatible("renesas,r8a7795") ||
+   of_machine_is_compatible("renesas,r8a7796"))
return rcar_read_mode_pins();
 
return 0;
-- 
2.8.0



[PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support

2016-05-10 Thread Dirk Behme
From: Dirk Behme 

The reset module on RCar Gen2 and Gen3 SoCs contains various reset handling
related registers. Their content is implementation dependent.

Signed-off-by: Dirk Behme 
---
 .../devicetree/bindings/misc/renesas,rcar-rst.txt | 15 +++
 arch/arm/boot/dts/r8a7790.dtsi|  5 +
 arch/arm/boot/dts/r8a7791.dtsi|  5 +
 arch/arm/boot/dts/r8a7793.dtsi|  5 +
 arch/arm/boot/dts/r8a7794.dtsi|  6 ++
 arch/arm64/boot/dts/renesas/r8a7795.dtsi  |  5 +
 arch/arm64/boot/dts/renesas/r8a7796.dtsi  |  5 +
 7 files changed, 46 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt

diff --git a/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt 
b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
new file mode 100644
index 000..88695c4
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
@@ -0,0 +1,15 @@
+Renesas RCar r8a779x reset module
+-
+This binding defines the reset module found on Renesas RCar r8a779x
+SoCs. The reset module contains several reset related registers,
+the meaning of them is implementation dependent.
+
+Required properties:
+- compatible : "renesas,rcar-rst"
+- reg : Location and size of the reset module
+
+Example:
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
\ No newline at end of file
diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
index 83cf23c..d9b86c4 100644
--- a/arch/arm/boot/dts/r8a7790.dtsi
+++ b/arch/arm/boot/dts/r8a7790.dtsi
@@ -1102,6 +1102,11 @@
#power-domain-cells = <0>;
};
 
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
+
/* Variable factor clocks */
sd2_clk: sd2@e6150078 {
compatible = "renesas,r8a7790-div6-clock", 
"renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index db67e34..9c7a210 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -1122,6 +1122,11 @@
#power-domain-cells = <0>;
};
 
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
+
/* Variable factor clocks */
sd2_clk: sd2@e6150078 {
compatible = "renesas,r8a7791-div6-clock", 
"renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7793.dtsi b/arch/arm/boot/dts/r8a7793.dtsi
index 1dd6d20..31858c6 100644
--- a/arch/arm/boot/dts/r8a7793.dtsi
+++ b/arch/arm/boot/dts/r8a7793.dtsi
@@ -933,6 +933,11 @@
#power-domain-cells = <0>;
};
 
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
+
/* Variable factor clocks */
sd2_clk: sd2@e6150078 {
compatible = "renesas,r8a7793-div6-clock",
diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
index f334a3a..c419ca6 100644
--- a/arch/arm/boot/dts/r8a7794.dtsi
+++ b/arch/arm/boot/dts/r8a7794.dtsi
@@ -932,6 +932,12 @@
 "rcan";
#power-domain-cells = <0>;
};
+
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
+
/* Variable factor clocks */
sd2_clk: sd2@e6150078 {
compatible = "renesas,r8a7794-div6-clock", 
"renesas,cpg-div6-clock";
diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 7181db0..1266975 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -309,6 +309,11 @@
#power-domain-cells = <0>;
};
 
+   reset-controller@e616 {
+   compatible = "renesas,rcar-rst";
+   reg = <0 0xe616 0 0x200>;
+   };
+
sysc: system-controller@e618 {
compatible = "renesas,r8a7795-sysc";
reg = <0 0xe618 0 0x0400>;
diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi 
b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
index 1389528..c3d6075 100644
--- a/arch/arm64/boot

[PATCH v2 02/10] boot-mode-reg: Add R-Car driver

2016-05-10 Thread Dirk Behme
From: Simon Horman 

Boot mode register driver for R-Car.

If running on a supported platform it reads the boot mode register and
records it using the boot mode register infrastructure established by an
earlier patch.

rcar_init_boot_mode() is exported allow it to be explicitly called in
cases where the boot mode register is needed before init calls are made.

Signed-off-by: Simon Horman 
---
 drivers/misc/boot-mode-reg/Kconfig  |  8 +
 drivers/misc/boot-mode-reg/Makefile |  1 +
 drivers/misc/boot-mode-reg/rcar.c   | 60 +
 include/misc/boot-mode-reg.h|  3 ++
 4 files changed, 72 insertions(+)
 create mode 100644 drivers/misc/boot-mode-reg/rcar.c

diff --git a/drivers/misc/boot-mode-reg/Kconfig 
b/drivers/misc/boot-mode-reg/Kconfig
index 3c4ddde..3868c36 100644
--- a/drivers/misc/boot-mode-reg/Kconfig
+++ b/drivers/misc/boot-mode-reg/Kconfig
@@ -9,3 +9,11 @@ config BOOT_MODE_REG_CORE
help
  Say Y here to allow support for drivers to read boot mode
  registers and make the value available to other subsystems.
+
+config BOOT_MODE_REG_RCAR
+   tristate "Boot Mode Register Driver for Renesas R-Car SoCs"
+   default n
+   select BOOT_MODE_REG_CORE
+   help
+ Say Y here to allow support for reading the boot mode register
+ on Renesas R-Car SoCs.
diff --git a/drivers/misc/boot-mode-reg/Makefile 
b/drivers/misc/boot-mode-reg/Makefile
index 19134b2..5469a1d 100644
--- a/drivers/misc/boot-mode-reg/Makefile
+++ b/drivers/misc/boot-mode-reg/Makefile
@@ -4,3 +4,4 @@
 #
 
 obj-$(CONFIG_BOOT_MODE_REG_CORE)   += core.o
+obj-$(CONFIG_BOOT_MODE_REG_RCAR)   += rcar.o
diff --git a/drivers/misc/boot-mode-reg/rcar.c 
b/drivers/misc/boot-mode-reg/rcar.c
new file mode 100644
index 000..c3b778fe
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -0,0 +1,60 @@
+/*
+ * R-Car Boot Mode Register Driver
+ *
+ * Copyright (C) 2015 Simon Horman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+
+#include 
+
+#define MODEMR 0xe6160060
+
+static int __init rcar_read_mode_pins(void)
+{
+   void __iomem *modemr;
+   int err = -ENOMEM;
+   static u32 mode;
+
+   modemr = ioremap_nocache(MODEMR, 4);
+   if (!modemr) {
+   pr_err("failed to map boot mode register");
+   goto err;
+   }
+   mode = ioread32(modemr);
+   iounmap(modemr);
+
+   err = boot_mode_reg_set(mode);
+err:
+   if (err)
+   pr_err("failed to initialise boot mode");
+   return err;
+}
+
+int __init rcar_init_boot_mode(void)
+{
+   if (of_machine_is_compatible("renesas,r8a7790") ||
+   of_machine_is_compatible("renesas,r8a7791") ||
+   of_machine_is_compatible("renesas,r8a7792") ||
+   of_machine_is_compatible("renesas,r8a7793") ||
+   of_machine_is_compatible("renesas,r8a7794"))
+   return rcar_read_mode_pins();
+
+   return 0;
+}
+early_initcall(rcar_init_boot_mode);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Simon Horman ");
+MODULE_DESCRIPTION("R-Car Boot Mode Register Driver");
diff --git a/include/misc/boot-mode-reg.h b/include/misc/boot-mode-reg.h
index 34ee653..35d7f57 100644
--- a/include/misc/boot-mode-reg.h
+++ b/include/misc/boot-mode-reg.h
@@ -21,4 +21,7 @@
 int boot_mode_reg_get(u32 *mode);
 int boot_mode_reg_set(u32 mode);
 
+/* Allow explicit initialisation before initcalls */
+int rcar_init_boot_mode(void);
+
 #endif
-- 
2.8.0



[PATCH v2 10/10] boot-mode-reg: Convert to device tree

2016-05-10 Thread Dirk Behme
From: Dirk Behme 

Instead of using a hard coded address in the driver for the boot mode
register, optain it from the device tree.

Signed-off-by: Dirk Behme 
---
 drivers/misc/boot-mode-reg/rcar.c | 27 ---
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/misc/boot-mode-reg/rcar.c 
b/drivers/misc/boot-mode-reg/rcar.c
index e994980..0b23352 100644
--- a/drivers/misc/boot-mode-reg/rcar.c
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -16,24 +16,37 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 
-#define MODEMR 0xe6160060
+#define RCAR_RST_BASE 0xe616
+#define RCAR_RST_SIZE 0x200
+#define MODEMR 0x60
 
 static int __init rcar_read_mode_pins(void)
 {
-   void __iomem *modemr;
+   void __iomem *reset;
+   struct device_node *np;
int err = -ENOMEM;
static u32 mode;
 
-   modemr = ioremap_nocache(MODEMR, 4);
-   if (!modemr) {
-   pr_err("failed to map boot mode register");
+   np = of_find_compatible_node(NULL, NULL, "renesas,rcar-rst");
+   if (np)
+   reset = of_iomap(np, 0);
+   else {
+   pr_warn("can't find renesas rcar-rst device node");
+   reset = ioremap_nocache(RCAR_RST_BASE, RCAR_RST_SIZE);
+   }
+
+   if (!reset) {
+   pr_err("failed to map reset registers");
+   of_node_put(np);
goto err;
}
-   mode = ioread32(modemr);
-   iounmap(modemr);
+   mode = ioread32(reset + MODEMR);
+   iounmap(reset);
+   of_node_put(np);
 
err = boot_mode_reg_set(mode);
 err:
-- 
2.8.0



[PATCH v2 06/10] arm: renesas: rcar-gen2: Remove unused rcar_gen2_read_mode_pins()

2016-05-10 Thread Dirk Behme
From: Simon Horman 

The new boot mode reg infrastructure is now used in
place of rcar_gen2_read_mode_pins so the latter may now be removed.

Signed-off-by: Simon Horman 
---
 arch/arm/mach-shmobile/rcar-gen2.h   |  1 -
 arch/arm/mach-shmobile/setup-rcar-gen2.c | 18 --
 2 files changed, 19 deletions(-)

diff --git a/arch/arm/mach-shmobile/rcar-gen2.h 
b/arch/arm/mach-shmobile/rcar-gen2.h
index 8a66b4a..4c4ec37 100644
--- a/arch/arm/mach-shmobile/rcar-gen2.h
+++ b/arch/arm/mach-shmobile/rcar-gen2.h
@@ -3,7 +3,6 @@
 
 void rcar_gen2_timer_init(void);
 #define MD(nr) BIT(nr)
-u32 rcar_gen2_read_mode_pins(void);
 void rcar_gen2_reserve(void);
 void rcar_gen2_pm_init(void);
 
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c 
b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 2af84d8..5942b93 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -29,24 +29,6 @@
 #include "common.h"
 #include "rcar-gen2.h"
 
-#define MODEMR 0xe6160060
-
-u32 rcar_gen2_read_mode_pins(void)
-{
-   static u32 mode;
-   static bool mode_valid;
-
-   if (!mode_valid) {
-   void __iomem *modemr = ioremap_nocache(MODEMR, 4);
-   BUG_ON(!modemr);
-   mode = ioread32(modemr);
-   iounmap(modemr);
-   mode_valid = true;
-   }
-
-   return mode;
-}
-
 #define CNTCR 0
 #define CNTFID0 0x20
 
-- 
2.8.0



[PATCH v2 08/10] clk: renesas: rcar-gen3: Obtain MD pin value using boot-mode-reg

2016-05-10 Thread Dirk Behme
From: Dirk Behme 

Use new boot mode reg infrastructure to obtain the mode pin
value for initialising clocks for for R-Car Gen3 SoCs.

Signed-off-by: Dirk Behme 
---
 drivers/clk/renesas/r8a7795-cpg-mssr.c | 11 ++-
 drivers/clk/renesas/r8a7796-cpg-mssr.c | 11 ++-
 drivers/clk/renesas/rcar-gen3-cpg.c| 17 -
 drivers/clk/renesas/rcar-gen3-cpg.h|  1 -
 4 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c 
b/drivers/clk/renesas/r8a7795-cpg-mssr.c
index e53aff5..23bd58f 100644
--- a/drivers/clk/renesas/r8a7795-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c
@@ -18,6 +18,8 @@
 
 #include 
 
+#include 
+
 #include "renesas-cpg-mssr.h"
 #include "rcar-gen3-cpg.h"
 
@@ -294,7 +296,14 @@ static const struct rcar_gen3_cpg_pll_config 
cpg_pll_configs[16] __initconst = {
 static int __init r8a7795_cpg_mssr_init(struct device *dev)
 {
const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
-   u32 cpg_mode = rcar_gen3_read_mode_pins();
+   u32 cpg_mode;
+   int err;
+
+   err = boot_mode_reg_get(&cpg_mode);
+   if (err) {
+   dev_err(dev, "Failed obtain boot mode: %i\n", err);
+   return err;
+   }
 
cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
if (!cpg_pll_config->extal_div) {
diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c 
b/drivers/clk/renesas/r8a7796-cpg-mssr.c
index c84b549..2ecb135 100644
--- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
@@ -19,6 +19,8 @@
 
 #include 
 
+#include 
+
 #include "renesas-cpg-mssr.h"
 #include "rcar-gen3-cpg.h"
 
@@ -159,7 +161,14 @@ static const struct rcar_gen3_cpg_pll_config 
cpg_pll_configs[16] __initconst = {
 static int __init r8a7796_cpg_mssr_init(struct device *dev)
 {
const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
-   u32 cpg_mode = rcar_gen3_read_mode_pins();
+   u32 cpg_mode;
+   int err;
+
+   err = boot_mode_reg_get(&cpg_mode);
+   if (err) {
+   dev_err(dev, "Failed obtain boot mode: %i\n", err);
+   return err;
+   }
 
cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
if (!cpg_pll_config->extal_div) {
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c 
b/drivers/clk/renesas/rcar-gen3-cpg.c
index bb4f2f9..9d76076 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.c
+++ b/drivers/clk/renesas/rcar-gen3-cpg.c
@@ -333,23 +333,6 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct 
device *dev,
 __clk_get_name(parent), 0, mult, div);
 }
 
-/*
- * Reset register definitions.
- */
-#define MODEMR 0xe6160060
-
-u32 __init rcar_gen3_read_mode_pins(void)
-{
-   void __iomem *modemr = ioremap_nocache(MODEMR, 4);
-   u32 mode;
-
-   BUG_ON(!modemr);
-   mode = ioread32(modemr);
-   iounmap(modemr);
-
-   return mode;
-}
-
 int __init rcar_gen3_cpg_init(const struct rcar_gen3_cpg_pll_config *config,
  unsigned int clk_extalr)
 {
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.h 
b/drivers/clk/renesas/rcar-gen3-cpg.h
index f699085..f788f48 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.h
+++ b/drivers/clk/renesas/rcar-gen3-cpg.h
@@ -33,7 +33,6 @@ struct rcar_gen3_cpg_pll_config {
 
 #define CPG_RCKCR  0x240
 
-u32 rcar_gen3_read_mode_pins(void);
 struct clk *rcar_gen3_cpg_clk_register(struct device *dev,
const struct cpg_core_clk *core, const struct cpg_mssr_info *info,
struct clk **clks, void __iomem *base);
-- 
2.8.0



[PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support

2016-05-10 Thread Dirk Behme
This is a resend of

http://www.spinics.net/lists/linux-sh/msg45969.html

Besides some minor clean up and fixes, it's rebased against

https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git/log/?h=topic/gen3-latest
0ea1cc9f0c9537d3fb42722c188
[WIP] arm64: r8a7796: Integration

and adds support for RCar Gen3. Additionally, it moves the MODEMR
register to device tree instead of hard coding its address.

These patches are available in

https://github.com/dirkbehme/linux-renesas-rcar-gen3/commits/geert/topic/gen3-latest-modereg

too.

It's boot tested on r8a7795 Salvator-X and checked that the same
mode value is read without and with this patch series.

Dirk

Changes in v2:

* Correct link & subject in introduction patch 
* Fix some spelling errors
* Drop the goto in boot_mode_reg_get() and boot_mode_reg_get()
* Convert device tree node to renesas,rcar-rst and use whole reset device
* Add devcie tree node documentation
* Preserve compatibility with old DTBs that don't have the node in DT


Re: [PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Wolfram Sang
On Tue, May 10, 2016 at 11:05:34PM +0200, Greg KH wrote:
> On Tue, May 10, 2016 at 03:52:13PM +0200, Wolfram Sang wrote:
> > This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
> > See patch 1 and README for more details about its origin. To have the card
> > working, you need another patch which is already in mmc/next:
> > 
> > https://patchwork.kernel.org/patch/9043341/
> > 
> > A working topic branch for the Renesas H3 can be found here:
> > 
> > git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
> > renesas/topic/gen3-sdio
> > 
> > This series only can be found here:
> > 
> > git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010
> > 
> > Note: I needed this driver to verify SDIO capabilities for the new Renesas 
> > H3
> > SoC. The fact that the original KS7010 driver also comes from Renesas is a
> > coincidence. It does not mean official support for this driver. Parts of 
> > this
> > work were backed by the above mentioned SDIO verification task while other
> > parts were my personal interest. Future patches and reviews will also done 
> > by
> > me as a private person (unless something very surprising happens ;))
> > 
> > Please comment, review, apply...
> 
> Can you change the README file to be named TODO to match all of the
> other staging driver files?  That way people can look at them by just
> doing a staging/*/TODO match.

Will do. Do you want a) an incremental patch, b) and updated branch to
pull from, or c) the whole series resend?



signature.asc
Description: PGP signature


Re: renesas-drivers-2016-05-10-v4.6-rc7

2016-05-10 Thread Kuninori Morimoto

Hi Geert

> I have pushed renesas-drivers-2016-05-10-v4.6-rc7 to
> https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git
> 
> This tree is meant to ease development of platform support and drivers
> for Renesas ARM SoCs. It is created by merging (a) the for-next branches
> of various subsystem trees and (b) branches with driver code submitted
> or planned for submission to maintainers into the development branch of
> Simon Horman's renesas.git tree.
> 
> Today's version is based on renesas-devel-20160509-v4.6-rc7.

I couldn't compile code ?

> git checkout renesas-drivers-2016-05-10-v4.6-rc7 
> make defconfig 
> make64 Image
  CHK include/config/kernel.release
  Using /opt/home/morimoto/WORK/linux as source for kernel
  GEN ./Makefile
  CHK include/generated/uapi/linux/version.h
  CHK include/generated/utsrelease.h
  CHK include/generated/bounds.h
  CHK include/generated/timeconst.h
  CHK include/generated/asm-offsets.h
  CALL/opt/home/morimoto/WORK/linux/scripts/checksyscalls.sh
  CHK include/generated/compile.h
  (snip)
  CC  arch/arm64/kvm/../../../arch/arm/kvm/arm.o
/opt/home/morimoto/WORK/linux/arch/arm64/kvm/../../../arch/arm/kvm/arm.c: In 
function 'teardown_hyp_mode':
/opt/home/morimoto/WORK/linux/arch/arm64/kvm/../../../arch/arm/kvm/arm.c:1236:27:
 error: 'hyp_init_cpu_nb' undeclared (first use in this function)
  unregister_cpu_notifier(&hyp_init_cpu_nb);
   ^
/opt/home/morimoto/WORK/linux/arch/arm64/kvm/../../../arch/arm/kvm/arm.c:1236:27:
 note: each undeclared identifier is reported only once for each function it 
appears in
make[3]: *** [arch/arm64/kvm/../../../arch/arm/kvm/arm.o] エラー 1
make[2]: *** [arch/arm64/kvm] エラー 2
make[1]: *** [sub-make] エラー 2
make: *** [__sub-make] エラー 2



Re: renesas-drivers-2016-04-26-v4.6-rc5

2016-05-10 Thread Kuninori Morimoto

Hi Geert, Ulrich
Cc: Magnus

> I have pushed renesas-drivers-2016-04-26-v4.6-rc5 to
> https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git
> 
> This tree is meant to ease development of platform support and drivers
> for Renesas ARM SoCs. It is created by merging (a) the for-next branches
> of various subsystem trees and (b) branches with driver code submitted
> or planned for submission to maintainers into the development branch of
> Simon Horman's renesas.git tree.

For HDMI output point of view,
as 1st step, it needs additional config. I attached it on this mail.
I know Geert don't like it, but I hope Ulrich can handle it in
formal version ;P

My main problem is that HDMI1 output (= from CN17) is broken
on this renesas-drivers version.
It doesn't have such issue on previous version.

renesas-drivers-2016-04-12-v4.6-rc3 : no problem
renesas-drivers-2016-04-26-v4.6-rc5 : HDMI1 output broken

This is log

--- 8< --

[   12.531390] [CRTC:48] vblank wait timed out
[   12.535647] [ cut here ]
[   12.541702] WARNING: CPU: 2 PID: 1274 at 
/opt/home/morimoto/WORK/linux/drivers/gpu/drm/drm_atomic_helper.c:1106 
drm_atomic_helper_wait_for_vblanks+0x228/0x230
[   12.558807] Modules linked in:
[   12.563323] 
[   12.566252] CPU: 2 PID: 1274 Comm: irq/169-feb Not tainted 4.6.0-rc5+ 
#218
[   12.574942] Hardware name: Renesas Salvator-X board based on r8a7795 (DT)
[   12.583210] task: ffc038dcbc00 ti: ffc038814000 task.ti: 
ffc038814000
[   12.592184] PC is at drm_atomic_helper_wait_for_vblanks+0x228/0x230
[   12.599937] LR is at drm_atomic_helper_wait_for_vblanks+0x228/0x230
[   12.607676] pc : [] lr : [] pstate: 
6145
[   12.616562] sp : ffc038817a30
[   12.621361] x29: ffc038817a30 x28:  
[   12.628184] x27: ffc039188940 x26: 0098 
[   12.634988] x25: ffc038817ac0 x24: 0001 
[   12.641773] x23: 0130 x22: ffc039a9e800 
[   12.648552] x21: ffc038868400 x20: 0002 
[   12.655318] x19: ffc038880d80 x18: ff8088cf8d17 
[   12.662063] x17: 0007 x16: 0001 
[   12.668796] x15: 0006 x14: ff8008cf8d25 
[   12.675508] x13: ff8008cff150 x12: ffc039351470 
[   12.682202] x11: ff80088a9cc8 x10: 0001 
[   12.688879] x9 :  x8 : 0158 
[   12.695535] x7 : 0008 x6 : 0001 
[   12.702168] x5 :  x4 :  
[   12.708776] x3 :  x2 : ffc03ef9c228 
[   12.715373] x1 : ffc038814000 x0 : 001f 
[   12.721962] 
[   12.724687] ---[ end trace d044c743a5b968f8 ]---
[   12.730542] Call trace:
[   12.734212] Exception stack(0xffc038817870 to 0xffc038817990)
[   12.741857] 7860:   ffc038880d80 
0002
[   12.750867] 7880: ffc038817a30 ff80084593c8 0002 
ff8008cff150
[   12.759873] 78a0: ffc0388178c0 ff8008a5b168 00010001 
ff8008cfcb98
[   12.768856] 78c0: ffc038817960 ff80080f9e50 ff80080f9e18 
ff8008a9a818
[   12.777823] 78e0: ffc038868400 ffc039a9e800 0130 
0001
[   12.786768] 7900: ffc038817ac0 0098 001f 
ffc038814000
[   12.795692] 7920: ffc03ef9c228   

[   12.804587] 7940: 0001 0008 0158 

[   12.813451] 7960: 0001 ff80088a9cc8 ffc039351470 
ff8008cff150
[   12.822332] 7980: ff8008cf8d25 0006
[   12.828274] [] 
drm_atomic_helper_wait_for_vblanks+0x228/0x230
[   12.836672] [] rcar_du_atomic_complete+0x50/0xb8
[   12.843934] [] rcar_du_atomic_commit+0x278/0x288
[   12.851181] [] drm_atomic_commit+0x40/0x70
[   12.857893] [] restore_fbdev_mode+0x270/0x2b0
[   12.864850] [] 
drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x90
[   12.873636] [] drm_fb_helper_set_par+0x2c/0x60
[   12.880680] [] drm_fb_helper_hotplug_event+0xd8/0x138
[   12.888288] [] drm_fbdev_cma_hotplug_event+0x10/0x20
[   12.895755] [] rcar_du_output_poll_changed+0x14/0x20
[   12.903229] [] drm_kms_helper_hotplug_event+0x28/0x38
[   12.910797] [] drm_helper_hpd_irq_event+0x100/0x190
[   12.918185] [] dw_hdmi_irq+0xd0/0x180
[   12.924341] [] irq_thread_fn+0x28/0x68
[   12.930564] [] irq_thread+0x128/0x1e8
[   12.936683] [] kthread+0xd0/0xe8
[   12.942379] [] ret_from_fork+0x10/0x40
--- 8< --

From 6119337a7547cf1eb9d9a95190b2055d2dce2687 Mon Sep 17 00:00:00 2001
From: Kuninori Morimoto 
Date: Thu, 31 Mar 2016 10:04:37 +0900
Subject: [PATCH] arm64: defconfig: add VIDEO_RENESAS_FCP

DRM_RCAR_VSP requests VIDEO_RENESAS_VSP1, and VIDEO_RENESAS_VSP1 requests
VIDEO_RENESAS_FCP. But VIDEO_RENESAS_FCP is not set on defconfig.
This patch adds it. Otherwise kernel goes to Oops.

Si