blob: a458686f13017e2ecc3143e3c8fa2d2eb4b8a40f [file] [log] [blame]
Hadi Asyrafi616da772019-06-27 11:34:03 +08001/*
2 * Copyright (c) 2019, Intel Corporation. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <platform_def.h>
8#include <string.h>
9
10#include "agilex_handoff.h"
11
12#define SWAP_UINT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | \
13 (((x) & 0x0000FF00) << 8) | ((x) << 24))
14
15int agilex_get_handoff(handoff *reverse_hoff_ptr)
16{
17 int i;
18 uint32_t *buffer;
19 handoff *handoff_ptr = (handoff *) PLAT_HANDOFF_OFFSET;
20
21 memcpy(reverse_hoff_ptr, handoff_ptr, sizeof(handoff));
22 buffer = (uint32_t *)reverse_hoff_ptr;
23
24 /* convert big endian to little endian */
25 for (i = 0; i < sizeof(handoff) / 4; i++)
26 buffer[i] = SWAP_UINT32(buffer[i]);
27
28 if (reverse_hoff_ptr->header_magic != HANDOFF_MAGIC_HEADER)
29 return -1;
30 if (reverse_hoff_ptr->pinmux_sel_magic != HANDOFF_MAGIC_PINMUX_SEL)
31 return -1;
32 if (reverse_hoff_ptr->pinmux_io_magic != HANDOFF_MAGIC_IOCTLR)
33 return -1;
34 if (reverse_hoff_ptr->pinmux_fpga_magic != HANDOFF_MAGIC_FPGA)
35 return -1;
36 if (reverse_hoff_ptr->pinmux_delay_magic != HANDOFF_MAGIC_IODELAY)
37 return -1;
38
39 return 0;
40}