summaryrefslogtreecommitdiff
path: root/sys/src/9
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-07-25 08:58:58 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-07-25 08:58:58 +0200
commit811b80cae120168762e5825784a135ee4a5558e2 (patch)
tree620d154c71fdd9c3f4b082c3b90c3d589a5cab0f /sys/src/9
parentdfea95b3c29ef4a6de2713a946453d3a022ae0b4 (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')
-rw-r--r--sys/src/9/bcm/clock.c4
-rw-r--r--sys/src/9/bcm/devgpio.c2
-rw-r--r--sys/src/9/bcm/emmc.c4
-rw-r--r--sys/src/9/bcm/fns.h4
-rw-r--r--sys/src/9/bcm/irq.c7
-rw-r--r--sys/src/9/bcm/mem.h9
-rw-r--r--sys/src/9/bcm/mkfile1
-rw-r--r--sys/src/9/bcm/pi1
-rw-r--r--sys/src/9/bcm/pi21
-rw-r--r--sys/src/9/bcm/uartmini.c2
-rw-r--r--sys/src/9/bcm/uartpl011.c2
-rw-r--r--sys/src/9/bcm/usbdwc.c6
-rw-r--r--sys/src/9/bcm64/clock.c4
-rw-r--r--sys/src/9/bcm64/fns.h4
-rw-r--r--sys/src/9/bcm64/mkfile1
-rw-r--r--sys/src/9/bcm64/pi31
16 files changed, 28 insertions, 25 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;
}
diff --git a/sys/src/9/bcm64/clock.c b/sys/src/9/bcm64/clock.c
index bbc66a687..71ffd91b5 100644
--- a/sys/src/9/bcm64/clock.c
+++ b/sys/src/9/bcm64/clock.c
@@ -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;
diff --git a/sys/src/9/bcm64/fns.h b/sys/src/9/bcm64/fns.h
index cb5b389a5..77e5476bb 100644
--- a/sys/src/9/bcm64/fns.h
+++ b/sys/src/9/bcm64/fns.h
@@ -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*);
diff --git a/sys/src/9/bcm64/mkfile b/sys/src/9/bcm64/mkfile
index 7ab167643..4b453e498 100644
--- a/sys/src/9/bcm64/mkfile
+++ b/sys/src/9/bcm64/mkfile
@@ -44,7 +44,6 @@ OBJ=\
bootargs.$O\
clock.$O\
fpu.$O\
- irq.$O\
main.$O\
mmu.$O\
sysreg.$O\
diff --git a/sys/src/9/bcm64/pi3 b/sys/src/9/bcm64/pi3
index f37ab5e35..288ecd136 100644
--- a/sys/src/9/bcm64/pi3
+++ b/sys/src/9/bcm64/pi3
@@ -43,6 +43,7 @@ misc
sdmmc emmc
dma
vcore
+ irq
dtracysys
dtracytimer