Skip to contentSkip to conversation

ACPI: idle: delete access to ACPI_BITREG_BUS_MASTER_RLD

PATCH In review Len Brown 1 participant 2 messages Oct 4, 2007 – Oct 10, 2007 ACPI

lore
Share & tools
lore

Len Brown

author reviewer
#0 lore raw

PATCH 1/1 ACPI: idle: delete access to ACPI_BITREG_BUS_MASTER_RLD

From: Len Brown <[email protected]>

The ACPI specification describes PM1*_CNT_BLK.BM_RLD in two places.

The first description says that the OS needs to set BM_RLD to enable bus master activity to wake the processor from C3.

The second description says that the platform sets BM_RLD to indicate whether it was bus master activity that woke the platform from C3 or not.

The first description is erroneous, the second description is correct. Delete Linux's implementation of the first description.

drivers/acpi/processor_idle.c +0 -21
index f182613..4f004f1 100644
@@ -192,26 +192,6 @@ acpi_processor_power_activate(struct acpi_processor *pr,
 		old->promotion.count = 0;
 	new->demotion.count = 0;
 
-	/* Cleanup from old state. */
-	if (old) {
-		switch (old->type) {
-		case ACPI_STATE_C3:
-			/* Disable bus master reload */
-			if (new->type != ACPI_STATE_C3 && pr->flags.bm_check)
-				acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0);
-			break;
-		}
-	}
-
-	/* Prepare to use new state. */
-	switch (new->type) {
-	case ACPI_STATE_C3:
-		/* Enable bus master reload */
-		if (old->type != ACPI_STATE_C3 && pr->flags.bm_check)
-			acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1);
-		break;
-	}
-
 	pr->power.state = new;
 
 	return;
@@ -1027,7 +1007,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
 					  " for C3 to be enabled on SMP systems\n"));
 			return;
 		}
-		acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0);
 	}
 
 	/*
author reviewer
#1 lore raw

I've been told that BM_RLD is not a NOP in the PIIX4 - ICH4-M generations; and that those chips follow the 1st description in the ACPI spec, not the second. (I've also submitted a bug against the ACPI spec:-)

So the patch below is no good.
But the old code still isn't quite right.
It seems we should just set BM_RLD at initialization and forget about it rather than monkeying with it at run-time.

cheers,
-Len

Quoted 56 lines · Len Brown

From: Len Brown <[email protected]>

The ACPI specification describes PM1*_CNT_BLK.BM_RLD in two places.

The first description says that the OS needs to set BM_RLD to enable bus master activity to wake the processor from C3.

The second description says that the platform sets BM_RLD to indicate whether it was bus master activity that woke the platform from C3 or not.

The first description is erroneous, the second description is correct. Delete Linux's implementation of the first description.

drivers/acpi/processor_idle.c +0 -21
index f182613..4f004f1 100644
@@ -192,26 +192,6 @@ acpi_processor_power_activate(struct acpi_processor *pr,
 		old->promotion.count = 0;
 	new->demotion.count = 0;
 
-	/* Cleanup from old state. */
-	if (old) {
-		switch (old->type) {
-		case ACPI_STATE_C3:
-			/* Disable bus master reload */
-			if (new->type != ACPI_STATE_C3 && pr->flags.bm_check)
-				acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0);
-			break;
-		}
-	}
-
-	/* Prepare to use new state. */
-	switch (new->type) {
-	case ACPI_STATE_C3:
-		/* Enable bus master reload */
-		if (old->type != ACPI_STATE_C3 && pr->flags.bm_check)
-			acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1);
-		break;
-	}
-
 	pr->power.state = new;
 
 	return;
@@ -1027,7 +1007,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
 					  " for C3 to be enabled on SMP systems\n"));
 			return;
 		}
-		acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0);
 	}
 
 	/*