Commit b1f17561 authored by Ajay Singh's avatar Ajay Singh Committed by Greg Kroah-Hartman

staging: wilc1000: define macros to replace magic number values

Define macros for global as well as SPI/SDIO specific register to avoid
use of magic numbers.
Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Link: https://lore.kernel.org/r/20200214172250.13026-9-ajay.kathat@microchip.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5832cbe2
...@@ -686,13 +686,16 @@ static int wilc_sdio_init(struct wilc *wilc, bool resume) ...@@ -686,13 +686,16 @@ static int wilc_sdio_init(struct wilc *wilc, bool resume)
* make sure can read back chip id correctly * make sure can read back chip id correctly
**/ **/
if (!resume) { if (!resume) {
ret = wilc_sdio_read_reg(wilc, 0x1000, &chipid); int rev;
ret = wilc_sdio_read_reg(wilc, WILC_CHIPID, &chipid);
if (ret) { if (ret) {
dev_err(&func->dev, "Fail cmd read chip id...\n"); dev_err(&func->dev, "Fail cmd read chip id...\n");
return ret; return ret;
} }
dev_err(&func->dev, "chipid (%08x)\n", chipid); dev_err(&func->dev, "chipid (%08x)\n", chipid);
if ((chipid & 0xfff) > 0x2a0) rev = FIELD_GET(WILC_CHIP_REV_FIELD, chipid);
if (rev > FIELD_GET(WILC_CHIP_REV_FIELD, WILC_1000_BASE_ID_2A))
sdio_priv->has_thrpt_enh3 = 1; sdio_priv->has_thrpt_enh3 = 1;
else else
sdio_priv->has_thrpt_enh3 = 0; sdio_priv->has_thrpt_enh3 = 0;
......
...@@ -683,7 +683,7 @@ static int wilc_spi_read_reg(struct wilc *wilc, u32 addr, u32 *data) ...@@ -683,7 +683,7 @@ static int wilc_spi_read_reg(struct wilc *wilc, u32 addr, u32 *data)
u8 cmd = CMD_SINGLE_READ; u8 cmd = CMD_SINGLE_READ;
u8 clockless = 0; u8 clockless = 0;
if (addr < 0x30) { if (addr < WILC_SPI_CLOCKLESS_ADDR_LIMIT) {
/* Clockless register */ /* Clockless register */
cmd = CMD_INTERNAL_READ; cmd = CMD_INTERNAL_READ;
clockless = 1; clockless = 1;
...@@ -760,7 +760,7 @@ static int wilc_spi_write_reg(struct wilc *wilc, u32 addr, u32 data) ...@@ -760,7 +760,7 @@ static int wilc_spi_write_reg(struct wilc *wilc, u32 addr, u32 data)
u8 cmd = CMD_SINGLE_WRITE; u8 cmd = CMD_SINGLE_WRITE;
u8 clockless = 0; u8 clockless = 0;
if (addr < 0x30) { if (addr < WILC_SPI_CLOCKLESS_ADDR_LIMIT) {
/* Clockless register */ /* Clockless register */
cmd = CMD_INTERNAL_WRITE; cmd = CMD_INTERNAL_WRITE;
clockless = 1; clockless = 1;
...@@ -829,7 +829,7 @@ static int wilc_spi_init(struct wilc *wilc, bool resume) ...@@ -829,7 +829,7 @@ static int wilc_spi_init(struct wilc *wilc, bool resume)
int ret; int ret;
if (isinit) { if (isinit) {
ret = wilc_spi_read_reg(wilc, 0x1000, &chipid); ret = wilc_spi_read_reg(wilc, WILC_CHIPID, &chipid);
if (ret) if (ret)
dev_err(&spi->dev, "Fail cmd read chip id...\n"); dev_err(&spi->dev, "Fail cmd read chip id...\n");
...@@ -881,7 +881,7 @@ static int wilc_spi_init(struct wilc *wilc, bool resume) ...@@ -881,7 +881,7 @@ static int wilc_spi_init(struct wilc *wilc, bool resume)
/* /*
* make sure can read back chip id correctly * make sure can read back chip id correctly
*/ */
ret = wilc_spi_read_reg(wilc, 0x1000, &chipid); ret = wilc_spi_read_reg(wilc, WILC_CHIPID, &chipid);
if (ret) { if (ret) {
dev_err(&spi->dev, "Fail cmd read chip id...\n"); dev_err(&spi->dev, "Fail cmd read chip id...\n");
return ret; return ret;
...@@ -896,7 +896,8 @@ static int wilc_spi_read_size(struct wilc *wilc, u32 *size) ...@@ -896,7 +896,8 @@ static int wilc_spi_read_size(struct wilc *wilc, u32 *size)
{ {
int ret; int ret;
ret = spi_internal_read(wilc, 0xe840 - WILC_SPI_REG_BASE, size); ret = spi_internal_read(wilc,
WILC_SPI_INT_STATUS - WILC_SPI_REG_BASE, size);
*size = FIELD_GET(IRQ_DMA_WD_CNT_MASK, *size); *size = FIELD_GET(IRQ_DMA_WD_CNT_MASK, *size);
return ret; return ret;
...@@ -904,12 +905,14 @@ static int wilc_spi_read_size(struct wilc *wilc, u32 *size) ...@@ -904,12 +905,14 @@ static int wilc_spi_read_size(struct wilc *wilc, u32 *size)
static int wilc_spi_read_int(struct wilc *wilc, u32 *int_status) static int wilc_spi_read_int(struct wilc *wilc, u32 *int_status)
{ {
return spi_internal_read(wilc, 0xe840 - WILC_SPI_REG_BASE, int_status); return spi_internal_read(wilc, WILC_SPI_INT_STATUS - WILC_SPI_REG_BASE,
int_status);
} }
static int wilc_spi_clear_int_ext(struct wilc *wilc, u32 val) static int wilc_spi_clear_int_ext(struct wilc *wilc, u32 val)
{ {
return spi_internal_write(wilc, 0xe844 - WILC_SPI_REG_BASE, val); return spi_internal_write(wilc, WILC_SPI_INT_CLEAR - WILC_SPI_REG_BASE,
val);
} }
static int wilc_spi_sync_ext(struct wilc *wilc, int nint) static int wilc_spi_sync_ext(struct wilc *wilc, int nint)
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
static inline bool is_wilc1000(u32 id) static inline bool is_wilc1000(u32 id)
{ {
return (id & 0xfffff000) == 0x100000; return (id & (~WILC_CHIP_REV_FIELD)) == WILC_1000_BASE_ID;
} }
static inline void acquire_bus(struct wilc *wilc, enum bus_acquire acquire) static inline void acquire_bus(struct wilc *wilc, enum bus_acquire acquire)
...@@ -393,10 +393,11 @@ void chip_allow_sleep(struct wilc *wilc) ...@@ -393,10 +393,11 @@ void chip_allow_sleep(struct wilc *wilc)
{ {
u32 reg = 0; u32 reg = 0;
wilc->hif_func->hif_read_reg(wilc, 0xf0, &reg); wilc->hif_func->hif_read_reg(wilc, WILC_SDIO_WAKEUP_REG, &reg);
wilc->hif_func->hif_write_reg(wilc, 0xf0, reg & ~BIT(0)); wilc->hif_func->hif_write_reg(wilc, WILC_SDIO_WAKEUP_REG,
wilc->hif_func->hif_write_reg(wilc, 0xfa, 0); reg & ~WILC_SDIO_WAKEUP_BIT);
wilc->hif_func->hif_write_reg(wilc, WILC_SDIO_HOST_TO_FW_REG, 0);
} }
EXPORT_SYMBOL_GPL(chip_allow_sleep); EXPORT_SYMBOL_GPL(chip_allow_sleep);
...@@ -407,9 +408,11 @@ void chip_wakeup(struct wilc *wilc) ...@@ -407,9 +408,11 @@ void chip_wakeup(struct wilc *wilc)
if (wilc->io_type == WILC_HIF_SPI) { if (wilc->io_type == WILC_HIF_SPI) {
do { do {
h->hif_read_reg(wilc, 1, &reg); h->hif_read_reg(wilc, WILC_SPI_WAKEUP_REG, &reg);
h->hif_write_reg(wilc, 1, reg | BIT(1)); h->hif_write_reg(wilc, WILC_SPI_WAKEUP_REG,
h->hif_write_reg(wilc, 1, reg & ~BIT(1)); reg | WILC_SPI_WAKEUP_BIT);
h->hif_write_reg(wilc, WILC_SPI_WAKEUP_REG,
reg & ~WILC_SPI_WAKEUP_BIT);
do { do {
usleep_range(2000, 2500); usleep_range(2000, 2500);
...@@ -417,35 +420,40 @@ void chip_wakeup(struct wilc *wilc) ...@@ -417,35 +420,40 @@ void chip_wakeup(struct wilc *wilc)
} while (wilc_get_chipid(wilc, true) == 0); } while (wilc_get_chipid(wilc, true) == 0);
} while (wilc_get_chipid(wilc, true) == 0); } while (wilc_get_chipid(wilc, true) == 0);
} else if (wilc->io_type == WILC_HIF_SDIO) { } else if (wilc->io_type == WILC_HIF_SDIO) {
h->hif_write_reg(wilc, 0xfa, 1); h->hif_write_reg(wilc, WILC_SDIO_HOST_TO_FW_REG,
WILC_SDIO_HOST_TO_FW_BIT);
usleep_range(200, 400); usleep_range(200, 400);
h->hif_read_reg(wilc, 0xf0, &reg); h->hif_read_reg(wilc, WILC_SDIO_WAKEUP_REG, &reg);
do { do {
h->hif_write_reg(wilc, 0xf0, reg | BIT(0)); h->hif_write_reg(wilc, WILC_SDIO_WAKEUP_REG,
h->hif_read_reg(wilc, 0xf1, &clk_status_reg); reg | WILC_SDIO_WAKEUP_BIT);
h->hif_read_reg(wilc, WILC_SDIO_CLK_STATUS_REG,
&clk_status_reg);
while ((clk_status_reg & 0x1) == 0) { while (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT)) {
usleep_range(2000, 2500); usleep_range(2000, 2500);
h->hif_read_reg(wilc, 0xf1, &clk_status_reg); h->hif_read_reg(wilc, WILC_SDIO_CLK_STATUS_REG,
&clk_status_reg);
} }
if ((clk_status_reg & 0x1) == 0) { if (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT)) {
h->hif_write_reg(wilc, 0xf0, reg & (~BIT(0))); h->hif_write_reg(wilc, WILC_SDIO_WAKEUP_REG,
reg & ~WILC_SDIO_WAKEUP_BIT);
} }
} while ((clk_status_reg & 0x1) == 0); } while (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT));
} }
if (wilc->chip_ps_state == WILC_CHIP_SLEEPING_MANUAL) { if (wilc->chip_ps_state == WILC_CHIP_SLEEPING_MANUAL) {
if (wilc_get_chipid(wilc, false) < 0x1002b0) { if (wilc_get_chipid(wilc, false) < WILC_1000_BASE_ID_2B) {
u32 val32; u32 val32;
h->hif_read_reg(wilc, 0x1e1c, &val32); h->hif_read_reg(wilc, WILC_REG_4_TO_1_RX, &val32);
val32 |= BIT(6); val32 |= BIT(6);
h->hif_write_reg(wilc, 0x1e1c, val32); h->hif_write_reg(wilc, WILC_REG_4_TO_1_RX, val32);
h->hif_read_reg(wilc, 0x1e9c, &val32); h->hif_read_reg(wilc, WILC_REG_4_TO_1_TX_BANK0, &val32);
val32 |= BIT(6); val32 |= BIT(6);
h->hif_write_reg(wilc, 0x1e9c, val32); h->hif_write_reg(wilc, WILC_REG_4_TO_1_TX_BANK0, val32);
} }
} }
wilc->chip_ps_state = WILC_CHIP_WAKEDUP; wilc->chip_ps_state = WILC_CHIP_WAKEDUP;
...@@ -455,7 +463,7 @@ EXPORT_SYMBOL_GPL(chip_wakeup); ...@@ -455,7 +463,7 @@ EXPORT_SYMBOL_GPL(chip_wakeup);
void host_wakeup_notify(struct wilc *wilc) void host_wakeup_notify(struct wilc *wilc)
{ {
acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY); acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY);
wilc->hif_func->hif_write_reg(wilc, 0x10b0, 1); wilc->hif_func->hif_write_reg(wilc, WILC_CORTUS_INTERRUPT_2, 1);
release_bus(wilc, WILC_BUS_RELEASE_ONLY); release_bus(wilc, WILC_BUS_RELEASE_ONLY);
} }
EXPORT_SYMBOL_GPL(host_wakeup_notify); EXPORT_SYMBOL_GPL(host_wakeup_notify);
...@@ -463,7 +471,7 @@ EXPORT_SYMBOL_GPL(host_wakeup_notify); ...@@ -463,7 +471,7 @@ EXPORT_SYMBOL_GPL(host_wakeup_notify);
void host_sleep_notify(struct wilc *wilc) void host_sleep_notify(struct wilc *wilc)
{ {
acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY); acquire_bus(wilc, WILC_BUS_ACQUIRE_ONLY);
wilc->hif_func->hif_write_reg(wilc, 0x10ac, 1); wilc->hif_func->hif_write_reg(wilc, WILC_CORTUS_INTERRUPT_1, 1);
release_bus(wilc, WILC_BUS_RELEASE_ONLY); release_bus(wilc, WILC_BUS_RELEASE_ONLY);
} }
EXPORT_SYMBOL_GPL(host_sleep_notify); EXPORT_SYMBOL_GPL(host_sleep_notify);
...@@ -884,7 +892,7 @@ int wilc_wlan_start(struct wilc *wilc) ...@@ -884,7 +892,7 @@ int wilc_wlan_start(struct wilc *wilc)
wilc->hif_func->hif_sync_ext(wilc, NUM_INT_EXT); wilc->hif_func->hif_sync_ext(wilc, NUM_INT_EXT);
ret = wilc->hif_func->hif_read_reg(wilc, 0x1000, &chipid); ret = wilc->hif_func->hif_read_reg(wilc, WILC_CHIPID, &chipid);
if (ret) { if (ret) {
release_bus(wilc, WILC_BUS_RELEASE_ONLY); release_bus(wilc, WILC_BUS_RELEASE_ONLY);
return ret; return ret;
...@@ -1125,18 +1133,24 @@ static int init_chip(struct net_device *dev) ...@@ -1125,18 +1133,24 @@ static int init_chip(struct net_device *dev)
chipid = wilc_get_chipid(wilc, true); chipid = wilc_get_chipid(wilc, true);
if ((chipid & 0xfff) != 0xa0) { if ((chipid & 0xfff) != 0xa0) {
ret = wilc->hif_func->hif_read_reg(wilc, 0x1118, &reg); ret = wilc->hif_func->hif_read_reg(wilc,
WILC_CORTUS_RESET_MUX_SEL,
&reg);
if (ret) { if (ret) {
netdev_err(dev, "fail read reg 0x1118\n"); netdev_err(dev, "fail read reg 0x1118\n");
goto release; goto release;
} }
reg |= BIT(0); reg |= BIT(0);
ret = wilc->hif_func->hif_write_reg(wilc, 0x1118, reg); ret = wilc->hif_func->hif_write_reg(wilc,
WILC_CORTUS_RESET_MUX_SEL,
reg);
if (ret) { if (ret) {
netdev_err(dev, "fail write reg 0x1118\n"); netdev_err(dev, "fail write reg 0x1118\n");
goto release; goto release;
} }
ret = wilc->hif_func->hif_write_reg(wilc, 0xc0000, 0x71); ret = wilc->hif_func->hif_write_reg(wilc,
WILC_CORTUS_BOOT_REGISTER,
WILC_CORTUS_BOOT_FROM_IRAM);
if (ret) { if (ret) {
netdev_err(dev, "fail write reg 0xc0000\n"); netdev_err(dev, "fail write reg 0xc0000\n");
goto release; goto release;
...@@ -1156,20 +1170,21 @@ u32 wilc_get_chipid(struct wilc *wilc, bool update) ...@@ -1156,20 +1170,21 @@ u32 wilc_get_chipid(struct wilc *wilc, bool update)
u32 rfrevid = 0; u32 rfrevid = 0;
if (chipid == 0 || update) { if (chipid == 0 || update) {
wilc->hif_func->hif_read_reg(wilc, 0x1000, &tempchipid); wilc->hif_func->hif_read_reg(wilc, WILC_CHIPID, &tempchipid);
wilc->hif_func->hif_read_reg(wilc, 0x13f4, &rfrevid); wilc->hif_func->hif_read_reg(wilc, WILC_RF_REVISION_ID,
&rfrevid);
if (!is_wilc1000(tempchipid)) { if (!is_wilc1000(tempchipid)) {
chipid = 0; chipid = 0;
return chipid; return chipid;
} }
if (tempchipid == 0x1002a0) { if (tempchipid == WILC_1000_BASE_ID_2A) { /* 0x1002A0 */
if (rfrevid != 0x1) if (rfrevid != 0x1)
tempchipid = 0x1002a1; tempchipid = WILC_1000_BASE_ID_2A_REV1;
} else if (tempchipid == 0x1002b0) { } else if (tempchipid == WILC_1000_BASE_ID_2B) { /* 0x1002B0 */
if (rfrevid == 0x4) if (rfrevid == 0x4)
tempchipid = 0x1002b1; tempchipid = WILC_1000_BASE_ID_2B_REV1;
else if (rfrevid != 0x3) else if (rfrevid != 0x3)
tempchipid = 0x1002b2; tempchipid = WILC_1000_BASE_ID_2B_REV2;
} }
chipid = tempchipid; chipid = tempchipid;
......
...@@ -66,6 +66,8 @@ ...@@ -66,6 +66,8 @@
#define WILC_INTR_CLEAR (WILC_INTR_REG_BASE + 0x30) #define WILC_INTR_CLEAR (WILC_INTR_REG_BASE + 0x30)
#define WILC_INTR_STATUS (WILC_INTR_REG_BASE + 0x40) #define WILC_INTR_STATUS (WILC_INTR_REG_BASE + 0x40)
#define WILC_RF_REVISION_ID 0x13f4
#define WILC_VMM_TBL_SIZE 64 #define WILC_VMM_TBL_SIZE 64
#define WILC_VMM_TX_TBL_BASE 0x150400 #define WILC_VMM_TX_TBL_BASE 0x150400
#define WILC_VMM_RX_TBL_BASE 0x150500 #define WILC_VMM_RX_TBL_BASE 0x150500
...@@ -89,10 +91,17 @@ ...@@ -89,10 +91,17 @@
#define WILC_SPI_TX_MODE (WILC_SPI_REG_BASE + 0x20) #define WILC_SPI_TX_MODE (WILC_SPI_REG_BASE + 0x20)
#define WILC_SPI_PROTOCOL_CONFIG (WILC_SPI_REG_BASE + 0x24) #define WILC_SPI_PROTOCOL_CONFIG (WILC_SPI_REG_BASE + 0x24)
#define WILC_SPI_INTR_CTL (WILC_SPI_REG_BASE + 0x2c) #define WILC_SPI_INTR_CTL (WILC_SPI_REG_BASE + 0x2c)
#define WILC_SPI_INT_STATUS (WILC_SPI_REG_BASE + 0x40)
#define WILC_SPI_INT_CLEAR (WILC_SPI_REG_BASE + 0x44)
#define WILC_SPI_WAKEUP_REG 0x1
#define WILC_SPI_WAKEUP_BIT BIT(1)
#define WILC_SPI_PROTOCOL_OFFSET (WILC_SPI_PROTOCOL_CONFIG - \ #define WILC_SPI_PROTOCOL_OFFSET (WILC_SPI_PROTOCOL_CONFIG - \
WILC_SPI_REG_BASE) WILC_SPI_REG_BASE)
#define WILC_SPI_CLOCKLESS_ADDR_LIMIT 0x30
/* Functions IO enables bits */ /* Functions IO enables bits */
#define WILC_SDIO_CCCR_IO_EN_FUNC1 BIT(1) #define WILC_SDIO_CCCR_IO_EN_FUNC1 BIT(1)
...@@ -149,6 +158,32 @@ ...@@ -149,6 +158,32 @@
#define WILC_HAVE_DISABLE_WILC_UART BIT(7) #define WILC_HAVE_DISABLE_WILC_UART BIT(7)
#define WILC_HAVE_USE_IRQ_AS_HOST_WAKE BIT(8) #define WILC_HAVE_USE_IRQ_AS_HOST_WAKE BIT(8)
#define WILC_CORTUS_INTERRUPT_BASE 0x10A8
#define WILC_CORTUS_INTERRUPT_1 (WILC_CORTUS_INTERRUPT_BASE + 0x4)
#define WILC_CORTUS_INTERRUPT_2 (WILC_CORTUS_INTERRUPT_BASE + 0x8)
/* tx control register 1 to 4 for RX */
#define WILC_REG_4_TO_1_RX 0x1e1c
/* tx control register 1 to 4 for TX Bank_0 */
#define WILC_REG_4_TO_1_TX_BANK0 0x1e9c
#define WILC_CORTUS_RESET_MUX_SEL 0x1118
#define WILC_CORTUS_BOOT_REGISTER 0xc0000
#define WILC_CORTUS_BOOT_FROM_IRAM 0x71
#define WILC_1000_BASE_ID 0x100000
#define WILC_1000_BASE_ID_2A 0x1002A0
#define WILC_1000_BASE_ID_2A_REV1 (WILC_1000_BASE_ID_2A + 1)
#define WILC_1000_BASE_ID_2B 0x1002B0
#define WILC_1000_BASE_ID_2B_REV1 (WILC_1000_BASE_ID_2B + 1)
#define WILC_1000_BASE_ID_2B_REV2 (WILC_1000_BASE_ID_2B + 2)
#define WILC_CHIP_REV_FIELD GENMASK(11, 0)
/******************************************** /********************************************
* *
* Wlan Defines * Wlan Defines
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment