Loading drivers/soc/qcom/dcc_v2.c +53 −12 Original line number Original line Diff line number Diff line Loading @@ -671,13 +671,14 @@ static ssize_t dcc_store_func_type(struct device *dev, if (sscanf(buf, "%s", str) != 1) if (sscanf(buf, "%s", str) != 1) return -EINVAL; return -EINVAL; mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, dev_err(dev, "Select link list to program using curr_list\n"); "Select link list to program using curr_list\n"); return -EINVAL; ret = -EINVAL; goto out; } } mutex_lock(&drvdata->mutex); if (drvdata->enable[drvdata->curr_list]) { if (drvdata->enable[drvdata->curr_list]) { ret = -EBUSY; ret = -EBUSY; goto out; goto out; Loading Loading @@ -771,10 +772,21 @@ static DEVICE_ATTR(trigger, 0200, NULL, dcc_store_trigger); static ssize_t dcc_show_enable(struct device *dev, static ssize_t dcc_show_enable(struct device *dev, struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf) { { int ret; struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); return scnprintf(buf, PAGE_SIZE, "%u\n", mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } ret = scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned int)drvdata->enable[drvdata->curr_list]); (unsigned int)drvdata->enable[drvdata->curr_list]); err: mutex_unlock(&drvdata->mutex); return ret; } } static ssize_t dcc_store_enable(struct device *dev, static ssize_t dcc_store_enable(struct device *dev, Loading Loading @@ -812,10 +824,13 @@ static ssize_t dcc_show_config(struct device *dev, buf[0] = '\0'; buf[0] = '\0'; if (drvdata->curr_list >= DCC_MAX_LINK_LIST) return -EINVAL; mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); count = -EINVAL; goto err; } list_for_each_entry(entry, list_for_each_entry(entry, &drvdata->cfg_head[drvdata->curr_list], list) { &drvdata->cfg_head[drvdata->curr_list], list) { switch (entry->desc_type) { switch (entry->desc_type) { Loading Loading @@ -852,8 +867,8 @@ static ssize_t dcc_show_config(struct device *dev, count += len; count += len; } } err: mutex_unlock(&drvdata->mutex); mutex_unlock(&drvdata->mutex); return count; return count; } } Loading @@ -866,6 +881,12 @@ static int dcc_config_add(struct dcc_drvdata *drvdata, unsigned int addr, mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(drvdata->dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!len) { if (!len) { dev_err(drvdata->dev, "DCC: Invalid length\n"); dev_err(drvdata->dev, "DCC: Invalid length\n"); ret = -EINVAL; ret = -EINVAL; Loading Loading @@ -959,11 +980,6 @@ static ssize_t dcc_store_config(struct device *dev, if (nval <= 0 || nval > 3) if (nval <= 0 || nval > 3) return -EINVAL; return -EINVAL; if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); return -EINVAL; } if (nval == 1) { if (nval == 1) { len = 1; len = 1; apb_bus = 0; apb_bus = 0; Loading Loading @@ -1028,6 +1044,12 @@ static ssize_t dcc_show_crc_error(struct device *dev, struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!drvdata->enable[drvdata->curr_list]) { if (!drvdata->enable[drvdata->curr_list]) { ret = -EINVAL; ret = -EINVAL; goto err; goto err; Loading @@ -1049,6 +1071,13 @@ static ssize_t dcc_show_ready(struct device *dev, struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!drvdata->enable[drvdata->curr_list]) { if (!drvdata->enable[drvdata->curr_list]) { ret = -EINVAL; ret = -EINVAL; goto err; goto err; Loading Loading @@ -1159,6 +1188,12 @@ static ssize_t dcc_rd_mod_wr(struct device *dev, goto err; goto err; } } if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (list_empty(&drvdata->cfg_head[drvdata->curr_list])) { if (list_empty(&drvdata->cfg_head[drvdata->curr_list])) { dev_err(drvdata->dev, "DCC: No read address programmed\n"); dev_err(drvdata->dev, "DCC: No read address programmed\n"); ret = -EPERM; ret = -EPERM; Loading Loading @@ -1266,6 +1301,12 @@ static ssize_t dcc_store_cti_trig(struct device *dev, mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto out; } if (drvdata->enable[drvdata->curr_list]) { if (drvdata->enable[drvdata->curr_list]) { ret = -EBUSY; ret = -EBUSY; goto out; goto out; Loading Loading
drivers/soc/qcom/dcc_v2.c +53 −12 Original line number Original line Diff line number Diff line Loading @@ -671,13 +671,14 @@ static ssize_t dcc_store_func_type(struct device *dev, if (sscanf(buf, "%s", str) != 1) if (sscanf(buf, "%s", str) != 1) return -EINVAL; return -EINVAL; mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, dev_err(dev, "Select link list to program using curr_list\n"); "Select link list to program using curr_list\n"); return -EINVAL; ret = -EINVAL; goto out; } } mutex_lock(&drvdata->mutex); if (drvdata->enable[drvdata->curr_list]) { if (drvdata->enable[drvdata->curr_list]) { ret = -EBUSY; ret = -EBUSY; goto out; goto out; Loading Loading @@ -771,10 +772,21 @@ static DEVICE_ATTR(trigger, 0200, NULL, dcc_store_trigger); static ssize_t dcc_show_enable(struct device *dev, static ssize_t dcc_show_enable(struct device *dev, struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf) { { int ret; struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); return scnprintf(buf, PAGE_SIZE, "%u\n", mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } ret = scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned int)drvdata->enable[drvdata->curr_list]); (unsigned int)drvdata->enable[drvdata->curr_list]); err: mutex_unlock(&drvdata->mutex); return ret; } } static ssize_t dcc_store_enable(struct device *dev, static ssize_t dcc_store_enable(struct device *dev, Loading Loading @@ -812,10 +824,13 @@ static ssize_t dcc_show_config(struct device *dev, buf[0] = '\0'; buf[0] = '\0'; if (drvdata->curr_list >= DCC_MAX_LINK_LIST) return -EINVAL; mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); count = -EINVAL; goto err; } list_for_each_entry(entry, list_for_each_entry(entry, &drvdata->cfg_head[drvdata->curr_list], list) { &drvdata->cfg_head[drvdata->curr_list], list) { switch (entry->desc_type) { switch (entry->desc_type) { Loading Loading @@ -852,8 +867,8 @@ static ssize_t dcc_show_config(struct device *dev, count += len; count += len; } } err: mutex_unlock(&drvdata->mutex); mutex_unlock(&drvdata->mutex); return count; return count; } } Loading @@ -866,6 +881,12 @@ static int dcc_config_add(struct dcc_drvdata *drvdata, unsigned int addr, mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(drvdata->dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!len) { if (!len) { dev_err(drvdata->dev, "DCC: Invalid length\n"); dev_err(drvdata->dev, "DCC: Invalid length\n"); ret = -EINVAL; ret = -EINVAL; Loading Loading @@ -959,11 +980,6 @@ static ssize_t dcc_store_config(struct device *dev, if (nval <= 0 || nval > 3) if (nval <= 0 || nval > 3) return -EINVAL; return -EINVAL; if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); return -EINVAL; } if (nval == 1) { if (nval == 1) { len = 1; len = 1; apb_bus = 0; apb_bus = 0; Loading Loading @@ -1028,6 +1044,12 @@ static ssize_t dcc_show_crc_error(struct device *dev, struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!drvdata->enable[drvdata->curr_list]) { if (!drvdata->enable[drvdata->curr_list]) { ret = -EINVAL; ret = -EINVAL; goto err; goto err; Loading @@ -1049,6 +1071,13 @@ static ssize_t dcc_show_ready(struct device *dev, struct dcc_drvdata *drvdata = dev_get_drvdata(dev); struct dcc_drvdata *drvdata = dev_get_drvdata(dev); mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (!drvdata->enable[drvdata->curr_list]) { if (!drvdata->enable[drvdata->curr_list]) { ret = -EINVAL; ret = -EINVAL; goto err; goto err; Loading Loading @@ -1159,6 +1188,12 @@ static ssize_t dcc_rd_mod_wr(struct device *dev, goto err; goto err; } } if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto err; } if (list_empty(&drvdata->cfg_head[drvdata->curr_list])) { if (list_empty(&drvdata->cfg_head[drvdata->curr_list])) { dev_err(drvdata->dev, "DCC: No read address programmed\n"); dev_err(drvdata->dev, "DCC: No read address programmed\n"); ret = -EPERM; ret = -EPERM; Loading Loading @@ -1266,6 +1301,12 @@ static ssize_t dcc_store_cti_trig(struct device *dev, mutex_lock(&drvdata->mutex); mutex_lock(&drvdata->mutex); if (drvdata->curr_list >= DCC_MAX_LINK_LIST) { dev_err(dev, "Select link list to program using curr_list\n"); ret = -EINVAL; goto out; } if (drvdata->enable[drvdata->curr_list]) { if (drvdata->enable[drvdata->curr_list]) { ret = -EBUSY; ret = -EBUSY; goto out; goto out; Loading