diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-07-25 08:58:58 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-07-25 08:58:58 +0200 |
commit | 811b80cae120168762e5825784a135ee4a5558e2 (patch) | |
tree | 620d154c71fdd9c3f4b082c3b90c3d589a5cab0f /sys/src/9/bcm | |
parent | dfea95b3c29ef4a6de2713a946453d3a022ae0b4 (diff) |
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.
Diffstat (limited to 'sys/src/9/bcm')
-rw-r--r-- | sys/src/9/bcm/clock.c | 4 | ||||
-rw-r--r-- | sys/src/9/bcm/devgpio.c | 2 | ||||
-rw-r--r-- | sys/src/9/bcm/emmc.c | 4 | ||||
-rw-r--r-- | sys/src/9/bcm/fns.h | 4 | ||||
-rw-r--r-- | sys/src/9/bcm/irq.c | 7 | ||||
-rw-r--r-- | sys/src/9/bcm/mem.h | 9 | ||||
-rw-r--r-- | sys/src/9/bcm/mkfile | 1 | ||||
-rw-r--r-- | sys/src/9/bcm/pi | 1 | ||||
-rw-r--r-- | sys/src/9/bcm/pi2 | 1 | ||||
-rw-r--r-- | sys/src/9/bcm/uartmini.c | 2 | ||||
-rw-r--r-- | sys/src/9/bcm/uartpl011.c | 2 | ||||
-rw-r--r-- | sys/src/9/bcm/usbdwc.c | 6 |
12 files changed, 23 insertions, 20 deletions
diff --git a/sys/src/9/bcm/clock.c b/sys/src/9/bcm/clock.c index 5d50737ed..168eac9eb 100644 --- a/sys/src/9/bcm/clock.c +++ b/sys/src/9/bcm/clock.c @@ -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; diff --git a/sys/src/9/bcm/devgpio.c b/sys/src/9/bcm/devgpio.c index 8df38e865..4c664d9fe 100644 --- a/sys/src/9/bcm/devgpio.c +++ b/sys/src/9/bcm/devgpio.c @@ -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 diff --git a/sys/src/9/bcm/emmc.c b/sys/src/9/bcm/emmc.c index d1906de06..88d3d2f6d 100644 --- a/sys/src/9/bcm/emmc.c +++ b/sys/src/9/bcm/emmc.c @@ -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); } diff --git a/sys/src/9/bcm/fns.h b/sys/src/9/bcm/fns.h index 3801948e1..0853f7614 100644 --- a/sys/src/9/bcm/fns.h +++ b/sys/src/9/bcm/fns.h @@ -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); diff --git a/sys/src/9/bcm/irq.c b/sys/src/9/bcm/irq.c index dc8320e21..e960d8c5c 100644 --- a/sys/src/9/bcm/irq.c +++ b/sys/src/9/bcm/irq.c @@ -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*) +{ +} diff --git a/sys/src/9/bcm/mem.h b/sys/src/9/bcm/mem.h index 11709d5ab..6471e9b83 100644 --- a/sys/src/9/bcm/mem.h +++ b/sys/src/9/bcm/mem.h @@ -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)) diff --git a/sys/src/9/bcm/mkfile b/sys/src/9/bcm/mkfile index 3cc03dc56..7ce2c07ff 100644 --- a/sys/src/9/bcm/mkfile +++ b/sys/src/9/bcm/mkfile @@ -50,7 +50,6 @@ OBJ=\ fpi.$O\ fpiarm.$O\ fpimem.$O\ - irq.$O\ main.$O\ mmu.$O\ random.$O\ diff --git a/sys/src/9/bcm/pi b/sys/src/9/bcm/pi index 0a04813a8..0ac4fdcea 100644 --- a/sys/src/9/bcm/pi +++ b/sys/src/9/bcm/pi @@ -43,6 +43,7 @@ misc dma vcore vfp3 coproc + irq port int cpuserver = 0; diff --git a/sys/src/9/bcm/pi2 b/sys/src/9/bcm/pi2 index 08c3a1d71..ffa63f665 100644 --- a/sys/src/9/bcm/pi2 +++ b/sys/src/9/bcm/pi2 @@ -43,6 +43,7 @@ misc dma vcore vfp3 coproc + irq port int cpuserver = 0; diff --git a/sys/src/9/bcm/uartmini.c b/sys/src/9/bcm/uartmini.c index 9236d2ae9..c5ac1eadf 100644 --- a/sys/src/9/bcm/uartmini.c +++ b/sys/src/9/bcm/uartmini.c @@ -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; diff --git a/sys/src/9/bcm/uartpl011.c b/sys/src/9/bcm/uartpl011.c index a27ec182f..cf0a37281 100644 --- a/sys/src/9/bcm/uartpl011.c +++ b/sys/src/9/bcm/uartpl011.c @@ -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); diff --git a/sys/src/9/bcm/usbdwc.c b/sys/src/9/bcm/usbdwc.c index e38a30302..bcb4a418d 100644 --- a/sys/src/9/bcm/usbdwc.c +++ b/sys/src/9/bcm/usbdwc.c @@ -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; } |