1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * xen/include/xen/libfdt/libfdt-xen.h
4 *
5 * Wrapper functions for device tree. This helps to convert dt values
6 * between uint64_t and paddr_t.
7 *
8 * Copyright (C) 2023, Advanced Micro Devices, Inc. All Rights Reserved.
9 */
10
11 #ifndef LIBFDT_XEN_H
12 #define LIBFDT_XEN_H
13
14 #include <xen/libfdt/libfdt.h>
15
fdt_get_mem_rsv_paddr(const void * fdt,int n,paddr_t * address,paddr_t * size)16 static inline int fdt_get_mem_rsv_paddr(const void *fdt, int n,
17 paddr_t *address,
18 paddr_t *size)
19 {
20 uint64_t dt_addr;
21 uint64_t dt_size;
22 int ret;
23
24 ret = fdt_get_mem_rsv(fdt, n, &dt_addr, &dt_size);
25 if ( ret < 0 )
26 return ret;
27
28 if ( dt_addr != (paddr_t)dt_addr )
29 {
30 printk("Error: Physical address greater than max width supported\n");
31 return -FDT_ERR_MAX;
32 }
33
34 if ( dt_size != (paddr_t)dt_size )
35 {
36 printk("Error: Physical size greater than max width supported\n");
37 return -FDT_ERR_MAX;
38 }
39
40 *address = dt_addr;
41 *size = dt_size;
42
43 return ret;
44 }
45
46 #endif /* LIBFDT_XEN_H */
47
48 /*
49 * Local variables:
50 * mode: C
51 * c-file-style: "BSD"
52 * c-basic-offset: 4
53 * indent-tabs-mode: nil
54 * End:
55 */
56