Patchwork [U-Boot] e1000: fix compile warning

login
register
mail settings
Submitter Wolfgang Denk
Date Nov. 22, 2010, 8:48 a.m.
Message ID <1290415725-12361-1-git-send-email-wd@denx.de>
Download mbox | patch
Permalink /patch/72511/
State Accepted
Commit 8aa858cbc0c85738961a2ac4a98c188582c29ff4
Headers show

Comments

Wolfgang Denk - Nov. 22, 2010, 8:48 a.m.
Get rid of compiler warning:
e1000.c: In function 'e1000_transmit':
e1000.c:5028: warning: passing argument 1 of 'virt_to_phys' discards qualifiers from pointer target type

Signed-off-by: Wolfgang Denk <wd@denx.de>
---
 drivers/net/e1000.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
Albert ARIBAUD - Nov. 22, 2010, 9:40 a.m.
Le 22/11/2010 09:48, Wolfgang Denk a écrit :

> -	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet));
> +	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet));

Wouldn't type-casting packet right here work? e.g.:

txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet)));

Amicalement,
Wolfgang Denk - Nov. 22, 2010, 10:07 a.m.
Dear Albert ARIBAUD,

In message <4CEA3A7B.1070602@free.fr> you wrote:
> Le 22/11/2010 09:48, Wolfgang Denk a écrit :
> 
> > -	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet));
> > +	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet));
> 
> Wouldn't type-casting packet right here work? e.g.:
> 
> txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet)));

No, it doesn't. The virt_to_bus() macro already has such a
cast internally, but it doesn't work here.

Best regards,

Wolfgang Denk
Albert ARIBAUD - Nov. 22, 2010, 11:03 a.m.
Le 22/11/2010 11:07, Wolfgang Denk a écrit :
> Dear Albert ARIBAUD,
>
> In message<4CEA3A7B.1070602@free.fr>  you wrote:
>> Le 22/11/2010 09:48, Wolfgang Denk a écrit :
>>
>>> -	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet));
>>> +	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet));
>>
>> Wouldn't type-casting packet right here work? e.g.:
>>
>> txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, ((void*)packet)));
>
> No, it doesn't. The virt_to_bus() macro already has such a
> cast internally, but it doesn't work here.
>
> Best regards,
>
> Wolfgang Denk

Hmm, then maybe it is not the type that causes the warning, but a 
qualifier such as 'const' ?

Amicalement,
Wolfgang Denk - Nov. 22, 2010, 12:02 p.m.
Dear Albert ARIBAUD,

In message <4CEA4E1C.2050607@free.fr> you wrote:
>
> > No, it doesn't. The virt_to_bus() macro already has such a
> > cast internally, but it doesn't work here.
...
> Hmm, then maybe it is not the type that causes the warning, but a 
> qualifier such as 'const' ?

It's the 'volatile' attribute. Hence my name "nv_packet". Using a
non-volatile pointer to compute the virtual address seems to be save.

Best regards,

Wolfgang Denk

Patch

diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
index 60b04c2..5f390bd 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -5018,6 +5018,7 @@  TRANSMIT - Transmit a frame
 static int
 e1000_transmit(struct eth_device *nic, volatile void *packet, int length)
 {
+	void * nv_packet = (void *)packet;
 	struct e1000_hw *hw = nic->priv;
 	struct e1000_tx_desc *txp;
 	int i = 0;
@@ -5025,7 +5026,7 @@  e1000_transmit(struct eth_device *nic, volatile void *packet, int length)
 	txp = tx_base + tx_tail;
 	tx_tail = (tx_tail + 1) % 8;
 
-	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, packet));
+	txp->buffer_addr = cpu_to_le64(virt_to_bus(hw->pdev, nv_packet));
 	txp->lower.data = cpu_to_le32(hw->txd_cmd | length);
 	txp->upper.data = 0;
 	E1000_WRITE_REG(hw, TDT, tx_tail);