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