diff options
Diffstat (limited to 'board/topic/zynq/ps7_init_common.c')
-rw-r--r-- | board/topic/zynq/ps7_init_common.c | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/board/topic/zynq/ps7_init_common.c b/board/topic/zynq/ps7_init_common.c deleted file mode 100644 index b1d45c242f8..00000000000 --- a/board/topic/zynq/ps7_init_common.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * (c) Copyright 2010-2014 Xilinx, Inc. All rights reserved. - * (c) Copyright 2016 Topic Embedded Products. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include "ps7_init_gpl.h" -#include <asm/io.h> - -/* For delay calculation using global registers*/ -#define SCU_GLOBAL_TIMER_COUNT_L32 0xF8F00200 -#define SCU_GLOBAL_TIMER_COUNT_U32 0xF8F00204 -#define SCU_GLOBAL_TIMER_CONTROL 0xF8F00208 -#define SCU_GLOBAL_TIMER_AUTO_INC 0xF8F00218 -#define APU_FREQ 666666666 - -#define PS7_MASK_POLL_TIME 100000000 - -/* IO accessors. No memory barriers desired. */ -static inline void iowrite(unsigned long val, unsigned long addr) -{ - __raw_writel(val, addr); -} - -static inline unsigned long ioread(unsigned long addr) -{ - return __raw_readl(addr); -} - -/* start timer */ -static void perf_start_clock(void) -{ - iowrite((1 << 0) | /* Timer Enable */ - (1 << 3) | /* Auto-increment */ - (0 << 8), /* Pre-scale */ - SCU_GLOBAL_TIMER_CONTROL); -} - -/* Compute mask for given delay in miliseconds*/ -static int get_number_of_cycles_for_delay(unsigned int delay) -{ - return (APU_FREQ / (2 * 1000)) * delay; -} - -/* stop timer */ -static void perf_disable_clock(void) -{ - iowrite(0, SCU_GLOBAL_TIMER_CONTROL); -} - -/* stop timer and reset timer count regs */ -static void perf_reset_clock(void) -{ - perf_disable_clock(); - iowrite(0, SCU_GLOBAL_TIMER_COUNT_L32); - iowrite(0, SCU_GLOBAL_TIMER_COUNT_U32); -} - -static void perf_reset_and_start_timer(void) -{ - perf_reset_clock(); - perf_start_clock(); -} - -int ps7_config(unsigned long *ps7_config_init) -{ - unsigned long *ptr = ps7_config_init; - unsigned long opcode; - unsigned long addr; - unsigned long val; - unsigned long mask; - unsigned int numargs; - int i; - int delay; - - for (;;) { - opcode = ptr[0]; - if (opcode == OPCODE_EXIT) - return PS7_INIT_SUCCESS; - addr = (opcode & OPCODE_ADDRESS_MASK); - - switch (opcode & ~OPCODE_ADDRESS_MASK) { - case OPCODE_MASKWRITE: - numargs = 3; - mask = ptr[1]; - val = ptr[2]; - iowrite((ioread(addr) & ~mask) | (val & mask), addr); - break; - - case OPCODE_MASKPOLL: - numargs = 2; - mask = ptr[1]; - i = 0; - while (!(ioread(addr) & mask)) { - if (i == PS7_MASK_POLL_TIME) - return PS7_INIT_TIMEOUT; - i++; - } - break; - - case OPCODE_MASKDELAY: - numargs = 2; - mask = ptr[1]; - delay = get_number_of_cycles_for_delay(mask); - perf_reset_and_start_timer(); - while (ioread(addr) < delay) - ; - break; - - default: - return PS7_INIT_CORRUPT; - } - - ptr += numargs; - } -} |