mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-15 01:44:52 +00:00
Merge branch 'sti_drivers'
Peter Griffin says: ==================== Fix sti drivers whcih mix reg address spaces A V2 of this old series incorporating Arnd and Lees Feedback form v1. Following on from Arnds comments about the picophy driver here https://lkml.org/lkml/2014/11/13/161, this series fixes the remaining upstreamed drivers for STI, which are mixing address spaces in the reg property. We do this in a way similar to the keystone and bcm7445 platforms, by having sysconfig phandle/ offset pair (where only one register is required). Or phandle / integer array where multiple offsets in the same bank are needed). This series breaks DT compatability! But the platform support is WIP and only being used by the few developers who are upstreaming support for it. I've made each change to the driver / dt doc / dt file as a single atomic commit so the kernel will remain bisectable. This series then also enables the picophy driver, and adds back in the ehci/ohci dt nodes for stih410 which make use of the picophy. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
f3cd7a264b
@ -9,14 +9,10 @@ The device node has following properties.
|
|||||||
Required properties:
|
Required properties:
|
||||||
- compatible : Can be "st,stih415-dwmac", "st,stih416-dwmac",
|
- compatible : Can be "st,stih415-dwmac", "st,stih416-dwmac",
|
||||||
"st,stih407-dwmac", "st,stid127-dwmac".
|
"st,stih407-dwmac", "st,stid127-dwmac".
|
||||||
- reg : Offset of the glue configuration register map in system
|
- st,syscon : Should be phandle/offset pair. The phandle to the syscon node which
|
||||||
configuration regmap pointed by st,syscon property and size.
|
encompases the glue register, and the offset of the control register.
|
||||||
- st,syscon : Should be phandle to system configuration node which
|
|
||||||
encompases this glue registers.
|
|
||||||
- st,gmac_en: this is to enable the gmac into a dedicated sysctl control
|
- st,gmac_en: this is to enable the gmac into a dedicated sysctl control
|
||||||
register available on STiH407 SoC.
|
register available on STiH407 SoC.
|
||||||
- sti-ethconf: this is the gmac glue logic register to enable the GMAC,
|
|
||||||
select among the different modes and program the clk retiming.
|
|
||||||
- pinctrl-0: pin-control for all the MII mode supported.
|
- pinctrl-0: pin-control for all the MII mode supported.
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
@ -40,10 +36,10 @@ ethernet0: dwmac@9630000 {
|
|||||||
device_type = "network";
|
device_type = "network";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
compatible = "st,stih407-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
compatible = "st,stih407-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
||||||
reg = <0x9630000 0x8000>, <0x80 0x4>;
|
reg = <0x9630000 0x8000>;
|
||||||
reg-names = "stmmaceth", "sti-ethconf";
|
reg-names = "stmmaceth";
|
||||||
|
|
||||||
st,syscon = <&syscfg_sbc_reg>;
|
st,syscon = <&syscfg_sbc_reg 0x80>;
|
||||||
st,gmac_en;
|
st,gmac_en;
|
||||||
resets = <&softreset STIH407_ETH1_SOFTRESET>;
|
resets = <&softreset STIH407_ETH1_SOFTRESET>;
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
|
@ -6,8 +6,10 @@ for SATA and PCIe.
|
|||||||
|
|
||||||
Required properties (controller (parent) node):
|
Required properties (controller (parent) node):
|
||||||
- compatible : Should be "st,miphy365x-phy"
|
- compatible : Should be "st,miphy365x-phy"
|
||||||
- st,syscfg : Should be a phandle of the system configuration register group
|
- st,syscfg : Phandle / integer array property. Phandle of sysconfig group
|
||||||
which contain the SATA, PCIe mode setting bits
|
containing the miphy registers and integer array should contain
|
||||||
|
an entry for each port sub-node, specifying the control
|
||||||
|
register offset inside the sysconfig group.
|
||||||
|
|
||||||
Required nodes : A sub-node is required for each channel the controller
|
Required nodes : A sub-node is required for each channel the controller
|
||||||
provides. Address range information including the usual
|
provides. Address range information including the usual
|
||||||
@ -26,7 +28,6 @@ Required properties (port (child) node):
|
|||||||
registers filled in "reg":
|
registers filled in "reg":
|
||||||
- sata: For SATA devices
|
- sata: For SATA devices
|
||||||
- pcie: For PCIe devices
|
- pcie: For PCIe devices
|
||||||
- syscfg: To specify the syscfg based config register
|
|
||||||
|
|
||||||
Optional properties (port (child) node):
|
Optional properties (port (child) node):
|
||||||
- st,sata-gen : Generation of locally attached SATA IP. Expected values
|
- st,sata-gen : Generation of locally attached SATA IP. Expected values
|
||||||
@ -39,20 +40,20 @@ Example:
|
|||||||
|
|
||||||
miphy365x_phy: miphy365x@fe382000 {
|
miphy365x_phy: miphy365x@fe382000 {
|
||||||
compatible = "st,miphy365x-phy";
|
compatible = "st,miphy365x-phy";
|
||||||
st,syscfg = <&syscfg_rear>;
|
st,syscfg = <&syscfg_rear 0x824 0x828>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
phy_port0: port@fe382000 {
|
phy_port0: port@fe382000 {
|
||||||
reg = <0xfe382000 0x100>, <0xfe394000 0x100>, <0x824 0x4>;
|
reg = <0xfe382000 0x100>, <0xfe394000 0x100>;
|
||||||
reg-names = "sata", "pcie", "syscfg";
|
reg-names = "sata", "pcie";
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
st,sata-gen = <3>;
|
st,sata-gen = <3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
phy_port1: port@fe38a000 {
|
phy_port1: port@fe38a000 {
|
||||||
reg = <0xfe38a000 0x100>, <0xfe804000 0x100>, <0x828 0x4>;;
|
reg = <0xfe38a000 0x100>, <0xfe804000 0x100>;;
|
||||||
reg-names = "sata", "pcie", "syscfg";
|
reg-names = "sata", "pcie", "syscfg";
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
st,pcie-tx-pol-inv;
|
st,pcie-tx-pol-inv;
|
||||||
|
@ -5,10 +5,7 @@ host controllers (when controlling usb2/1.1 devices) available on STiH407 SoC fa
|
|||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible : should be "st,stih407-usb2-phy"
|
- compatible : should be "st,stih407-usb2-phy"
|
||||||
- reg : contain the offset and length of the system configuration registers
|
- st,syscfg : phandle of sysconfig bank plus integer array containing phyparam and phyctrl register offsets
|
||||||
used as glue logic to control & parameter phy
|
|
||||||
- reg-names : the names of the system configuration registers in "reg", should be "param" and "reg"
|
|
||||||
- st,syscfg : sysconfig register to manage phy parameter at driver level
|
|
||||||
- resets : list of phandle and reset specifier pairs. There should be two entries, one
|
- resets : list of phandle and reset specifier pairs. There should be two entries, one
|
||||||
for the whole phy and one for the port
|
for the whole phy and one for the port
|
||||||
- reset-names : list of reset signal names. Should be "global" and "port"
|
- reset-names : list of reset signal names. Should be "global" and "port"
|
||||||
@ -19,11 +16,8 @@ Example:
|
|||||||
|
|
||||||
usb2_picophy0: usbpicophy@f8 {
|
usb2_picophy0: usbpicophy@f8 {
|
||||||
compatible = "st,stih407-usb2-phy";
|
compatible = "st,stih407-usb2-phy";
|
||||||
reg = <0xf8 0x04>, /* syscfg 5062 */
|
|
||||||
<0xf4 0x04>; /* syscfg 5061 */
|
|
||||||
reg-names = "param", "ctrl";
|
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
st,syscfg = <&syscfg_core>;
|
st,syscfg = <&syscfg_core 0x100 0xf4>;
|
||||||
resets = <&softreset STIH407_PICOPHY_SOFTRESET>,
|
resets = <&softreset STIH407_PICOPHY_SOFTRESET>,
|
||||||
<&picophyreset STIH407_PICOPHY0_RESET>;
|
<&picophyreset STIH407_PICOPHY0_RESET>;
|
||||||
reset-names = "global", "port";
|
reset-names = "global", "port";
|
||||||
|
@ -274,5 +274,14 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
usb2_picophy0: phy1 {
|
||||||
|
compatible = "st,stih407-usb2-phy";
|
||||||
|
#phy-cells = <0>;
|
||||||
|
st,syscfg = <&syscfg_core 0x100 0xf4>;
|
||||||
|
resets = <&softreset STIH407_PICOPHY_SOFTRESET>,
|
||||||
|
<&picophyreset STIH407_PICOPHY0_RESET>;
|
||||||
|
reset-names = "global", "port";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -10,5 +10,75 @@
|
|||||||
#include "stih407-family.dtsi"
|
#include "stih407-family.dtsi"
|
||||||
#include "stih410-pinctrl.dtsi"
|
#include "stih410-pinctrl.dtsi"
|
||||||
/ {
|
/ {
|
||||||
|
soc {
|
||||||
|
usb2_picophy1: phy2 {
|
||||||
|
compatible = "st,stih407-usb2-phy";
|
||||||
|
#phy-cells = <0>;
|
||||||
|
st,syscfg = <&syscfg_core 0xf8 0xf4>;
|
||||||
|
resets = <&softreset STIH407_PICOPHY_SOFTRESET>,
|
||||||
|
<&picophyreset STIH407_PICOPHY0_RESET>;
|
||||||
|
reset-names = "global", "port";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb2_picophy2: phy3 {
|
||||||
|
compatible = "st,stih407-usb2-phy";
|
||||||
|
#phy-cells = <0>;
|
||||||
|
st,syscfg = <&syscfg_core 0xfc 0xf4>;
|
||||||
|
resets = <&softreset STIH407_PICOPHY_SOFTRESET>,
|
||||||
|
<&picophyreset STIH407_PICOPHY1_RESET>;
|
||||||
|
reset-names = "global", "port";
|
||||||
|
};
|
||||||
|
|
||||||
|
ohci0: usb@9a03c00 {
|
||||||
|
compatible = "st,st-ohci-300x";
|
||||||
|
reg = <0x9a03c00 0x100>;
|
||||||
|
interrupts = <GIC_SPI 180 IRQ_TYPE_NONE>;
|
||||||
|
clocks = <&clk_s_c0_flexgen CLK_TX_ICN_DISP_0>;
|
||||||
|
resets = <&powerdown STIH407_USB2_PORT0_POWERDOWN>,
|
||||||
|
<&softreset STIH407_USB2_PORT0_SOFTRESET>;
|
||||||
|
reset-names = "power", "softreset";
|
||||||
|
phys = <&usb2_picophy1>;
|
||||||
|
phy-names = "usb";
|
||||||
|
};
|
||||||
|
|
||||||
|
ehci0: usb@9a03e00 {
|
||||||
|
compatible = "st,st-ehci-300x";
|
||||||
|
reg = <0x9a03e00 0x100>;
|
||||||
|
interrupts = <GIC_SPI 151 IRQ_TYPE_NONE>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usb0>;
|
||||||
|
clocks = <&clk_s_c0_flexgen CLK_TX_ICN_DISP_0>;
|
||||||
|
resets = <&powerdown STIH407_USB2_PORT0_POWERDOWN>,
|
||||||
|
<&softreset STIH407_USB2_PORT0_SOFTRESET>;
|
||||||
|
reset-names = "power", "softreset";
|
||||||
|
phys = <&usb2_picophy1>;
|
||||||
|
phy-names = "usb";
|
||||||
|
};
|
||||||
|
|
||||||
|
ohci1: usb@9a83c00 {
|
||||||
|
compatible = "st,st-ohci-300x";
|
||||||
|
reg = <0x9a83c00 0x100>;
|
||||||
|
interrupts = <GIC_SPI 181 IRQ_TYPE_NONE>;
|
||||||
|
clocks = <&clk_s_c0_flexgen CLK_TX_ICN_DISP_0>;
|
||||||
|
resets = <&powerdown STIH407_USB2_PORT1_POWERDOWN>,
|
||||||
|
<&softreset STIH407_USB2_PORT1_SOFTRESET>;
|
||||||
|
reset-names = "power", "softreset";
|
||||||
|
phys = <&usb2_picophy2>;
|
||||||
|
phy-names = "usb";
|
||||||
|
};
|
||||||
|
|
||||||
|
ehci1: usb@9a83e00 {
|
||||||
|
compatible = "st,st-ehci-300x";
|
||||||
|
reg = <0x9a83e00 0x100>;
|
||||||
|
interrupts = <GIC_SPI 153 IRQ_TYPE_NONE>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usb1>;
|
||||||
|
clocks = <&clk_s_c0_flexgen CLK_TX_ICN_DISP_0>;
|
||||||
|
resets = <&powerdown STIH407_USB2_PORT1_POWERDOWN>,
|
||||||
|
<&softreset STIH407_USB2_PORT1_SOFTRESET>;
|
||||||
|
reset-names = "power", "softreset";
|
||||||
|
phys = <&usb2_picophy2>;
|
||||||
|
phy-names = "usb";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -153,8 +153,8 @@
|
|||||||
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
|
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
reg = <0xfe810000 0x8000>, <0x148 0x4>;
|
reg = <0xfe810000 0x8000>;
|
||||||
reg-names = "stmmaceth", "sti-ethconf";
|
reg-names = "stmmaceth";
|
||||||
|
|
||||||
interrupts = <0 147 0>, <0 148 0>, <0 149 0>;
|
interrupts = <0 147 0>, <0 148 0>, <0 149 0>;
|
||||||
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
||||||
@ -165,7 +165,7 @@
|
|||||||
snps,mixed-burst;
|
snps,mixed-burst;
|
||||||
snps,force_sf_dma_mode;
|
snps,force_sf_dma_mode;
|
||||||
|
|
||||||
st,syscon = <&syscfg_rear>;
|
st,syscon = <&syscfg_rear 0x148>;
|
||||||
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_mii0>;
|
pinctrl-0 = <&pinctrl_mii0>;
|
||||||
@ -177,8 +177,8 @@
|
|||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
|
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0xfef08000 0x8000>, <0x74 0x4>;
|
reg = <0xfef08000 0x8000>;
|
||||||
reg-names = "stmmaceth", "sti-ethconf";
|
reg-names = "stmmaceth";
|
||||||
interrupts = <0 150 0>, <0 151 0>, <0 152 0>;
|
interrupts = <0 150 0>, <0 151 0>, <0 152 0>;
|
||||||
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
||||||
|
|
||||||
@ -186,7 +186,7 @@
|
|||||||
snps,mixed-burst;
|
snps,mixed-burst;
|
||||||
snps,force_sf_dma_mode;
|
snps,force_sf_dma_mode;
|
||||||
|
|
||||||
st,syscon = <&syscfg_sbc>;
|
st,syscon = <&syscfg_sbc 0x74>;
|
||||||
|
|
||||||
resets = <&softreset STIH415_ETH1_SOFTRESET>;
|
resets = <&softreset STIH415_ETH1_SOFTRESET>;
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
|
@ -163,8 +163,8 @@
|
|||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0xfe810000 0x8000>, <0x8bc 0x4>;
|
reg = <0xfe810000 0x8000>;
|
||||||
reg-names = "stmmaceth", "sti-ethconf";
|
reg-names = "stmmaceth";
|
||||||
|
|
||||||
interrupts = <0 133 0>, <0 134 0>, <0 135 0>;
|
interrupts = <0 133 0>, <0 134 0>, <0 135 0>;
|
||||||
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
||||||
@ -172,7 +172,7 @@
|
|||||||
snps,pbl = <32>;
|
snps,pbl = <32>;
|
||||||
snps,mixed-burst;
|
snps,mixed-burst;
|
||||||
|
|
||||||
st,syscon = <&syscfg_rear>;
|
st,syscon = <&syscfg_rear 0x8bc>;
|
||||||
resets = <&softreset STIH416_ETH0_SOFTRESET>;
|
resets = <&softreset STIH416_ETH0_SOFTRESET>;
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@ -185,15 +185,15 @@
|
|||||||
device_type = "network";
|
device_type = "network";
|
||||||
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0xfef08000 0x8000>, <0x7f0 0x4>;
|
reg = <0xfef08000 0x8000>;
|
||||||
reg-names = "stmmaceth", "sti-ethconf";
|
reg-names = "stmmaceth";
|
||||||
interrupts = <0 136 0>, <0 137 0>, <0 138 0>;
|
interrupts = <0 136 0>, <0 137 0>, <0 138 0>;
|
||||||
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
|
||||||
|
|
||||||
snps,pbl = <32>;
|
snps,pbl = <32>;
|
||||||
snps,mixed-burst;
|
snps,mixed-burst;
|
||||||
|
|
||||||
st,syscon = <&syscfg_sbc>;
|
st,syscon = <&syscfg_sbc 0x7f0>;
|
||||||
|
|
||||||
resets = <&softreset STIH416_ETH1_SOFTRESET>;
|
resets = <&softreset STIH416_ETH1_SOFTRESET>;
|
||||||
reset-names = "stmmaceth";
|
reset-names = "stmmaceth";
|
||||||
@ -283,21 +283,21 @@
|
|||||||
|
|
||||||
miphy365x_phy: phy@fe382000 {
|
miphy365x_phy: phy@fe382000 {
|
||||||
compatible = "st,miphy365x-phy";
|
compatible = "st,miphy365x-phy";
|
||||||
st,syscfg = <&syscfg_rear>;
|
st,syscfg = <&syscfg_rear 0x824 0x828>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
phy_port0: port@fe382000 {
|
phy_port0: port@fe382000 {
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
reg = <0xfe382000 0x100>, <0xfe394000 0x100>, <0x824 0x4>;
|
reg = <0xfe382000 0x100>, <0xfe394000 0x100>;
|
||||||
reg-names = "sata", "pcie", "syscfg";
|
reg-names = "sata", "pcie";
|
||||||
};
|
};
|
||||||
|
|
||||||
phy_port1: port@fe38a000 {
|
phy_port1: port@fe38a000 {
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
reg = <0xfe38a000 0x100>, <0xfe804000 0x100>, <0x828 0x4>;
|
reg = <0xfe38a000 0x100>, <0xfe804000 0x100>;
|
||||||
reg-names = "sata", "pcie", "syscfg";
|
reg-names = "sata", "pcie";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -456,6 +456,7 @@ CONFIG_OMAP_USB2=y
|
|||||||
CONFIG_TI_PIPE3=y
|
CONFIG_TI_PIPE3=y
|
||||||
CONFIG_PHY_MIPHY365X=y
|
CONFIG_PHY_MIPHY365X=y
|
||||||
CONFIG_PHY_STIH41X_USB=y
|
CONFIG_PHY_STIH41X_USB=y
|
||||||
|
CONFIG_PHY_STIH407_USB=y
|
||||||
CONFIG_PHY_SUN4I_USB=y
|
CONFIG_PHY_SUN4I_USB=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_AUTOFS4_FS=y
|
CONFIG_AUTOFS4_FS=y
|
||||||
|
@ -122,7 +122,7 @@ struct sti_dwmac {
|
|||||||
bool ext_phyclk; /* Clock from external PHY */
|
bool ext_phyclk; /* Clock from external PHY */
|
||||||
u32 tx_retime_src; /* TXCLK Retiming*/
|
u32 tx_retime_src; /* TXCLK Retiming*/
|
||||||
struct clk *clk; /* PHY clock */
|
struct clk *clk; /* PHY clock */
|
||||||
int ctrl_reg; /* GMAC glue-logic control register */
|
u32 ctrl_reg; /* GMAC glue-logic control register */
|
||||||
int clk_sel_reg; /* GMAC ext clk selection register */
|
int clk_sel_reg; /* GMAC ext clk selection register */
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
@ -285,11 +285,6 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
|
|||||||
if (!np)
|
if (!np)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-ethconf");
|
|
||||||
if (!res)
|
|
||||||
return -ENODATA;
|
|
||||||
dwmac->ctrl_reg = res->start;
|
|
||||||
|
|
||||||
/* clk selection from extra syscfg register */
|
/* clk selection from extra syscfg register */
|
||||||
dwmac->clk_sel_reg = -ENXIO;
|
dwmac->clk_sel_reg = -ENXIO;
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-clkconf");
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-clkconf");
|
||||||
@ -300,6 +295,12 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
|
|||||||
if (IS_ERR(regmap))
|
if (IS_ERR(regmap))
|
||||||
return PTR_ERR(regmap);
|
return PTR_ERR(regmap);
|
||||||
|
|
||||||
|
err = of_property_read_u32_index(np, "st,syscon", 1, &dwmac->ctrl_reg);
|
||||||
|
if (err) {
|
||||||
|
dev_err(dev, "Can't get sysconfig ctrl offset (%d)\n", err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
dwmac->dev = dev;
|
dwmac->dev = dev;
|
||||||
dwmac->interface = of_get_phy_mode(np);
|
dwmac->interface = of_get_phy_mode(np);
|
||||||
dwmac->regmap = regmap;
|
dwmac->regmap = regmap;
|
||||||
|
@ -141,7 +141,7 @@ struct miphy365x_phy {
|
|||||||
bool pcie_tx_pol_inv;
|
bool pcie_tx_pol_inv;
|
||||||
bool sata_tx_pol_inv;
|
bool sata_tx_pol_inv;
|
||||||
u32 sata_gen;
|
u32 sata_gen;
|
||||||
u64 ctrlreg;
|
u32 ctrlreg;
|
||||||
u8 type;
|
u8 type;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ static int miphy365x_set_path(struct miphy365x_phy *miphy_phy,
|
|||||||
bool sata = (miphy_phy->type == MIPHY_TYPE_SATA);
|
bool sata = (miphy_phy->type == MIPHY_TYPE_SATA);
|
||||||
|
|
||||||
return regmap_update_bits(miphy_dev->regmap,
|
return regmap_update_bits(miphy_dev->regmap,
|
||||||
(unsigned int)miphy_phy->ctrlreg,
|
miphy_phy->ctrlreg,
|
||||||
SYSCFG_SELECT_SATA_MASK,
|
SYSCFG_SELECT_SATA_MASK,
|
||||||
sata << SYSCFG_SELECT_SATA_POS);
|
sata << SYSCFG_SELECT_SATA_POS);
|
||||||
}
|
}
|
||||||
@ -445,7 +445,6 @@ int miphy365x_get_addr(struct device *dev, struct miphy365x_phy *miphy_phy,
|
|||||||
{
|
{
|
||||||
struct device_node *phynode = miphy_phy->phy->dev.of_node;
|
struct device_node *phynode = miphy_phy->phy->dev.of_node;
|
||||||
const char *name;
|
const char *name;
|
||||||
const __be32 *taddr;
|
|
||||||
int type = miphy_phy->type;
|
int type = miphy_phy->type;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -455,22 +454,6 @@ int miphy365x_get_addr(struct device *dev, struct miphy365x_phy *miphy_phy,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(name, "syscfg", 6)) {
|
|
||||||
taddr = of_get_address(phynode, index, NULL, NULL);
|
|
||||||
if (!taddr) {
|
|
||||||
dev_err(dev, "failed to fetch syscfg address\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
miphy_phy->ctrlreg = of_translate_address(phynode, taddr);
|
|
||||||
if (miphy_phy->ctrlreg == OF_BAD_ADDR) {
|
|
||||||
dev_err(dev, "failed to translate syscfg address\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!((!strncmp(name, "sata", 4) && type == MIPHY_TYPE_SATA) ||
|
if (!((!strncmp(name, "sata", 4) && type == MIPHY_TYPE_SATA) ||
|
||||||
(!strncmp(name, "pcie", 4) && type == MIPHY_TYPE_PCIE)))
|
(!strncmp(name, "pcie", 4) && type == MIPHY_TYPE_PCIE)))
|
||||||
return 0;
|
return 0;
|
||||||
@ -606,7 +589,15 @@ static int miphy365x_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
phy_set_drvdata(phy, miphy_dev->phys[port]);
|
phy_set_drvdata(phy, miphy_dev->phys[port]);
|
||||||
|
|
||||||
port++;
|
port++;
|
||||||
|
/* sysconfig offsets are indexed from 1 */
|
||||||
|
ret = of_property_read_u32_index(np, "st,syscfg", port,
|
||||||
|
&miphy_phy->ctrlreg);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&pdev->dev, "No sysconfig offset found\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
provider = devm_of_phy_provider_register(&pdev->dev, miphy365x_xlate);
|
provider = devm_of_phy_provider_register(&pdev->dev, miphy365x_xlate);
|
||||||
|
@ -22,6 +22,9 @@
|
|||||||
#include <linux/mfd/syscon.h>
|
#include <linux/mfd/syscon.h>
|
||||||
#include <linux/phy/phy.h>
|
#include <linux/phy/phy.h>
|
||||||
|
|
||||||
|
#define PHYPARAM_REG 1
|
||||||
|
#define PHYCTRL_REG 2
|
||||||
|
|
||||||
/* Default PHY_SEL and REFCLKSEL configuration */
|
/* Default PHY_SEL and REFCLKSEL configuration */
|
||||||
#define STIH407_USB_PICOPHY_CTRL_PORT_CONF 0x6
|
#define STIH407_USB_PICOPHY_CTRL_PORT_CONF 0x6
|
||||||
#define STIH407_USB_PICOPHY_CTRL_PORT_MASK 0x1f
|
#define STIH407_USB_PICOPHY_CTRL_PORT_MASK 0x1f
|
||||||
@ -93,7 +96,7 @@ static int stih407_usb2_picophy_probe(struct platform_device *pdev)
|
|||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct phy_provider *phy_provider;
|
struct phy_provider *phy_provider;
|
||||||
struct phy *phy;
|
struct phy *phy;
|
||||||
struct resource *res;
|
int ret;
|
||||||
|
|
||||||
phy_dev = devm_kzalloc(dev, sizeof(*phy_dev), GFP_KERNEL);
|
phy_dev = devm_kzalloc(dev, sizeof(*phy_dev), GFP_KERNEL);
|
||||||
if (!phy_dev)
|
if (!phy_dev)
|
||||||
@ -123,19 +126,19 @@ static int stih407_usb2_picophy_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(phy_dev->regmap);
|
return PTR_ERR(phy_dev->regmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ctrl");
|
ret = of_property_read_u32_index(np, "st,syscfg", PHYPARAM_REG,
|
||||||
if (!res) {
|
&phy_dev->param);
|
||||||
dev_err(dev, "No ctrl reg found\n");
|
if (ret) {
|
||||||
return -ENXIO;
|
dev_err(dev, "can't get phyparam offset (%d)\n", ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
phy_dev->ctrl = res->start;
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "param");
|
ret = of_property_read_u32_index(np, "st,syscfg", PHYCTRL_REG,
|
||||||
if (!res) {
|
&phy_dev->ctrl);
|
||||||
dev_err(dev, "No param reg found\n");
|
if (ret) {
|
||||||
return -ENXIO;
|
dev_err(dev, "can't get phyctrl offset (%d)\n", ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
phy_dev->param = res->start;
|
|
||||||
|
|
||||||
phy = devm_phy_create(dev, NULL, &stih407_usb2_picophy_data);
|
phy = devm_phy_create(dev, NULL, &stih407_usb2_picophy_data);
|
||||||
if (IS_ERR(phy)) {
|
if (IS_ERR(phy)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user