mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
17dcc37e3e
On some SOCs PORTS_IMPL register value is never programmed by the
firmware and left at zero value. Which means that no sata ports are
available for software. AHCI driver used to cope up with this by
fabricating the port_map if the PORTS_IMPL register is read zero,
but recent patch broke this workaround as zero value was valid for
NVMe disks.
This patch adds ports-implemented DT bindings as workaround for this issue
in a way that DT can can override the PORTS_IMPL register in cases where
the firmware did not program it already.
Fixes: 566d1827df
("libata: disable forced PORTS_IMPL for >= AHCI 1.3")
Cc: stable@vger.kernel.org # v4.5+
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Acked-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
87 lines
2.5 KiB
Plaintext
87 lines
2.5 KiB
Plaintext
* AHCI SATA Controller
|
|
|
|
SATA nodes are defined to describe on-chip Serial ATA controllers.
|
|
Each SATA controller should have its own node.
|
|
|
|
It is possible, but not required, to represent each port as a sub-node.
|
|
It allows to enable each port independently when dealing with multiple
|
|
PHYs.
|
|
|
|
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"
|
|
- "marvell,armada-3700-ahci"
|
|
- "snps,dwc-ahci"
|
|
- "snps,exynos5440-ahci"
|
|
- "snps,spear-ahci"
|
|
- "generic-ahci"
|
|
- interrupts : <interrupt mapping for SATA IRQ>
|
|
- reg : <registers mapping>
|
|
|
|
Please note that when using "generic-ahci" you must also specify a SoC specific
|
|
compatible:
|
|
compatible = "manufacturer,soc-model-ahci", "generic-ahci";
|
|
|
|
Optional properties:
|
|
- dma-coherent : Present if dma operations are coherent
|
|
- clocks : a list of phandle + clock specifier pairs
|
|
- target-supply : regulator for SATA target power
|
|
- phys : reference to the SATA PHY node
|
|
- phy-names : must be "sata-phy"
|
|
- ports-implemented : Mask that indicates which ports that the HBA supports
|
|
are available for software to use. Useful if PORTS_IMPL
|
|
is not programmed by the BIOS, which is true with
|
|
some embedded SOC's.
|
|
|
|
Required properties when using sub-nodes:
|
|
- #address-cells : number of cells to encode an address
|
|
- #size-cells : number of cells representing the size of an address
|
|
|
|
|
|
Sub-nodes required properties:
|
|
- reg : the port number
|
|
And at least one of the following properties:
|
|
- phys : reference to the SATA PHY node
|
|
- target-supply : regulator for SATA target power
|
|
|
|
Examples:
|
|
sata@ffe08000 {
|
|
compatible = "snps,spear-ahci";
|
|
reg = <0xffe08000 0x1000>;
|
|
interrupts = <115>;
|
|
};
|
|
|
|
ahci: sata@01c18000 {
|
|
compatible = "allwinner,sun4i-a10-ahci";
|
|
reg = <0x01c18000 0x1000>;
|
|
interrupts = <56>;
|
|
clocks = <&pll6 0>, <&ahb_gates 25>;
|
|
target-supply = <®_ahci_5v>;
|
|
};
|
|
|
|
With sub-nodes:
|
|
sata@f7e90000 {
|
|
compatible = "marvell,berlin2q-achi", "generic-ahci";
|
|
reg = <0xe90000 0x1000>;
|
|
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
|
clocks = <&chip CLKID_SATA>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
sata0: sata-port@0 {
|
|
reg = <0>;
|
|
phys = <&sata_phy 0>;
|
|
target-supply = <®_sata0>;
|
|
};
|
|
|
|
sata1: sata-port@1 {
|
|
reg = <1>;
|
|
phys = <&sata_phy 1>;
|
|
target-supply = <®_sata1>;;
|
|
};
|
|
};
|