core.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Broadcom specific AMBA
  3. * Core ops
  4. *
  5. * Licensed under the GNU/GPL. See COPYING for details.
  6. */
  7. #include "bcma_private.h"
  8. #include <linux/bcma/bcma.h>
  9. bool bcma_core_is_enabled(struct bcma_device *core)
  10. {
  11. if ((bcma_aread32(core, BCMA_IOCTL) & (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC))
  12. != BCMA_IOCTL_CLK)
  13. return false;
  14. if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
  15. return false;
  16. return true;
  17. }
  18. EXPORT_SYMBOL_GPL(bcma_core_is_enabled);
  19. static void bcma_core_disable(struct bcma_device *core, u32 flags)
  20. {
  21. if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
  22. return;
  23. bcma_awrite32(core, BCMA_IOCTL, flags);
  24. bcma_aread32(core, BCMA_IOCTL);
  25. udelay(10);
  26. bcma_awrite32(core, BCMA_RESET_CTL, BCMA_RESET_CTL_RESET);
  27. udelay(1);
  28. }
  29. int bcma_core_enable(struct bcma_device *core, u32 flags)
  30. {
  31. bcma_core_disable(core, flags);
  32. bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC | flags));
  33. bcma_aread32(core, BCMA_IOCTL);
  34. bcma_awrite32(core, BCMA_RESET_CTL, 0);
  35. udelay(1);
  36. bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | flags));
  37. bcma_aread32(core, BCMA_IOCTL);
  38. udelay(1);
  39. return 0;
  40. }
  41. EXPORT_SYMBOL_GPL(bcma_core_enable);