mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
xen/arm: Add helpers ioreadl/iowritel
Signed-off-by: Julien Grall <julien.grall@linaro.org> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
4e67146864
commit
11eedee7cc
3 files changed
+92
No files matched your search
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Based on linux arch/arm/include/asm/io.h
|
||||
*
|
||||
* Copyright (C) 1996-2000 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Modifications:
|
||||
* 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both
|
||||
* constant addresses and variable addresses.
|
||||
* 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture
|
||||
* specific IO header files.
|
||||
* 27-Mar-1999 PJB Second parameter of memcpy_toio is const..
|
||||
* 04-Apr-1999 PJB Added check_signature.
|
||||
* 12-Dec-1999 RMK More cleanups
|
||||
* 18-Jun-2000 RMK Removed virt_to_* and friends definitions
|
||||
* 05-Oct-2004 BJD Moved memory string functions to use void __iomem
|
||||
*/
|
||||
#ifndef _ARM_ARM32_IO_H
|
||||
#define _ARM_ARM32_IO_H
|
||||
|
||||
#include <asm/system.h>
|
||||
|
||||
static inline uint32_t ioreadl(const volatile void __iomem *addr)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
asm volatile("ldr %1, %0"
|
||||
: "+Qo" (*(volatile uint32_t __force *)addr),
|
||||
"=r" (val));
|
||||
dsb();
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void iowritel(const volatile void __iomem *addr, uint32_t val)
|
||||
{
|
||||
dsb();
|
||||
asm volatile("str %1, %0"
|
||||
: "+Qo" (*(volatile uint32_t __force *)addr)
|
||||
: "r" (val));
|
||||
}
|
||||
|
||||
#endif /* _ARM_ARM32_IO_H */
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Based on linux arch/arm64/include/asm/io.h
|
||||
*
|
||||
* Copyright (C) 1996-2000 Russell King
|
||||
* Copyright (C) 2012 ARM Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef _ARM_ARM64_IO_H
|
||||
#define _ARM_ARM64_IO_H
|
||||
|
||||
static inline uint32_t ioreadl(const volatile void __iomem *addr)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
asm volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr));
|
||||
dsb();
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void iowritel(const volatile void __iomem *addr, uint32_t val)
|
||||
{
|
||||
dsb();
|
||||
asm volatile("str %w0, [%1]" : : "r" (val), "r" (addr));
|
||||
}
|
||||
|
||||
#endif /* _ARM_ARM64_IO_H */
|
||||
@@ -6,6 +6,14 @@
|
||||
#include <asm/page.h>
|
||||
#include <public/xen.h>
|
||||
|
||||
#if defined(CONFIG_ARM_32)
|
||||
# include <asm/arm32/io.h>
|
||||
#elif defined(CONFIG_ARM_64)
|
||||
# include <asm/arm64/io.h>
|
||||
#else
|
||||
# error "unknown ARM variant"
|
||||
#endif
|
||||
|
||||
/* Align Xen to a 2 MiB boundary. */
|
||||
#define XEN_PADDR_ALIGN (1 << 21)
|
||||
|
||||
|
||||