zynq: cleanup devarch, flushmmu() after procflushpsecg()

This commit is contained in:
cinap_lenrek 2016-03-29 05:06:32 +02:00
parent e6b30b287c
commit b4e7d8fbf3

View file

@ -165,8 +165,7 @@ plirq(Ureg *, void *)
slcr[0x900/4] = 0xf; slcr[0x900/4] = 0xf;
slcr[0x240/4] = 0; slcr[0x240/4] = 0;
devc[DEVMASK] |= DONE; devc[DEVMASK] |= DONE;
if(axi != nil) axi->attr &= ~SG_FAULT;
axi->attr &= ~SG_FAULT;
wakeup(&pldoner); wakeup(&pldoner);
} }
if((fl & DMADONE) != 0){ if((fl & DMADONE) != 0){
@ -181,6 +180,13 @@ plinit(void)
{ {
Physseg seg; 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] &= ~(PROG|1<<25);
devc[DEVCTRL] |= 3<<26|PROG; devc[DEVCTRL] |= 3<<26|PROG;
devc[DEVISTS] = -1; devc[DEVISTS] = -1;
@ -188,22 +194,14 @@ plinit(void)
intrenable(DEVCIRQ, plirq, nil, LEVEL, "pl"); intrenable(DEVCIRQ, plirq, nil, LEVEL, "pl");
slcr[FPGA0_CLK_CTRL] = 1<<20 | 10<<8; slcr[FPGA0_CLK_CTRL] = 1<<20 | 10<<8;
memset(&seg, 0, sizeof seg);
seg.attr = SG_PHYSICAL | SG_FAULT;
seg.name = "axi";
seg.pa = 0x40000000;
seg.size = 0x8000000;
axi = addphysseg(&seg);
} }
static void static void
plconf(void) plconf(void)
{ {
if(axi != nil){ axi->attr |= SG_FAULT;
axi->attr |= SG_FAULT; procflushpseg(axi);
procflushpseg(axi); flushmmu();
}
slcr[0x240/4] = 0xf; slcr[0x240/4] = 0xf;
slcr[0x900/4] = 0xa; slcr[0x900/4] = 0xa;