[Skiboot] [PATCH RFC 12/12] opal-prd: hook up reset_pm_complex

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Fri May 26 02:46:05 AEST 2017


On 05/25/2017 12:35 PM, Jeremy Kerr wrote:
> This change provides the facility to invoke HBRT's reset_pm_complex, in

So is pm_complete replacement to occ_reset?

> the same manner is done with process_occ_reset previously.
>

.../...

>  void hservice_puts(const char *str)
>  {
> @@ -1310,22 +1311,40 @@ static int handle_msg_occ_error(struct opal_prd_ctx *ctx,
>  	return 0;
>  }
>
> +static int pm_complex_reset(uint64_t chip)
> +{
> +	int rc;
> +
> +	if (hservice_runtime->reset_pm_complex(chip)) {

if (hservice_runtime->reset_pm_complex) { ?

> +		pr_debug("PM: calling pm_complex_reset(%ld)", chip);
> +		rc = call_reset_pm_complex(chip);
> +
> +	} else if (hservice_runtime->process_occ_reset) {
> +		pr_debug("PM: calling process_occ_reset(%ld)", chip);
> +		call_process_occ_reset(chip);
> +		rc = 0;
> +
> +	} else {
> +		pr_log_nocall("reset_pm_complex/process_occ_reset");
> +		rc = -1;
> +	}
> +
> +	return rc;
> +}
> +
>  static int handle_msg_occ_reset(struct opal_prd_ctx *ctx,
>  		struct opal_prd_msg *msg)
>  {
>  	uint32_t proc;
> +	int rc;
>
>  	proc = be64toh(msg->occ_reset.chip);
>
>  	pr_debug("FW: firmware requested OCC reset for proc 0x%x", proc);
>
> -	if (!hservice_runtime->process_occ_reset) {
> -		pr_log_nocall("process_occ_reset");
> -		return -1;
> -	}
> +	rc = pm_complex_reset(proc);
>
> -	call_process_occ_reset(proc);
> -	return 0;
> +	return rc;
>  }
>
>  static int handle_msg_firmware_notify(struct opal_prd_ctx *ctx,
> @@ -1482,15 +1501,12 @@ static void handle_prd_control_occ_reset(struct control_msg *send_msg,
>  	if (rc != sizeof(omsg))
>  		pr_log(LOG_WARNING, "FW: Failed to send OCC_RESET message: %m");
>
> -	if (!hservice_runtime->process_occ_reset) {
> -		pr_log_nocall("process_occ_reset");
> -		return;
> -	}
> -
>  	chip = msg->occ_reset.chip;
>
> -	pr_debug("CTRL: calling process_occ_reset(%ld)", chip);
> -	call_process_occ_reset(chip);
> +	/* do reset */
> +	pr_debug("CTRL: resetting PM complex on chip %ld", chip);
> +	pm_complex_reset(chip);
> +
>  	send_msg->data_len = 0;
>  	send_msg->response = 0;
>  }
> @@ -2175,6 +2191,7 @@ static void usage(const char *progname)
>  	printf("\t%s [--debug] [--file <hbrt-image>] [--pnor <device>]\n",
>  			progname);
>  	printf("\t%s occ <enable|disable|reset [chip]>\n", progname);
> +	printf("\t%s pm-complex reset [chip]>\n", progname);
>  	printf("\t%s htmgt-passthru <bytes...>\n", progname);
>  	printf("\t%s override <FILE>\n", progname);
>  	printf("\t%s run [arg 0] [arg 1]..[arg n]\n", progname);
> @@ -2216,7 +2233,7 @@ static int parse_action(const char *str, enum action *action)
>  {
>  	int rc;
>
> -	if (!strcmp(str, "occ")) {
> +	if (!strcmp(str, "occ") || !strcmp(str, "pm-complex")) {

Help says only reset option is supported. But this will enable other options 
like enable, disable.

-Vasant



More information about the Skiboot mailing list