|
@@ -305,6 +305,49 @@ static int __init dove_init_pmu_irq(struct pmu_data *pmu, int irq)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
|
|
|
+{
|
|
|
+ const struct dove_pmu_domain_initdata *domain_initdata;
|
|
|
+ struct pmu_data *pmu;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
|
|
|
+ if (!pmu)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ spin_lock_init(&pmu->lock);
|
|
|
+ pmu->pmc_base = initdata->pmc_base;
|
|
|
+ pmu->pmu_base = initdata->pmu_base;
|
|
|
+
|
|
|
+ pmu_reset_init(pmu);
|
|
|
+ for (domain_initdata = initdata->domains; domain_initdata->name;
|
|
|
+ domain_initdata++) {
|
|
|
+ struct pmu_domain *domain;
|
|
|
+
|
|
|
+ domain = kzalloc(sizeof(*domain), GFP_KERNEL);
|
|
|
+ if (domain) {
|
|
|
+ domain->pmu = pmu;
|
|
|
+ domain->pwr_mask = domain_initdata->pwr_mask;
|
|
|
+ domain->rst_mask = domain_initdata->rst_mask;
|
|
|
+ domain->iso_mask = domain_initdata->iso_mask;
|
|
|
+ domain->base.name = domain_initdata->name;
|
|
|
+
|
|
|
+ __pmu_domain_register(domain, NULL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = dove_init_pmu_irq(pmu, initdata->irq);
|
|
|
+ if (ret)
|
|
|
+ pr_err("dove_init_pmu_irq() failed: %d\n", ret);
|
|
|
+
|
|
|
+ if (pmu->irq_domain)
|
|
|
+ irq_domain_associate_many(pmu->irq_domain,
|
|
|
+ initdata->irq_domain_start,
|
|
|
+ 0, NR_PMU_IRQS);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* pmu: power-manager@d0000 {
|
|
|
* compatible = "marvell,dove-pmu";
|