[PATCH] goldfish: NAND flash driver
Alan Cox
alan at linux.intel.com
Wed Jan 23 17:12:45 EST 2013
> > + writel(cmdp, base + NAND_COMMAND);
> What guarantee do you have on the order of writes here ? Isn't a
> write barrier required here ?
Its a virtual platform powered by an emulator - so no barriers needed
that I can see.
> > + spin_lock_irqsave(&nand->lock, irq_flags);
> Why this spin_lock and not a mutex ? I didn't see any interrupts used
> in this driver, have I missed something ?
The driver doesn't require it not sure about all the callers.
>
> > + if (goldfish_nand_cmd_with_params(mtd, cmd, addr, len,
> > ptr, &rv)) {
> > + writel(mtd - nand->mtd, base + NAND_DEV);
> > + writel((u32)(addr >> 32), base + NAND_ADDR_HIGH);
> > + writel((u32)addr, base + NAND_ADDR_LOW);
> > + writel(len, base + NAND_TRANSFER_SIZE);
> > + writel((u32)ptr, base + NAND_DATA);
> > + writel(cmd, base + NAND_COMMAND);
> > + rv = readl(base + NAND_RESULT);
> Same question here on the order of the read wrt to previous writes.
reads wont pass write anyway as its a sane platform.
> > + if (ofs + len > mtd->size)
> > + goto invalid_arg;
> I don't think that test is required, the MTD API gives already that
> guarantee AFAIR.
Ok
> > + nand->cmd_params = devm_kzalloc(&pdev->dev,
> > + sizeof(struct cmd_params),
> > GFP_KERNEL);
> > + if (!nand->cmd_params)
> > + return -1;
> > +
> > + paddr = __pa(nand->cmd_params);
> That looks weird (the __pa()) usage. I thought drivers should not use
> __pa() directly.
Will look at using dma_alloc_coherent for it.
> > + spin_lock_irqsave(&nand->lock, irq_flags);
> Again same spin_lock question.
I'm very wary of changing this but will take a look. It's actually not
that important because its not real flash so it has unusually excellent
performance via the emulator.
Alan
More information about the linux-mtd
mailing list