Hello!

On 3/14/2017 7:36 PM, Bartlomiej Zolnierkiewicz wrote:

Add Palmchip BK3710 PATA controller driver.

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnier...@samsung.com>
[...]
diff --git a/drivers/ata/pata_bk3710.c b/drivers/ata/pata_bk3710.c
new file mode 100644
index 0000000..6d77217
--- /dev/null
+++ b/drivers/ata/pata_bk3710.c
@@ -0,0 +1,386 @@
[...]
+static void pata_bk3710_chipinit(void __iomem *base)
+{
[...]
+       /*
+        * IORDYTMP IORDY Timer for Primary Register
+        * (ATA_IORDYTMP_IORDYTMP     , 0xffff  )
+        */
+       iowrite32(0xFFFF, base + BK3710_IORDYTMP);

As I've already said, this is useless as we don't handle the IORDY timeout interrupt anyway; writing 0 would be fine.

+
+       /*
+        * Configure BMISP Register
+        * (ATA_BMISP_DMAEN1    , DISABLE )     |
+        * (ATA_BMISP_DMAEN0    , DISABLE )     |
+        * (ATA_BMISP_IORDYINT  , CLEAR)        |
+        * (ATA_BMISP_INTRSTAT  , CLEAR)        |
+        * (ATA_BMISP_DMAERROR  , CLEAR)
+        */
+       iowrite16(0, base + BK3710_BMISP);

Bits 0-3 cane only be cleared by writing 1, so this write can't clear them, contrary to what the comment says. Might be a material for a follow-up patch tho...

[...]
+static int __init pata_bk3710_probe(struct platform_device *pdev)
+{
+       struct clk *clk;
+       struct resource *mem;
+       struct ata_host *host;
+       struct ata_port *ap;
+       void __iomem *base;
+       unsigned long rate;
+       int irq;
+
+       clk = devm_clk_get(&pdev->dev, NULL);
+       if (IS_ERR(clk))
+               return -ENODEV;
+
+       clk_enable(clk);
+       rate = clk_get_rate(clk);
+       if (!rate)
+               return -EINVAL;
+
+       /* NOTE:  round *down* to meet minimum timings; we count in clocks */
+       ideclk_period = 1000000000UL / rate;
+
+       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (mem == NULL) {
+               pr_err(DRV_NAME ": failed to get memory region resource\n");
+               return -ENODEV;
+       }

   NULL check not needed here, devm_ioremap_resource() checks this anyway.

+
+       irq = platform_get_irq(pdev, 0);
+       if (irq < 0) {
+               pr_err(DRV_NAME ": failed to get IRQ resource\n");
+               return irq;
+       }
+
+       base = devm_ioremap_resource(&pdev->dev, mem);
+       if (IS_ERR(base))
+               return PTR_ERR(base);
+
[...]
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:palm_bk3710");
+
+static struct platform_driver pata_bk3710_driver = {
+       .driver = {
+               .name = "palm_bk3710",

   Not DRV_NAME?

[...]

MBR, Sergei

Reply via email to