[Skiboot] [PATCH v2 4/5] external/opal-prd: Support manufacturing command HTMGT and attribute override
Neelesh Gupta
neelegup at linux.vnet.ibm.com
Tue Aug 25 21:19:28 AEST 2015
Hi Jeremy,
Thanks for the review.
On 08/25/2015 06:43 AM, Jeremy Kerr wrote:
> Hi Neelesh,
>
>
>> diff --git a/external/opal-prd/hostboot-interface.h b/external/opal-prd/hostboot-interface.h
>> index a518f50..7ab928f 100644
>> --- a/external/opal-prd/hostboot-interface.h
>> +++ b/external/opal-prd/hostboot-interface.h
>> @@ -421,6 +421,41 @@ struct runtime_interfaces {
>> */
>> int (*enable_occ_actuation)(bool i_occActivation);
>>
>> + /**
>> + * @brief Apply a set of attribute overrides
>> + *
>> + * @param[in] pointer to binary override data
>> + * @param[in] length of override data (bytes)
>> + * @returns 0 on success, or return code if the command failed
>> + *
>> + * @platform OpenPower
>> + */
>> + int (*apply_attr_override)(uint8_t *i_data, size_t size);
>> +
>> + /**
>> + * @brief Send a pass-through command to HTMGT
>> + *
>> + * @details This is a blocking call that will send a command to
>> + * HTMGT.
>> + *
>> + * @note If o_rspLength is returned with a non-zero value, the
>> + * data at the o_rspData should be dumped to stdout in a
>> + * hex dump format.
>> + * @note The maximum response data returned will be 4096 bytes
>> + *
>> + * @param[in] i_cmdLength number of bytes in pass-thru command data
>> + * @param[in] *i_cmdData pointer to pass-thru command data
>> + * @param[out] *o_rspLength pointer to number of bytes returned in
>> + * o_rspData
>> + * @param[out] *o_rspData pointer to a 4096 byte buffer that will
>> + * contain the response data from the command
>> + *
>> + * @returns 0 on success, or return code if the command failed
>> + * @platform OpenPower
>> + */
>> + int (*htmgt_pass_thru)(uint16_t i_cmdLength, uint8_t *i_cmdData,
>> + uint16_t *o_rspLength, uint8_t *o_rspData);
>> +
>> /* Reserve some space for future growth. */
>> void (*reserved[32])(void);
> Since we don't have interface version changes here, you'll need to
> consume part of this reserved[] array if you add functions to the
> runtime_interfaces struct.
Correct, I should make use of the reserve pool..
>
>> diff --git a/external/opal-prd/opal-prd.c b/external/opal-prd/opal-prd.c
>> index 8f1d6cb..9b9e213 100644
>> --- a/external/opal-prd/opal-prd.c
>> +++ b/external/opal-prd/opal-prd.c
>> @@ -75,6 +75,7 @@ struct opal_prd_ctx {
>> struct pnor pnor;
>> char *hbrt_file_name;
>> bool use_syslog;
>> + bool mfg_mode;
>> void (*vlog)(int, const char *, va_list);
>> };
>>
>> @@ -83,13 +84,20 @@ enum control_msg_type {
>> CONTROL_MSG_DISABLE_OCCS = 0x01,
>> CONTROL_MSG_TEMP_OCC_RESET = 0x02,
>> CONTROL_MSG_TEMP_OCC_ERROR = 0x03,
>> + CONTROL_MSG_ATTR_OVERRIDE = 0x10,
>> + CONTROL_MSG_HTMGT_PASSTHRU = 0x20,
>> };
> Why the gap in numbering here?
I was also not completely sure.. :) .. thought of grouping them using
1st nibble,
in case we add any new commands to a particular group ..
Yes, it can be sequential.. will change it.
>
>>
>> struct control_msg {
>> enum control_msg_type type;
>> - uint64_t response;
>> + int response;
>> + uint32_t argc;
>> + uint32_t data_len;
>> + uint8_t data[];
>> };
>>
>> +#define MAX_CONTROL_MSG_BUF 4096
>> +
>> static struct opal_prd_ctx *ctx;
>>
>> static const char *opal_prd_devnode = "/dev/opal-prd";
>> @@ -179,6 +187,22 @@ static void pr_log_nocall(const char *name)
>> pr_log(LOG_WARNING, "HBRT: Call %s not provided", name);
>> }
>>
>> +static void pr_log_stream(const uint8_t *data, uint32_t len)
> Not sure this function name matches what the function does. How about
> just hexdump() ?
>
>
>
>> + printf("\t%s htmgt-passthru <1st-byte> <2nd byte>..<nth byte>\n",
>> + progname);
>
> Just:
> printf("\t%s htmgt-passthru <bytes...>\n", progname);
>
>
>> + printf("\t%s override <binary-blob>\n", progname);
> and:
>
> printf("\t%s override <FILE>\n", progname);
>
> (binary-blob doesn't tell the user that this is supposed to refer to a file)
>
>> + {"mfg-mode", no_argument, NULL, 'm'},
> You listed --manufacting-mode in the commit header here. I prefer that,
> but either is fine.
>
>
>> @@ -1483,8 +1723,29 @@ int main(int argc, char *argv[])
>> }
>>
>> rc = send_occ_control(ctx, argv[optind + 1]);
>> + break;
>> + case ACTION_ATTR_OVERRIDE:
>> + if (optind + 1 >= argc) {
>> + pr_log(LOG_ERR, "CTRL: attribute override command "
>> + "requires an argument");
>> + return EXIT_FAILURE;
>> + }
>> +
>> + rc = send_attr_override(ctx, argc - optind - 1, &argv[optind + 1]);
>> + break;
>> + case ACTION_HTMGT_PASSTHRU:
>> + if (optind + 1 >= argc) {
>> + pr_log(LOG_ERR, "CTRL: htmgt passthru requires minimum "
>> + "an argument");
> English nitpick: s/minimum an/at least one/
Will also take care of rest of the comment in next revision.
Thanks,
Neelesh.
>
> Cheers,
>
>
> Jeremy
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/skiboot/attachments/20150825/df0249ca/attachment.html>
More information about the Skiboot
mailing list