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