net: hns: Add ACPI support to check SFP present
The current code only supports DT to check SFP present. This patch adds ACPI support as well. Signed-off-by: Daode Huang <huangdaode@hisilicon.com> Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0b98ca2a45
commit
b917078c1c
2 changed files with 34 additions and 5 deletions
|
@ -82,9 +82,12 @@ void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status)
|
|||
else
|
||||
*link_status = 0;
|
||||
|
||||
ret = mac_cb->dsaf_dev->misc_op->get_sfp_prsnt(mac_cb, &sfp_prsnt);
|
||||
if (!ret)
|
||||
*link_status = *link_status && sfp_prsnt;
|
||||
if (mac_cb->media_type == HNAE_MEDIA_TYPE_FIBER) {
|
||||
ret = mac_cb->dsaf_dev->misc_op->get_sfp_prsnt(mac_cb,
|
||||
&sfp_prsnt);
|
||||
if (!ret)
|
||||
*link_status = *link_status && sfp_prsnt;
|
||||
}
|
||||
|
||||
mac_cb->link = *link_status;
|
||||
}
|
||||
|
@ -855,7 +858,7 @@ static int hns_mac_get_info(struct hns_mac_cb *mac_cb)
|
|||
of_node_put(np);
|
||||
|
||||
np = of_parse_phandle(to_of_node(mac_cb->fw_port),
|
||||
"serdes-syscon", 0);
|
||||
"serdes-syscon", 0);
|
||||
syscon = syscon_node_to_regmap(np);
|
||||
of_node_put(np);
|
||||
if (IS_ERR_OR_NULL(syscon)) {
|
||||
|
|
|
@ -461,6 +461,32 @@ int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int hns_mac_get_sfp_prsnt_acpi(struct hns_mac_cb *mac_cb, int *sfp_prsnt)
|
||||
{
|
||||
union acpi_object *obj;
|
||||
union acpi_object obj_args, argv4;
|
||||
|
||||
obj_args.integer.type = ACPI_TYPE_INTEGER;
|
||||
obj_args.integer.value = mac_cb->mac_id;
|
||||
|
||||
argv4.type = ACPI_TYPE_PACKAGE,
|
||||
argv4.package.count = 1,
|
||||
argv4.package.elements = &obj_args,
|
||||
|
||||
obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev),
|
||||
hns_dsaf_acpi_dsm_uuid, 0,
|
||||
HNS_OP_GET_SFP_STAT_FUNC, &argv4);
|
||||
|
||||
if (!obj || obj->type != ACPI_TYPE_INTEGER)
|
||||
return -ENODEV;
|
||||
|
||||
*sfp_prsnt = obj->integer.value;
|
||||
|
||||
ACPI_FREE(obj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hns_mac_config_sds_loopback - set loop back for serdes
|
||||
* @mac_cb: mac control block
|
||||
|
@ -592,7 +618,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
|
|||
misc_op->hns_dsaf_roce_srst = hns_dsaf_roce_srst_acpi;
|
||||
|
||||
misc_op->get_phy_if = hns_mac_get_phy_if_acpi;
|
||||
misc_op->get_sfp_prsnt = hns_mac_get_sfp_prsnt;
|
||||
misc_op->get_sfp_prsnt = hns_mac_get_sfp_prsnt_acpi;
|
||||
|
||||
misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback_acpi;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue