* [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 3/3] ARM: davinci_all_defconfig: convert to use libata PATA
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 13:01 UTC (permalink / raw)
To: Tejun Heo
Cc: Sekhar Nori, Sergei Shtylyov, Kevin Hilman, Arnd Bergmann,
Russell King, Dmitry Eremin-Solenikov, linux-ide,
linux-arm-kernel, linux-kernel, b.zolnierkie
In-Reply-To: <1489064496-6270-1-git-send-email-b.zolnierkie@samsung.com>
From: Sekhar Nori <nsekhar@ti.com>
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 davinci_all_defconfig to use libata PATA
drivers.
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
[b.zolnierkie: split from bigger patch + added patch description]
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
arch/arm/configs/davinci_all_defconfig | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig
index c8663ea..93aab3d 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
--
1.9.1
^ permalink raw reply related
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Russell King - ARM Linux @ 2017-03-09 13:57 UTC (permalink / raw)
To: Sergei Shtylyov
Cc: Arnd Bergmann, Bartlomiej Zolnierkiewicz, Dmitry Eremin-Solenikov,
Kevin Hilman, Sekhar Nori, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <a8eab3b1-8867-00dd-08e4-bcece23010a6@cogentembedded.com>
On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> 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.
As I keep saying, there are ARM machines where the IDE driver works but
the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
Yes, it's very obscure - but what it comes down to is the silly way the
"ISA" IO is handled on the platform (which depends whether it's an 8-bit
or 16-bit ISA-style peripheral.) The old IDE CS driver _could_ be bent
to work via a patch like this:
ARM: EBSA110: Enable 16-bit IO type for ide-iops
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 047a20780fc1..2eb501d6b5fe 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -217,7 +217,8 @@ ifeq ($(CONFIG_ARCH_EBSA110),y)
# This is what happens if you forget the IOCS16 line.
# PCMCIA cards stop working.
CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
-export CFLAGS_3c589_cs.o
+CFLAGS_ide-io-std.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
+export CFLAGS_3c589_cs.o CFLAGS_ide-io-std.o
endif
# The byte offset of the kernel image in RAM from the start of RAM.
but the PATA driver is much harder.
That said, the EBSA110 is now a prime museum piece, and towards the
end of the time I was using it, the kernel was becoming more and more
inefficient on the hardware - as in, it appeared it could route
network packets _or_ run userspace, but not both, even with drivers
converted to NAPI.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
^ permalink raw reply related
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 14:42 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Sergei Shtylyov, Arnd Bergmann, Dmitry Eremin-Solenikov,
Kevin Hilman, Sekhar Nori, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <20170309135714.GJ21222@n2100.armlinux.org.uk>
Hi,
On Thursday, March 09, 2017 01:57:15 PM Russell King - ARM Linux wrote:
> On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> > 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.
>
> As I keep saying, there are ARM machines where the IDE driver works but
> the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
Please be more specific, I'll be happy to help with migrating this
machines to libata PATA.
BTW the example you're giving has never worked with the old IDE
driver in the upstream kernel.
> Yes, it's very obscure - but what it comes down to is the silly way the
> "ISA" IO is handled on the platform (which depends whether it's an 8-bit
> or 16-bit ISA-style peripheral.) The old IDE CS driver _could_ be bent
> to work via a patch like this:
>
> ARM: EBSA110: Enable 16-bit IO type for ide-iops
>
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 047a20780fc1..2eb501d6b5fe 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -217,7 +217,8 @@ ifeq ($(CONFIG_ARCH_EBSA110),y)
> # This is what happens if you forget the IOCS16 line.
> # PCMCIA cards stop working.
> CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
> -export CFLAGS_3c589_cs.o
> +CFLAGS_ide-io-std.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
> +export CFLAGS_3c589_cs.o CFLAGS_ide-io-std.o
> endif
As I've already explained in the past, the proper fix for the problem
(for both old IDE and libata) is to define custom transport ops in
ide-cs.c/ata_pcmcia.c and use them on affected platforms.
> # The byte offset of the kernel image in RAM from the start of RAM.
>
> but the PATA driver is much harder.
There are a lot examples of using your own transport operations in
existing code (i.e. pata_octeon_cf.c or drivers/ata/sata_rcar.c).
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
^ permalink raw reply
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Russell King - ARM Linux @ 2017-03-09 14:51 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz
Cc: Sergei Shtylyov, Sekhar Nori, Arnd Bergmann,
Dmitry Eremin-Solenikov, Kevin Hilman, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <3285453.g1rFzTv5DW@amdc3058>
On Thu, Mar 09, 2017 at 03:42:49PM +0100, Bartlomiej Zolnierkiewicz wrote:
>
> Hi,
>
> On Thursday, March 09, 2017 01:57:15 PM Russell King - ARM Linux wrote:
> > On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> > > 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.
> >
> > As I keep saying, there are ARM machines where the IDE driver works but
> > the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
>
> Please be more specific, I'll be happy to help with migrating this
> machines to libata PATA.
>
> BTW the example you're giving has never worked with the old IDE
> driver in the upstream kernel.
That's where you are wrong. It worked for 10+ years with no
modifications in the upstream IDE driver or ide-cs driver - only the
patch I quoted was required.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
^ permalink raw reply
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 14:52 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Sergei Shtylyov, Sekhar Nori, Arnd Bergmann,
Dmitry Eremin-Solenikov, Kevin Hilman, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <3285453.g1rFzTv5DW@amdc3058>
On Thursday, March 09, 2017 03:42:49 PM Bartlomiej Zolnierkiewicz wrote:
> > Yes, it's very obscure - but what it comes down to is the silly way the
> > "ISA" IO is handled on the platform (which depends whether it's an 8-bit
> > or 16-bit ISA-style peripheral.) The old IDE CS driver _could_ be bent
> > to work via a patch like this:
> >
> > ARM: EBSA110: Enable 16-bit IO type for ide-iops
> >
> > diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> > index 047a20780fc1..2eb501d6b5fe 100644
> > --- a/arch/arm/Makefile
> > +++ b/arch/arm/Makefile
> > @@ -217,7 +217,8 @@ ifeq ($(CONFIG_ARCH_EBSA110),y)
> > # This is what happens if you forget the IOCS16 line.
> > # PCMCIA cards stop working.
> > CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
> > -export CFLAGS_3c589_cs.o
> > +CFLAGS_ide-io-std.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
> > +export CFLAGS_3c589_cs.o CFLAGS_ide-io-std.o
> > endif
>
> As I've already explained in the past, the proper fix for the problem
> (for both old IDE and libata) is to define custom transport ops in
> ide-cs.c/ata_pcmcia.c and use them on affected platforms.
>
> > # The byte offset of the kernel image in RAM from the start of RAM.
> >
> > but the PATA driver is much harder.
>
> There are a lot examples of using your own transport operations in
> existing code (i.e. pata_octeon_cf.c or drivers/ata/sata_rcar.c).
Basically it should come down to copypasting all transport ops
from libata-sff.c and replacing all ioread8()/iowrite8() with
__inb16()__outb16(). Then you need to add detection of EBSA1100
which should also be as simple as using machine_is_ebsa110() in
the proper place.
If you ever get to running current upstream on your EBSA110
I can provide you with the draft patch doing this.
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
^ permalink raw reply
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 14:57 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Sergei Shtylyov, Sekhar Nori, Arnd Bergmann,
Dmitry Eremin-Solenikov, Kevin Hilman, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <20170309145147.GL21222@n2100.armlinux.org.uk>
On Thursday, March 09, 2017 02:51:47 PM Russell King - ARM Linux wrote:
> On Thu, Mar 09, 2017 at 03:42:49PM +0100, Bartlomiej Zolnierkiewicz wrote:
> >
> > Hi,
> >
> > On Thursday, March 09, 2017 01:57:15 PM Russell King - ARM Linux wrote:
> > > On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> > > > 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.
> > >
> > > As I keep saying, there are ARM machines where the IDE driver works but
> > > the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
> >
> > Please be more specific, I'll be happy to help with migrating this
> > machines to libata PATA.
> >
> > BTW the example you're giving has never worked with the old IDE
> > driver in the upstream kernel.
>
> That's where you are wrong. It worked for 10+ years with no
> modifications in the upstream IDE driver or ide-cs driver - only the
> patch I quoted was required.
..and the patch you quoted is in which upstream kernel version exactly?
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
^ permalink raw reply
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Russell King - ARM Linux @ 2017-03-09 15:08 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz
Cc: Sergei Shtylyov, Sekhar Nori, Arnd Bergmann,
Dmitry Eremin-Solenikov, Kevin Hilman, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <3001681.2O13sqAj0p@amdc3058>
On Thu, Mar 09, 2017 at 03:57:37PM +0100, Bartlomiej Zolnierkiewicz wrote:
> On Thursday, March 09, 2017 02:51:47 PM Russell King - ARM Linux wrote:
> > On Thu, Mar 09, 2017 at 03:42:49PM +0100, Bartlomiej Zolnierkiewicz wrote:
> > >
> > > Hi,
> > >
> > > On Thursday, March 09, 2017 01:57:15 PM Russell King - ARM Linux wrote:
> > > > On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> > > > > 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.
> > > >
> > > > As I keep saying, there are ARM machines where the IDE driver works but
> > > > the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
> > >
> > > Please be more specific, I'll be happy to help with migrating this
> > > machines to libata PATA.
> > >
> > > BTW the example you're giving has never worked with the old IDE
> > > driver in the upstream kernel.
> >
> > That's where you are wrong. It worked for 10+ years with no
> > modifications in the upstream IDE driver or ide-cs driver - only the
> > patch I quoted was required.
>
> ..and the patch you quoted is in which upstream kernel version exactly?
I don't claim that it works with the upstream kernel as a whole. I claim
that it works with the ide-cs driver _unmodified_ in the upstream kernel,
but with a simple two line patch which is private to the ARM architecture.
Please pay attention to what I write, thanks.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
^ permalink raw reply
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-09 15:41 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Sergei Shtylyov, Arnd Bergmann, Dmitry Eremin-Solenikov,
Kevin Hilman, Sekhar Nori, linux-kernel, linux-ide,
Olof Johansson, linux-arm-kernel
In-Reply-To: <20170309150829.GM21222@n2100.armlinux.org.uk>
On Thursday, March 09, 2017 03:08:29 PM Russell King - ARM Linux wrote:
> On Thu, Mar 09, 2017 at 03:57:37PM +0100, Bartlomiej Zolnierkiewicz wrote:
> > On Thursday, March 09, 2017 02:51:47 PM Russell King - ARM Linux wrote:
> > > On Thu, Mar 09, 2017 at 03:42:49PM +0100, Bartlomiej Zolnierkiewicz wrote:
> > > >
> > > > Hi,
> > > >
> > > > On Thursday, March 09, 2017 01:57:15 PM Russell King - ARM Linux wrote:
> > > > > On Thu, Mar 09, 2017 at 03:24:56PM +0300, Sergei Shtylyov wrote:
> > > > > > 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.
> > > > >
> > > > > As I keep saying, there are ARM machines where the IDE driver works but
> > > > > the PATA driver doesn't. EBSA110's PCMCIA slots for instance.
> > > >
> > > > Please be more specific, I'll be happy to help with migrating this
> > > > machines to libata PATA.
> > > >
> > > > BTW the example you're giving has never worked with the old IDE
> > > > driver in the upstream kernel.
> > >
> > > That's where you are wrong. It worked for 10+ years with no
> > > modifications in the upstream IDE driver or ide-cs driver - only the
> > > patch I quoted was required.
> >
> > ..and the patch you quoted is in which upstream kernel version exactly?
>
> I don't claim that it works with the upstream kernel as a whole. I claim
> that it works with the ide-cs driver _unmodified_ in the upstream kernel,
> but with a simple two line patch which is private to the ARM architecture.
>
> Please pay attention to what I write, thanks.
Out-of-tree patches are on their own, as kernel evolves they need
to adapt, nothing new here. For 10+ years you were just extremely
lucky with your out-of-tree patch. 8)
Anyway, if you ever get to running current upstream on your EBSA110
please ping me and I will provide you with the draft pata_pcmcia
patch to make EBSA110 work with libata.
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 16:22 UTC (permalink / raw)
To: Sekhar Nori, Bartlomiej Zolnierkiewicz
Cc: Russell King, Arnd Bergmann, Dmitry Eremin-Solenikov,
Kevin Hilman, linux-kernel, linux-ide, Olof Johansson,
linux-arm-kernel
In-Reply-To: <a8eab3b1-8867-00dd-08e4-bcece23010a6@cogentembedded.com>
On 03/09/2017 03:24 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.
>
> I'm not sure DaveM would support any removals in drivers/ide/. He has
> explicitly expressed his will to maintain the IDE driuver forever.
s/driuver/drivers/, sorry. :-)
>> Thanks,
>> Sekhar
MBR, Sergei
^ permalink raw reply
* Re: [PATCH] ahci: qoriq: correct the sata ecc setting error
From: Tejun Heo @ 2017-03-09 16:56 UTC (permalink / raw)
To: Yuantian Tang; +Cc: linux-ide, linux-kernel, linux-arm-kernel
In-Reply-To: <1489050809-15265-1-git-send-email-andy.tang@nxp.com>
On Thu, Mar 09, 2017 at 05:13:29PM +0800, Yuantian Tang wrote:
> 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>
Applied to libata/for-4.11-fixes.
Thanks.
--
tejun
^ permalink raw reply
* Re: [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: Sergei Shtylyov @ 2017-03-09 17:05 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz, Tejun Heo
Cc: Russell King, Arnd Bergmann, Dmitry Eremin-Solenikov,
Kevin Hilman, Sekhar Nori, linux-kernel, linux-ide,
linux-arm-kernel
In-Reply-To: <1489064496-6270-2-git-send-email-b.zolnierkie@samsung.com>
On 03/09/2017 04:01 PM, Bartlomiej Zolnierkiewicz wrote:
> 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.
Strictly speaking, Palmchip BK3710 is Mentor Graphics' IDE core, used on
the original DaVinci's. Mentor's documentation was never publicly available
though...
[...]
MBR, Sergei
^ permalink raw reply
* Re: [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: Sergei Shtylyov @ 2017-03-09 20:45 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz, Tejun Heo
Cc: Sekhar Nori, Kevin Hilman, Arnd Bergmann, Russell King,
Dmitry Eremin-Solenikov, linux-ide, linux-arm-kernel,
linux-kernel
In-Reply-To: <38ee4af3-b2cf-e9a8-1339-d7d904b7dc15@cogentembedded.com>
On 03/09/2017 08:05 PM, Sergei Shtylyov wrote:
>> 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.
>
> Strictly speaking, Palmchip BK3710 is Mentor Graphics' IDE core, used on
> the original DaVinci's. Mentor's documentation was never publicly available
> though...
From googling I knew that Palmchip was a company Mentor probably bought...
> [...]
I'll try to review the whole driver on weekend.
MBR, Sergei
^ permalink raw reply
* [PATCH] libata: make ata_sg_clean static over again
From: Jason Yan @ 2017-03-10 2:05 UTC (permalink / raw)
To: linux-ide, tj, martin.petersen, linux-scsi; +Cc: miaoxie, Jason Yan
Fixes the following sparse warning:
drivers/ata/libata-core.c:4913:6: warning: symbol 'ata_sg_clean' was not
declared. Should it be static?
Signed-off-by: Jason Yan <yanaijie@huawei.com>
---
drivers/ata/libata-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index ca75823..5d33699 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4910,7 +4910,7 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
* LOCKING:
* spin_lock_irqsave(host lock)
*/
-void ata_sg_clean(struct ata_queued_cmd *qc)
+static void ata_sg_clean(struct ata_queued_cmd *qc)
{
struct ata_port *ap = qc->ap;
struct scatterlist *sg = qc->sg;
--
2.5.0
^ permalink raw reply related
* Re: [RESEND PATCH] arm: assabet_defconfig: disable IDE subsystem
From: Bartlomiej Zolnierkiewicz @ 2017-03-10 17:11 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: <a8eab3b1-8867-00dd-08e4-bcece23010a6@cogentembedded.com>
On Thursday, March 09, 2017 03:24:56 PM Sergei Shtylyov wrote:
> 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.
Well, he can always change his opinion. :-)
Especially if the request for removal is for platform specific code only
and it is agreed with the maintainers of the given platform..
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
^ permalink raw reply
* Re: [LFS/MM TOPIC][LFS/MM ATTEND]: - Storage Stack and Driver Testing methodology.
From: Bart Van Assche @ 2017-03-10 19:37 UTC (permalink / raw)
To: Chaitanya Kulkarni, lsf-pc@lists.linux-foundation.org
Cc: linux-scsi@vger.kernel.org, linux-block@vger.kernel.org,
linux-nvme@lists.infradead.org, linux-fsdevel@vger.kernel.org,
linux-ide@vger.kernel.org
In-Reply-To: <CO2PR04MB2184DB653C04FB620B41435486670@CO2PR04MB2184.namprd04.prod.outlook.com>
On Tue, 2017-01-10 at 22:40 +0000, Chaitanya Kulkarni wrote:
> Participants:-
> ------------------
> I'd like to invite developers from different subsystems to discuss an approach towards
> a unified testing methodology for storage stack and device drivers belongs to
> different subsystems.
>
> Topics for Discussion:-
> ------------------------------
> As a part of discussion following are some of the key points which we can focus on:-
> 1. What are the common components of the kernel used by the various subsystems?
> 2. What are the potential target drivers which can benefit from this approach?
> (e.g. NVMe, NVMe Over Fabric, Open Channel Solid State Drives etc.)
> 3. What are the desired features that can be implemented in this Framework?
> (code coverage, unit tests, stress testings, regression, generating Coccinelle reports etc.)
> 4. Desirable Report generation mechanism?
> 5. Basic performance validation?
> 6. Whether QEMU can be used to emulate some of the H/W functionality to create a test
> platform? (Optional subsystem specific)
Regarding existing test software: the SRP test software is a thorough test of
the Linux block layer, SCSI core, dm-mpath driver, dm core, SRP initiator and
target drivers and also of the asynchronous I/O subsystem. This test suite
includes experimental support for the NVMeOF drivers. This test suite supports
the rdma_rxe driver which means that an Ethernet adapter is sufficient to run
these tests.
Note: the focus of this test suite is the regular I/O path and device removal.
This test suite neither replaces the libiscsi tests nor xfstests.
See also https://github.com/bvanassche/srp-test.
Bart.
^ permalink raw reply
* [PATCH] libata: use setup_deferrable_timer
From: Geliang Tang @ 2017-03-11 0:47 UTC (permalink / raw)
To: Tejun Heo; +Cc: Geliang Tang, linux-ide, linux-kernel
In-Reply-To: <3afa5498142ef68256023257dad37b9f8352e65e.1489060803.git.geliangtang@gmail.com>
Use setup_deferrable_timer() instead of init_timer_deferrable() to
simplify the code.
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
drivers/ata/libata-core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index ca75823..55d3c8b 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5902,9 +5902,9 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
INIT_LIST_HEAD(&ap->eh_done_q);
init_waitqueue_head(&ap->eh_wait_q);
init_completion(&ap->park_req_pending);
- init_timer_deferrable(&ap->fastdrain_timer);
- ap->fastdrain_timer.function = ata_eh_fastdrain_timerfn;
- ap->fastdrain_timer.data = (unsigned long)ap;
+ setup_deferrable_timer(&ap->fastdrain_timer,
+ ata_eh_fastdrain_timerfn,
+ (unsigned long)ap);
ap->cbl = ATA_CBL_NONE;
--
2.9.3
^ permalink raw reply related
* Re: [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: kbuild test robot @ 2017-03-11 5:07 UTC (permalink / raw)
Cc: kbuild-all, Tejun Heo, Sekhar Nori, Sergei Shtylyov, Kevin Hilman,
Arnd Bergmann, Russell King, Dmitry Eremin-Solenikov, linux-ide,
linux-arm-kernel, linux-kernel, b.zolnierkie
In-Reply-To: <1489064496-6270-2-git-send-email-b.zolnierkie@samsung.com>
[-- Attachment #1: Type: text/plain, Size: 2171 bytes --]
Hi Bartlomiej,
[auto build test WARNING on tj-libata/for-next]
[also build test WARNING on v4.11-rc1 next-20170310]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Bartlomiej-Zolnierkiewicz/ata-add-Palmchip-BK3710-PATA-controller-driver/20170311-095152
base: https://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git for-next
config: arm-davinci_all_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm
Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings
All warnings (new ones prefixed by >>):
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)
^
vim +/cycle_time +223 drivers/ata/pata_bk3710.c
207 const u16 *id = adev->id;
208 unsigned int cycle_time;
209 int is_slave = adev->devno;
210 const u8 pio = adev->pio_mode - XFER_PIO_0;
211
212 if (id[ATA_ID_FIELD_VALID] & 2) {
213 if (ata_id_has_iordy(id))
214 cycle_time = id[ATA_ID_EIDE_PIO_IORDY];
215 else
216 cycle_time = id[ATA_ID_EIDE_PIO];
217
218 /* conservative "downgrade" for all pre-ATA2 drives */
219 if (pio < 3 && cycle_time < t->cycle)
220 cycle_time = 0; /* use standard timing */
221 }
222
> 223 if (!cycle_time)
224 cycle_time = t->cycle;
225
226 pata_bk3710_setpiomode(base, pair, is_slave, cycle_time, pio);
227 }
228
229 static void pata_bk3710_chipinit(void __iomem *base)
230 {
231 /*
---
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: 24160 bytes --]
^ permalink raw reply
* Re: [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: Sergei Shtylyov @ 2017-03-12 17:28 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz, Tejun Heo
Cc: Sekhar Nori, Kevin Hilman, Arnd Bergmann, Russell King,
Dmitry Eremin-Solenikov, linux-ide, linux-arm-kernel,
linux-kernel
In-Reply-To: <1489064496-6270-2-git-send-email-b.zolnierkie@samsung.com>
Hello!
On 03/09/2017 04:01 PM, Bartlomiej Zolnierkiewicz wrote:
> Add Palmchip BK3710 PATA controller driver.
>
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
[...]
> 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>
Probably a good idea to sort the #include's alphabetically...
> +
> +#define DRV_NAME "pata_bk3710"
> +#define DRV_VERSION "0.1.0"
This macro isn't used anywhere, do we really need it?
> +
> +#define BK3710_REG_OFFSET 0x1F0
I'd call it BK3710_TF_OFFSET or something of that sort...
The DM644x manual calls these register command block (which seems to comply
with ATA wording)...
> +#define BK3710_CTL_OFFSET 0x3F6
> +
> +#define BK3710_BMISP 0x02
Nothing other than the BMIDE status register, dunno why they made it 16-bit...
> +#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
I'd keep all registers declared as in the IDE driver, for the purposes of
documentation...
[...]
> +static void pata_bk3710_setudmamode(void __iomem *base, unsigned int dev,
> + unsigned int mode)
> +{
> + u32 val32;
> + u16 val16;
> + u8 tenv, trp, t0;
I think DaveM prefers reverse Christmas tree order with the declarations
but maybe that's only for the networking tree... :-)
> +
> + /* 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));
I'd separate ioread32() and & to the different lines but as this is copied
from the IDE driver verbatim, you can ignore me. :-)
> + val32 |= (t0 << (dev ? 8 : 0));
Outer parens not really needed.
> + 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));
Here as well..
> + iowrite32(val32, base + BK3710_UDMATRP);
> +
> + /* udmaenv Ultra DMA envelop Time */
> + val32 = ioread32(base + BK3710_UDMAENV) & (0xFF << (dev ? 0 : 8));
> + val32 |= (tenv << (dev ? 8 : 0));
And here...
[...]
> +static void pata_bk3710_setdmamode(void __iomem *base, unsigned int dev,
Maybe setmwdmamode()?
> + 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;
td--;
> +
> + val32 = ioread32(base + BK3710_DMASTB) & (0xFF << (dev ? 0 : 8));
> + val32 |= (td << (dev ? 8 : 0));
And here...
> + iowrite32(val32, base + BK3710_DMASTB);
> +
> + val32 = ioread32(base + BK3710_DMARCVR) & (0xFF << (dev ? 0 : 8));
> + val32 |= (tkw << (dev ? 8 : 0));
And here...
[...]
> +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;
t2--;
> +
> + val32 = ioread32(base + BK3710_DATSTB) & (0xFF << (dev ? 0 : 8));
> + val32 |= (t2 << (dev ? 8 : 0));
Outer parens not needed.
> + iowrite32(val32, base + BK3710_DATSTB);
> +
> + val32 = ioread32(base + BK3710_DATRCVR) & (0xFF << (dev ? 0 : 8));
> + val32 |= (t2i << (dev ? 8 : 0));
Here too..
> + iowrite32(val32, base + BK3710_DATRCVR);
> +
> + /* FIXME: this is broken also in the old driver */
What's wrong with this logic BTW?
> + 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;
t2--;
> +
> + val32 = ioread32(base + BK3710_REGSTB) & (0xFF << (dev ? 0 : 8));
> + val32 |= (t2 << (dev ? 8 : 0));
Outer parens again...
> + iowrite32(val32, base + BK3710_REGSTB);
> +
> + val32 = ioread32(base + BK3710_REGRCVR) & (0xFF << (dev ? 0 : 8));
> + val32 |= (t2i << (dev ? 8 : 0));
And again...
> + 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;
This seems like a helper needed by libata in general but OK...
> +
> + 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);
The bit 15 is called IDEEN indeed...
[...]
> + /*
> + * MISCCTL Miscellaneous Conrol Register
> + * (ATA_MISCCTL_HWNHLD1P , 1 cycle)
> + * (ATA_MISCCTL_HWNHLD0P , 1 cycle)
> + * (ATA_MISCCTL_TIMORIDE , 1)
> + */
> + iowrite32(0x001, base + BK3710_MISCCTL);
Named TIMORIDE indeed; bits 1-15 reserved...
> +
> + /*
> + * IORDYTMP IORDY Timer for Primary Register
> + * (ATA_IORDYTMP_IORDYTMP , 0xffff )
> + */
> + iowrite32(0xFFFF, base + BK3710_IORDYTMP);
We don't seem to handle the IORDY timeout interrupt, hence setting the
IORDY timeout doesn't seem useful...
> +
> + /*
> + * Configure BMISP Register
> + * (ATA_BMISP_DMAEN1 , DISABLE ) |
> + * (ATA_BMISP_DMAEN0 , DISABLE ) |
These bits are documented as reserved anyway.
> + * (ATA_BMISP_IORDYINT , CLEAR) |
> + * (ATA_BMISP_INTRSTAT , CLEAR) |
> + * (ATA_BMISP_DMAERROR , CLEAR)
They forgot bit 0, IDEACT. :-)
> + */
> + 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,
Strictly speaking, the BMIDE control/status registers are 16-bit but they
probably are OK with 8-bit accesses as well...
[...]
> +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);
devm_clk_get()?
> + 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);
How about platform_get_irq()? I've fixed it... :-)
> + 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);
How about devm_ioremap_resource() instead of the above?
> + if (!base) {
> + pr_err(DRV_NAME ": failed to map IO memory\n");
> + return -ENOMEM;
> + }
> +
> + /* Configure the Palm Chip controller */
It's Palmchip. :-)
[...]
Well, no serious issues found, so you can stamp:
Acked-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
MBR, Sergei
^ permalink raw reply
* Re: [PATCH 1/3] ata: add Palmchip BK3710 PATA controller driver
From: Sergei Shtylyov @ 2017-03-12 17:53 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz, Tejun Heo
Cc: Sekhar Nori, Kevin Hilman, Arnd Bergmann, Russell King,
Dmitry Eremin-Solenikov, linux-ide, linux-arm-kernel,
linux-kernel
In-Reply-To: <c30eeadf-c4f3-3d35-9b2f-abc9eed3e4e8@cogentembedded.com>
On 03/12/2017 08:28 PM, Sergei Shtylyov wrote:
>> +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;
>
> This seems like a helper needed by libata in general but OK...
No, the build bot had already reported the problem with 'cycle_time' here,
I just forgot about it.
[...]
>
> Well, no serious issues found, so you can stamp:
>
> Acked-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Too early, it seems... :-)
MBR, Sergei
^ permalink raw reply
* [PATCH 0/2] ata: ahci-dm816: new driver
From: Bartosz Golaszewski @ 2017-03-13 16:36 UTC (permalink / raw)
To: Tejun Heo, Rob Herring, Mark Rutland, Neil Armstrong,
Michael Turquette, Kevin Hilman, Patrick Titiano
Cc: linux-ide, devicetree, linux-kernel, Bartosz Golaszewski
Add support for the on-board SATA controller present on TI DM816 SoCs.
This IP suffers from the same issue DA850 does, that is: if we enable
PMP, but connect the drive directly to the board, the disk cannot be
detected. A workaround similar to the one implemented in ahci-da850 is
included in this driver as well.
Bartosz Golaszewski (2):
dt-bindings: ata: add DT bindings for ahci-dm816 SATA controller
ata: ahci: add support for DaVinci DM816 SATA controller
.../devicetree/bindings/ata/ahci-dm816.txt | 20 +++
drivers/ata/Kconfig | 9 +
drivers/ata/Makefile | 1 +
drivers/ata/ahci_dm816.c | 200 +++++++++++++++++++++
4 files changed, 230 insertions(+)
create mode 100644 Documentation/devicetree/bindings/ata/ahci-dm816.txt
create mode 100644 drivers/ata/ahci_dm816.c
--
2.9.3
^ permalink raw reply
* [PATCH 1/2] dt-bindings: ata: add DT bindings for ahci-dm816 SATA controller
From: Bartosz Golaszewski @ 2017-03-13 16:36 UTC (permalink / raw)
To: Tejun Heo, Rob Herring, Mark Rutland, Neil Armstrong,
Michael Turquette, Kevin Hilman, Patrick Titiano
Cc: linux-ide, devicetree, linux-kernel, Bartosz Golaszewski
In-Reply-To: <1489422982-3461-1-git-send-email-bgolaszewski@baylibre.com>
Add DT bindings for the onboard SATA controller present on the DM816x
SoCs.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
Documentation/devicetree/bindings/ata/ahci-dm816.txt | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 Documentation/devicetree/bindings/ata/ahci-dm816.txt
diff --git a/Documentation/devicetree/bindings/ata/ahci-dm816.txt b/Documentation/devicetree/bindings/ata/ahci-dm816.txt
new file mode 100644
index 0000000..b87ed5a
--- /dev/null
+++ b/Documentation/devicetree/bindings/ata/ahci-dm816.txt
@@ -0,0 +1,20 @@
+Device tree binding for the TI DM816 AHCI SATA Controller
+---------------------------------------------------------
+
+Required properties:
+ - compatible: must be "ti,dm816-ahci"
+ - reg: physical base address and size of the register region used by
+ the controller (as defined by the AHCI 1.1 standard)
+ - interrupts: interrupt specifier (refer to the interrupt binding)
+ - clocks: clock specifiers (refer to the clock binding); two clocks
+ must be specified: the functional clock and an external
+ reference clock
+
+Example:
+
+ sata: sata@4a140000 {
+ compatible = "ti,dm816-ahci";
+ reg = <0x4a140000 0xffff>;
+ interrupts = <16>;
+ clocks = <&sysclk5_ck>, <&sata_refclk>;
+ };
--
2.9.3
^ permalink raw reply related
* [PATCH 2/2] ata: ahci: add support for DaVinci DM816 SATA controller
From: Bartosz Golaszewski @ 2017-03-13 16:36 UTC (permalink / raw)
To: Tejun Heo, Rob Herring, Mark Rutland, Neil Armstrong,
Michael Turquette, Kevin Hilman, Patrick Titiano
Cc: linux-ide, devicetree, linux-kernel, Bartosz Golaszewski
In-Reply-To: <1489422982-3461-1-git-send-email-bgolaszewski@baylibre.com>
This SATA controller is quite similar to the one present on the DA850
SoC, but the PHY configuration is different and it supports two HBA
ports.
The IP suffers from the same PMP issue the DA850 does - if we enable
PMP but don't use it - softreset fails. Appropriate workaround was
implemented in this driver as well.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
drivers/ata/Kconfig | 9 +++
drivers/ata/Makefile | 1 +
drivers/ata/ahci_dm816.c | 200 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 210 insertions(+)
create mode 100644 drivers/ata/ahci_dm816.c
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 70b57d2..7f59a7a 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -118,6 +118,15 @@ config AHCI_DA850
If unsure, say N.
+config AHCI_DM816
+ tristate "DaVinci DM816 AHCI SATA support"
+ depends on ARCH_OMAP2PLUS
+ help
+ This option enables support for the DaVinci DM816 SoC's
+ onboard AHCI SATA controller.
+
+ If unsure, say N.
+
config AHCI_ST
tristate "ST AHCI SATA support"
depends on ARCH_STI
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
index 89a0a19..3052c0a 100644
--- a/drivers/ata/Makefile
+++ b/drivers/ata/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o
obj-$(CONFIG_AHCI_BRCM) += ahci_brcm.o libahci.o libahci_platform.o
obj-$(CONFIG_AHCI_CEVA) += ahci_ceva.o libahci.o libahci_platform.o
obj-$(CONFIG_AHCI_DA850) += ahci_da850.o libahci.o libahci_platform.o
+obj-$(CONFIG_AHCI_DM816) += ahci_dm816.o libahci.o libahci_platform.o
obj-$(CONFIG_AHCI_IMX) += ahci_imx.o libahci.o libahci_platform.o
obj-$(CONFIG_AHCI_MVEBU) += ahci_mvebu.o libahci.o libahci_platform.o
obj-$(CONFIG_AHCI_OCTEON) += ahci_octeon.o
diff --git a/drivers/ata/ahci_dm816.c b/drivers/ata/ahci_dm816.c
new file mode 100644
index 0000000..fbd827c
--- /dev/null
+++ b/drivers/ata/ahci_dm816.c
@@ -0,0 +1,200 @@
+/*
+ * DaVinci DM816 AHCI SATA platform driver
+ *
+ * Copyright (C) 2017 BayLibre SAS
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/pm.h>
+#include <linux/platform_device.h>
+#include <linux/libata.h>
+#include <linux/ahci_platform.h>
+
+#include "ahci.h"
+
+#define AHCI_DM816_DRV_NAME "ahci-dm816"
+
+#define AHCI_DM816_PHY_ENPLL(x) ((x) << 0)
+#define AHCI_DM816_PHY_MPY(x) ((x) << 1)
+#define AHCI_DM816_PHY_LOS(x) ((x) << 12)
+#define AHCI_DM816_PHY_RXCDR(x) ((x) << 13)
+#define AHCI_DM816_PHY_RXEQ(x) ((x) << 16)
+#define AHCI_DM816_PHY_TXSWING(x) ((x) << 23)
+
+#define AHCI_DM816_P0PHYCR_REG 0x178
+#define AHCI_DM816_P1PHYCR_REG 0x1f8
+
+#define AHCI_DM816_PLL_OUT 1500000000LU
+
+static const unsigned long pll_mpy_table[] = {
+ 400, 500, 600, 800, 825, 1000, 1200,
+ 1250, 1500, 1600, 1650, 2000, 2200, 2500
+};
+
+static int ahci_dm816_get_mpy_bits(unsigned long refclk_rate)
+{
+ unsigned long pll_multiplier;
+ int i;
+
+ /*
+ * We need to determine the value of the multiplier (MPY) bits.
+ * In order to include the 8.25 multiplier we need to first divide
+ * the refclk rate by 100.
+ */
+ pll_multiplier = AHCI_DM816_PLL_OUT / (refclk_rate / 100);
+
+ for (i = 0; i < ARRAY_SIZE(pll_mpy_table); i++) {
+ if (pll_mpy_table[i] == pll_multiplier)
+ return i;
+ }
+
+ /*
+ * We should have divided evenly - if not, return an invalid
+ * value.
+ */
+ return -1;
+}
+
+static int ahci_dm816_phy_init(struct ahci_host_priv *hpriv, struct device *dev)
+{
+ unsigned long refclk_rate;
+ int mpy;
+ u32 val;
+
+ /*
+ * We should have been supplied two clocks: the functional and
+ * keep-alive clock and the external reference clock. We need the
+ * rate of the latter to calculate the correct value of MPY bits.
+ */
+ if (!hpriv->clks[1]) {
+ dev_err(dev, "reference clock not supplied\n");
+ return -EINVAL;
+ }
+
+ refclk_rate = clk_get_rate(hpriv->clks[1]);
+ if ((refclk_rate % 100) != 0) {
+ dev_err(dev, "reference clock rate must be divisible by 100\n");
+ return -EINVAL;
+ }
+
+ mpy = ahci_dm816_get_mpy_bits(refclk_rate);
+ if (mpy < 0) {
+ dev_err(dev, "can't calculate the MPY bits value\n");
+ return -EINVAL;
+ }
+
+ /* Enable the PHY and configure the first HBA port. */
+ val = AHCI_DM816_PHY_MPY(mpy) | AHCI_DM816_PHY_LOS(1) |
+ AHCI_DM816_PHY_RXCDR(4) | AHCI_DM816_PHY_RXEQ(1) |
+ AHCI_DM816_PHY_TXSWING(3) | AHCI_DM816_PHY_ENPLL(1);
+ writel(val, hpriv->mmio + AHCI_DM816_P0PHYCR_REG);
+
+ /* Configure the second HBA port. */
+ val = AHCI_DM816_PHY_LOS(1) | AHCI_DM816_PHY_RXCDR(4) |
+ AHCI_DM816_PHY_RXEQ(1) | AHCI_DM816_PHY_TXSWING(3);
+ writel(val, hpriv->mmio + AHCI_DM816_P1PHYCR_REG);
+
+ return 0;
+}
+
+static int ahci_dm816_softreset(struct ata_link *link,
+ unsigned int *class, unsigned long deadline)
+{
+ int pmp, ret;
+
+ pmp = sata_srst_pmp(link);
+
+ /*
+ * There's an issue with the SATA controller on DM816 SoC: if we
+ * enable Port Multiplier support, but the drive is connected directly
+ * to the board, it can't be detected. As a workaround: if PMP is
+ * enabled, we first call ahci_do_softreset() and pass it the result of
+ * sata_srst_pmp(). If this call fails, we retry with pmp = 0.
+ */
+ ret = ahci_do_softreset(link, class, pmp, deadline, ahci_check_ready);
+ if (pmp && ret == -EBUSY)
+ return ahci_do_softreset(link, class, 0,
+ deadline, ahci_check_ready);
+
+ return ret;
+}
+
+static struct ata_port_operations ahci_dm816_port_ops = {
+ .inherits = &ahci_platform_ops,
+ .softreset = ahci_dm816_softreset,
+};
+
+static const struct ata_port_info ahci_dm816_port_info = {
+ .flags = AHCI_FLAG_COMMON,
+ .pio_mask = ATA_PIO4,
+ .udma_mask = ATA_UDMA6,
+ .port_ops = &ahci_dm816_port_ops,
+};
+
+static struct scsi_host_template ahci_dm816_platform_sht = {
+ AHCI_SHT(AHCI_DM816_DRV_NAME),
+};
+
+static int ahci_dm816_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct ahci_host_priv *hpriv;
+ int rc;
+
+ hpriv = ahci_platform_get_resources(pdev);
+ if (IS_ERR(hpriv))
+ return PTR_ERR(hpriv);
+
+ rc = ahci_platform_enable_resources(hpriv);
+ if (rc)
+ return rc;
+
+ rc = ahci_dm816_phy_init(hpriv, dev);
+ if (rc)
+ goto disable_resources;
+
+ rc = ahci_platform_init_host(pdev, hpriv,
+ &ahci_dm816_port_info,
+ &ahci_dm816_platform_sht);
+ if (rc)
+ goto disable_resources;
+
+ return 0;
+
+disable_resources:
+ ahci_platform_disable_resources(hpriv);
+
+ return rc;
+}
+
+static SIMPLE_DEV_PM_OPS(ahci_dm816_pm_ops,
+ ahci_platform_suspend,
+ ahci_platform_resume);
+
+static const struct of_device_id ahci_dm816_of_match[] = {
+ { .compatible = "ti,dm816-ahci", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, ahci_dm816_of_match);
+
+static struct platform_driver ahci_dm816_driver = {
+ .probe = ahci_dm816_probe,
+ .remove = ata_platform_remove_one,
+ .driver = {
+ .name = AHCI_DM816_DRV_NAME,
+ .of_match_table = ahci_dm816_of_match,
+ .pm = &ahci_dm816_pm_ops,
+ },
+};
+module_platform_driver(ahci_dm816_driver);
+
+MODULE_DESCRIPTION("DaVinci DM816 AHCI SATA platform driver");
+MODULE_AUTHOR("Bartosz Golaszewski <bgolaszewski@baylibre.com>");
+MODULE_LICENSE("GPL");
--
2.9.3
^ permalink raw reply related
* [PATCH 0/4] ARM: dm8168-evm: add SATA support
From: Bartosz Golaszewski @ 2017-03-13 16:43 UTC (permalink / raw)
To: Rob Herring, Mark Rutland, Neil Armstrong, Michael Turquette,
Kevin Hilman, Patrick Titiano, Tony Lindgren, Paul Walmsley
Cc: devicetree, Bartosz Golaszewski, linux-kernel, linux-ide,
linux-omap, linux-arm-kernel
This series implements support for the on-board SATA controller
on the dm8168-evm board.
The first patch adds the clock domain and hwmod entries for the
SATA module.
The second patch models the external reference clock used by SATA.
The third adds the SATA node to the SoC's device tree.
The fourth enables the SATA driver by default in omap2plus_defconfig.
Bartosz Golaszewski (3):
ARM: dts: dm8168-evm: add the external reference clock for SATA
ARM: dts: dm8168-evm: add SATA node
ARM: omap2plus_defconfig: enable ahci-dm816 module
Kevin Hilman (1):
ARM: OMAP2+: dm81xx: Add clkdm and hwmod for SATA
arch/arm/boot/dts/dm8168-evm.dts | 10 +++++++++
arch/arm/boot/dts/dm816x.dtsi | 7 ++++++
arch/arm/configs/omap2plus_defconfig | 1 +
arch/arm/mach-omap2/clockdomains81xx_data.c | 10 +++++++++
arch/arm/mach-omap2/cm81xx.h | 2 ++
arch/arm/mach-omap2/omap_hwmod_81xx_data.c | 34 +++++++++++++++++++++++++++++
6 files changed, 64 insertions(+)
--
2.9.3
^ permalink raw reply
* [PATCH 1/4] ARM: OMAP2+: dm81xx: Add clkdm and hwmod for SATA
From: Bartosz Golaszewski @ 2017-03-13 16:43 UTC (permalink / raw)
To: Rob Herring, Mark Rutland, Neil Armstrong, Michael Turquette,
Kevin Hilman, Patrick Titiano, Tony Lindgren, Paul Walmsley
Cc: devicetree, Bartosz Golaszewski, linux-kernel, linux-ide,
linux-omap, linux-arm-kernel
In-Reply-To: <1489423399-3824-1-git-send-email-bgolaszewski@baylibre.com>
From: Kevin Hilman <khilman@baylibre.com>
Add the SATA clockdomain (part of CM_DEFAULT) and a hwmod for the SATA
block on dm81xx.
Tested on DM8168 EVM.
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
arch/arm/mach-omap2/clockdomains81xx_data.c | 10 +++++++++
arch/arm/mach-omap2/cm81xx.h | 2 ++
arch/arm/mach-omap2/omap_hwmod_81xx_data.c | 34 +++++++++++++++++++++++++++++
3 files changed, 46 insertions(+)
diff --git a/arch/arm/mach-omap2/clockdomains81xx_data.c b/arch/arm/mach-omap2/clockdomains81xx_data.c
index 3b5fb05..65fbd13 100644
--- a/arch/arm/mach-omap2/clockdomains81xx_data.c
+++ b/arch/arm/mach-omap2/clockdomains81xx_data.c
@@ -91,6 +91,14 @@ static struct clockdomain default_l3_slow_81xx_clkdm = {
.flags = CLKDM_CAN_SWSUP,
};
+static struct clockdomain default_sata_81xx_clkdm = {
+ .name = "default_clkdm",
+ .pwrdm = { .name = "default_pwrdm" },
+ .cm_inst = TI81XX_CM_DEFAULT_MOD,
+ .clkdm_offs = TI816X_CM_DEFAULT_SATA_CLKDM,
+ .flags = CLKDM_CAN_SWSUP,
+};
+
/* 816x only */
static struct clockdomain alwon_mpu_816x_clkdm = {
@@ -173,6 +181,7 @@ static struct clockdomain *clockdomains_ti814x[] __initdata = {
&mmu_81xx_clkdm,
&mmu_cfg_81xx_clkdm,
&default_l3_slow_81xx_clkdm,
+ &default_sata_81xx_clkdm,
NULL,
};
@@ -200,6 +209,7 @@ static struct clockdomain *clockdomains_ti816x[] __initdata = {
&default_ducati_816x_clkdm,
&default_pci_816x_clkdm,
&default_l3_slow_81xx_clkdm,
+ &default_sata_81xx_clkdm,
NULL,
};
diff --git a/arch/arm/mach-omap2/cm81xx.h b/arch/arm/mach-omap2/cm81xx.h
index 3a0ccf0..44ca275 100644
--- a/arch/arm/mach-omap2/cm81xx.h
+++ b/arch/arm/mach-omap2/cm81xx.h
@@ -35,6 +35,7 @@
#define TI81XX_CM_MMU_CLKDM 0x000C
#define TI81XX_CM_MMUCFG_CLKDM 0x0010
#define TI81XX_CM_ALWON_MPU_CLKDM 0x001C
+#define TI81XX_CM_ALWON_SYSCLK5_CLKDM 0x0024
#define TI81XX_CM_ALWON_L3_FAST_CLKDM 0x0030
/* ACTIVE */
@@ -57,5 +58,6 @@
#define TI816X_CM_DEFAULT_PCI_CLKDM 0x0010
#define TI816X_CM_DEFAULT_L3_SLOW_CLKDM 0x0014
#define TI816X_CM_DEFAULT_DUCATI_CLKDM 0x0018
+#define TI816X_CM_DEFAULT_SATA_CLKDM 0x0060
#endif
diff --git a/arch/arm/mach-omap2/omap_hwmod_81xx_data.c b/arch/arm/mach-omap2/omap_hwmod_81xx_data.c
index b82b77c..310afe4 100644
--- a/arch/arm/mach-omap2/omap_hwmod_81xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_81xx_data.c
@@ -106,6 +106,7 @@
*/
#define DM81XX_CM_DEFAULT_OFFSET 0x500
#define DM81XX_CM_DEFAULT_USB_CLKCTRL (0x558 - DM81XX_CM_DEFAULT_OFFSET)
+#define DM81XX_CM_DEFAULT_SATA_CLKCTRL (0x560 - DM81XX_CM_DEFAULT_OFFSET)
/* L3 Interconnect entries clocked at 125, 250 and 500MHz */
static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = {
@@ -973,6 +974,38 @@ static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
.user = OCP_USER_MPU,
};
+static struct omap_hwmod_class_sysconfig dm81xx_sata_sysc = {
+ .sysc_offs = 0x1100,
+ .sysc_flags = SYSC_HAS_SIDLEMODE,
+ .idlemodes = SIDLE_FORCE,
+ .sysc_fields = &omap_hwmod_sysc_type3,
+};
+
+static struct omap_hwmod_class dm81xx_sata_hwmod_class = {
+ .name = "sata",
+ .sysc = &dm81xx_sata_sysc,
+};
+
+static struct omap_hwmod dm81xx_sata_hwmod = {
+ .name = "sata",
+ .clkdm_name = "default_sata_clkdm",
+ .flags = HWMOD_NO_IDLEST,
+ .prcm = {
+ .omap4 = {
+ .clkctrl_offs = DM81XX_CM_DEFAULT_SATA_CLKCTRL,
+ .modulemode = MODULEMODE_SWCTRL,
+ },
+ },
+ .class = &dm81xx_sata_hwmod_class,
+};
+
+static struct omap_hwmod_ocp_if dm81xx_l4_hs__sata = {
+ .master = &dm81xx_l4_hs_hwmod,
+ .slave = &dm81xx_sata_hwmod,
+ .clk = "sysclk5_ck",
+ .user = OCP_USER_MPU,
+};
+
static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = {
.rev_offs = 0x0,
.sysc_offs = 0x110,
@@ -1474,6 +1507,7 @@ static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
&dm81xx_l4_hs__emac0,
&dm81xx_emac0__mdio,
&dm816x_l4_hs__emac1,
+ &dm81xx_l4_hs__sata,
&dm81xx_alwon_l3_fast__tpcc,
&dm81xx_alwon_l3_fast__tptc0,
&dm81xx_alwon_l3_fast__tptc1,
--
2.9.3
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox