|  | @@ -8,6 +8,7 @@ use strict;
 | 
	
		
			
				|  |  |  use File::Spec;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # Variables from configuration file
 | 
	
		
			
				|  |  | +our %consts;
 | 
	
		
			
				|  |  |  our $iodev_addr_bits;
 | 
	
		
			
				|  |  |  our $iodev_addr_shift;
 | 
	
		
			
				|  |  |  our $xdev_addr_bits;
 | 
	
	
		
			
				|  | @@ -28,17 +29,18 @@ sub generate_h($) {
 | 
	
		
			
				|  |  |      print $out "#ifndef IODEVS_H\n";
 | 
	
		
			
				|  |  |      print $out "#define IODEVS_H\n\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    printf $out "#define IODEV_ADDR_BITS %d\n", $iodev_addr_bits;
 | 
	
		
			
				|  |  | -    printf $out "#define IODEV_ADDR_SHIFT %d\n", $iodev_addr_shift;
 | 
	
		
			
				|  |  | +    foreach my $c (sort(keys(%consts))) {
 | 
	
		
			
				|  |  | +	printf $out "#define %-23s 0x%08x /* %d */\n",
 | 
	
		
			
				|  |  | +	    $c, $consts{$c}, $consts{$c};
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    print $out "\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      my $ndev  = 0;
 | 
	
		
			
				|  |  |      my $nxdev = 0;
 | 
	
		
			
				|  |  |      my $nirq  = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    print $out "\n";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      foreach my $sysirq (@sysirqs) {
 | 
	
		
			
				|  |  | -	printf $out "#define %s_IRQ %d\n", uc($sysirq), $nirq++;
 | 
	
		
			
				|  |  | +	printf $out "#define %-23s %d\n", "\U$sysirq\E_IRQ", $nirq++;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      foreach my $dev (@iodevs) {
 | 
	
	
		
			
				|  | @@ -53,17 +55,17 @@ sub generate_h($) {
 | 
	
		
			
				|  |  |  	my $xdev = $dev->{-xdev};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if ($xdev) {
 | 
	
		
			
				|  |  | -	    printf $out "\n#define %s_XDEV %d\n", $name, $nxdev;
 | 
	
		
			
				|  |  | -	    printf $out "#define %s_BASE 0x%08x\n", $name,
 | 
	
		
			
				|  |  | +	    printf $out "\n#define %-23s %d\n", $name.'_XDEV', $nxdev;
 | 
	
		
			
				|  |  | +	    printf $out "#define %-23s 0x%08x\n", $name.'_BASE',
 | 
	
		
			
				|  |  |  		base($nxdev, $xdev_addr_bits, $xdev_addr_shift);
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  | -	    printf $out "\n#define %s_DEV  %d\n", $name, $ndev;
 | 
	
		
			
				|  |  | -	    printf $out "#define %s_BASE 0x%08x\n", $name,
 | 
	
		
			
				|  |  | +	    printf $out "\n#define %-23s %d\n", $name.'_DEV', $ndev;
 | 
	
		
			
				|  |  | +	    printf $out "#define %-23s 0x%08x\n", $name.'_BASE',
 | 
	
		
			
				|  |  |  		base($ndev, $iodev_addr_bits, $iodev_addr_shift);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	printf $out "#define %s_DEV_COUNT %d\n", $name, $dcount;
 | 
	
		
			
				|  |  | +	printf $out "#define %-23s %d\n", $name.'_DEV_COUNT', $dcount;
 | 
	
		
			
				|  |  |  	if ($icount) {
 | 
	
		
			
				|  |  | -	    printf $out "#define %s_IRQ %d\n", $name, $nirq;
 | 
	
		
			
				|  |  | +	    printf $out "#define %-23s %d\n", $name.'_IRQ', $nirq;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	$ndev  += $xdev ? 0 : $dcount;
 | 
	
	
		
			
				|  | @@ -71,7 +73,7 @@ sub generate_h($) {
 | 
	
		
			
				|  |  |  	$nirq  += $dcount * $icount;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    printf $out "\n#define IRQ_VECTORS %d\n", $nirq;
 | 
	
		
			
				|  |  | +    printf $out "\n#define %-23s %d\n", 'IRQ_VECTORS', $nirq;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      print $out "\n#endif /* IODEVS_H */\n";
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -105,13 +107,13 @@ sub generate_irqtbl($)
 | 
	
		
			
				|  |  |  	$nirq += $dcount*$icount;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    print $out "static void irqhandler_spurious(unsigned int vector)\n";
 | 
	
		
			
				|  |  | +    print $out "static IRQHANDLER(spurious)\n";
 | 
	
		
			
				|  |  |      print $out "{\n";
 | 
	
		
			
				|  |  |      print $out "\tmask_irq(vector);\n";
 | 
	
		
			
				|  |  |      print $out "}\n\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      foreach my $irq (@irqtbl) {
 | 
	
		
			
				|  |  | -	printf $out "void irqhandler_%s(unsigned int) __attribute__((weak,alias(\"irqhandler_spurious\")));\n", $irq->[0];
 | 
	
		
			
				|  |  | +	printf $out "IRQHANDLER(%s) __attribute__((weak,alias(\"irqhandler_spurious\")));\n", $irq->[0];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      print $out "\nirqhandler_t __attribute__((section(\".sdata\")))\n";
 | 
	
	
		
			
				|  | @@ -129,6 +131,12 @@ sub generate_verilog($)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      my($out) = @_;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    foreach my $c (sort(keys(%consts))) {
 | 
	
		
			
				|  |  | +	printf $out "\tlocalparam %-23s = \'h%08x; // %d\n",
 | 
	
		
			
				|  |  | +	    $c, $consts{$c}, $consts{$c};
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    print $out "\n";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      my $ndev = 0;
 | 
	
		
			
				|  |  |      my $nxdev = 0;
 | 
	
		
			
				|  |  |      my $nirq = scalar(@sysirqs);
 | 
	
	
		
			
				|  | @@ -140,12 +148,12 @@ sub generate_verilog($)
 | 
	
		
			
				|  |  |      my @valid = ();
 | 
	
		
			
				|  |  |      my @irqs = ();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    print $out "\treg [31:0]  nxdev_rdata;\n";
 | 
	
		
			
				|  |  | -    print $out "\treg [31:0]  iodev_rdata;\n";
 | 
	
		
			
				|  |  | -    printf $out "\twire [%d:0]  xdev_valid  = iodev_mem_valid << cpu_mem_addr[%d:%d];\n",
 | 
	
		
			
				|  |  | +    print $out "\treg  [31:0] nxdev_rdata;\n";
 | 
	
		
			
				|  |  | +    print $out "\treg  [31:0] iodev_rdata;\n";
 | 
	
		
			
				|  |  | +    printf $out "\twire [%2d:0] xdev_valid  = iodev_mem_valid << cpu_mem_addr[%d:%d];\n",
 | 
	
		
			
				|  |  |  	(1 << $xdev_addr_bits)-1,
 | 
	
		
			
				|  |  |  	$xdev_addr_shift+$xdev_addr_bits-1, $xdev_addr_shift;
 | 
	
		
			
				|  |  | -    printf $out "\twire [%d:0]  iodev_valid = xdev_valid[%d] << cpu_mem_addr[%d:%d];\n",
 | 
	
		
			
				|  |  | +    printf $out "\twire [%2d:0] iodev_valid = xdev_valid[%d] << cpu_mem_addr[%d:%d];\n",
 | 
	
		
			
				|  |  |  	(1 << $iodev_addr_bits)-1, (1 << $xdev_addr_bits)-1,
 | 
	
		
			
				|  |  |  	$iodev_addr_shift+$iodev_addr_bits-1, $iodev_addr_shift;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -229,9 +237,9 @@ sub generate_verilog($)
 | 
	
		
			
				|  |  |  	printf $out "\t\t\t\t%d'd%d:\t iodev_rdata = %s;\n",
 | 
	
		
			
				|  |  |  	    $iodev_addr_bits, $ndev++, $dev;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    print $out "\t\t\t\tdefault: iodev_rdata = 32'hffffffff;\n";
 | 
	
		
			
				|  |  | +    print $out "\t\t\t\tdefault: iodev_rdata = 32'hxxxxxxxx;\n";
 | 
	
		
			
				|  |  |      print $out "\t\t\tendcase\n";
 | 
	
		
			
				|  |  | -    print $out "\t\t\tdefault: iodev_rdata = 32'hffffffff;\n";
 | 
	
		
			
				|  |  | +    print $out "\t\t\tdefault: iodev_rdata = 32'hxxxxxxxx;\n";
 | 
	
		
			
				|  |  |      print $out "\t\tendcase\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      print $out "\n";
 | 
	
	
		
			
				|  | @@ -262,6 +270,12 @@ unless (defined(do File::Spec->rel2abs($infile))) {
 | 
	
		
			
				|  |  |      die "$0: $infile: $@\n"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# Export these as constants, too
 | 
	
		
			
				|  |  | +$consts{'IODEV_ADDR_BITS'}  = $iodev_addr_bits;
 | 
	
		
			
				|  |  | +$consts{'IODEV_ADDR_SHIFT'} = $iodev_addr_shift;
 | 
	
		
			
				|  |  | +$consts{'XDEV_ADDR_BITS'}   = $xdev_addr_bits;
 | 
	
		
			
				|  |  | +$consts{'XDEV_ADDR_SHIFT'}  = $xdev_addr_shift;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  open(my $out, '>', $outfile) or die;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if ($mode eq 'h') {
 |