mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 00:30:52 +07:00
Merge branch 'char-misc-linus' into 'char-misc-next'
We need the virtbox changes in here as well to build on top of. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
2d41d2ab85
@ -2021,7 +2021,8 @@ static ssize_t hot_add_show(struct class *class,
|
||||
return ret;
|
||||
return scnprintf(buf, PAGE_SIZE, "%d\n", ret);
|
||||
}
|
||||
static CLASS_ATTR_RO(hot_add);
|
||||
static struct class_attribute class_attr_hot_add =
|
||||
__ATTR(hot_add, 0400, hot_add_show, NULL);
|
||||
|
||||
static ssize_t hot_remove_store(struct class *class,
|
||||
struct class_attribute *attr,
|
||||
|
@ -747,17 +747,50 @@ static int cti_dying_cpu(unsigned int cpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cti_pm_setup(struct cti_drvdata *drvdata)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (drvdata->ctidev.cpu == -1)
|
||||
return 0;
|
||||
|
||||
if (nr_cti_cpu)
|
||||
goto done;
|
||||
|
||||
cpus_read_lock();
|
||||
ret = cpuhp_setup_state_nocalls_cpuslocked(
|
||||
CPUHP_AP_ARM_CORESIGHT_CTI_STARTING,
|
||||
"arm/coresight_cti:starting",
|
||||
cti_starting_cpu, cti_dying_cpu);
|
||||
if (ret) {
|
||||
cpus_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = cpu_pm_register_notifier(&cti_cpu_pm_nb);
|
||||
cpus_read_unlock();
|
||||
if (ret) {
|
||||
cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_CTI_STARTING);
|
||||
return ret;
|
||||
}
|
||||
|
||||
done:
|
||||
nr_cti_cpu++;
|
||||
cti_cpu_drvdata[drvdata->ctidev.cpu] = drvdata;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* release PM registrations */
|
||||
static void cti_pm_release(struct cti_drvdata *drvdata)
|
||||
{
|
||||
if (drvdata->ctidev.cpu >= 0) {
|
||||
if (--nr_cti_cpu == 0) {
|
||||
cpu_pm_unregister_notifier(&cti_cpu_pm_nb);
|
||||
if (drvdata->ctidev.cpu == -1)
|
||||
return;
|
||||
|
||||
cpuhp_remove_state_nocalls(
|
||||
CPUHP_AP_ARM_CORESIGHT_CTI_STARTING);
|
||||
}
|
||||
cti_cpu_drvdata[drvdata->ctidev.cpu] = NULL;
|
||||
cti_cpu_drvdata[drvdata->ctidev.cpu] = NULL;
|
||||
if (--nr_cti_cpu == 0) {
|
||||
cpu_pm_unregister_notifier(&cti_cpu_pm_nb);
|
||||
cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_CTI_STARTING);
|
||||
}
|
||||
}
|
||||
|
||||
@ -823,19 +856,14 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
|
||||
/* driver data*/
|
||||
drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
|
||||
if (!drvdata) {
|
||||
ret = -ENOMEM;
|
||||
dev_info(dev, "%s, mem err\n", __func__);
|
||||
goto err_out;
|
||||
}
|
||||
if (!drvdata)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Validity for the resource is already checked by the AMBA core */
|
||||
base = devm_ioremap_resource(dev, res);
|
||||
if (IS_ERR(base)) {
|
||||
ret = PTR_ERR(base);
|
||||
dev_err(dev, "%s, remap err\n", __func__);
|
||||
goto err_out;
|
||||
}
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
drvdata->base = base;
|
||||
|
||||
dev_set_drvdata(dev, drvdata);
|
||||
@ -854,8 +882,7 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
pdata = coresight_cti_get_platform_data(dev);
|
||||
if (IS_ERR(pdata)) {
|
||||
dev_err(dev, "coresight_cti_get_platform_data err\n");
|
||||
ret = PTR_ERR(pdata);
|
||||
goto err_out;
|
||||
return PTR_ERR(pdata);
|
||||
}
|
||||
|
||||
/* default to powered - could change on PM notifications */
|
||||
@ -867,35 +894,20 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
drvdata->ctidev.cpu);
|
||||
else
|
||||
cti_desc.name = coresight_alloc_device_name(&cti_sys_devs, dev);
|
||||
if (!cti_desc.name) {
|
||||
ret = -ENOMEM;
|
||||
goto err_out;
|
||||
}
|
||||
if (!cti_desc.name)
|
||||
return -ENOMEM;
|
||||
|
||||
/* setup CPU power management handling for CPU bound CTI devices. */
|
||||
if (drvdata->ctidev.cpu >= 0) {
|
||||
cti_cpu_drvdata[drvdata->ctidev.cpu] = drvdata;
|
||||
if (!nr_cti_cpu++) {
|
||||
cpus_read_lock();
|
||||
ret = cpuhp_setup_state_nocalls_cpuslocked(
|
||||
CPUHP_AP_ARM_CORESIGHT_CTI_STARTING,
|
||||
"arm/coresight_cti:starting",
|
||||
cti_starting_cpu, cti_dying_cpu);
|
||||
|
||||
if (!ret)
|
||||
ret = cpu_pm_register_notifier(&cti_cpu_pm_nb);
|
||||
cpus_read_unlock();
|
||||
if (ret)
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
ret = cti_pm_setup(drvdata);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* create dynamic attributes for connections */
|
||||
ret = cti_create_cons_sysfs(dev, drvdata);
|
||||
if (ret) {
|
||||
dev_err(dev, "%s: create dynamic sysfs entries failed\n",
|
||||
cti_desc.name);
|
||||
goto err_out;
|
||||
goto pm_release;
|
||||
}
|
||||
|
||||
/* set up coresight component description */
|
||||
@ -908,7 +920,7 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
drvdata->csdev = coresight_register(&cti_desc);
|
||||
if (IS_ERR(drvdata->csdev)) {
|
||||
ret = PTR_ERR(drvdata->csdev);
|
||||
goto err_out;
|
||||
goto pm_release;
|
||||
}
|
||||
|
||||
/* add to list of CTI devices */
|
||||
@ -927,7 +939,7 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
dev_info(&drvdata->csdev->dev, "CTI initialized\n");
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
pm_release:
|
||||
cti_pm_release(drvdata);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1388,18 +1388,57 @@ static struct notifier_block etm4_cpu_pm_nb = {
|
||||
.notifier_call = etm4_cpu_pm_notify,
|
||||
};
|
||||
|
||||
static int etm4_cpu_pm_register(void)
|
||||
/* Setup PM. Called with cpus locked. Deals with error conditions and counts */
|
||||
static int etm4_pm_setup_cpuslocked(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_CPU_PM))
|
||||
return cpu_pm_register_notifier(&etm4_cpu_pm_nb);
|
||||
int ret;
|
||||
|
||||
return 0;
|
||||
if (etm4_count++)
|
||||
return 0;
|
||||
|
||||
ret = cpu_pm_register_notifier(&etm4_cpu_pm_nb);
|
||||
if (ret)
|
||||
goto reduce_count;
|
||||
|
||||
ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING,
|
||||
"arm/coresight4:starting",
|
||||
etm4_starting_cpu, etm4_dying_cpu);
|
||||
|
||||
if (ret)
|
||||
goto unregister_notifier;
|
||||
|
||||
ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN,
|
||||
"arm/coresight4:online",
|
||||
etm4_online_cpu, NULL);
|
||||
|
||||
/* HP dyn state ID returned in ret on success */
|
||||
if (ret > 0) {
|
||||
hp_online = ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* failed dyn state - remove others */
|
||||
cpuhp_remove_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING);
|
||||
|
||||
unregister_notifier:
|
||||
cpu_pm_unregister_notifier(&etm4_cpu_pm_nb);
|
||||
|
||||
reduce_count:
|
||||
--etm4_count;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void etm4_cpu_pm_unregister(void)
|
||||
static void etm4_pm_clear(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_CPU_PM))
|
||||
cpu_pm_unregister_notifier(&etm4_cpu_pm_nb);
|
||||
if (--etm4_count != 0)
|
||||
return;
|
||||
|
||||
cpu_pm_unregister_notifier(&etm4_cpu_pm_nb);
|
||||
cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING);
|
||||
if (hp_online) {
|
||||
cpuhp_remove_state_nocalls(hp_online);
|
||||
hp_online = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
@ -1453,24 +1492,15 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
etm4_init_arch_data, drvdata, 1))
|
||||
dev_err(dev, "ETM arch init failed\n");
|
||||
|
||||
if (!etm4_count++) {
|
||||
cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING,
|
||||
"arm/coresight4:starting",
|
||||
etm4_starting_cpu, etm4_dying_cpu);
|
||||
ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN,
|
||||
"arm/coresight4:online",
|
||||
etm4_online_cpu, NULL);
|
||||
if (ret < 0)
|
||||
goto err_arch_supported;
|
||||
hp_online = ret;
|
||||
|
||||
ret = etm4_cpu_pm_register();
|
||||
if (ret)
|
||||
goto err_arch_supported;
|
||||
}
|
||||
|
||||
ret = etm4_pm_setup_cpuslocked();
|
||||
cpus_read_unlock();
|
||||
|
||||
/* etm4_pm_setup_cpuslocked() does its own cleanup - exit on error */
|
||||
if (ret) {
|
||||
etmdrvdata[drvdata->cpu] = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (etm4_arch_supported(drvdata->arch) == false) {
|
||||
ret = -EINVAL;
|
||||
goto err_arch_supported;
|
||||
@ -1517,13 +1547,7 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
|
||||
err_arch_supported:
|
||||
etmdrvdata[drvdata->cpu] = NULL;
|
||||
if (--etm4_count == 0) {
|
||||
etm4_cpu_pm_unregister();
|
||||
|
||||
cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING);
|
||||
if (hp_online)
|
||||
cpuhp_remove_state_nocalls(hp_online);
|
||||
}
|
||||
etm4_pm_clear();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/atmel-ssc.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
@ -20,7 +20,7 @@
|
||||
#include "../../sound/soc/atmel/atmel_ssc_dai.h"
|
||||
|
||||
/* Serialize access to ssc_list and user count */
|
||||
static DEFINE_SPINLOCK(user_lock);
|
||||
static DEFINE_MUTEX(user_lock);
|
||||
static LIST_HEAD(ssc_list);
|
||||
|
||||
struct ssc_device *ssc_request(unsigned int ssc_num)
|
||||
@ -28,7 +28,7 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
|
||||
int ssc_valid = 0;
|
||||
struct ssc_device *ssc;
|
||||
|
||||
spin_lock(&user_lock);
|
||||
mutex_lock(&user_lock);
|
||||
list_for_each_entry(ssc, &ssc_list, list) {
|
||||
if (ssc->pdev->dev.of_node) {
|
||||
if (of_alias_get_id(ssc->pdev->dev.of_node, "ssc")
|
||||
@ -44,18 +44,18 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
|
||||
}
|
||||
|
||||
if (!ssc_valid) {
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
pr_err("ssc: ssc%d platform device is missing\n", ssc_num);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
if (ssc->user) {
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
dev_dbg(&ssc->pdev->dev, "module busy\n");
|
||||
return ERR_PTR(-EBUSY);
|
||||
}
|
||||
ssc->user++;
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
|
||||
clk_prepare(ssc->clk);
|
||||
|
||||
@ -67,14 +67,14 @@ void ssc_free(struct ssc_device *ssc)
|
||||
{
|
||||
bool disable_clk = true;
|
||||
|
||||
spin_lock(&user_lock);
|
||||
mutex_lock(&user_lock);
|
||||
if (ssc->user)
|
||||
ssc->user--;
|
||||
else {
|
||||
disable_clk = false;
|
||||
dev_dbg(&ssc->pdev->dev, "device already free\n");
|
||||
}
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
|
||||
if (disable_clk)
|
||||
clk_unprepare(ssc->clk);
|
||||
@ -237,9 +237,9 @@ static int ssc_probe(struct platform_device *pdev)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
spin_lock(&user_lock);
|
||||
mutex_lock(&user_lock);
|
||||
list_add_tail(&ssc->list, &ssc_list);
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
|
||||
platform_set_drvdata(pdev, ssc);
|
||||
|
||||
@ -258,9 +258,9 @@ static int ssc_remove(struct platform_device *pdev)
|
||||
|
||||
ssc_sound_dai_remove(ssc);
|
||||
|
||||
spin_lock(&user_lock);
|
||||
mutex_lock(&user_lock);
|
||||
list_del(&ssc->list);
|
||||
spin_unlock(&user_lock);
|
||||
mutex_unlock(&user_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -745,9 +745,8 @@ static int mei_cl_device_remove(struct device *dev)
|
||||
|
||||
mei_cl_bus_module_put(cldev);
|
||||
module_put(THIS_MODULE);
|
||||
dev->driver = NULL;
|
||||
return ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t name_show(struct device *dev, struct device_attribute *a,
|
||||
|
@ -545,13 +545,14 @@ static void sun4i_usb_phy0_id_vbus_det_scan(struct work_struct *work)
|
||||
struct sun4i_usb_phy_data *data =
|
||||
container_of(work, struct sun4i_usb_phy_data, detect.work);
|
||||
struct phy *phy0 = data->phys[0].phy;
|
||||
struct sun4i_usb_phy *phy = phy_get_drvdata(phy0);
|
||||
struct sun4i_usb_phy *phy;
|
||||
bool force_session_end, id_notify = false, vbus_notify = false;
|
||||
int id_det, vbus_det;
|
||||
|
||||
if (phy0 == NULL)
|
||||
if (!phy0)
|
||||
return;
|
||||
|
||||
phy = phy_get_drvdata(phy0);
|
||||
id_det = sun4i_usb_phy0_get_id_det(data);
|
||||
vbus_det = sun4i_usb_phy0_get_vbus_det(data);
|
||||
|
||||
|
@ -134,7 +134,7 @@ static inline void combo_phy_w32_off_mask(void __iomem *base, unsigned int reg,
|
||||
|
||||
reg_val = readl(base + reg);
|
||||
reg_val &= ~mask;
|
||||
reg_val |= FIELD_PREP(mask, val);
|
||||
reg_val |= val;
|
||||
writel(reg_val, base + reg);
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ static int intel_cbphy_pcie_en_pad_refclk(struct intel_cbphy_iphy *iphy)
|
||||
return 0;
|
||||
|
||||
combo_phy_w32_off_mask(cbphy->app_base, PCIE_PHY_GEN_CTRL,
|
||||
PCIE_PHY_CLK_PAD, 0);
|
||||
PCIE_PHY_CLK_PAD, FIELD_PREP(PCIE_PHY_CLK_PAD, 0));
|
||||
|
||||
/* Delay for stable clock PLL */
|
||||
usleep_range(50, 100);
|
||||
@ -192,14 +192,14 @@ static int intel_cbphy_pcie_dis_pad_refclk(struct intel_cbphy_iphy *iphy)
|
||||
return 0;
|
||||
|
||||
combo_phy_w32_off_mask(cbphy->app_base, PCIE_PHY_GEN_CTRL,
|
||||
PCIE_PHY_CLK_PAD, 1);
|
||||
PCIE_PHY_CLK_PAD, FIELD_PREP(PCIE_PHY_CLK_PAD, 1));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int intel_cbphy_set_mode(struct intel_combo_phy *cbphy)
|
||||
{
|
||||
enum intel_combo_mode cb_mode = PHY_PCIE_MODE;
|
||||
enum intel_combo_mode cb_mode;
|
||||
enum aggregated_mode aggr = cbphy->aggr_mode;
|
||||
struct device *dev = cbphy->dev;
|
||||
enum intel_phy_mode mode;
|
||||
@ -224,6 +224,8 @@ static int intel_cbphy_set_mode(struct intel_combo_phy *cbphy)
|
||||
|
||||
cb_mode = SATA0_SATA1_MODE;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = regmap_write(cbphy->hsiocfg, REG_COMBO_MODE(cbphy->bid), cb_mode);
|
||||
@ -385,7 +387,7 @@ static int intel_cbphy_calibrate(struct phy *phy)
|
||||
|
||||
/* trigger auto RX adaptation */
|
||||
combo_phy_w32_off_mask(cr_base, CR_ADDR(PCS_XF_ATE_OVRD_IN_2, id),
|
||||
ADAPT_REQ_MSK, 3);
|
||||
ADAPT_REQ_MSK, FIELD_PREP(ADAPT_REQ_MSK, 3));
|
||||
/* Wait RX adaptation to finish */
|
||||
ret = readl_poll_timeout(cr_base + CR_ADDR(PCS_XF_RX_ADAPT_ACK, id),
|
||||
val, val & RX_ADAPT_ACK_BIT, 10, 5000);
|
||||
@ -396,7 +398,7 @@ static int intel_cbphy_calibrate(struct phy *phy)
|
||||
|
||||
/* Stop RX adaptation */
|
||||
combo_phy_w32_off_mask(cr_base, CR_ADDR(PCS_XF_ATE_OVRD_IN_2, id),
|
||||
ADAPT_REQ_MSK, 0);
|
||||
ADAPT_REQ_MSK, FIELD_PREP(ADAPT_REQ_MSK, 0));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -607,8 +607,8 @@ static int inno_dsidphy_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, inno);
|
||||
|
||||
inno->phy_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (!inno->phy_base)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(inno->phy_base))
|
||||
return PTR_ERR(inno->phy_base);
|
||||
|
||||
inno->ref_clk = devm_clk_get(dev, "ref");
|
||||
if (IS_ERR(inno->ref_clk)) {
|
||||
|
@ -72,7 +72,7 @@ struct serdes_am654_clk_mux {
|
||||
#define to_serdes_am654_clk_mux(_hw) \
|
||||
container_of(_hw, struct serdes_am654_clk_mux, hw)
|
||||
|
||||
static struct regmap_config serdes_am654_regmap_config = {
|
||||
static const struct regmap_config serdes_am654_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.val_bits = 32,
|
||||
.reg_stride = 4,
|
||||
|
@ -117,7 +117,7 @@ struct wiz_clk_mux {
|
||||
struct wiz_clk_divider {
|
||||
struct clk_hw hw;
|
||||
struct regmap_field *field;
|
||||
struct clk_div_table *table;
|
||||
const struct clk_div_table *table;
|
||||
struct clk_init_data clk_data;
|
||||
};
|
||||
|
||||
@ -131,7 +131,7 @@ struct wiz_clk_mux_sel {
|
||||
|
||||
struct wiz_clk_div_sel {
|
||||
struct regmap_field *field;
|
||||
struct clk_div_table *table;
|
||||
const struct clk_div_table *table;
|
||||
const char *node_name;
|
||||
};
|
||||
|
||||
@ -173,7 +173,7 @@ static struct wiz_clk_mux_sel clk_mux_sel_10g[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_div_table clk_div_table[] = {
|
||||
static const struct clk_div_table clk_div_table[] = {
|
||||
{ .val = 0, .div = 1, },
|
||||
{ .val = 1, .div = 2, },
|
||||
{ .val = 2, .div = 4, },
|
||||
@ -559,7 +559,7 @@ static const struct clk_ops wiz_clk_div_ops = {
|
||||
|
||||
static int wiz_div_clk_register(struct wiz *wiz, struct device_node *node,
|
||||
struct regmap_field *field,
|
||||
struct clk_div_table *table)
|
||||
const struct clk_div_table *table)
|
||||
{
|
||||
struct device *dev = wiz->dev;
|
||||
struct wiz_clk_divider *div;
|
||||
@ -756,7 +756,7 @@ static const struct reset_control_ops wiz_phy_reset_ops = {
|
||||
.deassert = wiz_phy_reset_deassert,
|
||||
};
|
||||
|
||||
static struct regmap_config wiz_regmap_config = {
|
||||
static const struct regmap_config wiz_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.val_bits = 32,
|
||||
.reg_stride = 4,
|
||||
|
@ -930,8 +930,9 @@ static int intel_create_dai(struct sdw_cdns *cdns,
|
||||
|
||||
/* TODO: Read supported rates/formats from hardware */
|
||||
for (i = off; i < (off + num); i++) {
|
||||
dais[i].name = kasprintf(GFP_KERNEL, "SDW%d Pin%d",
|
||||
cdns->instance, i);
|
||||
dais[i].name = devm_kasprintf(cdns->dev, GFP_KERNEL,
|
||||
"SDW%d Pin%d",
|
||||
cdns->instance, i);
|
||||
if (!dais[i].name)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -160,9 +160,9 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
|
||||
priv->pdev = pdev;
|
||||
|
||||
if (!uioinfo->irq) {
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
ret = platform_get_irq_optional(pdev, 0);
|
||||
uioinfo->irq = ret;
|
||||
if (ret == -ENXIO && pdev->dev.of_node)
|
||||
if (ret == -ENXIO)
|
||||
uioinfo->irq = UIO_IRQ_NONE;
|
||||
else if (ret == -EPROBE_DEFER)
|
||||
return ret;
|
||||
|
@ -1444,7 +1444,7 @@ static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
|
||||
or_mask = caps->u.in.or_mask;
|
||||
not_mask = caps->u.in.not_mask;
|
||||
|
||||
if ((or_mask | not_mask) & ~VMMDEV_EVENT_VALID_EVENT_MASK)
|
||||
if ((or_mask | not_mask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
ret = vbg_set_session_capabilities(gdev, session, or_mask, not_mask,
|
||||
@ -1520,7 +1520,8 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
|
||||
/* For VMMDEV_REQUEST hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT */
|
||||
if (req_no_size == VBG_IOCTL_VMMDEV_REQUEST(0) ||
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG)
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT)
|
||||
return vbg_ioctl_vmmrequest(gdev, session, data);
|
||||
|
||||
if (hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT)
|
||||
@ -1558,6 +1559,7 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
|
||||
case VBG_IOCTL_HGCM_CALL(0):
|
||||
return vbg_ioctl_hgcm_call(gdev, session, f32bit, data);
|
||||
case VBG_IOCTL_LOG(0):
|
||||
case VBG_IOCTL_LOG_ALT(0):
|
||||
return vbg_ioctl_log(data);
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,21 @@
|
||||
#include <linux/vboxguest.h>
|
||||
#include "vmmdev.h"
|
||||
|
||||
/*
|
||||
* The mainline kernel version (this version) of the vboxguest module
|
||||
* contained a bug where it defined VBGL_IOCTL_VMMDEV_REQUEST_BIG and
|
||||
* VBGL_IOCTL_LOG using _IOC(_IOC_READ | _IOC_WRITE, 'V', ...) instead
|
||||
* of _IO(V, ...) as the out of tree VirtualBox upstream version does.
|
||||
*
|
||||
* These _ALT definitions keep compatibility with the wrong defines the
|
||||
* mainline kernel version used for a while.
|
||||
* Note the VirtualBox userspace bits have always been built against
|
||||
* VirtualBox upstream's headers, so this is likely not necessary. But
|
||||
* we must never break our ABI so we keep these around to be 100% sure.
|
||||
*/
|
||||
#define VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
|
||||
#define VBG_IOCTL_LOG_ALT(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
|
||||
|
||||
struct vbg_session;
|
||||
|
||||
/** VBox guest memory balloon. */
|
||||
|
@ -131,7 +131,8 @@ static long vbg_misc_device_ioctl(struct file *filp, unsigned int req,
|
||||
* the need for a bounce-buffer and another copy later on.
|
||||
*/
|
||||
is_vmmdev_req = (req & ~IOCSIZE_MASK) == VBG_IOCTL_VMMDEV_REQUEST(0) ||
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG;
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
|
||||
req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT;
|
||||
|
||||
if (is_vmmdev_req)
|
||||
buf = vbg_req_alloc(size, VBG_IOCTL_HDR_TYPE_DEFAULT,
|
||||
|
@ -206,6 +206,8 @@ VMMDEV_ASSERT_SIZE(vmmdev_mask, 24 + 8);
|
||||
* not.
|
||||
*/
|
||||
#define VMMDEV_GUEST_SUPPORTS_GRAPHICS BIT(2)
|
||||
/* The mask of valid capabilities, for sanity checking. */
|
||||
#define VMMDEV_GUEST_CAPABILITIES_MASK 0x00000007U
|
||||
|
||||
/** struct vmmdev_hypervisorinfo - Hypervisor info structure. */
|
||||
struct vmmdev_hypervisorinfo {
|
||||
|
@ -103,7 +103,7 @@ VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20);
|
||||
|
||||
|
||||
/* IOCTL to perform a VMM Device request larger then 1KB. */
|
||||
#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
|
||||
#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IO('V', 3)
|
||||
|
||||
|
||||
/** VBG_IOCTL_HGCM_CONNECT data structure. */
|
||||
@ -198,7 +198,7 @@ struct vbg_ioctl_log {
|
||||
} u;
|
||||
};
|
||||
|
||||
#define VBG_IOCTL_LOG(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
|
||||
#define VBG_IOCTL_LOG(s) _IO('V', 9)
|
||||
|
||||
|
||||
/** VBG_IOCTL_WAIT_FOR_EVENTS data structure. */
|
||||
|
Loading…
Reference in New Issue
Block a user