mirror of
https://github.com/patjak/facetimehd.git
synced 2026-04-09 19:10:01 +02:00
bcwc_pcie: Corrections in bcwc_ddr_generic_shmoo_rd_dqs()
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
This commit is contained in:
46
bcwc_ddr.c
46
bcwc_ddr.c
@@ -418,11 +418,11 @@ static int bcwc_ddr_calibrate_re_byte_fifo(struct bcwc_private *dev_priv)
|
||||
|
||||
/* Set default/generic read data strobe */
|
||||
static int bcwc_ddr_generic_shmoo_rd_dqs(struct bcwc_private *dev_priv,
|
||||
u32 *fails)
|
||||
u32 *fail_bits)
|
||||
{
|
||||
u32 retries, locked, reg_val, tmp, offset;
|
||||
u32 retries, setting, tmp, offset;
|
||||
u32 bytes[S2_DDR40_NUM_BYTE_LANES];
|
||||
int i, j, ret;
|
||||
int i, j, ret, fail;
|
||||
|
||||
/* Save the current byte lanes */
|
||||
for (i = 0; i < S2_DDR40_NUM_BYTE_LANES; i++) {
|
||||
@@ -441,40 +441,44 @@ static int bcwc_ddr_generic_shmoo_rd_dqs(struct bcwc_private *dev_priv,
|
||||
}
|
||||
}
|
||||
|
||||
reg_val = (BCWC_S2_REG_READ(S2_DDR40_PHY_DQ_CALIB_STATUS) >> 20) & 0x3f;
|
||||
setting = (BCWC_S2_REG_READ(S2_DDR40_PHY_DQ_CALIB_STATUS) >> 20) & 0x3f;
|
||||
|
||||
locked = 0;
|
||||
retries = 1000;
|
||||
fail = 0;
|
||||
|
||||
while (retries > 0 && !locked) {
|
||||
while (retries-- > 0 && !fail) {
|
||||
ret = bcwc_ddr_verify_mem(dev_priv, 0);
|
||||
if (!ret)
|
||||
break; /* Actually we should retry here */
|
||||
fail_bits[0] = ret;
|
||||
|
||||
fails[0] = ret; /* This is a bit odd */
|
||||
if (ret == 0xffff) {
|
||||
fail = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
retries--;
|
||||
|
||||
reg_val++;
|
||||
tmp = (reg_val & 0x3f) | 0x30100;
|
||||
setting++;
|
||||
tmp = (setting & 63) | 0x30100;
|
||||
|
||||
/* Byte 0 */
|
||||
BCWC_S2_REG_WRITE(tmp, S2_DDR40_2A08);
|
||||
BCWC_S2_REG_WRITE(tmp, S2_DDR40_2A0C);
|
||||
|
||||
/* Byte 1 */
|
||||
BCWC_S2_REG_WRITE(tmp, S2_DDR40_2AA8);
|
||||
BCWC_S2_REG_WRITE(tmp, S2_DDR40_2AAC);
|
||||
|
||||
locked = reg_val > 0x3e;
|
||||
fail = setting > 62;
|
||||
offset = S2_DDR40_RDEN_BYTE0;
|
||||
|
||||
/* Write byte lane settings */
|
||||
for (i = 0; i < 2; i++) {
|
||||
bytes[i]++;
|
||||
|
||||
if (bytes[i] > 62)
|
||||
fail = 1;
|
||||
|
||||
BCWC_S2_REG_WRITE((bytes[i] & 0x3f) | 0x30100, offset);
|
||||
|
||||
if (bytes[i] > 0x3e)
|
||||
locked = 1;
|
||||
|
||||
offset += 0xa0;
|
||||
offset += 160;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -483,8 +487,12 @@ static int bcwc_ddr_generic_shmoo_rd_dqs(struct bcwc_private *dev_priv,
|
||||
ret = -EIO;
|
||||
}
|
||||
|
||||
dev_info(&dev_priv->pdev->dev, "Generic RD DQS succeeded\n");
|
||||
if (fail)
|
||||
dev_info(&dev_priv->pdev->dev, "Generic RD DQS failed\n");
|
||||
else
|
||||
dev_info(&dev_priv->pdev->dev, "Generic RD DQS succeeded\n");
|
||||
|
||||
/* It always fails, so just pass success */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user