m68k: rename CONFIG_MCFTMR to CFG_MCFTMR
[platform/kernel/u-boot.git] / arch / m68k / lib / fec.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * (C) 2019 Angelo Dureghello <angelo.dureghello@timesys.com>
4  */
5
6 #include <common.h>
7 #include <asm/global_data.h>
8 #include <linux/libfdt.h>
9 #include <fdt_support.h>
10
11 DECLARE_GLOBAL_DATA_PTR;
12
13 #if defined(CONFIG_MCFFEC) || defined(CONFIG_FSLDMAFEC)
14 static int fec_get_node(int fec_idx)
15 {
16         char fec_alias[5] = {"fec"};
17         const char *path;
18         int node;
19
20         if (fec_idx > 1) {
21                 puts("Invalid MII base index");
22                 return -ENOENT;
23         }
24
25         fec_alias[3] = fec_idx + '0';
26
27         path = fdt_get_alias(gd->fdt_blob, fec_alias);
28         if (!path) {
29                 puts("Invalid MII path");
30                 return -ENOENT;
31         }
32
33         node = fdt_path_offset(gd->fdt_blob, path);
34         if (node < 0)
35                 return -ENOENT;
36
37         return node;
38 }
39
40 int fec_get_fdt_prop(int fec_idx, const char *prop, u32 *value)
41 {
42         int node;
43         const u32 *val;
44
45         node = fec_get_node(fec_idx);
46         if (node < 0)
47                 return node;
48
49         val = fdt_getprop(gd->fdt_blob, node, prop, NULL);
50         if (!val)
51                 return -ENOENT;
52
53         *value = fdt32_to_cpu(*val);
54
55         return 0;
56 }
57
58 int fec_get_base_addr(int fec_idx, u32 *fec_iobase)
59 {
60         int node;
61         fdt_size_t size;
62         fdt_addr_t addr;
63
64         node = fec_get_node(fec_idx);
65         if (node < 0)
66                 return node;
67
68         addr = fdtdec_get_addr_size(gd->fdt_blob, node, "reg", &size);
69
70         *fec_iobase = (u32)addr;
71
72         return 0;
73 }
74
75 int fec_get_mii_base(int fec_idx, u32 *mii_base)
76 {
77         return fec_get_fdt_prop(fec_idx, "mii-base", mii_base);
78 }
79
80 #endif //CONFIG_MCFFEC || CONFIG_FSLDMAFEC