Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1675954 > unrolled thread

[PATCH v1] x86/io: Include asm-generic/io.h to architectural code

Started byAndy Shevchenko <andriy.shevchenko@linux.intel.com>
First post2017-06-27 18:10 +0200
Last post2017-06-27 23:00 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v1] x86/io: Include asm-generic/io.h to architectural code Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-06-27 18:10 +0200
    Re: [PATCH v1] x86/io: Include asm-generic/io.h to architectural code Wolfram Sang <wsa@the-dreams.de> - 2017-06-27 22:10 +0200
      Re: [PATCH v1] x86/io: Include asm-generic/io.h to architectural code Andy Shevchenko <andy.shevchenko@gmail.com> - 2017-06-27 23:00 +0200

#1675954 — [PATCH v1] x86/io: Include asm-generic/io.h to architectural code

FromAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Date2017-06-27 18:10 +0200
Subject[PATCH v1] x86/io: Include asm-generic/io.h to architectural code
Message-ID<tX1dV-2UD-39@gated-at.bofh.it>
asm-generic/io.h defines few helpers which would be useful in the drivers,
such as writesb() and readsb().

Include it to the asm/io.h in architectural folder.

Note, to apply above we need to define macros for functions which do not have
them yet defined, such as readb() or writeb(). This is done here as well.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 arch/x86/include/asm/io.h | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
index 7afb0e2f07f4..abb3090a5822 100644
--- a/arch/x86/include/asm/io.h
+++ b/arch/x86/include/asm/io.h
@@ -69,6 +69,9 @@ build_mmio_write(__writeb, "b", unsigned char, "q", )
 build_mmio_write(__writew, "w", unsigned short, "r", )
 build_mmio_write(__writel, "l", unsigned int, "r", )
 
+#define readb readb
+#define readw readw
+#define readl readl
 #define readb_relaxed(a) __readb(a)
 #define readw_relaxed(a) __readw(a)
 #define readl_relaxed(a) __readl(a)
@@ -76,6 +79,9 @@ build_mmio_write(__writel, "l", unsigned int, "r", )
 #define __raw_readw __readw
 #define __raw_readl __readl
 
+#define writeb writeb
+#define writew writew
+#define writel writel
 #define writeb_relaxed(v, a) __writeb(v, a)
 #define writew_relaxed(v, a) __writew(v, a)
 #define writel_relaxed(v, a) __writel(v, a)
@@ -119,6 +125,7 @@ static inline phys_addr_t virt_to_phys(volatile void *address)
 {
 	return __pa(address);
 }
+#define virt_to_phys virt_to_phys
 
 /**
  *	phys_to_virt	-	map physical address to virtual
@@ -137,6 +144,7 @@ static inline void *phys_to_virt(phys_addr_t address)
 {
 	return __va(address);
 }
+#define phys_to_virt phys_to_virt
 
 /*
  * Change "struct page" to physical address.
@@ -220,6 +228,7 @@ memset_io(volatile void __iomem *addr, unsigned char val, size_t count)
 {
 	memset((void __force *)addr, val, count);
 }
+#define memset_io(dst,c,count) memset_io(dst,c,count)
 
 /**
  * memcpy_fromio	Copy a block of data from I/O memory
@@ -234,6 +243,7 @@ memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count)
 {
 	memcpy(dst, (const void __force *)src, count);
 }
+#define memcpy_fromio(to,from,count) memcpy_fromio(to,from,count)
 
 /**
  * memcpy_toio		Copy a block of data into I/O memory
@@ -248,6 +258,7 @@ memcpy_toio(volatile void __iomem *dst, const void *src, size_t count)
 {
 	memcpy((void __force *)dst, src, count);
 }
+#define memcpy_toio(to,from,count) memcpy_toio(to,from,count)
 
 /*
  * ISA space is 'always mapped' on a typical x86 system, no need to
@@ -341,9 +352,32 @@ BUILDIO(b, b, char)
 BUILDIO(w, w, short)
 BUILDIO(l, , int)
 
+#define inb inb
+#define inw inw
+#define inl inl
+#define inb_p inb_p
+#define inw_p inw_p
+#define inl_p inl_p
+#define insb insb
+#define insw insw
+#define insl insl
+
+#define outb outb
+#define outw outw
+#define outl outl
+#define outb_p outb_p
+#define outw_p outw_p
+#define outl_p outl_p
+#define outsb outsb
+#define outsw outsw
+#define outsl outsl
+
 extern void *xlate_dev_mem_ptr(phys_addr_t phys);
 extern void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
 
+#define xlate_dev_mem_ptr xlate_dev_mem_ptr
+#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr
+
 extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
 				enum page_cache_mode pcm);
 extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size);
@@ -365,6 +399,8 @@ extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
 
 #define IO_SPACE_LIMIT 0xffff
 
+#include <asm-generic/io.h>
+
 #ifdef CONFIG_MTRR
 extern int __must_check arch_phys_wc_index(int handle);
 #define arch_phys_wc_index arch_phys_wc_index
-- 
2.11.0

[toc] | [next] | [standalone]


#1676140

FromWolfram Sang <wsa@the-dreams.de>
Date2017-06-27 22:10 +0200
Message-ID<tX4Y9-5uo-9@gated-at.bofh.it>
In reply to#1675954

[Multipart message — attachments visible in raw view] — view raw

On Tue, Jun 27, 2017 at 07:06:41PM +0300, Andy Shevchenko wrote:
> asm-generic/io.h defines few helpers which would be useful in the drivers,
> such as writesb() and readsb().
> 
> Include it to the asm/io.h in architectural folder.
> 
> Note, to apply above we need to define macros for functions which do not have
> them yet defined, such as readb() or writeb(). This is done here as well.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Yes, we had to drop COMPILE_TEST from drivers because of readsb/writesb
not being available. Would be nice to have that fixed.

Acked-by: Wolfram Sang <wsa@the-dreams.de>

No thorough review, though. Adding Shawn to CC who also hit this issue
recently.

> ---
>  arch/x86/include/asm/io.h | 36 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
> index 7afb0e2f07f4..abb3090a5822 100644
> --- a/arch/x86/include/asm/io.h
> +++ b/arch/x86/include/asm/io.h
> @@ -69,6 +69,9 @@ build_mmio_write(__writeb, "b", unsigned char, "q", )
>  build_mmio_write(__writew, "w", unsigned short, "r", )
>  build_mmio_write(__writel, "l", unsigned int, "r", )
>  
> +#define readb readb
> +#define readw readw
> +#define readl readl
>  #define readb_relaxed(a) __readb(a)
>  #define readw_relaxed(a) __readw(a)
>  #define readl_relaxed(a) __readl(a)
> @@ -76,6 +79,9 @@ build_mmio_write(__writel, "l", unsigned int, "r", )
>  #define __raw_readw __readw
>  #define __raw_readl __readl
>  
> +#define writeb writeb
> +#define writew writew
> +#define writel writel
>  #define writeb_relaxed(v, a) __writeb(v, a)
>  #define writew_relaxed(v, a) __writew(v, a)
>  #define writel_relaxed(v, a) __writel(v, a)
> @@ -119,6 +125,7 @@ static inline phys_addr_t virt_to_phys(volatile void *address)
>  {
>  	return __pa(address);
>  }
> +#define virt_to_phys virt_to_phys
>  
>  /**
>   *	phys_to_virt	-	map physical address to virtual
> @@ -137,6 +144,7 @@ static inline void *phys_to_virt(phys_addr_t address)
>  {
>  	return __va(address);
>  }
> +#define phys_to_virt phys_to_virt
>  
>  /*
>   * Change "struct page" to physical address.
> @@ -220,6 +228,7 @@ memset_io(volatile void __iomem *addr, unsigned char val, size_t count)
>  {
>  	memset((void __force *)addr, val, count);
>  }
> +#define memset_io(dst,c,count) memset_io(dst,c,count)
>  
>  /**
>   * memcpy_fromio	Copy a block of data from I/O memory
> @@ -234,6 +243,7 @@ memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count)
>  {
>  	memcpy(dst, (const void __force *)src, count);
>  }
> +#define memcpy_fromio(to,from,count) memcpy_fromio(to,from,count)
>  
>  /**
>   * memcpy_toio		Copy a block of data into I/O memory
> @@ -248,6 +258,7 @@ memcpy_toio(volatile void __iomem *dst, const void *src, size_t count)
>  {
>  	memcpy((void __force *)dst, src, count);
>  }
> +#define memcpy_toio(to,from,count) memcpy_toio(to,from,count)
>  
>  /*
>   * ISA space is 'always mapped' on a typical x86 system, no need to
> @@ -341,9 +352,32 @@ BUILDIO(b, b, char)
>  BUILDIO(w, w, short)
>  BUILDIO(l, , int)
>  
> +#define inb inb
> +#define inw inw
> +#define inl inl
> +#define inb_p inb_p
> +#define inw_p inw_p
> +#define inl_p inl_p
> +#define insb insb
> +#define insw insw
> +#define insl insl
> +
> +#define outb outb
> +#define outw outw
> +#define outl outl
> +#define outb_p outb_p
> +#define outw_p outw_p
> +#define outl_p outl_p
> +#define outsb outsb
> +#define outsw outsw
> +#define outsl outsl
> +
>  extern void *xlate_dev_mem_ptr(phys_addr_t phys);
>  extern void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
>  
> +#define xlate_dev_mem_ptr xlate_dev_mem_ptr
> +#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr
> +
>  extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
>  				enum page_cache_mode pcm);
>  extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size);
> @@ -365,6 +399,8 @@ extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
>  
>  #define IO_SPACE_LIMIT 0xffff
>  
> +#include <asm-generic/io.h>
> +
>  #ifdef CONFIG_MTRR
>  extern int __must_check arch_phys_wc_index(int handle);
>  #define arch_phys_wc_index arch_phys_wc_index
> -- 
> 2.11.0
> 

[toc] | [prev] | [next] | [standalone]


#1676178

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2017-06-27 23:00 +0200
Message-ID<tX5Kz-5OX-31@gated-at.bofh.it>
In reply to#1676140
On Tue, Jun 27, 2017 at 11:06 PM, Wolfram Sang <wsa@the-dreams.de> wrote:
> On Tue, Jun 27, 2017 at 07:06:41PM +0300, Andy Shevchenko wrote:
>> asm-generic/io.h defines few helpers which would be useful in the drivers,
>> such as writesb() and readsb().
>>
>> Include it to the asm/io.h in architectural folder.
>>
>> Note, to apply above we need to define macros for functions which do not have
>> them yet defined, such as readb() or writeb(). This is done here as well.
>>
>> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>
> Yes, we had to drop COMPILE_TEST from drivers because of readsb/writesb
> not being available. Would be nice to have that fixed.
>
> Acked-by: Wolfram Sang <wsa@the-dreams.de>

Thanks!
I need to respin to make it more consistent (some macros should have
() component, some otherwise).

So, I would gather the comments and will send v2.

>
> No thorough review, though. Adding Shawn to CC who also hit this issue
> recently.
>
>> ---
>>  arch/x86/include/asm/io.h | 36 ++++++++++++++++++++++++++++++++++++
>>  1 file changed, 36 insertions(+)
>>
>> diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
>> index 7afb0e2f07f4..abb3090a5822 100644
>> --- a/arch/x86/include/asm/io.h
>> +++ b/arch/x86/include/asm/io.h
>> @@ -69,6 +69,9 @@ build_mmio_write(__writeb, "b", unsigned char, "q", )
>>  build_mmio_write(__writew, "w", unsigned short, "r", )
>>  build_mmio_write(__writel, "l", unsigned int, "r", )
>>
>> +#define readb readb
>> +#define readw readw
>> +#define readl readl
>>  #define readb_relaxed(a) __readb(a)
>>  #define readw_relaxed(a) __readw(a)
>>  #define readl_relaxed(a) __readl(a)
>> @@ -76,6 +79,9 @@ build_mmio_write(__writel, "l", unsigned int, "r", )
>>  #define __raw_readw __readw
>>  #define __raw_readl __readl
>>
>> +#define writeb writeb
>> +#define writew writew
>> +#define writel writel
>>  #define writeb_relaxed(v, a) __writeb(v, a)
>>  #define writew_relaxed(v, a) __writew(v, a)
>>  #define writel_relaxed(v, a) __writel(v, a)
>> @@ -119,6 +125,7 @@ static inline phys_addr_t virt_to_phys(volatile void *address)
>>  {
>>       return __pa(address);
>>  }
>> +#define virt_to_phys virt_to_phys
>>
>>  /**
>>   *   phys_to_virt    -       map physical address to virtual
>> @@ -137,6 +144,7 @@ static inline void *phys_to_virt(phys_addr_t address)
>>  {
>>       return __va(address);
>>  }
>> +#define phys_to_virt phys_to_virt
>>
>>  /*
>>   * Change "struct page" to physical address.
>> @@ -220,6 +228,7 @@ memset_io(volatile void __iomem *addr, unsigned char val, size_t count)
>>  {
>>       memset((void __force *)addr, val, count);
>>  }
>> +#define memset_io(dst,c,count) memset_io(dst,c,count)
>>
>>  /**
>>   * memcpy_fromio     Copy a block of data from I/O memory
>> @@ -234,6 +243,7 @@ memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count)
>>  {
>>       memcpy(dst, (const void __force *)src, count);
>>  }
>> +#define memcpy_fromio(to,from,count) memcpy_fromio(to,from,count)
>>
>>  /**
>>   * memcpy_toio               Copy a block of data into I/O memory
>> @@ -248,6 +258,7 @@ memcpy_toio(volatile void __iomem *dst, const void *src, size_t count)
>>  {
>>       memcpy((void __force *)dst, src, count);
>>  }
>> +#define memcpy_toio(to,from,count) memcpy_toio(to,from,count)
>>
>>  /*
>>   * ISA space is 'always mapped' on a typical x86 system, no need to
>> @@ -341,9 +352,32 @@ BUILDIO(b, b, char)
>>  BUILDIO(w, w, short)
>>  BUILDIO(l, , int)
>>
>> +#define inb inb
>> +#define inw inw
>> +#define inl inl
>> +#define inb_p inb_p
>> +#define inw_p inw_p
>> +#define inl_p inl_p
>> +#define insb insb
>> +#define insw insw
>> +#define insl insl
>> +
>> +#define outb outb
>> +#define outw outw
>> +#define outl outl
>> +#define outb_p outb_p
>> +#define outw_p outw_p
>> +#define outl_p outl_p
>> +#define outsb outsb
>> +#define outsw outsw
>> +#define outsl outsl
>> +
>>  extern void *xlate_dev_mem_ptr(phys_addr_t phys);
>>  extern void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
>>
>> +#define xlate_dev_mem_ptr xlate_dev_mem_ptr
>> +#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr
>> +
>>  extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
>>                               enum page_cache_mode pcm);
>>  extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size);
>> @@ -365,6 +399,8 @@ extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
>>
>>  #define IO_SPACE_LIMIT 0xffff
>>
>> +#include <asm-generic/io.h>
>> +
>>  #ifdef CONFIG_MTRR
>>  extern int __must_check arch_phys_wc_index(int handle);
>>  #define arch_phys_wc_index arch_phys_wc_index
>> --
>> 2.11.0
>>



-- 
With Best Regards,
Andy Shevchenko

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web