Linux ATA/IDE development
 help / color / mirror / Atom feed
* [PATCH 2/3] ARM: davinci: add pata_bk3710 libata driver support
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 13:01 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Russell King, Sergei Shtylyov, Arnd Bergmann, b.zolnierkie,
	Dmitry Eremin-Solenikov, Kevin Hilman, Sekhar Nori, linux-kernel,
	linux-ide, linux-arm-kernel
In-Reply-To: <1489064496-6270-1-git-send-email-b.zolnierkie@samsung.com>

From: Sekhar Nori <nsekhar@ti.com>

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
[b.zolnierkie: split from bigger patch + preserved old driver support]
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
 arch/arm/mach-davinci/board-dm644x-evm.c  | 3 ++-
 arch/arm/mach-davinci/board-dm646x-evm.c  | 3 ++-
 arch/arm/mach-davinci/board-neuros-osd2.c | 3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index 023480b..20f1874 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -744,7 +744,8 @@ static int davinci_phy_fixup(struct phy_device *phydev)
 	return 0;
 }
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		(IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
+			 IS_ENABLED(CONFIG_PATA_BK3710))
 
 #define HAS_NOR		IS_ENABLED(CONFIG_MTD_PHYSMAP)
 
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
index f702d4f..cb17682 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -119,7 +119,8 @@
 	},
 };
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		(IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
+			 IS_ENABLED(CONFIG_PATA_BK3710))
 
 #ifdef CONFIG_I2C
 /* CPLD Register 0 bits to control ATA */
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
index 0a78388..0c02aaa 100644
--- a/arch/arm/mach-davinci/board-neuros-osd2.c
+++ b/arch/arm/mach-davinci/board-neuros-osd2.c
@@ -163,7 +163,8 @@ static void __init davinci_ntosd2_map_io(void)
 	.wires		= 4,
 };
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		(IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
+			 IS_ENABLED(CONFIG_PATA_BK3710))
 
 #define HAS_NAND	IS_ENABLED(CONFIG_MTD_NAND_DAVINCI)
 
-- 
1.9.1

^ permalink raw reply related

* [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 13:01 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Russell King, Sergei Shtylyov, Arnd Bergmann, b.zolnierkie,
	Dmitry Eremin-Solenikov, Kevin Hilman, Sekhar Nori, linux-kernel,
	linux-ide, linux-arm-kernel
In-Reply-To: <1489064496-6270-1-git-send-email-b.zolnierkie@samsung.com>

Add Palmchip BK3710 PATA controller driver.

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
 drivers/ata/Kconfig       |   9 ++
 drivers/ata/Makefile      |   1 +
 drivers/ata/pata_bk3710.c | 395 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 405 insertions(+)
 create mode 100644 drivers/ata/pata_bk3710.c

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 7e0fc98..c23ee65 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -509,6 +509,15 @@ config PATA_BF54X
 
 	  If unsure, say N.
 
+config PATA_BK3710
+	tristate "Palmchip BK3710 PATA support"
+	depends on ARCH_DAVINCI
+	help
+	  This option enables support for the integrated IDE controller on
+	  the TI DaVinci SoC.
+
+	  If unsure, say N.
+
 config PATA_CMD64X
 	tristate "CMD64x PATA support"
 	depends on PCI
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
index 89a0a19..9438db8 100644
--- a/drivers/ata/Makefile
+++ b/drivers/ata/Makefile
@@ -50,6 +50,7 @@ obj-$(CONFIG_PATA_ARTOP)	+= pata_artop.o
 obj-$(CONFIG_PATA_ATIIXP)	+= pata_atiixp.o
 obj-$(CONFIG_PATA_ATP867X)	+= pata_atp867x.o
 obj-$(CONFIG_PATA_BF54X)	+= pata_bf54x.o
+obj-$(CONFIG_PATA_BK3710)	+= pata_bk3710.o
 obj-$(CONFIG_PATA_CMD64X)	+= pata_cmd64x.o
 obj-$(CONFIG_PATA_CS5520)	+= pata_cs5520.o
 obj-$(CONFIG_PATA_CS5530)	+= pata_cs5530.o
diff --git a/drivers/ata/pata_bk3710.c b/drivers/ata/pata_bk3710.c
new file mode 100644
index 0000000..65ee737
--- /dev/null
+++ b/drivers/ata/pata_bk3710.c
@@ -0,0 +1,395 @@
+/*
+ * Palmchip BK3710 PATA controller driver
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com
+ *
+ * Based on palm_bk3710.c:
+ *
+ * Copyright (C) 2006 Texas Instruments.
+ * Copyright (C) 2007 MontaVista Software, Inc., <source@mvista.com>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/ioport.h>
+#include <linux/ata.h>
+#include <linux/libata.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <linux/clk.h>
+#include <linux/platform_device.h>
+
+#define DRV_NAME "pata_bk3710"
+#define DRV_VERSION "0.1.0"
+
+#define BK3710_REG_OFFSET	0x1F0
+#define BK3710_CTL_OFFSET	0x3F6
+
+#define BK3710_BMISP		0x02
+#define BK3710_IDETIMP		0x40
+#define BK3710_UDMACTL		0x48
+#define BK3710_MISCCTL		0x50
+#define BK3710_REGSTB		0x54
+#define BK3710_REGRCVR		0x58
+#define BK3710_DATSTB		0x5C
+#define BK3710_DATRCVR		0x60
+#define BK3710_DMASTB		0x64
+#define BK3710_DMARCVR		0x68
+#define BK3710_UDMASTB		0x6C
+#define BK3710_UDMATRP		0x70
+#define BK3710_UDMAENV		0x74
+#define BK3710_IORDYTMP		0x78
+
+static struct scsi_host_template pata_bk3710_sht = {
+	ATA_BMDMA_SHT(DRV_NAME),
+};
+
+static unsigned int ideclk_period; /* in nanoseconds */
+
+struct pata_bk3710_udmatiming {
+	unsigned int rptime;	/* tRP -- Ready to pause time (nsec) */
+	unsigned int cycletime;	/* tCYCTYP2/2 -- avg Cycle Time (nsec) */
+				/* tENV is always a minimum of 20 nsec */
+};
+
+static const struct pata_bk3710_udmatiming pata_bk3710_udmatimings[6] = {
+	{ 160, 240 / 2 },	/* UDMA Mode 0 */
+	{ 125, 160 / 2 },	/* UDMA Mode 1 */
+	{ 100, 120 / 2 },	/* UDMA Mode 2 */
+	{ 100,  90 / 2 },	/* UDMA Mode 3 */
+	{ 100,  60 / 2 },	/* UDMA Mode 4 */
+	{  85,  40 / 2 },	/* UDMA Mode 5 */
+};
+
+static void pata_bk3710_setudmamode(void __iomem *base, unsigned int dev,
+				    unsigned int mode)
+{
+	u32 val32;
+	u16 val16;
+	u8 tenv, trp, t0;
+
+	/* DMA Data Setup */
+	t0 = DIV_ROUND_UP(pata_bk3710_udmatimings[mode].cycletime,
+			  ideclk_period) - 1;
+	tenv = DIV_ROUND_UP(20, ideclk_period) - 1;
+	trp = DIV_ROUND_UP(pata_bk3710_udmatimings[mode].rptime,
+			   ideclk_period) - 1;
+
+	/* udmastb Ultra DMA Access Strobe Width */
+	val32 = ioread32(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t0 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMASTB);
+
+	/* udmatrp Ultra DMA Ready to Pause Time */
+	val32 = ioread32(base + BK3710_UDMATRP) & (0xFF << (dev ? 0 : 8));
+	val32 |= (trp << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMATRP);
+
+	/* udmaenv Ultra DMA envelop Time */
+	val32 = ioread32(base + BK3710_UDMAENV) & (0xFF << (dev ? 0 : 8));
+	val32 |= (tenv << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMAENV);
+
+	/* Enable UDMA for Device */
+	val16 = ioread16(base + BK3710_UDMACTL) | (1 << dev);
+	iowrite16(val16, base + BK3710_UDMACTL);
+}
+
+static void pata_bk3710_setdmamode(void __iomem *base, unsigned int dev,
+				   unsigned short min_cycle,
+				   unsigned int mode)
+{
+	const struct ata_timing *t;
+	int cycletime;
+	u32 val32;
+	u16 val16;
+	u8 td, tkw, t0;
+
+	t = ata_timing_find_mode(mode);
+	cycletime = max_t(int, t->cycle, min_cycle);
+
+	/* DMA Data Setup */
+	t0 = DIV_ROUND_UP(cycletime, ideclk_period);
+	td = DIV_ROUND_UP(t->active, ideclk_period);
+	tkw = t0 - td - 1;
+	td -= 1;
+
+	val32 = ioread32(base + BK3710_DMASTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (td << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DMASTB);
+
+	val32 = ioread32(base + BK3710_DMARCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (tkw << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DMARCVR);
+
+	/* Disable UDMA for Device */
+	val16 = ioread16(base + BK3710_UDMACTL) & ~(1 << dev);
+	iowrite16(val16, base + BK3710_UDMACTL);
+}
+
+static void pata_bk3710_set_dmamode(struct ata_port *ap,
+				    struct ata_device *adev)
+{
+	void __iomem *base = (void __iomem *)ap->ioaddr.bmdma_addr;
+	int is_slave = adev->devno;
+	const u8 xferspeed = adev->dma_mode;
+
+	if (xferspeed >= XFER_UDMA_0)
+		pata_bk3710_setudmamode(base, is_slave,
+					xferspeed - XFER_UDMA_0);
+	else
+		pata_bk3710_setdmamode(base, is_slave,
+				       adev->id[ATA_ID_EIDE_DMA_MIN],
+				       xferspeed);
+}
+
+static void pata_bk3710_setpiomode(void __iomem *base, struct ata_device *pair,
+				   unsigned int dev, unsigned int cycletime,
+				   unsigned int mode)
+{
+	const struct ata_timing *t;
+	u32 val32;
+	u8 t2, t2i, t0;
+
+	t = ata_timing_find_mode(XFER_PIO_0 + mode);
+
+	/* PIO Data Setup */
+	t0 = DIV_ROUND_UP(cycletime, ideclk_period);
+	t2 = DIV_ROUND_UP(t->active, ideclk_period);
+
+	t2i = t0 - t2 - 1;
+	t2 -= 1;
+
+	val32 = ioread32(base + BK3710_DATSTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DATSTB);
+
+	val32 = ioread32(base + BK3710_DATRCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2i << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DATRCVR);
+
+	/* FIXME: this is broken also in the old driver */
+	if (pair) {
+		u8 mode2 = pair->pio_mode - XFER_PIO_0;
+
+		if (mode2 < mode)
+			mode = mode2;
+	}
+
+	/* TASKFILE Setup */
+	t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period);
+	t2 = DIV_ROUND_UP(t->act8b, ideclk_period);
+
+	t2i = t0 - t2 - 1;
+	t2 -= 1;
+
+	val32 = ioread32(base + BK3710_REGSTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_REGSTB);
+
+	val32 = ioread32(base + BK3710_REGRCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2i << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_REGRCVR);
+}
+
+static void pata_bk3710_set_piomode(struct ata_port *ap,
+				    struct ata_device *adev)
+{
+	void __iomem *base = (void __iomem *)ap->ioaddr.bmdma_addr;
+	struct ata_device *pair = ata_dev_pair(adev);
+	const struct ata_timing *t = ata_timing_find_mode(adev->pio_mode);
+	const u16 *id = adev->id;
+	unsigned int cycle_time;
+	int is_slave = adev->devno;
+	const u8 pio = adev->pio_mode - XFER_PIO_0;
+
+	if (id[ATA_ID_FIELD_VALID] & 2) {
+		if (ata_id_has_iordy(id))
+			cycle_time = id[ATA_ID_EIDE_PIO_IORDY];
+		else
+			cycle_time = id[ATA_ID_EIDE_PIO];
+
+		/* conservative "downgrade" for all pre-ATA2 drives */
+		if (pio < 3 && cycle_time < t->cycle)
+			cycle_time = 0; /* use standard timing */
+	}
+
+	if (!cycle_time)
+		cycle_time = t->cycle;
+
+	pata_bk3710_setpiomode(base, pair, is_slave, cycle_time, pio);
+}
+
+static void pata_bk3710_chipinit(void __iomem *base)
+{
+	/*
+	 * REVISIT:  the ATA reset signal needs to be managed through a
+	 * GPIO, which means it should come from platform_data.  Until
+	 * we get and use such information, we have to trust that things
+	 * have been reset before we get here.
+	 */
+
+	/*
+	 * Program the IDETIMP Register Value based on the following assumptions
+	 *
+	 * (ATA_IDETIMP_IDEEN		, ENABLE ) |
+	 * (ATA_IDETIMP_PREPOST1	, DISABLE) |
+	 * (ATA_IDETIMP_PREPOST0	, DISABLE) |
+	 *
+	 * DM6446 silicon rev 2.1 and earlier have no observed net benefit
+	 * from enabling prefetch/postwrite.
+	 */
+	iowrite16(BIT(15), base + BK3710_IDETIMP);
+
+	/*
+	 * UDMACTL Ultra-ATA DMA Control
+	 * (ATA_UDMACTL_UDMAP1	, 0 ) |
+	 * (ATA_UDMACTL_UDMAP0	, 0 )
+	 *
+	 */
+	iowrite16(0, base + BK3710_UDMACTL);
+
+	/*
+	 * MISCCTL Miscellaneous Conrol Register
+	 * (ATA_MISCCTL_HWNHLD1P	, 1 cycle)
+	 * (ATA_MISCCTL_HWNHLD0P	, 1 cycle)
+	 * (ATA_MISCCTL_TIMORIDE	, 1)
+	 */
+	iowrite32(0x001, base + BK3710_MISCCTL);
+
+	/*
+	 * IORDYTMP IORDY Timer for Primary Register
+	 * (ATA_IORDYTMP_IORDYTMP     , 0xffff  )
+	 */
+	iowrite32(0xFFFF, base + BK3710_IORDYTMP);
+
+	/*
+	 * 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);
+
+	pata_bk3710_setpiomode(base, NULL, 0, 600, 0);
+	pata_bk3710_setpiomode(base, NULL, 1, 600, 0);
+}
+
+static struct ata_port_operations pata_bk3710_ports_ops = {
+	.inherits		= &ata_bmdma_port_ops,
+	.cable_detect		= ata_cable_80wire,
+
+	.set_piomode		= pata_bk3710_set_piomode,
+	.set_dmamode		= pata_bk3710_set_dmamode,
+};
+
+static int __init pata_bk3710_probe(struct platform_device *pdev)
+{
+	struct clk *clk;
+	struct resource *mem, *irq;
+	struct ata_host *host;
+	struct ata_port *ap;
+	void __iomem *base;
+	unsigned long rate, mem_size;
+
+	clk = 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;
+	}
+
+	irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+	if (irq == NULL) {
+		pr_err(DRV_NAME ": failed to get IRQ resource\n");
+		return -ENODEV;
+	}
+
+	mem_size = resource_size(mem);
+	if (!devm_request_mem_region(&pdev->dev, mem->start, mem_size,
+				     DRV_NAME)) {
+		pr_err(DRV_NAME ": failed to request memory region\n");
+		return -EBUSY;
+	}
+
+	base = ioremap(mem->start, mem_size);
+	if (!base) {
+		pr_err(DRV_NAME ": failed to map IO memory\n");
+		return -ENOMEM;
+	}
+
+	/* Configure the Palm Chip controller */
+	pata_bk3710_chipinit(base);
+
+	/* allocate host */
+	host = ata_host_alloc(&pdev->dev, 1);
+	if (!host)
+		return -ENOMEM;
+	ap = host->ports[0];
+
+	ap->ops = &pata_bk3710_ports_ops;
+	ap->pio_mask = ATA_PIO4;
+	ap->mwdma_mask = ATA_MWDMA2;
+	ap->udma_mask = rate < 100000000 ? ATA_UDMA4 : ATA_UDMA5;
+	ap->flags |= ATA_FLAG_SLAVE_POSS;
+
+	ap->ioaddr.data_addr		= base + BK3710_REG_OFFSET;
+	ap->ioaddr.error_addr		= base + BK3710_REG_OFFSET + 1;
+	ap->ioaddr.feature_addr		= base + BK3710_REG_OFFSET + 1;
+	ap->ioaddr.nsect_addr		= base + BK3710_REG_OFFSET + 2;
+	ap->ioaddr.lbal_addr		= base + BK3710_REG_OFFSET + 3;
+	ap->ioaddr.lbam_addr		= base + BK3710_REG_OFFSET + 4;
+	ap->ioaddr.lbah_addr		= base + BK3710_REG_OFFSET + 5;
+	ap->ioaddr.device_addr		= base + BK3710_REG_OFFSET + 6;
+	ap->ioaddr.status_addr		= base + BK3710_REG_OFFSET + 7;
+	ap->ioaddr.command_addr		= base + BK3710_REG_OFFSET + 7;
+
+	ap->ioaddr.altstatus_addr	= base + BK3710_CTL_OFFSET;
+	ap->ioaddr.ctl_addr		= base + BK3710_CTL_OFFSET;
+
+	ap->ioaddr.bmdma_addr		= base;
+
+	ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx",
+		      (unsigned long)base + BK3710_REG_OFFSET,
+		      (unsigned long)base + BK3710_CTL_OFFSET);
+
+	/* activate */
+	return ata_host_activate(host, irq->start, ata_sff_interrupt, 0,
+				 &pata_bk3710_sht);
+}
+
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:palm_bk3710");
+
+static struct platform_driver pata_bk3710_driver = {
+	.driver = {
+		.name = "palm_bk3710",
+	},
+};
+
+static int __init pata_bk3710_init(void)
+{
+	return platform_driver_probe(&pata_bk3710_driver, pata_bk3710_probe);
+}
+
+module_init(pata_bk3710_init);
+MODULE_LICENSE("GPL");
-- 
1.9.1

^ permalink raw reply related

* [PATCH 0/3] ATA/ARM: convert ARM/DaVinci to use libata PATA drivers
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 13:01 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Russell King, Sergei Shtylyov, Arnd Bergmann, b.zolnierkie,
	Dmitry Eremin-Solenikov, Kevin Hilman, Sekhar Nori, linux-kernel,
	linux-ide, linux-arm-kernel
In-Reply-To: <CGME20170309130212epcas5p28ee9f513f932008f0222f9e95cfc4e57@epcas5p2.samsung.com>

Hi,

This patchset adds Palmchip BK3710 IDE controller driver to
libata and switches ARM/DaVinci to use it instead of the old
IDE driver.

Sekhar, please check that it still works after changes, thanks.

Changes since v0.1 draft patch version
(https://www.spinics.net/lists/arm-kernel/msg566932.html):
- fixed cycle_time build warning
- added platform support fixes from Sekhar
- added defconfig changes from Sekhar
- preserved platform support for the old IDE driver
- split it on 3 patches

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


Bartlomiej Zolnierkiewicz (1):
  ata: add Palmchip BK3710 PATA controller driver

Sekhar Nori (2):
  ARM: davinci: add pata_bk3710 libata driver support
  ARM: davinci_all_defconfig: convert to use libata PATA

 arch/arm/configs/davinci_all_defconfig    |   4 +-
 arch/arm/mach-davinci/board-dm644x-evm.c  |   3 +-
 arch/arm/mach-davinci/board-dm646x-evm.c  |   3 +-
 arch/arm/mach-davinci/board-neuros-osd2.c |   3 +-
 drivers/ata/Kconfig                       |   9 +
 drivers/ata/Makefile                      |   1 +
 drivers/ata/pata_bk3710.c                 | 395 ++++++++++++++++++++++++++++++
 7 files changed, 412 insertions(+), 6 deletions(-)
 create mode 100644 drivers/ata/pata_bk3710.c

-- 
1.9.1

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sergei Shtylyov @ 2017-03-09 12:24 UTC (permalink / raw)
  To: Sekhar Nori, Bartlomiej Zolnierkiewicz
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson
In-Reply-To: <98031160-f7b4-3cff-043a-1f2ee62c8a01@ti.com>

On 03/09/2017 03:20 PM, Sekhar Nori wrote:

> [...]

>>> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c
>>> b/arch/arm/mach-davinci/board-dm644x-evm.c
>>> index 023480b75244..60a1f23890cd 100644
>>> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
>>> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
>>> @@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device
>>> *phydev)
>>>      return 0;
>>>  }
>>>
>>> -#define HAS_ATA        IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
>>> +#define HAS_ATA        IS_ENABLED(CONFIG_PATA_BK3710)
>>
>>    I think it would be more correct to check for both libata and IDE
>> drivers here...
>
> As I understand, the plan is to remove the IDE driver soon.

    I'm not sure DaveM would support any removals in drivers/ide/. He has 
explicitly expressed his will to maintain the IDE driuver forever.

> Thanks,
> Sekhar

MBR, Sergei

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 12:21 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: Sekhar Nori, Kevin Hilman, Arnd Bergmann, linux-arm-kernel,
	Russell King, Dmitry Eremin-Solenikov, linux-kernel, linux-ide,
	Olof Johansson
In-Reply-To: <ab44a3c1-f078-4476-4583-de92ee68632c@cogentembedded.com>


Hi,

On Thursday, March 09, 2017 12:25:47 PM Sergei Shtylyov wrote:
> Hello!
> 
> On 3/9/2017 11:39 AM, Sekhar Nori wrote:
> 
> >>> It took a while to get to it but here is the draft driver patch
> >>> against v4.11-rc1.  Please test.
> >>
> >> I tested this on DM6446 EVM. I was able to mount existing partitions on
> >> the hard disk and see that the directory listing looks good[1]. I will do
> >> more tests (including comparing performance with old driver) tomorrow. I
> >
> > I completed the tests I wanted to, including some read/write/data
> > integrity tests. Performance is same as before too.
> >
> > Tested-by: Sekhar Nori <nsekhar@ti.com>
> >
> > Here are the additional changes I did. These changes do not clash with
> > what I have already queued for v4.12. That said, its probably better if
> > I carry the platform pieces through my tree. Let me know how you want
> > to proceed.
> >
> > Thanks,
> > Sekhar
> >
> > ---8<---
> > diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig
> > index b9a7cb98ffda..67db82999c06 100644
> > --- a/arch/arm/configs/davinci_all_defconfig
> > +++ b/arch/arm/configs/davinci_all_defconfig
> [...]
> > diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
> > index 023480b75244..60a1f23890cd 100644
> > --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> > +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> > @@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device *phydev)
> >  	return 0;
> >  }
> >
> > -#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
> > +#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)
> 
>     I think it would be more correct to check for both libata and IDE drivers 
> here...

Thanks for noticing.

To make both drivers work depending on config options selected I'll:
- fix these HAS_ATA macros
- use "palm_bk3710" as platform driver name in the new driver
- drop IDE platform device & IDE clock name changes

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sekhar Nori @ 2017-03-09 12:20 UTC (permalink / raw)
  To: Sergei Shtylyov, Bartlomiej Zolnierkiewicz
  Cc: Russell King, Arnd Bergmann, Dmitry Eremin-Solenikov,
	Kevin Hilman, linux-kernel, linux-ide, Olof Johansson,
	linux-arm-kernel
In-Reply-To: <ab44a3c1-f078-4476-4583-de92ee68632c@cogentembedded.com>

On Thursday 09 March 2017 02:55 PM, Sergei Shtylyov wrote:

[...]

>> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c
>> b/arch/arm/mach-davinci/board-dm644x-evm.c
>> index 023480b75244..60a1f23890cd 100644
>> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
>> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
>> @@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device
>> *phydev)
>>      return 0;
>>  }
>>
>> -#define HAS_ATA        IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
>> +#define HAS_ATA        IS_ENABLED(CONFIG_PATA_BK3710)
> 
>    I think it would be more correct to check for both libata and IDE
> drivers here...

As I understand, the plan is to remove the IDE driver soon.

Thanks,
Sekhar

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 12:14 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson,
	Tejun Heo
In-Reply-To: <bca846c5-6fb8-7e60-f5c5-24772c57803b@ti.com>

On Thursday, March 09, 2017 05:27:12 PM Sekhar Nori wrote:
> On Thursday 09 March 2017 05:17 PM, Bartlomiej Zolnierkiewicz wrote:
> > 
> > Hi Sekhar,
> > 
> > On Thursday, March 09, 2017 02:09:30 PM Sekhar Nori wrote:
> >> Hi Bartlomiej,
> >>
> >> On Wednesday 08 March 2017 08:30 PM, Sekhar Nori wrote:
> >>
> >>>> It took a while to get to it but here is the draft driver patch
> >>>> against v4.11-rc1.  Please test.
> >>>
> >>> I tested this on DM6446 EVM. I was able to mount existing partitions on 
> >>> the hard disk and see that the directory listing looks good[1]. I will do 
> >>> more tests (including comparing performance with old driver) tomorrow. I 
> >>
> >> I completed the tests I wanted to, including some read/write/data 
> >> integrity tests. Performance is same as before too.
> >>
> >> Tested-by: Sekhar Nori <nsekhar@ti.com>
> > 
> > Thanks for testing!
> > 
> >> Here are the additional changes I did. These changes do not clash with 
> > 
> > I'll split the draft patch on ATA & platform changes and make a proper
> > submission.  I'll also include your changes (can I have your Signed-by
> > for them?).
> 
> Signed-of-by: Sekhar Nori <nsekhar@ti.com>

Thanks.

> >> what I have already queued for v4.12. That said, its probably better if 
> >> I carry the platform pieces through my tree. Let me know how you want 
> >> to proceed.
> > 
> > I think that it would be the best to ask Tejun to make a separate branch
> > with a pata_bk3710 driver so it can be pulled into your tree to preserve
> > bisectability.
> 
> Sounds good. What about removal of IDE driver? Do you want to have both
> drivers existing in v4.12 and get rid of the IDE driver in v4.13 ?

Sounds good to me.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sekhar Nori @ 2017-03-09 11:57 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson,
	Tejun Heo
In-Reply-To: <1821488.fi4Ak6Xj0W@amdc3058>

On Thursday 09 March 2017 05:17 PM, Bartlomiej Zolnierkiewicz wrote:
> 
> Hi Sekhar,
> 
> On Thursday, March 09, 2017 02:09:30 PM Sekhar Nori wrote:
>> Hi Bartlomiej,
>>
>> On Wednesday 08 March 2017 08:30 PM, Sekhar Nori wrote:
>>
>>>> It took a while to get to it but here is the draft driver patch
>>>> against v4.11-rc1.  Please test.
>>>
>>> I tested this on DM6446 EVM. I was able to mount existing partitions on 
>>> the hard disk and see that the directory listing looks good[1]. I will do 
>>> more tests (including comparing performance with old driver) tomorrow. I 
>>
>> I completed the tests I wanted to, including some read/write/data 
>> integrity tests. Performance is same as before too.
>>
>> Tested-by: Sekhar Nori <nsekhar@ti.com>
> 
> Thanks for testing!
> 
>> Here are the additional changes I did. These changes do not clash with 
> 
> I'll split the draft patch on ATA & platform changes and make a proper
> submission.  I'll also include your changes (can I have your Signed-by
> for them?).

Signed-of-by: Sekhar Nori <nsekhar@ti.com>

>> what I have already queued for v4.12. That said, its probably better if 
>> I carry the platform pieces through my tree. Let me know how you want 
>> to proceed.
> 
> I think that it would be the best to ask Tejun to make a separate branch
> with a pata_bk3710 driver so it can be pulled into your tree to preserve
> bisectability.

Sounds good. What about removal of IDE driver? Do you want to have both
drivers existing in v4.12 and get rid of the IDE driver in v4.13 ?

Thanks,
Sekhar

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 11:47 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson,
	Tejun Heo
In-Reply-To: <a3161cfc-56f7-4577-c37f-3798cdb03713@ti.com>


Hi Sekhar,

On Thursday, March 09, 2017 02:09:30 PM Sekhar Nori wrote:
> Hi Bartlomiej,
> 
> On Wednesday 08 March 2017 08:30 PM, Sekhar Nori wrote:
> 
> >> It took a while to get to it but here is the draft driver patch
> >> against v4.11-rc1.  Please test.
> > 
> > I tested this on DM6446 EVM. I was able to mount existing partitions on 
> > the hard disk and see that the directory listing looks good[1]. I will do 
> > more tests (including comparing performance with old driver) tomorrow. I 
> 
> I completed the tests I wanted to, including some read/write/data 
> integrity tests. Performance is same as before too.
> 
> Tested-by: Sekhar Nori <nsekhar@ti.com>

Thanks for testing!

> Here are the additional changes I did. These changes do not clash with 

I'll split the draft patch on ATA & platform changes and make a proper
submission.  I'll also include your changes (can I have your Signed-by
for them?).

> what I have already queued for v4.12. That said, its probably better if 
> I carry the platform pieces through my tree. Let me know how you want 
> to proceed.

I think that it would be the best to ask Tejun to make a separate branch
with a pata_bk3710 driver so it can be pulled into your tree to preserve
bisectability.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sergei Shtylyov @ 2017-03-09  9:25 UTC (permalink / raw)
  To: Sekhar Nori, Bartlomiej Zolnierkiewicz
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson
In-Reply-To: <a3161cfc-56f7-4577-c37f-3798cdb03713@ti.com>

Hello!

On 3/9/2017 11:39 AM, Sekhar Nori wrote:

>>> It took a while to get to it but here is the draft driver patch
>>> against v4.11-rc1.  Please test.
>>
>> I tested this on DM6446 EVM. I was able to mount existing partitions on
>> the hard disk and see that the directory listing looks good[1]. I will do
>> more tests (including comparing performance with old driver) tomorrow. I
>
> I completed the tests I wanted to, including some read/write/data
> integrity tests. Performance is same as before too.
>
> Tested-by: Sekhar Nori <nsekhar@ti.com>
>
> Here are the additional changes I did. These changes do not clash with
> what I have already queued for v4.12. That said, its probably better if
> I carry the platform pieces through my tree. Let me know how you want
> to proceed.
>
> Thanks,
> Sekhar
>
> ---8<---
> diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig
> index b9a7cb98ffda..67db82999c06 100644
> --- a/arch/arm/configs/davinci_all_defconfig
> +++ b/arch/arm/configs/davinci_all_defconfig
[...]
> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
> index 023480b75244..60a1f23890cd 100644
> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> @@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device *phydev)
>  	return 0;
>  }
>
> -#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
> +#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)

    I think it would be more correct to check for both libata and IDE drivers 
here...

>  #define HAS_NOR		IS_ENABLED(CONFIG_MTD_PHYSMAP)
>
> diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
> index f702d4fc8eb8..589f3c33c4a0 100644
> --- a/arch/arm/mach-davinci/board-dm646x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm646x-evm.c
> @@ -119,7 +119,7 @@ static struct platform_device davinci_nand_device = {
>  	},
>  };
>
> -#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
> +#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)

    And here...

>
>  #ifdef CONFIG_I2C
>  /* CPLD Register 0 bits to control ATA */
> diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
> index 0a7838852649..075e304ce7be 100644
> --- a/arch/arm/mach-davinci/board-neuros-osd2.c
> +++ b/arch/arm/mach-davinci/board-neuros-osd2.c
> @@ -163,7 +163,7 @@ static struct davinci_mmc_config davinci_ntosd2_mmc_config = {
>  	.wires		= 4,
>  };
>
> -#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
> +#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)

    And here...

[...]

MBR, Sergei


^ permalink raw reply

* [PATCH] ahci: qoriq: correct the sata ecc setting error
From: Yuantian Tang @ 2017-03-09  9:13 UTC (permalink / raw)
  To: tj; +Cc: linux-ide, Yuantian Tang, linux-kernel, linux-arm-kernel

Sata ecc is controlled by only 1 bit which is 24bit in big-endian
in ecc register. So only setting 24bit to disable sata ecc prevents
other bits from being overwritten in ecc register.

Signed-off-by: Tang Yuantian <andy.tang@nxp.com>
---
 drivers/ata/ahci_qoriq.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/ata/ahci_qoriq.c b/drivers/ata/ahci_qoriq.c
index 85d8332..4c96f3a 100644
--- a/drivers/ata/ahci_qoriq.c
+++ b/drivers/ata/ahci_qoriq.c
@@ -177,7 +177,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv)
 	case AHCI_LS1043A:
 		if (!qpriv->ecc_addr)
 			return -EINVAL;
-		writel(ECC_DIS_ARMV8_CH2, qpriv->ecc_addr);
+		writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2,
+				qpriv->ecc_addr);
 		writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1);
 		writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
 		if (qpriv->is_dmacoherent)
@@ -194,7 +195,8 @@ static int ahci_qoriq_phy_init(struct ahci_host_priv *hpriv)
 	case AHCI_LS1046A:
 		if (!qpriv->ecc_addr)
 			return -EINVAL;
-		writel(ECC_DIS_ARMV8_CH2, qpriv->ecc_addr);
+		writel(readl(qpriv->ecc_addr) | ECC_DIS_ARMV8_CH2,
+				qpriv->ecc_addr);
 		writel(AHCI_PORT_PHY_1_CFG, reg_base + PORT_PHY1);
 		writel(AHCI_PORT_TRANS_CFG, reg_base + PORT_TRANS);
 		if (qpriv->is_dmacoherent)
-- 
2.1.0.27.g96db324

^ permalink raw reply related

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sekhar Nori @ 2017-03-09  8:39 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Kevin Hilman, Arnd Bergmann, linux-arm-kernel, Russell King,
	Dmitry Eremin-Solenikov, linux-kernel, linux-ide, Olof Johansson
In-Reply-To: <1fd840c5-b0bb-726b-6357-669977c4ae5f@ti.com>

Hi Bartlomiej,

On Wednesday 08 March 2017 08:30 PM, Sekhar Nori wrote:

>> It took a while to get to it but here is the draft driver patch
>> against v4.11-rc1.  Please test.
> 
> I tested this on DM6446 EVM. I was able to mount existing partitions on 
> the hard disk and see that the directory listing looks good[1]. I will do 
> more tests (including comparing performance with old driver) tomorrow. I 

I completed the tests I wanted to, including some read/write/data 
integrity tests. Performance is same as before too.

Tested-by: Sekhar Nori <nsekhar@ti.com>

Here are the additional changes I did. These changes do not clash with 
what I have already queued for v4.12. That said, its probably better if 
I carry the platform pieces through my tree. Let me know how you want 
to proceed.

Thanks,
Sekhar

---8<---
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig
index b9a7cb98ffda..67db82999c06 100644
--- a/arch/arm/configs/davinci_all_defconfig
+++ b/arch/arm/configs/davinci_all_defconfig
@@ -74,12 +74,10 @@ CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=1
 CONFIG_BLK_DEV_RAM_SIZE=32768
 CONFIG_EEPROM_AT24=y
-CONFIG_IDE=m
-CONFIG_BLK_DEV_PALMCHIP_BK3710=m
-CONFIG_SCSI=m
 CONFIG_BLK_DEV_SD=m
 CONFIG_ATA=m
 CONFIG_AHCI_DA850=m
+CONFIG_PATA_BK3710=m
 CONFIG_NETDEVICES=y
 CONFIG_NETCONSOLE=y
 CONFIG_TUN=m
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index 023480b75244..60a1f23890cd 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device *phydev)
 	return 0;
 }
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)
 
 #define HAS_NOR		IS_ENABLED(CONFIG_MTD_PHYSMAP)
 
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
index f702d4fc8eb8..589f3c33c4a0 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -119,7 +119,7 @@ static struct platform_device davinci_nand_device = {
 	},
 };
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)
 
 #ifdef CONFIG_I2C
 /* CPLD Register 0 bits to control ATA */
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c
index 0a7838852649..075e304ce7be 100644
--- a/arch/arm/mach-davinci/board-neuros-osd2.c
+++ b/arch/arm/mach-davinci/board-neuros-osd2.c
@@ -163,7 +163,7 @@ static struct davinci_mmc_config davinci_ntosd2_mmc_config = {
 	.wires		= 4,
 };
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)
 
 #define HAS_NAND	IS_ENABLED(CONFIG_MTD_NAND_DAVINCI)
 


^ permalink raw reply related

* [PATCH] sh: cayman: IDE support fix
From: Bartlomiej Zolnierkiewicz @ 2017-03-08 16:46 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Yoshinori Sato, Rich Felker, linux-sh, linux-ide, linux-kernel
In-Reply-To: <CGME20170308164645epcas5p12a4884b620557266609e1b941f7ba938@epcas5p1.samsung.com>

Remove incorrect CONFIG_IDE ifdef (CONFIG_IDE config option
is for internal drivers/ide/ use) and make IDE hardware
interface always initialized (not only when IDE subsystem
is built-in).

This patch allows Cayman board to work with modular IDE
subsystem support and removes the requirement of having
the whole core IDE subsystem built-in when using libata
PATA support.

Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Rich Felker <dalias@libc.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
Untested.

 arch/sh/boards/mach-cayman/setup.c |    2 --
 1 file changed, 2 deletions(-)

Index: b/arch/sh/boards/mach-cayman/setup.c
===================================================================
--- a/arch/sh/boards/mach-cayman/setup.c	2017-03-08 17:42:01.641323406 +0100
+++ b/arch/sh/boards/mach-cayman/setup.c	2017-03-08 17:42:01.637323406 +0100
@@ -128,7 +128,6 @@ static int __init smsc_superio_setup(voi
 	SMSC_SUPERIO_WRITE_INDEXED(1, SMSC_PRIMARY_INT_INDEX);
 	SMSC_SUPERIO_WRITE_INDEXED(12, SMSC_SECONDARY_INT_INDEX);
 
-#ifdef CONFIG_IDE
 	/*
 	 * Only IDE1 exists on the Cayman
 	 */
@@ -158,7 +157,6 @@ static int __init smsc_superio_setup(voi
 	SMSC_SUPERIO_WRITE_INDEXED(0x01, 0xc5); /* GP45 = IDE1_IRQ */
 	SMSC_SUPERIO_WRITE_INDEXED(0x00, 0xc6); /* GP46 = nIOROP */
 	SMSC_SUPERIO_WRITE_INDEXED(0x00, 0xc7); /* GP47 = nIOWOP */
-#endif
 
 	/* Exit the configuration state */
 	outb(SMSC_EXIT_CONFIG_KEY, SMSC_CONFIG_PORT_ADDR);


^ permalink raw reply

* Re: [RFT PATCH] mips: workpad_defconfig: convert to use libata PATA drivers
From: Bartlomiej Zolnierkiewicz @ 2017-03-08 16:04 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips, linux-ide, linux-kernel
In-Reply-To: <1442245918-27631-17-git-send-email-b.zolnierkie@samsung.com>


Hi Ralf,

When patches converting MIPS defconfigs to libata PATA were
applied this one got lost somehow. Please consider merging
(it applies fine to v4.11-rc1).

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

On Monday, September 14, 2015 05:51:58 PM Bartlomiej Zolnierkiewicz wrote:
> IDE subsystem has been deprecated since 2009 and the majority
> (if not all) of Linux distributions have switched to use
> libata for ATA support exclusively.  However there are still
> some users (mostly old or/and embedded non-x86 systems) that
> have not converted from using IDE subsystem to libata PATA
> drivers.  This doesn't seem to be good thing in the long-term
> for Linux as while there is less and less PATA systems left
> in use:
> 
> * testing efforts are divided between two subsystems
> 
> * having duplicate drivers for same hardware confuses users
> 
> This patch converts workpad_defconfig to use libata PATA
> drivers.
> 
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> ---
> Build tested only.
> If you have affected hardware please test.  Thank you.
> 
>  arch/mips/configs/workpad_defconfig | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/mips/configs/workpad_defconfig b/arch/mips/configs/workpad_defconfig
> index ee4b2be..1b556cd 100644
> --- a/arch/mips/configs/workpad_defconfig
> +++ b/arch/mips/configs/workpad_defconfig
> @@ -28,10 +28,10 @@ CONFIG_IP_MULTICAST=y
>  # CONFIG_IPV6 is not set
>  CONFIG_NETWORK_SECMARK=y
>  CONFIG_BLK_DEV_RAM=m
> -# CONFIG_MISC_DEVICES is not set
> -CONFIG_IDE=y
> -CONFIG_BLK_DEV_IDECS=m
> -CONFIG_IDE_GENERIC=y
> +CONFIG_BLK_DEV_SD=y
> +CONFIG_ATA=y
> +CONFIG_PATA_PCMCIA=m
> +CONFIG_PATA_LEGACY=y
>  CONFIG_NETDEVICES=y
>  # CONFIG_NETDEV_1000 is not set
>  # CONFIG_NETDEV_10000 is not set


^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Sekhar Nori @ 2017-03-08 15:00 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Russell King, Arnd Bergmann, Dmitry Eremin-Solenikov,
	Kevin Hilman, linux-kernel, linux-ide, Olof Johansson,
	linux-arm-kernel
In-Reply-To: <1709119.SQyio4Ct6n@amdc3058>

On Tuesday 07 March 2017 11:21 PM, Bartlomiej Zolnierkiewicz wrote:
> 
> Hi,
> 
> On Monday, December 12, 2016 07:24:47 PM Sekhar Nori wrote:
>> Hi Bartlomiej,
>>
>> On Monday 12 December 2016 06:15 PM, Bartlomiej Zolnierkiewicz wrote:
>>>
>>> Hi,
>>>
>>> On Monday, July 18, 2016 08:15:08 PM Sekhar Nori wrote:
>>>> On Friday 15 July 2016 08:45 PM, Kevin Hilman wrote:
>>>>> Arnd Bergmann <arnd@arndb.de> writes:
>>>>>
>>>>>> On Wednesday, July 13, 2016 12:59:23 PM CEST Bartlomiej Zolnierkiewicz wrote:
>>>>>>>
>>>>>>> On Friday, July 08, 2016 10:23:48 PM Arnd Bergmann wrote:
>>>>>>>> On Friday, July 8, 2016 5:24:41 PM CEST Bartlomiej Zolnierkiewicz wrote:
>>>>>>>>> This patch disables deprecated IDE subsystem in assabet_defconfig
>>>>>>>>> (no IDE host drivers are selected in this config so there is no
>>>>>>>>> valid reason to enable IDE subsystem itself).
>>>>>>>>>
>>>>>>>>> Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>>>>>>>>> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
>>>>>>>>
>>>>>>>> I think the series makes a lot of sense. I have checked your assertions
>>>>>>>> in the changelogs and found no flaws in your logic, so I think we should
>>>>>>>> take them all through arm-soc unless there are other concerns.
>>>>>>>
>>>>>>> Thank you.
>>>>>>>
>>>>>>> Should I resend everything or just patches that were not reposted yet
>>>>>>> (the ones that were marked as RFT initially and got no feedback)?
>>>>>>
>>>>>> I'd be fine with just getting a pull request with all the patches that
>>>>>> had no negative feedback and that were not already applied (if any).
>>>>>>
>>>>>>>> Do you have a list of ARM defconfigs that keep using CONFIG_IDE and
>>>>>>>> how you determined that they need it?
>>>>>>>
>>>>>>> The only such defconfig is davinci_all_defconfig which uses
>>>>>>> palm_bk3710 host driver (CONFIG_BLK_DEV_PALMCHIP_BK3710).
>>>>>>>
>>>>>>>> I know that ARCH_RPC/ARCH_ACORN has a couple of special drivers that
>>>>>>>> have no libata replacement, are there any others like that, or are
>>>>>>>> they all platforms that should in theory work with libata but need
>>>>>>>> testing?
>>>>>>>
>>>>>>> All platforms except ARCH_ACORN, ARCH_DAVINCI & ARCH_RPC should work
>>>>>>> with libata.
>>>>>>
>>>>>> Adding Sekhar and Kevin for DaVinci: At first sight, palm_bk3710 looks
>>>>>> fairly straightforward (meaning someone has to do a few day's work)
>>>>>> to convert into a libata driver.
>>>>>>
>>>>>> As this is on on-chip controller that is part of a dm644x and dm646x,
>>>>>> it should also not be hard to test (as long as someone can find
>>>>>> a hard drive to plug in).
>>>>>
>>>>> I have a hard drive, but don't have any dm64xx hardware anymore to test
>>>>> this.  My last working dm644x board died last year.
>>>>
>>>> I have a working DM6446 EVM. I was able to connect a hard drive to it
>>>> and do some basic tests with v4.6 kernel.
>>>>
>>>> I will look into converting the driver to libata. Might take some time
>>>> because this is unfamiliar territory for me.
>>>
>>> Do you need some help with it?
>>>
>>> I can provide you with draft driver patch if you want.
>>
>> A draft driver patch will really help. I can test/debug. Otherwise, not
>> sure when I will really be able to get to this.
> 
> It took a while to get to it but here is the draft driver patch
> against v4.11-rc1.  Please test.

I tested this on DM6446 EVM. I was able to mount existing partitions on 
the hard disk and see that the directory listing looks good[1]. I will do 
more tests (including comparing performance with old driver) tomorrow. I 
did not have to do much to get it work[2]. Great job! Thanks!

I did see a warning reported during the build[3].

Regards,
Sekhar

[1] http://pastebin.ubuntu.com/24139206/

[2] The only patch I had to apply is (similar change required in couple
of other places too):

diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index 023480b75244..60a1f23890cd 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -744,7 +744,7 @@ static int davinci_phy_fixup(struct phy_device *phydev)
 	return 0;
 }
 
-#define HAS_ATA		IS_ENABLED(CONFIG_BLK_DEV_PALMCHIP_BK3710)
+#define HAS_ATA		IS_ENABLED(CONFIG_PATA_BK3710)
 
 #define HAS_NOR		IS_ENABLED(CONFIG_MTD_PHYSMAP)
 
[3]

drivers/ata/pata_bk3710.c: In function 'pata_bk3710_set_piomode':
drivers/ata/pata_bk3710.c:223:5: warning: 'cycle_time' may be used uninitialized in this function [-Wmaybe-uninitialized]
  if (!cycle_time)
     ^

^ permalink raw reply related

* [tj-libata:for-4.12 3/3] drivers/ata/libahci.c:293:23: warning: format '%x' expects argument of type 'unsigned int', but argument 3 has type 'long unsigned int'
From: kbuild test robot @ 2017-03-08  0:05 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: kbuild-all, linux-ide, Tejun Heo

[-- Attachment #1: Type: text/plain, Size: 11604 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git for-4.12
head:   b2a4b7862d6ba5c90746fc625e494b8ec5937fa1
commit: b2a4b7862d6ba5c90746fc625e494b8ec5937fa1 [3/3] ata: allow subsystem to be used on m32r and s390 archs
config: m32r-allyesconfig (attached as .config)
compiler: m32r-linux-gcc (GCC) 6.2.0
reproduce:
        wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout b2a4b7862d6ba5c90746fc625e494b8ec5937fa1
        # save the attached .config to linux build tree
        make.cross ARCH=m32r 

All warnings (new ones prefixed by >>):

   drivers/ata/libahci.c: In function 'ahci_show_port_cmd':
>> drivers/ata/libahci.c:293:23: warning: format '%x' expects argument of type 'unsigned int', but argument 3 has type 'long unsigned int' [-Wformat=]
     ret = sprintf(buf, "%x\n", readl(port_mmio + PORT_CMD));
                          ^
--
   In file included from drivers/ata/sata_dwc_460ex.c:32:0:
   drivers/ata/sata_dwc_460ex.c: In function 'sata_dwc_dma_xfer_complete':
>> drivers/ata/sata_dwc_460ex.c:762:5: warning: format '%x' expects argument of type 'unsigned int', but argument 8 has type 'long unsigned int' [-Wformat=]
        "%s tag=%u cmd=0x%02x dma dir=%s proto=%s dmacr=0x%08x\n",
        ^
   include/linux/device.h:1318:51: note: in definition of macro 'dev_info'
    #define dev_info(dev, fmt, arg...) _dev_info(dev, fmt, ##arg)
                                                      ^~~
   drivers/ata/sata_dwc_460ex.c:773:60: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
        "%s DMA protocol RX and TX DMA not pending dmacr: 0x%08x\n",
                                                               ^
   In file included from include/linux/printk.h:329:0,
                    from include/linux/kernel.h:13,
                    from drivers/ata/sata_dwc_460ex.c:30:
   drivers/ata/sata_dwc_460ex.c: In function 'sata_dwc_enable_interrupts':
   drivers/ata/sata_dwc_460ex.c:827:22: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'long unsigned int' [-Wformat=]
     dev_dbg(hsdev->dev, "%s: INTMR = 0x%08x, ERRMR = 0x%08x\n",
                         ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
>> drivers/ata/sata_dwc_460ex.c:827:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(hsdev->dev, "%s: INTMR = 0x%08x, ERRMR = 0x%08x\n",
     ^~~~~~~
   drivers/ata/sata_dwc_460ex.c:827:22: warning: format '%x' expects argument of type 'unsigned int', but argument 6 has type 'long unsigned int' [-Wformat=]
     dev_dbg(hsdev->dev, "%s: INTMR = 0x%08x, ERRMR = 0x%08x\n",
                         ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
>> drivers/ata/sata_dwc_460ex.c:827:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(hsdev->dev, "%s: INTMR = 0x%08x, ERRMR = 0x%08x\n",
     ^~~~~~~
--
   In file included from include/linux/printk.h:329:0,
                    from include/linux/kernel.h:13,
                    from include/linux/ata.h:32,
                    from drivers/ata/pata_arasan_cf.c:24:
   drivers/ata/pata_arasan_cf.c: In function 'cf_dumpregs':
>> drivers/ata/pata_arasan_cf.c:231:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": CFI_STS: %x", readl(acdev->vbase + CFI_STS));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
>> drivers/ata/pata_arasan_cf.c:231:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": CFI_STS: %x", readl(acdev->vbase + CFI_STS));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:232:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": IRQ_STS: %x", readl(acdev->vbase + IRQ_STS));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:232:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": IRQ_STS: %x", readl(acdev->vbase + IRQ_STS));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:233:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": IRQ_EN: %x", readl(acdev->vbase + IRQ_EN));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:233:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": IRQ_EN: %x", readl(acdev->vbase + IRQ_EN));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:234:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": OP_MODE: %x", readl(acdev->vbase + OP_MODE));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:234:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": OP_MODE: %x", readl(acdev->vbase + OP_MODE));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:235:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": CLK_CFG: %x", readl(acdev->vbase + CLK_CFG));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:235:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": CLK_CFG: %x", readl(acdev->vbase + CLK_CFG));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:236:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": TM_CFG: %x", readl(acdev->vbase + TM_CFG));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:236:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": TM_CFG: %x", readl(acdev->vbase + TM_CFG));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:237:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": XFER_CTR: %x", readl(acdev->vbase + XFER_CTR));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:237:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": XFER_CTR: %x", readl(acdev->vbase + XFER_CTR));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:238:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": GIRQ_STS: %x", readl(acdev->vbase + GIRQ_STS));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:238:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": GIRQ_STS: %x", readl(acdev->vbase + GIRQ_STS));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:239:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": GIRQ_STS_EN: %x", readl(acdev->vbase + GIRQ_STS_EN));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:239:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": GIRQ_STS_EN: %x", readl(acdev->vbase + GIRQ_STS_EN));
     ^~~~~~~
   drivers/ata/pata_arasan_cf.c:240:15: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
     dev_dbg(dev, ": GIRQ_SGN_EN: %x", readl(acdev->vbase + GIRQ_SGN_EN));
                  ^
   include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   drivers/ata/pata_arasan_cf.c:240:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(dev, ": GIRQ_SGN_EN: %x", readl(acdev->vbase + GIRQ_SGN_EN));
     ^~~~~~~

vim +293 drivers/ata/libahci.c

365cfa1e Anton Vorontsov 2010-03-28  277  	struct Scsi_Host *shost = class_to_shost(dev);
365cfa1e Anton Vorontsov 2010-03-28  278  	struct ata_port *ap = ata_shost_to_port(shost);
365cfa1e Anton Vorontsov 2010-03-28  279  	struct ahci_host_priv *hpriv = ap->host->private_data;
365cfa1e Anton Vorontsov 2010-03-28  280  
8ea909cb Mika Westerberg 2016-02-18  281  	return sprintf(buf, "%x\n", hpriv->version);
365cfa1e Anton Vorontsov 2010-03-28  282  }
365cfa1e Anton Vorontsov 2010-03-28  283  
365cfa1e Anton Vorontsov 2010-03-28  284  static ssize_t ahci_show_port_cmd(struct device *dev,
365cfa1e Anton Vorontsov 2010-03-28  285  				  struct device_attribute *attr, char *buf)
365cfa1e Anton Vorontsov 2010-03-28  286  {
365cfa1e Anton Vorontsov 2010-03-28  287  	struct Scsi_Host *shost = class_to_shost(dev);
365cfa1e Anton Vorontsov 2010-03-28  288  	struct ata_port *ap = ata_shost_to_port(shost);
365cfa1e Anton Vorontsov 2010-03-28  289  	void __iomem *port_mmio = ahci_port_base(ap);
bb03c640 Mika Westerberg 2016-02-18  290  	ssize_t ret;
365cfa1e Anton Vorontsov 2010-03-28  291  
bb03c640 Mika Westerberg 2016-02-18  292  	ahci_rpm_get_port(ap);
bb03c640 Mika Westerberg 2016-02-18 @293  	ret = sprintf(buf, "%x\n", readl(port_mmio + PORT_CMD));
bb03c640 Mika Westerberg 2016-02-18  294  	ahci_rpm_put_port(ap);
bb03c640 Mika Westerberg 2016-02-18  295  
bb03c640 Mika Westerberg 2016-02-18  296  	return ret;
365cfa1e Anton Vorontsov 2010-03-28  297  }
365cfa1e Anton Vorontsov 2010-03-28  298  
c0623166 Harry Zhang     2010-04-23  299  static ssize_t ahci_read_em_buffer(struct device *dev,
c0623166 Harry Zhang     2010-04-23  300  				   struct device_attribute *attr, char *buf)
c0623166 Harry Zhang     2010-04-23  301  {

:::::: The code at line 293 was first introduced by commit
:::::: bb03c640697155639b2e15e2aaa4c10f60bf0d5e ahci: Add functions to manage runtime PM of AHCI ports

:::::: TO: Mika Westerberg <mika.westerberg@linux.intel.com>
:::::: CC: Tejun Heo <tj@kernel.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 41654 bytes --]

^ permalink raw reply

* Re: [PATCH] ata: allow subsystem to be used on m32r and s390 archs
From: Tejun Heo @ 2017-03-07 19:26 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Christoph Hellwig, Martin Schwidefsky, Heiko Carstens, linux-ide,
	linux-s390, linux-kernel
In-Reply-To: <2339253.11Ms71o855@amdc3058>

On Tue, Mar 07, 2017 at 02:56:40PM +0100, Bartlomiej Zolnierkiewicz wrote:
> Both archs should work just fine with libata subsystem nowadays.
> 
> Suggested-by: Christoph Hellwig <hch@infradead.org>
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>

Applied to libata/for-4.12.

Thanks.

-- 
tejun

^ permalink raw reply

* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-07 17:51 UTC (permalink / raw)
  To: Sekhar Nori
  Cc: Russell King, Arnd Bergmann, Dmitry Eremin-Solenikov,
	Kevin Hilman, linux-kernel, linux-ide, Olof Johansson,
	linux-arm-kernel
In-Reply-To: <8ea5971a-338d-e8b9-6be8-8fe2658fc04d@ti.com>


Hi,

On Monday, December 12, 2016 07:24:47 PM Sekhar Nori wrote:
> Hi Bartlomiej,
> 
> On Monday 12 December 2016 06:15 PM, Bartlomiej Zolnierkiewicz wrote:
> > 
> > Hi,
> > 
> > On Monday, July 18, 2016 08:15:08 PM Sekhar Nori wrote:
> >> On Friday 15 July 2016 08:45 PM, Kevin Hilman wrote:
> >>> Arnd Bergmann <arnd@arndb.de> writes:
> >>>
> >>>> On Wednesday, July 13, 2016 12:59:23 PM CEST Bartlomiej Zolnierkiewicz wrote:
> >>>>>
> >>>>> On Friday, July 08, 2016 10:23:48 PM Arnd Bergmann wrote:
> >>>>>> On Friday, July 8, 2016 5:24:41 PM CEST Bartlomiej Zolnierkiewicz wrote:
> >>>>>>> This patch disables deprecated IDE subsystem in assabet_defconfig
> >>>>>>> (no IDE host drivers are selected in this config so there is no
> >>>>>>> valid reason to enable IDE subsystem itself).
> >>>>>>>
> >>>>>>> Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
> >>>>>>> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> >>>>>>
> >>>>>> I think the series makes a lot of sense. I have checked your assertions
> >>>>>> in the changelogs and found no flaws in your logic, so I think we should
> >>>>>> take them all through arm-soc unless there are other concerns.
> >>>>>
> >>>>> Thank you.
> >>>>>
> >>>>> Should I resend everything or just patches that were not reposted yet
> >>>>> (the ones that were marked as RFT initially and got no feedback)?
> >>>>
> >>>> I'd be fine with just getting a pull request with all the patches that
> >>>> had no negative feedback and that were not already applied (if any).
> >>>>
> >>>>>> Do you have a list of ARM defconfigs that keep using CONFIG_IDE and
> >>>>>> how you determined that they need it?
> >>>>>
> >>>>> The only such defconfig is davinci_all_defconfig which uses
> >>>>> palm_bk3710 host driver (CONFIG_BLK_DEV_PALMCHIP_BK3710).
> >>>>>
> >>>>>> I know that ARCH_RPC/ARCH_ACORN has a couple of special drivers that
> >>>>>> have no libata replacement, are there any others like that, or are
> >>>>>> they all platforms that should in theory work with libata but need
> >>>>>> testing?
> >>>>>
> >>>>> All platforms except ARCH_ACORN, ARCH_DAVINCI & ARCH_RPC should work
> >>>>> with libata.
> >>>>
> >>>> Adding Sekhar and Kevin for DaVinci: At first sight, palm_bk3710 looks
> >>>> fairly straightforward (meaning someone has to do a few day's work)
> >>>> to convert into a libata driver.
> >>>>
> >>>> As this is on on-chip controller that is part of a dm644x and dm646x,
> >>>> it should also not be hard to test (as long as someone can find
> >>>> a hard drive to plug in).
> >>>
> >>> I have a hard drive, but don't have any dm64xx hardware anymore to test
> >>> this.  My last working dm644x board died last year.
> >>
> >> I have a working DM6446 EVM. I was able to connect a hard drive to it
> >> and do some basic tests with v4.6 kernel.
> >>
> >> I will look into converting the driver to libata. Might take some time
> >> because this is unfamiliar territory for me.
> > 
> > Do you need some help with it?
> > 
> > I can provide you with draft driver patch if you want.
> 
> A draft driver patch will really help. I can test/debug. Otherwise, not
> sure when I will really be able to get to this.

It took a while to get to it but here is the draft driver patch
against v4.11-rc1.  Please test.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Subject: [PATCH] arm/ata: add Palmchip BK3710 PATA controller driver (v0.1)

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
 arch/arm/mach-davinci/devices.c |    2 
 arch/arm/mach-davinci/dm644x.c  |    2 
 arch/arm/mach-davinci/dm646x.c  |    2 
 drivers/ata/Kconfig             |    9 
 drivers/ata/Makefile            |    1 
 drivers/ata/pata_bk3710.c       |  395 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 408 insertions(+), 3 deletions(-)

Index: b/arch/arm/mach-davinci/devices.c
===================================================================
--- a/arch/arm/mach-davinci/devices.c	2017-03-07 18:42:28.814784061 +0100
+++ b/arch/arm/mach-davinci/devices.c	2017-03-07 18:42:28.810784061 +0100
@@ -94,7 +94,7 @@ static struct resource ide_resources[] =
 static u64 ide_dma_mask = DMA_BIT_MASK(32);
 
 static struct platform_device ide_device = {
-	.name           = "palm_bk3710",
+	.name           = "pata_bk3710",
 	.id             = -1,
 	.resource       = ide_resources,
 	.num_resources  = ARRAY_SIZE(ide_resources),
Index: b/arch/arm/mach-davinci/dm644x.c
===================================================================
--- a/arch/arm/mach-davinci/dm644x.c	2017-03-07 18:42:28.814784061 +0100
+++ b/arch/arm/mach-davinci/dm644x.c	2017-03-07 18:42:28.810784061 +0100
@@ -310,7 +310,7 @@ static struct clk_lookup dm644x_clks[] =
 	CLK("davinci_emac.1", NULL, &emac_clk),
 	CLK("davinci_mdio.0", "fck", &emac_clk),
 	CLK("i2c_davinci.1", NULL, &i2c_clk),
-	CLK("palm_bk3710", NULL, &ide_clk),
+	CLK("pata_bk3710", NULL, &ide_clk),
 	CLK("davinci-mcbsp", NULL, &asp_clk),
 	CLK("dm6441-mmc.0", NULL, &mmcsd_clk),
 	CLK(NULL, "spi", &spi_clk),
Index: b/arch/arm/mach-davinci/dm646x.c
===================================================================
--- a/arch/arm/mach-davinci/dm646x.c	2017-03-07 18:42:28.814784061 +0100
+++ b/arch/arm/mach-davinci/dm646x.c	2017-03-07 18:42:28.810784061 +0100
@@ -358,7 +358,7 @@ static struct clk_lookup dm646x_clks[] =
 	CLK(NULL, "timer0", &timer0_clk),
 	CLK(NULL, "timer1", &timer1_clk),
 	CLK("davinci-wdt", NULL, &timer2_clk),
-	CLK("palm_bk3710", NULL, &ide_clk),
+	CLK("pata_bk3710", NULL, &ide_clk),
 	CLK(NULL, "vpif0", &vpif0_clk),
 	CLK(NULL, "vpif1", &vpif1_clk),
 	CLK(NULL, NULL, NULL),
Index: b/drivers/ata/Kconfig
===================================================================
--- a/drivers/ata/Kconfig	2017-03-07 18:42:28.814784061 +0100
+++ b/drivers/ata/Kconfig	2017-03-07 18:42:28.810784061 +0100
@@ -509,6 +509,15 @@ config PATA_BF54X
 
 	  If unsure, say N.
 
+config PATA_BK3710
+	tristate "Palmchip BK3710 PATA support"
+	depends on ARCH_DAVINCI
+	help
+	  This option enables support for the integrated IDE controller on
+	  the TI DaVinci SoC.
+
+	  If unsure, say N.
+
 config PATA_CMD64X
 	tristate "CMD64x PATA support"
 	depends on PCI
Index: b/drivers/ata/Makefile
===================================================================
--- a/drivers/ata/Makefile	2017-03-07 18:42:28.814784061 +0100
+++ b/drivers/ata/Makefile	2017-03-07 18:42:28.810784061 +0100
@@ -50,6 +50,7 @@ obj-$(CONFIG_PATA_ARTOP)	+= pata_artop.o
 obj-$(CONFIG_PATA_ATIIXP)	+= pata_atiixp.o
 obj-$(CONFIG_PATA_ATP867X)	+= pata_atp867x.o
 obj-$(CONFIG_PATA_BF54X)	+= pata_bf54x.o
+obj-$(CONFIG_PATA_BK3710)	+= pata_bk3710.o
 obj-$(CONFIG_PATA_CMD64X)	+= pata_cmd64x.o
 obj-$(CONFIG_PATA_CS5520)	+= pata_cs5520.o
 obj-$(CONFIG_PATA_CS5530)	+= pata_cs5530.o
Index: b/drivers/ata/pata_bk3710.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ b/drivers/ata/pata_bk3710.c	2017-03-07 18:45:01.758787912 +0100
@@ -0,0 +1,395 @@
+/*
+ * Palmchip BK3710 PATA controller driver
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com
+ *
+ * Based on palm_bk3710.c:
+ *
+ * Copyright (C) 2006 Texas Instruments.
+ * Copyright (C) 2007 MontaVista Software, Inc., <source@mvista.com>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/ioport.h>
+#include <linux/ata.h>
+#include <linux/libata.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <linux/clk.h>
+#include <linux/platform_device.h>
+
+#define DRV_NAME "pata_bk3710"
+#define DRV_VERSION "0.1.0"
+
+#define BK3710_REG_OFFSET	0x1F0
+#define BK3710_CTL_OFFSET	0x3F6
+
+#define BK3710_BMISP		0x02
+#define BK3710_IDETIMP		0x40
+#define BK3710_UDMACTL		0x48
+#define BK3710_MISCCTL		0x50
+#define BK3710_REGSTB		0x54
+#define BK3710_REGRCVR		0x58
+#define BK3710_DATSTB		0x5C
+#define BK3710_DATRCVR		0x60
+#define BK3710_DMASTB		0x64
+#define BK3710_DMARCVR		0x68
+#define BK3710_UDMASTB		0x6C
+#define BK3710_UDMATRP		0x70
+#define BK3710_UDMAENV		0x74
+#define BK3710_IORDYTMP		0x78
+
+static struct scsi_host_template pata_bk3710_sht = {
+	ATA_BMDMA_SHT(DRV_NAME),
+};
+
+static unsigned int ideclk_period; /* in nanoseconds */
+
+struct pata_bk3710_udmatiming {
+	unsigned int rptime;	/* tRP -- Ready to pause time (nsec) */
+	unsigned int cycletime;	/* tCYCTYP2/2 -- avg Cycle Time (nsec) */
+				/* tENV is always a minimum of 20 nsec */
+};
+
+static const struct pata_bk3710_udmatiming pata_bk3710_udmatimings[6] = {
+	{ 160, 240 / 2 },	/* UDMA Mode 0 */
+	{ 125, 160 / 2 },	/* UDMA Mode 1 */
+	{ 100, 120 / 2 },	/* UDMA Mode 2 */
+	{ 100,  90 / 2 },	/* UDMA Mode 3 */
+	{ 100,  60 / 2 },	/* UDMA Mode 4 */
+	{  85,  40 / 2 },	/* UDMA Mode 5 */
+};
+
+static void pata_bk3710_setudmamode(void __iomem *base, unsigned int dev,
+				    unsigned int mode)
+{
+	u32 val32;
+	u16 val16;
+	u8 tenv, trp, t0;
+
+	/* DMA Data Setup */
+	t0 = DIV_ROUND_UP(pata_bk3710_udmatimings[mode].cycletime,
+			  ideclk_period) - 1;
+	tenv = DIV_ROUND_UP(20, ideclk_period) - 1;
+	trp = DIV_ROUND_UP(pata_bk3710_udmatimings[mode].rptime,
+			   ideclk_period) - 1;
+
+	/* udmastb Ultra DMA Access Strobe Width */
+	val32 = ioread32(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t0 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMASTB);
+
+	/* udmatrp Ultra DMA Ready to Pause Time */
+	val32 = ioread32(base + BK3710_UDMATRP) & (0xFF << (dev ? 0 : 8));
+	val32 |= (trp << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMATRP);
+
+	/* udmaenv Ultra DMA envelop Time */
+	val32 = ioread32(base + BK3710_UDMAENV) & (0xFF << (dev ? 0 : 8));
+	val32 |= (tenv << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_UDMAENV);
+
+	/* Enable UDMA for Device */
+	val16 = ioread16(base + BK3710_UDMACTL) | (1 << dev);
+	iowrite16(val16, base + BK3710_UDMACTL);
+}
+
+static void pata_bk3710_setdmamode(void __iomem *base, unsigned int dev,
+				   unsigned short min_cycle,
+				   unsigned int mode)
+{
+	const struct ata_timing *t;
+	int cycletime;
+	u32 val32;
+	u16 val16;
+	u8 td, tkw, t0;
+
+	t = ata_timing_find_mode(mode);
+	cycletime = max_t(int, t->cycle, min_cycle);
+
+	/* DMA Data Setup */
+	t0 = DIV_ROUND_UP(cycletime, ideclk_period);
+	td = DIV_ROUND_UP(t->active, ideclk_period);
+	tkw = t0 - td - 1;
+	td -= 1;
+
+	val32 = ioread32(base + BK3710_DMASTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (td << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DMASTB);
+
+	val32 = ioread32(base + BK3710_DMARCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (tkw << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DMARCVR);
+
+	/* Disable UDMA for Device */
+	val16 = ioread16(base + BK3710_UDMACTL) & ~(1 << dev);
+	iowrite16(val16, base + BK3710_UDMACTL);
+}
+
+static void pata_bk3710_set_dmamode(struct ata_port *ap,
+				    struct ata_device *adev)
+{
+	void __iomem *base = (void __iomem *)ap->ioaddr.bmdma_addr;
+	int is_slave = adev->devno;
+	const u8 xferspeed = adev->dma_mode;
+
+	if (xferspeed >= XFER_UDMA_0)
+		pata_bk3710_setudmamode(base, is_slave,
+					xferspeed - XFER_UDMA_0);
+	else
+		pata_bk3710_setdmamode(base, is_slave,
+				       adev->id[ATA_ID_EIDE_DMA_MIN],
+				       xferspeed);
+}
+
+static void pata_bk3710_setpiomode(void __iomem *base, struct ata_device *pair,
+				   unsigned int dev, unsigned int cycletime,
+				   unsigned int mode)
+{
+	const struct ata_timing *t;
+	u32 val32;
+	u8 t2, t2i, t0;
+
+	t = ata_timing_find_mode(XFER_PIO_0 + mode);
+
+	/* PIO Data Setup */
+	t0 = DIV_ROUND_UP(cycletime, ideclk_period);
+	t2 = DIV_ROUND_UP(t->active, ideclk_period);
+
+	t2i = t0 - t2 - 1;
+	t2 -= 1;
+
+	val32 = ioread32(base + BK3710_DATSTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DATSTB);
+
+	val32 = ioread32(base + BK3710_DATRCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2i << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_DATRCVR);
+
+	/* FIXME: this is broken also in the old driver */
+	if (pair) {
+		u8 mode2 = pair->pio_mode - XFER_PIO_0;
+
+		if (mode2 < mode)
+			mode = mode2;
+	}
+
+	/* TASKFILE Setup */
+	t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period);
+	t2 = DIV_ROUND_UP(t->act8b, ideclk_period);
+
+	t2i = t0 - t2 - 1;
+	t2 -= 1;
+
+	val32 = ioread32(base + BK3710_REGSTB) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2 << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_REGSTB);
+
+	val32 = ioread32(base + BK3710_REGRCVR) & (0xFF << (dev ? 0 : 8));
+	val32 |= (t2i << (dev ? 8 : 0));
+	iowrite32(val32, base + BK3710_REGRCVR);
+}
+
+static void pata_bk3710_set_piomode(struct ata_port *ap,
+				    struct ata_device *adev)
+{
+	void __iomem *base = (void __iomem *)ap->ioaddr.bmdma_addr;
+	struct ata_device *pair = ata_dev_pair(adev);
+	const struct ata_timing *t = ata_timing_find_mode(adev->pio_mode);
+	const u16 *id = adev->id;
+	unsigned int cycle_time;
+	int is_slave = adev->devno;
+	const u8 pio = adev->pio_mode - XFER_PIO_0;
+
+	if (id[ATA_ID_FIELD_VALID] & 2) {
+		if (ata_id_has_iordy(id))
+			cycle_time = id[ATA_ID_EIDE_PIO_IORDY];
+		else
+			cycle_time = id[ATA_ID_EIDE_PIO];
+
+		/* conservative "downgrade" for all pre-ATA2 drives */
+		if (pio < 3 && cycle_time < t->cycle)
+			cycle_time = 0; /* use standard timing */
+	}
+
+	if (!cycle_time)
+		cycle_time = t->cycle;
+
+	pata_bk3710_setpiomode(base, pair, is_slave, cycle_time, pio);
+}
+
+static void pata_bk3710_chipinit(void __iomem *base)
+{
+	/*
+	 * REVISIT:  the ATA reset signal needs to be managed through a
+	 * GPIO, which means it should come from platform_data.  Until
+	 * we get and use such information, we have to trust that things
+	 * have been reset before we get here.
+	 */
+
+	/*
+	 * Program the IDETIMP Register Value based on the following assumptions
+	 *
+	 * (ATA_IDETIMP_IDEEN		, ENABLE ) |
+	 * (ATA_IDETIMP_PREPOST1	, DISABLE) |
+	 * (ATA_IDETIMP_PREPOST0	, DISABLE) |
+	 *
+	 * DM6446 silicon rev 2.1 and earlier have no observed net benefit
+	 * from enabling prefetch/postwrite.
+	 */
+	iowrite16(BIT(15), base + BK3710_IDETIMP);
+
+	/*
+	 * UDMACTL Ultra-ATA DMA Control
+	 * (ATA_UDMACTL_UDMAP1	, 0 ) |
+	 * (ATA_UDMACTL_UDMAP0	, 0 )
+	 *
+	 */
+	iowrite16(0, base + BK3710_UDMACTL);
+
+	/*
+	 * MISCCTL Miscellaneous Conrol Register
+	 * (ATA_MISCCTL_HWNHLD1P	, 1 cycle)
+	 * (ATA_MISCCTL_HWNHLD0P	, 1 cycle)
+	 * (ATA_MISCCTL_TIMORIDE	, 1)
+	 */
+	iowrite32(0x001, base + BK3710_MISCCTL);
+
+	/*
+	 * IORDYTMP IORDY Timer for Primary Register
+	 * (ATA_IORDYTMP_IORDYTMP     , 0xffff  )
+	 */
+	iowrite32(0xFFFF, base + BK3710_IORDYTMP);
+
+	/*
+	 * 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);
+
+	pata_bk3710_setpiomode(base, NULL, 0, 600, 0);
+	pata_bk3710_setpiomode(base, NULL, 1, 600, 0);
+}
+
+static struct ata_port_operations pata_bk3710_ports_ops = {
+	.inherits		= &ata_bmdma_port_ops,
+	.cable_detect		= ata_cable_80wire,
+
+	.set_piomode		= pata_bk3710_set_piomode,
+	.set_dmamode		= pata_bk3710_set_dmamode,
+};
+
+static int __init pata_bk3710_probe(struct platform_device *pdev)
+{
+	struct clk *clk;
+	struct resource *mem, *irq;
+	struct ata_host *host;
+	struct ata_port *ap;
+	void __iomem *base;
+	unsigned long rate, mem_size;
+
+	clk = 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;
+	}
+
+	irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+	if (irq == NULL) {
+		pr_err(DRV_NAME ": failed to get IRQ resource\n");
+		return -ENODEV;
+	}
+
+	mem_size = resource_size(mem);
+	if (!devm_request_mem_region(&pdev->dev, mem->start, mem_size,
+				     DRV_NAME)) {
+		pr_err(DRV_NAME ": failed to request memory region\n");
+		return -EBUSY;
+	}
+
+	base = ioremap(mem->start, mem_size);
+	if (!base) {
+		pr_err(DRV_NAME ": failed to map IO memory\n");
+		return -ENOMEM;
+	}
+
+	/* Configure the Palm Chip controller */
+	pata_bk3710_chipinit(base);
+
+	/* allocate host */
+	host = ata_host_alloc(&pdev->dev, 1);
+	if (!host)
+		return -ENOMEM;
+	ap = host->ports[0];
+
+	ap->ops = &pata_bk3710_ports_ops;
+	ap->pio_mask = ATA_PIO4;
+	ap->mwdma_mask = ATA_MWDMA2;
+	ap->udma_mask = rate < 100000000 ? ATA_UDMA4 : ATA_UDMA5;
+	ap->flags |= ATA_FLAG_SLAVE_POSS;
+
+	ap->ioaddr.data_addr		= base + BK3710_REG_OFFSET;
+	ap->ioaddr.error_addr		= base + BK3710_REG_OFFSET + 1;
+	ap->ioaddr.feature_addr		= base + BK3710_REG_OFFSET + 1;
+	ap->ioaddr.nsect_addr		= base + BK3710_REG_OFFSET + 2;
+	ap->ioaddr.lbal_addr		= base + BK3710_REG_OFFSET + 3;
+	ap->ioaddr.lbam_addr		= base + BK3710_REG_OFFSET + 4;
+	ap->ioaddr.lbah_addr		= base + BK3710_REG_OFFSET + 5;
+	ap->ioaddr.device_addr		= base + BK3710_REG_OFFSET + 6;
+	ap->ioaddr.status_addr		= base + BK3710_REG_OFFSET + 7;
+	ap->ioaddr.command_addr		= base + BK3710_REG_OFFSET + 7;
+
+	ap->ioaddr.altstatus_addr	= base + BK3710_CTL_OFFSET;
+	ap->ioaddr.ctl_addr		= base + BK3710_CTL_OFFSET;
+
+	ap->ioaddr.bmdma_addr		= base;
+
+	ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx",
+		      (unsigned long)base + BK3710_REG_OFFSET,
+		      (unsigned long)base + BK3710_CTL_OFFSET);
+
+	/* activate */
+	return ata_host_activate(host, irq->start, ata_sff_interrupt, 0,
+				 &pata_bk3710_sht);
+}
+
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:pata_bk3710");
+
+static struct platform_driver pata_bk3710_driver = {
+	.driver = {
+		.name = "pata_bk3710",
+	},
+};
+
+static int __init pata_bk3710_init(void)
+{
+	return platform_driver_probe(&pata_bk3710_driver, pata_bk3710_probe);
+}
+
+module_init(pata_bk3710_init);
+MODULE_LICENSE("GPL");

^ permalink raw reply

* With due respect
From: U B A @ 2017-03-07 15:47 UTC (permalink / raw)


Base on the last email i sent to you, I wish to bring to your notice
that i am still waiting patiently for your response. Mrs. Anna
Johnson.

^ permalink raw reply

* [PATCH] ata: allow subsystem to be used on m32r and s390 archs
From: Bartlomiej Zolnierkiewicz @ 2017-03-07 13:56 UTC (permalink / raw)
  To: Tejun Heo
  Cc: Christoph Hellwig, Martin Schwidefsky, Heiko Carstens, linux-ide,
	linux-s390, linux-kernel
In-Reply-To: <CGME20170307135643epcas1p257e7a1e1410a498343b8a6b425df65f2@epcas1p2.samsung.com>

Both archs should work just fine with libata subsystem nowadays.

Suggested-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
Cross compile tested.

 drivers/ata/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 70b57d2..7e0fc98 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -14,7 +14,6 @@ menuconfig ATA
 	tristate "Serial ATA and Parallel ATA drivers (libata)"
 	depends on HAS_IOMEM
 	depends on BLOCK
-	depends on !(M32R || S390) || BROKEN
 	select SCSI
 	select GLOB
 	---help---
-- 
1.9.1



^ permalink raw reply related

* Re:[報價]交換式電源詢價 12V 3A 40K報價
From: Lin @ 2017-03-07  8:09 UTC (permalink / raw)
  To: linux-ide

收到你的回覆了,
採購你好:

很高興從B2B網站上得知你的信息,
了解你正在尋找「電源製造」的供應商,
我們公司有卓越的研發團隊及製造生產流程,
並且在生產交換式電源供應器、USB充電器、POE供電的經驗非常豐富,
歡迎與我聯絡,謝謝

吉密科技
林榮宗
+886-4-22587996 分機3101
gme.power@msa.hinet.net

如寄錯請轉交,謝謝

^ permalink raw reply

* Re: [PATCH] libata: transport: Remove circular dependency at free time
From: Tejun Heo @ 2017-03-06 20:26 UTC (permalink / raw)
  To: Sergei Shtylyov; +Cc: Gwendal Grignou, gregkh, linux-ide
In-Reply-To: <ebcbf109-729f-bb2f-f65e-b16765776996@cogentembedded.com>

On Mon, Mar 06, 2017 at 11:11:53PM +0300, Sergei Shtylyov wrote:
> > The ata_tranport device objects actually do not need to explicitly
> 
>    Still tranport? :-/

Oops, fixed.

Thanks.

-- 
tejun

^ permalink raw reply

* Re: [PATCH] Delete redundant return value check of platform_get_resource()
From: Tejun Heo @ 2017-03-06 20:41 UTC (permalink / raw)
  To: Belen Sarabia; +Cc: linux-ide, linux-kernel
In-Reply-To: <20170227214118.GA2895@belen-VirtualBox>

On Mon, Feb 27, 2017 at 10:41:18PM +0100, Belen Sarabia wrote:
> Delete error handling from the result of a call to platform_get_resource()
> when the value is immediately passed to devm_ioremap_resource().
> 
> Signed-off-by: Belen Sarabia <belensarabia@gmail.com>

Applied to libata/for-4.12.

Thanks.

-- 
tejun

^ permalink raw reply

* Re: ata: WARNING in ata_sff_qc_issue
From: Tejun Heo @ 2017-03-06 20:32 UTC (permalink / raw)
  To: Dmitry Vyukov; +Cc: linux-ide, LKML, syzkaller
In-Reply-To: <CACT4Y+bXkvevNZU8uP6X0QVqsj6wNoUA_1exfTSOzc+SmUtMOA@mail.gmail.com>

Hello,

Applied the following to libata/for-4.11-fixes.

Thanks.

------ 8< ------
>From 0580b762a4d6b70817476b90042813f8573283fa Mon Sep 17 00:00:00 2001
From: Tejun Heo <tj@kernel.org>
Date: Mon, 6 Mar 2017 15:26:54 -0500
Subject: [PATCH] libata: drop WARN from protocol error in ata_sff_qc_issue()

ata_sff_qc_issue() expects upper layers to never issue commands on a
command protocol that it doesn't implement.  While the assumption
holds fine with the usual IO path, nothing filters based on the
command protocol in the passthrough path (which was added later),
allowing the warning to be tripped with a passthrough command with the
right (well, wrong) protocol.

Failing with AC_ERR_SYSTEM is the right thing to do anyway.  Remove
the unnecessary WARN.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Link: http://lkml.kernel.org/r/CACT4Y+bXkvevNZU8uP6X0QVqsj6wNoUA_1exfTSOzc+SmUtMOA@mail.gmail.com
Signed-off-by: Tejun Heo <tj@kernel.org>
---
 drivers/ata/libata-sff.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 2bd92dc..274d6d7 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -1482,7 +1482,6 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc)
 		break;
 
 	default:
-		WARN_ON_ONCE(1);
 		return AC_ERR_SYSTEM;
 	}
 
-- 
2.9.3

^ permalink raw reply related

* Re: [PATCH] ata: constify of_device_id structures
From: Tejun Heo @ 2017-03-06 20:18 UTC (permalink / raw)
  To: Bhumika Goyal; +Cc: julia.lawall, b.zolnierkie, linux-ide, linux-kernel
In-Reply-To: <1488396808-12332-1-git-send-email-bhumirks@gmail.com>

On Thu, Mar 02, 2017 at 01:03:28AM +0530, Bhumika Goyal wrote:
> Declare of_device_id structures as const as they are either passed to
> the macro MODULE_DEVICE_TABLE or stored in the of_match_table field of a
> device_driver structure. This field is of type const, so of_device_id
> structures having this property can be made const too.
> 
> Cross compiled the files drivers/ata/pata_macio.c and
> drivers/ata/pata_mpc52xx.c for powerpc architecture.
> 
> Signed-off-by: Bhumika Goyal <bhumirks@gmail.com>

Applied to libata/for-4.12.

Thanks.

-- 
tejun

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox