[U-Boot,v2,8/9] arm: zynq: Add support for EMIT_WRITE operation

Message ID 5370a974511755d5181078af4a3e67ed9d7d5b11.1510668929.git.michal.simek@xilinx.com
State New
Delegated to: Michal Simek
Headers show
Series
  • arm: zynq: ps7* consolidation
Related show

Commit Message

Michal Simek Nov. 14, 2017, 2:15 p.m.
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>
---

Changes in v2:
- Add own opcode for write operation
- Change commit message (was Convert EMIT_WRITE to EMIT_MASKWRITE) -
  requested by Mike

 arch/arm/mach-zynq/include/mach/ps7_init_gpl.h | 2 ++
 arch/arm/mach-zynq/ps7_spl_init.c              | 6 ++++++
 2 files changed, 8 insertions(+)

Patch

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 fa5d486afb0c..0af4165a3ef1 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 069827880d10..6dc4e0364d8b 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];