2012/9/20 Hauke Mehrtens <hauke@xxxxxxxxxx>: > 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. Any suggestion about values? 900, 1100? 1000, 1200? 1000, 1500? -- Rafał -- 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