From: David Daney <ddaney.cavm@gmail.com>
To: Mark Rutland <mark.rutland@arm.com>,
Aleksey Makarov <aleksey.makarov@auriga.com>
Cc: "linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
"linux-mips@linux-mips.org" <linux-mips@linux-mips.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
David Daney <david.daney@cavium.com>,
Anton Vorontsov <avorontsov@ru.mvista.com>,
Vinita Gupta <vgupta@caviumnetworks.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <Pawel.Moll@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
Ralf Baechle <ralf@linux-mips.org>, Tejun Heo <tj@kernel.org>,
Hans de Goede <hdegoede@redhat.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>
Subject: Re: [PATCH] SATA: OCTEON: support SATA on OCTEON platform
Date: Mon, 19 Jan 2015 11:16:28 -0800 [thread overview]
Message-ID: <54BD580C.6030701@gmail.com> (raw)
In-Reply-To: <20150119154357.GH21553@leverpostej>
On 01/19/2015 07:43 AM, Mark Rutland wrote:
> On Mon, Jan 19, 2015 at 03:23:58PM +0000, Aleksey Makarov wrote:
>> The OCTEON SATA controller is currently found on cn71XX devices.
>>
>> Signed-off-by: David Daney <david.daney@cavium.com>
>> Signed-off-by: Vinita Gupta <vgupta@caviumnetworks.com>
>> [aleksey.makarov@auriga.com: preparing for submission,
>> conflict resolution, fixes for the platform code]
>> Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com>
>> ---
>> .../devicetree/bindings/ata/ahci-platform.txt | 1 +
>> .../devicetree/bindings/mips/cavium/sata-uctl.txt | 31 ++++++
>> arch/mips/cavium-octeon/octeon-platform.c | 1 +
>> drivers/ata/Kconfig | 9 ++
>> drivers/ata/Makefile | 1 +
>> drivers/ata/ahci_platform.c | 10 ++
>> drivers/ata/sata_octeon.c | 107 +++++++++++++++++++++
>> 7 files changed, 160 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/mips/cavium/sata-uctl.txt
>> create mode 100644 drivers/ata/sata_octeon.c
>>
>> diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> index 4ab09f2..1a5d3be 100644
>> --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt
>> @@ -11,6 +11,7 @@ Required properties:
>> - compatible : compatible string, one of:
>> - "allwinner,sun4i-a10-ahci"
>> - "hisilicon,hisi-ahci"
>> + - "cavium,octeon-7130-ahci"
>> - "ibm,476gtr-ahci"
>> - "marvell,armada-380-ahci"
>> - "snps,dwc-ahci"
>> diff --git a/Documentation/devicetree/bindings/mips/cavium/sata-uctl.txt b/Documentation/devicetree/bindings/mips/cavium/sata-uctl.txt
>> new file mode 100644
>> index 0000000..222e66e
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mips/cavium/sata-uctl.txt
>> @@ -0,0 +1,31 @@
>> +* UCTL SATA controller glue
>
> I'm not sure I follow. What does this mean?
Well, UCTL is the internal name of the hardware block. It functions to
connect a standard AHCI controller to the internal busses of the OCTEON SoC.
>
>> +
>> +Properties:
>> +- compatible: "cavium,octeon-7130-sata-uctl"
>> +
>> + Compatibility with the cn7130 SOC.
>> +
>> +- reg: The base address of the UCTL register bank.
>> +
>> +- #address-cells: Must be <2>.
>> +
>> +- #size-cells: Must be <2>.
>> +
>> +- ranges: Empty to signify direct mapping of the children.
>
> Why can't these be any values which are sufficient to map children?
They can. It happens to be the case that it is always empty.
>
>> +
>> +Example:
>> +
>> + uctl@118006c000000 {
>> + compatible = "cavium,octeon-7130-sata-uctl";
>> + reg = <0x00011800 0x6c000000 0x00000000 0x00000100>;
>> + ranges;
>> + #address-cells = <0x00000002>;
>> + #size-cells = <0x00000002>;
>
> No need for all the zero-padding on these, they aren't addresses.
OK.
>
>> + sata@16c00 {
>> + compatible = "cavium,octeon-7130-ahci";
>> + reg = <0x00016c00 0x00000000 0x00000000 0x00000200>;
>> + interrupt-parent = <0x0000000d>;
>> + interrupts = <0x00000002 0x00000004>;
>> + cavium,qlm-trim-alias = "sata";
>
> What's this property for? It wasn't documented above, and doesn't exist
> in mainline.
It is not a part of the public interface, we will remove this line.
>
> [...]
>
>> diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
>> index ae41107..4a0e5e3 100644
>> --- a/drivers/ata/Makefile
>> +++ b/drivers/ata/Makefile
>> @@ -17,6 +17,7 @@ obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o libahci.o libahci_platform.o
>> obj-$(CONFIG_AHCI_ST) += ahci_st.o libahci.o libahci_platform.o
>> obj-$(CONFIG_AHCI_TEGRA) += ahci_tegra.o libahci.o libahci_platform.o
>> obj-$(CONFIG_AHCI_XGENE) += ahci_xgene.o libahci.o libahci_platform.o
>> +obj-$(CONFIG_SATA_OCTEON) += sata_octeon.o
>>
>> # SFF w/ custom DMA
>> obj-$(CONFIG_PDC_ADMA) += pdc_adma.o
>> diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
>> index 18d5398..bb36396 100644
>> --- a/drivers/ata/ahci_platform.c
>> +++ b/drivers/ata/ahci_platform.c
>> @@ -22,6 +22,12 @@
>> #include <linux/ahci_platform.h>
>> #include "ahci.h"
>>
>> +#if IS_ENABLED(CONFIG_SATA_OCTEON)
>> +void ahci_octeon_config(struct platform_device *pdev);
>> +#else
>> +static inline void ahci_octeon_config(struct platform_device *pdev) {}
>> +#endif
>> +
>> static const struct ata_port_info ahci_port_info = {
>> .flags = AHCI_FLAG_COMMON,
>> .pio_mask = ATA_PIO4,
>> @@ -46,6 +52,9 @@ static int ahci_probe(struct platform_device *pdev)
>> if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
>> hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
>>
>> + if (of_device_is_compatible(dev->of_node, "cavium,octeon-7130-ahci"))
>> + ahci_octeon_config(pdev);
>> +
>
> If we really need this kind of thing, make a new struct and associate it
> with of_device_id::data in the table below. Then we make this path free
> from any device-specific code.
>
Good idea.
We will attempt to factor this into a separate driver module for the
"cavium,octeon-7130-sata-uctl" block. If that turns out to be too ugly,
I would like to keep the code in this file, but with the change you suggest.
>> rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info);
>> if (rc)
>> goto disable_resources;
>> @@ -67,6 +76,7 @@ static const struct of_device_id ahci_of_match[] = {
>> { .compatible = "ibm,476gtr-ahci", },
>> { .compatible = "snps,dwc-ahci", },
>> { .compatible = "hisilicon,hisi-ahci", },
>> + { .compatible = "cavium,octeon-7130-ahci", },
>> {},
>
> I was under the impression that the strings other than "generic-ahci"
> were only for compatibility with existing DTBs. Why do we need to add
> new platform-specific strings here?
Because it is an "existing DTB", The device tree doesn't contain the
compatible property of "generic-ahci", only "cavium,octeon-7130-ahci".
>
> [...]
>
>> +void ahci_octeon_config(struct platform_device *pdev)
>> +{
>> + union cvmx_sata_uctl_shim_cfg shim_cfg;
>> +
>> + /* set-up endian mode */
>> + shim_cfg.u64 = cvmx_read_csr(CVMX_SATA_UCTL_SHIM_CFG);
>> +#ifdef __BIG_ENDIAN
>> + shim_cfg.s.dma_endian_mode = 1;
>> + shim_cfg.s.csr_endian_mode = 1;
>> +#else
>> + shim_cfg.s.dma_endian_mode = 0;
>> + shim_cfg.s.csr_endian_mode = 0;
>> +#endif
>> + shim_cfg.s.dma_read_cmd = 1; /* No allocate L2C */
>> + cvmx_write_csr(CVMX_SATA_UCTL_SHIM_CFG, shim_cfg.u64);
>> +
>> + /* Set a good dma_mask */
>> + pdev->dev.coherent_dma_mask = DMA_BIT_MASK(64);
>> + pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
>
> I thought a dma-ranges property in the DT could be used to set up the
> DMA mask appropriately?
The DT contains no dma-ranges property, and we know a priori, that it
should be 64-bits.
>
> Thanks,
> Mark.
>
>
next prev parent reply other threads:[~2015-01-19 19:16 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-19 15:23 [PATCH] SATA: OCTEON: support SATA on OCTEON platform Aleksey Makarov
2015-01-19 15:23 ` Aleksey Makarov
2015-01-19 15:23 ` Aleksey Makarov
2015-01-19 15:43 ` Mark Rutland
2015-01-19 19:16 ` David Daney [this message]
2015-01-19 20:30 ` Rob Herring
2015-01-19 20:46 ` Arnd Bergmann
[not found] ` <54BD580C.6030701-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-01-21 16:54 ` Mark Rutland
2015-01-21 16:54 ` Mark Rutland
2015-01-21 17:17 ` David Daney
[not found] ` <54BFDF2B.80708-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
2015-01-22 14:19 ` Rob Herring
2015-01-22 14:19 ` Rob Herring
2015-01-22 14:53 ` Mark Rutland
2015-01-22 21:55 ` Aaro Koskinen
2015-01-22 21:55 ` Aaro Koskinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54BD580C.6030701@gmail.com \
--to=ddaney.cavm@gmail.com \
--cc=Pawel.Moll@arm.com \
--cc=aleksey.makarov@auriga.com \
--cc=avorontsov@ru.mvista.com \
--cc=david.daney@cavium.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=hdegoede@redhat.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=mark.rutland@arm.com \
--cc=ralf@linux-mips.org \
--cc=robh+dt@kernel.org \
--cc=tj@kernel.org \
--cc=vgupta@caviumnetworks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.