
2015-08-19 20:19 GMT+02:00 Govindraj Raja govindraj.raja@imgtec.com:
From: Govindraj Raja Govindraj.Raja@imgtec.com
usb stack utilizes the clr/set_bits macros also usb stack needs phy_to_bus/bus_to_phys functions. Thus adding these macro and functions for mips platform.
This makes usb stack usable with mips platform. Also fixes a checkpatch warning with virt_to_phys forward declaration.
Signed-off-by: Govindraj Raja govindraj.raja@imgtec.com
arch/mips/include/asm/io.h | 71 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-)
diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h index a7ab087..8dc521c 100644 --- a/arch/mips/include/asm/io.h +++ b/arch/mips/include/asm/io.h @@ -117,7 +117,7 @@ static inline void set_io_port_base(unsigned long base)
- Change virtual addresses to physical addresses and vv.
- These are trivial on the 1:1 Linux/MIPS mapping
*/ -static inline phys_addr_t virt_to_phys(volatile void * address) +static inline phys_addr_t virt_to_phys(volatile void *address)
please do not make cosmetic fixes and code changes in the same commit. Because this file is imported from Linux kernel, you could ignore this style error until we do a resync with the current kernel sources.
{ #ifndef CONFIG_64BIT return CPHYSADDR(address); @@ -504,4 +504,73 @@ static inline void unmap_physmem(void *vaddr, unsigned long flags)
}
+#define out_arch(type, endian, a, v) __raw_write##type(cpu_to_##endian(v), a) +#define in_arch(type, endian, a) endian##_to_cpu(__raw_read##type(a))
+#define out_le32(a, v) out_arch(l, le32, a, v) +#define out_le16(a, v) out_arch(w, le16, a, v)
+#define in_le32(a) in_arch(l, le32, a) +#define in_le16(a) in_arch(w, le16, a)
+#define out_be32(a, v) out_arch(l, be32, a, v) +#define out_be16(a, v) out_arch(w, be16, a, v)
+#define in_be32(a) in_arch(l, be32, a) +#define in_be16(a) in_arch(w, be16, a)
+#define out_8(a, v) __raw_writeb(v, a) +#define in_8(a) __raw_readb(a)
+/*
- Clear and set bits in one shot. These macros can be used to clear and
- set multiple bits in a register using a single call. These macros can
- also be used to set a multiple-bit bit pattern using a mask, by
- specifying the mask in the 'clear' parameter and the new bit pattern
- in the 'set' parameter.
- */
+#define clrbits(type, addr, clear) \
out_##type((addr), in_##type(addr) & ~(clear))
+#define setbits(type, addr, set) \
out_##type((addr), in_##type(addr) | (set))
+#define clrsetbits(type, addr, clear, set) \
out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
+#define clrbits_be32(addr, clear) clrbits(be32, addr, clear) +#define setbits_be32(addr, set) setbits(be32, addr, set) +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
+#define clrbits_le32(addr, clear) clrbits(le32, addr, clear) +#define setbits_le32(addr, set) setbits(le32, addr, set) +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
+#define clrbits_be16(addr, clear) clrbits(be16, addr, clear) +#define setbits_be16(addr, set) setbits(be16, addr, set) +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
+#define clrbits_le16(addr, clear) clrbits(le16, addr, clear) +#define setbits_le16(addr, set) setbits(le16, addr, set) +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
+#define clrbits_8(addr, clear) clrbits(8, addr, clear) +#define setbits_8(addr, set) setbits(8, addr, set)
+#ifdef CONFIG_PHYS_TO_BUS
+extern inline unsigned long phys_to_bus(unsigned long phys) +{
return (unsigned long)virt_to_phys((void *)phys);
+}
+extern inline unsigned long bus_to_phys(unsigned long bus) +{
return (unsigned long)phys_to_virt(bus);
+}
+#endif
could you move those two functions to arch/mips/lib/io.c and mark it with __weak? Funtions declared with "extern inline" seems to have issues with gcc-5.x. Also marking them with __weak would one allow to create SoC specific implementations if needed.
#endif /* _ASM_IO_H */
1.9.1