forked from luck/tmp_suning_uos_patched
uwb: i1480: remove MAC/PHY information checking function
Some hardware/firmware combinations (most notably an IOGear HWA using the i1480 firmware) kill the host controller after issuing a GET_MAC_PHY_INFO command. Removing this check seems harmless otherwise. The patch fixes the issue where the HC is killed, showing the message: ehci_hcd 0000:00:1d.7: HC died; cleaning up After this error, USB comes back only after reloading the ehci_hcd module. Signed-off-by: Anderson Lizardo <anderson.lizardo@indt.org.br> Signed-off-by: David Vrabel <david.vrabel@csr.com>
This commit is contained in:
parent
fa21183326
commit
8c7e8cb855
@ -127,98 +127,6 @@ ssize_t i1480_cmd(struct i1480 *i1480, const char *cmd_name, size_t cmd_size,
|
||||
EXPORT_SYMBOL_GPL(i1480_cmd);
|
||||
|
||||
|
||||
/**
|
||||
* Get information about the MAC and PHY
|
||||
*
|
||||
* @wa: Wired adaptor
|
||||
* @neh: Notification/event handler
|
||||
* @reply: Pointer to the reply event buffer
|
||||
* @returns: 0 if ok, < 0 errno code on error.
|
||||
*/
|
||||
static
|
||||
int i1480_cmd_get_mac_phy_info(struct i1480 *i1480)
|
||||
{
|
||||
int result;
|
||||
struct uwb_rccb *cmd = i1480->cmd_buf;
|
||||
struct i1480_evt_confirm_GMPI *reply = i1480->evt_buf;
|
||||
|
||||
cmd->bCommandType = i1480_CET_VS1;
|
||||
cmd->wCommand = cpu_to_le16(i1480_CMD_GET_MAC_PHY_INFO);
|
||||
reply->rceb.bEventType = i1480_CET_VS1;
|
||||
reply->rceb.wEvent = i1480_EVT_GET_MAC_PHY_INFO;
|
||||
result = i1480_cmd(i1480, "GET_MAC_PHY_INFO", sizeof(*cmd),
|
||||
sizeof(*reply));
|
||||
if (result < 0)
|
||||
goto out;
|
||||
if (le16_to_cpu(reply->status) != 0x00) {
|
||||
dev_err(i1480->dev,
|
||||
"GET_MAC_PHY_INFO: command execution failed: %d\n",
|
||||
reply->status);
|
||||
result = -EIO;
|
||||
}
|
||||
out:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get i1480's info and print it
|
||||
*
|
||||
* @wa: Wire Adapter
|
||||
* @neh: Notification/event handler
|
||||
* @returns: 0 if ok, < 0 errno code on error.
|
||||
*/
|
||||
static
|
||||
int i1480_check_info(struct i1480 *i1480)
|
||||
{
|
||||
struct i1480_evt_confirm_GMPI *reply = i1480->evt_buf;
|
||||
int result;
|
||||
unsigned mac_fw_rev;
|
||||
#if i1480_FW <= 0x00000302
|
||||
unsigned phy_fw_rev;
|
||||
#endif
|
||||
if (i1480->quirk_no_check_info) {
|
||||
dev_err(i1480->dev, "firmware info check disabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
result = i1480_cmd_get_mac_phy_info(i1480);
|
||||
if (result < 0) {
|
||||
dev_err(i1480->dev, "Cannot get MAC & PHY information: %d\n",
|
||||
result);
|
||||
goto out;
|
||||
}
|
||||
mac_fw_rev = le16_to_cpu(reply->mac_fw_rev);
|
||||
#if i1480_FW > 0x00000302
|
||||
dev_info(i1480->dev,
|
||||
"HW v%02hx "
|
||||
"MAC FW v%02hx.%02hx caps %04hx "
|
||||
"PHY type %02hx v%02hx caps %02hx %02hx %02hx\n",
|
||||
reply->hw_rev, mac_fw_rev >> 8, mac_fw_rev & 0xff,
|
||||
le16_to_cpu(reply->mac_caps),
|
||||
reply->phy_vendor, reply->phy_rev,
|
||||
reply->phy_caps[0], reply->phy_caps[1], reply->phy_caps[2]);
|
||||
#else
|
||||
phy_fw_rev = le16_to_cpu(reply->phy_fw_rev);
|
||||
dev_info(i1480->dev, "MAC FW v%02hx.%02hx caps %04hx "
|
||||
" PHY FW v%02hx.%02hx caps %04hx\n",
|
||||
mac_fw_rev >> 8, mac_fw_rev & 0xff,
|
||||
le16_to_cpu(reply->mac_caps),
|
||||
phy_fw_rev >> 8, phy_fw_rev & 0xff,
|
||||
le16_to_cpu(reply->phy_caps));
|
||||
#endif
|
||||
dev_dbg(i1480->dev,
|
||||
"key-stores:%hu mcast-addr-stores:%hu sec-modes:%hu\n",
|
||||
(unsigned short) reply->key_stores,
|
||||
le16_to_cpu(reply->mcast_addr_stores),
|
||||
(unsigned short) reply->sec_mode_supported);
|
||||
/* FIXME: complain if fw version too low -- pending for
|
||||
* numbering to stabilize */
|
||||
out:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
int i1480_print_state(struct i1480 *i1480)
|
||||
{
|
||||
@ -264,12 +172,10 @@ int i1480_fw_upload(struct i1480 *i1480)
|
||||
i1480_print_state(i1480);
|
||||
goto error_rc_release;
|
||||
}
|
||||
result = i1480_check_info(i1480);
|
||||
if (result < 0) {
|
||||
dev_warn(i1480->dev, "Warning! Cannot check firmware info: %d\n",
|
||||
result);
|
||||
result = 0;
|
||||
}
|
||||
/*
|
||||
* FIXME: find some reliable way to check whether firmware is running
|
||||
* properly. Maybe use some standard request that has no side effects?
|
||||
*/
|
||||
dev_info(i1480->dev, "firmware uploaded successfully\n");
|
||||
error_rc_release:
|
||||
if (i1480->rc_release)
|
||||
|
@ -56,7 +56,6 @@
|
||||
* request_firmware()
|
||||
* i1480_mpi_write()
|
||||
* i1480->cmd() [i1480_{usb,pci}_cmd()]
|
||||
* i1480_check_info()
|
||||
*
|
||||
* Once the probe function enumerates the device and uploads the
|
||||
* firmware, we just exit with -ENODEV, as we don't really want to
|
||||
@ -130,8 +129,6 @@ struct i1480 {
|
||||
void *evt_buf, *cmd_buf;
|
||||
ssize_t evt_result;
|
||||
struct completion evt_complete;
|
||||
|
||||
u8 quirk_no_check_info:1;
|
||||
};
|
||||
|
||||
static inline
|
||||
|
Loading…
Reference in New Issue
Block a user