Commit 843372db authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge branches 'pm-cpuidle', 'pm-sleep' and 'pm-domains'

* pm-cpuidle:
  cpuidle: qcom: Add SPM register data for MSM8226
  dt-bindings: arm: msm: Add SAW2 for MSM8226

* pm-sleep:
  PM: sleep: Use ktime_us_delta() in initcall_debug_report()

* pm-domains:
  PM: domains: Shrink locking area of the gpd_list_lock
...@@ -25,6 +25,7 @@ PROPERTIES ...@@ -25,6 +25,7 @@ PROPERTIES
"qcom,saw2" "qcom,saw2"
A more specific value could be one of: A more specific value could be one of:
"qcom,apq8064-saw2-v1.1-cpu" "qcom,apq8064-saw2-v1.1-cpu"
"qcom,msm8226-saw2-v2.1-cpu"
"qcom,msm8974-saw2-v2.1-cpu" "qcom,msm8974-saw2-v2.1-cpu"
"qcom,apq8084-saw2-v2.1-cpu" "qcom,apq8084-saw2-v2.1-cpu"
......
...@@ -2018,8 +2018,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd, ...@@ -2018,8 +2018,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
mutex_lock(&gpd_list_lock); mutex_lock(&gpd_list_lock);
list_add(&genpd->gpd_list_node, &gpd_list); list_add(&genpd->gpd_list_node, &gpd_list);
genpd_debug_add(genpd);
mutex_unlock(&gpd_list_lock); mutex_unlock(&gpd_list_lock);
genpd_debug_add(genpd);
return 0; return 0;
} }
...@@ -2206,12 +2206,19 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate, ...@@ -2206,12 +2206,19 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
static bool genpd_present(const struct generic_pm_domain *genpd) static bool genpd_present(const struct generic_pm_domain *genpd)
{ {
bool ret = false;
const struct generic_pm_domain *gpd; const struct generic_pm_domain *gpd;
list_for_each_entry(gpd, &gpd_list, gpd_list_node) mutex_lock(&gpd_list_lock);
if (gpd == genpd) list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
return true; if (gpd == genpd) {
return false; ret = true;
break;
}
}
mutex_unlock(&gpd_list_lock);
return ret;
} }
/** /**
...@@ -2222,15 +2229,13 @@ static bool genpd_present(const struct generic_pm_domain *genpd) ...@@ -2222,15 +2229,13 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
int of_genpd_add_provider_simple(struct device_node *np, int of_genpd_add_provider_simple(struct device_node *np,
struct generic_pm_domain *genpd) struct generic_pm_domain *genpd)
{ {
int ret = -EINVAL; int ret;
if (!np || !genpd) if (!np || !genpd)
return -EINVAL; return -EINVAL;
mutex_lock(&gpd_list_lock);
if (!genpd_present(genpd)) if (!genpd_present(genpd))
goto unlock; return -EINVAL;
genpd->dev.of_node = np; genpd->dev.of_node = np;
...@@ -2241,7 +2246,7 @@ int of_genpd_add_provider_simple(struct device_node *np, ...@@ -2241,7 +2246,7 @@ int of_genpd_add_provider_simple(struct device_node *np,
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(&genpd->dev, "Failed to add OPP table: %d\n", dev_err(&genpd->dev, "Failed to add OPP table: %d\n",
ret); ret);
goto unlock; return ret;
} }
/* /*
...@@ -2259,16 +2264,13 @@ int of_genpd_add_provider_simple(struct device_node *np, ...@@ -2259,16 +2264,13 @@ int of_genpd_add_provider_simple(struct device_node *np,
dev_pm_opp_of_remove_table(&genpd->dev); dev_pm_opp_of_remove_table(&genpd->dev);
} }
goto unlock; return ret;
} }
genpd->provider = &np->fwnode; genpd->provider = &np->fwnode;
genpd->has_provider = true; genpd->has_provider = true;
unlock: return 0;
mutex_unlock(&gpd_list_lock);
return ret;
} }
EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple); EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple);
...@@ -2287,8 +2289,6 @@ int of_genpd_add_provider_onecell(struct device_node *np, ...@@ -2287,8 +2289,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
if (!np || !data) if (!np || !data)
return -EINVAL; return -EINVAL;
mutex_lock(&gpd_list_lock);
if (!data->xlate) if (!data->xlate)
data->xlate = genpd_xlate_onecell; data->xlate = genpd_xlate_onecell;
...@@ -2328,8 +2328,6 @@ int of_genpd_add_provider_onecell(struct device_node *np, ...@@ -2328,8 +2328,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
if (ret < 0) if (ret < 0)
goto error; goto error;
mutex_unlock(&gpd_list_lock);
return 0; return 0;
error: error:
...@@ -2348,8 +2346,6 @@ int of_genpd_add_provider_onecell(struct device_node *np, ...@@ -2348,8 +2346,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
} }
} }
mutex_unlock(&gpd_list_lock);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(of_genpd_add_provider_onecell); EXPORT_SYMBOL_GPL(of_genpd_add_provider_onecell);
......
...@@ -220,16 +220,13 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime, ...@@ -220,16 +220,13 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime,
void *cb, int error) void *cb, int error)
{ {
ktime_t rettime; ktime_t rettime;
s64 nsecs;
if (!pm_print_times_enabled) if (!pm_print_times_enabled)
return; return;
rettime = ktime_get(); rettime = ktime_get();
nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime));
dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error, dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error,
(unsigned long long)nsecs >> 10); (unsigned long long)ktime_us_delta(rettime, calltime));
} }
/** /**
......
...@@ -87,6 +87,18 @@ static const struct spm_reg_data spm_reg_8974_8084_cpu = { ...@@ -87,6 +87,18 @@ static const struct spm_reg_data spm_reg_8974_8084_cpu = {
.start_index[PM_SLEEP_MODE_SPC] = 3, .start_index[PM_SLEEP_MODE_SPC] = 3,
}; };
/* SPM register data for 8226 */
static const struct spm_reg_data spm_reg_8226_cpu = {
.reg_offset = spm_reg_offset_v2_1,
.spm_cfg = 0x0,
.spm_dly = 0x3C102800,
.seq = { 0x60, 0x03, 0x60, 0x0B, 0x0F, 0x20, 0x10, 0x80, 0x30, 0x90,
0x5B, 0x60, 0x03, 0x60, 0x3B, 0x76, 0x76, 0x0B, 0x94, 0x5B,
0x80, 0x10, 0x26, 0x30, 0x0F },
.start_index[PM_SLEEP_MODE_STBY] = 0,
.start_index[PM_SLEEP_MODE_SPC] = 5,
};
static const u8 spm_reg_offset_v1_1[SPM_REG_NR] = { static const u8 spm_reg_offset_v1_1[SPM_REG_NR] = {
[SPM_REG_CFG] = 0x08, [SPM_REG_CFG] = 0x08,
[SPM_REG_SPM_CTL] = 0x20, [SPM_REG_SPM_CTL] = 0x20,
...@@ -259,6 +271,8 @@ static struct spm_driver_data *spm_get_drv(struct platform_device *pdev, ...@@ -259,6 +271,8 @@ static struct spm_driver_data *spm_get_drv(struct platform_device *pdev,
} }
static const struct of_device_id spm_match_table[] = { static const struct of_device_id spm_match_table[] = {
{ .compatible = "qcom,msm8226-saw2-v2.1-cpu",
.data = &spm_reg_8226_cpu },
{ .compatible = "qcom,msm8974-saw2-v2.1-cpu", { .compatible = "qcom,msm8974-saw2-v2.1-cpu",
.data = &spm_reg_8974_8084_cpu }, .data = &spm_reg_8974_8084_cpu },
{ .compatible = "qcom,apq8084-saw2-v2.1-cpu", { .compatible = "qcom,apq8084-saw2-v2.1-cpu",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment