1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2018 Xilinx, Inc.
5 * Michal Simek <michal.simek@xilinx.com>
9 #include <asm/arch/psu_init_gpl.h>
10 #include <linux/delay.h>
12 #define PSU_MASK_POLL_TIME 1100000
14 int __maybe_unused mask_pollonvalue(unsigned long add, u32 mask, u32 value)
18 while ((__raw_readl(add) & mask) != value) {
19 if (i == PSU_MASK_POLL_TIME)
26 __weak int mask_poll(u32 add, u32 mask)
29 unsigned long addr = add;
31 while (!(__raw_readl(addr) & mask)) {
32 if (i == PSU_MASK_POLL_TIME)
39 __weak u32 mask_read(u32 add, u32 mask)
41 unsigned long addr = add;
43 return __raw_readl(addr) & mask;
46 __weak void mask_delay(u32 delay)
51 __weak void psu_mask_write(unsigned long offset, unsigned long mask,
54 unsigned long regval = 0;
56 regval = readl(offset);
58 regval |= (val & mask);
59 writel(regval, offset);
62 __weak void prog_reg(unsigned long addr, unsigned long mask,
63 unsigned long shift, unsigned long value)
68 rdata = rdata & (~mask);
69 rdata = rdata | (value << shift);
73 __weak int psu_init(void)
76 * This function is overridden by the one in
77 * board/xilinx/zynqmp/(platform)/psu_init_gpl.c, if it exists.
82 __weak unsigned long psu_post_config_data(void)
85 * This function is overridden by the one in
86 * board/xilinx/zynqmp/(platform)/psu_init_gpl.c, if it exists.