cvmx-fuse.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2020 Marvell International Ltd.
  4. */
  5. #ifndef __CVMX_FUSE_H__
  6. #define __CVMX_FUSE_H__
  7. /**
  8. * Read a byte of fuse data
  9. * @param node node to read from
  10. * @param byte_addr address to read
  11. *
  12. * Return: fuse value: 0 or 1
  13. */
  14. static inline u8 cvmx_fuse_read_byte_node(u8 node, int byte_addr)
  15. {
  16. u64 val;
  17. val = FIELD_PREP(MIO_FUS_RCMD_ADDR, byte_addr) | MIO_FUS_RCMD_PEND;
  18. csr_wr_node(node, CVMX_MIO_FUS_RCMD, val);
  19. do {
  20. val = csr_rd_node(node, CVMX_MIO_FUS_RCMD);
  21. } while (val & MIO_FUS_RCMD_PEND);
  22. return FIELD_GET(MIO_FUS_RCMD_DAT, val);
  23. }
  24. /**
  25. * Read a byte of fuse data
  26. * @param byte_addr address to read
  27. *
  28. * Return: fuse value: 0 or 1
  29. */
  30. static inline u8 cvmx_fuse_read_byte(int byte_addr)
  31. {
  32. return cvmx_fuse_read_byte_node(0, byte_addr);
  33. }
  34. /**
  35. * Read a single fuse bit
  36. *
  37. * @param node Node number
  38. * @param fuse Fuse number (0-1024)
  39. *
  40. * Return: fuse value: 0 or 1
  41. */
  42. static inline int cvmx_fuse_read_node(u8 node, int fuse)
  43. {
  44. return (cvmx_fuse_read_byte_node(node, fuse >> 3) >> (fuse & 0x7)) & 1;
  45. }
  46. /**
  47. * Read a single fuse bit
  48. *
  49. * @param fuse Fuse number (0-1024)
  50. *
  51. * Return: fuse value: 0 or 1
  52. */
  53. static inline int cvmx_fuse_read(int fuse)
  54. {
  55. return cvmx_fuse_read_node(0, fuse);
  56. }
  57. static inline int cvmx_octeon_fuse_locked(void)
  58. {
  59. return cvmx_fuse_read(123);
  60. }
  61. #endif /* __CVMX_FUSE_H__ */