saa7164: fix sparse warnings
PATCH 1/1 saa7164: fix sparse warnings
Fix many sparse warnings:
drivers/media/pci/saa7164/saa7164-core.c:97:18: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:122:31: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:122:31: warning: incorrect type in initializer (different address spaces)drivers/media/pci/saa7164/saa7164-core.c:122:31: expected unsigned char [noderef] [usertype] <asn:2>*bufcpudrivers/media/pci/saa7164/saa7164-core.c:122:31: got unsigned char [usertype] *<noident>drivers/media/pci/saa7164/saa7164-core.c:282:44: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:286:38: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:286:35: warning: incorrect type in assignment (different address spaces)drivers/media/pci/saa7164/saa7164-core.c:286:35: expected unsigned char [noderef] [usertype] <asn:2>*pdrivers/media/pci/saa7164/saa7164-core.c:286:35: got unsigned char [usertype] *<noident>drivers/media/pci/saa7164/saa7164-core.c:352:44: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:527:53: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-core.c:129:30: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:133:38: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:133:72: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:134:35: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:287:61: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:288:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:289:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:290:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:291:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:292:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:293:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-core.c:294:65: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-fw.c:548:52: warning: incorrect type in argument 5 (different address spaces)drivers/media/pci/saa7164/saa7164-fw.c:548:52: expected unsigned char [usertype] *dstdrivers/media/pci/saa7164/saa7164-fw.c:548:52: got unsigned char [noderef] [usertype] <asn:2>*drivers/media/pci/saa7164/saa7164-fw.c:579:44: warning: incorrect type in argument 5 (different address spaces)drivers/media/pci/saa7164/saa7164-fw.c:579:44: expected unsigned char [usertype] *dstdrivers/media/pci/saa7164/saa7164-fw.c:579:44: got unsigned char [noderef] [usertype] <asn:2>*drivers/media/pci/saa7164/saa7164-fw.c:597:44: warning: incorrect type in argument 5 (different address spaces)drivers/media/pci/saa7164/saa7164-fw.c:597:44: expected unsigned char [usertype] *dstdrivers/media/pci/saa7164/saa7164-fw.c:597:44: got unsigned char [noderef] [usertype] <asn:2>*drivers/media/pci/saa7164/saa7164-bus.c:36:36: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-bus.c:41:36: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-bus.c:151:19: warning: incorrect type in assignment (different base types)drivers/media/pci/saa7164/saa7164-bus.c:151:19: expected unsigned short [unsigned] [usertype] sizedrivers/media/pci/saa7164/saa7164-bus.c:151:19: got restricted __le16 [usertype] <noident>drivers/media/pci/saa7164/saa7164-bus.c:152:22: warning: incorrect type in assignment (different base types)drivers/media/pci/saa7164/saa7164-bus.c:152:22: expected unsigned int [unsigned] [usertype] commanddrivers/media/pci/saa7164/saa7164-bus.c:152:22: got restricted __le32 [usertype] <noident>drivers/media/pci/saa7164/saa7164-bus.c:153:30: warning: incorrect type in assignment (different base types)drivers/media/pci/saa7164/saa7164-bus.c:153:30: expected unsigned short [unsigned] [usertype] controlselectordrivers/media/pci/saa7164/saa7164-bus.c:153:30: got restricted __le16 [usertype] <noident>drivers/media/pci/saa7164/saa7164-bus.c:172:20: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:173:20: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:206:28: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:287:9: warning: incorrect type in argument 1 (different base types)drivers/media/pci/saa7164/saa7164-bus.c:287:9: expected unsigned int [unsigned] valdrivers/media/pci/saa7164/saa7164-bus.c:287:9: got restricted __le32 [usertype] <noident>drivers/media/pci/saa7164/saa7164-bus.c:339:20: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:340:20: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:463:9: warning: incorrect type in argument 1 (different base types)drivers/media/pci/saa7164/saa7164-bus.c:463:9: expected unsigned int [unsigned] valdrivers/media/pci/saa7164/saa7164-bus.c:463:9: got restricted __le32 [usertype] <noident>drivers/media/pci/saa7164/saa7164-bus.c:466:21: warning: cast to restricted __le16 drivers/media/pci/saa7164/saa7164-bus.c:467:24: warning: cast to restricted __le32 drivers/media/pci/saa7164/saa7164-bus.c:468:32: warning: cast to restricted __le16 drivers/media/pci/saa7164/saa7164-buffer.c:122:18: warning: incorrect type in assignment (different address spaces)drivers/media/pci/saa7164/saa7164-buffer.c:122:18: expected unsigned long long [noderef] [usertype] <asn:2>*cpudrivers/media/pci/saa7164/saa7164-buffer.c:122:18: got void *drivers/media/pci/saa7164/saa7164-buffer.c:127:21: warning: incorrect type in assignment (different address spaces)drivers/media/pci/saa7164/saa7164-buffer.c:127:21: expected unsigned long long [noderef] [usertype] <asn:2>*pt_cpudrivers/media/pci/saa7164/saa7164-buffer.c:127:21: got void *drivers/media/pci/saa7164/saa7164-buffer.c:134:20: warning: cast removes address space of expression drivers/media/pci/saa7164/saa7164-buffer.c:156:63: warning: incorrect type in argument 3 (different address spaces)drivers/media/pci/saa7164/saa7164-buffer.c:156:63: expected void *vaddrdrivers/media/pci/saa7164/saa7164-buffer.c:156:63: got unsigned long long [noderef] [usertype] <asn:2>*cpudrivers/media/pci/saa7164/saa7164-buffer.c:179:57: warning: incorrect type in argument 3 (different address spaces)drivers/media/pci/saa7164/saa7164-buffer.c:179:57: expected void *vaddrdrivers/media/pci/saa7164/saa7164-buffer.c:179:57: got unsigned long long [noderef] [usertype] <asn:2>*cpudrivers/media/pci/saa7164/saa7164-buffer.c:180:56: warning: incorrect type in argument 3 (different address spaces)drivers/media/pci/saa7164/saa7164-buffer.c:180:56: expected void *vaddrdrivers/media/pci/saa7164/saa7164-buffer.c:180:56: got unsigned long long [noderef] [usertype] <asn:2>*pt_cpudrivers/media/pci/saa7164/saa7164-buffer.c:84:17: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-buffer.c:147:31: warning: dereference of noderef expression drivers/media/pci/saa7164/saa7164-buffer.c:148:17: warning: dereference of noderef expression
Most are caused by pointers marked as __iomem when they aren't or not marked as __iomem when they should.
Also note that readl/writel already do endian conversion, so there is no need to do it again.
saa7164_bus_set/get were a bit tricky: you have to make sure the msg endian conversion is done at the right time, and that the code isn't using fields that are still little endian instead of cpu-endianness.
The approach chosen is to convert just before writing to the ring buffer and to convert it back right after reading from the ring buffer.
--- drivers/media/pci/saa7164/saa7164-buffer.c | 4 +- drivers/media/pci/saa7164/saa7164-bus.c | 101 +++++++++++++++++------------ drivers/media/pci/saa7164/saa7164-core.c | 13 ++-- drivers/media/pci/saa7164/saa7164-fw.c | 6 +- drivers/media/pci/saa7164/saa7164-types.h | 4 +- drivers/media/pci/saa7164/saa7164.h | 4 +- 6 files changed, 74 insertions(+), 58 deletions(-)
drivers/media/pci/saa7164/saa7164-buffer.c +2 -2
@@ -130,9 +130,9 @@ struct saa7164_buffer *saa7164_buffer_alloc(struct saa7164_port *port, goto fail2;/* init the buffers to a known pattern, easier during debugging */ -memset_io (buf->cpu,0xff , buf->pci_size); +memset (buf->cpu,0xff , buf->pci_size); buf->crc =crc32 (0 , buf->cpu, buf->actual_size); -memset_io (buf->pt_cpu,0xff , buf->pt_size); +memset (buf->pt_cpu,0xff , buf->pt_size);dprintk (DBGLVL_BUF ,"%s() allocated buffer @ 0x%p (%d pageptrs)\n" , __func__, buf, params->numpagetables);
drivers/media/pci/saa7164/saa7164-bus.c +59 -42
216 lines not on this page · raw message
drivers/media/pci/saa7164/saa7164-core.c +6 -7
@@ -119,7 +119,7 @@ static void saa7164_ts_verifier(struct saa7164_buffer *buf)u32 i;u8 cc, a;u16 pid; -u8 __iomem *bufcpu = (u8 *)buf->cpu; +u8 *bufcpu = (u8 *)buf->cpu; port->sync_errors =0 ; port->v_cc_errors =0 ;
@@ -260,7 +260,7 @@ static void saa7164_work_enchandler_helper(struct saa7164_port *port, int bufnr)struct saa7164_user_buffer *ubuf =NULL ;struct list_head *c, *n;int i =0 ; -u8 __iomem *p; +u8 *p;mutex_lock (&port->dmaqueue_lock);list_for_each_safe (c, n, &port->dmaqueue.list) {
@@ -318,8 +318,7 @@ static void saa7164_work_enchandler_helper(struct saa7164_port *port, int bufnr)if (buf->actual_size <= ubuf->actual_size) { -memcpy_fromio (ubuf->data, buf->cpu, - ubuf->actual_size); +memcpy (ubuf->data, buf->cpu, ubuf->actual_size);if (crc_checking) {/* Throw a new checksum on the read buffer */
@@ -346,7 +345,7 @@ static void saa7164_work_enchandler_helper(struct saa7164_port *port, int bufnr)* with known bad data. We check for this data at a later point * in time. */ saa7164_buffer_zero_offsets (port, bufnr); -memset_io (buf->cpu,0xff , buf->pci_size); +memset (buf->cpu,0xff , buf->pci_size);if (crc_checking) {/* Throw yet aanother new checksum on the dma buffer */ buf->crc =crc32 (0 , buf->cpu, buf->actual_size);
@@ -1096,7 +1095,7 @@ static int saa7164_proc_show(struct seq_file *m, void *v)if (c ==0 )seq_printf (m," %04x:" , i); -seq_printf (m," %02x" , *(b->m_pdwSetRing + i)); +seq_printf (m," %02x" ,readb (b->m_pdwSetRing + i));if (++c ==16 ) {seq_printf (m,"\n" );
@@ -1111,7 +1110,7 @@ static int saa7164_proc_show(struct seq_file *m, void *v)if (c ==0 )seq_printf (m," %04x:" , i); -seq_printf (m," %02x" , *(b->m_pdwGetRing + i)); +seq_printf (m," %02x" ,readb (b->m_pdwGetRing + i));if (++c ==16 ) {seq_printf (m,"\n" );
drivers/media/pci/saa7164/saa7164-fw.c +3 -3
@@ -72,7 +72,7 @@ static int saa7164_dl_wait_clr(struct saa7164_dev *dev, u32 reg)/* TODO: move dlflags into dev-> and change to write/readl/b */ /* TODO: Excessive levels of debug */ static int saa7164_downloadimage (struct saa7164_dev *dev,u8 *src,u32 srcsize, -u32 dlflags,u8 *dst,u32 dstsize) +u32 dlflags,u8 __iomem *dst,u32 dstsize) {u32 reg, timeout, offset;u8 *srcbuf =NULL ;
@@ -136,7 +136,7 @@ static int saa7164_downloadimage(struct saa7164_dev *dev, u8 *src, u32 srcsize, srcsize -= dstsize, offset += dstsize) {dprintk (DBGLVL_FW ,"%s() memcpy %d\n" , __func__, dstsize); -memcpy (dst, srcbuf + offset, dstsize); +memcpy_toio (dst, srcbuf + offset, dstsize);/* Flag the data as ready */ saa7164_writel (drflag,1 );
@@ -154,7 +154,7 @@ static int saa7164_downloadimage(struct saa7164_dev *dev, u8 *src, u32 srcsize,dprintk (DBGLVL_FW ,"%s() memcpy(l) %d\n" , __func__, dstsize);/* Write last block to the device */ -memcpy (dst, srcbuf+offset, srcsize); +memcpy_toio (dst, srcbuf+offset, srcsize);/* Flag the data as ready */ saa7164_writel (drflag,1 );
drivers/media/pci/saa7164/saa7164-types.h +2 -2
@@ -78,9 +78,9 @@ enum tmBusType {struct tmComResBusInfo {enum tmBusType Type;u16 m_wMaxReqSize; -u8 *m_pdwSetRing; +u8 __iomem *m_pdwSetRing;u32 m_dwSizeSetRing; -u8 *m_pdwGetRing; +u8 __iomem *m_pdwGetRing;u32 m_dwSizeGetRing;u32 m_dwSetWritePos;u32 m_dwSetReadPos;
drivers/media/pci/saa7164/saa7164.h +2 -2
@@ -313,13 +313,13 @@ struct saa7164_buffer {/* A block of page align PCI memory */ u32 pci_size;/* PCI allocation size in bytes */ -u64 __iomem *cpu;/* Virtual address */ +u64 *cpu;/* Virtual address */ dma_addr_t dma;/* Physical address */ u32 crc;/* Checksum for the entire buffer data */ /* A page table that splits the block into a number of entries */ u32 pt_size;/* PCI allocation size in bytes */ -u64 __iomem *pt_cpu;/* Virtual address */ +u64 *pt_cpu;/* Virtual address */ dma_addr_t pt_dma;/* Physical address */ /* Encoder fops */
Signature · 1 line
2.1.1