Commit 9f4512c2 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branches 'acpi-processor', 'acpi-tables', 'acpi-pnp' and 'acpi-maintainers'

Merge ACPI processor driver changes, ACPI table parser changes, ACPI
device enumeration changes related to PNP and a MAINTAINERS update
related to ACPI for 6.3-rc1:

 - Drop an unnecessary (void *) conversion from the ACPI processor
   driver (Zhou jie).

 - Modify the ACPI processor performance library code to use the "no
   limit" frequency QoS as appropriate and adjust the intel_pstate
   driver accordingly (Rafael Wysocki).

 - Add support for NBFT to the ACPI table parser (Stuart Hayes).

 - Introduce list of known non-PNP devices to avoid enumerating some of
   them as PNP devices (Rafael Wysocki).

 - Add x86 ACPI paths to the ACPI entry in MAINTAINERS to allow scripts
   to report the actual maintainers information (Rafael Wysocki).

* acpi-processor:
  cpufreq: intel_pstate: Drop ACPI _PSS states table patching
  ACPI: processor: perflib: Avoid updating frequency QoS unnecessarily
  ACPI: processor: perflib: Use the "no limit" frequency QoS
  ACPI: processor: idle: Drop unnecessary (void *) conversion

* acpi-tables:
  ACPI: tables: Add support for NBFT

* acpi-pnp:
  ACPI: PNP: Introduce list of known non-PNP devices

* acpi-maintainers:
  MAINTAINERS: Add x86 ACPI paths to the ACPI entry
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -361,6 +361,8 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
F:	Documentation/ABI/testing/configfs-acpi
F:	Documentation/ABI/testing/sysfs-bus-acpi
F:	Documentation/firmware-guide/acpi/
F:	arch/x86/kernel/acpi/
F:	arch/x86/pci/acpi.c
F:	drivers/acpi/
F:	drivers/pci/*/*acpi*
F:	drivers/pci/*acpi*
@@ -20105,7 +20107,8 @@ L: linux-pm@vger.kernel.org
S:	Supported
B:	https://bugzilla.kernel.org
F:	Documentation/power/
F:	arch/x86/kernel/acpi/
F:	arch/x86/kernel/acpi/sleep*
F:	arch/x86/kernel/acpi/wakeup*
F:	drivers/base/power/
F:	include/linux/freezer.h
F:	include/linux/pm.h
+13 −1
Original line number Diff line number Diff line
@@ -348,10 +348,22 @@ static bool acpi_pnp_match(const char *idstr, const struct acpi_device_id **matc
	return false;
}

/*
 * If one of the device IDs below is present in the list of device IDs of a
 * given ACPI device object, the PNP scan handler will not attach to that
 * object, because there is a proper non-PNP driver in the kernel for the
 * device represented by it.
 */
static const struct acpi_device_id acpi_nonpnp_device_ids[] = {
	{"INTC1080"},
	{"INTC1081"},
	{""},
};

static int acpi_pnp_attach(struct acpi_device *adev,
			   const struct acpi_device_id *id)
{
	return 1;
	return !!acpi_match_device_ids(adev, acpi_nonpnp_device_ids);
}

static struct acpi_scan_handler acpi_pnp_handler = {
+1 −1
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ static void lapic_timer_check_state(int state, struct acpi_processor *pr,

static void __lapic_timer_propagate_broadcast(void *arg)
{
	struct acpi_processor *pr = (struct acpi_processor *) arg;
	struct acpi_processor *pr = arg;

	if (pr->power.timer_broadcast_on_state < INT_MAX)
		tick_broadcast_enable();
+30 −8
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
{
	acpi_status status = 0;
	unsigned long long ppc = 0;
	s32 qos_value;
	int index;
	int ret;

	if (!pr)
@@ -72,17 +74,30 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
		}
	}

	index = ppc;

	if (pr->performance_platform_limit == index ||
	    ppc >= pr->performance->state_count)
		return 0;

	pr_debug("CPU %d: _PPC is %d - frequency %s limited\n", pr->id,
		       (int)ppc, ppc ? "" : "not");
		 index, index ? "is" : "is not");

	pr->performance_platform_limit = (int)ppc;
	pr->performance_platform_limit = index;

	if (ppc >= pr->performance->state_count ||
	    unlikely(!freq_qos_request_active(&pr->perflib_req)))
	if (unlikely(!freq_qos_request_active(&pr->perflib_req)))
		return 0;

	ret = freq_qos_update_request(&pr->perflib_req,
			pr->performance->states[ppc].core_frequency * 1000);
	/*
	 * If _PPC returns 0, it means that all of the available states can be
	 * used ("no limit").
	 */
	if (index == 0)
		qos_value = FREQ_QOS_MAX_DEFAULT_VALUE;
	else
		qos_value = pr->performance->states[index].core_frequency * 1000;

	ret = freq_qos_update_request(&pr->perflib_req, qos_value);
	if (ret < 0) {
		pr_warn("Failed to update perflib freq constraint: CPU%d (%d)\n",
			pr->id, ret);
@@ -166,9 +181,16 @@ void acpi_processor_ppc_init(struct cpufreq_policy *policy)
		if (!pr)
			continue;

		/*
		 * Reset performance_platform_limit in case there is a stale
		 * value in it, so as to make it match the "no limit" QoS value
		 * below.
		 */
		pr->performance_platform_limit = 0;

		ret = freq_qos_add_request(&policy->constraints,
					   &pr->perflib_req,
					   FREQ_QOS_MAX, INT_MAX);
					   &pr->perflib_req, FREQ_QOS_MAX,
					   FREQ_QOS_MAX_DEFAULT_VALUE);
		if (ret < 0)
			pr_err("Failed to add freq constraint for CPU%d (%d)\n",
			       cpu, ret);
+2 −1
Original line number Diff line number Diff line
@@ -555,7 +555,8 @@ static const char table_sigs[][ACPI_NAMESEG_SIZE] __initconst = {
	ACPI_SIG_WDDT, ACPI_SIG_WDRT, ACPI_SIG_DSDT, ACPI_SIG_FADT,
	ACPI_SIG_PSDT, ACPI_SIG_RSDT, ACPI_SIG_XSDT, ACPI_SIG_SSDT,
	ACPI_SIG_IORT, ACPI_SIG_NFIT, ACPI_SIG_HMAT, ACPI_SIG_PPTT,
	ACPI_SIG_NHLT, ACPI_SIG_AEST, ACPI_SIG_CEDT, ACPI_SIG_AGDI };
	ACPI_SIG_NHLT, ACPI_SIG_AEST, ACPI_SIG_CEDT, ACPI_SIG_AGDI,
	ACPI_SIG_NBFT };

#define ACPI_HEADER_SIZE sizeof(struct acpi_table_header)

Loading