Skip to content

Commit 49a6270

Browse files
Harish Babu Pamarthizeddii
authored andcommitted
baremetalconfig_xlnx: fix clocks single-cell offset; optional prop first int
baremetalconfig_xlnx: fix clock cell indexing and optional CMake ints Clocks: - With no clock-names, use offset 0 when clocks has a single phandle cell (avoids out-of-range access and spurious warnings on IPs like MDM). - On out-of-range offset, return value[0]; warn only when multiple cells exist. Fixes incorrect use of value[1] when only one cell is present. Optional driver metadata (DRIVER_OPTPROP_*): - Take node[prop].value[0]; if it is a string, parse the first comma-separated token as int (e.g. "0 , 1 , 0" -> first value only). Signed-off-by: Harish Babu Pamarthi <HarishBabu.Pamarthi@amd.com>
1 parent 0f0b55b commit 49a6270

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

lopper/assists/baremetalconfig_xlnx.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ def scan_ranges_size(range_value, ns):
237237
return addr, size
238238

239239
def get_clock_offset(node):
240-
tclk_offset = 1
241240
if node.propval("clock-names") != ['']:
242241
clock_names = node["clock-names"].value
243242
try:
@@ -246,10 +245,18 @@ def get_clock_offset(node):
246245
clocklen = len(node["clocks"].value)
247246
if namelen != clocklen:
248247
tclk_offset = 2 * tclk_offset + 1
249-
except:
250-
tclk_offset = 1
248+
return tclk_offset
249+
return tclk_offset
250+
except Exception:
251+
return 1
251252

252-
return tclk_offset
253+
try:
254+
ncells = len(node["clocks"].value)
255+
except KeyError:
256+
return 1
257+
if ncells <= 1:
258+
return 0
259+
return 1
253260

254261
def get_clock_prop(sdt, value, offset):
255262
"""
@@ -259,9 +266,11 @@ def get_clock_prop(sdt, value, offset):
259266
"""
260267
if offset < len(value):
261268
return value[offset]
262-
else:
269+
if not value:
270+
return 0
271+
if len(value) > 1:
263272
_warning(f"Invalid clock offset returning first clock")
264-
return value[1]
273+
return value[0]
265274

266275

267276
def get_pci_ranges(node, value, pad):
@@ -414,7 +423,7 @@ def xlnx_generate_config_struct(sdt, node, drvprop_list, plat, driver_proplist,
414423
try:
415424
phandle_value = node[subnode_prop].value[0]
416425
except KeyError:
417-
# Need to create dummy entries
426+
# Need to create dummy entries
418427
_debug(f"Find sub node is failed for {node.name}, creating dummy structure")
419428
dummy_struct = True
420429

@@ -788,8 +797,9 @@ def xlnx_generate_bm_config(tgt_node, sdt, options):
788797
drvoptprop_list.append(child[1][p].value[0])
789798
else:
790799
try:
791-
drvoptprop_list.append(hex(node[prop].value[0]))
792-
except KeyError:
800+
v0 = node[prop].value[0]
801+
drvoptprop_list.append(hex(int(v0.partition(",")[0].strip(), 0) if isinstance(v0, str) else v0 if isinstance(v0, int) else int(v0, 0)))
802+
except (KeyError, IndexError, TypeError, ValueError):
793803
pass
794804

795805
with open(cmake_file, 'a') as fd:

0 commit comments

Comments
 (0)