blob: 028ea864c5178eabfaccb213e99f6f01059ec09c [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVICES_PCI_LIB_DESIGNWARE_DW_PCIE_HW_H_
#define SRC_DEVICES_PCI_LIB_DESIGNWARE_DW_PCIE_HW_H_
#include <hw/reg.h>
#include <hwreg/bitfields.h>
#include <hwreg/mmio.h>
namespace pcie {
namespace designware {
namespace PortLogic {
constexpr uint32_t Base = 0x700;
constexpr uint32_t DebugR1Offset = Base + 0x2c;
class DebugR1 : public hwreg::RegisterBase<DebugR1, uint32_t> {
public:
DEF_BIT(4, link_up);
DEF_BIT(29, link_in_training);
static auto Get() { return hwreg::RegisterAddr<DebugR1>(DebugR1Offset); }
};
} // namespace PortLogic
#define PORT_LINK_CTRL_OFF (0x710)
#define PLC_VENDOR_SPECIFIC_DLLP_REQ (1 << 0)
#define PLC_SCRAMBLE_DISABLE (1 << 1)
#define PLC_LOOPBACK_ENABLE (1 << 2)
#define PLC_RESET_ASSERT (1 << 3)
#define PLC_DLL_LINK_EN (1 << 5)
#define PLC_LINK_DISABLE (1 << 6)
#define PLC_FAST_LINK_MODE (1 << 7)
#define PLC_LINK_RATE_MASK (0xF << 8)
#define PLC_LINK_CAPABLE_MASK (0x3F << 16)
#define PLC_LINK_CAPABLE_X1 (0x01 << 16)
#define PLC_LINK_CAPABLE_X2 (0x03 << 16)
#define PLC_LINK_CAPABLE_X4 (0x07 << 16)
#define PLC_LINK_CAPABLE_X8 (0x0f << 16)
#define PLC_LINK_CAPABLE_X16 (0x1f << 16)
#define PLC_BEACON_ENABLE (1 << 24)
#define PLC_CORRUPT_LCRC_ENABLE (1 << 25)
#define PLC_EXTENDED_SYNC_H (1 << 26)
#define PLC_TRANSMIT_LANE_REVERSAL_ENABLE (1 << 27)
#define GEN2_CTRL_OFF (0x80C)
#define G2_CTRL_FAST_TRAINING_SEQ_MASK (0xFF << 0)
#define G2_CTRL_NUM_OF_LANES_MASK (0x1F << 8)
#define G2_CTRL_NO_OF_LANES(x) ((x) << 8)
#define G2_CTRL_PRE_DET_LANE_MASK (0x07 << 13)
#define G2_CTRL_AUTO_LANE_FLIP_CTRL_EN (1 << 16)
#define G2_CTRL_DIRECT_SPEED_CHANGE (1 << 17)
#define G2_CTRL_CONFIG_PHY_TX_CHANGE (1 << 18)
#define G2_CTRL_CONFIG_TX_COMP_RX (1 << 19)
#define G2_CTRL_SEL_DEEMPHASIS (1 << 20)
#define G2_CTRL_GEN1_EI_INFERENCE (1 << 21)
#define PCIE_TLP_TYPE_MEM_RW (0x00)
#define PCIE_TLP_TYPE_MEM_RD_LOCKED (0x01)
#define PCIE_TLP_TYPE_IO_RW (0x02)
#define PCIE_TLP_TYPE_CFG0 (0x04)
#define PCIE_TLP_TYPE_CFG1 (0x05)
#define PCIE_ECAM_SIZE (0x1000)
#define PCI_TYPE1_BAR0 (0x10)
#define PCI_TYPE1_BAR1 (0x14)
const uint32_t kAtuRegionCount = (16);
const uint32_t kAtuRegionCtrlEnable = (1 << 31);
const uint32_t kAtuCfgShiftMode = (1 << 28);
const uint32_t kAtuProgramRetries = (5);
const uint32_t kAtuWaitEnableTimeoutUs = (10000);
typedef struct atu_ctrl_regs {
uint32_t region_ctrl1;
uint32_t region_ctrl2;
uint32_t unroll_lower_base;
uint32_t unroll_upper_base;
uint32_t unroll_limit;
uint32_t unroll_lower_target;
uint32_t unroll_upper_target;
} __PACKED atu_ctrl_regs_t;
} // namespace designware
} // namespace pcie
#endif // SRC_DEVICES_PCI_LIB_DESIGNWARE_DW_PCIE_HW_H_