Skip to content

Commit

Permalink
net: hisilicon: deals with the sub ctrl by syscon
Browse files Browse the repository at this point in the history
the global Soc configuration is treated by syscon, and sub ctrl bus is
Soc bus. it has to be treated by syscon.

Signed-off-by: yankejian <yankejian@huawei.com>
Signed-off-by: lisheng <lisheng011@huawei.com>
Signed-off-by: lipeng <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
yankejian authored and David S. Miller committed Oct 22, 2015
1 parent e9e6d79 commit c7fc9eb
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions drivers/net/ethernet/hisilicon/hns_mdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <linux/etherdevice.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/netdevice.h>
Expand All @@ -20,6 +21,7 @@
#include <linux/of_platform.h>
#include <linux/phy.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/spinlock_types.h>

#define MDIO_DRV_NAME "Hi-HNS_MDIO"
Expand All @@ -36,7 +38,7 @@

struct hns_mdio_device {
void *vbase; /* mdio reg base address */
void *sys_vbase;
struct regmap *subctrl_vbase;
};

/* mdio reg */
Expand Down Expand Up @@ -155,10 +157,10 @@ static int mdio_sc_cfg_reg_write(struct hns_mdio_device *mdio_dev,
u32 time_cnt;
u32 reg_value;

mdio_write_reg((void *)mdio_dev->sys_vbase, cfg_reg, set_val);
regmap_write(mdio_dev->subctrl_vbase, cfg_reg, set_val);

for (time_cnt = MDIO_TIMEOUT; time_cnt; time_cnt--) {
reg_value = mdio_read_reg((void *)mdio_dev->sys_vbase, st_reg);
regmap_read(mdio_dev->subctrl_vbase, st_reg, &reg_value);
reg_value &= st_msk;
if ((!!check_st) == (!!reg_value))
break;
Expand Down Expand Up @@ -352,7 +354,7 @@ static int hns_mdio_reset(struct mii_bus *bus)
struct hns_mdio_device *mdio_dev = (struct hns_mdio_device *)bus->priv;
int ret;

if (!mdio_dev->sys_vbase) {
if (!mdio_dev->subctrl_vbase) {
dev_err(&bus->dev, "mdio sys ctl reg has not maped\n");
return -ENODEV;
}
Expand Down Expand Up @@ -455,13 +457,12 @@ static int hns_mdio_probe(struct platform_device *pdev)
return ret;
}

res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
mdio_dev->sys_vbase = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(mdio_dev->sys_vbase)) {
ret = PTR_ERR(mdio_dev->sys_vbase);
return ret;
mdio_dev->subctrl_vbase =
syscon_node_to_regmap(of_parse_phandle(np, "subctrl_vbase", 0));
if (IS_ERR(mdio_dev->subctrl_vbase)) {
dev_warn(&pdev->dev, "no syscon hisilicon,peri-c-subctrl\n");
mdio_dev->subctrl_vbase = NULL;
}

new_bus->irq = devm_kcalloc(&pdev->dev, PHY_MAX_ADDR,
sizeof(int), GFP_KERNEL);
if (!new_bus->irq)
Expand Down

0 comments on commit c7fc9eb

Please sign in to comment.