2 * $Id: asic.c,v 1.2 2006-08-04 01:38:30 nkeynes Exp $
4 * General ASIC support code
6 * Copyright (c) 2006 Nathan Keynes.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
21 #define ASIC_BASE 0xA05F6000
22 #define ASIC_PIRQ(n) (ASIC_BASE + 0x900 + (n<<2))
23 #define ASIC_IRQA(n) (ASIC_BASE + 0x910 + (n<<2))
24 #define ASIC_IRQB(n) (ASIC_BASE + 0x920 + (n<<2))
25 #define ASIC_IRQC(n) (ASIC_BASE + 0x930 + (n<<2))
26 #define TIMEOUT 10000000
29 * Wait for an ASIC event.
30 * @return 0 if the event occurred, otherwise -1 if the wait timed out.
32 int asic_wait( int event )
35 unsigned int mask = (1<< (event&0x1f));
37 for( i=0; i<TIMEOUT; i++ ) {
38 if( long_read(ASIC_PIRQ(n)) & mask ) {
42 return -1; /* Timeout */
46 * Clear all asic events
50 long_write(ASIC_PIRQ(0), 0xFFFFFFFF);
51 long_write(ASIC_PIRQ(1), 0xFFFFFFFF);
52 long_write(ASIC_PIRQ(2), 0xFFFFFFFF);
55 int asic_check( int event )
58 unsigned int mask = (1<< (event&0x1f));
59 return (long_read(ASIC_PIRQ(n)) & mask) != 0;
64 long_write(ASIC_IRQA(0), 0);
65 long_write(ASIC_IRQA(1), 0);
66 long_write(ASIC_IRQA(2), 0);
67 long_write(ASIC_IRQB(0), 0);
68 long_write(ASIC_IRQB(1), 0);
69 long_write(ASIC_IRQB(2), 0);
70 long_write(ASIC_IRQC(0), 0);
71 long_write(ASIC_IRQC(1), 0);
72 long_write(ASIC_IRQC(2), 0);
76 * Print the contents of the ASIC event registers to the supplied FILE
78 void asic_dump( FILE *f )
81 fprintf( f, "Events: " );
82 for( i=0; i<3; i++ ) {
83 uint32_t val = long_read(ASIC_PIRQ(i));
84 for( j=0; j<32; j++ ) {
86 fprintf( f, "%d ", (i<<5)+j );
.