kgdb.S 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (C) 2000 Murray Jensen <Murray.Jensen@cmst.csiro.au>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <config.h>
  7. #include <command.h>
  8. #include <asm/ppc4xx.h>
  9. #define CONFIG_405GP 1 /* needed for Linux kernel header files */
  10. #include <ppc_asm.tmpl>
  11. #include <ppc_defs.h>
  12. #include <asm/cache.h>
  13. #include <asm/mmu.h>
  14. #if defined(CONFIG_CMD_KGDB)
  15. /*
  16. * cache flushing routines for kgdb
  17. */
  18. .globl kgdb_flush_cache_all
  19. kgdb_flush_cache_all:
  20. /* icache */
  21. iccci r0,r0 /* iccci invalidates the entire I cache */
  22. /* dcache */
  23. addi r6,0,0x0000 /* clear GPR 6 */
  24. addi r7,r0, 128 /* do loop for # of dcache lines */
  25. /* NOTE: dccci invalidates both */
  26. mtctr r7 /* ways in the D cache */
  27. ..dcloop:
  28. dccci 0,r6 /* invalidate line */
  29. addi r6,r6, 32 /* bump to next line */
  30. bdnz ..dcloop
  31. blr
  32. .globl kgdb_flush_cache_range
  33. kgdb_flush_cache_range:
  34. li r5,L1_CACHE_BYTES-1
  35. andc r3,r3,r5
  36. subf r4,r3,r4
  37. add r4,r4,r5
  38. srwi. r4,r4,L1_CACHE_SHIFT
  39. beqlr
  40. mtctr r4
  41. mr r6,r3
  42. 1: dcbst 0,r3
  43. addi r3,r3,L1_CACHE_BYTES
  44. bdnz 1b
  45. sync /* wait for dcbst's to get to ram */
  46. mtctr r4
  47. 2: icbi 0,r6
  48. addi r6,r6,L1_CACHE_BYTES
  49. bdnz 2b
  50. SYNC
  51. blr
  52. #endif