bcm, bcm64: make irq.$O optional and add intrdisable(), use intrenable()
the raspberry pi 4 has a new interrupt controller and pci support, so get rid of intrenable() macro and properly make intrenable function with tbdf argument.
This commit is contained in:
parent
dfea95b3c2
commit
811b80cae1
16 changed files with 28 additions and 25 deletions
|
@ -128,7 +128,7 @@ clockinit(void)
|
|||
*(ulong*)(ARMLOCAL + Prescaler) = (((uvlong)SystimerFreq<<31)/19200000)&~1UL;
|
||||
} else {
|
||||
cpwrsc(0, CpTIMER, CpTIMERphys, CpTIMERphysctl, Enable);
|
||||
intrenable(IRQcntpns, localclockintr, nil, 0, "clock");
|
||||
intrenable(IRQcntpns, localclockintr, nil, BUSUNKNOWN, "clock");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ clockinit(void)
|
|||
|
||||
if(m->machno == 0){
|
||||
tn->c3 = tn->clo - 1;
|
||||
intrenable(IRQtimer3, clockintr, nil, 0, "clock");
|
||||
intrenable(IRQtimer3, clockintr, nil, BUSUNKNOWN, "clock");
|
||||
|
||||
tm = (Armtimer*)ARMTIMER;
|
||||
tm->load = 0;
|
||||
|
|
|
@ -336,7 +336,7 @@ gpioinit(void)
|
|||
gpiomeminit();
|
||||
boardrev = getboardrev() & 0xff;
|
||||
pinscheme = Qboard;
|
||||
intrenable(49, interrupt, nil, 0, "gpio1");
|
||||
intrenable(49, interrupt, nil, BUSUNKNOWN, "gpio1");
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -236,7 +236,7 @@ emmcenable(void)
|
|||
if(i == 1000)
|
||||
print("SD clock won't initialise!\n");
|
||||
WR(Irptmask, ~(Dtoerr|Cardintr));
|
||||
intrenable(IRQmmc, mmcinterrupt, nil, 0, "mmc");
|
||||
intrenable(IRQmmc, mmcinterrupt, nil, BUSUNKNOWN, "mmc");
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -398,8 +398,6 @@ emmcio(int write, uchar *buf, int len)
|
|||
}
|
||||
if(i)
|
||||
WR(Interrupt, i);
|
||||
if(!write)
|
||||
cachedinvse(buf, len);
|
||||
poperror();
|
||||
okay(0);
|
||||
}
|
||||
|
|
|
@ -61,8 +61,8 @@ extern int gpiogetevent(uint);
|
|||
extern void gpiomeminit(void);
|
||||
extern u32int ifsrget(void);
|
||||
extern void intrcpushutdown(void);
|
||||
extern void irqenable(int, void (*)(Ureg*, void*), void*);
|
||||
#define intrenable(i, f, a, b, n) irqenable((i), (f), (a))
|
||||
extern void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
|
||||
extern void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*);
|
||||
extern void intrsoff(void);
|
||||
extern int isaconfig(char*, int, ISAConf*);
|
||||
extern void l2cacheuwbinv(void);
|
||||
|
|
|
@ -114,7 +114,7 @@ fiq(Ureg *ureg)
|
|||
}
|
||||
|
||||
void
|
||||
irqenable(int irq, void (*f)(Ureg*, void*), void* a)
|
||||
intrenable(int irq, void (*f)(Ureg*, void*), void* a, int, char*)
|
||||
{
|
||||
Vctl *v;
|
||||
Intregs *ip;
|
||||
|
@ -165,3 +165,8 @@ irqenable(int irq, void (*f)(Ureg*, void*), void* a)
|
|||
}
|
||||
unlock(&vctllock);
|
||||
}
|
||||
|
||||
void
|
||||
intrdisable(int, void (*)(Ureg*, void*), void*, int, char*)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -10,9 +10,7 @@
|
|||
*/
|
||||
#define BY2PG (4*KiB) /* bytes per page */
|
||||
#define PGSHIFT 12 /* log(BY2PG) */
|
||||
#define HOWMANY(x,y) (((x)+((y)-1))/(y))
|
||||
#define ROUNDUP(x,y) (HOWMANY((x),(y))*(y))
|
||||
#define PGROUND(s) ROUNDUP(s, BY2PG)
|
||||
#define PGROUND(s) ROUND(s, BY2PG)
|
||||
#define ROUND(s, sz) (((s)+(sz-1))&~(sz-1))
|
||||
|
||||
#define MAXMACH 4 /* max # cpus system can run */
|
||||
|
@ -51,8 +49,8 @@
|
|||
#define FIQSTKTOP (KZERO+0x4000) /* FIQ stack */
|
||||
#define L1 (KZERO+0x4000) /* tt ptes: 16KiB aligned */
|
||||
#define KTZERO (KZERO+0x8000) /* kernel text start */
|
||||
#define VIRTIO 0x7E000000 /* i/o registers */
|
||||
#define ARMLOCAL (VIRTIO+IOSIZE) /* armv7 only */
|
||||
#define VIRTIO (0x7E000000) /* i/o registers */
|
||||
#define ARMLOCAL (0x7F000000) /* armv7 only */
|
||||
#define VGPIO (ARMLOCAL+MiB) /* virtual gpio for pi3 ACT LED */
|
||||
#define FRAMEBUFFER 0xC0000000 /* video framebuffer */
|
||||
|
||||
|
@ -95,7 +93,6 @@
|
|||
* BUS addresses as seen from the videocore gpu.
|
||||
*/
|
||||
#define PHYSDRAM 0
|
||||
#define IOSIZE (16*MiB)
|
||||
|
||||
#define MIN(a, b) ((a) < (b)? (a): (b))
|
||||
#define MAX(a, b) ((a) > (b)? (a): (b))
|
||||
|
|
|
@ -50,7 +50,6 @@ OBJ=\
|
|||
fpi.$O\
|
||||
fpiarm.$O\
|
||||
fpimem.$O\
|
||||
irq.$O\
|
||||
main.$O\
|
||||
mmu.$O\
|
||||
random.$O\
|
||||
|
|
|
@ -43,6 +43,7 @@ misc
|
|||
dma
|
||||
vcore
|
||||
vfp3 coproc
|
||||
irq
|
||||
|
||||
port
|
||||
int cpuserver = 0;
|
||||
|
|
|
@ -43,6 +43,7 @@ misc
|
|||
dma
|
||||
vcore
|
||||
vfp3 coproc
|
||||
irq
|
||||
|
||||
port
|
||||
int cpuserver = 0;
|
||||
|
|
|
@ -100,7 +100,7 @@ enable(Uart *uart, int ie)
|
|||
ap[MuCntl] = TxEn|RxEn;
|
||||
baud(uart, uart->baud);
|
||||
if(ie){
|
||||
intrenable(IRQaux, interrupt, uart, 0, uart->name);
|
||||
intrenable(IRQaux, interrupt, uart, BUSUNKNOWN, uart->name);
|
||||
ap[MuIer] = RxIen|TxIen;
|
||||
}else
|
||||
ap[MuIer] = 0;
|
||||
|
|
|
@ -148,7 +148,7 @@ enable(Uart *uart, int ie)
|
|||
|
||||
disable(uart);
|
||||
if(ie){
|
||||
intrenable(IRQuart, interrupt, uart, 0, uart->name);
|
||||
intrenable(IRQuart, interrupt, uart, BUSUNKNOWN, uart->name);
|
||||
reg[IMSC] = TXIM|RXIM;
|
||||
}
|
||||
uarton(uart);
|
||||
|
|
|
@ -85,6 +85,8 @@ static void dumpctlr(Ctlr *ctlr);
|
|||
static void dumphchan(Ctlr *ctlr, Hostchan *hc);
|
||||
static void dump(Hci *hp);
|
||||
|
||||
#define HOWMANY(x, y) (((x)+((y)-1))/(y))
|
||||
|
||||
static void
|
||||
filock(Lock *l)
|
||||
{
|
||||
|
@ -1051,7 +1053,7 @@ reset(Hci *hp)
|
|||
return -1;
|
||||
dprint("usbdwc: rev %d.%3.3x\n", (id>>12)&0xF, id&0xFFF);
|
||||
|
||||
intrenable(IRQtimerArm, irqintr, ctlr, 0, "dwc");
|
||||
intrenable(IRQtimerArm, irqintr, ctlr, BUSUNKNOWN, "dwc");
|
||||
|
||||
hp->aux = ctlr;
|
||||
hp->port = 0;
|
||||
|
@ -1075,7 +1077,7 @@ reset(Hci *hp)
|
|||
hp->debug = setdebug;
|
||||
hp->type = "dwcotg";
|
||||
|
||||
intrenable(hp->irq, hp->interrupt, hp, UNKNOWN, "usbdwcotg");
|
||||
intrenable(hp->irq, hp->interrupt, hp, BUSUNKNOWN, "usbdwcotg");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ clockinit(void)
|
|||
*(u32int*)(ARMLOCAL + Prescaler) = (((uvlong)SystimerFreq<<31)/19200000)&~1UL;
|
||||
} else {
|
||||
syswr(CNTP_CTL_EL0, Enable);
|
||||
intrenable(IRQcntpns, localclockintr, nil, 0, "clock");
|
||||
intrenable(IRQcntpns, localclockintr, nil, BUSUNKNOWN, "clock");
|
||||
}
|
||||
|
||||
tn = (Systimers*)SYSTIMERS;
|
||||
|
@ -151,7 +151,7 @@ clockinit(void)
|
|||
if(m->machno == 0){
|
||||
tn->cs = 1<<3;
|
||||
tn->c3 = tn->clo - 1;
|
||||
intrenable(IRQtimer3, clockintr, nil, 0, "clock");
|
||||
intrenable(IRQtimer3, clockintr, nil, BUSUNKNOWN, "clock");
|
||||
|
||||
tm = (Armtimer*)ARMTIMER;
|
||||
tm->load = 0;
|
||||
|
|
|
@ -110,8 +110,8 @@ extern void dumpregs(Ureg*);
|
|||
/* irq */
|
||||
extern void intrcpushutdown(void);
|
||||
extern void intrsoff(void);
|
||||
#define intrenable(i, f, a, b, n) irqenable((i), (f), (a))
|
||||
extern void irqenable(int, void (*)(Ureg*, void*), void*);
|
||||
extern void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
|
||||
extern void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*);
|
||||
extern int irq(Ureg*);
|
||||
extern void fiq(Ureg*);
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ OBJ=\
|
|||
bootargs.$O\
|
||||
clock.$O\
|
||||
fpu.$O\
|
||||
irq.$O\
|
||||
main.$O\
|
||||
mmu.$O\
|
||||
sysreg.$O\
|
||||
|
|
|
@ -43,6 +43,7 @@ misc
|
|||
sdmmc emmc
|
||||
dma
|
||||
vcore
|
||||
irq
|
||||
|
||||
dtracysys
|
||||
dtracytimer
|
||||
|
|
Loading…
Reference in a new issue