Skip to content

Commit e6c63ab

Browse files
Merge pull request enjoy-digital#2198 from VOGL-electronic/json2dts_zephyr_eth
Json2dts zephyr: enhance it
2 parents 191c5d8 + 2a97b03 commit e6c63ab

File tree

1 file changed

+39
-16
lines changed

1 file changed

+39
-16
lines changed

litex/tools/litex_json2dts_zephyr.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def dts_close():
6868

6969
def dts_intr(name, csr, levels=1):
7070
irq = csr['constants'].get(name + '_interrupt', None)
71-
return indent(f"interrupts = <{irq} 0>;\n" if irq else "", levels)
71+
return indent(f"interrupts = <{irq} 0>;\n" if irq is not None else "", levels)
7272

7373

7474
def dts_reg(regs, levels=1):
@@ -126,19 +126,33 @@ def ethmac_handler(name, parm, csr):
126126
for reg in tx_registers:
127127
reg['name'] = 'tx_' + reg['name']
128128

129-
eth_buffers = {
130-
'name': 'buffers',
131-
'addr': csr['memories'][name]['base'],
132-
'size': csr['memories'][name]['size'],
133-
'type': csr['memories'][name]['type'],
134-
}
135-
registers = rx_registers + tx_registers + [eth_buffers]
129+
eth_buffers = [{
130+
'name': 'rx_buffers',
131+
'addr': csr['memories'][name + '_rx']['base'],
132+
'size': csr['memories'][name + '_rx']['size'],
133+
'type': csr['memories'][name + '_rx']['type'],
134+
},
135+
{
136+
'name': 'tx_buffers',
137+
'addr': csr['memories'][name + '_tx']['base'],
138+
'size': csr['memories'][name + '_tx']['size'],
139+
'type': csr['memories'][name + '_tx']['type'],
140+
}]
141+
registers = rx_registers + tx_registers + eth_buffers
136142

137143
dtsi = dts_reg(registers)
138144
dtsi += dts_reg_names(registers)
139145
dtsi += dts_intr(name, csr)
140146
return dtsi
141147

148+
def ethphy_mdio_handler(name, parm, csr):
149+
registers = get_registers_of(name + '_mdio', csr)
150+
if len(registers) == 0:
151+
raise KeyError
152+
153+
dtsi = dts_reg(registers)
154+
dtsi += dts_reg_names(registers)
155+
return dtsi
142156

143157
def i2c_handler(name, parm, csr):
144158
registers = get_registers_of(name, csr)
@@ -240,7 +254,7 @@ def peripheral_handler(name, parm, csr):
240254
return dtsi
241255

242256

243-
overlay_handlers = {
257+
_overlay_handlers = {
244258
'cpu': {
245259
'handler': cpu_handler,
246260
'alias': 'cpu0',
@@ -260,6 +274,10 @@ def peripheral_handler(name, parm, csr):
260274
'handler': ethmac_handler,
261275
'alias': 'eth0',
262276
},
277+
'ethphy': {
278+
'handler': ethphy_mdio_handler,
279+
'alias': 'mdio0',
280+
},
263281
'spimaster': {
264282
'handler': spimaster_handler,
265283
'alias': 'spi0',
@@ -322,11 +340,14 @@ def peripheral_handler(name, parm, csr):
322340
'identifier_mem': {
323341
'handler': peripheral_handler,
324342
'alias': 'dna0',
343+
},
344+
'prbs0': {
345+
'handler': peripheral_handler,
325346
}
326347
}
327348

328349

329-
def generate_dts_config(csr):
350+
def generate_dts_config(csr, overlay_handlers):
330351
dts = cnf = ''
331352

332353
for name, parm in overlay_handlers.items():
@@ -354,9 +375,11 @@ def generate_dts_config(csr):
354375
if name not in overlay_handlers.keys():
355376
print('No overlay handler for:', name, 'at', hex(value))
356377

357-
cnf += ' -DCONFIG_LITEX_CSR_DATA_WIDTH={}'.format(
358-
csr['constants']['config_csr_data_width'],
359-
)
378+
# Default CSR data width in zephyr is 32 bits
379+
if csr['constants']['config_csr_data_width'] != 32:
380+
cnf += ' -DCONFIG_LITEX_CSR_DATA_WIDTH={}'.format(
381+
csr['constants']['config_csr_data_width'],
382+
)
360383

361384
return dts, cnf
362385

@@ -370,7 +393,7 @@ def print_or_save(filepath, lines):
370393
or '-' to write to a standard output
371394
lines (string): content to be printed/written
372395
"""
373-
if filepath == '-':
396+
if filepath == '-' or filepath is None:
374397
print(lines)
375398
else:
376399
with open(filepath, 'w') as f:
@@ -383,7 +406,7 @@ def parse_args():
383406
help='JSON configuration generated by LiteX')
384407
parser.add_argument('--dts', action='store', required=True,
385408
help='Output DTS overlay file')
386-
parser.add_argument('--config', action='store', required=True,
409+
parser.add_argument('--config', action='store',
387410
help='Output config overlay file')
388411
return parser.parse_args()
389412

@@ -393,7 +416,7 @@ def main():
393416

394417
with open(args.conf_file) as f:
395418
csr = json.load(f)
396-
dts, config = generate_dts_config(csr)
419+
dts, config = generate_dts_config(csr, _overlay_handlers)
397420

398421
print_or_save(args.dts, dts)
399422
print_or_save(args.config, config)

0 commit comments

Comments
 (0)