diff options
author | Ajitpal.Singh <ajitpal.singh@stericsson.com> | 2012-02-29 15:14:12 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:06:36 +0200 |
commit | bd4fb12f5688a2991d78208dda9826aeba1769be (patch) | |
tree | 49b9daa83d0f1362d8f755d9e03d08206c8367b5 | |
parent | 2f60d34aa23fc9dd795b0a6df18bd3879b6154b5 (diff) |
cw1200: Set better block size for SDIO
Changing default SDIO block size used to 512.
Helps in less overhead on SDIO bus.
ST-Ericsson ID: 357764
ST-Ericsson FOSS-OUT ID: NA
Change-Id: I6cd1384ab5cff308f533b85b50d3396396cc4f3a
Signed-off-by: Ajitpal.Singh <ajitpal.singh@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/32913
Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
-rw-r--r-- | drivers/staging/cw1200/bh.c | 2 | ||||
-rw-r--r-- | drivers/staging/cw1200/bh.h | 4 | ||||
-rw-r--r-- | drivers/staging/cw1200/cw1200_sdio.c | 12 | ||||
-rw-r--r-- | drivers/staging/cw1200/main.c | 4 | ||||
-rw-r--r-- | drivers/staging/cw1200/sbus.h | 1 |
5 files changed, 12 insertions, 11 deletions
diff --git a/drivers/staging/cw1200/bh.c b/drivers/staging/cw1200/bh.c index 978e97592ce..ff6b85edfb7 100644 --- a/drivers/staging/cw1200/bh.c +++ b/drivers/staging/cw1200/bh.c @@ -346,8 +346,6 @@ rx: * to the NEXT Message length + 2 Bytes for SKB */ read_len = read_len + 2; - BUG_ON(SDIO_BLOCK_SIZE & (SDIO_BLOCK_SIZE - 1)); - #if defined(CONFIG_CW1200_NON_POWER_OF_TWO_BLOCKSIZES) alloc_len = priv->sbus_ops->align_size( priv->sbus_priv, read_len); diff --git a/drivers/staging/cw1200/bh.h b/drivers/staging/cw1200/bh.h index 6d4d27b18c5..ea4598afc43 100644 --- a/drivers/staging/cw1200/bh.h +++ b/drivers/staging/cw1200/bh.h @@ -14,9 +14,7 @@ /* extern */ struct cw1200_common; -/* TODO: 512, actually. Was increased to 1024 - * for compatibility with particular FW. */ -#define SDIO_BLOCK_SIZE (1024) +#define SDIO_BLOCK_SIZE (512) int cw1200_register_bh(struct cw1200_common *priv); void cw1200_unregister_bh(struct cw1200_common *priv); diff --git a/drivers/staging/cw1200/cw1200_sdio.c b/drivers/staging/cw1200/cw1200_sdio.c index cd432655bff..dffa8879b93 100644 --- a/drivers/staging/cw1200/cw1200_sdio.c +++ b/drivers/staging/cw1200/cw1200_sdio.c @@ -274,15 +274,14 @@ static int cw1200_sdio_reset(struct sbus_priv *self) static size_t cw1200_sdio_align_size(struct sbus_priv *self, size_t size) { size_t aligned = sdio_align_size(self->func, size); - /* HACK!!! Problems with DMA size on u8500 platform */ - if ((aligned & 0x1F) && (aligned & ~0x1F)) { - aligned &= ~0x1F; - aligned += 0x20; - } - return aligned; } +int cw1200_sdio_set_block_size(struct sbus_priv *self, size_t size) +{ + return sdio_set_block_size(self->func, size); +} + static int cw1200_sdio_pm(struct sbus_priv *self, bool suspend) { int ret; @@ -312,6 +311,7 @@ static struct sbus_ops cw1200_sdio_sbus_ops = { .reset = cw1200_sdio_reset, .align_size = cw1200_sdio_align_size, .power_mgmt = cw1200_sdio_pm, + .set_block_size = cw1200_sdio_set_block_size, }; /* Probe Function to be called by SDIO stack when device is discovered */ diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c index ffc43592141..e57519aa3fb 100644 --- a/drivers/staging/cw1200/main.c +++ b/drivers/staging/cw1200/main.c @@ -498,6 +498,10 @@ int cw1200_core_probe(const struct sbus_ops *sbus_ops, err = cw1200_load_firmware(priv); if (err) goto err2; + priv->sbus_ops->lock(priv->sbus_priv); + WARN_ON(priv->sbus_ops->set_block_size(priv->sbus_priv, + SDIO_BLOCK_SIZE)); + priv->sbus_ops->unlock(priv->sbus_priv); if (wait_event_interruptible_timeout(priv->wsm_startup_done, priv->wsm_caps.firmwareReady, 3*HZ) <= 0) { diff --git a/drivers/staging/cw1200/sbus.h b/drivers/staging/cw1200/sbus.h index a911ef1a0e6..49bd06d20e5 100644 --- a/drivers/staging/cw1200/sbus.h +++ b/drivers/staging/cw1200/sbus.h @@ -33,6 +33,7 @@ struct sbus_ops { int (*reset)(struct sbus_priv *self); size_t (*align_size)(struct sbus_priv *self, size_t size); int (*power_mgmt)(struct sbus_priv *self, bool suspend); + int (*set_block_size)(struct sbus_priv *self, size_t size); }; #endif /* CW1200_SBUS_H */ |