cvmx-boot-vector.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file "COPYING" in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 2003-2017 Cavium, Inc.
  7. */
  8. #ifndef __CVMX_BOOT_VECTOR_H__
  9. #define __CVMX_BOOT_VECTOR_H__
  10. #include <asm/octeon/octeon.h>
  11. /*
  12. * The boot vector table is made up of an array of 1024 elements of
  13. * struct cvmx_boot_vector_element. There is one entry for each
  14. * possible MIPS CPUNum, indexed by the CPUNum.
  15. *
  16. * Once cvmx_boot_vector_get() returns a non-NULL value (indicating
  17. * success), NMI to a core will cause execution to transfer to the
  18. * target_ptr location for that core's entry in the vector table.
  19. *
  20. * The struct cvmx_boot_vector_element fields app0, app1, and app2 can
  21. * be used by the application that has set the target_ptr in any
  22. * application specific manner, they are not touched by the vectoring
  23. * code.
  24. *
  25. * The boot vector code clobbers the CP0_DESAVE register, and on
  26. * OCTEON II and later CPUs also clobbers CP0_KScratch2. All GP
  27. * registers are preserved, except on pre-OCTEON II CPUs, where k1 is
  28. * clobbered.
  29. *
  30. */
  31. /*
  32. * Applications install the boot bus code in cvmx-boot-vector.c, which
  33. * uses this magic:
  34. */
  35. #define OCTEON_BOOT_MOVEABLE_MAGIC1 0xdb00110ad358eacdull
  36. struct cvmx_boot_vector_element {
  37. /* kseg0 or xkphys address of target code. */
  38. uint64_t target_ptr;
  39. /* Three application specific arguments. */
  40. uint64_t app0;
  41. uint64_t app1;
  42. uint64_t app2;
  43. };
  44. struct cvmx_boot_vector_element *cvmx_boot_vector_get(void);
  45. #endif /* __CVMX_BOOT_VECTOR_H__ */