Skip to content

Commit

Permalink
lib/iomap_copy.c: add __ioread32_copy()
Browse files Browse the repository at this point in the history
Some drivers need to read data out of iomem areas 32-bits at a time.
Add an API to do this.

Signed-off-by: Stephen Boyd <[email protected]>
Cc: Bjorn Andersson <[email protected]>
Cc: <[email protected]>
Cc: David Howells <[email protected]>
Cc: Hauke Mehrtens <[email protected]>
Cc: Paul Walmsley <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
bebarino authored and torvalds committed Jan 21, 2016
1 parent ef5c16b commit a9aec58
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/linux/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ struct device;
struct resource;

__visible void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
void __ioread32_copy(void *to, const void __iomem *from, size_t count);
void __iowrite64_copy(void __iomem *to, const void *from, size_t count);

#ifdef CONFIG_MMU
Expand Down
21 changes: 21 additions & 0 deletions lib/iomap_copy.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,27 @@ void __attribute__((weak)) __iowrite32_copy(void __iomem *to,
}
EXPORT_SYMBOL_GPL(__iowrite32_copy);

/**
* __ioread32_copy - copy data from MMIO space, in 32-bit units
* @to: destination (must be 32-bit aligned)
* @from: source, in MMIO space (must be 32-bit aligned)
* @count: number of 32-bit quantities to copy
*
* Copy data from MMIO space to kernel space, in units of 32 bits at a
* time. Order of access is not guaranteed, nor is a memory barrier
* performed afterwards.
*/
void __ioread32_copy(void *to, const void __iomem *from, size_t count)
{
u32 *dst = to;
const u32 __iomem *src = from;
const u32 __iomem *end = src + count;

while (src < end)
*dst++ = __raw_readl(src++);
}
EXPORT_SYMBOL_GPL(__ioread32_copy);

/**
* __iowrite64_copy - copy data to MMIO space, in 64-bit or 32-bit units
* @to: destination, in MMIO space (must be 64-bit aligned)
Expand Down

0 comments on commit a9aec58

Please sign in to comment.