ACK: [PATCH][SRU Zesty] net: hns: add acpi function of xge led control
Stefan Bader
stefan.bader at canonical.com
Tue Aug 1 08:35:13 UTC 2017
On 01.08.2017 00:29, dann frazier wrote:
> From: LiuJian <liujian56 at huawei.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1704903
>
> The current code only support DT method to control xge led.
> This patch is the implementation of acpi method to control xge led.
>
> Signed-off-by: LiuJian <liujian56 at huawei.com>
> Reviewed-by: John Garry <john.garry at huawei.com>
> Reviewed-by: Yunsheng Lin <linyunsheng at huawei.com>
> Reviewed-by: Daode Huang <huangdaode at hisilicon.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (backported from commit 1e4babee70a2e2d8f9e0da06f013563b0e26f654)
> [ dannf: modified to work with acpi_evaluate_dsm() before it switched to
> using a generic guid_t in 94116f8126de9762751fd92731581b73b56292e5 ]
> Signed-off-by: dann frazier <dann.frazier at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
At least isolated to specific hw.
> drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 3 +-
> drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 58 +++++++++++++++++++++-
> 2 files changed, 58 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
> index ff864a187d5a..a37166ee577b 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
> @@ -776,8 +776,9 @@ void hns_ae_update_led_status(struct hnae_handle *handle)
>
> assert(handle);
> mac_cb = hns_get_mac_cb(handle);
> - if (!mac_cb->cpld_ctrl)
> + if (mac_cb->media_type != HNAE_MEDIA_TYPE_FIBER)
> return;
> +
> hns_set_led_opt(mac_cb);
> }
>
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> index e13aa064a8e9..6cca9c1f4aad 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> @@ -54,6 +54,34 @@ static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg)
> return ret;
> }
>
> +static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type,
> + u32 link, u32 port, u32 act)
> +{
> + union acpi_object *obj;
> + union acpi_object obj_args[3], argv4;
> +
> + obj_args[0].integer.type = ACPI_TYPE_INTEGER;
> + obj_args[0].integer.value = link;
> + obj_args[1].integer.type = ACPI_TYPE_INTEGER;
> + obj_args[1].integer.value = port;
> + obj_args[2].integer.type = ACPI_TYPE_INTEGER;
> + obj_args[2].integer.value = act;
> +
> + argv4.type = ACPI_TYPE_PACKAGE;
> + argv4.package.count = 3;
> + argv4.package.elements = obj_args;
> +
> + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev),
> + hns_dsaf_acpi_dsm_uuid, 0, op_type, &argv4);
> + if (!obj) {
> + dev_warn(mac_cb->dev, "ledctrl fail, link:%d port:%d act:%d!\n",
> + link, port, act);
> + return;
> + }
> +
> + ACPI_FREE(obj);
> +}
> +
> static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status,
> u16 speed, int data)
> {
> @@ -94,6 +122,18 @@ static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status,
> }
> }
>
> +static void hns_cpld_set_led_acpi(struct hns_mac_cb *mac_cb, int link_status,
> + u16 speed, int data)
> +{
> + if (!mac_cb) {
> + pr_err("cpld_led_set mac_cb is null!\n");
> + return;
> + }
> +
> + hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
> + link_status, mac_cb->mac_id, data);
> +}
> +
> static void cpld_led_reset(struct hns_mac_cb *mac_cb)
> {
> if (!mac_cb || !mac_cb->cpld_ctrl)
> @@ -104,6 +144,20 @@ static void cpld_led_reset(struct hns_mac_cb *mac_cb)
> mac_cb->cpld_led_value = CPLD_LED_DEFAULT_VALUE;
> }
>
> +static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb)
> +{
> + if (!mac_cb) {
> + pr_err("cpld_led_reset mac_cb is null!\n");
> + return;
> + }
> +
> + if (mac_cb->media_type != HNAE_MEDIA_TYPE_FIBER)
> + return;
> +
> + hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
> + 0, mac_cb->mac_id, 0);
> +}
> +
> static int cpld_set_led_id(struct hns_mac_cb *mac_cb,
> enum hnae_led_state status)
> {
> @@ -605,8 +659,8 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
>
> misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback;
> } else if (is_acpi_node(dsaf_dev->dev->fwnode)) {
> - misc_op->cpld_set_led = hns_cpld_set_led;
> - misc_op->cpld_reset_led = cpld_led_reset;
> + misc_op->cpld_set_led = hns_cpld_set_led_acpi;
> + misc_op->cpld_reset_led = cpld_led_reset_acpi;
> misc_op->cpld_set_led_id = cpld_set_led_id;
>
> misc_op->dsaf_reset = hns_dsaf_rst_acpi;
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20170801/3d2b3079/attachment.sig>
More information about the kernel-team
mailing list