blob: c64c8a6c6c62cb4ed2589f5450f0a5d845bcec9c [file] [log] [blame]
Sheetal Tigadoli58a9eca2019-12-18 20:05:09 +05301/*
2 * Copyright (c) 2016 - 2020, Broadcom
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef PAXB_H
8#define PAXB_H
9
10/* total number of PCIe cores */
11#define NUM_OF_SR_PCIE_CORES 8
12#define NUM_OF_NS3Z_PCIE_CORES 1
13
14/*
15 * List of PCIe core and PAXB wrapper memory power registers
16 */
17#define PCIE_CORE_BASE 0x40000800
18#define PCIE_CORE_SOFT_RST_CFG_BASE (PCIE_CORE_BASE + 0x40)
19#define PCIE_CORE_SOFT_RST 0x1
20#define PCIE_CORE_ISO_CFG_BASE (PCIE_CORE_BASE + 0x54)
21#define PCIE_CORE_MEM_ISO 0x2
22#define PCIE_CORE_ISO 0x1
23
24#define PCIE_CORE_MEM_PWR_BASE (PCIE_CORE_BASE + 0x58)
25#define PCIE_PAXB_MEM_PWR_BASE (PCIE_CORE_BASE + 0x5c)
26#define PCIE_CORE_PMI_CFG_BASE (PCIE_CORE_BASE + 0x64)
27#define PCIE_CORE_RESERVED_CFG (PCIE_CORE_BASE + 0x6c)
28#define PCIE_CORE_MEM_PWR_STATUS_BASE (PCIE_CORE_BASE + 0x74)
29#define PCIE_PAXB_MEM_PWR_STATUS_BASE (PCIE_CORE_BASE + 0x78)
30#define PCIE_CORE_PWR_OFFSET 0x100
31
32#define SR_A0_DEVICE_ID 0xd713
33#define SR_B0_DEVICE_ID 0xd714
34/* TODO: Modify device ID once available */
35#define NS3Z_DEVICE_ID 0xd715
36
37/* FIXME: change link speed to GEN3 when it's ready */
38#define GEN1_LINK_SPEED 1
39#define GEN2_LINK_SPEED 2
40#define GEN3_LINK_SPEED 3
41
42typedef struct {
43 uint32_t type;
44 uint32_t device_id;
45 uint32_t pipemux_idx;
46 uint32_t num_cores;
47 int (*pipemux_init)(void);
48 int (*phy_init)(void);
49 int (*core_needs_enable)(unsigned int core_idx);
50 unsigned int (*get_link_width)(unsigned int core_idx);
51 unsigned int (*get_link_speed)(void);
52} paxb_cfg;
53
54enum paxb_type {
55 PAXB_SR,
56 PAXB_NS3Z,
57};
58
59extern const paxb_cfg *paxb;
60
61#ifdef USE_PAXB
62void paxb_init(void);
63void paxb_rc_cfg_write(unsigned int core_idx, unsigned int where,
64 uint32_t val);
65unsigned int paxb_rc_cfg_read(unsigned int core_idx, unsigned int where);
66int pcie_core_needs_enable(unsigned int core_idx);
67const paxb_cfg *paxb_get_sr_config(void);
68#else
69static inline void paxb_init(void)
70{
71}
72#endif
73
74#endif /* PAXB_H */