aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/kexec_elf_64.c6
-rw-r--r--arch/powerpc/perf/core-book3s.c6
-rw-r--r--arch/powerpc/perf/power8-pmu.c3
-rw-r--r--arch/powerpc/perf/power9-pmu.c3
-rw-r--r--arch/powerpc/platforms/powernv/opal-imc.c4
5 files changed, 19 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/kexec_elf_64.c b/arch/powerpc/kernel/kexec_elf_64.c
index ba4f18a43ee8..52a29fc73730 100644
--- a/arch/powerpc/kernel/kexec_elf_64.c
+++ b/arch/powerpc/kernel/kexec_elf_64.c
@@ -547,6 +547,7 @@ static int elf_exec_load(struct kimage *image, struct elfhdr *ehdr,
547 kbuf.memsz = phdr->p_memsz; 547 kbuf.memsz = phdr->p_memsz;
548 kbuf.buf_align = phdr->p_align; 548 kbuf.buf_align = phdr->p_align;
549 kbuf.buf_min = phdr->p_paddr + base; 549 kbuf.buf_min = phdr->p_paddr + base;
550 kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
550 ret = kexec_add_buffer(&kbuf); 551 ret = kexec_add_buffer(&kbuf);
551 if (ret) 552 if (ret)
552 goto out; 553 goto out;
@@ -581,7 +582,8 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
581 struct kexec_buf kbuf = { .image = image, .buf_min = 0, 582 struct kexec_buf kbuf = { .image = image, .buf_min = 0,
582 .buf_max = ppc64_rma_size }; 583 .buf_max = ppc64_rma_size };
583 struct kexec_buf pbuf = { .image = image, .buf_min = 0, 584 struct kexec_buf pbuf = { .image = image, .buf_min = 0,
584 .buf_max = ppc64_rma_size, .top_down = true }; 585 .buf_max = ppc64_rma_size, .top_down = true,
586 .mem = KEXEC_BUF_MEM_UNKNOWN };
585 587
586 ret = build_elf_exec_info(kernel_buf, kernel_len, &ehdr, &elf_info); 588 ret = build_elf_exec_info(kernel_buf, kernel_len, &ehdr, &elf_info);
587 if (ret) 589 if (ret)
@@ -606,6 +608,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
606 kbuf.bufsz = kbuf.memsz = initrd_len; 608 kbuf.bufsz = kbuf.memsz = initrd_len;
607 kbuf.buf_align = PAGE_SIZE; 609 kbuf.buf_align = PAGE_SIZE;
608 kbuf.top_down = false; 610 kbuf.top_down = false;
611 kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
609 ret = kexec_add_buffer(&kbuf); 612 ret = kexec_add_buffer(&kbuf);
610 if (ret) 613 if (ret)
611 goto out; 614 goto out;
@@ -638,6 +641,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
638 kbuf.bufsz = kbuf.memsz = fdt_size; 641 kbuf.bufsz = kbuf.memsz = fdt_size;
639 kbuf.buf_align = PAGE_SIZE; 642 kbuf.buf_align = PAGE_SIZE;
640 kbuf.top_down = true; 643 kbuf.top_down = true;
644 kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
641 ret = kexec_add_buffer(&kbuf); 645 ret = kexec_add_buffer(&kbuf);
642 if (ret) 646 if (ret)
643 goto out; 647 goto out;
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 7e129f62cd67..ca92e01d0bd1 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -1846,6 +1846,7 @@ static int power_pmu_event_init(struct perf_event *event)
1846 int n; 1846 int n;
1847 int err; 1847 int err;
1848 struct cpu_hw_events *cpuhw; 1848 struct cpu_hw_events *cpuhw;
1849 u64 bhrb_filter;
1849 1850
1850 if (!ppmu) 1851 if (!ppmu)
1851 return -ENOENT; 1852 return -ENOENT;
@@ -1951,13 +1952,14 @@ static int power_pmu_event_init(struct perf_event *event)
1951 err = power_check_constraints(cpuhw, events, cflags, n + 1); 1952 err = power_check_constraints(cpuhw, events, cflags, n + 1);
1952 1953
1953 if (has_branch_stack(event)) { 1954 if (has_branch_stack(event)) {
1954 cpuhw->bhrb_filter = ppmu->bhrb_filter_map( 1955 bhrb_filter = ppmu->bhrb_filter_map(
1955 event->attr.branch_sample_type); 1956 event->attr.branch_sample_type);
1956 1957
1957 if (cpuhw->bhrb_filter == -1) { 1958 if (bhrb_filter == -1) {
1958 put_cpu_var(cpu_hw_events); 1959 put_cpu_var(cpu_hw_events);
1959 return -EOPNOTSUPP; 1960 return -EOPNOTSUPP;
1960 } 1961 }
1962 cpuhw->bhrb_filter = bhrb_filter;
1961 } 1963 }
1962 1964
1963 put_cpu_var(cpu_hw_events); 1965 put_cpu_var(cpu_hw_events);
diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
index b47e9fb5e899..3a5fcc20ff31 100644
--- a/arch/powerpc/perf/power8-pmu.c
+++ b/arch/powerpc/perf/power8-pmu.c
@@ -25,6 +25,7 @@ enum {
25#define POWER8_MMCRA_IFM1 0x0000000040000000UL 25#define POWER8_MMCRA_IFM1 0x0000000040000000UL
26#define POWER8_MMCRA_IFM2 0x0000000080000000UL 26#define POWER8_MMCRA_IFM2 0x0000000080000000UL
27#define POWER8_MMCRA_IFM3 0x00000000C0000000UL 27#define POWER8_MMCRA_IFM3 0x00000000C0000000UL
28#define POWER8_MMCRA_BHRB_MASK 0x00000000C0000000UL
28 29
29/* 30/*
30 * Raw event encoding for PowerISA v2.07 (Power8): 31 * Raw event encoding for PowerISA v2.07 (Power8):
@@ -239,6 +240,8 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type)
239 240
240static void power8_config_bhrb(u64 pmu_bhrb_filter) 241static void power8_config_bhrb(u64 pmu_bhrb_filter)
241{ 242{
243 pmu_bhrb_filter &= POWER8_MMCRA_BHRB_MASK;
244
242 /* Enable BHRB filter in PMU */ 245 /* Enable BHRB filter in PMU */
243 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); 246 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter));
244} 247}
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
index 738ed26c538d..08c3ef796198 100644
--- a/arch/powerpc/perf/power9-pmu.c
+++ b/arch/powerpc/perf/power9-pmu.c
@@ -88,6 +88,7 @@ enum {
88#define POWER9_MMCRA_IFM1 0x0000000040000000UL 88#define POWER9_MMCRA_IFM1 0x0000000040000000UL
89#define POWER9_MMCRA_IFM2 0x0000000080000000UL 89#define POWER9_MMCRA_IFM2 0x0000000080000000UL
90#define POWER9_MMCRA_IFM3 0x00000000C0000000UL 90#define POWER9_MMCRA_IFM3 0x00000000C0000000UL
91#define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL
91 92
92/* Nasty Power9 specific hack */ 93/* Nasty Power9 specific hack */
93#define PVR_POWER9_CUMULUS 0x00002000 94#define PVR_POWER9_CUMULUS 0x00002000
@@ -296,6 +297,8 @@ static u64 power9_bhrb_filter_map(u64 branch_sample_type)
296 297
297static void power9_config_bhrb(u64 pmu_bhrb_filter) 298static void power9_config_bhrb(u64 pmu_bhrb_filter)
298{ 299{
300 pmu_bhrb_filter &= POWER9_MMCRA_BHRB_MASK;
301
299 /* Enable BHRB filter in PMU */ 302 /* Enable BHRB filter in PMU */
300 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); 303 mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter));
301} 304}
diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c
index 1b6932890a73..186109bdd41b 100644
--- a/arch/powerpc/platforms/powernv/opal-imc.c
+++ b/arch/powerpc/platforms/powernv/opal-imc.c
@@ -157,6 +157,10 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain)
157 struct imc_pmu *pmu_ptr; 157 struct imc_pmu *pmu_ptr;
158 u32 offset; 158 u32 offset;
159 159
160 /* Return for unknown domain */
161 if (domain < 0)
162 return -EINVAL;
163
160 /* memory for pmu */ 164 /* memory for pmu */
161 pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL); 165 pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL);
162 if (!pmu_ptr) 166 if (!pmu_ptr)