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