smi.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Marvell 88E6xxx System Management Interface (SMI) support
  4. *
  5. * Copyright (c) 2008 Marvell Semiconductor
  6. *
  7. * Copyright (c) 2019 Vivien Didelot <[email protected]>
  8. */
  9. #ifndef _MV88E6XXX_SMI_H
  10. #define _MV88E6XXX_SMI_H
  11. #include "chip.h"
  12. /* Offset 0x00: SMI Command Register */
  13. #define MV88E6XXX_SMI_CMD 0x00
  14. #define MV88E6XXX_SMI_CMD_BUSY 0x8000
  15. #define MV88E6XXX_SMI_CMD_MODE_MASK 0x1000
  16. #define MV88E6XXX_SMI_CMD_MODE_45 0x0000
  17. #define MV88E6XXX_SMI_CMD_MODE_22 0x1000
  18. #define MV88E6XXX_SMI_CMD_OP_MASK 0x0c00
  19. #define MV88E6XXX_SMI_CMD_OP_22_WRITE 0x0400
  20. #define MV88E6XXX_SMI_CMD_OP_22_READ 0x0800
  21. #define MV88E6XXX_SMI_CMD_OP_45_WRITE_ADDR 0x0000
  22. #define MV88E6XXX_SMI_CMD_OP_45_WRITE_DATA 0x0400
  23. #define MV88E6XXX_SMI_CMD_OP_45_READ_DATA 0x0800
  24. #define MV88E6XXX_SMI_CMD_OP_45_READ_DATA_INC 0x0c00
  25. #define MV88E6XXX_SMI_CMD_DEV_ADDR_MASK 0x003e
  26. #define MV88E6XXX_SMI_CMD_REG_ADDR_MASK 0x001f
  27. /* Offset 0x01: SMI Data Register */
  28. #define MV88E6XXX_SMI_DATA 0x01
  29. int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip,
  30. struct mii_bus *bus, int sw_addr);
  31. static inline int mv88e6xxx_smi_read(struct mv88e6xxx_chip *chip,
  32. int dev, int reg, u16 *data)
  33. {
  34. if (chip->smi_ops && chip->smi_ops->read)
  35. return chip->smi_ops->read(chip, dev, reg, data);
  36. return -EOPNOTSUPP;
  37. }
  38. static inline int mv88e6xxx_smi_write(struct mv88e6xxx_chip *chip,
  39. int dev, int reg, u16 data)
  40. {
  41. if (chip->smi_ops && chip->smi_ops->write)
  42. return chip->smi_ops->write(chip, dev, reg, data);
  43. return -EOPNOTSUPP;
  44. }
  45. #endif /* _MV88E6XXX_SMI_H */