summaryrefslogtreecommitdiff
path: root/arch/arm/mach-zynq
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2017-11-10 11:03:47 +0100
committerMichal Simek <michal.simek@xilinx.com>2017-11-29 08:02:39 +0100
commit11ea6f556c3315a297f81fb498dd4a0c57202a91 (patch)
treecfd2a4b9c57969ca60e917041930a379481f66f4 /arch/arm/mach-zynq
parentf29074803c0855c323af2c29865d924690cb8bb0 (diff)
downloadu-boot-11ea6f556c3315a297f81fb498dd4a0c57202a91.tar.gz
arm: zynq: Add support for EMIT_WRITE operation
Add proper support for EMIT_WRITE operation which is write only. Do not use EMIT_MASKWRITE which is read-modify-write. Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Diffstat (limited to 'arch/arm/mach-zynq')
-rw-r--r--arch/arm/mach-zynq/include/mach/ps7_init_gpl.h2
-rw-r--r--arch/arm/mach-zynq/ps7_spl_init.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mach-zynq/include/mach/ps7_init_gpl.h b/arch/arm/mach-zynq/include/mach/ps7_init_gpl.h
index fa5d486afb..0af4165a3e 100644
--- a/arch/arm/mach-zynq/include/mach/ps7_init_gpl.h
+++ b/arch/arm/mach-zynq/include/mach/ps7_init_gpl.h
@@ -13,6 +13,7 @@
#define OPCODE_MASKWRITE 0U
#define OPCODE_MASKPOLL 1U
#define OPCODE_MASKDELAY 2U
+#define OPCODE_WRITE 3U
#define OPCODE_ADDRESS_MASK (~3U)
/* Sentinel */
@@ -21,6 +22,7 @@
#define EMIT_MASKWRITE(addr, mask, val) OPCODE_MASKWRITE | addr, mask, val
#define EMIT_MASKPOLL(addr, mask) OPCODE_MASKPOLL | addr, mask
#define EMIT_MASKDELAY(addr, mask) OPCODE_MASKDELAY | addr, mask
+#define EMIT_WRITE(addr, val) OPCODE_WRITE | addr, val
/* Returns codes of ps7_init* */
#define PS7_INIT_SUCCESS (0)
diff --git a/arch/arm/mach-zynq/ps7_spl_init.c b/arch/arm/mach-zynq/ps7_spl_init.c
index 069827880d..6dc4e0364d 100644
--- a/arch/arm/mach-zynq/ps7_spl_init.c
+++ b/arch/arm/mach-zynq/ps7_spl_init.c
@@ -108,6 +108,12 @@ int __weak ps7_config(unsigned long *ps7_config_init)
iowrite((ioread(addr) & ~mask) | (val & mask), addr);
break;
+ case OPCODE_WRITE:
+ numargs = 2;
+ val = ptr[1];
+ iowrite(val, addr);
+ break;
+
case OPCODE_MASKPOLL:
numargs = 2;
mask = ptr[1];