libertas: rename some registers to clarify their meaning
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de> Acked-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
4c55523e60
commit
a78a832556
@ -205,8 +205,8 @@ static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 r
|
|||||||
/*
|
/*
|
||||||
* Used to send or receive data packets:
|
* Used to send or receive data packets:
|
||||||
*/
|
*/
|
||||||
#define IF_CS_HOST_WRITE 0x00000016
|
#define IF_CS_WRITE 0x00000016
|
||||||
#define IF_CS_HOST_WRITE_LEN 0x00000014
|
#define IF_CS_WRITE_LEN 0x00000014
|
||||||
#define IF_CS_READ 0x00000010
|
#define IF_CS_READ 0x00000010
|
||||||
#define IF_CS_READ_LEN 0x00000024
|
#define IF_CS_READ_LEN 0x00000024
|
||||||
|
|
||||||
@ -214,10 +214,10 @@ static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 r
|
|||||||
* Used to send commands (and to send firmware block) and to
|
* Used to send commands (and to send firmware block) and to
|
||||||
* receive command responses:
|
* receive command responses:
|
||||||
*/
|
*/
|
||||||
#define IF_CS_HOST_CMD 0x0000001A
|
#define IF_CS_CMD 0x0000001A
|
||||||
#define IF_CS_HOST_CMD_LEN 0x00000018
|
#define IF_CS_CMD_LEN 0x00000018
|
||||||
#define IF_CS_CARD_CMD 0x00000012
|
#define IF_CS_RESP 0x00000012
|
||||||
#define IF_CS_CARD_CMD_LEN 0x00000030
|
#define IF_CS_RESP_LEN 0x00000030
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The card status registers shows what the card/firmware actually
|
* The card status registers shows what the card/firmware actually
|
||||||
@ -255,8 +255,8 @@ static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 r
|
|||||||
* This is used to for handshaking with the card's bootloader/helper image
|
* This is used to for handshaking with the card's bootloader/helper image
|
||||||
* to synchronize downloading of firmware blocks.
|
* to synchronize downloading of firmware blocks.
|
||||||
*/
|
*/
|
||||||
#define IF_CS_CARD_SQ_READ_LOW 0x00000028
|
#define IF_CS_SQ_READ_LOW 0x00000028
|
||||||
#define IF_CS_CARD_SQ_HELPER_OK 0x10
|
#define IF_CS_SQ_HELPER_OK 0x10
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The scratch register tells us ...
|
* The scratch register tells us ...
|
||||||
@ -305,8 +305,8 @@ static int if_cs_send_cmd(struct lbs_private *priv, u8 *buf, u16 nb)
|
|||||||
|
|
||||||
/* Is hardware ready? */
|
/* Is hardware ready? */
|
||||||
while (1) {
|
while (1) {
|
||||||
u16 val = if_cs_read16(card, IF_CS_CARD_STATUS);
|
u16 status = if_cs_read16(card, IF_CS_CARD_STATUS);
|
||||||
if (val & IF_CS_BIT_COMMAND)
|
if (status & IF_CS_BIT_COMMAND)
|
||||||
break;
|
break;
|
||||||
if (++loops > 100) {
|
if (++loops > 100) {
|
||||||
lbs_pr_err("card not ready for commands\n");
|
lbs_pr_err("card not ready for commands\n");
|
||||||
@ -315,12 +315,12 @@ static int if_cs_send_cmd(struct lbs_private *priv, u8 *buf, u16 nb)
|
|||||||
mdelay(1);
|
mdelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if_cs_write16(card, IF_CS_HOST_CMD_LEN, nb);
|
if_cs_write16(card, IF_CS_CMD_LEN, nb);
|
||||||
|
|
||||||
if_cs_write16_rep(card, IF_CS_HOST_CMD, buf, nb / 2);
|
if_cs_write16_rep(card, IF_CS_CMD, buf, nb / 2);
|
||||||
/* Are we supposed to transfer an odd amount of bytes? */
|
/* Are we supposed to transfer an odd amount of bytes? */
|
||||||
if (nb & 1)
|
if (nb & 1)
|
||||||
if_cs_write8(card, IF_CS_HOST_CMD, buf[nb-1]);
|
if_cs_write8(card, IF_CS_CMD, buf[nb-1]);
|
||||||
|
|
||||||
/* "Assert the download over interrupt command in the Host
|
/* "Assert the download over interrupt command in the Host
|
||||||
* status register" */
|
* status register" */
|
||||||
@ -351,12 +351,12 @@ static void if_cs_send_data(struct lbs_private *priv, u8 *buf, u16 nb)
|
|||||||
status = if_cs_read16(card, IF_CS_CARD_STATUS);
|
status = if_cs_read16(card, IF_CS_CARD_STATUS);
|
||||||
BUG_ON((status & IF_CS_BIT_TX) == 0);
|
BUG_ON((status & IF_CS_BIT_TX) == 0);
|
||||||
|
|
||||||
if_cs_write16(card, IF_CS_HOST_WRITE_LEN, nb);
|
if_cs_write16(card, IF_CS_WRITE_LEN, nb);
|
||||||
|
|
||||||
/* write even number of bytes, then odd byte if necessary */
|
/* write even number of bytes, then odd byte if necessary */
|
||||||
if_cs_write16_rep(card, IF_CS_HOST_WRITE, buf, nb / 2);
|
if_cs_write16_rep(card, IF_CS_WRITE, buf, nb / 2);
|
||||||
if (nb & 1)
|
if (nb & 1)
|
||||||
if_cs_write8(card, IF_CS_HOST_WRITE, buf[nb-1]);
|
if_cs_write8(card, IF_CS_WRITE, buf[nb-1]);
|
||||||
|
|
||||||
if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX);
|
if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX);
|
||||||
if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX);
|
if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX);
|
||||||
@ -384,16 +384,16 @@ static int if_cs_receive_cmdres(struct lbs_private *priv, u8 *data, u32 *len)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
*len = if_cs_read16(priv->card, IF_CS_CARD_CMD_LEN);
|
*len = if_cs_read16(priv->card, IF_CS_RESP_LEN);
|
||||||
if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) {
|
if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) {
|
||||||
lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len);
|
lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read even number of bytes, then odd byte if necessary */
|
/* read even number of bytes, then odd byte if necessary */
|
||||||
if_cs_read16_rep(priv->card, IF_CS_CARD_CMD, data, *len/sizeof(u16));
|
if_cs_read16_rep(priv->card, IF_CS_RESP, data, *len/sizeof(u16));
|
||||||
if (*len & 1)
|
if (*len & 1)
|
||||||
data[*len-1] = if_cs_read8(priv->card, IF_CS_CARD_CMD);
|
data[*len-1] = if_cs_read8(priv->card, IF_CS_RESP);
|
||||||
|
|
||||||
/* This is a workaround for a firmware that reports too much
|
/* This is a workaround for a firmware that reports too much
|
||||||
* bytes */
|
* bytes */
|
||||||
@ -501,12 +501,10 @@ static irqreturn_t if_cs_interrupt(int irq, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cause & IF_CS_BIT_EVENT) {
|
if (cause & IF_CS_BIT_EVENT) {
|
||||||
u16 event = if_cs_read16(priv->card, IF_CS_CARD_STATUS)
|
u16 status = if_cs_read16(priv->card, IF_CS_CARD_STATUS);
|
||||||
& IF_CS_CARD_STATUS_MASK;
|
|
||||||
if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE,
|
if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE,
|
||||||
IF_CS_BIT_EVENT);
|
IF_CS_BIT_EVENT);
|
||||||
lbs_deb_cs("host event 0x%04x\n", event);
|
lbs_queue_event(priv, (status & IF_CS_CARD_STATUS_MASK) >> 8);
|
||||||
lbs_queue_event(priv, event >> 8 & 0xff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear interrupt cause */
|
/* Clear interrupt cause */
|
||||||
@ -574,11 +572,11 @@ static int if_cs_prog_helper(struct if_cs_card *card)
|
|||||||
|
|
||||||
/* "write the number of bytes to be sent to the I/O Command
|
/* "write the number of bytes to be sent to the I/O Command
|
||||||
* write length register" */
|
* write length register" */
|
||||||
if_cs_write16(card, IF_CS_HOST_CMD_LEN, count);
|
if_cs_write16(card, IF_CS_CMD_LEN, count);
|
||||||
|
|
||||||
/* "write this to I/O Command port register as 16 bit writes */
|
/* "write this to I/O Command port register as 16 bit writes */
|
||||||
if (count)
|
if (count)
|
||||||
if_cs_write16_rep(card, IF_CS_HOST_CMD,
|
if_cs_write16_rep(card, IF_CS_CMD,
|
||||||
&fw->data[sent],
|
&fw->data[sent],
|
||||||
count >> 1);
|
count >> 1);
|
||||||
|
|
||||||
@ -635,15 +633,15 @@ static int if_cs_prog_real(struct if_cs_card *card)
|
|||||||
}
|
}
|
||||||
lbs_deb_cs("fw size %td\n", fw->size);
|
lbs_deb_cs("fw size %td\n", fw->size);
|
||||||
|
|
||||||
ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_SQ_READ_LOW,
|
ret = if_cs_poll_while_fw_download(card, IF_CS_SQ_READ_LOW,
|
||||||
IF_CS_CARD_SQ_HELPER_OK);
|
IF_CS_SQ_HELPER_OK);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
lbs_pr_err("helper firmware doesn't answer\n");
|
lbs_pr_err("helper firmware doesn't answer\n");
|
||||||
goto err_release;
|
goto err_release;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (sent = 0; sent < fw->size; sent += len) {
|
for (sent = 0; sent < fw->size; sent += len) {
|
||||||
len = if_cs_read16(card, IF_CS_CARD_SQ_READ_LOW);
|
len = if_cs_read16(card, IF_CS_SQ_READ_LOW);
|
||||||
if (len & 1) {
|
if (len & 1) {
|
||||||
retry++;
|
retry++;
|
||||||
lbs_pr_info("odd, need to retry this firmware block\n");
|
lbs_pr_info("odd, need to retry this firmware block\n");
|
||||||
@ -661,9 +659,9 @@ static int if_cs_prog_real(struct if_cs_card *card)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if_cs_write16(card, IF_CS_HOST_CMD_LEN, len);
|
if_cs_write16(card, IF_CS_CMD_LEN, len);
|
||||||
|
|
||||||
if_cs_write16_rep(card, IF_CS_HOST_CMD,
|
if_cs_write16_rep(card, IF_CS_CMD,
|
||||||
&fw->data[sent],
|
&fw->data[sent],
|
||||||
(len+1) >> 1);
|
(len+1) >> 1);
|
||||||
if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
|
if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
|
||||||
|
Reference in New Issue
Block a user