system.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * linux/include/asm-arm/arch-iop13xx/system.h
  3. *
  4. * Copyright (C) 2004 Intel Corp.
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #include <asm/arch/iop13xx.h>
  11. static inline void arch_idle(void)
  12. {
  13. cpu_do_idle();
  14. }
  15. /* WDTCR CP6 R7 Page 9 */
  16. static inline u32 read_wdtcr(void)
  17. {
  18. u32 val;
  19. asm volatile("mrc p6, 0, %0, c7, c9, 0":"=r" (val));
  20. return val;
  21. }
  22. static inline void write_wdtcr(u32 val)
  23. {
  24. asm volatile("mcr p6, 0, %0, c7, c9, 0"::"r" (val));
  25. }
  26. /* WDTSR CP6 R8 Page 9 */
  27. static inline u32 read_wdtsr(void)
  28. {
  29. u32 val;
  30. asm volatile("mrc p6, 0, %0, c8, c9, 0":"=r" (val));
  31. return val;
  32. }
  33. static inline void write_wdtsr(u32 val)
  34. {
  35. asm volatile("mcr p6, 0, %0, c8, c9, 0"::"r" (val));
  36. }
  37. #define IOP13XX_WDTCR_EN_ARM 0x1e1e1e1e
  38. #define IOP13XX_WDTCR_EN 0xe1e1e1e1
  39. #define IOP13XX_WDTCR_DIS_ARM 0x1f1f1f1f
  40. #define IOP13XX_WDTCR_DIS 0xf1f1f1f1
  41. #define IOP13XX_WDTSR_WRITE_EN (1 << 31)
  42. #define IOP13XX_WDTCR_IB_RESET (1 << 0)
  43. static inline void arch_reset(char mode)
  44. {
  45. /*
  46. * Reset the internal bus (warning both cores are reset)
  47. */
  48. u32 cp_flags = iop13xx_cp6_save();
  49. write_wdtcr(IOP13XX_WDTCR_EN_ARM);
  50. write_wdtcr(IOP13XX_WDTCR_EN);
  51. write_wdtsr(IOP13XX_WDTSR_WRITE_EN | IOP13XX_WDTCR_IB_RESET);
  52. write_wdtcr(0x1000);
  53. iop13xx_cp6_restore(cp_flags);
  54. for(;;);
  55. }