Re: [PATCH v4 05/11] VAS: Define helpers for access MMIO regions
From: Sukadev Bhattiprolu
Date: Mon Apr 24 2017 - 13:25:55 EST
Benjamin Herrenschmidt [benh@xxxxxxxxxxxxxxxxxxx] 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