diff options
Diffstat (limited to 'drivers/phy/broadcom')
| -rw-r--r-- | drivers/phy/broadcom/phy-brcm-sata.c | 31 | ||||
| -rw-r--r-- | drivers/phy/broadcom/phy-brcm-usb-init.c | 22 | ||||
| -rw-r--r-- | drivers/phy/broadcom/phy-brcm-usb.c | 4 | 
3 files changed, 43 insertions, 14 deletions
| diff --git a/drivers/phy/broadcom/phy-brcm-sata.c b/drivers/phy/broadcom/phy-brcm-sata.c index 3f953db70288..8708ea3b4d6d 100644 --- a/drivers/phy/broadcom/phy-brcm-sata.c +++ b/drivers/phy/broadcom/phy-brcm-sata.c @@ -150,6 +150,9 @@ enum sata_phy_regs {  	TXPMD_TX_FREQ_CTRL_CONTROL2_FMIN_MASK	= 0x3ff,  	TXPMD_TX_FREQ_CTRL_CONTROL3		= 0x84,  	TXPMD_TX_FREQ_CTRL_CONTROL3_FMAX_MASK	= 0x3ff, + +	RXPMD_REG_BANK				= 0x1c0, +	RXPMD_RX_FREQ_MON_CONTROL1		= 0x87,  };  enum sata_phy_ctrl_regs { @@ -505,8 +508,36 @@ static int brcm_sata_phy_init(struct phy *phy)  	return rc;  } +static void brcm_stb_sata_calibrate(struct brcm_sata_port *port) +{ +	void __iomem *base = brcm_sata_pcb_base(port); +	u32 tmp = BIT(8); + +	brcm_sata_phy_wr(base, RXPMD_REG_BANK, RXPMD_RX_FREQ_MON_CONTROL1, +			 ~tmp, tmp); +} + +static int brcm_sata_phy_calibrate(struct phy *phy) +{ +	struct brcm_sata_port *port = phy_get_drvdata(phy); +	int rc = -EOPNOTSUPP; + +	switch (port->phy_priv->version) { +	case BRCM_SATA_PHY_STB_28NM: +	case BRCM_SATA_PHY_STB_40NM: +		brcm_stb_sata_calibrate(port); +		rc = 0; +		break; +	default: +		break; +	} + +	return rc; +} +  static const struct phy_ops phy_ops = {  	.init		= brcm_sata_phy_init, +	.calibrate	= brcm_sata_phy_calibrate,  	.owner		= THIS_MODULE,  }; diff --git a/drivers/phy/broadcom/phy-brcm-usb-init.c b/drivers/phy/broadcom/phy-brcm-usb-init.c index 1e7ce0b6f299..1b7febc43da9 100644 --- a/drivers/phy/broadcom/phy-brcm-usb-init.c +++ b/drivers/phy/broadcom/phy-brcm-usb-init.c @@ -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) diff --git a/drivers/phy/broadcom/phy-brcm-usb.c b/drivers/phy/broadcom/phy-brcm-usb.c index 195b98139e5f..d1dab36fa5b7 100644 --- a/drivers/phy/broadcom/phy-brcm-usb.c +++ b/drivers/phy/broadcom/phy-brcm-usb.c @@ -338,9 +338,9 @@ static int brcm_usb_phy_probe(struct platform_device *pdev)  			      ARRAY_SIZE(brcm_dr_mode_to_name),  			mode, &priv->ini.mode);  	} -	if (of_property_read_bool(dn, "brcm,has_xhci")) +	if (of_property_read_bool(dn, "brcm,has-xhci"))  		priv->has_xhci = true; -	if (of_property_read_bool(dn, "brcm,has_eohci")) +	if (of_property_read_bool(dn, "brcm,has-eohci"))  		priv->has_eohci = true;  	err = brcm_usb_phy_dvr_init(dev, priv, dn); |