X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=sys%2Fsrc%2F9%2Fzynq%2Fdevarch.c;h=85b54c97ec23d07cf4e0e4d020a4cf7890fe7322;hb=729c9c39d9156674f61d086e3306bcc04ce8dfc5;hp=c5c4ea0b962a6d29b76497c04c31e665b5910aa5;hpb=90b4fe9cf65bb24b55472ce2e32a7dbc3c5e7f97;p=plan9front.git diff --git a/sys/src/9/zynq/devarch.c b/sys/src/9/zynq/devarch.c index c5c4ea0b9..85b54c97e 100644 --- a/sys/src/9/zynq/devarch.c +++ b/sys/src/9/zynq/devarch.c @@ -25,14 +25,15 @@ static Dirtab archdir[Qmax] = { }; static int narchdir = Qbase; -int temp = -128; -ulong *devc; -int dmadone; +static int temp = -128; +static ulong *devc; +static int dmadone; enum { PLBUFSIZ = 8192 }; -uchar *plbuf; -Rendez plinitr, pldoner, pldmar; -QLock plrlock, plwlock; -Ref plwopen; +static uchar *plbuf; +static Rendez plinitr, pldoner, pldmar; +static QLock plrlock, plwlock; +static Ref plwopen; +static Physseg *axi; enum { DEVCTRL = 0, @@ -164,6 +165,7 @@ plirq(Ureg *, void *) slcr[0x900/4] = 0xf; slcr[0x240/4] = 0; devc[DEVMASK] |= DONE; + axi->attr &= ~SG_FAULT; wakeup(&pldoner); } if((fl & DMADONE) != 0){ @@ -178,6 +180,13 @@ plinit(void) { Physseg seg; + memset(&seg, 0, sizeof seg); + seg.attr = SG_PHYSICAL | SG_FAULT; + seg.name = "axi"; + seg.pa = 0x40000000; + seg.size = 0x8000000; + axi = addphysseg(&seg); + devc[DEVCTRL] &= ~(PROG|1<<25); devc[DEVCTRL] |= 3<<26|PROG; devc[DEVISTS] = -1; @@ -185,18 +194,15 @@ plinit(void) intrenable(DEVCIRQ, plirq, nil, LEVEL, "pl"); slcr[FPGA0_CLK_CTRL] = 1<<20 | 10<<8; - - memset(&seg, 0, sizeof seg); - seg.attr = SG_PHYSICAL; - seg.name = "axi"; - seg.pa = 0x40000000; - seg.size = 0x8000000; - addphysseg(&seg); } static void plconf(void) { + axi->attr |= SG_FAULT; + procflushpseg(axi); + flushmmu(); + slcr[0x240/4] = 0xf; slcr[0x900/4] = 0xa; devc[DEVISTS] = DONE|INITPE|DMADONE;