Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d15a3e5 authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Paul Mackerras
Browse files

[PATCH] ppc64: make firmware_has_feature() stronger



Make firmware_has_feature() evaluate at compile time for the non pSeries
case and tidy up code where possible.

Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 1ababe11
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ obj-y := setup.o entry.o traps.o irq.o idle.o dma.o \
			udbg.o binfmt_elf32.o sys_ppc32.o ioctl32.o \
			ptrace32.o signal32.o rtc.o init_task.o \
			lmb.o cputable.o cpu_setup_power4.o idle_power4.o \
			iommu.o sysfs.o vdso.o pmc.o
			iommu.o sysfs.o vdso.o pmc.o firmware.o
obj-y += vdso32/ vdso64/

obj-$(CONFIG_PPC_OF) +=	of_device.o
+1 −26
Original line number Diff line number Diff line
@@ -20,11 +20,9 @@
#include <linux/module.h>

#include <asm/cputable.h>
#include <asm/firmware.h>

struct cpu_spec* cur_cpu_spec = NULL;
EXPORT_SYMBOL(cur_cpu_spec);
unsigned long ppc64_firmware_features;

/* NOTE:
 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
@@ -244,26 +242,3 @@ struct cpu_spec cpu_specs[] = {
		.cpu_setup		= __setup_cpu_power4,
	}
};

firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
	{FW_FEATURE_PFT,		"hcall-pft"},
	{FW_FEATURE_TCE,		"hcall-tce"},
	{FW_FEATURE_SPRG0,		"hcall-sprg0"},
	{FW_FEATURE_DABR,		"hcall-dabr"},
	{FW_FEATURE_COPY,		"hcall-copy"},
	{FW_FEATURE_ASR,		"hcall-asr"},
	{FW_FEATURE_DEBUG,		"hcall-debug"},
	{FW_FEATURE_PERF,		"hcall-perf"},
	{FW_FEATURE_DUMP,		"hcall-dump"},
	{FW_FEATURE_INTERRUPT,		"hcall-interrupt"},
	{FW_FEATURE_MIGRATE,		"hcall-migrate"},
	{FW_FEATURE_PERFMON,		"hcall-perfmon"},
	{FW_FEATURE_CRQ,		"hcall-crq"},
	{FW_FEATURE_VIO,		"hcall-vio"},
	{FW_FEATURE_RDMA,		"hcall-rdma"},
	{FW_FEATURE_LLAN,		"hcall-lLAN"},
	{FW_FEATURE_BULK,		"hcall-bulk"},
	{FW_FEATURE_XDABR,		"hcall-xdabr"},
	{FW_FEATURE_MULTITCE,		"hcall-multi-tce"},
	{FW_FEATURE_SPLPAR,		"hcall-splpar"},
};
+47 −0
Original line number Diff line number Diff line
/*
 *  arch/ppc64/kernel/firmware.c
 *
 *  Extracted from cputable.c
 *
 *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
 *
 *  Modifications for ppc64:
 *      Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
 *  Copyright (C) 2005 Stephen Rothwell, IBM Corporation
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License
 *  as published by the Free Software Foundation; either version
 *  2 of the License, or (at your option) any later version.
 */

#include <linux/config.h>

#include <asm/firmware.h>

unsigned long ppc64_firmware_features;

#ifdef CONFIG_PPC_PSERIES
firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
	{FW_FEATURE_PFT,		"hcall-pft"},
	{FW_FEATURE_TCE,		"hcall-tce"},
	{FW_FEATURE_SPRG0,		"hcall-sprg0"},
	{FW_FEATURE_DABR,		"hcall-dabr"},
	{FW_FEATURE_COPY,		"hcall-copy"},
	{FW_FEATURE_ASR,		"hcall-asr"},
	{FW_FEATURE_DEBUG,		"hcall-debug"},
	{FW_FEATURE_PERF,		"hcall-perf"},
	{FW_FEATURE_DUMP,		"hcall-dump"},
	{FW_FEATURE_INTERRUPT,		"hcall-interrupt"},
	{FW_FEATURE_MIGRATE,		"hcall-migrate"},
	{FW_FEATURE_PERFMON,		"hcall-perfmon"},
	{FW_FEATURE_CRQ,		"hcall-crq"},
	{FW_FEATURE_VIO,		"hcall-vio"},
	{FW_FEATURE_RDMA,		"hcall-rdma"},
	{FW_FEATURE_LLAN,		"hcall-lLAN"},
	{FW_FEATURE_BULK,		"hcall-bulk"},
	{FW_FEATURE_XDABR,		"hcall-xdabr"},
	{FW_FEATURE_MULTITCE,		"hcall-multi-tce"},
	{FW_FEATURE_SPLPAR,		"hcall-splpar"},
};
#endif
+1 −3
Original line number Diff line number Diff line
@@ -231,11 +231,9 @@ static void __init pSeries_setup_arch(void)

	pSeries_nvram_init();

	if (firmware_has_feature(FW_FEATURE_SPLPAR))
		vpa_init(boot_cpuid);

	/* Choose an idle loop */
	if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
		vpa_init(boot_cpuid);
		if (get_paca()->lppaca.shared_proc) {
			printk(KERN_INFO "Using shared processor idle loop\n");
			ppc_md.idle_loop = pseries_shared_idle;
+3 −6
Original line number Diff line number Diff line
@@ -203,10 +203,9 @@ struct task_struct *__switch_to(struct task_struct *prev,
	new_thread = &new->thread;
	old_thread = &current->thread;

/* Collect purr utilization data per process and per processor wise */
/* purr is nothing but processor time base                          */

#if defined(CONFIG_PPC_PSERIES)
	/* Collect purr utilization data per process and per processor
	 * wise purr is nothing but processor time base
	 */
	if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
		struct cpu_usage *cu = &__get_cpu_var(cpu_usage_array);
		long unsigned start_tb, current_tb;
@@ -215,8 +214,6 @@ struct task_struct *__switch_to(struct task_struct *prev,
		old_thread->accum_tb += (current_tb - start_tb);
		new_thread->start_tb = current_tb;
	}
#endif


	local_irq_save(flags);
	last = _switch(old_thread, new_thread);
Loading