@@ -68,7 +68,7 @@ def dts_close():
6868
6969def 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
7474def 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
143157def 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