MCU_TYPE_USB
return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB);
return poll_timeout_us(u16 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, cmd),
ocp_write_word(tp, MCU_TYPE_USB, USB_ADV_ADDR, addr);
ocp_write_word(tp, MCU_TYPE_USB, USB_ADV_CMD, cmd);
*data = ocp_read_dword(tp, MCU_TYPE_USB, USB_ADV_DATA);
ocp_write_dword(tp, MCU_TYPE_USB, USB_ADV_DATA, data);
ocp_write_word(tp, MCU_TYPE_USB, USB_ADV_ADDR, addr);
ocp_write_word(tp, MCU_TYPE_USB, USB_ADV_CMD, cmd);
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE);
ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_BMU_RESET, BMU_RESET_EP_IN);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, CDC_ECM_EN);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_BMU_RESET, BMU_RESET_EP_IN);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, CDC_ECM_EN);
ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_UPS_CTRL, POWER_CUT);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_UPS_CTRL, POWER_CUT);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS,
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_LPM_CONFIG,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_LPM_CONFIG,
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_U2P3_CTRL, U2P3_ENABLE);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_U2P3_CTRL, U2P3_ENABLE);
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_MISC_2,
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_MISC_2,
if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_w0w1(tp, MCU_TYPE_USB, USB_MISC_2, BIT(7),
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_MISC_2,
if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_MISC_2,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_UPHY_XTAL,
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_MISC_2,
if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT, PWR_EN);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_POWER_CUT, PWR_EN | PHASE2_EN);
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_MISC_2, BIT(1));
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_POWER_CUT, PWR_EN);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_MISC_2, BIT(1));
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_BMU_RESET,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_BMU_RESET,
if (type == MCU_TYPE_USB) {
ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_GPHY_CTRL,
generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB);
type = MCU_TYPE_USB;
if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) {
ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
!(ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & BYPASS_FLASH)) {
if (ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & GPHY_PATCH_DONE)
ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA,
u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL);
if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER)
ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, FW_FIX_SUSPEND);
if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER)
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, FW_FIX_SUSPEND);
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_USB2PHY,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_USB2PHY,
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, FW_IP_RESET_EN);
ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER,
ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_CTRL, FLOW_CTRL_PATCH_OPT);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, FW_IP_RESET_EN);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_CTRL, FLOW_CTRL_PATCH_2);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, FW_IP_RESET_EN);
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4026840e);
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4001acc9);
ocp_word_test_and_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_UPS_CFG, SAW_CNT_1MS_MASK,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM, RX_AGGR_NUM_MASK);
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_L1_CTRL, 0xf, 0xf);
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_L1_CTRL, 0xf, 0x1);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_SSPHYLINK1, DELAY_PHY_PWR_CHG);
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ACT_ODMA);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_SPEED_OPTION,
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, 0x00600400);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL,
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_SSPHYLINK2,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_USB2PHY,
if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_CSR_DUMMY1,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_CSR_DUMMY1,
if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_CSR_DUMMY1,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_CSR_DUMMY1,
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, EP4_FULL_FC);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_WDT11_CTRL, TIMER11_EN);
ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data);
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_AFE_CTRL2, SEN_VAL_MASK,
ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
ocp_word_w0w1(tp, MCU_TYPE_USB, USB_USB_CTRL, RX_ZERO_EN,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL,
ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL,
ocp_word_set_bits(tp, MCU_TYPE_USB, 0xcbf0, BIT(1));
ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_MISC_2, BIT(7));
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL,
ocp_word_test_and_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
if ((ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG) & MID_REVERSE) &&
ocp_word_test_and_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_word_test_and_clr_bits(tp, MCU_TYPE_USB, USB_MISC_0, PCUT_STATUS);
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
return poll_timeout_us(ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL),
ocp_byte_set_bits(tp, MCU_TYPE_USB, 0xcffe, BIT(3));
ocp_byte_clr_bits(tp, MCU_TYPE_USB, 0xd3ca, BIT(0));
ocp_byte_clr_bits(tp, MCU_TYPE_USB, USB_ECM_OP, EN_ALL_SPEED);
ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_ECM_OPTION, BYPASS_MAC_RESET);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_U2P3_CTRL, RX_DETECT8);
ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, CTRL_TIMER_EN | (600 / 8));
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
ocp_word_set_bits(tp, MCU_TYPE_USB, USB_FW_TASK, FC_PATCH_TASK);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL,
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, RX_AGG_DISABLE | RX_DESC_16B);
ocp_word_clr_bits(tp, MCU_TYPE_USB, USB_USB_CTRL, RX_AGG_DISABLE | RX_ZERO_EN);
ocp_byte_set_bits(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ACT_ODMA);
ocp_byte_clr_bits(tp, MCU_TYPE_USB, 0xd4ae, BIT(1));
ocp_byte_clr_bits(tp, MCU_TYPE_USB, 0xcf04, BIT(0) | BIT(1) | BIT(2) | BIT(7));