|
@@ -50,6 +50,8 @@
|
|
|
#define USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK 0x80000000 /* option */
|
|
|
#define USB_CTRL_EBRIDGE 0x0c
|
|
|
#define USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK 0x00020000 /* option */
|
|
|
+#define USB_CTRL_OBRIDGE 0x10
|
|
|
+#define USB_CTRL_OBRIDGE_LS_KEEP_ALIVE_MASK 0x08000000
|
|
|
#define USB_CTRL_MDIO 0x14
|
|
|
#define USB_CTRL_MDIO2 0x18
|
|
|
#define USB_CTRL_UTMI_CTL_1 0x2c
|
|
@@ -71,6 +73,7 @@
|
|
|
#define USB_CTRL_USB30_CTL1_USB3_IPP_MASK 0x20000000 /* option */
|
|
|
#define USB_CTRL_USB30_PCTL 0x70
|
|
|
#define USB_CTRL_USB30_PCTL_PHY3_SOFT_RESETB_MASK 0x00000002
|
|
|
+#define USB_CTRL_USB30_PCTL_PHY3_IDDQ_OVERRIDE_MASK 0x00008000
|
|
|
#define USB_CTRL_USB30_PCTL_PHY3_SOFT_RESETB_P1_MASK 0x00020000
|
|
|
#define USB_CTRL_USB_DEVICE_CTL1 0x90
|
|
|
#define USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK 0x00000003 /* option */
|
|
@@ -116,7 +119,6 @@ enum {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_SELECTOR,
|
|
|
USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR,
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_SELECTOR,
|
|
|
USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR,
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_SELECTOR,
|
|
@@ -203,7 +205,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -225,7 +226,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK,
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
|
|
@@ -247,7 +247,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -269,7 +268,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK,
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
|
|
@@ -291,7 +289,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -313,7 +310,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
|
|
0, /* USB_CTRL_SETUP_OC3_DISABLE_MASK */
|
|
|
USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK,
|
|
|
- 0, /* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
|
|
@@ -335,7 +331,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- 0, /* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */
|
|
|
USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -357,7 +352,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
0, /* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK,
|
|
|
- 0, /* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */
|
|
|
0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
|
|
@@ -379,7 +373,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -401,7 +394,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
|
|
|
USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
|
|
|
USB_CTRL_SETUP_OC3_DISABLE_MASK,
|
|
|
0, /* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */
|
|
|
- USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK,
|
|
|
USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
|
|
|
USB_CTRL_USB_PM_USB_PWRDN_MASK,
|
|
@@ -926,6 +918,7 @@ void brcm_usb_init_common(struct brcm_usb_init_params *params)
|
|
|
USB_CTRL_UNSET_FAMILY(params, USB_PM, BDC_SOFT_RESETB);
|
|
|
break;
|
|
|
default:
|
|
|
+ USB_CTRL_UNSET_FAMILY(params, USB_PM, BDC_SOFT_RESETB);
|
|
|
USB_CTRL_SET_FAMILY(params, USB_PM, BDC_SOFT_RESETB);
|
|
|
break;
|
|
|
}
|
|
@@ -952,13 +945,17 @@ void brcm_usb_init_eohci(struct brcm_usb_init_params *params)
|
|
|
* Don't enable this so the memory controller doesn't read
|
|
|
* into memory holes. NOTE: This bit is low true on 7366C0.
|
|
|
*/
|
|
|
- USB_CTRL_SET_FAMILY(params, EBRIDGE, ESTOP_SCB_REQ);
|
|
|
+ USB_CTRL_SET(ctrl, EBRIDGE, ESTOP_SCB_REQ);
|
|
|
|
|
|
/* Setup the endian bits */
|
|
|
reg = brcmusb_readl(USB_CTRL_REG(ctrl, SETUP));
|
|
|
reg &= ~USB_CTRL_SETUP_ENDIAN_BITS;
|
|
|
reg |= USB_CTRL_MASK_FAMILY(params, SETUP, ENDIAN);
|
|
|
brcmusb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
|
|
|
+
|
|
|
+ if (params->selected_family == BRCM_FAMILY_7271A0)
|
|
|
+ /* Enable LS keep alive fix for certain keyboards */
|
|
|
+ USB_CTRL_SET(ctrl, OBRIDGE, LS_KEEP_ALIVE);
|
|
|
}
|
|
|
|
|
|
void brcm_usb_init_xhci(struct brcm_usb_init_params *params)
|
|
@@ -1003,6 +1000,7 @@ void brcm_usb_uninit_eohci(struct brcm_usb_init_params *params)
|
|
|
void brcm_usb_uninit_xhci(struct brcm_usb_init_params *params)
|
|
|
{
|
|
|
brcmusb_xhci_soft_reset(params, 1);
|
|
|
+ USB_CTRL_SET(params->ctrl_regs, USB30_PCTL, PHY3_IDDQ_OVERRIDE);
|
|
|
}
|
|
|
|
|
|
void brcm_usb_set_family_map(struct brcm_usb_init_params *params)
|