]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/zynq/devarch.c
devether: mux bridges, portable netconsole
[plan9front.git] / sys / src / 9 / zynq / devarch.c
index c5c4ea0b962a6d29b76497c04c31e665b5910aa5..85b54c97ec23d07cf4e0e4d020a4cf7890fe7322 100644 (file)
@@ -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;