Search Linux Wireless

Re: [PATCH] bcma: use udelay for short waits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/20/2012 02:52 PM, Hauke Mehrtens wrote:
> On 09/20/2012 08:42 AM, Rafał Miłecki wrote:
>> msleep shouldn't be used for less than 20ms
>>
>> Signed-off-by: Rafał Miłecki <zajec5@xxxxxxxxx>
>> ---
>>  drivers/bcma/driver_pci.c |    6 +++---
>>  1 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/bcma/driver_pci.c b/drivers/bcma/driver_pci.c
>> index c32ebd5..e78e6a8 100644
>> --- a/drivers/bcma/driver_pci.c
>> +++ b/drivers/bcma/driver_pci.c
>> @@ -51,7 +51,7 @@ static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy)
>>  		v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
>>  		if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE)
>>  			break;
>> -		msleep(1);
>> +		udelay(1000);
>>  	}
>>  }
>>  
>> @@ -92,7 +92,7 @@ static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address)
>>  			ret = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_DATA);
>>  			break;
>>  		}
>> -		msleep(1);
>> +		udelay(1000);
>>  	}
>>  	pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0);
>>  	return ret;
>> @@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device,
>>  		v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
>>  		if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE)
>>  			break;
>> -		msleep(1);
>> +		udelay(1000);
>>  	}
>>  	pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0);
>>  }
>>
> 
> Using msleep(1) here is not correct, but I do not know if udelay(1000)
> is better. The BCM4706 SoC or more the kernel code you are using seams
> to have problems with sleeping, at least that is my current assumption.
> when I add an msleep(1) somewhere into the code the exception stops
> there without an exception from the CPU.
> 
> According to Documentation/timers/timers-howto.txt we should use
> usleep_range for values from 10us to 20ms, but that also causes the same
> problem as msleep() on this SoC.
> 
> Hauke

The BCM4706 SoC has problems with the Mips wait instruction and that is
not activated in the Broadcom SDK, but in the OpenWrt kernel. I
deactivated it [0] in my kernel and now the device boots without this
patch for bcma. The patch to deactivate the mips wait instruction can
not be mainlined, like it is now.

Please drop this patch and use usleep_range(), that should work now.

Hauke

[0]:
https://dev.openwrt.org/browser/trunk/target/linux/brcm47xx/patches-3.3/170-fix-74k-cpu.patch?rev=33496
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux