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:
cinap_lenrek 2019-07-25 08:58:58 +02:00
parent dfea95b3c2
commit 811b80cae1
16 changed files with 28 additions and 25 deletions

View file

@ -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;

View file

@ -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

View file

@ -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);
} }

View file

@ -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);

View file

@ -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*)
{
}

View file

@ -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))

View file

@ -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\

View file

@ -43,6 +43,7 @@ misc
dma dma
vcore vcore
vfp3 coproc vfp3 coproc
irq
port port
int cpuserver = 0; int cpuserver = 0;

View file

@ -43,6 +43,7 @@ misc
dma dma
vcore vcore
vfp3 coproc vfp3 coproc
irq
port port
int cpuserver = 0; int cpuserver = 0;

View file

@ -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;

View file

@ -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);

View file

@ -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;
} }

View file

@ -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;

View file

@ -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*);

View file

@ -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\

View file

@ -43,6 +43,7 @@ misc
sdmmc emmc sdmmc emmc
dma dma
vcore vcore
irq
dtracysys dtracysys
dtracytimer dtracytimer