Message ID | 20180210003342.GA16627@xps13.dannf |
---|---|
State | New |
Headers | show |
Series | [Bionic,SRU,Artful] net: hns: add ACPI mode support for ethtool -p | expand |
On Fri, Feb 09, 2018 at 05:33:42PM -0700, dann frazier wrote: > From: Jian Shen <shenjian15@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1748567 > > The locate operation interface of fiber port can only > work with DT mode. Add a new interface to control the > locate led for ACPI mode. > > Signed-off-by: Jian Shen <shenjian15@huawei.com> > Signed-off-by: Peng Li <lipeng321@huawei.com> > Tested-by: Zhou Wang <wangzhou1@hisilicon.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Clean cherry pick, limited scope. Acked-by: Seth Forshee <seth.forshee@canonical.com> Applied to bionic/master-next, thanks!
On 10.02.2018 01:33, dann frazier wrote: > From: Jian Shen <shenjian15@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1748567 > > The locate operation interface of fiber port can only > work with DT mode. Add a new interface to control the > locate led for ACPI mode. > > Signed-off-by: Jian Shen <shenjian15@huawei.com> > Signed-off-by: Peng Li <lipeng321@huawei.com> > Tested-by: Zhou Wang <wangzhou1@hisilicon.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 2 +- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 57 +++++++++++++++++++++- > 2 files changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > index 8b5cdf490850..cac86e9ae0dd 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) > int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > - if (!mac_cb || !mac_cb->cpld_ctrl) > + if (!mac_cb) > return 0; > > return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > index 408b63faf9a8..ca247c2cc238 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > @@ -18,6 +18,7 @@ enum _dsm_op_index { > HNS_OP_LED_SET_FUNC = 0x3, > HNS_OP_GET_PORT_TYPE_FUNC = 0x4, > HNS_OP_GET_SFP_STAT_FUNC = 0x5, > + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, > }; > > enum _dsm_rst_type { > @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, > ACPI_FREE(obj); > } > > +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, > + u8 op_type, u32 locate, > + u32 port) > +{ > + union acpi_object obj_args[2], argv4; > + union acpi_object *obj; > + > + obj_args[0].integer.type = ACPI_TYPE_INTEGER; > + obj_args[0].integer.value = locate; > + obj_args[1].integer.type = ACPI_TYPE_INTEGER; > + obj_args[1].integer.value = port; > + > + argv4.type = ACPI_TYPE_PACKAGE; > + argv4.package.count = 2; > + argv4.package.elements = obj_args; > + > + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), > + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); > + if (!obj) { > + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", > + locate, port); > + return; > + } > + > + ACPI_FREE(obj); > +} > + > static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, > u16 speed, int data) > { > @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) > static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > + if (!mac_cb->cpld_ctrl) > + return 0; > + > switch (status) { > case HNAE_LED_ACTIVE: > mac_cb->cpld_led_value = > @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > return 0; > } > > +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, > + enum hnae_led_state status) > +{ > + switch (status) { > + case HNAE_LED_ACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_ON_VALUE, > + mac_cb->mac_id); > + break; > + case HNAE_LED_INACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_DEFAULT_VALUE, > + mac_cb->mac_id); > + break; > + default: > + dev_err(mac_cb->dev, "invalid led state: %d!", status); > + return -EINVAL; > + } > + > + return 0; > +} > + > #define RESET_REQ_OR_DREQ 1 > > static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, > @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) > } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { > 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->cpld_set_led_id = cpld_set_led_id_acpi; > > misc_op->dsaf_reset = hns_dsaf_rst_acpi; > misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; >
On 02/10/18 01:33, dann frazier wrote: > From: Jian Shen <shenjian15@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1748567 > > The locate operation interface of fiber port can only > work with DT mode. Add a new interface to control the > locate led for ACPI mode. > > Signed-off-by: Jian Shen <shenjian15@huawei.com> > Signed-off-by: Peng Li <lipeng321@huawei.com> > Tested-by: Zhou Wang <wangzhou1@hisilicon.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) > Signed-off-by: dann frazier <dann.frazier@canonical.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 2 +- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 57 +++++++++++++++++++++- > 2 files changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > index 8b5cdf490850..cac86e9ae0dd 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) > int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > - if (!mac_cb || !mac_cb->cpld_ctrl) > + if (!mac_cb) > return 0; > > return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > index 408b63faf9a8..ca247c2cc238 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > @@ -18,6 +18,7 @@ enum _dsm_op_index { > HNS_OP_LED_SET_FUNC = 0x3, > HNS_OP_GET_PORT_TYPE_FUNC = 0x4, > HNS_OP_GET_SFP_STAT_FUNC = 0x5, > + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, > }; > > enum _dsm_rst_type { > @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, > ACPI_FREE(obj); > } > > +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, > + u8 op_type, u32 locate, > + u32 port) > +{ > + union acpi_object obj_args[2], argv4; > + union acpi_object *obj; > + > + obj_args[0].integer.type = ACPI_TYPE_INTEGER; > + obj_args[0].integer.value = locate; > + obj_args[1].integer.type = ACPI_TYPE_INTEGER; > + obj_args[1].integer.value = port; > + > + argv4.type = ACPI_TYPE_PACKAGE; > + argv4.package.count = 2; > + argv4.package.elements = obj_args; > + > + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), > + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); > + if (!obj) { > + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", > + locate, port); > + return; > + } > + > + ACPI_FREE(obj); > +} > + > static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, > u16 speed, int data) > { > @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) > static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > + if (!mac_cb->cpld_ctrl) > + return 0; > + > switch (status) { > case HNAE_LED_ACTIVE: > mac_cb->cpld_led_value = > @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > return 0; > } > > +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, > + enum hnae_led_state status) > +{ > + switch (status) { > + case HNAE_LED_ACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_ON_VALUE, > + mac_cb->mac_id); > + break; > + case HNAE_LED_INACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_DEFAULT_VALUE, > + mac_cb->mac_id); > + break; > + default: > + dev_err(mac_cb->dev, "invalid led state: %d!", status); > + return -EINVAL; > + } > + > + return 0; > +} > + > #define RESET_REQ_OR_DREQ 1 > > static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, > @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) > } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { > 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->cpld_set_led_id = cpld_set_led_id_acpi; > > misc_op->dsaf_reset = hns_dsaf_rst_acpi; > misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; > Scope limited to specific driver, clean cherry-pick. Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
On 02/10/18 01:33, dann frazier wrote: > From: Jian Shen <shenjian15@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1748567 > > The locate operation interface of fiber port can only > work with DT mode. Add a new interface to control the > locate led for ACPI mode. > > Signed-off-by: Jian Shen <shenjian15@huawei.com> > Signed-off-by: Peng Li <lipeng321@huawei.com> > Tested-by: Zhou Wang <wangzhou1@hisilicon.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) > Signed-off-by: dann frazier <dann.frazier@canonical.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 2 +- > drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 57 +++++++++++++++++++++- > 2 files changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > index 8b5cdf490850..cac86e9ae0dd 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) > int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > - if (!mac_cb || !mac_cb->cpld_ctrl) > + if (!mac_cb) > return 0; > > return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > index 408b63faf9a8..ca247c2cc238 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c > @@ -18,6 +18,7 @@ enum _dsm_op_index { > HNS_OP_LED_SET_FUNC = 0x3, > HNS_OP_GET_PORT_TYPE_FUNC = 0x4, > HNS_OP_GET_SFP_STAT_FUNC = 0x5, > + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, > }; > > enum _dsm_rst_type { > @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, > ACPI_FREE(obj); > } > > +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, > + u8 op_type, u32 locate, > + u32 port) > +{ > + union acpi_object obj_args[2], argv4; > + union acpi_object *obj; > + > + obj_args[0].integer.type = ACPI_TYPE_INTEGER; > + obj_args[0].integer.value = locate; > + obj_args[1].integer.type = ACPI_TYPE_INTEGER; > + obj_args[1].integer.value = port; > + > + argv4.type = ACPI_TYPE_PACKAGE; > + argv4.package.count = 2; > + argv4.package.elements = obj_args; > + > + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), > + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); > + if (!obj) { > + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", > + locate, port); > + return; > + } > + > + ACPI_FREE(obj); > +} > + > static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, > u16 speed, int data) > { > @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) > static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > enum hnae_led_state status) > { > + if (!mac_cb->cpld_ctrl) > + return 0; > + > switch (status) { > case HNAE_LED_ACTIVE: > mac_cb->cpld_led_value = > @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, > return 0; > } > > +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, > + enum hnae_led_state status) > +{ > + switch (status) { > + case HNAE_LED_ACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_ON_VALUE, > + mac_cb->mac_id); > + break; > + case HNAE_LED_INACTIVE: > + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, > + HNS_OP_LOCATE_LED_SET_FUNC, > + CPLD_LED_DEFAULT_VALUE, > + mac_cb->mac_id); > + break; > + default: > + dev_err(mac_cb->dev, "invalid led state: %d!", status); > + return -EINVAL; > + } > + > + return 0; > +} > + > #define RESET_REQ_OR_DREQ 1 > > static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, > @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) > } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { > 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->cpld_set_led_id = cpld_set_led_id_acpi; > > misc_op->dsaf_reset = hns_dsaf_rst_acpi; > misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; > Applied to artful/master-next-backlog branch. Thanks, Kleber
On Thu, Mar 1, 2018 at 7:18 AM, Kleber Souza <kleber.souza@canonical.com> wrote: > On 02/10/18 01:33, dann frazier wrote: >> From: Jian Shen <shenjian15@huawei.com> >> >> BugLink: https://bugs.launchpad.net/bugs/1748567 >> >> The locate operation interface of fiber port can only >> work with DT mode. Add a new interface to control the >> locate led for ACPI mode. >> >> Signed-off-by: Jian Shen <shenjian15@huawei.com> >> Signed-off-by: Peng Li <lipeng321@huawei.com> >> Tested-by: Zhou Wang <wangzhou1@hisilicon.com> >> Signed-off-by: David S. Miller <davem@davemloft.net> >> (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) >> Signed-off-by: dann frazier <dann.frazier@canonical.com> >> --- >> drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 2 +- >> drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 57 +++++++++++++++++++++- >> 2 files changed, 57 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >> index 8b5cdf490850..cac86e9ae0dd 100644 >> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >> @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) >> int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, >> enum hnae_led_state status) >> { >> - if (!mac_cb || !mac_cb->cpld_ctrl) >> + if (!mac_cb) >> return 0; >> >> return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); >> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >> index 408b63faf9a8..ca247c2cc238 100644 >> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >> @@ -18,6 +18,7 @@ enum _dsm_op_index { >> HNS_OP_LED_SET_FUNC = 0x3, >> HNS_OP_GET_PORT_TYPE_FUNC = 0x4, >> HNS_OP_GET_SFP_STAT_FUNC = 0x5, >> + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, >> }; >> >> enum _dsm_rst_type { >> @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, >> ACPI_FREE(obj); >> } >> >> +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, >> + u8 op_type, u32 locate, >> + u32 port) >> +{ >> + union acpi_object obj_args[2], argv4; >> + union acpi_object *obj; >> + >> + obj_args[0].integer.type = ACPI_TYPE_INTEGER; >> + obj_args[0].integer.value = locate; >> + obj_args[1].integer.type = ACPI_TYPE_INTEGER; >> + obj_args[1].integer.value = port; >> + >> + argv4.type = ACPI_TYPE_PACKAGE; >> + argv4.package.count = 2; >> + argv4.package.elements = obj_args; >> + >> + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), >> + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); >> + if (!obj) { >> + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", >> + locate, port); >> + return; >> + } >> + >> + ACPI_FREE(obj); >> +} >> + >> static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, >> u16 speed, int data) >> { >> @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) >> static int cpld_set_led_id(struct hns_mac_cb *mac_cb, >> enum hnae_led_state status) >> { >> + if (!mac_cb->cpld_ctrl) >> + return 0; >> + >> switch (status) { >> case HNAE_LED_ACTIVE: >> mac_cb->cpld_led_value = >> @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, >> return 0; >> } >> >> +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, >> + enum hnae_led_state status) >> +{ >> + switch (status) { >> + case HNAE_LED_ACTIVE: >> + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, >> + HNS_OP_LOCATE_LED_SET_FUNC, >> + CPLD_LED_ON_VALUE, >> + mac_cb->mac_id); >> + break; >> + case HNAE_LED_INACTIVE: >> + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, >> + HNS_OP_LOCATE_LED_SET_FUNC, >> + CPLD_LED_DEFAULT_VALUE, >> + mac_cb->mac_id); >> + break; >> + default: >> + dev_err(mac_cb->dev, "invalid led state: %d!", status); >> + return -EINVAL; >> + } >> + >> + return 0; >> +} >> + >> #define RESET_REQ_OR_DREQ 1 >> >> static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, >> @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) >> } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { >> 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->cpld_set_led_id = cpld_set_led_id_acpi; >> >> misc_op->dsaf_reset = hns_dsaf_rst_acpi; >> misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; >> > > Applied to artful/master-next-backlog branch. Thanks Kleber! Would you mind clarifying what it means to be on the master-next-backlog branch vs. the master-next branch - specifically wrt release timeframe?
On 01.03.2018 20:57, dann frazier wrote: > On Thu, Mar 1, 2018 at 7:18 AM, Kleber Souza <kleber.souza@canonical.com> wrote: >> On 02/10/18 01:33, dann frazier wrote: >>> From: Jian Shen <shenjian15@huawei.com> >>> >>> BugLink: https://bugs.launchpad.net/bugs/1748567 >>> >>> The locate operation interface of fiber port can only >>> work with DT mode. Add a new interface to control the >>> locate led for ACPI mode. >>> >>> Signed-off-by: Jian Shen <shenjian15@huawei.com> >>> Signed-off-by: Peng Li <lipeng321@huawei.com> >>> Tested-by: Zhou Wang <wangzhou1@hisilicon.com> >>> Signed-off-by: David S. Miller <davem@davemloft.net> >>> (cherry picked from commit 3abbcccc6f318f858ffbd4e3d82839b66ff1b960) >>> Signed-off-by: dann frazier <dann.frazier@canonical.com> >>> --- >>> drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 2 +- >>> drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 57 +++++++++++++++++++++- >>> 2 files changed, 57 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >>> index 8b5cdf490850..cac86e9ae0dd 100644 >>> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >>> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c >>> @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) >>> int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, >>> enum hnae_led_state status) >>> { >>> - if (!mac_cb || !mac_cb->cpld_ctrl) >>> + if (!mac_cb) >>> return 0; >>> >>> return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); >>> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >>> index 408b63faf9a8..ca247c2cc238 100644 >>> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >>> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c >>> @@ -18,6 +18,7 @@ enum _dsm_op_index { >>> HNS_OP_LED_SET_FUNC = 0x3, >>> HNS_OP_GET_PORT_TYPE_FUNC = 0x4, >>> HNS_OP_GET_SFP_STAT_FUNC = 0x5, >>> + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, >>> }; >>> >>> enum _dsm_rst_type { >>> @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, >>> ACPI_FREE(obj); >>> } >>> >>> +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, >>> + u8 op_type, u32 locate, >>> + u32 port) >>> +{ >>> + union acpi_object obj_args[2], argv4; >>> + union acpi_object *obj; >>> + >>> + obj_args[0].integer.type = ACPI_TYPE_INTEGER; >>> + obj_args[0].integer.value = locate; >>> + obj_args[1].integer.type = ACPI_TYPE_INTEGER; >>> + obj_args[1].integer.value = port; >>> + >>> + argv4.type = ACPI_TYPE_PACKAGE; >>> + argv4.package.count = 2; >>> + argv4.package.elements = obj_args; >>> + >>> + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), >>> + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); >>> + if (!obj) { >>> + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", >>> + locate, port); >>> + return; >>> + } >>> + >>> + ACPI_FREE(obj); >>> +} >>> + >>> static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, >>> u16 speed, int data) >>> { >>> @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) >>> static int cpld_set_led_id(struct hns_mac_cb *mac_cb, >>> enum hnae_led_state status) >>> { >>> + if (!mac_cb->cpld_ctrl) >>> + return 0; >>> + >>> switch (status) { >>> case HNAE_LED_ACTIVE: >>> mac_cb->cpld_led_value = >>> @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, >>> return 0; >>> } >>> >>> +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, >>> + enum hnae_led_state status) >>> +{ >>> + switch (status) { >>> + case HNAE_LED_ACTIVE: >>> + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, >>> + HNS_OP_LOCATE_LED_SET_FUNC, >>> + CPLD_LED_ON_VALUE, >>> + mac_cb->mac_id); >>> + break; >>> + case HNAE_LED_INACTIVE: >>> + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, >>> + HNS_OP_LOCATE_LED_SET_FUNC, >>> + CPLD_LED_DEFAULT_VALUE, >>> + mac_cb->mac_id); >>> + break; >>> + default: >>> + dev_err(mac_cb->dev, "invalid led state: %d!", status); >>> + return -EINVAL; >>> + } >>> + >>> + return 0; >>> +} >>> + >>> #define RESET_REQ_OR_DREQ 1 >>> >>> static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, >>> @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) >>> } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { >>> 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->cpld_set_led_id = cpld_set_led_id_acpi; >>> >>> misc_op->dsaf_reset = hns_dsaf_rst_acpi; >>> misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; >>> >> >> Applied to artful/master-next-backlog branch. > > Thanks Kleber! > > Would you mind clarifying what it means to be on the > master-next-backlog branch vs. the master-next branch - specifically > wrt release timeframe? > That was a temporary stashing place to put all those requests while we still expected to re-spin more often for spectre/meltdown and then point release kernels. Expect all those backlog branches to move back to normal next when the next normal cycle starts (Mar-12 so the bitgods allow) -Stefan
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c index 8b5cdf490850..cac86e9ae0dd 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c @@ -1168,7 +1168,7 @@ void hns_set_led_opt(struct hns_mac_cb *mac_cb) int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, enum hnae_led_state status) { - if (!mac_cb || !mac_cb->cpld_ctrl) + if (!mac_cb) return 0; return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c index 408b63faf9a8..ca247c2cc238 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c @@ -18,6 +18,7 @@ enum _dsm_op_index { HNS_OP_LED_SET_FUNC = 0x3, HNS_OP_GET_PORT_TYPE_FUNC = 0x4, HNS_OP_GET_SFP_STAT_FUNC = 0x5, + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, }; enum _dsm_rst_type { @@ -81,6 +82,33 @@ static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type, ACPI_FREE(obj); } +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, + u8 op_type, u32 locate, + u32 port) +{ + union acpi_object obj_args[2], argv4; + union acpi_object *obj; + + obj_args[0].integer.type = ACPI_TYPE_INTEGER; + obj_args[0].integer.value = locate; + obj_args[1].integer.type = ACPI_TYPE_INTEGER; + obj_args[1].integer.value = port; + + argv4.type = ACPI_TYPE_PACKAGE; + argv4.package.count = 2; + argv4.package.elements = obj_args; + + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); + if (!obj) { + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", + locate, port); + return; + } + + ACPI_FREE(obj); +} + static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, u16 speed, int data) { @@ -160,6 +188,9 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) static int cpld_set_led_id(struct hns_mac_cb *mac_cb, enum hnae_led_state status) { + if (!mac_cb->cpld_ctrl) + return 0; + switch (status) { case HNAE_LED_ACTIVE: mac_cb->cpld_led_value = @@ -184,6 +215,30 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, return 0; } +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, + enum hnae_led_state status) +{ + switch (status) { + case HNAE_LED_ACTIVE: + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, + HNS_OP_LOCATE_LED_SET_FUNC, + CPLD_LED_ON_VALUE, + mac_cb->mac_id); + break; + case HNAE_LED_INACTIVE: + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, + HNS_OP_LOCATE_LED_SET_FUNC, + CPLD_LED_DEFAULT_VALUE, + mac_cb->mac_id); + break; + default: + dev_err(mac_cb->dev, "invalid led state: %d!", status); + return -EINVAL; + } + + return 0; +} + #define RESET_REQ_OR_DREQ 1 static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, @@ -660,7 +715,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { 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->cpld_set_led_id = cpld_set_led_id_acpi; misc_op->dsaf_reset = hns_dsaf_rst_acpi; misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi;