On Fri, Jul 23, 2010 at 06:22:21PM -0500, David Sin wrote:
> +static struct platform_driver dmm_driver_ldm = {
> + .driver = {
> + .owner = THIS_MODULE,
> + .name = "dmm",
> + },
> + .probe = NULL,
> + .shutdown = NULL,
> + .remove = NULL,
> +};
What's the point of this driver structure?
> +s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode)
> +{
> + void __iomem *r;
> + u32 v;
> +
> + /* Only manual refill supported */
> + if (mode != MANUAL)
> + return -EFAULT;
> +
> + /* Check that the DMM_PAT_STATUS register has not reported an error */
> + r = dmm->base + DMM_PAT_STATUS__0;
> + v = __raw_readl(r);
> + if (WARN(v & 0xFC00, KERN_ERR "dmm_pat_refill() error.\n"))
> + return -EIO;
> +
> + /* Set "next" register to NULL */
> + r = dmm->base + DMM_PAT_DESCR__0;
> + v = __raw_readl(r);
> + v = SET_FLD(v, 31, 4, (u32) NULL);
> + __raw_writel(v, r);
> +
> + /* Set area to be refilled */
> + r = dmm->base + DMM_PAT_AREA__0;
> + v = __raw_readl(r);
> + v = SET_FLD(v, 30, 24, pd->area.y1);
> + v = SET_FLD(v, 23, 16, pd->area.x1);
> + v = SET_FLD(v, 14, 8, pd->area.y0);
> + v = SET_FLD(v, 7, 0, pd->area.x0);
> + __raw_writel(v, r);
> + wmb();
Maybe use writel() (which will contain the barrier _before_ the write op.)
> +
> + /* First, clear the DMM_PAT_IRQSTATUS register */
> + r = dmm->base + DMM_PAT_IRQSTATUS;
> + __raw_writel(0xFFFFFFFF, r);
> + wmb();
And consider using:
writel(0xffffffff, dmm->base + DMM_PAT_IRQSTATUS);
In any case, writes to devices are ordered, so there's no real need to
add barriers between each write - in which case writel_relaxed() or
__raw_writel() can be used (which'll be added soon.)
> +
> + r = dmm->base + DMM_PAT_IRQSTATUS_RAW;
> + while (__raw_readl(r) != 0)
> + ;
It's normal to use cpu_relax() in busy-wait loops. What if the IRQ status
never becomes zero?
> +MODULE_LICENSE("GPL v2");
> +MODULE_AUTHOR("[email protected]");
> +MODULE_AUTHOR("[email protected]");
MODULE_AUTHOR("Name <email>"); or just MODULE_AUTHOR("Name");
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html