ctrl_pex.h 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) Marvell International Ltd. and its affiliates
  4. */
  5. #ifndef _CTRL_PEX_H
  6. #define _CTRL_PEX_H
  7. #include "high_speed_env_spec.h"
  8. /* Sample at Reset */
  9. #define MPP_SAMPLE_AT_RESET(id) (0xe4200 + (id * 4))
  10. /* PCI Express Control and Status Registers */
  11. #define MAX_PEX_BUSSES 256
  12. #define MISC_REGS_OFFSET 0x18200
  13. #define MV_MISC_REGS_BASE MISC_REGS_OFFSET
  14. #define SOC_CTRL_REG (MV_MISC_REGS_BASE + 0x4)
  15. #define PEX_IF_REGS_OFFSET(if) ((if) > 0 ? \
  16. (0x40000 + ((if) - 1) * 0x4000) : \
  17. 0x80000)
  18. #define PEX_IF_REGS_BASE(if) (PEX_IF_REGS_OFFSET(if))
  19. #define PEX_CAPABILITIES_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x60)
  20. #define PEX_LINK_CTRL_STATUS2_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x90)
  21. #define PEX_CTRL_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x1a00)
  22. #define PEX_STATUS_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x1a04)
  23. #define PEX_DBG_STATUS_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x1a64)
  24. #define PEX_LINK_CAPABILITY_REG 0x6c
  25. #define PEX_LINK_CTRL_STAT_REG 0x70
  26. #define PXSR_PEX_DEV_NUM_OFFS 16 /* Device Number Indication */
  27. #define PXSR_PEX_DEV_NUM_MASK (0x1f << PXSR_PEX_DEV_NUM_OFFS)
  28. #define PXSR_PEX_BUS_NUM_OFFS 8 /* Bus Number Indication */
  29. #define PXSR_PEX_BUS_NUM_MASK (0xff << PXSR_PEX_BUS_NUM_OFFS)
  30. /* PEX_CAPABILITIES_REG fields */
  31. #define PCIE0_ENABLE_OFFS 0
  32. #define PCIE0_ENABLE_MASK (0x1 << PCIE0_ENABLE_OFFS)
  33. #define PCIE1_ENABLE_OFFS 1
  34. #define PCIE1_ENABLE_MASK (0x1 << PCIE1_ENABLE_OFFS)
  35. #define PCIE2_ENABLE_OFFS 2
  36. #define PCIE2_ENABLE_MASK (0x1 << PCIE2_ENABLE_OFFS)
  37. #define PCIE3_ENABLE_OFFS 3
  38. #define PCIE4_ENABLE_MASK (0x1 << PCIE3_ENABLE_OFFS)
  39. /* Controller revision info */
  40. #define PEX_DEVICE_AND_VENDOR_ID 0x000
  41. #define PEX_CFG_DIRECT_ACCESS(if, reg) (PEX_IF_REGS_BASE(if) + (reg))
  42. /* PCI Express Configuration Address Register */
  43. #define PXCAR_REG_NUM_OFFS 2
  44. #define PXCAR_REG_NUM_MAX 0x3f
  45. #define PXCAR_REG_NUM_MASK (PXCAR_REG_NUM_MAX << \
  46. PXCAR_REG_NUM_OFFS)
  47. #define PXCAR_FUNC_NUM_OFFS 8
  48. #define PXCAR_FUNC_NUM_MAX 0x7
  49. #define PXCAR_FUNC_NUM_MASK (PXCAR_FUNC_NUM_MAX << \
  50. PXCAR_FUNC_NUM_OFFS)
  51. #define PXCAR_DEVICE_NUM_OFFS 11
  52. #define PXCAR_DEVICE_NUM_MAX 0x1f
  53. #define PXCAR_DEVICE_NUM_MASK (PXCAR_DEVICE_NUM_MAX << \
  54. PXCAR_DEVICE_NUM_OFFS)
  55. #define PXCAR_BUS_NUM_OFFS 16
  56. #define PXCAR_BUS_NUM_MAX 0xff
  57. #define PXCAR_BUS_NUM_MASK (PXCAR_BUS_NUM_MAX << \
  58. PXCAR_BUS_NUM_OFFS)
  59. #define PXCAR_EXT_REG_NUM_OFFS 24
  60. #define PXCAR_EXT_REG_NUM_MAX 0xf
  61. #define PEX_CFG_ADDR_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x18f8)
  62. #define PEX_CFG_DATA_REG(if) ((PEX_IF_REGS_BASE(if)) + 0x18fc)
  63. #define PXCAR_REAL_EXT_REG_NUM_OFFS 8
  64. #define PXCAR_REAL_EXT_REG_NUM_MASK (0xf << PXCAR_REAL_EXT_REG_NUM_OFFS)
  65. #define PXCAR_CONFIG_EN BIT(31)
  66. #define PEX_STATUS_AND_COMMAND 0x004
  67. #define PXSAC_MABORT BIT(29) /* Recieved Master Abort */
  68. int hws_pex_config(const struct serdes_map *serdes_map, u8 count);
  69. int pex_local_bus_num_set(u32 pex_if, u32 bus_num);
  70. int pex_local_dev_num_set(u32 pex_if, u32 dev_num);
  71. u32 pex_config_read(u32 pex_if, u32 bus, u32 dev, u32 func, u32 reg_off);
  72. void board_pex_config(void);
  73. #endif