MIPS: OCTEON: program rx/tx-delay always from DT
Program rx/tx-delay always from DT. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Paul Burton <paul.burton@mips.com> Cc: linux-mips@vger.kernel.org
This commit is contained in:
parent
1836c2b246
commit
3d2521810e
|
@ -180,6 +180,8 @@
|
||||||
ethernet@0 {
|
ethernet@0 {
|
||||||
phy-handle = <&phy2>;
|
phy-handle = <&phy2>;
|
||||||
cavium,alt-phy-handle = <&phy100>;
|
cavium,alt-phy-handle = <&phy100>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0>;
|
||||||
fixed-link {
|
fixed-link {
|
||||||
speed = <1000>;
|
speed = <1000>;
|
||||||
full-duplex;
|
full-duplex;
|
||||||
|
@ -188,6 +190,8 @@
|
||||||
ethernet@1 {
|
ethernet@1 {
|
||||||
phy-handle = <&phy3>;
|
phy-handle = <&phy3>;
|
||||||
cavium,alt-phy-handle = <&phy101>;
|
cavium,alt-phy-handle = <&phy101>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0>;
|
||||||
fixed-link {
|
fixed-link {
|
||||||
speed = <1000>;
|
speed = <1000>;
|
||||||
full-duplex;
|
full-duplex;
|
||||||
|
@ -196,6 +200,8 @@
|
||||||
ethernet@2 {
|
ethernet@2 {
|
||||||
phy-handle = <&phy4>;
|
phy-handle = <&phy4>;
|
||||||
cavium,alt-phy-handle = <&phy102>;
|
cavium,alt-phy-handle = <&phy102>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0>;
|
||||||
};
|
};
|
||||||
ethernet@3 {
|
ethernet@3 {
|
||||||
compatible = "cavium,octeon-3860-pip-port";
|
compatible = "cavium,octeon-3860-pip-port";
|
||||||
|
|
|
@ -33,12 +33,18 @@
|
||||||
interface@0 {
|
interface@0 {
|
||||||
ethernet@0 {
|
ethernet@0 {
|
||||||
phy-handle = <&phy7>;
|
phy-handle = <&phy7>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0x10>;
|
||||||
};
|
};
|
||||||
ethernet@1 {
|
ethernet@1 {
|
||||||
phy-handle = <&phy6>;
|
phy-handle = <&phy6>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0x10>;
|
||||||
};
|
};
|
||||||
ethernet@2 {
|
ethernet@2 {
|
||||||
phy-handle = <&phy5>;
|
phy-handle = <&phy5>;
|
||||||
|
rx-delay = <0>;
|
||||||
|
tx-delay = <0x10>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -320,45 +320,6 @@ int __cvmx_helper_board_interface_probe(int interface, int supported_ports)
|
||||||
return supported_ports;
|
return supported_ports;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable packet input/output from the hardware. This function is
|
|
||||||
* called after by cvmx_helper_packet_hardware_enable() to
|
|
||||||
* perform board specific initialization. For most boards
|
|
||||||
* nothing is needed.
|
|
||||||
*
|
|
||||||
* @interface: Interface to enable
|
|
||||||
*
|
|
||||||
* Returns Zero on success, negative on failure
|
|
||||||
*/
|
|
||||||
int __cvmx_helper_board_hardware_enable(int interface)
|
|
||||||
{
|
|
||||||
if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CN3005_EVB_HS5) {
|
|
||||||
if (interface == 0) {
|
|
||||||
/* Different config for switch port */
|
|
||||||
cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(1, interface), 0);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(1, interface), 0);
|
|
||||||
/*
|
|
||||||
* Boards with gigabit WAN ports need a
|
|
||||||
* different setting that is compatible with
|
|
||||||
* 100 Mbit settings
|
|
||||||
*/
|
|
||||||
cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(0, interface),
|
|
||||||
0xc);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(0, interface),
|
|
||||||
0xc);
|
|
||||||
}
|
|
||||||
} else if (cvmx_sysinfo_get()->board_type ==
|
|
||||||
CVMX_BOARD_TYPE_UBNT_E100) {
|
|
||||||
cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(0, interface), 0);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(0, interface), 0x10);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(1, interface), 0);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(1, interface), 0x10);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(2, interface), 0);
|
|
||||||
cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(2, interface), 0x10);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the clock type used for the USB block based on board type.
|
* Get the clock type used for the USB block based on board type.
|
||||||
* Used by the USB code for auto configuration of clock type.
|
* Used by the USB code for auto configuration of clock type.
|
||||||
|
|
|
@ -762,7 +762,6 @@ static int __cvmx_helper_packet_hardware_enable(int interface)
|
||||||
result = __cvmx_helper_loop_enable(interface);
|
result = __cvmx_helper_loop_enable(interface);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
result |= __cvmx_helper_board_hardware_enable(interface);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -603,6 +603,45 @@ static void __init octeon_fdt_rm_ethernet(int node)
|
||||||
fdt_nop_node(initial_boot_params, node);
|
fdt_nop_node(initial_boot_params, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init _octeon_rx_tx_delay(int eth, int rx_delay, int tx_delay)
|
||||||
|
{
|
||||||
|
fdt_setprop_inplace_cell(initial_boot_params, eth, "rx-delay",
|
||||||
|
rx_delay);
|
||||||
|
fdt_setprop_inplace_cell(initial_boot_params, eth, "tx-delay",
|
||||||
|
tx_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init octeon_rx_tx_delay(int eth, int iface, int port)
|
||||||
|
{
|
||||||
|
switch (cvmx_sysinfo_get()->board_type) {
|
||||||
|
case CVMX_BOARD_TYPE_CN3005_EVB_HS5:
|
||||||
|
if (iface == 0) {
|
||||||
|
if (port == 0) {
|
||||||
|
/*
|
||||||
|
* Boards with gigabit WAN ports need a
|
||||||
|
* different setting that is compatible with
|
||||||
|
* 100 Mbit settings
|
||||||
|
*/
|
||||||
|
_octeon_rx_tx_delay(eth, 0xc, 0x0c);
|
||||||
|
return;
|
||||||
|
} else if (port == 1) {
|
||||||
|
/* Different config for switch port. */
|
||||||
|
_octeon_rx_tx_delay(eth, 0x0, 0x0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CVMX_BOARD_TYPE_UBNT_E100:
|
||||||
|
if (iface == 0 && port <= 2) {
|
||||||
|
_octeon_rx_tx_delay(eth, 0x0, 0x10);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fdt_nop_property(initial_boot_params, eth, "rx-delay");
|
||||||
|
fdt_nop_property(initial_boot_params, eth, "tx-delay");
|
||||||
|
}
|
||||||
|
|
||||||
static void __init octeon_fdt_pip_port(int iface, int i, int p, int max)
|
static void __init octeon_fdt_pip_port(int iface, int i, int p, int max)
|
||||||
{
|
{
|
||||||
char name_buffer[20];
|
char name_buffer[20];
|
||||||
|
@ -633,6 +672,7 @@ static void __init octeon_fdt_pip_port(int iface, int i, int p, int max)
|
||||||
WARN_ON(octeon_has_fixed_link(ipd_port));
|
WARN_ON(octeon_has_fixed_link(ipd_port));
|
||||||
else if (!octeon_has_fixed_link(ipd_port))
|
else if (!octeon_has_fixed_link(ipd_port))
|
||||||
fdt_nop_node(initial_boot_params, fixed_link);
|
fdt_nop_node(initial_boot_params, fixed_link);
|
||||||
|
octeon_rx_tx_delay(eth, i, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init octeon_fdt_pip_iface(int pip, int idx)
|
static void __init octeon_fdt_pip_iface(int pip, int idx)
|
||||||
|
|
|
@ -119,18 +119,6 @@ extern cvmx_helper_link_info_t __cvmx_helper_board_link_get(int ipd_port);
|
||||||
extern int __cvmx_helper_board_interface_probe(int interface,
|
extern int __cvmx_helper_board_interface_probe(int interface,
|
||||||
int supported_ports);
|
int supported_ports);
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable packet input/output from the hardware. This function is
|
|
||||||
* called after by cvmx_helper_packet_hardware_enable() to
|
|
||||||
* perform board specific initialization. For most boards
|
|
||||||
* nothing is needed.
|
|
||||||
*
|
|
||||||
* @interface: Interface to enable
|
|
||||||
*
|
|
||||||
* Returns Zero on success, negative on failure
|
|
||||||
*/
|
|
||||||
extern int __cvmx_helper_board_hardware_enable(int interface);
|
|
||||||
|
|
||||||
enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(void);
|
enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(void);
|
||||||
|
|
||||||
#endif /* __CVMX_HELPER_BOARD_H__ */
|
#endif /* __CVMX_HELPER_BOARD_H__ */
|
||||||
|
|
Loading…
Reference in New Issue