Hi, I just tried with my local setup, which is same as what you said.
But our NX is still able to be woke up by the host side. Is your NX 100% not able to wake on by the host? I mean cold boot the device and try it 10 times, will it fail to wake up 10 times?
Hi WayneWWW, can your site reproduce it yet, or had you got more information about this issue.
static INT eqos_car_reset(struct eqos_prv_data *pdata)
{
/* one sec timeout */
ULONG retry_cnt = (500 * 1000);
ULONG vy_count = 0;
ULONG dma_bmr;
/* deassert rst line */
if (!IS_ERR_OR_NULL(pdata->eqos_rst)){
dev_err(&pdata->pdev->dev,"deassert rst line ! null");
reset_control_reset(pdata->eqos_rst);
}
else
{
dev_err(&pdata->pdev->dev,"deassert rst line was null");
}
/* add delay of 10 usec */
udelay(10);
while (vy_count < retry_cnt) {
DMA_BMR_RD(dma_bmr); // get address via dma
if (GET_VALUE(dma_bmr, // get value via dma
DMA_BMR_SWR_LPOS, DMA_BMR_SWR_HPOS) == 0) {
return Y_SUCCESS;
}
vy_count++;
udelay(10);
}
return -Y_FAILURE;
}
static int eqos_resume_noirq(struct device *dev){
...
if (device_may_wakeup(&ndev->dev)) {
disable_irq_wake(pdata->phydev->irq);
/* issue CAR reset to device */
ret = hw_if->car_reset(pdata);
if (ret < 0) {
dev_err(&pdata->pdev->dev, "WoL Failed to reset MAC, try again\n");
// return -ENODEV;
ret = hw_if->car_reset(pdata);
if (ret < 0) {
dev_err(&pdata->pdev->dev, "WoL Failed to reset MAC\n");
return -ENODEV; // why not return timeout here?
}
}
eqos_start_dev(pdata);
...
I thought it might be function ‘eqos_car_reset’ return the error, it seems phy reset timeout. but I don’t know why it timeout because I have no document about it, also I don’t know it’s software or hardware cause the issue.