greybus: interface: avoid I/O to bootrom during removal

Add an interface quirk flag to suppress I/O during interface disable.

This is needed to prevent I/O to the bootrom during controlled
connection tear down (e.g. eject or driver unbind). This will be more
obvious with the new connection tear-down procedure.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2016-05-27 17:26:24 +02:00 committed by Greg Kroah-Hartman
parent a4b08df4e0
commit d9fa3494b7
2 changed files with 7 additions and 2 deletions

View File

@ -221,8 +221,8 @@ static int gb_interface_read_and_clear_init_status(struct gb_interface *intf)
* Check if the interface is executing the quirky ES3 bootrom that,
* for example, requires E2EFC, CSD and CSV to be disabled.
*/
bootrom_quirks = GB_INTERFACE_QUIRK_NO_CPORT_FEATURES;
bootrom_quirks = GB_INTERFACE_QUIRK_NO_CPORT_FEATURES |
GB_INTERFACE_QUIRK_FORCED_DISABLE;
switch (init_status) {
case GB_INIT_BOOTROM_UNIPRO_BOOT_STARTED:
case GB_INIT_BOOTROM_FALLBACK_UNIPRO_BOOT_STARTED:
@ -674,6 +674,10 @@ void gb_interface_disable(struct gb_interface *intf)
trace_gb_interface_disable(intf);
/* Set disconnected flag to avoid I/O during connection tear down. */
if (intf->quirks & GB_INTERFACE_QUIRK_FORCED_DISABLE)
intf->disconnected = true;
list_for_each_entry_safe(bundle, next, &intf->bundles, links)
gb_bundle_destroy(bundle);

View File

@ -13,6 +13,7 @@
#define GB_INTERFACE_QUIRK_NO_CPORT_FEATURES BIT(0)
#define GB_INTERFACE_QUIRK_NO_INIT_STATUS BIT(1)
#define GB_INTERFACE_QUIRK_NO_ARA_IDS BIT(2)
#define GB_INTERFACE_QUIRK_FORCED_DISABLE BIT(3)
struct gb_interface {
struct device dev;