projects
/
lede.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0bcc97a
)
generic: rtl8366: enable ports only after VLAN configuration is done
author
Gabor Juhos
<juhosg@openwrt.org>
Sat, 8 Jan 2011 20:24:26 +0000
(20:24 +0000)
committer
Gabor Juhos
<juhosg@openwrt.org>
Sat, 8 Jan 2011 20:24:26 +0000
(20:24 +0000)
SVN-Revision: 24938
target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
patch
|
blob
|
history
target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
patch
|
blob
|
history
target/linux/generic/files/drivers/net/phy/rtl8366rb.c
patch
|
blob
|
history
target/linux/generic/files/drivers/net/phy/rtl8366s.c
patch
|
blob
|
history
diff --git
a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
index 7995f34a43ec6d3ab9e2fe51d754579c3c4e52cd..f9a332d8751dd9bddb4cde1def093ed47bc8686e 100644
(file)
--- a/
target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
+++ b/
target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
@@
-486,6
+486,21
@@
static int rtl8366_enable_vlan4k(struct rtl8366_smi *smi, int enable)
return 0;
}
return 0;
}
+int rtl8366_enable_all_ports(struct rtl8366_smi *smi, int enable)
+{
+ int port;
+ int err;
+
+ for (port = 0; port < smi->num_ports; port++) {
+ err = smi->ops->enable_port(smi, port, enable);
+ if (err)
+ return err;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rtl8366_enable_all_ports);
+
int rtl8366_reset_vlan(struct rtl8366_smi *smi)
{
struct rtl8366_vlan_mc vlanmc;
int rtl8366_reset_vlan(struct rtl8366_smi *smi)
{
struct rtl8366_vlan_mc vlanmc;
@@
-1189,6
+1204,10
@@
int rtl8366_smi_init(struct rtl8366_smi *smi)
goto err_disable_hw;
}
goto err_disable_hw;
}
+ err = rtl8366_enable_all_ports(smi, 1);
+ if (err)
+ goto err_disable_hw;
+
err = rtl8366_smi_mii_init(smi);
if (err)
goto err_free_sck;
err = rtl8366_smi_mii_init(smi);
if (err)
goto err_free_sck;
diff --git
a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
index 7239cf9faf04bae92c54054c68cc7bd912198abe..2504dd3278bd1433060cd92f1d37a8979e1b80a7 100644
(file)
--- a/
target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
+++ b/
target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
@@
-104,6
+104,7
@@
int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data);
int rtl8366_smi_rmwr(struct rtl8366_smi *smi, u32 addr, u32 mask, u32 data);
int rtl8366_reset_vlan(struct rtl8366_smi *smi);
int rtl8366_smi_rmwr(struct rtl8366_smi *smi, u32 addr, u32 mask, u32 data);
int rtl8366_reset_vlan(struct rtl8366_smi *smi);
+int rtl8366_enable_all_ports(struct rtl8366_smi *smi, int enable);
#ifdef CONFIG_RTL8366S_PHY_DEBUG_FS
int rtl8366_debugfs_open(struct inode *inode, struct file *file);
#ifdef CONFIG_RTL8366S_PHY_DEBUG_FS
int rtl8366_debugfs_open(struct inode *inode, struct file *file);
diff --git
a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c
b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c
index 492ed25351be9c7594b8b20f3d3ab948e9e92087..847d666dd243683355a61644bcd824b1e5d0f0fc 100644
(file)
--- a/
target/linux/generic/files/drivers/net/phy/rtl8366rb.c
+++ b/
target/linux/generic/files/drivers/net/phy/rtl8366rb.c
@@
-274,9
+274,6
@@
static int rtl8366rb_hw_init(struct rtl8366_smi *smi)
REG_RMW(smi, RTL8366RB_SGCR, RTL8366RB_SGCR_MAX_LENGTH_MASK,
RTL8366RB_SGCR_MAX_LENGTH_1536);
REG_RMW(smi, RTL8366RB_SGCR, RTL8366RB_SGCR_MAX_LENGTH_MASK,
RTL8366RB_SGCR_MAX_LENGTH_1536);
- /* enable all ports */
- REG_WR(smi, RTL8366RB_PECR, 0);
-
/* enable learning for all ports */
REG_WR(smi, RTL8366RB_SSCR0, 0);
/* enable learning for all ports */
REG_WR(smi, RTL8366RB_SSCR0, 0);
@@
-962,7
+959,11
@@
static int rtl8366rb_sw_reset_switch(struct switch_dev *dev)
if (err)
return err;
if (err)
return err;
- return rtl8366_reset_vlan(smi);
+ err = rtl8366_reset_vlan(smi);
+ if (err)
+ return err;
+
+ return rtl8366_enable_all_ports(smi, 1);
}
static struct switch_attr rtl8366rb_globals[] = {
}
static struct switch_attr rtl8366rb_globals[] = {
diff --git
a/target/linux/generic/files/drivers/net/phy/rtl8366s.c
b/target/linux/generic/files/drivers/net/phy/rtl8366s.c
index 2d472cfd3476fb8ab5d2fde80950e24e6f01b523..74e0a3029cd3ef2b3facbd9654f690ce1f506289 100644
(file)
--- a/
target/linux/generic/files/drivers/net/phy/rtl8366s.c
+++ b/
target/linux/generic/files/drivers/net/phy/rtl8366s.c
@@
-257,9
+257,6
@@
static int rtl8366s_hw_init(struct rtl8366_smi *smi)
REG_RMW(smi, RTL8366S_SGCR, RTL8366S_SGCR_MAX_LENGTH_MASK,
RTL8366S_SGCR_MAX_LENGTH_1536);
REG_RMW(smi, RTL8366S_SGCR, RTL8366S_SGCR_MAX_LENGTH_MASK,
RTL8366S_SGCR_MAX_LENGTH_1536);
- /* enable all ports */
- REG_WR(smi, RTL8366S_PECR, 0);
-
/* enable learning for all ports */
REG_WR(smi, RTL8366S_SSCR0, 0);
/* enable learning for all ports */
REG_WR(smi, RTL8366S_SSCR0, 0);
@@
-808,7
+805,11
@@
static int rtl8366s_sw_reset_switch(struct switch_dev *dev)
if (err)
return err;
if (err)
return err;
- return rtl8366_reset_vlan(smi);
+ err = rtl8366_reset_vlan(smi);
+ if (err)
+ return err;
+
+ return rtl8366_enable_all_ports(smi, 1);
}
static struct switch_attr rtl8366s_globals[] = {
}
static struct switch_attr rtl8366s_globals[] = {