summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper/0001-fixup-duplicates.patch85
-rw-r--r--meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend2
2 files changed, 87 insertions, 0 deletions
diff --git a/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper/0001-fixup-duplicates.patch b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper/0001-fixup-duplicates.patch
new file mode 100644
index 00000000..41815392
--- /dev/null
+++ b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper/0001-fixup-duplicates.patch
@@ -0,0 +1,85 @@
1Prevent duplicate and conflicting entries in generated files
2
3Generated xparameters.h file could end up with conflicting entries between
4"Canonical definitions" and regular "definitions" for various peripherals.
5
6This would result in numerous compilation warnings, and if the conflicting
7entry was used could result in the wrong value.
8
9Also fix the comments to match the generated defines, the wrong entry name
10could have previously been used.
11
12Upstream-Status: Pending
13
14Signed-off-by: Mark Hatle <mark.hatle@amd.com>
15
16diff --git a/lopper/assists/baremetal_xparameters_xlnx.py b/lopper/assists/baremetal_xparameters_xlnx.py
17index 661979d..2b84a64 100644
18--- a/lopper/assists/baremetal_xparameters_xlnx.py
19+++ b/lopper/assists/baremetal_xparameters_xlnx.py
20@@ -340,7 +340,7 @@ def xlnx_generate_xparams(tgt_node, sdt, options):
21 canondef_dict.update({prop:hex(prop_val[0])})
22 plat.buf(f'\n#define XPAR_{label_name}_{prop.upper()} {hex(prop_val[0])}')
23
24- plat.buf(f'\n\n/* Canonical definitions for peripheral {label_name} */')
25+ plat.buf(f'\n\n/* Canonical definitions for peripheral {canonical_name}_{index} */')
26 for prop,val in sorted(canondef_dict.items(), key=lambda e: e[0][0], reverse=False):
27 if prop == "FABRIC":
28 plat.buf(f'\n#define XPAR_FABRIC_{canonical_name}_{index}_INTR {val}')
29@@ -359,7 +359,9 @@ def xlnx_generate_xparams(tgt_node, sdt, options):
30 node_list = bm_config.get_mapped_nodes(sdt, node_list, options)
31
32 node_ip_count_dict = {}
33+ label_dict = {}
34 for node in node_list:
35+ canonical_dict = {}
36 try:
37 label_name = bm_config.get_label(sdt, symbol_node, node)
38 if label_name != None:
39@@ -367,6 +369,14 @@ def xlnx_generate_xparams(tgt_node, sdt, options):
40 else:
41 continue
42 val = bm_config.scan_reg_size(node, node['reg'].value, 0)
43+
44+ if label_name in label_dict:
45+ if label_dict[label_name]['BASEADDR'] != val[0] or \
46+ label_dict[label_name]['HIGHADDR'] != val[0] + val[1] - 1:
47+ raise KeyError("Duplicate definition for {label_name}")
48+ else:
49+ label_dict[label_name] = { 'BASEADDR' : val[0] , 'HIGHADDR' : val[0] + val[1] - 1 }
50+
51 plat.buf(f'\n/* Definitions for peripheral {label_name} */')
52 plat.buf(f'\n#define XPAR_{label_name}_BASEADDR {hex(val[0])}\n')
53 plat.buf(f'#define XPAR_{label_name}_HIGHADDR {hex(val[0] + val[1] - 1)}\n')
54@@ -379,12 +389,28 @@ def xlnx_generate_xparams(tgt_node, sdt, options):
55
56 canonical_name = node_ip_name.upper().replace("-", "_")
57
58- plat.buf(f'\n/* Canonical definitions for peripheral {label_name} */')
59- plat.buf(f'\n#define XPAR_{canonical_name}_{node_ip_count_dict[node_ip_name]}_BASEADDR {hex(val[0])}\n')
60- plat.buf(f'#define XPAR_{canonical_name}_{node_ip_count_dict[node_ip_name]}_HIGHADDR {hex(val[0] + val[1] - 1)}\n')
61+ if (f'{canonical_name}_{node_ip_count_dict[node_ip_name]}') in canonical_dict:
62+ if canonical_dict[(f'{canonical_name}_{node_ip_count_dict[node_ip_name]}')]['BASEADDR'] != val[0] or \
63+ canonical_dict[(f'{canonical_name}_{node_ip_count_dict[node_ip_name]}')]['HIGHADDR'] != val[0] + val[1] - 1:
64+ raise KeyError("Duplicate definition for {canonical_name}")
65+ else:
66+ canonical_dict[(f'{canonical_name}_{node_ip_count_dict[node_ip_name]}')] = { 'BASEADDR' : val[0] , 'HIGHADDR' : val[0] + val[1] - 1 }
67 except KeyError:
68 pass
69
70+ # Filter out anything already defined
71+ for canonical_name in canonical_dict:
72+ baseaddr = canonical_dict[canonical_name]['BASEADDR']
73+ highaddr = canonical_dict[canonical_name]['HIGHADDR']
74+
75+ if canonical_name in label_dict:
76+ # Already defined ... skip
77+ continue
78+
79+ plat.buf(f'\n/* Canonical definitions for peripheral {canonical_name} */')
80+ plat.buf(f'\n#define XPAR_{canonical_name}_BASEADDR {hex(baseaddr)}\n')
81+ plat.buf(f'#define XPAR_{canonical_name}_HIGHADDR {hex(highaddr)}\n')
82+
83 # Define for Board
84 if sdt.tree[tgt_node].propval('board') != ['']:
85 board = sdt.tree[tgt_node].propval('board', list)[0]
diff --git a/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
index 6de745a5..26eda3fe 100644
--- a/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
+++ b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
@@ -1,6 +1,8 @@
1SRC_URI = "git://github.com/devicetree-org/lopper.git;branch=master;protocol=https" 1SRC_URI = "git://github.com/devicetree-org/lopper.git;branch=master;protocol=https"
2SRCREV = "c0facd087263a24a83f7fad917884348db03175d" 2SRCREV = "c0facd087263a24a83f7fad917884348db03175d"
3 3
4SRC_URI += "file://0001-fixup-duplicates.patch"
5
4FILESEXTRAPATHS:prepend := "${THISDIR}/lopper:" 6FILESEXTRAPATHS:prepend := "${THISDIR}/lopper:"
5 7
6BASEVERSION = "1.2.0" 8BASEVERSION = "1.2.0"