Skip to content
Snippets Groups Projects
Commit 69a85242 authored by Kumar Gala's avatar Kumar Gala
Browse files

fm-eth: Add ability for board code to disable a port


The SoC configuration may have more ports enabled than a given board
actually can utilize.  Add a routinue that allows the board code to
disable a port that it knows isn't being used.

fm_disable_port() needs to be called before cpu_eth_init().

Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 2b3a1cdd
No related merge requests found
...@@ -110,6 +110,7 @@ u32 fm_muram_base(int fm_idx); ...@@ -110,6 +110,7 @@ u32 fm_muram_base(int fm_idx);
int fm_init_common(int index, struct ccsr_fman *reg); int fm_init_common(int index, struct ccsr_fman *reg);
int fm_eth_initialize(struct ccsr_fman *reg, struct fm_eth_info *info); int fm_eth_initialize(struct ccsr_fman *reg, struct fm_eth_info *info);
phy_interface_t fman_port_enet_if(enum fm_port port); phy_interface_t fman_port_enet_if(enum fm_port port);
void fman_disable_port(enum fm_port port);
struct fsl_enet_mac { struct fsl_enet_mac {
void *base; /* MAC controller registers base address */ void *base; /* MAC controller registers base address */
......
...@@ -123,6 +123,14 @@ void fman_enet_init(void) ...@@ -123,6 +123,14 @@ void fman_enet_init(void)
return ; return ;
} }
void fm_disable_port(enum fm_port port)
{
int i = fm_port_to_index(port);
fm_info[i].enabled = 0;
fman_disable_port(port);
}
void fm_info_set_mdio(enum fm_port port, struct mii_dev *bus) void fm_info_set_mdio(enum fm_port port, struct mii_dev *bus)
{ {
int i = fm_port_to_index(port); int i = fm_port_to_index(port);
......
...@@ -36,6 +36,12 @@ static int is_device_disabled(enum fm_port port) ...@@ -36,6 +36,12 @@ static int is_device_disabled(enum fm_port port)
return port_to_devdisr[port] & devdisr; return port_to_devdisr[port] & devdisr;
} }
void fman_disable_port(enum fm_port port)
{
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
setbits_be32(&gur->devdisr, port_to_devdisr[port]);
}
phy_interface_t fman_port_enet_if(enum fm_port port) phy_interface_t fman_port_enet_if(enum fm_port port)
{ {
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
......
...@@ -44,6 +44,12 @@ static int is_device_disabled(enum fm_port port) ...@@ -44,6 +44,12 @@ static int is_device_disabled(enum fm_port port)
return port_to_devdisr[port] & devdisr2; return port_to_devdisr[port] & devdisr2;
} }
void fman_disable_port(enum fm_port port)
{
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
setbits_be32(&gur->devdisr2, port_to_devdisr[port]);
}
phy_interface_t fman_port_enet_if(enum fm_port port) phy_interface_t fman_port_enet_if(enum fm_port port)
{ {
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
......
...@@ -40,6 +40,12 @@ static int is_device_disabled(enum fm_port port) ...@@ -40,6 +40,12 @@ static int is_device_disabled(enum fm_port port)
return port_to_devdisr[port] & devdisr2; return port_to_devdisr[port] & devdisr2;
} }
void fman_disable_port(enum fm_port port)
{
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
setbits_be32(&gur->devdisr2, port_to_devdisr[port]);
}
phy_interface_t fman_port_enet_if(enum fm_port port) phy_interface_t fman_port_enet_if(enum fm_port port)
{ {
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
......
...@@ -110,5 +110,6 @@ void fdt_fixup_fman_ethernet(void *fdt); ...@@ -110,5 +110,6 @@ void fdt_fixup_fman_ethernet(void *fdt);
phy_interface_t fm_info_get_enet_if(enum fm_port port); phy_interface_t fm_info_get_enet_if(enum fm_port port);
void fm_info_set_phy_address(enum fm_port port, int address); void fm_info_set_phy_address(enum fm_port port, int address);
void fm_info_set_mdio(enum fm_port port, struct mii_dev *bus); void fm_info_set_mdio(enum fm_port port, struct mii_dev *bus);
void fm_disable_port(enum fm_port port);
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment