|
@@ -641,7 +641,8 @@ static int comphy_usb3_power_up(u32 lane, void __iomem *hpipe_base,
|
|
|
}
|
|
|
|
|
|
static int comphy_sata_power_up(u32 lane, void __iomem *hpipe_base,
|
|
|
- void __iomem *comphy_base, int cp_index)
|
|
|
+ void __iomem *comphy_base, int cp_index,
|
|
|
+ u32 invert)
|
|
|
{
|
|
|
u32 mask, data, i, ret = 1;
|
|
|
void __iomem *hpipe_addr = HPIPE_ADDR(hpipe_base, lane);
|
|
@@ -927,6 +928,19 @@ static int comphy_sata_power_up(u32 lane, void __iomem *hpipe_base,
|
|
|
reg_set(hpipe_addr + HPIPE_PWR_CTR_REG,
|
|
|
0x0 << HPIPE_PWR_CTR_RST_DFE_OFFSET,
|
|
|
HPIPE_PWR_CTR_RST_DFE_MASK);
|
|
|
+
|
|
|
+ /* Set RX / TX swaps */
|
|
|
+ data = mask = 0;
|
|
|
+ if (invert & PHY_POLARITY_TXD_INVERT) {
|
|
|
+ data |= (1 << HPIPE_SYNC_PATTERN_TXD_SWAP_OFFSET);
|
|
|
+ mask |= HPIPE_SYNC_PATTERN_TXD_SWAP_MASK;
|
|
|
+ }
|
|
|
+ if (invert & PHY_POLARITY_RXD_INVERT) {
|
|
|
+ data |= (1 << HPIPE_SYNC_PATTERN_RXD_SWAP_OFFSET);
|
|
|
+ mask |= HPIPE_SYNC_PATTERN_RXD_SWAP_MASK;
|
|
|
+ }
|
|
|
+ reg_set(hpipe_addr + HPIPE_SYNC_PATTERN_REG, data, mask);
|
|
|
+
|
|
|
/* SW reset for interupt logic */
|
|
|
reg_set(hpipe_addr + HPIPE_PWR_CTR_REG,
|
|
|
0x1 << HPIPE_PWR_CTR_SFT_RST_OFFSET,
|
|
@@ -2006,7 +2020,8 @@ int comphy_cp110_init(struct chip_serdes_phy_config *ptr_chip_cfg,
|
|
|
case PHY_TYPE_SATA3:
|
|
|
ret = comphy_sata_power_up(
|
|
|
lane, hpipe_base_addr, comphy_base_addr,
|
|
|
- ptr_chip_cfg->cp_index);
|
|
|
+ ptr_chip_cfg->cp_index,
|
|
|
+ serdes_map[lane].invert);
|
|
|
break;
|
|
|
case PHY_TYPE_USB3_HOST0:
|
|
|
case PHY_TYPE_USB3_HOST1:
|