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

Commit 2eb06097 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'acpi-ost'

* acpi-ost:
  ACPI: Drop acpi_evaluate_hotplug_ost() and ACPI_HOTPLUG_OST
  ACPI: use device name LNXSYBUS.xx for ACPI \_SB and \_TZ objects
  ACPI / processor: use acpi_evaluate_ost() to replace open-coded version
  ACPI / PAD / xen: use acpi_evaluate_ost() to replace open-coded version
  ACPI / PAD: use acpi_evaluate_ost() to replace open-coded version
  ACPI: rename acpi_evaluate_hotplug_ost() to acpi_evaluate_ost()
parents 75c44edd 700b8422
Loading
Loading
Loading
Loading
+5 −19
Original line number Original line Diff line number Diff line
@@ -408,28 +408,14 @@ static int acpi_pad_pur(acpi_handle handle)
	return num;
	return num;
}
}


/* Notify firmware how many CPUs are idle */
static void acpi_pad_ost(acpi_handle handle, int stat,
	uint32_t idle_cpus)
{
	union acpi_object params[3] = {
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_BUFFER,},
	};
	struct acpi_object_list arg_list = {3, params};

	params[0].integer.value = ACPI_PROCESSOR_AGGREGATOR_NOTIFY;
	params[1].integer.value =  stat;
	params[2].buffer.length = 4;
	params[2].buffer.pointer = (void *)&idle_cpus;
	acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
}

static void acpi_pad_handle_notify(acpi_handle handle)
static void acpi_pad_handle_notify(acpi_handle handle)
{
{
	int num_cpus;
	int num_cpus;
	uint32_t idle_cpus;
	uint32_t idle_cpus;
	struct acpi_buffer param = {
		.length = 4,
		.pointer = (void *)&idle_cpus,
	};


	mutex_lock(&isolated_cpus_lock);
	mutex_lock(&isolated_cpus_lock);
	num_cpus = acpi_pad_pur(handle);
	num_cpus = acpi_pad_pur(handle);
@@ -439,7 +425,7 @@ static void acpi_pad_handle_notify(acpi_handle handle)
	}
	}
	acpi_pad_idle_cpus(num_cpus);
	acpi_pad_idle_cpus(num_cpus);
	idle_cpus = acpi_pad_idle_cpus_num();
	idle_cpus = acpi_pad_idle_cpus_num();
	acpi_pad_ost(handle, 0, idle_cpus);
	acpi_evaluate_ost(handle, ACPI_PROCESSOR_AGGREGATOR_NOTIFY, 0, &param);
	mutex_unlock(&isolated_cpus_lock);
	mutex_unlock(&isolated_cpus_lock);
}
}


+1 −3
Original line number Original line Diff line number Diff line
@@ -311,9 +311,7 @@ static void acpi_bus_osc_support(void)
	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT;
	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT;
#endif
#endif


#ifdef ACPI_HOTPLUG_OST
	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
#endif


	if (!ghes_disable)
	if (!ghes_disable)
		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
@@ -410,7 +408,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
	return;
	return;


 err:
 err:
	acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL);
	acpi_evaluate_ost(handle, type, ost_code, NULL);
}
}


/* --------------------------------------------------------------------------
/* --------------------------------------------------------------------------
+3 −11
Original line number Original line Diff line number Diff line
@@ -156,17 +156,9 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
 */
 */
static void acpi_processor_ppc_ost(acpi_handle handle, int status)
static void acpi_processor_ppc_ost(acpi_handle handle, int status)
{
{
	union acpi_object params[2] = {
	if (acpi_has_method(handle, "_OST"))
		{.type = ACPI_TYPE_INTEGER,},
		acpi_evaluate_ost(handle, ACPI_PROCESSOR_NOTIFY_PERFORMANCE,
		{.type = ACPI_TYPE_INTEGER,},
				  status, NULL);
	};
	struct acpi_object_list arg_list = {2, params};

	if (acpi_has_method(handle, "_OST")) {
		params[0].integer.value = ACPI_PROCESSOR_NOTIFY_PERFORMANCE;
		params[1].integer.value =  status;
		acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
	}
}
}


int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag)
int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag)
+23 −7
Original line number Original line Diff line number Diff line
@@ -474,7 +474,7 @@ static int acpi_generic_hotplug_event(struct acpi_device *adev, u32 type)
			dev_info(&adev->dev, "Eject disabled\n");
			dev_info(&adev->dev, "Eject disabled\n");
			return -EPERM;
			return -EPERM;
		}
		}
		acpi_evaluate_hotplug_ost(adev->handle, ACPI_NOTIFY_EJECT_REQUEST,
		acpi_evaluate_ost(adev->handle, ACPI_NOTIFY_EJECT_REQUEST,
				  ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
				  ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
		return acpi_scan_hot_remove(adev);
		return acpi_scan_hot_remove(adev);
	}
	}
@@ -524,7 +524,7 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
		ost_code = ACPI_OST_SC_SUCCESS;
		ost_code = ACPI_OST_SC_SUCCESS;


 err_out:
 err_out:
	acpi_evaluate_hotplug_ost(adev->handle, src, ost_code, NULL);
	acpi_evaluate_ost(adev->handle, src, ost_code, NULL);


 out:
 out:
	acpi_bus_put_acpi_device(adev);
	acpi_bus_put_acpi_device(adev);
@@ -583,7 +583,7 @@ acpi_eject_store(struct device *d, struct device_attribute *attr,
		return count;
		return count;


	put_device(&acpi_device->dev);
	put_device(&acpi_device->dev);
	acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
	acpi_evaluate_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
			  ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
			  ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
	return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN;
	return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN;
}
}
@@ -1757,6 +1757,20 @@ static bool acpi_ibm_smbus_match(acpi_handle handle)
	return false;
	return false;
}
}


static bool acpi_object_is_system_bus(acpi_handle handle)
{
	acpi_handle tmp;

	if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &tmp)) &&
	    tmp == handle)
		return true;
	if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_TZ", &tmp)) &&
	    tmp == handle)
		return true;

	return false;
}

static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
				int device_type)
				int device_type)
{
{
@@ -1808,8 +1822,10 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
			acpi_add_id(pnp, ACPI_DOCK_HID);
			acpi_add_id(pnp, ACPI_DOCK_HID);
		else if (acpi_ibm_smbus_match(handle))
		else if (acpi_ibm_smbus_match(handle))
			acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
			acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
		else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) {
		else if (list_empty(&pnp->ids) &&
			acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
			 acpi_object_is_system_bus(handle)) {
			/* \_SB, \_TZ, LNXSYBUS */
			acpi_add_id(pnp, ACPI_BUS_HID);
			strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
			strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
			strcpy(pnp->device_class, ACPI_BUS_CLASS);
			strcpy(pnp->device_class, ACPI_BUS_CLASS);
		}
		}
+5 −11
Original line number Original line Diff line number Diff line
@@ -422,7 +422,7 @@ out:
EXPORT_SYMBOL(acpi_get_physical_device_location);
EXPORT_SYMBOL(acpi_get_physical_device_location);


/**
/**
 * acpi_evaluate_hotplug_ost: Evaluate _OST for hotplug operations
 * acpi_evaluate_ost: Evaluate _OST for hotplug operations
 * @handle: ACPI device handle
 * @handle: ACPI device handle
 * @source_event: source event code
 * @source_event: source event code
 * @status_code: status code
 * @status_code: status code
@@ -433,17 +433,15 @@ EXPORT_SYMBOL(acpi_get_physical_device_location);
 * When the platform does not support _OST, this function has no effect.
 * When the platform does not support _OST, this function has no effect.
 */
 */
acpi_status
acpi_status
acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event,
acpi_evaluate_ost(acpi_handle handle, u32 source_event, u32 status_code,
		u32 status_code, struct acpi_buffer *status_buf)
		  struct acpi_buffer *status_buf)
{
{
#ifdef ACPI_HOTPLUG_OST
	union acpi_object params[3] = {
	union acpi_object params[3] = {
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_INTEGER,},
		{.type = ACPI_TYPE_BUFFER,}
		{.type = ACPI_TYPE_BUFFER,}
	};
	};
	struct acpi_object_list arg_list = {3, params};
	struct acpi_object_list arg_list = {3, params};
	acpi_status status;


	params[0].integer.value = source_event;
	params[0].integer.value = source_event;
	params[1].integer.value = status_code;
	params[1].integer.value = status_code;
@@ -455,13 +453,9 @@ acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event,
		params[2].buffer.length = 0;
		params[2].buffer.length = 0;
	}
	}


	status = acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
	return acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
	return status;
#else
	return AE_OK;
#endif
}
}
EXPORT_SYMBOL(acpi_evaluate_hotplug_ost);
EXPORT_SYMBOL(acpi_evaluate_ost);


/**
/**
 * acpi_handle_printk: Print message with ACPI prefix and object path
 * acpi_handle_printk: Print message with ACPI prefix and object path
Loading