162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * USB4 port sideband registers found on routers and retimers 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2020, Intel Corporation 662306a36Sopenharmony_ci * Authors: Mika Westerberg <mika.westerberg@linux.intel.com> 762306a36Sopenharmony_ci * Rajmohan Mani <rajmohan.mani@intel.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef _SB_REGS 1162306a36Sopenharmony_ci#define _SB_REGS 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define USB4_SB_VENDOR_ID 0x00 1462306a36Sopenharmony_ci#define USB4_SB_PRODUCT_ID 0x01 1562306a36Sopenharmony_ci#define USB4_SB_OPCODE 0x08 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cienum usb4_sb_opcode { 1862306a36Sopenharmony_ci USB4_SB_OPCODE_ERR = 0x20525245, /* "ERR " */ 1962306a36Sopenharmony_ci USB4_SB_OPCODE_ONS = 0x444d4321, /* "!CMD" */ 2062306a36Sopenharmony_ci USB4_SB_OPCODE_ROUTER_OFFLINE = 0x4e45534c, /* "LSEN" */ 2162306a36Sopenharmony_ci USB4_SB_OPCODE_ENUMERATE_RETIMERS = 0x4d554e45, /* "ENUM" */ 2262306a36Sopenharmony_ci USB4_SB_OPCODE_SET_INBOUND_SBTX = 0x5055534c, /* "LSUP" */ 2362306a36Sopenharmony_ci USB4_SB_OPCODE_UNSET_INBOUND_SBTX = 0x50555355, /* "USUP" */ 2462306a36Sopenharmony_ci USB4_SB_OPCODE_QUERY_LAST_RETIMER = 0x5453414c, /* "LAST" */ 2562306a36Sopenharmony_ci USB4_SB_OPCODE_GET_NVM_SECTOR_SIZE = 0x53534e47, /* "GNSS" */ 2662306a36Sopenharmony_ci USB4_SB_OPCODE_NVM_SET_OFFSET = 0x53504f42, /* "BOPS" */ 2762306a36Sopenharmony_ci USB4_SB_OPCODE_NVM_BLOCK_WRITE = 0x574b4c42, /* "BLKW" */ 2862306a36Sopenharmony_ci USB4_SB_OPCODE_NVM_AUTH_WRITE = 0x48545541, /* "AUTH" */ 2962306a36Sopenharmony_ci USB4_SB_OPCODE_NVM_READ = 0x52524641, /* "AFRR" */ 3062306a36Sopenharmony_ci USB4_SB_OPCODE_READ_LANE_MARGINING_CAP = 0x50434452, /* "RDCP" */ 3162306a36Sopenharmony_ci USB4_SB_OPCODE_RUN_HW_LANE_MARGINING = 0x474d4852, /* "RHMG" */ 3262306a36Sopenharmony_ci USB4_SB_OPCODE_RUN_SW_LANE_MARGINING = 0x474d5352, /* "RSMG" */ 3362306a36Sopenharmony_ci USB4_SB_OPCODE_READ_SW_MARGIN_ERR = 0x57534452, /* "RDSW" */ 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define USB4_SB_METADATA 0x09 3762306a36Sopenharmony_ci#define USB4_SB_METADATA_NVM_AUTH_WRITE_MASK GENMASK(5, 0) 3862306a36Sopenharmony_ci#define USB4_SB_DATA 0x12 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* USB4_SB_OPCODE_READ_LANE_MARGINING_CAP */ 4162306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_MODES_HW BIT(0) 4262306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_MODES_SW BIT(1) 4362306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_2_LANES BIT(2) 4462306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_INDP_MASK GENMASK(4, 3) 4562306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_INDP_SHIFT 3 4662306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_MIN 0x0 4762306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_HL 0x1 4862306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_BOTH 0x2 4962306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_TIME BIT(5) 5062306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_STEPS_MASK GENMASK(12, 6) 5162306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_VOLTAGE_STEPS_SHIFT 6 5262306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_MAX_VOLTAGE_OFFSET_MASK GENMASK(18, 13) 5362306a36Sopenharmony_ci#define USB4_MARGIN_CAP_0_MAX_VOLTAGE_OFFSET_SHIFT 13 5462306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_DESTR BIT(8) 5562306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_INDP_MASK GENMASK(10, 9) 5662306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_INDP_SHIFT 9 5762306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_MIN 0x0 5862306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_LR 0x1 5962306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_BOTH 0x2 6062306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_STEPS_MASK GENMASK(15, 11) 6162306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_STEPS_SHIFT 11 6262306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_OFFSET_MASK GENMASK(20, 16) 6362306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_TIME_OFFSET_SHIFT 16 6462306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_MIN_BER_MASK GENMASK(25, 21) 6562306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_MIN_BER_SHIFT 21 6662306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_MAX_BER_MASK GENMASK(30, 26) 6762306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_MAX_BER_SHIFT 26 6862306a36Sopenharmony_ci#define USB4_MARGIN_CAP_1_MAX_BER_SHIFT 26 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci/* USB4_SB_OPCODE_RUN_HW_LANE_MARGINING */ 7162306a36Sopenharmony_ci#define USB4_MARGIN_HW_TIME BIT(3) 7262306a36Sopenharmony_ci#define USB4_MARGIN_HW_RH BIT(4) 7362306a36Sopenharmony_ci#define USB4_MARGIN_HW_BER_MASK GENMASK(9, 5) 7462306a36Sopenharmony_ci#define USB4_MARGIN_HW_BER_SHIFT 5 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* Applicable to all margin values */ 7762306a36Sopenharmony_ci#define USB4_MARGIN_HW_RES_1_MARGIN_MASK GENMASK(6, 0) 7862306a36Sopenharmony_ci#define USB4_MARGIN_HW_RES_1_EXCEEDS BIT(7) 7962306a36Sopenharmony_ci/* Different lane margin shifts */ 8062306a36Sopenharmony_ci#define USB4_MARGIN_HW_RES_1_L0_LL_MARGIN_SHIFT 8 8162306a36Sopenharmony_ci#define USB4_MARGIN_HW_RES_1_L1_RH_MARGIN_SHIFT 16 8262306a36Sopenharmony_ci#define USB4_MARGIN_HW_RES_1_L1_LL_MARGIN_SHIFT 24 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* USB4_SB_OPCODE_RUN_SW_LANE_MARGINING */ 8562306a36Sopenharmony_ci#define USB4_MARGIN_SW_TIME BIT(3) 8662306a36Sopenharmony_ci#define USB4_MARGIN_SW_RH BIT(4) 8762306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_MASK GENMASK(14, 13) 8862306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_SHIFT 13 8962306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_NOP 0x0 9062306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_CLEAR 0x1 9162306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_START 0x2 9262306a36Sopenharmony_ci#define USB4_MARGIN_SW_COUNTER_STOP 0x3 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci#endif 95