diff options
author | Arnd Bergmann <arnd@arndb.de> | 2015-12-15 18:57:08 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2015-12-15 18:57:08 -0500 |
commit | 3081dc9eff32519bc3298c6dba0b877675d4c1cd (patch) | |
tree | d4c1d2af14e09e96dd015fa9163df88106b11ddf /drivers/soc | |
parent | 22ba14f41ca6b7f96fe3d4a8eb116358060595fd (diff) | |
parent | c5d431e8c511788556651b91debd7d77d4508f4b (diff) |
Merge tag 'mvebu-soc-4.5-1' of git://git.infradead.org/linux-mvebu into next/multiplatform
Merge "mvebu soc for 4.5 (part 1)" from Gregory CLEMENT:
- orion5x/mv78xx0 multiplatform conversion
- legacy dove PMU support conversion
* tag 'mvebu-soc-4.5-1' of git://git.infradead.org/linux-mvebu:
ARM: dove: convert legacy dove to PMU support
soc: dove: add legacy support to PMU driver
ARM: orion5x: multiplatform support
ARM: orion5x: clean up mach/*.h headers
ARM: mv78xx0: multiplatform support
ARM: mv78xx0: clean up mach/*.h headers
ARM: orion: use SPARSE_IRQ everywhere
ARM: orion: always use MULTI_IRQ_HANDLER
ARM: orion: move watchdog setup to mach-orion5x
Conflicts:
arch/arm/Kconfig
arch/arm/mach-dove/include/mach/entry-macro.S
arch/arm/mach-orion5x/include/mach/entry-macro.S
Diffstat (limited to 'drivers/soc')
-rw-r--r-- | drivers/soc/Makefile | 1 | ||||
-rw-r--r-- | drivers/soc/dove/pmu.c | 43 |
2 files changed, 44 insertions, 0 deletions
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index f2ba2e932ae1..d52872680f86 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile | |||
@@ -3,6 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-$(CONFIG_SOC_BRCMSTB) += brcmstb/ | 5 | obj-$(CONFIG_SOC_BRCMSTB) += brcmstb/ |
6 | obj-$(CONFIG_ARCH_DOVE) += dove/ | ||
6 | obj-$(CONFIG_MACH_DOVE) += dove/ | 7 | obj-$(CONFIG_MACH_DOVE) += dove/ |
7 | obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/ | 8 | obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/ |
8 | obj-$(CONFIG_ARCH_QCOM) += qcom/ | 9 | obj-$(CONFIG_ARCH_QCOM) += qcom/ |
diff --git a/drivers/soc/dove/pmu.c b/drivers/soc/dove/pmu.c index abd087917f80..039374e9fdc0 100644 --- a/drivers/soc/dove/pmu.c +++ b/drivers/soc/dove/pmu.c | |||
@@ -305,6 +305,49 @@ static int __init dove_init_pmu_irq(struct pmu_data *pmu, int irq) | |||
305 | return 0; | 305 | return 0; |
306 | } | 306 | } |
307 | 307 | ||
308 | int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata) | ||
309 | { | ||
310 | const struct dove_pmu_domain_initdata *domain_initdata; | ||
311 | struct pmu_data *pmu; | ||
312 | int ret; | ||
313 | |||
314 | pmu = kzalloc(sizeof(*pmu), GFP_KERNEL); | ||
315 | if (!pmu) | ||
316 | return -ENOMEM; | ||
317 | |||
318 | spin_lock_init(&pmu->lock); | ||
319 | pmu->pmc_base = initdata->pmc_base; | ||
320 | pmu->pmu_base = initdata->pmu_base; | ||
321 | |||
322 | pmu_reset_init(pmu); | ||
323 | for (domain_initdata = initdata->domains; domain_initdata->name; | ||
324 | domain_initdata++) { | ||
325 | struct pmu_domain *domain; | ||
326 | |||
327 | domain = kzalloc(sizeof(*domain), GFP_KERNEL); | ||
328 | if (domain) { | ||
329 | domain->pmu = pmu; | ||
330 | domain->pwr_mask = domain_initdata->pwr_mask; | ||
331 | domain->rst_mask = domain_initdata->rst_mask; | ||
332 | domain->iso_mask = domain_initdata->iso_mask; | ||
333 | domain->base.name = domain_initdata->name; | ||
334 | |||
335 | __pmu_domain_register(domain, NULL); | ||
336 | } | ||
337 | } | ||
338 | |||
339 | ret = dove_init_pmu_irq(pmu, initdata->irq); | ||
340 | if (ret) | ||
341 | pr_err("dove_init_pmu_irq() failed: %d\n", ret); | ||
342 | |||
343 | if (pmu->irq_domain) | ||
344 | irq_domain_associate_many(pmu->irq_domain, | ||
345 | initdata->irq_domain_start, | ||
346 | 0, NR_PMU_IRQS); | ||
347 | |||
348 | return 0; | ||
349 | } | ||
350 | |||
308 | /* | 351 | /* |
309 | * pmu: power-manager@d0000 { | 352 | * pmu: power-manager@d0000 { |
310 | * compatible = "marvell,dove-pmu"; | 353 | * compatible = "marvell,dove-pmu"; |