diff mbox series

[v2] libpdbg/p9chip: use SPWKUP_FSP instead of SPWKUP_OTR

Message ID 20180808120133.32604-1-npiggin@gmail.com
State Accepted
Headers show
Series [v2] libpdbg/p9chip: use SPWKUP_FSP instead of SPWKUP_OTR | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success master/apply_patch Successfully applied
snowpatch_ozlabs/build-multiarch success Test build-multiarch on branch master

Commit Message

Nicholas Piggin Aug. 8, 2018, 12:01 p.m. UTC
Dean Sanner notes that pdbg should not use the OTR special wakeup
register, as it is used by the PM complex (i.e., SGPE, CME, PGPE).
It should use the FSP register instead, which is reserved for service
processor firmware, and nothing else in OpenBMC uses this at the
moment.

In theory when pdbg is used via the host, it should be using the HYP
register via some OPAL arbitration mechanism (OPAL being the owner of
the HYP register), but in the absence of any of that mechanism, FSP
is the best option.

Cc: Dean Sanner <dsanner@us.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 libpdbg/p9chip.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Mahesh J Salgaonkar Aug. 9, 2018, 2:30 p.m. UTC | #1
On 08/08/2018 05:31 PM, Nicholas Piggin wrote:
> Dean Sanner notes that pdbg should not use the OTR special wakeup
> register, as it is used by the PM complex (i.e., SGPE, CME, PGPE).
> It should use the FSP register instead, which is reserved for service
> processor firmware, and nothing else in OpenBMC uses this at the
> moment.
> 
> In theory when pdbg is used via the host, it should be using the HYP
> register via some OPAL arbitration mechanism (OPAL being the owner of
> the HYP register), but in the absence of any of that mechanism, FSP
> is the best option.
> 
> Cc: Dean Sanner <dsanner@us.ibm.com>
> Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>

Looks good to me.

Reviewed-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>

Thanks,
-Mahesh.

> ---
>  libpdbg/p9chip.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/libpdbg/p9chip.c b/libpdbg/p9chip.c
> index c43b0cc..1433d19 100644
> --- a/libpdbg/p9chip.c
> +++ b/libpdbg/p9chip.c
> @@ -71,8 +71,8 @@
>  #define  NET_CTRL0_FENCE_EN 		PPC_BIT(18)
>  #define NET_CTRL0_WOR	0xf0042
>  #define PPM_GPMMR	0xf0100
> -#define PPM_SPWKUP_OTR	0xf010a
> -#define PPM_SSHOTR	0xf0113
> +#define PPM_SPWKUP_FSP	0xf010b
> +#define PPM_SSHFSP	0xf0111
>  #define  SPECIAL_WKUP_DONE PPC_BIT(1)
> 
>  #define RAS_STATUS_TIMEOUT	100 /* 100ms */
> @@ -478,10 +478,10 @@ static int p9_core_probe(struct pdbg_target *target)
>  	if (!(value & NET_CTRL0_CHIPLET_ENABLE))
>  		return -1;
> 
> -	CHECK_ERR(pib_write(target, PPM_SPWKUP_OTR, PPC_BIT(0)));
> +	CHECK_ERR(pib_write(target, PPM_SPWKUP_FSP, PPC_BIT(0)));
>  	do {
>  		usleep(1000);
> -		CHECK_ERR(pib_read(target, PPM_SSHOTR, &value));
> +		CHECK_ERR(pib_read(target, PPM_SSHFSP, &value));
> 
>  		if (i++ > SPECIAL_WKUP_TIMEOUT) {
>  			PR_ERROR("Timeout waiting for special wakeup on %s@0x%08" PRIx64 "\n", target->name,
> @@ -496,7 +496,7 @@ static int p9_core_probe(struct pdbg_target *target)
>  static void p9_core_release(struct pdbg_target *target)
>  {
>  	usleep(1); /* enforce small delay before and after it is cleared */
> -	pib_write(target, PPM_SPWKUP_OTR, 0);
> +	pib_write(target, PPM_SPWKUP_FSP, 0);
>  	usleep(10000);
>  }
>
diff mbox series

Patch

diff --git a/libpdbg/p9chip.c b/libpdbg/p9chip.c
index c43b0cc..1433d19 100644
--- a/libpdbg/p9chip.c
+++ b/libpdbg/p9chip.c
@@ -71,8 +71,8 @@ 
 #define  NET_CTRL0_FENCE_EN 		PPC_BIT(18)
 #define NET_CTRL0_WOR	0xf0042
 #define PPM_GPMMR	0xf0100
-#define PPM_SPWKUP_OTR	0xf010a
-#define PPM_SSHOTR	0xf0113
+#define PPM_SPWKUP_FSP	0xf010b
+#define PPM_SSHFSP	0xf0111
 #define  SPECIAL_WKUP_DONE PPC_BIT(1)
 
 #define RAS_STATUS_TIMEOUT	100 /* 100ms */
@@ -478,10 +478,10 @@  static int p9_core_probe(struct pdbg_target *target)
 	if (!(value & NET_CTRL0_CHIPLET_ENABLE))
 		return -1;
 
-	CHECK_ERR(pib_write(target, PPM_SPWKUP_OTR, PPC_BIT(0)));
+	CHECK_ERR(pib_write(target, PPM_SPWKUP_FSP, PPC_BIT(0)));
 	do {
 		usleep(1000);
-		CHECK_ERR(pib_read(target, PPM_SSHOTR, &value));
+		CHECK_ERR(pib_read(target, PPM_SSHFSP, &value));
 
 		if (i++ > SPECIAL_WKUP_TIMEOUT) {
 			PR_ERROR("Timeout waiting for special wakeup on %s@0x%08" PRIx64 "\n", target->name,
@@ -496,7 +496,7 @@  static int p9_core_probe(struct pdbg_target *target)
 static void p9_core_release(struct pdbg_target *target)
 {
 	usleep(1); /* enforce small delay before and after it is cleared */
-	pib_write(target, PPM_SPWKUP_OTR, 0);
+	pib_write(target, PPM_SPWKUP_FSP, 0);
 	usleep(10000);
 }