blob: 8d6efb85e0b3421839b7005ab9b0ba15fdd9d0ec [file] [log] [blame]
/*
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _IPQ5018_CDP_H_
#define _IPQ5018_CDP_H_
#include <configs/ipq5018.h>
#include <asm/u-boot.h>
#include <asm/arch-qca-common/qca_common.h>
#include "phy.h"
/*
* Eud register
*/
#define EUD_EUD_EN2 0x0005A000
#define MSM_SDC1_BASE 0x7800000
#define MSM_SDC1_SDHCI_BASE 0x7804000
#define GCC_MDIO0_BASE 0x1858000
#define GCC_GMAC_CFG_RCGR 0x01868084
#define GCC_GMAC_CMD_RCGR 0x01868080
#define GCC_GMAC_BASE 0x01868000
#define GCC_GMAC_CFG_RCGR_SRC_SEL_MASK 0x700
#define GCC_GMAC0_RX_SRC_SEL_GEPHY_TX 0x200
#define GCC_GMAC0_TX_SRC_SEL_GEPHY_TX 0x100
#define GCC_GMAC1_RX_SRC_SEL_UNIPHY_RX 0x100
#define GCC_GMAC1_TX_SRC_SEL_UNIPHY_TX 0x100
#define CMN_PLL_PLL_LOCKED_REG 0x9B064
#define CMN_PLL_PLL_LOCKED_SIZE 0x4
#define CMN_PLL_LOCKED 0x4
/*
* CMN BLK clock
*/
#define GCC_CMN_BLK_AHB_CBCR 0x01856308
#define GCC_CMN_BLK_SYS_CBCR 0x0185630C
#define CMN_BLK_ADDR 0x0009B780
#define CMN_BLK_SIZE 0x100
#define FREQUENCY_MASK 0xfffffdf0
#define INTERNAL_48MHZ_CLOCK 0x7
#define CMN_BLK_PLL_SRC_ADDR 0x0009B028
#define PLL_CTRL_SRC_MASK 0xfffffcff
#define PLL_REFCLK_DIV_MASK 0xfffffe0f
#define PLL_REFCLK_DIV_2 0x20
#define CMN_BLK_PLL_SRC_SEL_FROM_REG 0x0
#define CMN_BLK_PLL_SRC_SEL_FROM_LOGIC 0x1
#define CMN_BLK_PLL_SRC_SEL_FROM_PCS 0x2
#define TCSR_ETH_LDO_RDY_REG 0x19475C4
#define TCSR_ETH_LDO_RDY_SIZE 0x4
#define ETH_LDO_RDY 0x1
/*
* GEPHY Block Register
*/
#define GCC_GEPHY_BCR 0x01856000
#define GCC_GEPHY_MISC 0x01856004
#define GCC_GEPHY_RX_CBCR 0x01856010
#define GCC_GEPHY_TX_CBCR 0x01856014
#define GCC_GEPHY_BCR_BLK_ARES 0x1
#define GCC_GEPHY_MISC_ARES 0xf
/*
* UNIPHY Block Register
*/
#define GCC_UNIPHY_BCR 0x01856100
#define GCC_UNIPHY_AHB_CBCR 0x01856108
#define GCC_UNIPHY_SYS_CBCR 0x0185610C
#define GCC_UNIPHY_BCR_BLK_ARES 0x1
#define GCC_UNIPHY_MISC_ARES 0x32
#define GCC_UNIPHY_RX_CBCR 0x01856110
#define GCC_UNIPHY_TX_CBCR 0x01856114
/* GMAC0 GCC clock */
#define GCC_GMAC0_RX_CMD_RCGR 0x01868020
#define GCC_GMAC0_RX_CFG_RCGR 0x01868024
#define GCC_GMAC0_TX_CMD_RCGR 0x01868028
#define GCC_GMAC0_TX_CFG_RCGR 0x0186802C
#define GCC_GMAC0_RX_MISC 0x01868420
#define GCC_GMAC0_TX_MISC 0x01868424
#define GCC_GMAC0_MISC 0x01868428
#define GCC_GMAC0_BCR 0x01819000
#define GCC_SNOC_GMAC0_AXI_CBCR 0x01826084
#define GCC_SNOC_GMAC0_AHB_CBCR 0x018260A0
#define GCC_GMAC0_PTP_CBCR 0x01868300
#define GCC_GMAC0_CFG_CBCR 0x01868304
#define GCC_GMAC0_SYS_CBCR 0x01868190
#define GCC_GMAC0_RX_CBCR 0x01868240
#define GCC_GMAC0_TX_CBCR 0x01868244
#define GCC_GMAC0_BCR_BLK_ARES 0x1
/* GMAC1 GCC Clock */
#define GCC_GMAC1_RX_CMD_RCGR 0x01868030
#define GCC_GMAC1_RX_CFG_RCGR 0x01868034
#define GCC_GMAC1_TX_CMD_RCGR 0x01868038
#define GCC_GMAC1_TX_CFG_RCGR 0x0186803C
#define GCC_GMAC1_RX_MISC 0x01868430
#define GCC_GMAC1_TX_MISC 0x01868434
#define GCC_GMAC1_MISC 0x01868438
#define GCC_GMAC1_BCR 0x01819100
#define GCC_SNOC_GMAC1_AXI_CBCR 0x01826088
#define GCC_SNOC_GMAC1_AHB_CBCR 0x018260A4
#define GCC_GMAC1_SYS_CBCR 0x01868310
#define GCC_GMAC1_PTP_CBCR 0x01868320
#define GCC_GMAC1_CFG_CBCR 0x01868324
#define GCC_GMAC1_RX_CBCR 0x01868248
#define GCC_GMAC1_TX_CBCR 0x0186824C
#define GCC_GMAC1_BCR_BLK_ARES 0x1
#define GCC_CBCR_CLK_ENABLE 0x1
/*
* GCC-SDCC Registers
*/
#define GCC_SDCC1_BCR 0x01842000
#define GCC_SDCC1_APPS_CMD_RCGR 0x01842004
#define GCC_SDCC1_APPS_CFG_RCGR 0x01842008
#define GCC_SDCC1_APPS_M 0x0184200C
#define GCC_SDCC1_APPS_N 0x01842010
#define GCC_SDCC1_APPS_D 0x01842014
#define GCC_SDCC1_APPS_CBCR 0x01842018
#define GCC_SDCC1_AHB_CBCR 0x0184201C
/*
* GCC-QPIC Registers
*/
#define GCC_QPIC_IO_MACRO_CBCR 0x0185701C
#define GCC_QPIC_CBCR_ADDR 0x01857020
#define GCC_QPIC_AHB_CBCR_ADDR 0x01857024
#define GCC_QPIC_SLEEP_CBCR 0x01857028
#define QPIC_CBCR_VAL 0x80004FF1
#define GCC_QPIC_IO_MACRO_CMD_RCGR 0x01857010
#define GCC_QPIC_IO_MACRO_CFG_RCGR 0x01857014
#define IO_MACRO_CLK_320_MHZ 320000000
#define IO_MACRO_CLK_266_MHZ 266000000
#define IO_MACRO_CLK_228_MHZ 228000000
#define IO_MACRO_CLK_200_MHZ 200000000
#define IO_MACRO_CLK_100_MHZ 100000000
#define IO_MACRO_CLK_24MHZ 24000000
#define QPIC_IO_MACRO_CLK 0
#define QPIC_CORE_CLK 1
#define XO_CLK_SRC 2
#define GPLL0_CLK_SRC 3
#define FB_CLK_BIT (1 << 4)
#define UPDATE_EN 0x1
/* UART 1 */
#define GCC_BLSP1_UART1_BCR 0x01802038
#define GCC_BLSP1_UART1_APPS_CBCR 0x0180203C
#define GCC_BLSP1_UART1_APPS_CMD_RCGR 0x01802044
#define GCC_BLSP1_UART1_APPS_CFG_RCGR 0x01802048
#define GCC_BLSP1_UART1_APPS_M 0x0180204C
#define GCC_BLSP1_UART1_APPS_N 0x01802050
#define GCC_BLSP1_UART1_APPS_D 0x01802054
/* UART 2 */
#define GCC_BLSP1_UART2_BCR 0x01803028
#define GCC_BLSP1_UART2_APPS_CBCR 0x0180302C
#define GCC_BLSP1_UART2_APPS_CMD_RCGR 0x01803034
#define GCC_BLSP1_UART2_APPS_CFG_RCGR 0x01803038
#define GCC_BLSP1_UART2_APPS_M 0x0180303C
#define GCC_BLSP1_UART2_APPS_N 0x01803040
#define GCC_BLSP1_UART2_APPS_D 0x01803044
#define GCC_UART_CFG_RCGR_MODE_MASK 0x3000
#define GCC_UART_CFG_RCGR_SRCSEL_MASK 0x0700
#define GCC_UART_CFG_RCGR_SRCDIV_MASK 0x001F
#define GCC_UART_CFG_RCGR_MODE_SHIFT 12
#define GCC_UART_CFG_RCGR_SRCSEL_SHIFT 8
#define GCC_UART_CFG_RCGR_SRCDIV_SHIFT 0
#define UART1_RCGR_SRC_SEL 0x1
#define UART1_RCGR_SRC_DIV 0x0
#define UART1_RCGR_MODE 0x2
#define UART1_CMD_RCGR_UPDATE 0x1
#define UART1_CMD_RCGR_ROOT_EN 0x2
#define UART1_CBCR_CLK_ENABLE 0x1
/* USB Registers */
#define QSCRATCH_BASE 0x8AF8800
#define QSCRATCH_SS_PHY_CTRL 0x30
#define LANE0_PWR_PRESENT (1 << 24)
#define QSCRATCH_HS_PHY_CTRL 0x10
#define UTMI_OTG_VBUS_VALID (1 << 20)
#define SW_SESSVLD_SEL (1 << 28)
#define GCC_SYS_NOC_USB0_AXI_CBCR 0x1826040
#define TCSR_USB_PCIE_SEL 0x01947540
#define GCC_USB0_MASTER_CBCR 0x183E000
#define GCC_USB0_SLEEP_CBCR 0x183E004
#define GCC_USB0_MOCK_UTMI_CBCR 0x183E008
#define GCC_USB0_MASTER_CMD_RCGR 0x183E00C
#define GCC_USB0_MASTER_CFG_RCGR 0x183E010
#define GCC_USB0_MASTER_M 0x183E014
#define GCC_USB0_MASTER_N 0x183E018
#define GCC_USB0_MASTER_D 0x183E01C
#define GCC_USB0_MOCK_UTMI_CMD_RCGR 0x183E020
#define GCC_USB0_MOCK_UTMI_CFG_RCGR 0x183E024
#define GCC_USB0_MOCK_UTMI_M 0x183E028
#define GCC_USB0_MOCK_UTMI_N 0x183E02C
#define GCC_USB0_MOCK_UTMI_D 0x183E030
#define GCC_USB0_PHY_BCR 0x183E034
#define GCC_USB0_PIPE_CBCR 0x183E040
#define GCC_USB0_AUX_CBCR 0x183E044
#define GCC_USB0_PHY_PIPE_MISC 0x183E048
#define GCC_USB0_EUD_AT_CBCR 0x183E04C
#define GCC_USB0_LFPS_CBCR 0x183E050
#define GCC_USB0_AUX_CMD_RCGR 0x183E05C
#define GCC_USB0_AUX_CFG_RCGR 0x183E060
#define GCC_USB0_BCR 0x183E070
#define GCC_USB0_PHY_CFG_AHB_CBCR 0x183E080
#define GCC_USB0_LFPS_CMD_RCGR 0x183E090
#define GCC_USB0_LFPS_CFG_RCGR 0x183E094
#define GCC_USB0_LFPS_M 0x183E098
#define GCC_USB0_LFPS_N 0x183E09C
#define GCC_USB0_LFPS_D 0x183E0A0
#define GCC_USB_0_BOOT_CLOCK_CTL 0x1840000
#define GCC_QUSB2_0_PHY_BCR 0x1841030
#define USB30_GENERAL_CFG 0x8AF8808
#define USB30_GUCTL 0x8A0C12C
#define USB30_FLADJ 0x8A0C630
#define GUCTL 0x700C12C
#define FLADJ 0x700C630
#define PIPE_UTMI_CLK_SEL 0x1
#define PIPE3_PHYSTATUS_SW (0x1 << 3)
#define PIPE_UTMI_CLK_DIS (0x1 << 8)
#define QUSB2PHY_BASE 0x5b000
#define GCC_USB0_LFPS_CFG_SRC_SEL (0x1 << 8)
#define GCC_USB0_LFPS_CFG_SRC_DIV (0x1f << 0)
#define LFPS_M 0x1
#define LFPS_N 0xfe
#define LFPS_D 0xfd
#define GCC_USB0_LFPS_MODE (0x2 << 12)
#define GCC_USB0_AUX_CFG_MODE_DUAL_EDGE (2 << 12)
#define GCC_USB0_AUX_CFG_SRC_SEL (0 << 8)
#define GCC_USB0_AUX_CFG_SRC_DIV (0x17 << 0)
#define AUX_M 0x0
#define AUX_N 0x0
#define AUX_D 0x0
#define SW_COLLAPSE_ENABLE (1 << 0)
#define SW_OVERRIDE_ENABLE (1 << 2)
#define GCC_USB0_MASTER_CFG_RCGR_SRC_SEL (1 << 8)
#define GCC_USB0_MASTER_CFG_RCGR_SRC_DIV (0x7 << 0)
#define GCC_USB_MOCK_UTMI_SRC_SEL (1 << 8)
#define GCC_USB_MOCK_UTMI_SRC_DIV (0x13 << 0)
#define GCC_USB_MOCK_UTMI_CLK_DIV (0x1 << 16)
#define GCC_QUSB2_1_PHY_BCR 0x1841040
#define USB3PHY_APB_BASE 0x5d000
#define USB3_PHY_POWER_DOWN_CONTROL 0x804
#define QSERDES_COM_SYSCLK_EN_SEL 0xac
#define QSERDES_COM_BIAS_EN_CLKBUFLR_EN 0x34
#define QSERDES_COM_CLK_SELECT 0x174
#define QSERDES_COM_BG_TRIM 0x70
#define QSERDES_RX_UCDR_FASTLOCK_FO_GAIN 0x440
#define QSERDES_COM_SVS_MODE_CLK_SEL 0x19c
#define QSERDES_COM_HSCLK_SEL 0x178
#define QSERDES_COM_CMN_CONFIG 0x194
#define QSERDES_COM_PLL_IVCO 0x048
#define QSERDES_COM_SYS_CLK_CTRL 0x3c
#define QSERDES_COM_DEC_START_MODE0 0xd0
#define QSERDES_COM_DIV_FRAC_START1_MODE0 0xdc
#define QSERDES_COM_DIV_FRAC_START2_MODE0 0xe0
#define QSERDES_COM_DIV_FRAC_START3_MODE0 0xe4
#define QSERDES_COM_CP_CTRL_MODE0 0x78
#define QSERDES_COM_PLL_RCTRL_MODE0 0x84
#define QSERDES_COM_PLL_CCTRL_MODE0 0x90
#define QSERDES_COM_INTEGLOOP_GAIN0_MODE0 0x108
#define QSERDES_COM_LOCK_CMP1_MODE0 0x4c
#define QSERDES_COM_LOCK_CMP2_MODE0 0x50
#define QSERDES_COM_LOCK_CMP3_MODE0 0x54
#define QSERDES_COM_CORE_CLK_EN 0x18c
#define QSERDES_COM_LOCK_CMP_CFG 0xcc
#define QSERDES_COM_VCO_TUNE_MAP 0x128
#define QSERDES_COM_BG_TIMER 0x0c
#define QSERDES_COM_SSC_EN_CENTER 0x10
#define QSERDES_COM_SSC_PER1 0x1c
#define QSERDES_COM_SSC_PER2 0x20
#define QSERDES_COM_SSC_ADJ_PER1 0x14
#define QSERDES_COM_SSC_ADJ_PER2 0x18
#define QSERDES_COM_SSC_STEP_SIZE1 0x24
#define QSERDES_COM_SSC_STEP_SIZE2 0x28
#define QSERDES_RX_UCDR_SO_GAIN 0x410
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2 0x4d8
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3 0x4dc
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4 0x4e0
#define QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL 0x508
#define QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2 0x50c
#define QSERDES_RX_SIGDET_CNTRL 0x514
#define QSERDES_RX_SIGDET_DEGLITCH_CNTRL 0x51c
#define QSERDES_RX_SIGDET_ENABLES 0x510
#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_D 0x268
#define QSERDES_TX_RCV_DETECT_LVL_2 0x2ac
#define QSERDES_TX_LANE_MODE 0x294
#define PCS_TXDEEMPH_M6DB_V0 0x824
#define PCS_TXDEEMPH_M3P5DB_V0 0x828
#define PCS_FLL_CNTRL2 0x8c8
#define PCS_FLL_CNTRL1 0x8c4
#define PCS_FLL_CNT_VAL_L 0x8cc
#define PCS_FLL_CNT_VAL_H_TOL 0x8d0
#define PCS_FLL_MAN_CODE 0x8d4
#define PCS_LOCK_DETECT_CONFIG1 0x880
#define PCS_LOCK_DETECT_CONFIG2 0x884
#define PCS_LOCK_DETECT_CONFIG3 0x888
#define PCS_POWER_STATE_CONFIG2 0x864
#define PCS_RXEQTRAINING_WAIT_TIME 0x8b8
#define PCS_RXEQTRAINING_RUN_TIME 0x8bc
#define PCS_LFPS_TX_ECSTART_EQTLOCK 0x8b0
#define PCS_PWRUP_RESET_DLY_TIME_AUXCLK 0x8a0
#define PCS_TSYNC_RSYNC_TIME 0x88c
#define PCS_RCVR_DTCT_DLY_P1U2_L 0x870
#define PCS_RCVR_DTCT_DLY_P1U2_H 0x874
#define PCS_RCVR_DTCT_DLY_U3_L 0x878
#define PCS_RCVR_DTCT_DLY_U3_H 0x87c
#define PCS_RX_SIGDET_LVL 0x9d8
#define USB3_PCS_TXDEEMPH_M6DB_V0 0x824
#define USB3_PCS_TXDEEMPH_M3P5DB_V0 0x828
#define QSERDES_RX_SIGDET_ENABLES 0x510
#define USB3_PHY_START_CONTROL 0x808
#define USB3_PHY_SW_RESET 0x800
#define CMD_UPDATE 0x1
#define ROOT_EN 0x2
#define CLK_DISABLE 0x0
#define NOC_HANDSHAKE_FSM_EN (1 << 15)
#define set_mdelay_clearbits_le32(addr, value, delay) \
setbits_le32(addr, value); \
mdelay(delay); \
clrbits_le32(addr, value); \
/*
* PCIE Register
*/
#define GCC_SYS_NOC_PCIE0_AXI_CBCR 0x01826048
#define GCC_SYS_NOC_PCIE1_AXI_CBCR 0x0182604C
#define GCC_PCIE_BCR_ENABLE (1 << 0)
#define GCC_PCIE_BLK_ARES (1 << 0)
#define GCC_PCIE_PIPE_ARES (1 << 0)
#define GCC_PCIE_SLEEP_ARES (1 << 1)
#define GCC_PCIE_CORE_STICKY_ARES (1 << 2)
#define GCC_PCIE_AXI_MASTER_ARES (1 << 3)
#define GCC_PCIE_AXI_SLAVE_ARES (1 << 4)
#define GCC_PCIE_AHB_ARES (1 << 5)
#define GCC_PCI_AXI_MASTER_STICKY_ARES (1 << 6)
#define GCC_PCI_AXI_SLAVE_STICKY_ARES (1 << 7)
#define GCC_PCIE0_BOOT_CLOCK_CTL 0x01875000
#define GCC_PCIE0_BCR 0x01875004
#define GCC_PCIE0_AXI_M_CBCR 0x01875008
#define GCC_PCIE0_AXI_S_CBCR 0x0187500C
#define GCC_PCIE0_AHB_CBCR 0x01875010
#define GCC_PCIE0_PHY_PIPE_MISC 0x0187501C
#define GCC_PCIE0_AUX_CBCR 0x01875014
#define GCC_PCIE0_PIPE_CBCR 0x01875018
#define GCC_PCIE0_PHY_PIPE_MISC 0x0187501C
#define GCC_PCIE0_AUX_CMD_RCGR 0x01875020
#define GCC_PCIE0_AUX_CFG_RCGR 0x01875024
#define GCC_PCIE0_PHY_BCR 0x01875038
#define GCC_PCIE0PHY_PHY_BCR 0x0187503C
#define GCC_PCIE0_MISC_RESET 0x01875040
#define GCC_PCIE0_AXI_S_BRIDGE_CBCR 0x01875048
#define GCC_PCIE0_AXI_CMD_RCGR 0x01875050
#define GCC_PCIE0_AXI_CFG_RCGR 0x01875054
#define GCC_PCIE0_LINK_DOWN_BCR 0x018750A8
#define GCC_PCIE0_AUX_CFG_RCGR_SRC_SEL (0 << 8)
#define GCC_PCIE0_AUX_CFG_RCGR_SRC_DIV 0x17
#define GCC_PCIE0_AXI_CFG_RCGR_SRC_SEL (2 << 8)
#define GCC_PCIE0_AXI_CFG_RCGR_SRC_DIV 0x9
#define GCC_PCIE1_BOOT_CLOCK_CTL 0x01876000
#define GCC_PCIE1_BCR 0x01876004
#define GCC_PCIE1_AXI_M_CBCR 0x01876008
#define GCC_PCIE1_AXI_S_CBCR 0x0187600C
#define GCC_PCIE1_AHB_CBCR 0x01876010
#define GCC_PCIE1_AUX_CBCR 0x01876014
#define GCC_PCIE1_PIPE_CBCR 0x01876018
#define GCC_PCIE1_PHY_PIPE_MISC 0x0187601C
#define GCC_PCIE1_AUX_CMD_RCGR 0x01876020
#define GCC_PCIE1_AUX_CFG_RCGR 0x01876024
#define GCC_PCIE1_PHY_BCR 0x01876038
#define GCC_PCIE1PHY_PHY_BCR 0x0187603C
#define GCC_PCIE1_MISC_RESET 0x01876040
#define GCC_PCIE1_LINK_DOWN_BCR 0x01876044
#define GCC_PCIE1_AXI_S_BRIDGE_CBCR 0x01876048
#define GCC_PCIE1_AXI_CMD_RCGR 0x01876050
#define GCC_PCIE1_AXI_CFG_RCGR 0x01876054
#define GCC_PCIE1_AUX_CFG_RCGR_SRC_SEL (0 << 8)
#define GCC_PCIE1_AUX_CFG_RCGR_SRC_DIV 0x17
#define GCC_PCIE1_AXI_CFG_RCGR_SRC_SEL (1 << 8)
#define GCC_PCIE1_AXI_CFG_RCGR_SRC_DIV 0x7
#define PCIE_BCR 0x4
#define PCIE_AXI_M_CBCR 0x8
#define PCIE_AXI_S_CBCR 0xC
#define PCIE_AHB_CBCR 0x10
#define PCIE_AUX_CBCR 0x14
#define PCIE_PIPE_CBCR 0x18
#define PCIE_AUX_CMD_RCGR 0x20
#define PCIE_AUX_CFG_RCGR 0x24
#define PCIE_PHY_BCR 0x38
#define PCIE_PHY_PHY_BCR 0x3c
#define PCIE_MISC_RESET 0x40
#define PCIE_AXI_S_BRIDGE_CBCR 0x48
#define PCIE_AXI_CMD_RCGR 0x50
#define PCIE_AXI_CFG_RCGR 0x54
#define NOT_2D(two_d) (~two_d)
#define NOT_N_MINUS_M(n,m) (~(n - m))
#define CLOCK_UPDATE_TIMEOUT_US 1000
#define KERNEL_AUTH_CMD 0x13
#define SCM_CMD_SEC_AUTH 0x15
#define ARM_PSCI_TZ_FN_BASE 0x84000000
#define ARM_PSCI_TZ_FN(n) (ARM_PSCI_TZ_FN_BASE + (n))
#define ARM_PSCI_TZ_FN_CPU_OFF ARM_PSCI_TZ_FN(2)
#define ARM_PSCI_TZ_FN_CPU_ON ARM_PSCI_TZ_FN(3)
#define ARM_PSCI_TZ_FN_AFFINITY_INFO ARM_PSCI_TZ_FN(4)
#define CLK_ENABLE 0x1
#define SSCG_CTRL_REG_1 0x9c
#define SSCG_CTRL_REG_2 0xa0
#define SSCG_CTRL_REG_3 0xa4
#define SSCG_CTRL_REG_4 0xa8
#define SSCG_CTRL_REG_5 0xac
#define SSCG_CTRL_REG_6 0xb0
#define CDR_CTRL_REG_1 0x80
#define CDR_CTRL_REG_2 0x84
#define CDR_CTRL_REG_3 0x88
#define CDR_CTRL_REG_4 0x8C
#define CDR_CTRL_REG_5 0x90
#define CDR_CTRL_REG_6 0x94
#define CDR_CTRL_REG_7 0x98
#define USB_PHY_CFG0 0x94
#define USB_PHY_UTMI_CTRL5 0x50
#define USB_PHY_FSEL_SEL 0xB8
#define USB_PHY_HS_PHY_CTRL_COMMON0 0x54
#define USB_PHY_REFCLK_CTRL 0xA0
#define USB_PHY_HS_PHY_CTRL2 0x64
#define USB_PHY_UTMI_CTRL0 0x3c
#define UTMI_PHY_OVERRIDE_EN (1 << 1)
#define POR_EN (1 << 1)
#define FREQ_SEL (1 << 0)
#define COMMONONN (1 << 7)
#define FSEL (1 << 4)
#define RETENABLEN (1 << 3)
#define USB2_SUSPEND_N_SEL (1 << 3)
#define USB2_SUSPEND_N (1 << 2)
#define USB2_UTMI_CLK_EN (1 << 1)
#define CLKCORE (1 << 1)
#define ATERESET ~(1 << 0)
unsigned int __invoke_psci_fn_smc(unsigned int, unsigned int,
unsigned int, unsigned int);
#define S17C_MAX_PORT 4
typedef struct {
u32 base;
int unit;
int phy_addr;
int phy_interface_mode;
int phy_napa_gpio;
int phy_8033_gpio;
int phy_type;
u32 mac_pwr;
int ipq_swith;
int phy_external_link;
int switch_port_count;
int switch_port_phy_address[S17C_MAX_PORT];
const char phy_name[MDIO_NAME_LEN];
} ipq_gmac_board_cfg_t;
extern ipq_gmac_board_cfg_t gmac_cfg[];
static inline int gmac_cfg_is_valid(ipq_gmac_board_cfg_t *cfg)
{
/*
* 'cfg' is valid if and only if
* unit number is non-negative and less than CONFIG_IPQ_NO_MACS.
*/
return ((cfg >= &gmac_cfg[0]) &&
(cfg < &gmac_cfg[CONFIG_IPQ_NO_MACS]) &&
(cfg->unit >= 0) && (cfg->unit < CONFIG_IPQ_NO_MACS));
}
extern void ipq_gmac_common_init(ipq_gmac_board_cfg_t *cfg);
extern int ipq_gmac_init(ipq_gmac_board_cfg_t *cfg);
#ifdef CONFIG_PCI_IPQ
void board_pci_init(int id);
#endif
struct smem_ram_ptn {
char name[16];
unsigned long long start;
unsigned long long size;
/* RAM Partition attribute: READ_ONLY, READWRITE etc. */
unsigned attr;
/* RAM Partition category: EBI0, EBI1, IRAM, IMEM */
unsigned category;
/* RAM Partition domain: APPS, MODEM, APPS & MODEM (SHARED) etc. */
unsigned domain;
/* RAM Partition type: system, bootloader, appsboot, apps etc. */
unsigned type;
/* reserved for future expansion without changing version number */
unsigned reserved2, reserved3, reserved4, reserved5;
} __attribute__ ((__packed__));
__weak void aquantia_phy_reset_init_done(void) {}
__weak void aquantia_phy_reset_init(void) {}
__weak void qgic_init(void) {}
__weak void handle_noc_err(void) {}
__weak void board_pcie_clock_init(int id) {}
struct smem_ram_ptable {
#define _SMEM_RAM_PTABLE_MAGIC_1 0x9DA5E0A8
#define _SMEM_RAM_PTABLE_MAGIC_2 0xAF9EC4E2
unsigned magic[2];
unsigned version;
unsigned reserved1;
unsigned len;
unsigned buf;
struct smem_ram_ptn parts[32];
} __attribute__ ((__packed__));
int smem_ram_ptable_init(struct smem_ram_ptable *smem_ram_ptable);
void reset_crashdump(void);
void reset_board(void);
void qpic_clk_enbale(void);
int ipq_get_tz_version(char *version_name, int buf_size);
void ipq_fdt_fixup_socinfo(void *blob);
void qpic_set_clk_rate(unsigned int clk_rate, int blk_type,
int req_clk_src_type);
extern const char *rsvd_node;
extern const char *del_node[];
extern const add_node_t add_fdt_node[];
typedef enum {
SMEM_SPINLOCK_ARRAY = 7,
SMEM_AARM_PARTITION_TABLE = 9,
SMEM_HW_SW_BUILD_ID = 137,
SMEM_USABLE_RAM_PARTITION_TABLE = 402,
SMEM_POWER_ON_STATUS_INFO = 403,
SMEM_MACHID_INFO_LOCATION = 425,
SMEM_IMAGE_VERSION_TABLE = 469,
SMEM_BOOT_FLASH_TYPE = 498,
SMEM_BOOT_FLASH_INDEX = 499,
SMEM_BOOT_FLASH_CHIP_SELECT = 500,
SMEM_BOOT_FLASH_BLOCK_SIZE = 501,
SMEM_BOOT_FLASH_DENSITY = 502,
SMEM_BOOT_DUALPARTINFO = 503,
SMEM_PARTITION_TABLE_OFFSET = 504,
SMEM_SPI_FLASH_ADDR_LEN = 505,
SMEM_FIRST_VALID_TYPE = SMEM_SPINLOCK_ARRAY,
SMEM_LAST_VALID_TYPE = SMEM_SPI_FLASH_ADDR_LEN,
SMEM_MAX_SIZE = SMEM_SPI_FLASH_ADDR_LEN + 1,
} smem_mem_type_t;
#ifdef CONFIG_IPQ_BT_SUPPORT
#define NVM_SEGMENT_SIZE 243
#define TLV_REQ_OPCODE 0xFC00
#define TLV_COMMAND_REQUEST 0x1E
#define DATA_REMAINING_LENGTH 2
#define TLV_RESPONSE_PACKET_SIZE 8
#define TLV_RESPONSE_STATUS_INDEX 6
#define PACKED_STRUCT __attribute__((__packed__))
#define LE_UNALIGNED(x, y) \
{ \
((u8 *)(x))[0] = ((u8)(((u32)(y)) & 0xFF)); \
((u8 *)(x))[1] = ((u8)((((u32)(y)) >> 8) & 0xFF)); \
}
typedef enum
{
ptHCICommandPacket = 0x01, /* Simple HCI Command Packet */
ptHCIACLDataPacket = 0x02, /* HCI ACL Data Packet Type. */
ptHCISCODataPacket = 0x03, /* HCI SCO Data Packet Type. */
ptHCIeSCODataPacket= 0x03, /* HCI eSCO Data Packet Type. */
ptHCIEventPacket = 0x04, /* HCI Event Packet Type. */
ptHCIAdditional = 0x05 /* Starting Point for Additional*/
} HCI_PacketType_t;
typedef struct _tlv_download_req
{
u16 opcode;
u8 parameter_total_length;
u8 command_request;
u8 tlv_segment_length;
u8 tlv_segment_data[0];
} PACKED_STRUCT tlv_download_req;
typedef struct _tagHCI_Packet_t
{
u8 HCIPacketType;
tlv_download_req HCIPayload;
} PACKED_STRUCT HCI_Packet_t;
typedef enum {
BT_WAIT_FOR_START = 0,
BT_WAIT_FOR_TX_COMPLETE = 1,
BT_WAIT_FOR_STOP = 2,
} bt_wait;
#define BT_TIMEOUT_US 500000
int bt_init(void);
#endif
#endif /* _IPQ5018_CDP_H_ */