[U-Boot] [PATCH 0/2] MIPS: add support to support usb stack for mips and minor cleanup

Patch prepares to support usb stack compiled for mips platform. Also fix fdt usage api's from bootm.
Govindraj Raja (2): MIPS: add clrbits and setbits and add phy_to_bus support. MIPS: fix syntax for fdt_chosen/initrd.
arch/mips/include/asm/io.h | 71 +++++++++++++++++++++++++++++++++++++++++++++- arch/mips/lib/bootm.c | 4 +-- 2 files changed, 72 insertions(+), 3 deletions(-)

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) { #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 + + #endif /* _ASM_IO_H */

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

From: Govindraj Raja Govindraj.Raja@imgtec.com
The syntax for the fdt_chosen/initrd functions seem to deprecated in usage from MIPS bootm implementation.
Third parameter is no more used in these api's Refer to : include/fdt_support.h
Signed-off-by: Govindraj Raja govindraj.raja@imgtec.com --- arch/mips/lib/bootm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index e289799..9c647aa 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -95,10 +95,10 @@ static void boot_setup_fdt(bootm_headers_t *images)
debug("## setup FDT\n");
- fdt_chosen(images->ft_addr, 1); + fdt_chosen(images->ft_addr); fdt_fixup_memory_banks(images->ft_addr, &mem_start, &mem_size, 1); fdt_fixup_ethernet(images->ft_addr); - fdt_initrd(images->ft_addr, images->initrd_start, images->initrd_end, 1); + fdt_initrd(images->ft_addr, images->initrd_start, images->initrd_end);
#if defined(CONFIG_OF_BOARD_SETUP) ft_board_setup(images->ft_addr, gd->bd);

2015-08-19 20:19 GMT+02:00 Govindraj Raja govindraj.raja@imgtec.com:
From: Govindraj Raja Govindraj.Raja@imgtec.com
The syntax for the fdt_chosen/initrd functions seem to deprecated in usage from MIPS bootm implementation.
Third parameter is no more used in these api's Refer to : include/fdt_support.h
Signed-off-by: Govindraj Raja govindraj.raja@imgtec.com
arch/mips/lib/bootm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
applied to u-boot-mips/next, thanks
participants (2)
-
Daniel Schwierzeck
-
Govindraj Raja