mirror of https://github.com/OpenIPC/firmware.git
Add ability to set phyaddr(u/d) from kernel cmdline for Hi3516Cv100
parent
7c8b2efef0
commit
faf4c2e791
|
@ -0,0 +1,30 @@
|
|||
diff --git a/drivers/mmc/host/himciv100/himci.c b/drivers/mmc/host/himciv100/himci.c
|
||||
index 64f9af3..dd49323 100644
|
||||
--- a/drivers/mmc/host/himciv100/himci.c
|
||||
+++ b/drivers/mmc/host/himciv100/himci.c
|
||||
@@ -112,6 +112,17 @@ static void hi_mci_sys_reset(struct himci_host *host)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
+static void hi_mci_sys_undo_reset(struct himci_host *host)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ himci_trace(2, "undo reset");
|
||||
+
|
||||
+ local_irq_save(flags);
|
||||
+ hi_mci_ctr_undo_reset();
|
||||
+ local_irq_restore(flags);
|
||||
+}
|
||||
+
|
||||
static void hi_mci_ctrl_power(struct himci_host *host, unsigned int flag)
|
||||
{
|
||||
himci_trace(2, "begin");
|
||||
@@ -256,6 +267,8 @@ static void hi_mci_init_card(struct himci_host *host)
|
||||
hi_mci_ctrl_power(host, POWER_ON);
|
||||
udelay(200);
|
||||
|
||||
+ hi_mci_sys_undo_reset(host);
|
||||
+
|
||||
/* clear MMC host intr */
|
||||
himci_writel(ALL_INT_CLR, host->base + MCI_RINTSTS);
|
|
@ -0,0 +1,145 @@
|
|||
diff --git a/drivers/net/hieth-sf/glb.c b/drivers/net/hieth-sf/glb.c
|
||||
index a145449..6723cca 100644
|
||||
--- a/drivers/net/hieth-sf/glb.c
|
||||
+++ b/drivers/net/hieth-sf/glb.c
|
||||
@@ -18,7 +18,7 @@ int hieth_port_init(struct hieth_netdev_local *ld, int port)
|
||||
hieth_set_negmode(ld, HIETH_NEGMODE_CPUSET);
|
||||
|
||||
/* MII or RMII mode */
|
||||
- hieth_set_mii_mode(ld, UD_BIT_NAME(CONFIG_HIETH_MII_RMII_MODE));
|
||||
+ hieth_set_mii_mode(ld, ld->mdio_intf);
|
||||
|
||||
/*clear all interrupt status*/
|
||||
hieth_clear_irqstatus(ld, UD_BIT_NAME(BITS_IRQS_MASK));
|
||||
diff --git a/drivers/net/hieth-sf/hieth.h b/drivers/net/hieth-sf/hieth.h
|
||||
index 9696300..0df35dc 100644
|
||||
--- a/drivers/net/hieth-sf/hieth.h
|
||||
+++ b/drivers/net/hieth-sf/hieth.h
|
||||
@@ -91,6 +91,8 @@ struct hieth_netdev_local {
|
||||
unsigned long iobase; /* virtual io addr */
|
||||
unsigned long iobase_phys; /* physical io addr */
|
||||
int port; /* 0 => up port, 1 => down port */
|
||||
+ int mdio_intf; /* 0 => mii, 1 => rmii */
|
||||
+ int phyaddr;
|
||||
|
||||
struct device *dev;
|
||||
struct net_device_stats stats;
|
||||
diff --git a/drivers/net/hieth-sf/net.c b/drivers/net/hieth-sf/net.c
|
||||
index c100d7e..db9a1bf 100644
|
||||
--- a/drivers/net/hieth-sf/net.c
|
||||
+++ b/drivers/net/hieth-sf/net.c
|
||||
@@ -29,10 +29,24 @@ static struct net_device *hieth_devs_save[2] = {NULL, NULL};
|
||||
|
||||
static struct sockaddr macaddr;
|
||||
|
||||
+int hieth_mdio_if_u = CONFIG_HIETH_MII_RMII_MODE_U;
|
||||
+module_param_named(mdioifu, hieth_mdio_if_u, int, S_IRUGO);
|
||||
+
|
||||
+int hieth_mdio_if_d = CONFIG_HIETH_MII_RMII_MODE_D;
|
||||
+module_param_named(mdioifd, hieth_mdio_if_d, int, S_IRUGO);
|
||||
+
|
||||
+int hieth_phyaddr_u = CONFIG_HIETH_PHYID_U;
|
||||
+module_param_named(phyaddru, hieth_phyaddr_u, int, S_IRUGO);
|
||||
+
|
||||
+int hieth_phyaddr_d = CONFIG_HIETH_PHYID_D;
|
||||
+module_param_named(phyaddrd, hieth_phyaddr_d, int, S_IRUGO);
|
||||
+
|
||||
+
|
||||
int tx_flow_ctrl_en;
|
||||
int tx_flow_ctrl_active_threshold = CONFIG_TX_FLOW_CTRL_ACTIVE_THRESHOLD;
|
||||
int tx_flow_ctrl_deactive_threshold = CONFIG_TX_FLOW_CTRL_DEACTIVE_THRESHOLD;
|
||||
|
||||
+
|
||||
int eee_available;
|
||||
static int __init hieth_parse_tag(const struct tag *tag)
|
||||
{
|
||||
@@ -83,7 +97,7 @@ static void hieth_adjust_link(struct net_device *dev)
|
||||
hieth_set_linkstat(ld, stat);
|
||||
phy_print_status(ld->phy);
|
||||
ld->link_stat = stat;
|
||||
- hieth_set_mii_mode(ld, UD_BIT_NAME(CONFIG_HIETH_MII_RMII_MODE));
|
||||
+ hieth_set_mii_mode(ld, ld->mdio_intf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -704,6 +718,8 @@ static int hieth_platdev_probe_port(struct platform_device *pdev, int port)
|
||||
ld->iobase_phys = CONFIG_HIETH_IOBASE;
|
||||
|
||||
ld->port = port;
|
||||
+ ld->mdio_intf = (port == UP_PORT) ? hieth_mdio_if_u : hieth_mdio_if_d;
|
||||
+ ld->phyaddr = (port == UP_PORT) ? hieth_phyaddr_u : hieth_phyaddr_d;
|
||||
|
||||
ld->dev = &(pdev->dev);
|
||||
|
||||
@@ -715,10 +731,10 @@ static int hieth_platdev_probe_port(struct platform_device *pdev, int port)
|
||||
|
||||
memset(ld->phy_name, 0, sizeof(ld->phy_name));
|
||||
snprintf(ld->phy_name, MII_BUS_ID_SIZE, PHY_ID_FMT, \
|
||||
- HIETH_MIIBUS_NAME, UD_PHY_NAME(CONFIG_HIETH_PHYID));
|
||||
+ HIETH_MIIBUS_NAME, ld->phyaddr);
|
||||
|
||||
ld->phy = phy_connect(netdev, ld->phy_name, hieth_adjust_link, 0, \
|
||||
- UD_BIT_NAME(CONFIG_HIETH_MII_RMII_MODE) ? \
|
||||
+ ld->mdio_intf ? \
|
||||
PHY_INTERFACE_MODE_RMII : PHY_INTERFACE_MODE_MII);
|
||||
if (IS_ERR(ld->phy)) {
|
||||
hieth_error("connect to phy_device %s failed!", ld->phy_name);
|
||||
@@ -810,7 +826,7 @@ static void phy_quirk(struct hieth_mdio_local *mdio, int phyaddr)
|
||||
id2 = hieth_mdio_read(mdio, phyaddr, 0x03);
|
||||
|
||||
phy_id = (((id1 & 0xffff) << 16) | (id2 & 0xffff));
|
||||
- if (CONFIG_HIETH_MII_RMII_MODE_U == 1) {
|
||||
+ if (hieth_mdio_if_u == 1) {
|
||||
/* PHY-KSZ8051RNL */
|
||||
if ((phy_id & 0xFFFFFFF0) == 0x221550) {
|
||||
reg = hieth_mdio_read(mdio, phyaddr, 0x1F);
|
||||
@@ -866,8 +882,8 @@ static int hieth_plat_driver_probe(struct platform_device *pdev)
|
||||
hieth_platdev_probe_port(pdev, DOWN_PORT);
|
||||
#endif
|
||||
|
||||
- phy_quirk(&hieth_mdio_local_device, CONFIG_HIETH_PHYID_U);
|
||||
- phy_quirk(&hieth_mdio_local_device, CONFIG_HIETH_PHYID_D);
|
||||
+ phy_quirk(&hieth_mdio_local_device, hieth_phyaddr_u);
|
||||
+ phy_quirk(&hieth_mdio_local_device, hieth_phyaddr_d);
|
||||
|
||||
if (hieth_devs_save[UP_PORT])
|
||||
ndev = hieth_devs_save[UP_PORT];
|
||||
@@ -982,8 +998,8 @@ static int hieth_plat_driver_resume(struct platform_device *pdev)
|
||||
{
|
||||
hieth_sys_resume();
|
||||
|
||||
- phy_quirk(&hieth_mdio_local_device, CONFIG_HIETH_PHYID_U);
|
||||
- phy_quirk(&hieth_mdio_local_device, CONFIG_HIETH_PHYID_D);
|
||||
+ phy_quirk(&hieth_mdio_local_device, hieth_phyaddr_u);
|
||||
+ phy_quirk(&hieth_mdio_local_device, hieth_phyaddr_d);
|
||||
|
||||
hieth_plat_driver_resume_port(pdev, UP_PORT);
|
||||
hieth_plat_driver_resume_port(pdev, DOWN_PORT);
|
||||
diff --git a/drivers/net/hieth-sf/phy_id.c b/drivers/net/hieth-sf/phy_id.c
|
||||
index b738f5a..d399d4f 100644
|
||||
--- a/drivers/net/hieth-sf/phy_id.c
|
||||
+++ b/drivers/net/hieth-sf/phy_id.c
|
||||
@@ -29,6 +29,10 @@ static struct hiphy_driver hiphy_driver_smsc_lan8740 = {
|
||||
.eee_enable = phy_smsc_a_eee_enable,
|
||||
};
|
||||
|
||||
+static struct hiphy_driver hiphy_driver_SMSC_a = {
|
||||
+ .eee_enable = phy_smsc_a_eee_enable,
|
||||
+};
|
||||
+
|
||||
struct hiphy_info phy_info_table[] = {
|
||||
/* phy_name phy_id with_eee phy_driver */
|
||||
/* SMSC */
|
||||
@@ -40,10 +44,10 @@ struct hiphy_info phy_info_table[] = {
|
||||
{"Realtek 8211EG", 0x1cc915, PHY_EEE, &hiphy_driver_rtl8211EG},
|
||||
#endif
|
||||
|
||||
-/* {"Realtek 8201", 0x1cc816, MAC_EEE, &hiphy_driver_SMSC_a},
|
||||
-
|
||||
+ {"Realtek 8201", 0x1cc816, MAC_EEE, &hiphy_driver_SMSC_a},
|
||||
{"IC+ IP101G_DS_R01", 0x2430c54, MAC_EEE, &hiphy_driver_SMSC_a},
|
||||
- {"Micrel KSZ8091MNX-RNB", 0x220000, MAC_EEE, &hiphy_driver_SMSC_a},*/
|
||||
+
|
||||
+/* {"Micrel KSZ8091MNX-RNB", 0x220000, MAC_EEE, &hiphy_driver_SMSC_a},*/
|
||||
{0, 0, 0, 0},
|
||||
};
|
|
@ -0,0 +1,48 @@
|
|||
--- a/drivers/net/stmmac/stmmac_main.c 2022-01-14 11:09:38.965900712 +0300
|
||||
+++ b/drivers/net/stmmac/stmmac_main.c 2022-01-14 11:48:05.613133817 +0300
|
||||
@@ -125,6 +125,10 @@
|
||||
module_param(debug, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(debug, "Message Level (0: no output, 16: all)");
|
||||
|
||||
+static int phymode = -1;
|
||||
+module_param(phymode, int, S_IRUGO | S_IWUSR);
|
||||
+MODULE_PARM_DESC(phymode, "PHY interface mode (0=MII,4=RMII,5=RGMII)");
|
||||
+
|
||||
static int phyaddr = -1;
|
||||
module_param(phyaddr, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(phyaddr, "Physical device address");
|
||||
@@ -347,10 +351,21 @@
|
||||
else
|
||||
netif_carrier_off(priv->dev);
|
||||
|
||||
- /* Always RGMII mode */
|
||||
- newval |= 0x20;
|
||||
+ switch (priv->phy_interface) {
|
||||
+ case PHY_INTERFACE_MODE_RGMII:
|
||||
+ case PHY_INTERFACE_MODE_RGMII_ID:
|
||||
+ case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||
+ case PHY_INTERFACE_MODE_RGMII_TXID:
|
||||
+ newval |= 0x20;
|
||||
+ break;
|
||||
+ case PHY_INTERFACE_MODE_RMII:
|
||||
+ newval |= 0x80;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- /* Shift left for GMAC1 */
|
||||
+ /* Shift left for GMAC1 */
|
||||
newval <<= shift;
|
||||
|
||||
newval |= oldval & ~(mask << shift);
|
||||
@@ -2235,6 +2250,9 @@
|
||||
|
||||
/* Override with kernel parameters if supplied XXX CRS XXX
|
||||
* this needs to have multiple instances */
|
||||
+ if (phymode >= 0)
|
||||
+ plat_dat->interface = phymode;
|
||||
+
|
||||
if ((phyaddr >= 0) && (phyaddr <= 31))
|
||||
plat_dat->phy_addr = phyaddr;
|
||||
|
Loading…
Reference in New Issue