mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 02:19:51 +00:00
MIPS: Octeon: Rearrange CVMX files in preperation for device tree
Signed-off-by: David Daney <david.daney@cavium.com> Cc: linux-mips@linux-mips.org Cc: netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Patchwork: https://patchwork.linux-mips.org/patch/2941/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
ada11a339d
commit
37d3bfd992
11 changed files with 117 additions and 27 deletions
|
@ -326,6 +326,10 @@ static int __cvmx_helper_sgmii_hardware_init(int interface, int num_ports)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __cvmx_helper_sgmii_enumerate(int interface)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
/**
|
||||
* Probe a SGMII interface and determine the number of ports
|
||||
* connected to it. The SGMII interface should still be down after
|
||||
|
@ -347,7 +351,7 @@ int __cvmx_helper_sgmii_probe(int interface)
|
|||
mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
|
||||
mode.s.en = 1;
|
||||
cvmx_write_csr(CVMX_GMXX_INF_MODE(interface), mode.u64);
|
||||
return 4;
|
||||
return __cvmx_helper_sgmii_enumerate(interface);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -51,6 +51,16 @@ void __cvmx_interrupt_stxx_int_msk_enable(int index);
|
|||
#define CVMX_HELPER_SPI_TIMEOUT 10
|
||||
#endif
|
||||
|
||||
int __cvmx_helper_spi_enumerate(int interface)
|
||||
{
|
||||
if ((cvmx_sysinfo_get()->board_type != CVMX_BOARD_TYPE_SIM) &&
|
||||
cvmx_spi4000_is_present(interface)) {
|
||||
return 10;
|
||||
} else {
|
||||
return 16;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Probe a SPI interface and determine the number of ports
|
||||
* connected to it. The SPI interface should still be down after
|
||||
|
|
|
@ -44,6 +44,19 @@
|
|||
void __cvmx_interrupt_gmxx_enable(int interface);
|
||||
void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block);
|
||||
void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index);
|
||||
|
||||
int __cvmx_helper_xaui_enumerate(int interface)
|
||||
{
|
||||
union cvmx_gmxx_hg2_control gmx_hg2_control;
|
||||
|
||||
/* If HiGig2 is enabled return 16 ports, otherwise return 1 port */
|
||||
gmx_hg2_control.u64 = cvmx_read_csr(CVMX_GMXX_HG2_CONTROL(interface));
|
||||
if (gmx_hg2_control.s.hg2tx_en)
|
||||
return 16;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Probe a XAUI interface and determine the number of ports
|
||||
* connected to it. The XAUI interface should still be down
|
||||
|
@ -56,7 +69,6 @@ void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index);
|
|||
int __cvmx_helper_xaui_probe(int interface)
|
||||
{
|
||||
int i;
|
||||
union cvmx_gmxx_hg2_control gmx_hg2_control;
|
||||
union cvmx_gmxx_inf_mode mode;
|
||||
|
||||
/*
|
||||
|
@ -90,13 +102,7 @@ int __cvmx_helper_xaui_probe(int interface)
|
|||
pko_mem_port_ptrs.s.pid = interface * 16 + i;
|
||||
cvmx_write_csr(CVMX_PKO_MEM_PORT_PTRS, pko_mem_port_ptrs.u64);
|
||||
}
|
||||
|
||||
/* If HiGig2 is enabled return 16 ports, otherwise return 1 port */
|
||||
gmx_hg2_control.u64 = cvmx_read_csr(CVMX_GMXX_HG2_CONTROL(interface));
|
||||
if (gmx_hg2_control.s.hg2tx_en)
|
||||
return 16;
|
||||
else
|
||||
return 1;
|
||||
return __cvmx_helper_xaui_enumerate(interface);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -233,6 +233,80 @@ static int __cvmx_helper_port_setup_ipd(int ipd_port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function sets the interface_port_count[interface] correctly,
|
||||
* without modifying any hardware configuration. Hardware setup of
|
||||
* the ports will be performed later.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
int cvmx_helper_interface_enumerate(int interface)
|
||||
{
|
||||
switch (cvmx_helper_interface_get_mode(interface)) {
|
||||
/* These types don't support ports to IPD/PKO */
|
||||
case CVMX_HELPER_INTERFACE_MODE_DISABLED:
|
||||
case CVMX_HELPER_INTERFACE_MODE_PCIE:
|
||||
interface_port_count[interface] = 0;
|
||||
break;
|
||||
/* XAUI is a single high speed port */
|
||||
case CVMX_HELPER_INTERFACE_MODE_XAUI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_xaui_enumerate(interface);
|
||||
break;
|
||||
/*
|
||||
* RGMII/GMII/MII are all treated about the same. Most
|
||||
* functions refer to these ports as RGMII.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_RGMII:
|
||||
case CVMX_HELPER_INTERFACE_MODE_GMII:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_rgmii_enumerate(interface);
|
||||
break;
|
||||
/*
|
||||
* SPI4 can have 1-16 ports depending on the device at
|
||||
* the other end.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_SPI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_spi_enumerate(interface);
|
||||
break;
|
||||
/*
|
||||
* SGMII can have 1-4 ports depending on how many are
|
||||
* hooked up.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_SGMII:
|
||||
case CVMX_HELPER_INTERFACE_MODE_PICMG:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_sgmii_enumerate(interface);
|
||||
break;
|
||||
/* PCI target Network Packet Interface */
|
||||
case CVMX_HELPER_INTERFACE_MODE_NPI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_npi_enumerate(interface);
|
||||
break;
|
||||
/*
|
||||
* Special loopback only ports. These are not the same
|
||||
* as other ports in loopback mode.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_LOOP:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_loop_enumerate(interface);
|
||||
break;
|
||||
}
|
||||
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_board_interface_probe(interface,
|
||||
interface_port_count
|
||||
[interface]);
|
||||
|
||||
/* Make sure all global variables propagate to other cores */
|
||||
CVMX_SYNCWS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function probes an interface to determine the actual
|
||||
* number of hardware ports connected to it. It doesn't setup the
|
||||
|
@ -246,6 +320,7 @@ static int __cvmx_helper_port_setup_ipd(int ipd_port)
|
|||
*/
|
||||
int cvmx_helper_interface_probe(int interface)
|
||||
{
|
||||
cvmx_helper_interface_enumerate(interface);
|
||||
/* At this stage in the game we don't want packets to be moving yet.
|
||||
The following probe calls should perform hardware setup
|
||||
needed to determine port counts. Receive must still be disabled */
|
||||
|
@ -253,12 +328,10 @@ int cvmx_helper_interface_probe(int interface)
|
|||
/* These types don't support ports to IPD/PKO */
|
||||
case CVMX_HELPER_INTERFACE_MODE_DISABLED:
|
||||
case CVMX_HELPER_INTERFACE_MODE_PCIE:
|
||||
interface_port_count[interface] = 0;
|
||||
break;
|
||||
/* XAUI is a single high speed port */
|
||||
case CVMX_HELPER_INTERFACE_MODE_XAUI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_xaui_probe(interface);
|
||||
__cvmx_helper_xaui_probe(interface);
|
||||
break;
|
||||
/*
|
||||
* RGMII/GMII/MII are all treated about the same. Most
|
||||
|
@ -266,16 +339,14 @@ int cvmx_helper_interface_probe(int interface)
|
|||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_RGMII:
|
||||
case CVMX_HELPER_INTERFACE_MODE_GMII:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_rgmii_probe(interface);
|
||||
__cvmx_helper_rgmii_probe(interface);
|
||||
break;
|
||||
/*
|
||||
* SPI4 can have 1-16 ports depending on the device at
|
||||
* the other end.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_SPI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_spi_probe(interface);
|
||||
__cvmx_helper_spi_probe(interface);
|
||||
break;
|
||||
/*
|
||||
* SGMII can have 1-4 ports depending on how many are
|
||||
|
@ -283,29 +354,21 @@ int cvmx_helper_interface_probe(int interface)
|
|||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_SGMII:
|
||||
case CVMX_HELPER_INTERFACE_MODE_PICMG:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_sgmii_probe(interface);
|
||||
__cvmx_helper_sgmii_probe(interface);
|
||||
break;
|
||||
/* PCI target Network Packet Interface */
|
||||
case CVMX_HELPER_INTERFACE_MODE_NPI:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_npi_probe(interface);
|
||||
__cvmx_helper_npi_probe(interface);
|
||||
break;
|
||||
/*
|
||||
* Special loopback only ports. These are not the same
|
||||
* as other ports in loopback mode.
|
||||
*/
|
||||
case CVMX_HELPER_INTERFACE_MODE_LOOP:
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_loop_probe(interface);
|
||||
__cvmx_helper_loop_probe(interface);
|
||||
break;
|
||||
}
|
||||
|
||||
interface_port_count[interface] =
|
||||
__cvmx_helper_board_interface_probe(interface,
|
||||
interface_port_count
|
||||
[interface]);
|
||||
|
||||
/* Make sure all global variables propagate to other cores */
|
||||
CVMX_SYNCWS;
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_loop_probe(int interface);
|
||||
static inline int __cvmx_helper_loop_enumerate(int interface) {return 4; }
|
||||
|
||||
/**
|
||||
* Bringup and enable a LOOP interface. After this call packet
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_npi_probe(int interface);
|
||||
#define __cvmx_helper_npi_enumerate __cvmx_helper_npi_probe
|
||||
|
||||
/**
|
||||
* Bringup and enable a NPI interface. After this call packet
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
* Returns Number of RGMII/GMII/MII ports (0-4).
|
||||
*/
|
||||
extern int __cvmx_helper_rgmii_probe(int interface);
|
||||
#define __cvmx_helper_rgmii_enumerate __cvmx_helper_rgmii_probe
|
||||
|
||||
/**
|
||||
* Put an RGMII interface in loopback mode. Internal packets sent
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_sgmii_probe(int interface);
|
||||
extern int __cvmx_helper_sgmii_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a SGMII interface. After this call packet
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_spi_probe(int interface);
|
||||
extern int __cvmx_helper_spi_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a SPI interface. After this call packet I/O
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_xaui_probe(int interface);
|
||||
extern int __cvmx_helper_xaui_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a XAUI interface. After this call packet
|
||||
|
|
|
@ -207,6 +207,7 @@ extern int cvmx_helper_link_set(int ipd_port,
|
|||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int cvmx_helper_interface_probe(int interface);
|
||||
extern int cvmx_helper_interface_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Configure a port for internal and/or external loopback. Internal loopback
|
||||
|
|
Loading…
Reference in a new issue