Commit 4c9e2284 authored by Viresh Kumar's avatar Viresh Kumar Committed by Greg Kroah-Hartman

greybus: firmware: Send AP-ready operation

Module's Bootrom needs a way to know (currently), when to start sending
requests to the AP. The version request is sent before connection_init()
routine is called, and if the module sends the request right after
receiving version request, the connection->private field will be NULL.

Fix this TEMPORARILY by sending an AP_READY request.
Reviewed-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 1a886286
...@@ -165,6 +165,7 @@ static int gb_firmware_request_recv(u8 type, struct gb_operation *op) ...@@ -165,6 +165,7 @@ static int gb_firmware_request_recv(u8 type, struct gb_operation *op)
static int gb_firmware_connection_init(struct gb_connection *connection) static int gb_firmware_connection_init(struct gb_connection *connection)
{ {
struct gb_firmware *firmware; struct gb_firmware *firmware;
int ret;
firmware = kzalloc(sizeof(*firmware), GFP_KERNEL); firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
if (!firmware) if (!firmware)
...@@ -173,6 +174,20 @@ static int gb_firmware_connection_init(struct gb_connection *connection) ...@@ -173,6 +174,20 @@ static int gb_firmware_connection_init(struct gb_connection *connection)
firmware->connection = connection; firmware->connection = connection;
connection->private = firmware; connection->private = firmware;
/*
* Module's Bootrom needs a way to know (currently), when to start
* sending requests to the AP. The version request is sent before this
* routine is called, and if the module sends the request right after
* receiving version request, the connection->private field will be
* NULL.
*
* Fix this TEMPORARILY by sending an AP_READY request.
*/
ret = gb_operation_sync(connection, GB_FIRMWARE_TYPE_AP_READY, NULL, 0,
NULL, 0);
if (ret)
dev_err(&connection->dev, "Failed to send AP READY (%d)\n", ret);
return 0; return 0;
} }
......
...@@ -155,6 +155,7 @@ struct gb_control_disconnected_request { ...@@ -155,6 +155,7 @@ struct gb_control_disconnected_request {
#define GB_FIRMWARE_TYPE_FIRMWARE_SIZE 0x02 #define GB_FIRMWARE_TYPE_FIRMWARE_SIZE 0x02
#define GB_FIRMWARE_TYPE_GET_FIRMWARE 0x03 #define GB_FIRMWARE_TYPE_GET_FIRMWARE 0x03
#define GB_FIRMWARE_TYPE_READY_TO_BOOT 0x04 #define GB_FIRMWARE_TYPE_READY_TO_BOOT 0x04
#define GB_FIRMWARE_TYPE_AP_READY 0x05 /* Request with no-payload */
/* Greybus firmware boot stages */ /* Greybus firmware boot stages */
#define GB_FIRMWARE_BOOT_STAGE_ONE 0x01 /* Reserved for the boot ROM */ #define GB_FIRMWARE_BOOT_STAGE_ONE 0x01 /* Reserved for the boot ROM */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment