Commit e1d908a7 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'hisi-drivers-for-5.8' of git://github.com/hisilicon/linux-hisi into arm/drivers

ARM64: hisi: SoC driver updates for 5.8

- Generate consistent behaviour for logic_pio by defining and using
  generic _inX() and _outX() in asm-generic/io.h which have per-arch
  overrideable barriers.

* tag 'hisi-drivers-for-5.8' of git://github.com/hisilicon/linux-hisi:
  logic_pio: Use _inX() and _outX()
  logic_pio: Improve macro argument name
  io: Provide _inX() and _outX()
parents 7b972f38 4acaa93e
Loading
Loading
Loading
Loading
+44 −20
Original line number Diff line number Diff line
@@ -448,17 +448,15 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer,
#define IO_SPACE_LIMIT 0xffff
#endif

#include <linux/logic_pio.h>

/*
 * {in,out}{b,w,l}() access little endian I/O. {in,out}{b,w,l}_p() can be
 * implemented on hardware that needs an additional delay for I/O accesses to
 * take effect.
 */

#ifndef inb
#define inb inb
static inline u8 inb(unsigned long addr)
#if !defined(inb) && !defined(_inb)
#define _inb _inb
static inline u16 _inb(unsigned long addr)
{
	u8 val;

@@ -469,9 +467,9 @@ static inline u8 inb(unsigned long addr)
}
#endif

#ifndef inw
#define inw inw
static inline u16 inw(unsigned long addr)
#if !defined(inw) && !defined(_inw)
#define _inw _inw
static inline u16 _inw(unsigned long addr)
{
	u16 val;

@@ -482,9 +480,9 @@ static inline u16 inw(unsigned long addr)
}
#endif

#ifndef inl
#define inl inl
static inline u32 inl(unsigned long addr)
#if !defined(inl) && !defined(_inl)
#define _inl _inl
static inline u16 _inl(unsigned long addr)
{
	u32 val;

@@ -495,9 +493,9 @@ static inline u32 inl(unsigned long addr)
}
#endif

#ifndef outb
#define outb outb
static inline void outb(u8 value, unsigned long addr)
#if !defined(outb) && !defined(_outb)
#define _outb _outb
static inline void _outb(u8 value, unsigned long addr)
{
	__io_pbw();
	__raw_writeb(value, PCI_IOBASE + addr);
@@ -505,9 +503,9 @@ static inline void outb(u8 value, unsigned long addr)
}
#endif

#ifndef outw
#define outw outw
static inline void outw(u16 value, unsigned long addr)
#if !defined(outw) && !defined(_outw)
#define _outw _outw
static inline void _outw(u16 value, unsigned long addr)
{
	__io_pbw();
	__raw_writew(cpu_to_le16(value), PCI_IOBASE + addr);
@@ -515,9 +513,9 @@ static inline void outw(u16 value, unsigned long addr)
}
#endif

#ifndef outl
#define outl outl
static inline void outl(u32 value, unsigned long addr)
#if !defined(outl) && !defined(_outl)
#define _outl _outl
static inline void _outl(u32 value, unsigned long addr)
{
	__io_pbw();
	__raw_writel(cpu_to_le32(value), PCI_IOBASE + addr);
@@ -525,6 +523,32 @@ static inline void outl(u32 value, unsigned long addr)
}
#endif

#include <linux/logic_pio.h>

#ifndef inb
#define inb _inb
#endif

#ifndef inw
#define inw _inw
#endif

#ifndef inl
#define inl _inl
#endif

#ifndef outb
#define outb _outb
#endif

#ifndef outw
#define outw _outw
#endif

#ifndef outl
#define outl _outl
#endif

#ifndef inb_p
#define inb_p inb_p
static inline u8 inb_p(unsigned long addr)
+11 −11
Original line number Diff line number Diff line
@@ -229,13 +229,13 @@ unsigned long logic_pio_trans_cpuaddr(resource_size_t addr)
}

#if defined(CONFIG_INDIRECT_PIO) && defined(PCI_IOBASE)
#define BUILD_LOGIC_IO(bw, type)					\
type logic_in##bw(unsigned long addr)					\
#define BUILD_LOGIC_IO(bwl, type)					\
type logic_in##bwl(unsigned long addr)					\
{									\
	type ret = (type)~0;						\
									\
	if (addr < MMIO_UPPER_LIMIT) {					\
		ret = read##bw(PCI_IOBASE + addr);			\
		ret = _in##bwl(addr);					\
	} else if (addr >= MMIO_UPPER_LIMIT && addr < IO_SPACE_LIMIT) { \
		struct logic_pio_hwaddr *entry = find_io_range(addr);	\
									\
@@ -248,10 +248,10 @@ type logic_in##bw(unsigned long addr) \
	return ret;							\
}									\
									\
void logic_out##bw(type value, unsigned long addr)			\
void logic_out##bwl(type value, unsigned long addr)			\
{									\
	if (addr < MMIO_UPPER_LIMIT) {					\
		write##bw(value, PCI_IOBASE + addr);			\
		_out##bwl(value, addr);				\
	} else if (addr >= MMIO_UPPER_LIMIT && addr < IO_SPACE_LIMIT) {	\
		struct logic_pio_hwaddr *entry = find_io_range(addr);	\
									\
@@ -263,11 +263,11 @@ void logic_out##bw(type value, unsigned long addr) \
	}								\
}									\
									\
void logic_ins##bw(unsigned long addr, void *buffer,			\
void logic_ins##bwl(unsigned long addr, void *buffer,			\
		    unsigned int count)					\
{									\
	if (addr < MMIO_UPPER_LIMIT) {					\
		reads##bw(PCI_IOBASE + addr, buffer, count);		\
		reads##bwl(PCI_IOBASE + addr, buffer, count);		\
	} else if (addr >= MMIO_UPPER_LIMIT && addr < IO_SPACE_LIMIT) {	\
		struct logic_pio_hwaddr *entry = find_io_range(addr);	\
									\
@@ -280,11 +280,11 @@ void logic_ins##bw(unsigned long addr, void *buffer, \
									\
}									\
									\
void logic_outs##bw(unsigned long addr, const void *buffer,		\
void logic_outs##bwl(unsigned long addr, const void *buffer,		\
		     unsigned int count)				\
{									\
	if (addr < MMIO_UPPER_LIMIT) {					\
		writes##bw(PCI_IOBASE + addr, buffer, count);		\
		writes##bwl(PCI_IOBASE + addr, buffer, count);		\
	} else if (addr >= MMIO_UPPER_LIMIT && addr < IO_SPACE_LIMIT) {	\
		struct logic_pio_hwaddr *entry = find_io_range(addr);	\
									\