Benjamin Herrenschmidt [b...@kernel.crashing.org] wrote: > On Thu, 2017-03-30 at 22:13 -0700, Sukadev Bhattiprolu wrote: > > +static void *map_mmio_region(char *name, uint64_t start, int len) > > +{ > > + void *map; > > + > > + if (!request_mem_region(start, len, name)) { > > + pr_devel("%s(): request_mem_region(0x%llx, %d) failed\n", > > + __func__, start, len); > > + return NULL; > > + } > > + > > + map = __ioremap(start, len, pgprot_val(pgprot_cached(__pgprot(0)))); > > + if (!map) { > > + pr_devel("%s(): ioremap(0x%llx, %d) failed\n", __func__, > > start, > > + len); > > + return NULL; > > + } > > + > > + return map; > > +} > > That's very wrong. I assume this never worked right ?
Untl recently, only tested on simics and has been working there. On the hardware, hitting a crash on the first mmio write... > > MMIO regions must be mapped non-cachable. Only the paste region which maybe due to this :-) Should I change to pgprot_noncached() for the MMIO writes? > requires being mapped cachable. Ask Aneesh for a cleaner way of > doing it too while at it. Ok. > > > +/* > > + * Unmap the MMIO regions for a window. > > + */ > > +static void unmap_wc_paste_kaddr(struct vas_window *window) > > +{ > > + int len; > > Don't use "wc"... that usually means "write combine". Ok. Thanks, Sukadev