// SPDX-License-Identifier: GPL-2.0 /* * SCMI Generic power domain support. * * Copyright (C) 2018 ARM Ltd. */ #include #include #include #include #include struct scmi_pm_domain { struct generic_pm_domain genpd; const struct scmi_handle *handle; const char *name; u32 domain; }; #define to_scmi_pd(gpd) container_of(gpd, struct scmi_pm_domain, genpd) static int scmi_pd_power(struct generic_pm_domain *domain, bool power_on) { int ret; u32 state, ret_state; struct scmi_pm_domain *pd = to_scmi_pd(domain); const struct scmi_power_ops *ops = pd->handle->power_ops; if (power_on) state = SCMI_POWER_STATE_GENERIC_ON; else state = SCMI_POWER_STATE_GENERIC_OFF; ret = ops->state_set(pd->handle, pd->domain, state); if (!ret) ret = ops->state_get(pd->handle, pd->domain, &ret_state); if (!ret && state != ret_state) return -EIO; return ret; } static int scmi_pd_power_on(struct generic_pm_domain *domain) { return scmi_pd_power(domain, true); } static int scmi_pd_power_off(struct generic_pm_domain *domain) { return scmi_pd_power(domain, false); } static int scmi_pm_domain_probe(struct scmi_device *sdev) { int num_domains, i; struct device *dev = &sdev->dev; struct device_node *np = dev->of_node; struct scmi_pm_domain *scmi_pd; struct genpd_onecell_data *scmi_pd_data; struct generic_pm_domain **domains; const struct scmi_handle *handle = sdev->handle; if (!handle || !handle->power_ops) return -ENODEV; num_domains = handle->power_ops->num_domains_get(handle); if (num_domains < 0) { dev_err(dev, "number of domains not found\n"); return num_domains; } scmi_pd = devm_kcalloc(dev, num_domains, sizeof(*scmi_pd), GFP_KERNEL); if (!scmi_pd) return -ENOMEM; scmi_pd_data = devm_kzalloc(dev, sizeof(*scmi_pd_data), GFP_KERNEL); if (!scmi_pd_data) return -ENOMEM; domains = devm_kcalloc(dev, num_domains, sizeof(*domains), GFP_KERNEL); if (!domains) return -ENOMEM; for (i = 0; i < num_domains; i++, scmi_pd++) { u32 state; domains[i] = &scmi_pd->genpd; scmi_pd->domain = i; scmi_pd->handle = handle; scmi_pd->name = handle->power_ops->name_get(handle, i); scmi_pd->genpd.name = scmi_pd->name; scmi_pd->genpd.power_off = scmi_pd_power_off; scmi_pd->genpd.power_on = scmi_pd_power_on; if (handle->power_ops->state_get(handle, i, &state)) { dev_warn(dev, "failed to get state for domain %d\n", i); continue; } pm_genpd_init(&scmi_pd->genpd, NULL, state == SCMI_POWER_STATE_GENERIC_OFF); } scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; of_genpd_add_provider_onecell(np, scmi_pd_data); return 0; } static const struct scmi_device_id scmi_id_table[] = { { SCMI_PROTOCOL_POWER }, { }, }; MODULE_DEVICE_TABLE(scmi, scmi_id_table); static struct scmi_driver scmi_power_domain_driver = { .name = "scmi-power-domain", .probe = scmi_pm_domain_probe, .id_table = scmi_id_table, }; module_scmi_driver(scmi_power_domain_driver); MODULE_AUTHOR("Sudeep Holla "); MODULE_DESCRIPTION("ARM SCMI power domain driver"); MODULE_LICENSE("GPL v2"); 8c89a2a8d19022243dc8dadc'>drivers
diff options
context:
space:
mode:
authorIdo Schimmel <idosch@mellanox.com>2020-02-17 16:29:36 +0200
committerDavid S. Miller <davem@davemloft.net>2020-02-17 14:42:53 -0800
commit745a7ea72dc25ffe8c89a2a8d19022243dc8dadc (patch)
treee40122dbe93080763f67b85128710869f644fd1d /tools/testing/selftests/drivers
parentda1f9f8cb75c3506e7dedb4cb2221fe5dd4c52b7 (diff)
selftests: mlxsw: Remove deprecated test
The addition of a VLAN on a bridge slave prompts the driver to have the local port in question join the FID corresponding to this VLAN. Before recent changes, the operation of joining the FID would also mean that the driver would enable VXLAN tunneling if a VXLAN device was also member in the VLAN. In case the configuration of the VXLAN tunnel was not supported, an extack error would be returned. Since the operation of joining the FID no longer means that VXLAN tunneling is potentially enabled, the test is no longer relevant. Remove it. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/testing/selftests/drivers')