summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@amd.com>2024-11-24 08:51:35 -0700
committerMark Hatle <mark.hatle@amd.com>2024-11-24 08:56:49 -0700
commitd6ba64599f6f84a33d7c106eace03dc0a24ea02f (patch)
tree1d331aa1b807f80aeca99847b1561e37d4bb7ebe
parentc6d0f2cc2aed938d59b0fdf30746fac33c900f2a (diff)
downloadmeta-xilinx-d6ba64599f6f84a33d7c106eace03dc0a24ea02f.tar.gz
meta-xilinx-core: lopper: Prevent dup/conflicting entries in gen files
Generated xparameters.h file could end up with conflicting entries between "Canonical definitions" and regular "definitions" for various peripherals. This would result in numerous compilation warnings, and if the conflicting entry was used could result in the wrong value. Signed-off-by: Mark Hatle <mark.hatle@amd.com>
-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"