first and last commit
This commit is contained in:
commit
1bf4efd552
2612 files changed
+636500
No files matched your search
@@ -0,0 +1,896 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifdef APCIE_DEBUG_LEVEL
|
||||
#define DEBUG_LEVEL APCIE_DEBUG_LEVEL
|
||||
#endif
|
||||
|
||||
#include <debug.h>
|
||||
#include <arch/arm/arm.h>
|
||||
#include <lib/devicetree.h>
|
||||
#include <drivers/apcie.h>
|
||||
#include <drivers/dart.h>
|
||||
#include <platform.h>
|
||||
#include <platform/apcie.h>
|
||||
#include <platform/apcie_regs.h>
|
||||
#include <platform/gpio.h>
|
||||
#include <platform/gpiodef.h>
|
||||
#include <platform/timer.h>
|
||||
#include <platform/tunables.h>
|
||||
#include <platform/soc/chipid.h>
|
||||
#include <platform/soc/hwclocks.h>
|
||||
#include <platform/soc/hwisr.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <sys.h>
|
||||
#include <sys/menu.h>
|
||||
|
||||
#include SUB_PLATFORM_SPDS_HEADER(apcie_common)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(apcie_phy_glue)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(pma_cmn_registers)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(pma_rx_lane_registers)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(pma_tx_lane_registers)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(x2_pcie_rc)
|
||||
|
||||
#include SUB_PLATFORM_TUNABLE_HEADER(apcie_common)
|
||||
#include SUB_PLATFORM_TUNABLE_HEADER(apcie_config)
|
||||
#include SUB_PLATFORM_TUNABLE_HEADER(x2_pcie_rc)
|
||||
|
||||
#define MAX_DT_PROPERTY_SIZE 4096
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// APCIe common tunables
|
||||
|
||||
#if APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct common_tunables_a0 [] = {
|
||||
PCIE_APCIE_COMMON_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
#else // !APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct common_tunables_a0 [] = {
|
||||
PCIE_APCIE_COMMON_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
// APCIe common NVMe tunables
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct common_nvme_tunables_a0 [] = {
|
||||
PCIE_APCIE_COMMON_NVME_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
// T8010 chip revision table
|
||||
static const struct tunable_chip_struct tunables_nvme_common [] = {
|
||||
{CHIP_REVISION_A0, APCIE_COMMON_BASE_ADDR, common_nvme_tunables_a0 , NULL, false},
|
||||
};
|
||||
|
||||
#endif // APPLICATION_SECUREROM
|
||||
|
||||
// T8010 chip revision table
|
||||
static const struct tunable_chip_struct tunables_pcie_common [] = {
|
||||
{CHIP_REVISION_A0, APCIE_COMMON_BASE_ADDR, common_tunables_a0 , NULL, false},
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// APCIe config tunables
|
||||
|
||||
#if APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct port0_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT0_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port1_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT1_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port2_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT2_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port3_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT3_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
#else // !APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct port0_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT0_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port1_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT1_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port2_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT2_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct port3_config_tunable_a0[] = {
|
||||
PCIE_APCIE_PORT3_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
#endif // !APPLICATION_SECUREROM
|
||||
|
||||
// T8010 chip revision table
|
||||
static const struct tunable_chip_struct tunables_pcie_config_port_0[] = {
|
||||
{CHIP_REVISION_A0, APCIE_PORT_BASE_ADDR(0), port0_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_port_1[] = {
|
||||
{CHIP_REVISION_A0, APCIE_PORT_BASE_ADDR(1), port1_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_port_2[] = {
|
||||
{CHIP_REVISION_A0, APCIE_PORT_BASE_ADDR(2), port2_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_port_3[] = {
|
||||
{CHIP_REVISION_A0, APCIE_PORT_BASE_ADDR(3), port3_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
// T8010 port chip revision table
|
||||
static const struct tunable_chip_array tunables_pcie_config_ports[APCIE_NUM_LINKS] = {
|
||||
{ tunables_pcie_config_port_0, ARRAY_SIZE(tunables_pcie_config_port_0), 0 },
|
||||
{ tunables_pcie_config_port_1, ARRAY_SIZE(tunables_pcie_config_port_1), 0 },
|
||||
{ tunables_pcie_config_port_2, ARRAY_SIZE(tunables_pcie_config_port_2), 0 },
|
||||
{ tunables_pcie_config_port_3, ARRAY_SIZE(tunables_pcie_config_port_3), 0 },
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// PCIe root complex tunables
|
||||
|
||||
#if APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct rc0_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC0_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc1_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC1_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc2_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC2_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc3_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC3_SECURE_ROM_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
#else // !APPLICATION_SECUREROM
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct rc0_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC0_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc1_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC1_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc2_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC2_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
static const struct tunable_struct rc3_config_tunable_a0[] = {
|
||||
PCIE_PCIE_CONFIG_PCIE_RC3_DEFAULT_TUNABLES_T8010_A0
|
||||
};
|
||||
|
||||
#endif // !APPLICATION_SECUREROM
|
||||
|
||||
// T8010 chip revision table
|
||||
static const struct tunable_chip_struct tunables_pcie_config_rc_0[] = {
|
||||
{CHIP_REVISION_A0, PCIE_PORT_BASE_ADDR(0), rc0_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_rc_1[] = {
|
||||
{CHIP_REVISION_A0, PCIE_PORT_BASE_ADDR(1), rc1_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_rc_2[] = {
|
||||
{CHIP_REVISION_A0, PCIE_PORT_BASE_ADDR(2), rc2_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
static const struct tunable_chip_struct tunables_pcie_config_rc_3[] = {
|
||||
{CHIP_REVISION_A0, PCIE_PORT_BASE_ADDR(3), rc3_config_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
// T8010 port chip revision table
|
||||
static const struct tunable_chip_array tunables_pcie_config_rc[APCIE_NUM_LINKS] = {
|
||||
{ tunables_pcie_config_rc_0, ARRAY_SIZE(tunables_pcie_config_rc_0), 0 },
|
||||
{ tunables_pcie_config_rc_1, ARRAY_SIZE(tunables_pcie_config_rc_1), 0 },
|
||||
{ tunables_pcie_config_rc_2, ARRAY_SIZE(tunables_pcie_config_rc_2), 0 },
|
||||
{ tunables_pcie_config_rc_3, ARRAY_SIZE(tunables_pcie_config_rc_3), 0 },
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// PHY tunables
|
||||
|
||||
// T8010 A0
|
||||
static const struct tunable_struct phy_glue_tunable_a0[] = {
|
||||
#ifdef PCIE_APCIE_PHY_GLUE_DEFAULT_TUNABLES_T8010_A0
|
||||
PCIE_APCIE_PHY_GLUE_DEFAULT_TUNABLES_T8010_A0
|
||||
#else
|
||||
// Temporary until tunables are actually defined.
|
||||
TUNABLE_TABLE_END_MARKER
|
||||
#endif
|
||||
};
|
||||
|
||||
const struct tunable_chip_struct tunables_pcie_phy[] = {
|
||||
{CHIP_REVISION_A0, APCIE_PHY_BASE_ADDR, phy_glue_tunable_a0, NULL, false},
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static bool s3e_mode;
|
||||
static bool s3e_reset_on_enable_disable;
|
||||
static uint32_t link_enable_count;
|
||||
|
||||
|
||||
#define SET_REG(reg, value) set_reg(APCIE_COMMON_BASE_ADDR, APCIE_COMMON_BLK_APCIE_ ## reg ## _OFFSET, (value))
|
||||
#define GET_REG(reg) get_reg(APCIE_COMMON_BASE_ADDR, APCIE_COMMON_BLK_APCIE_ ## reg ## _OFFSET)
|
||||
#define OR_REG(reg, value) or_reg(APCIE_COMMON_BASE_ADDR, APCIE_COMMON_BLK_APCIE_ ## reg ## _OFFSET, (value))
|
||||
#define AND_REG(reg, value) and_reg(APCIE_COMMON_BASE_ADDR, APCIE_COMMON_BLK_APCIE_ ## reg ## _OFFSET, (value))
|
||||
|
||||
#define PORT_STRIDE (APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_OFFSET - APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_OFFSET)
|
||||
#define PORT_REG(reg, port) (APCIE_COMMON_BLK_APCIE_ ## reg ## _OFFSET) + (PORT_STRIDE * (port))
|
||||
#define SET_PORT_REG(reg, port, value) set_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port), value)
|
||||
#define GET_PORT_REG(reg, port) get_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port))
|
||||
#define OR_PORT_REG(reg, port, value) or_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port), value)
|
||||
#define AND_PORT_REG(reg, port, value) and_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port), value)
|
||||
|
||||
#define PORT_REG_BIT_SHIFT(reg, bit) (APCIE_COMMON_BLK_APCIE_ ## reg ## _ ## bit ## _SHIFT)
|
||||
#define SET_PORT_REG_BIT(reg, port, b) or_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port), 1 << PORT_REG_BIT_SHIFT(reg, b))
|
||||
#define CLR_PORT_REG_BIT(reg, port, b) and_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port), ~(1 << PORT_REG_BIT_SHIFT(reg, b)))
|
||||
#define GET_PORT_REG_BIT(reg, port, b) ((get_reg(APCIE_COMMON_BASE_ADDR, PORT_REG(reg, port)) >> PORT_REG_BIT_SHIFT(reg, b)) & 1)
|
||||
|
||||
#define SET_APCIE_CONFIG_REG(reg, port, value) set_reg(APCIE_PORT_BASE_ADDR(port), (reg), (value))
|
||||
#define GET_APCIE_CONFIG_REG(reg, port) get_reg(APCIE_PORT_BASE_ADDR(port), (reg))
|
||||
#define OR_APCIE_CONFIG_REG(reg, port, value) or_reg(APCIE_PORT_BASE_ADDR(port), (reg), (value))
|
||||
#define AND_APCIE_CONFIG_REG(reg, port, value) and_reg(APCIE_PORT_BASE_ADDR(port), (reg), (value))
|
||||
|
||||
#define PHY_SET_REG(reg, value) set_reg(APCIE_PHY_BASE_ADDR, APCIE_PHY_GLUE_BLK_ ## reg ## _OFFSET, (value))
|
||||
#define PHY_GET_REG(reg) get_reg(APCIE_PHY_BASE_ADDR, APCIE_PHY_GLUE_BLK_ ## reg ## _OFFSET)
|
||||
#define PHY_OR_REG(reg, value) or_reg(APCIE_PHY_BASE_ADDR, APCIE_PHY_GLUE_BLK_ ## reg ## _OFFSET, (value))
|
||||
#define PHY_AND_REG(reg, value) and_reg(APCIE_PHY_BASE_ADDR, APCIE_PHY_GLUE_BLK_ ## reg ## _OFFSET, (value))
|
||||
|
||||
#define SET_PMA_CMN_REG(reg, value) set_reg(APCIE_PHY_PMA_COMMON_BASE_ADDR, PMA_CMN_REGISTERS_BLK_ ## reg ## _OFFSET, (value))
|
||||
#define GET_PMA_CMN_REG(reg) get_reg(APCIE_PHY_PMA_COMMON_BASE_ADDR, PMA_CMN_REGISTERS_BLK_ ## reg ## _OFFSET)
|
||||
#define OR_PMA_CMN_REG(reg, value) or_reg(APCIE_PHY_PMA_COMMON_BASE_ADDR, PMA_CMN_REGISTERS_BLK_ ## reg ## _OFFSET, (value))
|
||||
#define AND_PMA_CMN_REG(reg, value) and_reg(APCIE_PHY_PMA_COMMON_BASE_ADDR, PMA_CMN_REGISTERS_BLK_ ## reg ## _OFFSET, (value))
|
||||
|
||||
#define PMA_RX_REG(reg, lane) (PMA_RX_LANE_REGISTERS_BLK_ ## reg ## _OFFSET) + (APCIE_PHY_PMA_RX_LANE_STRIDE * (lane))
|
||||
#define SET_PMA_RX_REG(reg, lane, value) set_reg(APCIE_PHY_PMA_RX_LANE_BASE_ADDR, PMA_RX_REG(reg, lane), value)
|
||||
#define GET_PMA_RX_REG(reg, lane) get_reg(APCIE_PHY_PMA_RX_LANE_BASE_ADDR, PMA_RX_REG(reg, lane))
|
||||
#define OR_PMA_RX_REG(reg, lane, value) or_reg(APCIE_PHY_PMA_RX_LANE_BASE_ADDR, PMA_RX_REG(reg, lane), value)
|
||||
#define AND_PMA_RX_REG(reg, lane, value) and_reg(APCIE_PHY_PMA_RX_LANE_BASE_ADDR, PMA_RX_REG(reg, lane), value)
|
||||
|
||||
#define PMA_TX_REG(reg, lane) (PMA_TX_LANE_REGISTERS_BLK_ ## reg ## _OFFSET) + (APCIE_PHY_PMA_TX_LANE_STRIDE * (lane))
|
||||
#define SET_PMA_TX_REG(reg, lane, value) set_reg(APCIE_PHY_PMA_TX_LANE_BASE_ADDR, PMA_TX_REG(reg, lane), value)
|
||||
#define GET_PMA_TX_REG(reg, lane) get_reg(APCIE_PHY_PMA_TX_LANE_BASE_ADDR, PMA_TX_REG(reg, lane))
|
||||
#define OR_PMA_TX_REG(reg, lane, value) or_reg(APCIE_PHY_PMA_TX_LANE_BASE_ADDR, PMA_TX_REG(reg, lane), value)
|
||||
#define AND_PMA_TX_REG(reg, lane, value) and_reg(APCIE_PHY_PMA_TX_LANE_BASE_ADDR, PMA_TX_REG(reg, lane), value)
|
||||
|
||||
|
||||
static void set_reg(uintptr_t base, uint32_t offset, uint32_t value)
|
||||
{
|
||||
dprintf(DEBUG_SPEW, "apcie: set_reg[0x%lx] = 0x%x\n", base + offset, value);
|
||||
*(volatile uint32_t *)(base + offset) = value;
|
||||
}
|
||||
|
||||
static uint32_t get_reg(uintptr_t base, uint32_t offset)
|
||||
{
|
||||
uint32_t value;
|
||||
|
||||
dprintf(DEBUG_SPEW, "acpie: get_reg[0x%lx]", base + offset);
|
||||
value = *(volatile uint32_t *)(base + offset);
|
||||
|
||||
dprintf(DEBUG_SPEW, " = 0x%x\n", value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static void or_reg(uintptr_t base, uint32_t offset, uint32_t value)
|
||||
{
|
||||
uint32_t orig;
|
||||
|
||||
orig = get_reg(base, offset);
|
||||
set_reg(base, offset, orig | value);
|
||||
}
|
||||
|
||||
static void and_reg(uintptr_t base, uint32_t offset, uint32_t value)
|
||||
{
|
||||
uint32_t orig;
|
||||
|
||||
orig = get_reg(base, offset);
|
||||
set_reg(base, offset, orig & value);
|
||||
}
|
||||
|
||||
void apcie_set_s3e_mode(bool reset_on_enable)
|
||||
{
|
||||
s3e_mode = true;
|
||||
s3e_reset_on_enable_disable = reset_on_enable;
|
||||
}
|
||||
|
||||
static void apcie_enable_root_complex(void)
|
||||
{
|
||||
// PCIe Initialization Sequence v1.12.02, section 6.1.2:
|
||||
// 1. Program PCIE PLL parameters from PMGR fuses done in pmgr.c set_pll().
|
||||
|
||||
// 2. Turn on PCIE in PCIE_PS register
|
||||
clock_gate(CLK_PCIE, true);
|
||||
|
||||
// 3. Enable the 24Mhz clock
|
||||
clock_gate(CLK_PCIE_AUX, true);
|
||||
|
||||
// 4. Enable the ref clock
|
||||
clock_gate(CLK_PCIE_REF, true);
|
||||
|
||||
// Apply common tunables.
|
||||
platform_apply_tunables(tunables_pcie_common , ARRAY_SIZE(tunables_pcie_common ), "PCIe common");
|
||||
#if !APPLICATION_SECUREROM
|
||||
platform_apply_tunables(tunables_nvme_common , ARRAY_SIZE(tunables_nvme_common ), "NVMe common");
|
||||
#endif
|
||||
|
||||
// 5. Enable clock auto clock management for the "common" clock domain -- not doing this in iBoot.
|
||||
|
||||
// 6. Enable dynamic clock gating of per-link aux_xlk -- not doing this in iBoot.
|
||||
|
||||
// 7. NAND_SYS_CLK/S3E_RESET_N reset sequence defined in Section 5.5.
|
||||
if (s3e_mode) {
|
||||
|
||||
if (s3e_reset_on_enable_disable) {
|
||||
AND_REG(NANDRST_CTRL, ~APCIE_COMMON_BLK_APCIE_NANDRST_CTRL_NANDRST_UMASK);
|
||||
}
|
||||
|
||||
gpio_configure(GPIO_NAND_SYS_CLK, GPIO_CFG_FUNC0);
|
||||
OR_REG(NANDSYSCLK_CTRL, APCIE_COMMON_BLK_APCIE_NANDSYSCLK_CTRL_NANDSYSCLK_EN_UMASK);
|
||||
// S3e spec requires 32 24 Mhz clock cycles from NANDSYSCLK to reset deassertion.
|
||||
// But, APCIe spec requires we wait 100 microseconds (Cayman PCIe spec section 5.5)
|
||||
spin(100);
|
||||
|
||||
// De-assert S3E_RESET_N if it's already asserted. Except when platform specified
|
||||
// s3e_reset_on_enable_disable (for example, in iBEC), we only de-assert the reset,
|
||||
// and then leave it de-asserted
|
||||
OR_REG(NANDRST_CTRL, APCIE_COMMON_BLK_APCIE_NANDRST_CTRL_NANDRST_UMASK);
|
||||
}
|
||||
|
||||
// 8. Select APCIE lane configuration
|
||||
SET_REG(LANE_CFG, APCIE_COMMON_BLK_APCIE_LANE_CFG_VALID_UMASK | platform_get_apcie_lane_cfg());
|
||||
|
||||
// 9. PCIe Phy is powered up:
|
||||
// APCIE_PHY_POWERUP_STS.powerup_done is set by the HW when Phy power-up sequence is completed
|
||||
while((GET_REG(PHY_POWERUP_STS) & APCIE_COMMON_BLK_APCIE_PHY_POWERUP_STS_POWERUP_DONE_UMASK) == 0)
|
||||
spin(1);
|
||||
|
||||
// 10. Software de-asserts phy_apb_reset_n
|
||||
OR_REG(PHY_CONFIG_RST_CTRL, APCIE_COMMON_BLK_APCIE_PHY_CONFIG_RST_CTRL_PHY_CFG_RST_N_UMASK);
|
||||
|
||||
// Apply SPDS-generated PHY tunable values
|
||||
platform_apply_tunables(tunables_pcie_phy, ARRAY_SIZE(tunables_pcie_phy), "PCIe PHY");
|
||||
|
||||
// 11. Select external REFCLK if desired -- not desired.
|
||||
|
||||
// The following is from Section 6.1.3 PCIe link bring-up sequence, step
|
||||
// 1.a.(iii). When internal REFCLK is selected, SW must ensure that REFCLK
|
||||
// provided by PCIe REFCLK PLL is stable before proceeding to link bring-up
|
||||
while ((GET_REG(PHY_POWERUP_STS) & APCIE_COMMON_BLK_APCIE_PHY_POWERUP_STS_PMGR_REFCLK_GOOD_UMASK) == 0)
|
||||
spin(1);
|
||||
}
|
||||
|
||||
static void apcie_disable_root_complex(void)
|
||||
{
|
||||
if (s3e_reset_on_enable_disable) {
|
||||
AND_REG(NANDRST_CTRL, ~APCIE_COMMON_BLK_APCIE_NANDRST_CTRL_NANDRST_UMASK);
|
||||
}
|
||||
|
||||
clock_set_device_reset(CLK_PCIE, true);
|
||||
|
||||
spin(10);
|
||||
|
||||
// WARNING: DO NOT power off PCIe CLK_PCIE_AUX, CLK_PCIE_REF, and CLK_PCIE
|
||||
// here. The SEP and AES blocks will be unhappy if you do that.
|
||||
// Just turn the clock off but leave the power on.
|
||||
power_on(CLK_PCIE_AUX);
|
||||
power_on(CLK_PCIE_REF);
|
||||
power_on(CLK_PCIE);
|
||||
|
||||
clock_set_device_reset(CLK_PCIE, false);
|
||||
}
|
||||
|
||||
// Implements the enable sequence from APCIe spec section 6.1.3 as it applies to
|
||||
// APCIE_COMMON registers. The portion of the sequence that affects the APCIE_CONFIG
|
||||
// registers is handled in common code
|
||||
static void apcie_enable_link_hardware(uint32_t link)
|
||||
{
|
||||
ASSERT(link < APCIE_NUM_LINKS);
|
||||
|
||||
dprintf(DEBUG_INFO, "apcie: Enabling link %d\n", link);
|
||||
|
||||
// Make sure PERST# starts out as asserted
|
||||
CLR_PORT_REG_BIT(PORT_RST_CTRL_0, link, APCIE_PERST_N);
|
||||
|
||||
// 1(i). 100Mhz REFCLK to the link partners is enabled
|
||||
SET_PORT_REG_BIT(PORT_REFCLK_CTRL_0, link, REFCLK_EN);
|
||||
|
||||
// 1(iii). SW must ensure that REFCLK provided by PCIe REFCLK PLL is stable
|
||||
// before proceeding to the next step
|
||||
while (GET_PORT_REG_BIT(PHY_POWERUP_STS, link, PMGR_REFCLK_GOOD) == 0)
|
||||
spin(10);
|
||||
|
||||
// 2. Configure CLKREQ# GPIO for the target link -- done in the common
|
||||
// code before calling this function
|
||||
|
||||
// 3. Wait until the endpoint asserts CLKREQ# -- done in the common
|
||||
// code before calling this function
|
||||
|
||||
// 4. Update link configuration -- skip this step in SecureROM/iBoot
|
||||
|
||||
// 5. Enable target PCIE link by setting APCIE_PORT_CTRL_{0/1/2/3}.port_en
|
||||
SET_PORT_REG_BIT(PORT_CTRL_0, link, PORT_EN);
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
SET_PORT_REG_BIT(PORT_CTRL_0, link, MUXED_AUXCLK_AUTO_DIS);
|
||||
#endif
|
||||
|
||||
// 6. De-assert PERST# for the target PCIE link.
|
||||
SET_PORT_REG_BIT(PORT_RST_CTRL_0, link, APCIE_PERST_N);
|
||||
while (GET_PORT_REG_BIT(PORT_STS_0, link, PORT_STS) == 0)
|
||||
spin(10);
|
||||
|
||||
// 7. Enable dynamic REFCLK clock gating -- skip this step in SecureROM/iBoot
|
||||
}
|
||||
|
||||
static void apcie_disable_link_hardware(uint32_t link)
|
||||
{
|
||||
ASSERT(link < APCIE_NUM_LINKS);
|
||||
|
||||
CLR_PORT_REG_BIT(PORT_RST_CTRL_0, link, APCIE_PERST_N);
|
||||
CLR_PORT_REG_BIT(PORT_REFCLK_CTRL_0, link, REFCLK_EN);
|
||||
CLR_PORT_REG_BIT(PORT_CTRL_0, link, PORT_EN);
|
||||
|
||||
while (GET_PORT_REG_BIT(PORT_STS_0, link, PORT_STS) != 0)
|
||||
spin(10);
|
||||
}
|
||||
|
||||
bool apcie_enable_link(uint32_t link)
|
||||
{
|
||||
struct apcie_link_config *config = &apcie_link_configs[link];
|
||||
struct apcie_link_status *status = &apcie_link_statuses[link];
|
||||
utime_t start;
|
||||
uint32_t counter_command;
|
||||
uint32_t force_width;
|
||||
uint32_t l1sub_cap;
|
||||
uint16_t link_control2;
|
||||
|
||||
ASSERT(link < APCIE_NUM_LINKS);
|
||||
|
||||
if (status->enabled)
|
||||
return true;
|
||||
|
||||
// Clocks to PCIe don't default to on since it isn't used in POR configurations
|
||||
if (link_enable_count == 0) {
|
||||
apcie_enable_root_complex();
|
||||
}
|
||||
|
||||
// Make sure PERST# starts out as asserted
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_OUT_0);
|
||||
gpio_configure(config->clkreq_gpio, GPIO_CFG_IN);
|
||||
|
||||
// wait for CLKREQ# to be asserted
|
||||
dprintf(DEBUG_INFO, "apcie: waiting for clkreq...");
|
||||
start = system_time();
|
||||
while (gpio_read(config->clkreq_gpio) != 0) {
|
||||
if (time_has_elapsed(start, APCIE_ENABLE_TIMEOUT)) {
|
||||
dprintf(DEBUG_CRITICAL, "apcie: timeout waiting for CLKREQ# on link %u\n", link);
|
||||
goto cleanup;
|
||||
}
|
||||
spin(1);
|
||||
}
|
||||
dprintf(DEBUG_INFO, " done\n");
|
||||
|
||||
gpio_configure(config->clkreq_gpio, GPIO_CFG_FUNC0);
|
||||
|
||||
// Do required initialization in APCIE_COMMON registers
|
||||
apcie_enable_link_hardware(link);
|
||||
|
||||
// Apply root complex config tunables
|
||||
platform_apply_tunables(tunables_pcie_config_rc[link].tunable_chip,
|
||||
tunables_pcie_config_rc[link].num_tunable_chips,
|
||||
"PCIe config");
|
||||
|
||||
// Apply APCIe config port tunables
|
||||
platform_apply_tunables(tunables_pcie_config_ports[link].tunable_chip,
|
||||
tunables_pcie_config_ports[link].num_tunable_chips,
|
||||
"APCIe config");
|
||||
|
||||
// Enable fabric timeout.
|
||||
OR_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_AF_TMOT_CTRL_OFFSET, link, APCIE_CONFIG_BLK_AF_TMOT_CTRL_AF_TMOT_EN_UMASK);
|
||||
|
||||
// PCIe spec requires a 100 microsecond delay from REFCLK starting
|
||||
// to PERST being deasserted
|
||||
spin(100);
|
||||
|
||||
// 5) De-assert PERST# for the target PCIE link.
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_OUT_1);
|
||||
|
||||
// Limit link speed to Gen1
|
||||
apcie_config_read_raw(&link_control2, PCIE_RC_CAP_LINK_CONTROL2_OFFSET(link), sizeof(link_control2));
|
||||
link_control2 &= ~PCIE_RC_CAP_LINK_CONTROL2_PCIE_TARGET_LINK_SPEED_UMASK;
|
||||
link_control2 |= 1;
|
||||
apcie_config_write_raw(&link_control2, PCIE_RC_CAP_LINK_CONTROL2_OFFSET(link), sizeof(link_control2));
|
||||
|
||||
// Limit link width if requested by the platform. If the platform returns 0,
|
||||
// let the hardware autonegotiate the width using its default parameters
|
||||
force_width = platform_get_pcie_link_width(link);
|
||||
if (force_width != 0) {
|
||||
ASSERT(force_width <= 2);
|
||||
|
||||
uint32_t gen2_ctrl;
|
||||
apcie_config_read_raw(&gen2_ctrl, PCIE_RC_PORT_LOGIC_GEN2_CTRL_OFFSET(link), sizeof(gen2_ctrl));
|
||||
gen2_ctrl &= ~PCIE_RC_PORT_LOGIC_GEN2_CTRL_NUM_OF_LANES_UMASK;
|
||||
gen2_ctrl |= (force_width << PCIE_RC_PORT_LOGIC_GEN2_CTRL_NUM_OF_LANES_SHIFT);
|
||||
apcie_config_write_raw(&gen2_ctrl, PCIE_RC_PORT_LOGIC_GEN2_CTRL_OFFSET(link), sizeof(gen2_ctrl));
|
||||
|
||||
uint32_t port_link_ctrl;
|
||||
apcie_config_read_raw(&port_link_ctrl, PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_OFFSET(link), sizeof(port_link_ctrl));
|
||||
port_link_ctrl &= ~PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_LINK_CAPABLE_UMASK;
|
||||
port_link_ctrl |= ((1 << (force_width - 1)) << PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_LINK_CAPABLE_SHIFT);
|
||||
apcie_config_write_raw(&port_link_ctrl, PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_OFFSET(link), sizeof(port_link_ctrl));
|
||||
}
|
||||
|
||||
// Update L1 substate capabilites register to indicate the root complex
|
||||
// has the capability of supporting T_POWER_ON=0us.
|
||||
apcie_config_read_raw(&l1sub_cap, PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_OFFSET(link), sizeof(l1sub_cap));
|
||||
l1sub_cap &= ~PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_PWR_ON_VALUE_SUPPORT_UMASK;
|
||||
l1sub_cap &= ~PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_COMM_MODE_SUPPORT_UMASK;
|
||||
apcie_config_write_raw(&l1sub_cap, PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_OFFSET(link), sizeof(l1sub_cap));
|
||||
|
||||
// Clear the link counters
|
||||
counter_command = get_reg(APCIE_PORT_COUNTER_BASE_ADDR(link), APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_OFFSET);
|
||||
counter_command |= APCIE_COUNTER_CLEAR | APCIE_COUNTER_ENABLE;
|
||||
set_reg(APCIE_PORT_COUNTER_BASE_ADDR(link), APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_OFFSET, counter_command);
|
||||
|
||||
// Disable PHY powergating: <rdar://problem/20630305> H9: PCIe Sequence with Disable PHY power gating and disable txboost
|
||||
uint32_t lane_cfg = platform_get_apcie_lane_cfg();
|
||||
uint32_t phy_sig_mask;
|
||||
|
||||
uint32_t link_widths[][4] = {
|
||||
[APCIE_LANE_CFG_X1_X1_X1_X1] = { 1, 1, 1, 1 },
|
||||
[APCIE_LANE_CFG_X2_X1_X1] = { 2, 0, 1, 1 },
|
||||
[APCIE_LANE_CFG_X1_X1_X2] = { 1, 1, 2, 0 },
|
||||
[APCIE_LANE_CFG_X2_X2] = { 2, 0, 2, 0 },
|
||||
};
|
||||
|
||||
ASSERT(lane_cfg < ARRAY_SIZE(link_widths));
|
||||
ASSERT(link < ARRAY_SIZE(link_widths[0]));
|
||||
|
||||
uint32_t link_width = link_widths[lane_cfg][link];
|
||||
ASSERT(link_width != 0);
|
||||
|
||||
phy_sig_mask = ((1 << link_width) - 1) << link;
|
||||
|
||||
// Wait for the phy lanes to power up.
|
||||
while ((PHY_GET_REG(PCIE_PHY_SIG) & phy_sig_mask) != phy_sig_mask) {
|
||||
spin(10);
|
||||
}
|
||||
|
||||
#if APPLICATION_SECUREROM
|
||||
|
||||
// 6) Always enable DFW adapatation for SecureROM.
|
||||
|
||||
// For each lane...
|
||||
for (uint32_t lane = 0; phy_sig_mask != 0; lane++, phy_sig_mask >>= 1) {
|
||||
// ... if we're enabling this lane ...
|
||||
if (phy_sig_mask & 1) {
|
||||
// ... set DFE adapation to always enabled.
|
||||
OR_PMA_RX_REG(RX_REE_GEN_CTRL_EN, lane, PMA_RX_LANE_REGISTERS_BLK_RX_REE_GEN_CTRL_EN_15_UMASK);
|
||||
OR_PMA_RX_REG(RX_REE_FREE0_CFGD, lane, PMA_RX_LANE_REGISTERS_BLK_RX_REE_FREE0_CFGD_6_UMASK);
|
||||
OR_PMA_TX_REG(XCVR_DIAG_DCYA, lane, PMA_TX_LANE_REGISTERS_BLK_XCVR_DIAG_DCYA_0_UMASK);
|
||||
}
|
||||
}
|
||||
|
||||
#else // !APPLICATION_SECUREROM
|
||||
|
||||
// 5) Disable PCIE PHY common block power gating.
|
||||
|
||||
// Disable PCIE PHY power gating.
|
||||
OR_PMA_CMN_REG(CMN_CDIAG_FUNC_PWR_CTRL, PMA_CMN_REGISTERS_BLK_CMN_CDIAG_FUNC_PWR_CTRL_14_UMASK);
|
||||
OR_PMA_CMN_REG(CMN_CDIAG_XCTRL_PWR_CTRL, PMA_CMN_REGISTERS_BLK_CMN_CDIAG_XCTRL_PWR_CTRL_14_UMASK);
|
||||
|
||||
// Update common PHY PLL timers.
|
||||
uint32_t phy_reg;
|
||||
phy_reg = GET_PMA_CMN_REG(CMN_SSM_PLLPRE_TMR);
|
||||
phy_reg &= ~PMA_CMN_REGISTERS_BLK_CMN_SSM_PLLPRE_TMR_11_0_UMASK;
|
||||
phy_reg |= PMA_CMN_REGISTERS_BLK_CMN_SSM_PLLPRE_TMR_11_0_INSRT(0x64);
|
||||
SET_PMA_CMN_REG(CMN_SSM_PLLPRE_TMR, phy_reg);
|
||||
phy_reg = GET_PMA_CMN_REG(CMN_SSM_PLLLOCK_TMR);
|
||||
phy_reg &= ~PMA_CMN_REGISTERS_BLK_CMN_SSM_PLLLOCK_TMR_11_0_UMASK;
|
||||
phy_reg |= PMA_CMN_REGISTERS_BLK_CMN_SSM_PLLLOCK_TMR_11_0_INSRT(0x19);
|
||||
SET_PMA_CMN_REG(CMN_SSM_PLLLOCK_TMR, phy_reg);
|
||||
|
||||
// For each lane...
|
||||
for (uint32_t lane = 0; phy_sig_mask != 0; lane++, phy_sig_mask >>= 1) {
|
||||
// ... if we're enabling this lane ...
|
||||
if (phy_sig_mask & 1) {
|
||||
// ... disable power gating ...
|
||||
OR_PMA_TX_REG(XCVR_DIAG_FUNC_PWR_CTRL, lane, PMA_TX_LANE_REGISTERS_BLK_XCVR_DIAG_FUNC_PWR_CTRL_14_UMASK);
|
||||
|
||||
// ... and disable transmitter boost ...
|
||||
SET_PMA_TX_REG(TX_DIAG_TX_BOOST, lane, 0);
|
||||
|
||||
// ... and update the lane calibration timer ...
|
||||
phy_reg = GET_PMA_TX_REG(XCVR_PSM_LANECAL_TMR, lane);
|
||||
phy_reg &= ~PMA_TX_LANE_REGISTERS_BLK_XCVR_PSM_LANECAL_TMR_11_0_UMASK;
|
||||
phy_reg |= PMA_TX_LANE_REGISTERS_BLK_XCVR_PSM_LANECAL_TMR_11_0_INSRT(0x600);
|
||||
SET_PMA_TX_REG(XCVR_PSM_LANECAL_TMR, lane, phy_reg);
|
||||
|
||||
// ... and improve SIG DET performance ...
|
||||
SET_PMA_RX_REG(RX_DIAG_SIGDET_TUNE, lane, 0x3105);
|
||||
|
||||
// ... and improve PI stability ...
|
||||
phy_reg = GET_PMA_RX_REG(RX_DIAG_ILL_IQE_TRIM3, lane);
|
||||
phy_reg &= ~PMA_RX_LANE_REGISTERS_BLK_RX_DIAG_ILL_IQE_TRIM3_7_0_UMASK;
|
||||
phy_reg |= PMA_RX_LANE_REGISTERS_BLK_RX_DIAG_ILL_IQE_TRIM3_7_0_INSRT(0x9f);
|
||||
SET_PMA_RX_REG(RX_DIAG_ILL_IQE_TRIM3, lane, phy_reg);
|
||||
|
||||
phy_reg = GET_PMA_RX_REG(RX_DIAG_ILL_IQE_TRIM5, lane);
|
||||
phy_reg &= ~PMA_RX_LANE_REGISTERS_BLK_RX_DIAG_ILL_IQE_TRIM5_7_0_UMASK;
|
||||
phy_reg |= PMA_RX_LANE_REGISTERS_BLK_RX_DIAG_ILL_IQE_TRIM5_7_0_INSRT(0x01);
|
||||
SET_PMA_RX_REG(RX_DIAG_ILL_IQE_TRIM5, lane, phy_reg);
|
||||
|
||||
// ... and improve CDR performace.
|
||||
phy_reg = GET_PMA_RX_REG(RX_CDRLF_CNFG, lane);
|
||||
phy_reg &= ~PMA_RX_LANE_REGISTERS_BLK_RX_CDRLF_CNFG_4_0_UMASK;
|
||||
phy_reg |= PMA_RX_LANE_REGISTERS_BLK_RX_CDRLF_CNFG_4_0_INSRT(0xa);
|
||||
SET_PMA_RX_REG(RX_CDRLF_CNFG, lane, phy_reg);
|
||||
|
||||
// NOTE: Because iBoot always forces links to Gen1 speed,
|
||||
// the steps for non-Gen1 speeds have been omitted.
|
||||
}
|
||||
}
|
||||
#endif // APPLICATION_SECUREROM
|
||||
|
||||
// 7) Software sets LINKCFG.ltssm_en to start link training
|
||||
OR_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_LINKCFG_OFFSET, link, APCIE_CONFIG_BLK_LINKCFG_LTSSM_EN_UMASK);
|
||||
|
||||
start = system_time();
|
||||
while ((GET_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_LINKSTS_OFFSET, link) & APCIE_CONFIG_BLK_LINKSTS_LINK_STATUS_UMASK) == 0) {
|
||||
if (time_has_elapsed(start, APCIE_ENABLE_TIMEOUT)) {
|
||||
uint32_t linksts = GET_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_LINKSTS_OFFSET, link);
|
||||
dprintf(DEBUG_CRITICAL, "apcie: Timeout waiting for LinkUp on link %u\n", link);
|
||||
dprintf(DEBUG_CRITICAL, "apcie: LINKSTS 0x%08x (LTSSM state %d)\n",
|
||||
linksts, APCIE_CONFIG_BLK_LINKSTS_LTSSM_STATE_XTRCT(linksts));
|
||||
goto cleanup;
|
||||
}
|
||||
spin(10);
|
||||
}
|
||||
|
||||
status->enabled = true;
|
||||
link_enable_count++;
|
||||
|
||||
dart_init(config->dart_id);
|
||||
|
||||
apcie_setup_root_port_bridge(link, config);
|
||||
|
||||
return true;
|
||||
|
||||
cleanup:
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_OUT_0);
|
||||
spin(10);
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_DFLT);
|
||||
gpio_configure(config->clkreq_gpio, GPIO_CFG_DFLT);
|
||||
|
||||
apcie_disable_link_hardware(link);
|
||||
|
||||
if (link_enable_count == 0) {
|
||||
apcie_disable_root_complex();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void apcie_disable_link(uint32_t link)
|
||||
{
|
||||
struct apcie_link_config *config = &apcie_link_configs[link];
|
||||
struct apcie_link_status *status = &apcie_link_statuses[link];
|
||||
utime_t start;
|
||||
|
||||
ASSERT(link < APCIE_NUM_LINKS);
|
||||
|
||||
if (!status->enabled)
|
||||
return;
|
||||
|
||||
dprintf(DEBUG_INFO, "apcie: Disabling link %d\n", link);
|
||||
|
||||
set_reg(APCIE_PORT_COUNTER_BASE_ADDR(link), APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_OFFSET, 0);
|
||||
|
||||
// Request PMETO and clear the previous status indications
|
||||
SET_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_PMETO_OFFSET, link,
|
||||
APCIE_CONFIG_BLK_PMETO_FLD_UMASK
|
||||
| APCIE_CONFIG_BLK_PMETO_PME_TO_ACK_MSG_UMASK
|
||||
| APCIE_CONFIG_BLK_PMETO_TIMEOUT_UMASK);
|
||||
start = system_time();
|
||||
while (GET_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_PMETO_OFFSET, link) & APCIE_CONFIG_BLK_PMETO_FLD_UMASK) {
|
||||
if (time_has_elapsed(start, 10000)) {
|
||||
dprintf(DEBUG_CRITICAL, "apcie: timeout waiting for PME_To_Ack, continuing\n");
|
||||
break;
|
||||
}
|
||||
spin(10);
|
||||
}
|
||||
|
||||
start = system_time();
|
||||
while ((GET_APCIE_CONFIG_REG(APCIE_CONFIG_BLK_LINKSTS_OFFSET, link) & APCIE_CONFIG_BLK_LINKSTS_L2_STATE_UMASK) == 0) {
|
||||
if (time_has_elapsed(start, 10000)) {
|
||||
dprintf(DEBUG_CRITICAL, "apcie: link did not go into L2, continuing\n");
|
||||
break;
|
||||
}
|
||||
spin(10);
|
||||
}
|
||||
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_OUT_0);
|
||||
// delay to allow PERST# signal to settle before letting the pulldown hold it low
|
||||
// and to allow the endpoint to handle PERST# before removing REFCLK
|
||||
spin(25);
|
||||
gpio_configure(config->perst_gpio, GPIO_CFG_DFLT);
|
||||
gpio_configure(config->clkreq_gpio, GPIO_CFG_DFLT);
|
||||
|
||||
#if DEBUG_BUILD
|
||||
dart_assert_unmapped(config->dart_id);
|
||||
#endif
|
||||
|
||||
apcie_disable_link_hardware(link);
|
||||
|
||||
status->enabled = false;
|
||||
link_enable_count--;
|
||||
|
||||
if (link_enable_count == 0) {
|
||||
apcie_disable_root_complex();
|
||||
}
|
||||
|
||||
apcie_free_port_bridge(link);
|
||||
}
|
||||
|
||||
uint32_t apcie_get_link_enable_count(void)
|
||||
{
|
||||
return link_enable_count;
|
||||
}
|
||||
|
||||
#if WITH_DEVICETREE
|
||||
void apcie_update_devicetree(DTNode *apcie_node)
|
||||
{
|
||||
DTNode *node;
|
||||
uint32_t propSize;
|
||||
uint8_t *dt_prop = (uint8_t *)malloc(MAX_DT_PROPERTY_SIZE);
|
||||
uint8_t *next_dt_prop = dt_prop;
|
||||
char bridge[16];
|
||||
|
||||
// Apply common tunables.
|
||||
bzero(dt_prop, MAX_DT_PROPERTY_SIZE);
|
||||
next_dt_prop = dt_prop;
|
||||
next_dt_prop = platform_apply_dt_tunables(tunables_pcie_common,
|
||||
ARRAY_SIZE(tunables_pcie_common),
|
||||
next_dt_prop,
|
||||
0, // Already at the correct offset
|
||||
"apcie common");
|
||||
|
||||
next_dt_prop = platform_apply_dt_tunables(tunables_nvme_common ,
|
||||
ARRAY_SIZE(tunables_nvme_common ),
|
||||
next_dt_prop,
|
||||
0, // Already at the correct offset
|
||||
"apcie common");
|
||||
|
||||
propSize = next_dt_prop - dt_prop;
|
||||
RELEASE_ASSERT(propSize < MAX_DT_PROPERTY_SIZE);
|
||||
dt_set_prop(apcie_node, "apcie-common-tunables", dt_prop, propSize);
|
||||
|
||||
// Apply port-specific config tunables.
|
||||
for (uint32_t i = 0; i < APCIE_NUM_LINKS; i++) {
|
||||
snprintf(bridge, sizeof(bridge), "pci-bridge%d", i);
|
||||
if (dt_find_node(apcie_node, bridge, &node)) {
|
||||
// APCIe port config tunables.
|
||||
bzero(dt_prop, MAX_DT_PROPERTY_SIZE);
|
||||
next_dt_prop = dt_prop;
|
||||
next_dt_prop = platform_apply_dt_tunables(tunables_pcie_config_ports[i].tunable_chip,
|
||||
tunables_pcie_config_ports[i].num_tunable_chips,
|
||||
next_dt_prop,
|
||||
tunables_pcie_config_ports[i].dt_base,
|
||||
bridge);
|
||||
propSize = next_dt_prop - dt_prop;
|
||||
RELEASE_ASSERT(propSize < MAX_DT_PROPERTY_SIZE);
|
||||
dt_set_prop(node, "apcie-config-tunables", dt_prop, propSize);
|
||||
|
||||
// PCIe root complex config tunables.
|
||||
snprintf(bridge, sizeof(bridge), "pcie-rc%d", i);
|
||||
bzero(dt_prop, MAX_DT_PROPERTY_SIZE);
|
||||
next_dt_prop = dt_prop;
|
||||
next_dt_prop = platform_apply_dt_tunables(tunables_pcie_config_rc[i].tunable_chip,
|
||||
tunables_pcie_config_rc[i].num_tunable_chips,
|
||||
next_dt_prop,
|
||||
tunables_pcie_config_rc[i].dt_base,
|
||||
bridge);
|
||||
propSize = next_dt_prop - dt_prop;
|
||||
RELEASE_ASSERT(propSize < MAX_DT_PROPERTY_SIZE);
|
||||
dt_set_prop(node, "pcie-rc-tunables", dt_prop, propSize);
|
||||
} else {
|
||||
dprintf(DEBUG_INFO,"PCIe bridge node %s not found -- skipping tunable update\n", bridge);
|
||||
}
|
||||
}
|
||||
|
||||
// Apply SPDS PHY tunables.
|
||||
bzero(dt_prop, MAX_DT_PROPERTY_SIZE);
|
||||
next_dt_prop = dt_prop;
|
||||
next_dt_prop = platform_apply_dt_tunables(tunables_pcie_phy,
|
||||
ARRAY_SIZE(tunables_pcie_phy),
|
||||
next_dt_prop,
|
||||
APCIE_PHY_BASE_ADDR,
|
||||
"PCIe PHY");
|
||||
|
||||
propSize = next_dt_prop - dt_prop;
|
||||
RELEASE_ASSERT(propSize < MAX_DT_PROPERTY_SIZE);
|
||||
|
||||
dt_set_prop(apcie_node, "phy-params", dt_prop, propSize);
|
||||
free(dt_prop);
|
||||
dt_prop = next_dt_prop = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct apcie_link_config platform_apcie_link_configs[APCIE_NUM_LINKS] = {
|
||||
[0] = {
|
||||
.perst_gpio = GPIO_PCIE0_PERST,
|
||||
.clkreq_gpio = GPIO_PCIE0_CLKREQ,
|
||||
.dart_id = PCIE_PORT0_DART_ID,
|
||||
},
|
||||
[1] = {
|
||||
.perst_gpio = GPIO_PCIE1_PERST,
|
||||
.clkreq_gpio = GPIO_PCIE1_CLKREQ,
|
||||
.dart_id = PCIE_PORT1_DART_ID,
|
||||
},
|
||||
[2] = {
|
||||
.perst_gpio = GPIO_PCIE2_PERST,
|
||||
.clkreq_gpio = GPIO_PCIE2_CLKREQ,
|
||||
.dart_id = PCIE_PORT2_DART_ID,
|
||||
},
|
||||
[3] = {
|
||||
.perst_gpio = GPIO_PCIE3_PERST,
|
||||
.clkreq_gpio = GPIO_PCIE3_CLKREQ,
|
||||
.dart_id = PCIE_PORT3_DART_ID,
|
||||
},
|
||||
};
|
||||
|
||||
void platform_register_pci_busses(void)
|
||||
{
|
||||
apcie_init();
|
||||
}
|
||||
|
||||
uint64_t platform_map_host_to_pci_addr(uintptr_t addr)
|
||||
{
|
||||
// Right now we're only supporting 32-bit PCI addresses
|
||||
// for aPCIe, so just lop off the top 32 bits
|
||||
return addr & 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
uintptr_t platform_map_pci_to_host_addr(uint64_t addr)
|
||||
{
|
||||
// Right now we're only supporting 32-bit PCI addresses
|
||||
// for aPCIe
|
||||
ASSERT((addr & ~0xFFFFFFFFULL) == 0);
|
||||
return PCI_32BIT_BASE + (addr & (PCI_32BIT_LEN - 1));
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
# Copyright (C) 2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Computer, Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Computer, Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
ALL_OBJS += \
|
||||
$(LOCAL_DIR)/apcie.o \
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#include <platform/memmap.h>
|
||||
|
||||
.text
|
||||
.balign 4
|
||||
.globl _platform_start
|
||||
_platform_start:
|
||||
////////////////////////////////////////////////
|
||||
// Must preserve X0 and X1
|
||||
////////////////////////////////////////////////
|
||||
|
||||
#if !APPLICATION_SECUREROM
|
||||
// Enable the L2 cache load/store prefetcher.
|
||||
mrs x2, s3_0_c15_c5_0 // HID5
|
||||
and x2, x2, #~(3<<44) // Enable L2C load (bit 44)/store (bit 45) prefetch
|
||||
msr s3_0_c15_c5_0, x2 // HID5
|
||||
isb
|
||||
#endif
|
||||
|
||||
#if WITH_L2_AS_RAM
|
||||
#if APPLICATION_SECUREROM
|
||||
// Enable L2 as RAM
|
||||
mrs x2, s3_3_c15_c7_0 // L2_CRAMCONFIG
|
||||
orr x2, x2, #2 // L2_CRAMCONFIG.EnableSize (2 MiB SRAM)
|
||||
msr s3_3_c15_c7_0, x2 // L2_CRAMCONFIG
|
||||
1:
|
||||
// Poll for RAM ready
|
||||
mrs x2, s3_3_c15_c7_0 // L2_CRAMCONFIG
|
||||
and x2, x2, #(1<<63) // L2_CRAMCONFIG.Ready
|
||||
cbz x2, 1b // Not ready
|
||||
#endif
|
||||
#if PRODUCT_IBOOT || PRODUCT_IBEC
|
||||
// Disable L2 as RAM
|
||||
mrs x2, s3_3_c15_c7_0 // L2_CRAMCONFIG
|
||||
and x2, x2, #~0x3F // L2_CRAMCONFIG.EnableSize (disable SRAM)
|
||||
msr s3_3_c15_c7_0, x2 // L2_CRAMCONFIG
|
||||
1:
|
||||
// Poll for RAM not ready
|
||||
mrs x2, s3_3_c15_c7_0 // L2_CRAMCONFIG
|
||||
and x2, x2, #(1<<63) // L2_CRAMCONFIG.Ready
|
||||
cbnz x2, 1b // Still ready
|
||||
#endif
|
||||
#endif
|
||||
ret
|
||||
|
||||
@@ -0,0 +1,520 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#include <debug.h>
|
||||
#include <platform.h>
|
||||
#include <platform/soc/chipid.h>
|
||||
#include <platform/soc/hwclocks.h>
|
||||
|
||||
#define MINIMUM_FUSE_REVISION 0x0
|
||||
|
||||
#define CHIPID_VOLTAGE_FIXED 0
|
||||
#define CHIPID_MODE_NONE 0
|
||||
|
||||
struct chipid_voltage_config {
|
||||
uint32_t safe_voltage;
|
||||
uint32_t mode;
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_cpu_voltages[] = {
|
||||
[CHIPID_CPU_VOLTAGE_BYPASS] = { 610, CHIPID_MODE_NONE},
|
||||
[CHIPID_CPU_VOLTAGE_SECUREROM] = { 610, CHIPID_MODE_NONE},
|
||||
[CHIPID_CPU_VOLTAGE_396] = { 610, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_cpu_sram_voltages[] = {
|
||||
[CHIPID_CPU_VOLTAGE_BYPASS] = { 800, CHIPID_MODE_NONE},
|
||||
[CHIPID_CPU_VOLTAGE_SECUREROM] = { 800, CHIPID_MODE_NONE},
|
||||
[CHIPID_CPU_VOLTAGE_396] = { 800, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_soc_voltages[] = {
|
||||
[CHIPID_SOC_VOLTAGE_BYPASS] = {725, CHIPID_MODE_NONE},
|
||||
[CHIPID_SOC_VOLTAGE_SECUREROM] = {725, CHIPID_MODE_NONE},
|
||||
[CHIPID_SOC_VOLTAGE_VMIN] = {725, CHIPID_MODE_NONE},
|
||||
[CHIPID_SOC_VOLTAGE_VNOM] = {825, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_gpu_voltages[] = {
|
||||
[CHIPID_GPU_VOLTAGE_OFF] = { 0, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_gpu_sram_voltages[] = {
|
||||
[CHIPID_GPU_VOLTAGE_OFF] = { 0, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
static struct chipid_voltage_config chipid_sram_voltages[] = {
|
||||
[CHIPID_VOLTAGE_FIXED] = {850, CHIPID_MODE_NONE},
|
||||
};
|
||||
|
||||
struct chipid_voltadj_entry {
|
||||
uint64_t voltage_index:8;
|
||||
uint64_t chipid:32;
|
||||
uint64_t chip_rev_min:8;
|
||||
uint64_t fuse_rev_min:8;
|
||||
struct chipid_vol_adj voltages;
|
||||
};
|
||||
|
||||
#define CHIPID_ALL 0x0
|
||||
|
||||
// .voltages = {volAdj0, volAdj1, volAdj2, volAdj3, dvfmMaxAdj, dvmrAdj0, dvmrAdj1, dvmrAdj2}
|
||||
|
||||
static const struct chipid_voltadj_entry chipid_voltadj_entry[] = {
|
||||
{CHIPID_CPU_VOLTAGE_BYPASS, CHIPID_ALL, CHIP_REVISION_A0, 0, .voltages = {0, 0, 0, 0, 0, 0, 0, 0}},
|
||||
{CHIPID_SOC_VOLTAGE_SECUREROM, CHIPID_ALL, CHIP_REVISION_A0, 0, .voltages = {0, 0, 0, 0, 0, 0, 0, 0}},
|
||||
{CHIPID_CPU_VOLTAGE_396, 0x8010, CHIP_REVISION_A0, 0, .voltages = {0, 0, 0, 0, 0, 0, 0, 0}},
|
||||
};
|
||||
|
||||
const struct chipid_vol_adj *chipid_get_vol_adj(enum chipid_voltage_index voltage_index)
|
||||
{
|
||||
uint32_t chipid = chipid_get_chip_id();
|
||||
uint32_t chip_rev = chipid_get_chip_revision();
|
||||
uint32_t fuse_rev = chipid_get_fuse_revision();
|
||||
|
||||
for (size_t i = 0; i < sizeof(chipid_voltadj_entry)/sizeof(chipid_voltadj_entry[0]); i++) {
|
||||
if (voltage_index != chipid_voltadj_entry[i].voltage_index) {
|
||||
continue;
|
||||
}
|
||||
if ((chipid != chipid_voltadj_entry[i].chipid) && (chipid_voltadj_entry[i].chipid != CHIPID_ALL)) {
|
||||
continue;
|
||||
}
|
||||
if ((chip_rev < chipid_voltadj_entry[i].chip_rev_min)) {
|
||||
continue;
|
||||
}
|
||||
if ((fuse_rev < chipid_voltadj_entry[i].fuse_rev_min)) {
|
||||
continue;
|
||||
}
|
||||
return &chipid_voltadj_entry[i].voltages;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_base_voltage(void)
|
||||
{
|
||||
uint32_t voltage = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return voltage;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_cpu_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_cpu_sram_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_soc_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_gpu_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_gpu_sram_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_sram_binfuse_for_mode(uint32_t mode)
|
||||
{
|
||||
uint32_t binfuse = 0;
|
||||
|
||||
// TODO
|
||||
|
||||
return binfuse;
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_cpu_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_cpu_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_cpu_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_cpu_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_cpu_sram_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_cpu_sram_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_cpu_sram_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_cpu_sram_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_soc_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_soc_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_soc_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_soc_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_gpu_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_gpu_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_gpu_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_gpu_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_gpu_sram_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_gpu_sram_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_gpu_sram_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_gpu_sram_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
static uint32_t chipid_get_sram_bin_voltage(uint32_t volt_index)
|
||||
{
|
||||
uint32_t mode, binfuse;
|
||||
|
||||
mode = chipid_sram_voltages[volt_index].mode;
|
||||
|
||||
// Return safe voltage if no binned voltage
|
||||
if (mode == CHIPID_MODE_NONE)
|
||||
return chipid_sram_voltages[volt_index].safe_voltage;
|
||||
|
||||
binfuse = chipid_get_sram_binfuse_for_mode(mode);
|
||||
|
||||
return (chipid_get_base_voltage() + binfuse * 5);
|
||||
}
|
||||
|
||||
bool chipid_get_current_production_mode(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_PRODUCTION_MODE_XTRCT(rCFG_FUSE0) != 0;
|
||||
}
|
||||
|
||||
bool chipid_get_raw_production_mode(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_PRODUCTION_MODE_XTRCT(rCFG_FUSE0_RAW) != 0;
|
||||
}
|
||||
|
||||
void chipid_clear_production_mode(void)
|
||||
{
|
||||
rCFG_FUSE0 &= ~MINIPMGR_FUSE_CFG_FUSE0_PRODUCTION_MODE_UMASK;
|
||||
}
|
||||
|
||||
bool chipid_get_secure_mode(void)
|
||||
{
|
||||
// demotion only applies to the SEP, so iBoot always reads
|
||||
// the raw value for secure mode (<rdar://problem/15182573>)
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_SECURE_MODE_XTRCT(rCFG_FUSE0_RAW);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_security_domain(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_SECURITY_DOMAIN_XTRCT(rCFG_FUSE0);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_board_id(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_BID_XTRCT(rCFG_FUSE0);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_minimum_epoch(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE0_MINIMUM_EPOCH_XTRCT(rCFG_FUSE0);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_chip_id(void)
|
||||
{
|
||||
#if SUB_PLATFORM_T8010
|
||||
return 0x8010;
|
||||
#else
|
||||
#error "Unknown platform"
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t chipid_get_chip_revision(void)
|
||||
{
|
||||
uint32_t fuse_val = rCFG_FUSE4;
|
||||
|
||||
return (MINIPMGR_FUSE_CFG_FUSE4_CHIP_REV_MAJOR_XTRCT(fuse_val) << 4) |
|
||||
(MINIPMGR_FUSE_CFG_FUSE4_CHIP_REV_MINOR_XTRCT(fuse_val));
|
||||
}
|
||||
|
||||
uint32_t chipid_get_osc_frequency(void)
|
||||
{
|
||||
return OSC_FREQ;
|
||||
}
|
||||
|
||||
uint64_t chipid_get_ecid_id(void)
|
||||
{
|
||||
return ((uint64_t)rECIDHI << 32) | rECIDLO;
|
||||
}
|
||||
|
||||
uint64_t chipid_get_die_id(void)
|
||||
{
|
||||
return ((uint64_t)rECIDHI << 32) | rECIDLO;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_cpu_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t cpu_voltage;
|
||||
|
||||
if (index >= sizeof(chipid_cpu_voltages)/sizeof(chipid_cpu_voltages[0]))
|
||||
panic("Invalid CPU voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
cpu_voltage = chipid_cpu_voltages[index].safe_voltage;
|
||||
else
|
||||
cpu_voltage = chipid_get_cpu_bin_voltage(index);
|
||||
|
||||
return cpu_voltage;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_cpu_sram_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t cpu_sram_voltage;
|
||||
|
||||
if (index >= sizeof(chipid_cpu_sram_voltages)/sizeof(chipid_cpu_sram_voltages[0]))
|
||||
panic("Invalid CPU SRAM voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
cpu_sram_voltage = chipid_cpu_sram_voltages[index].safe_voltage;
|
||||
else
|
||||
cpu_sram_voltage = chipid_get_cpu_sram_bin_voltage(index);
|
||||
|
||||
return cpu_sram_voltage;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_soc_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t soc_voltage;
|
||||
|
||||
if (index >= sizeof(chipid_soc_voltages)/sizeof(chipid_soc_voltages[0]))
|
||||
panic("Invalid SOC voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
soc_voltage = chipid_soc_voltages[index].safe_voltage;
|
||||
else
|
||||
soc_voltage = chipid_get_soc_bin_voltage(index);
|
||||
|
||||
return soc_voltage;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_gpu_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t gpu_voltage;
|
||||
|
||||
if (index >= sizeof(chipid_gpu_voltages)/sizeof(chipid_gpu_voltages[0]))
|
||||
panic("Invalid GPU voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
gpu_voltage = chipid_gpu_voltages[index].safe_voltage;
|
||||
else
|
||||
gpu_voltage = chipid_get_gpu_bin_voltage(index);
|
||||
|
||||
return gpu_voltage;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_gpu_sram_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t gpu_sram_voltage;
|
||||
|
||||
if (index >= sizeof(chipid_gpu_sram_voltages)/sizeof(chipid_gpu_sram_voltages[0]))
|
||||
panic("Invalid GPU SRAM voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
gpu_sram_voltage = chipid_gpu_sram_voltages[index].safe_voltage;
|
||||
else
|
||||
gpu_sram_voltage = chipid_get_gpu_sram_bin_voltage(index);
|
||||
|
||||
return gpu_sram_voltage;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_sram_voltage(uint32_t index)
|
||||
{
|
||||
uint32_t sram_voltage;
|
||||
|
||||
index = CHIPID_VOLTAGE_FIXED;
|
||||
|
||||
if (index >= sizeof(chipid_sram_voltages)/sizeof(chipid_sram_voltages[0]))
|
||||
panic("Invalid SRAM voltage index %d\n", index);
|
||||
|
||||
if (chipid_get_fuse_revision() < MINIMUM_FUSE_REVISION)
|
||||
sram_voltage = chipid_sram_voltages[index].safe_voltage;
|
||||
else
|
||||
sram_voltage = chipid_get_sram_bin_voltage(index);
|
||||
|
||||
return sram_voltage;
|
||||
}
|
||||
|
||||
bool chipid_get_fuse_lock(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE1_AP_LOCK_XTRCT(rCFG_FUSE1) != 0;
|
||||
}
|
||||
|
||||
void chipid_set_fuse_lock(bool locked)
|
||||
{
|
||||
if (locked) {
|
||||
rCFG_FUSE1 |= MINIPMGR_FUSE_CFG_FUSE1_AP_LOCK_INSRT(1);
|
||||
asm("dsb sy");
|
||||
if (!chipid_get_fuse_lock()) {
|
||||
panic("Failed to lock fuses\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool chipid_get_fuse_seal(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE1_SEAL_FUSES_XTRCT(rCFG_FUSE1) != 0;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_lpo_trim(void)
|
||||
{
|
||||
// <rdar://problem/18460311> Workaround for Maui LPO issue
|
||||
// return MINIPMGR_FUSE_CFG_FUSE2_LPO_TRIM_XTRCT(rCFG_FUSE2);
|
||||
return 0x20;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_pcie_refpll_fcal_vco_digctrl(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE4_PCIE_REFPLL_FCAL_VCO_DIGCTRL_XTRCT(rCFG_FUSE4);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_soc_temp_sensor_trim(uint32_t sensor_index)
|
||||
{
|
||||
uint32_t sensor_trim;
|
||||
|
||||
switch (sensor_index) {
|
||||
case 0:
|
||||
sensor_trim = rCFG_FUSE2;
|
||||
sensor_trim &= MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN0_TRIMG_UMASK | MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN0_TRIMO_UMASK;
|
||||
sensor_trim >>= MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN0_TRIMG_SHIFT;
|
||||
break;
|
||||
case 1:
|
||||
sensor_trim = rCFG_FUSE2;
|
||||
sensor_trim &= MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN1_TRIMG_UMASK | MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN1_TRIMO_UMASK;
|
||||
sensor_trim >>= MINIPMGR_FUSE_CFG_FUSE2_THERMAL_SEN1_TRIMG_SHIFT;
|
||||
break;
|
||||
case 2:
|
||||
sensor_trim = rCFG_FUSE3;
|
||||
sensor_trim &= MINIPMGR_FUSE_CFG_FUSE3_THERMAL_SEN2_TRIMG_UMASK | MINIPMGR_FUSE_CFG_FUSE3_THERMAL_SEN2_TRIMO_UMASK;
|
||||
sensor_trim >>= MINIPMGR_FUSE_CFG_FUSE3_THERMAL_SEN2_TRIMG_SHIFT;
|
||||
break;
|
||||
default:
|
||||
panic("invalid thermal sensor %u", sensor_index);
|
||||
}
|
||||
return sensor_trim;
|
||||
}
|
||||
|
||||
uint32_t chipid_get_fuse_revision(void)
|
||||
{
|
||||
return MINIPMGR_FUSE_CFG_FUSE4_REV_XTRCT(rCFG_FUSE4);
|
||||
}
|
||||
|
||||
uint32_t chipid_get_total_rails_leakage()
|
||||
{
|
||||
// FIXME
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
|
||||
#define FPGA_HAS_INT3 (FPGA_HAS_MEDIA | FPGA_HAS_MSR | FPGA_HAS_JPEG | FPGA_HAS_VXD | FPGA_HAS_DISP)
|
||||
|
||||
uint32_t chipid_get_fpga_block_instantiation(void)
|
||||
{
|
||||
// Hardware blocks instantiated.
|
||||
uint32_t blocks = (rECID_FUSE3 >> 18) & 0xF;
|
||||
uint32_t mask = FPGA_HAS_ALWAYS;
|
||||
|
||||
switch (blocks) {
|
||||
// INT2 := ACC + AF + AMC + SouthBridge + PCIE
|
||||
case 0x1:
|
||||
break;
|
||||
|
||||
// INT2GFX := INT2 + GFX
|
||||
case 0x2:
|
||||
mask |= FPGA_HAS_GFX;
|
||||
break;
|
||||
|
||||
// INT3 := INT2 + DISP + MEDIA + JPEG + MSR + VXD
|
||||
case 0x8:
|
||||
mask |= FPGA_HAS_INT3;
|
||||
break;
|
||||
|
||||
// INT3GFX := INT3 + GFX
|
||||
case 0xA:
|
||||
mask |= (FPGA_HAS_INT3 | FPGA_HAS_GFX);
|
||||
break;
|
||||
|
||||
default:
|
||||
panic("Unknown hardware block instantiation: 0x%x", blocks);
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is only a database of the performance sate for CPU and GPU, regarding the kind of chip
|
||||
* or board, it has no access to the chip.
|
||||
*/
|
||||
#include <platform.h>
|
||||
#include <platform/soc/dvfmperf.h>
|
||||
|
||||
// These array are the first iteration, the next part will include reference to board id, board rev, fuse rev.
|
||||
|
||||
static const enum chipid_voltage_index t8010_cpu[] = {
|
||||
CHIPID_CPU_VOLTAGE_BYPASS,
|
||||
CHIPID_CPU_VOLTAGE_SECUREROM,
|
||||
CHIPID_CPU_VOLTAGE_396,
|
||||
};
|
||||
|
||||
static const enum chipid_voltage_index t8010_gpu[] = {
|
||||
CHIPID_GPU_VOLTAGE_OFF,
|
||||
};
|
||||
|
||||
static const struct {
|
||||
uint32_t chip_id;
|
||||
uint32_t chip_rev;
|
||||
enum chipid_voltage_type voltage_type;
|
||||
const enum chipid_voltage_index *voltage_indexes;
|
||||
uint32_t size;
|
||||
} dvfmperfs[] = { // Entry with highest chip revision must come first
|
||||
{0x8010, CHIP_REVISION_A0, CHIPID_CPU_VOLTAGE, t8010_cpu, sizeof(t8010_cpu)/sizeof(t8010_cpu[0])},
|
||||
{0x8010, CHIP_REVISION_A0, CHIPID_GPU_VOLTAGE, t8010_gpu, sizeof(t8010_gpu)/sizeof(t8010_gpu[0])},
|
||||
};
|
||||
|
||||
enum chipid_voltage_index dvfmperf_get_voltage_index(uint32_t index, enum chipid_voltage_type voltage_type)
|
||||
{
|
||||
uint32_t chip_id = chipid_get_chip_id();
|
||||
uint32_t chip_rev = chipid_get_chip_revision();
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < sizeof(dvfmperfs)/sizeof(dvfmperfs[0]); i++) {
|
||||
if (chip_id != dvfmperfs[i].chip_id) {
|
||||
continue;
|
||||
}
|
||||
if (chip_rev < dvfmperfs[i].chip_rev) {
|
||||
continue;
|
||||
}
|
||||
if (voltage_type != dvfmperfs[i].voltage_type) {
|
||||
continue;
|
||||
}
|
||||
if (index >= dvfmperfs[i].size) {
|
||||
switch (voltage_type) {
|
||||
case CHIPID_CPU_VOLTAGE:
|
||||
return dvfmperfs[i].voltage_indexes[2]; // Default to lowest frequency
|
||||
case CHIPID_GPU_VOLTAGE:
|
||||
return dvfmperfs[i].voltage_indexes[0];
|
||||
default:
|
||||
panic("Unknwon voltage type\n");
|
||||
}
|
||||
}
|
||||
return dvfmperfs[i].voltage_indexes[index];
|
||||
}
|
||||
panic("Unknown voltage for current chip\n");
|
||||
return CHIPID_GPU_VOLTAGE_OFF; // Never reach this code
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is only a database of the frequencies used by CPU and GPU, it has no access
|
||||
* To the chip.
|
||||
*/
|
||||
#include <platform.h>
|
||||
#include <platform/soc/operating_point.h>
|
||||
|
||||
#define CHIP_ID_ALL 0
|
||||
#define DELIMITER CHIPID_ALL_VOLTAGE_LAST
|
||||
|
||||
static const struct operating_point_params operating_point_params[] = {
|
||||
// T8010
|
||||
{.voltage_index = DELIMITER, .chip_id = 0x8010, .voltage_type = CHIPID_GPU_VOLTAGE},
|
||||
// voltage_index P M S
|
||||
{.gpu = {CHIPID_GPU_VOLTAGE_OFF, 0, 0, 0}},
|
||||
|
||||
// T8010
|
||||
{.voltage_index = DELIMITER, .chip_id = 0x8010, .voltage_type = CHIPID_CPU_VOLTAGE},
|
||||
// bypass
|
||||
// | clkSrc
|
||||
// | | fcwInt
|
||||
// | | | fcwFrac
|
||||
// | | | | pstDivS
|
||||
// | | | | | migDivS
|
||||
// | | | | | | coreTyp
|
||||
// | | | | | | | biuDiv4HiVol
|
||||
// | | | | | | | | biuDiv4LoVol
|
||||
// | | | | | | | | | dvmrMaxWgt
|
||||
// | | | | | | | | | | iexrfCfgWrData
|
||||
// | | | | | | | | | | | iexrfCfgWrIdxa
|
||||
// | | | | | | | | | | | | iexrfCfgWrIdxb
|
||||
// | | | | | | | | | | | | | exrfCfgWrIdxmuxsel
|
||||
// | | | | | | | | | | | | | |
|
||||
{.cpu = {CHIPID_CPU_VOLTAGE_BYPASS, 1, 0, 125, 0, 7, 7, kACC_CORETYP_FUSED, 2, 2, 0xf, 0, 0, 0, 0}}, // 24 MHz
|
||||
{.cpu = {CHIPID_CPU_VOLTAGE_SECUREROM,1, 1, 125, 0, 4, 7, kACC_CORETYP_FUSED, 2, 2, 0xf, 0, 0, 0, 0}}, // 300 MHz
|
||||
{.cpu = {CHIPID_CPU_VOLTAGE_396, 0, 0, 0, 0, 0, 0, kACC_CORETYP_ECORE, 2, 2, 0xf, 0, 0, 0, 0}}, // 396 MHz !!!FIXME!!! Get correct settings
|
||||
};
|
||||
|
||||
const struct operating_point_params *operating_point_get_params(enum chipid_voltage_index voltage_index, enum chipid_voltage_type voltage_type)
|
||||
{
|
||||
uint64_t chip_id = chipid_get_chip_id();
|
||||
uint64_t chip_id_in_array = 0;
|
||||
size_t size = sizeof(operating_point_params)/sizeof(operating_point_params[0]);
|
||||
enum chipid_voltage_type voltage_type_in_array = CHIPID_CPU_VOLTAGE;
|
||||
|
||||
size_t found = size;
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
if (operating_point_params[i].voltage_index == DELIMITER) {
|
||||
chip_id_in_array = operating_point_params[i].chip_id;
|
||||
voltage_type_in_array = operating_point_params[i].voltage_type;
|
||||
continue;
|
||||
}
|
||||
if ((voltage_type_in_array != voltage_type)) {
|
||||
continue;
|
||||
}
|
||||
if ((operating_point_params[i].voltage_index == voltage_index) && ((chip_id_in_array == CHIP_ID_ALL) || (chip_id_in_array == chip_id))) {
|
||||
found = i;
|
||||
}
|
||||
}
|
||||
if (found == size) {
|
||||
panic("%s Index %d not found for chipId 0x%llx\n",
|
||||
__func__, voltage_index, chip_id);
|
||||
}
|
||||
return &operating_point_params[found];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
OPTIONS += \
|
||||
WITH_HW_PLATFORM_CHIPID=1
|
||||
|
||||
ALL_OBJS += \
|
||||
$(LOCAL_DIR)/chipid.o \
|
||||
$(LOCAL_DIR)/operating_point.o \
|
||||
$(LOCAL_DIR)/dvfmperf.o
|
||||
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#include <debug.h>
|
||||
#include <drivers/dcs/dcs.h>
|
||||
#include <drivers/dcs/dcs_regs.h>
|
||||
#include <drivers/dcs/dcs_init_lib.h>
|
||||
#include <drivers/dram.h>
|
||||
#include <drivers/miu.h>
|
||||
#include <sys.h>
|
||||
#include <platform/soc/hwclocks.h>
|
||||
|
||||
int mcu_initialize_dram (bool resume)
|
||||
{
|
||||
RELEASE_ASSERT(!resume);
|
||||
|
||||
// Don't perform DRAM initializion if the memory controller is already
|
||||
// initialized (e.g., for SecureROM validation testing).
|
||||
if (DCS_REG_READ_CH(0, rDCS_MCU_AMCCTRL) == 0) {
|
||||
clock_gate(CLK_DCS0, true);
|
||||
clock_gate(CLK_DCS1, true);
|
||||
clock_gate(CLK_DCS2, true);
|
||||
clock_gate(CLK_DCS3, true);
|
||||
clock_gate(CLK_MCC, true);
|
||||
|
||||
dcs_init(DCS_BOOT_COLDBOOT);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mcu_bypass_prep (int step)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t mcu_get_memory_size (void)
|
||||
{
|
||||
return dcs_get_memory_size();
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
void dcs_enable_slow_boot (bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
// switch to slow clock
|
||||
clocks_set_performance(kPerformanceMemoryLow);
|
||||
spin(1);
|
||||
}
|
||||
else {
|
||||
#if !SUPPORT_FPGA
|
||||
// switch back to full-speed
|
||||
clocks_set_performance(kPerformanceMemoryFull);
|
||||
spin(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
void dcs_dram_workarounds(dcs_boottype_t boot_type)
|
||||
{
|
||||
/* Nothing yet */
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Grab (Platform Specific) Tables with Definitions of Values for DCS Init & DCS Tunables
|
||||
#include <platform/dcsconfig.h>
|
||||
|
||||
#if DCS_FIXUP_PARAMS
|
||||
// Grab (Target Specific) Definition of Required Fixups to the Values for DCS Init
|
||||
#include <target/dcsfixup.h>
|
||||
#endif
|
||||
//================================================================================
|
||||
void dcs_init_config_params(dcs_config_params_t *use_dcs_params, dcs_target_t targtype)
|
||||
{
|
||||
memcpy(use_dcs_params, &dcs_params, sizeof(dcs_config_params_t));
|
||||
|
||||
#if DCS_FIXUP_PARAMS
|
||||
// This gives the particular target a chance to make target-specific changes
|
||||
dcs_init_config_fixup_params(use_dcs_params, targtype);
|
||||
#endif
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
const dcs_tunable_t *dcs_init_tunable_table(uint32_t *table_len)
|
||||
{
|
||||
if (table_len)
|
||||
*table_len = sizeof(dcs_tunables) / sizeof(dcs_tunables[0]);
|
||||
|
||||
return dcs_tunables;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Save off calibration results to AOP_SRAM region (later to be stitched into reconfig sequence)
|
||||
// Order of registers to be saved must match the order to be restored
|
||||
volatile uint32_t *dcs_save_calibration_results(volatile uint32_t *save_region, uint32_t freq)
|
||||
{
|
||||
/* TBD */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Stitch the saved calibration results into the reconfig sequence
|
||||
// To be called immediately after stitching mcu_aop_awake_reconfig_pre_restore
|
||||
// Order of registers to be restored matches the order in the reconfig sequence
|
||||
void dcs_restore_calibration_results(volatile uint32_t *save_region)
|
||||
{
|
||||
/* TBD */
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
@@ -0,0 +1,812 @@
|
||||
/*
|
||||
* Copyright (C) 2014-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Init Sequence Library for use in:
|
||||
* Driver for the LPDDR4 compatible DRAM Control Subsystem (DCS) block
|
||||
*/
|
||||
|
||||
/*
|
||||
Summary of Steps from the Spec (Spreadsheet)
|
||||
|
||||
+ (Aa) Steps 0,1,2,3a [need to identify parameterization]
|
||||
+ (Ab) Step 3b [PMGR: set Freq to 50MHz & delay-wait]
|
||||
+ (Ac) Steps 3c,4,5 [need to identify parameterization]
|
||||
+ (B) Step 6 [Change Clk Speed]
|
||||
+ (C) Step 7 [include delay-wait from early Step 8]
|
||||
+ (D) Step 8a [Cal: CA 800MHz Vmin]
|
||||
+ (E) Step 8b [Write Regs]
|
||||
+ (F) Step 8c [Cal: CA 800MHz Vmin] (...again? should it be CS?)
|
||||
+ (G) Step 8d [Write Regs]
|
||||
+ (H) Step 9 [Write Regs]
|
||||
+ (I) Step 10 [Cal: WrLvl, RdDq, WrDq 800MHz Vmin]
|
||||
+ (J) Step 11 [Write Regs]
|
||||
+ (K) Step 12 [Cal: CA 1200MHz Vnom]
|
||||
+ (L) Step 13 [Write Regs]
|
||||
+ (M) Step 14 [Cal: WrLvl, RdDq, WrDq 1200MHz Vmin]
|
||||
+ (N) Steps 15,16,17,18,19,20 [need to identify parameterization]
|
||||
|
||||
Between these steps there is possibly a need/desire for:
|
||||
- Frequency Changes (PMGR)
|
||||
- PMU save/restore
|
||||
- debug messages
|
||||
- register dumps (DV, SiVal)
|
||||
- anything else!
|
||||
|
||||
CONFIG Table:
|
||||
Compile-Time Known:
|
||||
Type of Execution Environment CoreOS, DV, SiVal
|
||||
Type of Target SoC, FPGA, Palladium
|
||||
ChipID 0x8000, 0x8001, etc.
|
||||
Revision A0, B0, B1, etc.
|
||||
Num DCS 4, 8, etc. (Derived...!)
|
||||
Variant Flags Work-arounds, RADAR Ref., et al.
|
||||
|
||||
(Config Info know at Compile time can be subject to #if)
|
||||
|
||||
Run-Time Known:
|
||||
Type of Init ColdBoot, AOP_DDR, AOP_AWAKE
|
||||
Debug Flags Low-Level, Milestone, et al.
|
||||
|
||||
RegValue Table
|
||||
Much like today's: various values for various registers
|
||||
Sensitive to ChipID (also Target type?)
|
||||
(Internal static alloc (Complete Table Fill-in within Init function):
|
||||
Fill in Values (per ChipID/Rev & Target-type)
|
||||
return pointer to caller
|
||||
(Allows customization by caller before use)
|
||||
|
||||
TODO:
|
||||
- Convert to using SPDS for register names, et al
|
||||
|
||||
*/
|
||||
|
||||
//================================================================================
|
||||
// API Definitions
|
||||
#include <drivers/dcs/dcs_init_lib.h>
|
||||
|
||||
extern dcs_config_t dcs_cfg;
|
||||
extern dcs_config_params_t dcs_params;
|
||||
|
||||
#if izIBOOT
|
||||
extern int debug_level_dcs;
|
||||
#endif
|
||||
|
||||
void dcs_enable_autorefresh(void)
|
||||
{
|
||||
uint32_t arefen_freq0 = 0x1011013f;
|
||||
uint32_t arefen_freq1 = 0x10010000;
|
||||
|
||||
arefen_freq1 = 0x10110000;
|
||||
|
||||
// Configure auto-refresh. Freq0 has the auto-refresh enable, so do it last.
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFEN_FREQ(3), 0x10100000);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFEN_FREQ(2), 0x10000000);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFEN_FREQ(1), arefen_freq1);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFEN_FREQ(0), arefen_freq0);
|
||||
}
|
||||
|
||||
|
||||
//================================================================================
|
||||
// Implementing the Various Steps of the DCS Init, per Specification
|
||||
// Based on AMC Init Spec (Spreadsheet)
|
||||
// - Supporting Maui: Spec (v??)
|
||||
//================================================================================
|
||||
// Step 0: AMC Prolog
|
||||
//================================================================================
|
||||
void dcs_init_Prolog(void)
|
||||
{
|
||||
// NOTE: between the Compiler and the Optimization, this should vanish for non-FPGA builds
|
||||
if (izFPGA && izColdBoot) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DRAM_RESETN(AMP_CA), 1);
|
||||
delay_for_us(200);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DRAM_RESETN(AMP_CA), 0);
|
||||
delay_for_us(200);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DRAM_RESETN(AMP_CA), 1);
|
||||
delay_for_us(200);
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 1: AMC Initial Configuration
|
||||
//================================================================================
|
||||
void dcs_init_AMC_Initial_Config(void)
|
||||
{
|
||||
uint32_t i,n;
|
||||
|
||||
// rdar://problem/19137387: this applies to Maui A1 and B0, as well as other SoCs before Cayman
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_SPLLCTRL_MODEREG, 0x1);
|
||||
dcs_reg_write_all_chan(rDCS_SPLLCTRL_VCO, dcs_params.spllctrl_vco_1);
|
||||
|
||||
|
||||
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++) {
|
||||
for (n = 0; n < dcs_params.num_freqchngctl_regs; n++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL_FREQ(n, i), dcs_params.freq[i].freqchngctl[n]);
|
||||
|
||||
// This register write to be skipped for Maui A0/A1, but written to for B0 & later, and all other SoCs
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0))
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGTIM_FREQ(i), dcs_params.freq[i].freqchngtim);
|
||||
}
|
||||
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQCALVREFCODECONTROL, dcs_params.wrdqcalvrefcodecontrol);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDDQCALVREFCODECONTROL, dcs_params.rddqcalvrefcodecontrol);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MODEREG, 0x120c90b8);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LAT_FREQ(0), dcs_params.freq[0].lat);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LAT_FREQ(1), dcs_params.freq[1].lat);
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PHYRDWRTIM_FREQ(i), dcs_params.freq[i].phyrdwrtim);
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_CASPCH_FREQ(i), dcs_params.freq[i].caspch);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ACT_FREQ(i), dcs_params.freq[i].act);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AUTOREF_FREQ(i), dcs_params.freq[i].autoref);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_SELFREF_FREQ(i), dcs_params.freq[i].selfref);
|
||||
|
||||
if (i == 0) dcs_reg_write_all_chan(rDCS_MCU_MODEREG, dcs_params.modereg);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PDN_FREQ(i), dcs_params.freq[i].pdn);
|
||||
if (i == 0) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PDN1, dcs_params.pdn1);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MODEREG1, dcs_params.modereg1);
|
||||
}
|
||||
}
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AUTOREF_PARAMS, dcs_params.autoref_params);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PDN, dcs_params.pdn);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_DERATE_FREQ(0), dcs_params.freq[0].derate);
|
||||
|
||||
// These register writes to be skipped for Maui A0/A1, but written to for B0 & later, and all other SoCs
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0))
|
||||
for(i = 1; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_DERATE_FREQ(i), dcs_params.freq[i].derate);
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LAT_FREQ(i), dcs_params.freq[i].lat2);
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_TAT_FREQ(i), dcs_params.freq[i].tat);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_RNKCFG, dcs_params.rnkcfg);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MIFQMAXCTRL_FREQ(0), dcs_params.freq[0].mifqmaxctrl);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MIFQMAXCTRL_FREQ(3), dcs_params.freq[3].mifqmaxctrl);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PWRMNGTEN, 0);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ODTSZQC, 0x00002000);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AMCCTRL, 0x00000002);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LS3B_QUIES_CTRL, 0x00000015);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MCPHYUPDTPARAM, 0x15030000);
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 2: AMP Initial Configuration
|
||||
//================================================================================
|
||||
void dcs_init_AMP_Initial_Config(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = AMP_CA ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_AMPEN(i), 0x00000001);
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_VREF_F(AMP_CA, i), dcs_params.freq[i].cavref);
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_VREF_F(AMP_DQ0, i), dcs_params.freq[i].dqvref);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_VREF_F(AMP_DQ1, i), dcs_params.freq[i].dqvref);
|
||||
}
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_SDLL_UPDATE_CNTL(AMP_CA), dcs_params.casdllupdatectrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_SDLL_UPDATE_CNTL(AMP_DQ0), dcs_params.dqsdllupdatectrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_SDLL_UPDATE_CNTL(AMP_DQ1), dcs_params.dqsdllupdatectrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ0), dcs_params.rdsdllctrl_step2);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ1), dcs_params.rdsdllctrl_step2);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ0), dcs_params.rdsdllctrl_step2 & 0x7, 0x0);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ1), dcs_params.rdsdllctrl_step2 & 0x7, 0x0);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQDQSSDLLCTRL(AMP_DQ0), dcs_params.wrdqdqssdllctrl_step2);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQDQSSDLLCTRL(AMP_DQ1), dcs_params.wrdqdqssdllctrl_step2);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_WRDQDQSSDLLCTRL(AMP_DQ0), dcs_params.wrdqdqssdllctrl_step2 & 0x7, 0x0);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_WRDQDQSSDLLCTRL(AMP_DQ1), dcs_params.wrdqdqssdllctrl_step2 & 0x7, 0x0);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, dcs_params.cawrlvlsdllcode);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, dcs_params.cawrlvlsdllcode & 0x300, 0x000);
|
||||
|
||||
if (!izFPGA)
|
||||
for(i = AMP_CA ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLLOCKTIM(i), dcs_params.dlllocktim);
|
||||
|
||||
if(dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQSPDENALWYSON(AMP_DQ0), 0x00000001);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQSPDENALWYSON(AMP_DQ1), 0x00000001);
|
||||
}
|
||||
|
||||
// These register writes to be skipped for Maui A0/A1
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
for(i = 1; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMPCA_DFICALTIMING_F(i), dcs_params.freq[i].cadficaltiming);
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++) {
|
||||
dcs_reg_write_all_chan(rDCS_AMPDQ_DFICALTIMING_F(AMP_DQ0, i), dcs_params.freq[i].dqdficaltiming);
|
||||
dcs_reg_write_all_chan(rDCS_AMPDQ_DFICALTIMING_F(AMP_DQ1, i), dcs_params.freq[i].dqdficaltiming);
|
||||
}
|
||||
}
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDWRDQCALTIMING_F(0), dcs_params.rdwrdqcaltiming_f0);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDWRDQCALSEGLEN_F(0), dcs_params.rdwrdqcalseglen_f0);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDWRDQCALTIMING_F(1), dcs_params.rdwrdqcaltiming_f1);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDWRDQCALSEGLEN_F(1), dcs_params.rdwrdqcalseglen_f1);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDWRDQCALTIMING_F(3), dcs_params.rdwrdqcaltiming_f3);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWRDDQCALPATPRBS4I, dcs_params.rddqcalpatprbs4i);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATPRBS4I, dcs_params.wrdqcalpatprbs4i);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATPRBS7(0), 0x87654321);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATPRBS7(1), 0xcdedcba9);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATPRBS7(2), 0x456789ab);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATPRBS7(3), 0x5fa63123);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALPATINVERTMASK, 0x55550000);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDDQCALWINDOW_F(0), dcs_params.freq[0].rddqcalwindow);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQCALWINDOW_F(0), dcs_params.freq[0].wrdqcalwindow);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDDQCALWINDOW_F(1), dcs_params.freq[1].rddqcalwindow);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQCALWINDOW_F(1), dcs_params.freq[1].wrdqcalwindow);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_MAXRDDQS_SDLL_MULFACTOR, dcs_params.maxrddqssdllmulfactor);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_MAXWRDQS_SDLL_MULFACTOR, dcs_params.maxwrdqssdllmulfactor);
|
||||
|
||||
// These register writes to be skipped for Maui A0/A1
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
dcs_reg_write_all_chan(rDCS_AMPDQ_RDDQSMULFACTOR(AMP_DQ0), 0x20181000);
|
||||
dcs_reg_write_all_chan(rDCS_AMPDQ_RDDQSMULFACTOR(AMP_DQ1), 0x20181000);
|
||||
}
|
||||
|
||||
for(i = 0; i < DCS_FREQUENCY_SLOTS; i++) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDCAPCFG_FREQ(AMP_DQ0, i), dcs_params.freq[i].rdcapcfg);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDCAPCFG_FREQ(AMP_DQ1, i), dcs_params.freq[i].rdcapcfg);
|
||||
}
|
||||
|
||||
if (!izFPGA) {
|
||||
for(i = AMP_CA ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLUPDTCTRL(i), dcs_params.dllupdtctrl1);
|
||||
}
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLUPDTINTVL(AMP_CA), dcs_params.dllupdtintvl);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLUPDTINTVL(AMP_DQ0), 0);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLUPDTINTVL(AMP_DQ1), 0);
|
||||
|
||||
for(i = AMP_DQ0 ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DLLEN(i), 0x00000100);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DCCCONTROL, dcs_params.dcccontrol);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DCCTIMER, 0x00000190);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALDYNHALFCLKDLYCTRL, 0x00000001);
|
||||
|
||||
|
||||
// AMPH configuration
|
||||
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_CB_DRIVESTR, dcs_params.cbdrivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_CB_IOCTL, dcs_params.cbioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_CK_DRIVESTR, dcs_params.ckdrivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_CK_IOCTL, dcs_params.ckioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_DRIVESTR, dcs_params.b0drivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_IOCTL, dcs_params.b0ioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_ODT, dcs_params.b0odt);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_ODTCTRL, dcs_params.b0odtctrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B1_DRIVESTR, dcs_params.b1drivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B1_ODTCTRL, dcs_params.b1odtctrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B1_IOCTL, dcs_params.b1ioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B1_ODT, dcs_params.b1odt);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS0_DRIVESTR, dcs_params.dqs0drivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS0_IOCTL, dcs_params.dqs0ioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS0_ODT, dcs_params.dqs0odt);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS0_ZDETBIASEN, dcs_params.dqs0zdetbiasen);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS0_ODTCTRL, dcs_params.dqs0odtctrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS1_DRIVESTR, dcs_params.dqs1drivestr);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS1_IOCTL, dcs_params.dqs1ioctl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS1_ODT, dcs_params.dqs1odt);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS1_ZDETBIASEN, dcs_params.dqs1zdetbiasen);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DQS1_ODTCTRL, dcs_params.dqs1odtctrl);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_DBG_REG0, 0x00000000);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_ZCAL_FSM(1), dcs_params.zcalfsm1);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_ZCAL_FSM(0), dcs_params.zcalfsm0);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_SPARE(0), dcs_params.spare0);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWRDDQCALTVREF, dcs_params.hwrddqcaltvref);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWWRDQCALTVREF, dcs_params.hwwrdqcaltvref);
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 3: Self-Refresh Exit
|
||||
//================================================================================
|
||||
void dcs_init_Self_Refresh_Exit_a(void)
|
||||
{
|
||||
// Wait 5 us after Impedence Calibration to avoid McPhyPending
|
||||
// preventing the SRFSM from exiting SR.
|
||||
dcs_spin(5, "after Imp. Cal.");
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFPARAM, dcs_params.arefparam);
|
||||
|
||||
for(int i = 0; i < DCS_FREQUENCY_SLOTS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AUTOREF_FREQ(i), dcs_params.freq[i].autoref2);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AUTOREF_PARAMS, dcs_params.autoref_params2);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ODTSZQC, dcs_params.odtszqc);
|
||||
// M8 Bug radar #20346417, two writes to ensure propogation
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LONGSR, dcs_params.longsr);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_LONGSR, dcs_params.longsr);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MCPHYUPDTPARAM, 0x15030004);
|
||||
|
||||
}
|
||||
|
||||
//========================================
|
||||
// Caller Code should:
|
||||
// - Change Frequency to 50MHz
|
||||
//========================================
|
||||
|
||||
void dcs_init_Self_Refresh_Exit_b(void)
|
||||
{
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AMCCTRL, 0x00000003);
|
||||
|
||||
for(uint32_t i = AMP_CA ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_AMPINIT(i), 0x00000001);
|
||||
|
||||
if (!izFPGA) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_IMPCALCMD, 0x00000001);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_IMPCALCMD, 0x01, 0x00);
|
||||
}
|
||||
|
||||
if (izResume)
|
||||
dcs_enable_autorefresh();
|
||||
|
||||
dcs_spin(2200, "After Enable Auto-Refresh");
|
||||
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL, dcs_params.freqchngctl_step3);
|
||||
dcs_reg_poll_all_chan(rDCS_MCU_FREQCHNGCTL, 0x10000, 0x00000);
|
||||
dcs_spin(2, "After SoC Update");
|
||||
}
|
||||
|
||||
// Resume-Boot and Cold-Boot use different Exit commands for Self-Refresh
|
||||
// Issue self-refresh exit cmd for resume boot with MPC
|
||||
int n = (izColdBoot)? 0x00000000:0x00004000;
|
||||
// Issue self-refresh exit cmd for resume boot with MPC
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MRINITCMD_0, n);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_MRINITCMD_0, n | 0x1);
|
||||
dcs_reg_poll_all_chan(rDCS_MCU_MRINITCMD_0, 0x01, 0x00);
|
||||
|
||||
dcs_spin(2, NULL);
|
||||
|
||||
dcs_reg_write(rGLBTIMER_CHEN, (1 << dcs_cfg.num_dcs) - 1);
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 4: DRAM Reset, ZQ Calibration & Configuration (cold boot only)
|
||||
//================================================================================
|
||||
void dcs_init_ZQ_Cal_Cfg(void)
|
||||
{
|
||||
// ZQ calibration START MPC cmd
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0, 0x4f);
|
||||
// wait 1us for tZQCAL
|
||||
dcs_spin(1, "tZQCAL");
|
||||
|
||||
// ZQ calibration LATCH MPC cmd
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0, 0x51);
|
||||
// wait 10ns for tZQLAT
|
||||
dcs_spin(1, "tZQLAT");
|
||||
|
||||
if (izColdBoot) {
|
||||
// MR2 register (read/write latency)
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x2, 0x0);
|
||||
// MR1 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x1, 0x8e);
|
||||
// MR3 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x3, dcs_params.mr3cmd);
|
||||
// MR22 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x16, 0x0);
|
||||
// MR11 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xb, 0x0);
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xd, dcs_params.mr13cmd);
|
||||
// MR12 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xc, 0x59);
|
||||
// MR14 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xe, 0x59);
|
||||
// MR23 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x17, 0x80);
|
||||
|
||||
uint32_t patinvertmask = (DCS_REG_READ_CH(0, rDCS_AMP_HWRDDQCALPATPRBS4I) >> 16) & 0xffff;
|
||||
uint32_t prbs = DCS_REG_READ_CH(0, rDCS_AMP_HWWRDQCALPATPRBS4I);
|
||||
|
||||
// MR15 register
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xf, patinvertmask & 0xff);
|
||||
// MR20 register
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x14, (patinvertmask >> 8) & 0xff);
|
||||
// MR32 register
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x20, prbs & 0xff);
|
||||
// MR40 register
|
||||
dcs_mrcmd(MR_MPC, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x28, (prbs >> 8) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 5a: AddrConfig Configuration
|
||||
//================================================================================
|
||||
void dcs_init_AddrCfg_Cfg(void)
|
||||
{
|
||||
|
||||
dcs_reg_write(rAMCC_ADDRCFG_ADDR, dcs_params.addrcfg);
|
||||
#if NUM_AMCCS == 2
|
||||
dcs_reg_write(rAMCC1_ADDRCFG_ADDR, dcs_params.addrcfg);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
//========================================
|
||||
// Caller Code should:
|
||||
// - Use MR Cmds to Query the Device
|
||||
//========================================
|
||||
|
||||
//================================================================================
|
||||
// Step 5b: Total Mem Size Config
|
||||
//================================================================================
|
||||
void dcs_init_TotalSize_Cfg(uint32_t total_size_Mbytes)
|
||||
{
|
||||
|
||||
dbgprintf(DCS_DBG_ASSESS_CONFIG, "Memory_size: %llu bytes\n",
|
||||
(((uint64_t)total_size_Mbytes) * MEG * NUM_AMCCS));
|
||||
// (Units of 128 MBs in the register)
|
||||
dcs_reg_write(rAMCC_DRAMACCCTRL_ADDR, ((total_size_Mbytes / NUM_AMCCS) / DCS_NUM_MEG_IN_DRAM_BLK) - 1);
|
||||
dcs_reg_write(rAMCC_MCCCHNLDEC_ADDR, dcs_params.chnldec);
|
||||
|
||||
#if NUM_AMCCS == 2
|
||||
dcs_reg_write(rAMCC1_DRAMACCCTRL_ADDR, ((total_size_Mbytes / NUM_AMCCS) / DCS_NUM_MEG_IN_DRAM_BLK) - 1);
|
||||
dcs_reg_write(rAMCC1_MCCCHNLDEC_ADDR, dcs_params.chnldec);
|
||||
#endif
|
||||
dbgprintf(DCS_DBG_ASSESS_CONFIG, "rAMCC_DRAMACCCTRL: 0x%08x\n", rAMCC_DRAMACCCTRL);
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 6: Switch from boot-clock speed to normal operation speed
|
||||
//================================================================================
|
||||
void dcs_init_Reenable_AMC_Scheduler(void)
|
||||
{
|
||||
// Wait 5 us before freq change to make sure all refreshes have been flushed
|
||||
dcs_spin(5, "After Refresh");
|
||||
|
||||
// Enable (again) the AMC Scheduler
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AMCCTRL, 0x00000003);
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 7: Setup registers for CA calibration for bucket 1
|
||||
//================================================================================
|
||||
void dcs_init_CA_Cal_Setup_Freq1(void)
|
||||
{
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xd, dcs_params.mr13cmd_step7);
|
||||
|
||||
if (izColdBoot) {
|
||||
if (izFPGA) {
|
||||
// MR11 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xb, 0x00);
|
||||
} else {
|
||||
// MR2 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x2, 0x52);
|
||||
// MR1 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x1, 0xae);
|
||||
// MR3 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x3, dcs_params.mr3cmd_step7);
|
||||
// MR22 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x16, dcs_params.mr22cmd);
|
||||
// MR11 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xb, dcs_params.mr11cmd);
|
||||
// MR12 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xc, 0x11);
|
||||
// MR14 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xe, 0x11);
|
||||
}
|
||||
dcs_reg_write_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, 0x00000200);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, 0x0200, 0x0000);
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 8: AMP Dynamic CA Vref Timing Calibration at Vmin 800MHz
|
||||
//================================================================================
|
||||
void dcs_init_CA_Cal_Freq1(void)
|
||||
{
|
||||
// Nothing to be done at this step for cold boot
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 9: Setup registers for DQ calibration for bucket 1
|
||||
//================================================================================
|
||||
void dcs_init_DQ_Cal_Setup_Freq1_a(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (izColdBoot) {
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0xd, dcs_params.mr13cmd_step9);
|
||||
}
|
||||
|
||||
dcs_spin(1, NULL);
|
||||
|
||||
if(izResume) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PWRMNGTEN, 0x00000002);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL, 0x01008888);
|
||||
|
||||
for(i = AMP_DQ0 ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_WRDQDQSSDLLCTRL(i), 0xFF00000C);
|
||||
for(i = AMP_CA ; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_SDLL_UPDATE_DEFER_EN(i), 0x00000000);
|
||||
for(i = AMP_DQ0; i < DCS_AMP_NUM_PHYS; i++)
|
||||
dcs_reg_write_all_chan(rDCS_AMP_MDLLOVRRD(i), 0x00000000);
|
||||
}
|
||||
}
|
||||
|
||||
// Caller code should change frequency to bucket 1
|
||||
void dcs_init_DQ_Cal_Setup_Freq1_b(void)
|
||||
{
|
||||
if (izColdBoot) {
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL, dcs_params.freqchngctl_step9);
|
||||
dcs_reg_poll_all_chan(rDCS_MCU_FREQCHNGCTL, 0x10000, 0x00000);
|
||||
|
||||
// Wait 2us for the soc update to finish
|
||||
dcs_spin(2, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 10: PHY write DQ calibration
|
||||
//================================================================================
|
||||
void dcs_init_wrdq_skew(void)
|
||||
{
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQSDQ_SKEWCTL(AMP_DQ0), 0x06000000);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQSDQ_SKEWCTL(AMP_DQ1), 0x06000000);
|
||||
}
|
||||
|
||||
void dcs_init_post_wrlvl(void)
|
||||
{
|
||||
if(dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQFLTCTRL(AMP_DQ0), 0x00000010);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQFLTCTRL(AMP_DQ1), 0x00000010);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 11: Setup registers for CA calibration for bucket 0
|
||||
//================================================================================
|
||||
void dcs_init_CA_Cal_Setup_Freq0(void)
|
||||
{
|
||||
if (izColdBoot) {
|
||||
|
||||
if(dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQFLTCTRL(AMP_DQ0), 0x00000000);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_DQFLTCTRL(AMP_DQ1), 0x00000000);
|
||||
}
|
||||
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0d, dcs_params.mr13cmd_step11);
|
||||
if (!izFPGA) {
|
||||
// MR2 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x02, dcs_params.mr2cmd_step11);
|
||||
// MR1 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x01, dcs_params.mr1cmd_step11);
|
||||
// MR3 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x03, dcs_params.mr3cmd_step11);
|
||||
}
|
||||
|
||||
// MR22 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x16, dcs_params.mr22cmd_step11);
|
||||
// MR11 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0b, (izFPGA) ? 0x00 : dcs_params.mr11cmd_step11);
|
||||
// MR12 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0c, dcs_params.mr12cmd_step11);
|
||||
// MR14 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0e, dcs_params.mr14cmd_step11);
|
||||
|
||||
if((dcs_params.supported_freqs & DCS_FREQ(1)) == 0) {
|
||||
dcs_reg_write_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, 0x00000200);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_CAWRLVLSDLLCODE, 0x200, 0x000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 12: AMP Dynamic CA Timing Calibration
|
||||
//================================================================================
|
||||
|
||||
//================================================================================
|
||||
// Step 13: Setup registers for DQ calibration for bucket 0
|
||||
//================================================================================
|
||||
void dcs_init_DQ_Cal_Setup_Freq0_a(void)
|
||||
{
|
||||
if (izColdBoot) {
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0d, dcs_params.mr13cmd_step13);
|
||||
|
||||
// Wait 1 us
|
||||
dcs_spin(1, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void dcs_init_DQ_Cal_Setup_Freq0_b(void)
|
||||
{
|
||||
if (izColdBoot) {
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL, 0x00010000);
|
||||
dcs_reg_poll_all_chan(rDCS_MCU_FREQCHNGCTL, 0x10000, 0x00000);
|
||||
|
||||
// Wait 2us for the soc update to finish
|
||||
dcs_spin(2, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 14: AMP Dynamic DQ Calibration
|
||||
//================================================================================
|
||||
|
||||
//================================================================================
|
||||
// Step 15: Setup Registers for Boot
|
||||
//================================================================================
|
||||
void dcs_init_Reg_for_Boot(void)
|
||||
{
|
||||
|
||||
#ifndef DCS_RUN_AT_50MHZ
|
||||
if (izColdBoot) {
|
||||
// MR13 register
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0d, dcs_params.mr13cmd_step15);
|
||||
}
|
||||
#endif
|
||||
if(izFPGA && !(dcs_params.supported_freqs & DCS_FREQ(1)))
|
||||
dcs_mrcmd(MR_WRITE, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x0d, 0x50);
|
||||
|
||||
// Wait 1 us
|
||||
dcs_spin(1, NULL);
|
||||
|
||||
if (izColdBoot) {
|
||||
dcs_reg_write_all_chan(rDCS_MCU_FREQCHNGCTL, dcs_params.freqchngctl_step15);
|
||||
|
||||
#if !DCS_DO_CALIBRATION
|
||||
// skip these for all silicon targets, where calibration is performed, also skip for any Maui A1 target
|
||||
if((dcs_cfg.chipID != 0x8000) || (dcs_cfg.chipID == 0x8000 && dcs_cfg.chipRev >= CHIP_REVISION_B0)) {
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDDQSDLL_DLYSEL(AMP_DQ0), 0x00000000);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDDQSDLL_DLYSEL(AMP_DQ1), 0x00000000);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ0), dcs_params.rdsdllctrl_step15);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ1), dcs_params.rdsdllctrl_step15);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ0), dcs_params.rdsdllctrl_step15 & 0x7, 0x0);
|
||||
dcs_reg_poll_all_chan(rDCS_AMP_RDSDLLCTRL(AMP_DQ1), dcs_params.rdsdllctrl_step15 & 0x7, 0x0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
if(!izFPGA)
|
||||
{
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWRDWRDQCALFULLSCANEN, 0x00000000);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_HWRDWRDQCALFULLSCANEN, 0x00000003);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 16: Enable Other Features
|
||||
//================================================================================
|
||||
void dcs_init_MoreFeatures(void)
|
||||
{
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AREFPARAM, dcs_params.arefparam);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ODTSZQC, dcs_params.odtszqc2);
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_QBREN, dcs_params.qbren_step16);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PSQWQCTL0, 0x00000100);
|
||||
|
||||
if (izColdBoot)
|
||||
dcs_enable_autorefresh();
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_DYN_ISEL_ASRTIME, dcs_params.b0dyniselasrtime);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B0_DYN_ISEL, dcs_params.b0dynisel);
|
||||
dcs_reg_write_all_chan(rDCS_AMPH_B1_DYN_ISEL, dcs_params.b1dynisel);
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 17: Enable Fast Critical Word Forwarding Feature
|
||||
//================================================================================
|
||||
void dcs_init_Fast_Critical_Word_Forwarding(void)
|
||||
{
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_QBRPARAM, dcs_params.qbrparam);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_QBREN, dcs_params.qbren);
|
||||
dcs_reg_write(rAMCC_MCCGEN_ADDR, dcs_params.mccgen);
|
||||
|
||||
|
||||
#if NUM_AMCCS == 2
|
||||
dcs_reg_write(rAMCC1_MCCGEN_ADDR, dcs_params.mccgen);
|
||||
|
||||
#endif // #if NUM_AMCCS == 2
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 18: Enable Power- and Clock-Gating Features; Config MCC and Global Timers
|
||||
//================================================================================
|
||||
void dcs_init_Gating_Global_Timers(void)
|
||||
{
|
||||
dcs_reg_write_all_chan(rDCS_AMP_AMPCLK(AMP_CA), dcs_params.caampclk);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_AMPCLK(AMP_DQ0), dcs_params.dqampclk);
|
||||
dcs_reg_write_all_chan(rDCS_AMP_AMPCLK(AMP_DQ1), dcs_params.dqampclk);
|
||||
dcs_reg_write_all_chan(rDCS_SPLLCTRL_MDLLPWRDNCFG(0), 0x00000001);
|
||||
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PWRMNGTEN, dcs_params.pwrmngten);
|
||||
dcs_reg_write(rGLBTIMER_PMGRWAKEUPCFG, 0x000001ff);
|
||||
|
||||
|
||||
if(!izFPGA) {
|
||||
|
||||
dcs_reg_write_all_chan(rDCS_MCU_PSQWQCTL1, 0x01e60120);
|
||||
}
|
||||
|
||||
|
||||
// Global Timer Setup
|
||||
dcs_reg_write(rGLBTIMER_PREFREQ2ALLBANKDLY(0), 0x00f000f0);
|
||||
dcs_reg_write(rGLBTIMER_PREFREQ2ALLBANKDLY(1), 0x00f000f0);
|
||||
dcs_reg_write(rGLBTIMER_PREFREQCHNG2FREQCHNGDLY(0), 0x02400240);
|
||||
dcs_reg_write(rGLBTIMER_PREFREQCHNG2FREQCHNGDLY(1), 0x02400240);
|
||||
dcs_reg_write(rGLBTIMER_MDLLTIMER, 0x000bb8); // 3000
|
||||
dcs_reg_write(rGLBTIMER_DCCTIMER, 0x000bb8);
|
||||
dcs_reg_write(rGLBTIMER_MDLLVOLTRAMPTIMER, 0x00004b); // 75
|
||||
dcs_reg_write(rGLBTIMER_CTRLUPDMASKTIMER, 0x00000f); // 15
|
||||
dcs_reg_write(rGLBTIMER_IDTTIMER, 0x007530); // 30000
|
||||
dcs_reg_write(rGLBTIMER_RDCALTIMER, 0x2dc6c0); // 3000000
|
||||
dcs_reg_write(rGLBTIMER_WRCALTIMER, 0x2dc6c0); // 3000000
|
||||
dcs_reg_write(rGLBTIMER_ZQCTIMER, 0x3d0900); // 4000000
|
||||
dcs_reg_write(rGLBTIMER_PERCAL_FREQCHNGTIMER, 0x000001); // 300000
|
||||
dcs_reg_write(rGLBTIMER_IMPCALTIMER, 0x002ee0); // 12000
|
||||
dcs_reg_write(rGLBTIMER_PERVREFCALCFG, 0x0000000b);
|
||||
dcs_reg_write(rGLBTIMER_FREQCHNGCFG, 0x000000ff);
|
||||
|
||||
// Dynamic Clk & Power Gating
|
||||
dcs_reg_write_all_chan(rDCS_MCU_AMCCLKPWRGATE, 0x050a0000);
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// Step 19: ODTS read & set interval for periodic MR4 on-die Temp sensor reading
|
||||
//================================================================================
|
||||
void dcs_init_ODTS(void)
|
||||
{
|
||||
uint8_t temp[16*8]; // Far more Channels/Ranks than we are likely ever to have/need
|
||||
// INSTEAD OF: uint8_t temp[dcs_cfg.num_dcs * dcs_cfg.num_rank];
|
||||
|
||||
// MR4 read to bring memory out of self-refresh
|
||||
dcs_mrcmd(MR_READ, dcs_cfg.num_dcs, dcs_cfg.num_rank, 0x4, (uintptr_t)temp);
|
||||
// M8 Bug radar #20346417, two writes to ensure propogation
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ODTSZQC, dcs_params.odtszqc3);
|
||||
dcs_reg_write_all_chan(rDCS_MCU_ODTSZQC, dcs_params.odtszqc3);
|
||||
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
@@ -0,0 +1,17 @@
|
||||
# Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
OPTIONS += \
|
||||
WITH_HW_DCS=1
|
||||
|
||||
ALL_OBJS += \
|
||||
$(LOCAL_DIR)/dcs.o \
|
||||
$(LOCAL_DIR)/dcs_init_lib_t8010.o
|
||||
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#include <debug.h>
|
||||
#include <platform/int.h>
|
||||
#include <platform/error_handler.h>
|
||||
#include <platform/soc/hwisr.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <platform/soc/miu.h>
|
||||
|
||||
// All errors (the remaining bits are perf counters)
|
||||
#define AMCC_IRERRDBG_INTEN_ALLERRORS ( \
|
||||
AMCC_IRERRDBG_INTSTS_MCC_TP_PAR_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCC_DAT_ONE_BIT_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCC_DAT_MULTI_BITS_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCC_AF_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCC_TP_MULTI_PAR_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCS_LS3_B_ALLOC_PAR_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCS_LS3_B_RESP_PAR_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCS_LS3_B_TOKEN_PAR_ERR_UMASK \
|
||||
| AMCC_IRERRDBG_INTSTS_MCS_LS3_B_DATA_PULL_PAR_ERR_UMASK \
|
||||
)
|
||||
|
||||
#define AMCC_IRERRDBG_INTSTS_ALLERRORS AMCC_IRERRDBG_INTEN_ALLERRORS
|
||||
|
||||
#define AMCC_IRERRDBG_MCC_AF_ERR_LOG2_AGENT_IODAP (0x88)
|
||||
|
||||
#define CP_COM_NORM_MSK_CLR_ALL (~0)
|
||||
#define CP_COM_NORM_MSK_ILLEGAL_COH_INTS ( \
|
||||
CP_COM_INT_NORM_MASK_SET_CCU0_ILLEGAL_PIO_ACCESS_INT_MSK_SET_UMASK \
|
||||
| CP_COM_INT_NORM_MASK_SET_CCU1_ILLEGAL_PIO_ACCESS_INT_MSK_SET_UMASK \
|
||||
)
|
||||
|
||||
#if NUM_AMCCS > 1
|
||||
#error "amc_int_handler() must be recoded for NUM_AMCCS > 1"
|
||||
#endif
|
||||
|
||||
static void amc_int_handler(void *arg __unused)
|
||||
{
|
||||
uint32_t intsts = rAMCC_IRERRDBG_INTSTS(0);
|
||||
|
||||
if ((intsts & (AMCC_IRERRDBG_INTEN_ALLERRORS & ~AMCC_IRERRDBG_INTSTS_MCC_AF_ERR_UMASK)) == 0) {
|
||||
// Whitelist errors caused by the IODAP agent (Astris) since
|
||||
// these are most likely caused by user input errors.
|
||||
uint32_t agent_id = AMCC_IRERRDBG_MCC_AF_ERR_LOG2_MCC_AF_ERR_AID_LOG_XTRCT(rAMCC_IRERRDBG_MCC_AF_ERR_LOG2(0));
|
||||
if (agent_id == AMCC_IRERRDBG_MCC_AF_ERR_LOG2_AGENT_IODAP) {
|
||||
dprintf(DEBUG_INFO, "AMC error from IODAP (ignored): 0x%x\n", intsts);
|
||||
|
||||
// Clear the interrupt and continue on.
|
||||
rAMCC_IRERRDBG_INTSTS(0) = intsts;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
panic("Received unexpected AMC error. AMCC_IRERRDBG_INTSTS = 0x%x\n", intsts);
|
||||
}
|
||||
|
||||
static void cp_int_handler(void *arg __unused) {
|
||||
panic("Received unexpected Coherency Point error. CP_COM_INT_NORM_REQUEST = 0x%x\n", rCP_COM_INT_NORM_REQUEST);
|
||||
}
|
||||
|
||||
static void enable_cp_checks()
|
||||
{
|
||||
install_int_handler(INT_COHERENCE_PNT_ERR, cp_int_handler, NULL);
|
||||
rCP_COM_INT_NORM_MASK_CLR = CP_COM_NORM_MSK_CLR_ALL;
|
||||
unmask_int(INT_COHERENCE_PNT_ERR);
|
||||
}
|
||||
|
||||
static void enable_amc_checks()
|
||||
{
|
||||
install_int_handler(INT_MEM_CONTROLLER0, amc_int_handler, NULL);
|
||||
rAMCC_IRERRDBG_INTEN(0) = AMCC_IRERRDBG_INTEN_ALLERRORS;
|
||||
if (rAMCC_IRERRDBG_INTSTS(0) & AMCC_IRERRDBG_INTSTS_ALLERRORS) {
|
||||
// AMC Interrupts, unlike the CP ones, don't seem to stick. If an error already exists
|
||||
// this early in bootup, we won't get an interrupt upon unmask.
|
||||
amc_int_handler(NULL);
|
||||
}
|
||||
rAMCC_IRERRDBG_INTSTS(0) = AMCC_IRERRDBG_INTSTS_ALLERRORS;
|
||||
unmask_int(INT_MEM_CONTROLLER0);
|
||||
}
|
||||
|
||||
void platform_enable_error_handler() {
|
||||
enable_amc_checks();
|
||||
enable_cp_checks();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# Copyright (C) 2011-2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
OPTIONS += \
|
||||
WITH_PLATFORM_ERROR_HANDLER=1
|
||||
|
||||
ALL_OBJS += \
|
||||
$(LOCAL_DIR)/error_handler.o
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef PLATFORM_APCIE_H
|
||||
#define PLATFORM_APCIE_H
|
||||
|
||||
#define APCIE_LANE_CFG_X1_X1_X1_X1 (0)
|
||||
#define APCIE_LANE_CFG_X2_X1_X1 (1)
|
||||
#define APCIE_LANE_CFG_X1_X1_X2 (2)
|
||||
#define APCIE_LANE_CFG_X2_X2 (3)
|
||||
|
||||
#define APCIE_LANE_CONFIG_NVME0_X1 APCIE_LANE_CFG_X1_X1_X1_X1
|
||||
#define APCIE_LANE_CONFIG_NVME0_X2 APCIE_LANE_CFG_X2_X1_X1
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef _APCIE_REGS_H
|
||||
#define _APCIE_REGS_H
|
||||
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <soc/t8010/a0/apcie_config.h>
|
||||
#include <soc/t8010/a0/apcie_lcount.h>
|
||||
#include <soc/t8010/a0/x2_pcie_rc.h>
|
||||
|
||||
#define APCIE_COUNTER_PORT_STRIDE (APCIE_LCOUNT_BLK_TIME_L0_1_OFFSET - APCIE_LCOUNT_BLK_TIME_L0_0_OFFSET)
|
||||
#define APCIE_NUM_COUNTERS (8)
|
||||
|
||||
#define APCIE_PORT_COUNTER_BASE_ADDR(port) (APCIE_COUNTER_BASE_ADDR + (port) * APCIE_COUNTER_PORT_STRIDE)
|
||||
#define APCIE_PORT_BASE_ADDR(port) (APCIE_CONFIG_BASE_ADDR + APCIE_CONFIG_PORT_STRIDE * (port))
|
||||
#define PCIE_PORT_BASE_ADDR(port) (PCI_CONFIG_BASE + ((port) << PCI_DEVICE_SHIFT))
|
||||
|
||||
#define rAPCIE_COUNTER_VALUE(port, n) (*(volatile uint32_t *)(APCIE_PORT_COUNTER_BASE_ADDR(port) + (n) * 4))
|
||||
#define rAPCIE_COUNTER_COMMAND(port) (*(volatile uint32_t *)(APCIE_PORT_COUNTER_BASE_ADDR(port) + APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_OFFSET))
|
||||
|
||||
#define APCIE_COUNTER_ENABLE APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_ENABLE_UMASK
|
||||
#define APCIE_COUNTER_CLEAR APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_CLEAR_UMASK
|
||||
#define APCIE_COUNTER_CAPTURE APCIE_LCOUNT_BLK_LCOUNT_COMMAND_0_CAPTURE_UMASK
|
||||
|
||||
#define PCIE_RC_CAP_LINK_CONTROL2_OFFSET(link) (PCIE_PORT_BASE_ADDR(link) + X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_LINK_CONTROL2_LINK_STATUS2_REG_OFFSET)
|
||||
#define PCIE_RC_CAP_LINK_CONTROL2_PCIE_TARGET_LINK_SPEED_UMASK X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_LINK_CONTROL2_LINK_STATUS2_REG_PCIE_CAP_TARGET_LINK_SPEED_UMASK
|
||||
|
||||
#define PCIE_RC_PORT_LOGIC_GEN2_CTRL_OFFSET(link) (PCIE_PORT_BASE_ADDR(link) + X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_GEN2_CTRL_OFF_OFFSET)
|
||||
#define PCIE_RC_PORT_LOGIC_GEN2_CTRL_NUM_OF_LANES_SHIFT X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_GEN2_CTRL_OFF_NUM_OF_LANES_SHIFT
|
||||
#define PCIE_RC_PORT_LOGIC_GEN2_CTRL_NUM_OF_LANES_UMASK X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_GEN2_CTRL_OFF_NUM_OF_LANES_UMASK
|
||||
|
||||
#define PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_OFFSET(link) (PCIE_PORT_BASE_ADDR(link) + X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_PORT_LINK_CTRL_OFF_OFFSET)
|
||||
#define PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_LINK_CAPABLE_SHIFT X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_PORT_LINK_CTRL_OFF_LINK_CAPABLE_SHIFT
|
||||
#define PCIE_RC_PORT_LOGIC_PORT_LINK_CTRL_LINK_CAPABLE_UMASK X2_PCIE_RC_X2_PCIE_DSP_PF0_PORT_LOGIC_PORT_LINK_CTRL_OFF_LINK_CAPABLE_UMASK
|
||||
|
||||
#define PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_OFFSET(link) (PCIE_PORT_BASE_ADDR(link) + X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_OFFSET)
|
||||
#define PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_PWR_ON_VALUE_SUPPORT_UMASK X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_PWR_ON_VALUE_SUPPORT_UMASK
|
||||
#define PCIE_RC_PORT_LOGIC_L1SUB_CAPABILITY_REG_COMM_MODE_SUPPORT_UMASK X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_COMM_MODE_SUPPORT_UMASK
|
||||
|
||||
#define rAPCIE_PMA_LANE_TX_XCVR_DIAG_FUNC_PWR_CTRL(lane) (*(volatile uint32_t *)(APCIE_PHY_PMA_TX_LANE_BASE_ADDR + (PMA_TX_LANE_REGISTERS_BLK_XCVR_DIAG_FUNC_PWR_CTRL_OFFSET + ((lane) * APCIE_PHY_PMA_TX_LANE_STRIDE))))
|
||||
#define rAPCIE_PMA_LANE_TX_XCVR_DIAG_DCYA(lane) (*(volatile uint32_t *)(APCIE_PHY_PMA_TX_LANE_BASE_ADDR + (PMA_TX_LANE_REGISTERS_BLK_XCVR_DIAG_DCYA_OFFSET + ((lane) * APCIE_PHY_PMA_TX_LANE_STRIDE))))
|
||||
#define rAPCIE_PMA_LANE_TX_DIAG_TX_BOOST(lane) (*(volatile uint32_t *)(APCIE_PHY_PMA_TX_LANE_BASE_ADDR + (PMA_TX_LANE_REGISTERS_BLK_TX_DIAG_TX_BOOST_OFFSET + ((lane) * APCIE_PHY_PMA_TX_LANE_STRIDE))))
|
||||
|
||||
#define rAPCIE_PMA_LANE_RX_REE_GEN_CTRL_EN(lane) (*(volatile uint32_t *)(APCIE_PHY_PMA_RX_LANE_BASE_ADDR + (PMA_RX_LANE_REGISTERS_BLK_RX_REE_GEN_CTRL_EN_OFFSET + ((lane) * APCIE_PHY_PMA_RX_LANE_STRIDE))))
|
||||
#define rAPCIE_PMA_LANE_RX_REE_FREE0_CFGD(lane) (*(volatile uint32_t *)(APCIE_PHY_PMA_RX_LANE_BASE_ADDR + (PMA_RX_LANE_REGISTERS_BLK_RX_REE_FREE0_CFGD_OFFSET + ((lane) * APCIE_PHY_PMA_RX_LANE_STRIDE))))
|
||||
|
||||
#endif /* _APCIE_REGS_H */
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __DCSCONFIG_H
|
||||
#define __DCSCONFIG_H
|
||||
|
||||
// Needful defnitions for the initializers below
|
||||
#include <drivers/dcs/dcs.h>
|
||||
#include <drivers/dcs/dcs_regs.h>
|
||||
#include <drivers/dcs/dcs_init_lib.h>
|
||||
#include <drivers/dcs/dcs_calibration.h>
|
||||
|
||||
#include SUB_PLATFORM_HEADER(dcsconfig)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,272 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __DCSCONFIG_T8010_H
|
||||
#define __DCSCONFIG_T8010_H
|
||||
|
||||
dcs_config_params_t dcs_params = {
|
||||
.supported_freqs = DCS_FREQ(0) | DCS_FREQ(1) | DCS_FREQ(3),
|
||||
.num_freqchngctl_regs = 5,
|
||||
.spllctrl_vco_1 = 0x00000015,
|
||||
.wrdqcalvrefcodecontrol = 0x19191111,
|
||||
.rddqcalvrefcodecontrol = 0x19199191,
|
||||
.pdn1 = 0x0,
|
||||
.modereg = 0x1a0c80f4,
|
||||
.modereg1 = 0x0000000c,
|
||||
.autoref_params = 0x0015005d,
|
||||
.pdn = 0x722762c6,
|
||||
.rnkcfg = 0x00006061,
|
||||
.casdllupdatectrl = 0x03030305,
|
||||
.dqsdllupdatectrl = 0x00030005,
|
||||
.rdsdllctrl_step2 = 0x00ff0002,
|
||||
.wrdqdqssdllctrl_step2 = 0xff000002,
|
||||
.cawrlvlsdllcode = 0x00ff01ff,
|
||||
.dlllocktim = 0x00c801f4,
|
||||
.rdwrdqcaltiming_f0 = 0x01060508,
|
||||
.rdwrdqcalseglen_f0 = 0x0d0b1313,
|
||||
.rdwrdqcaltiming_f1 = 0x01060305,
|
||||
.rdwrdqcalseglen_f1 = 0x09070d0d,
|
||||
.rdwrdqcaltiming_f3 = 0x01060308,
|
||||
.rddqcalpatprbs4i = 0x55553c5a,
|
||||
.wrdqcalpatprbs4i = 0x00003c5a,
|
||||
.maxrddqssdllmulfactor = 0x00a00d14,
|
||||
.maxwrdqssdllmulfactor = 0xa0a00d0d,
|
||||
.dllupdtctrl1 = 0x80000080,
|
||||
.dllupdtintvl = 0x10200020,
|
||||
.dcccontrol = 0x10050b27,
|
||||
.cbdrivestr = 0x77838317,
|
||||
.cbioctl = 0x0002000b,
|
||||
.ckdrivestr = 0x77838317,
|
||||
.ckioctl = 0x0000000f,
|
||||
.b0drivestr = 0x77838317,
|
||||
.b0ioctl = 0x7160000f,
|
||||
.b0odt = 0x01c00333,
|
||||
.b0odtctrl = 0x00000007,
|
||||
.b1drivestr = 0x77838317,
|
||||
.b1odtctrl = 0x00000007,
|
||||
.b1ioctl = 0x7160000f,
|
||||
.b1odt = 0x01c00333,
|
||||
.dqs0drivestr = 0x77838317,
|
||||
.dqs0ioctl = 0x7160000f,
|
||||
.dqs0odt = 0x01c00333,
|
||||
.dqs0zdetbiasen = 0x0007082a,
|
||||
.dqs0odtctrl = 0x00000007,
|
||||
.dqs1drivestr = 0x77838317,
|
||||
.dqs1ioctl = 0x7160000f,
|
||||
.dqs1odt = 0x01c00333,
|
||||
.dqs1zdetbiasen = 0x0007082a,
|
||||
.dqs1odtctrl = 0x00000007,
|
||||
.zcalfsm1 = 0x00887f7f,
|
||||
.zcalfsm0 = 0x000f031b,
|
||||
.spare0 = 0x00000016,
|
||||
.hwrddqcaltvref = 0x08080808,
|
||||
.hwwrdqcaltvref = 0x323286c8,
|
||||
.arefparam = 0x08012019,
|
||||
.autoref_params2 = 0x0017005d,
|
||||
.odtszqc = 0x00001000,
|
||||
.longsr = 0x01012008,
|
||||
.freqchngctl_step3 = 0x00010000,
|
||||
.mr3cmd = 0xf3,
|
||||
.mr13cmd = 0x18,
|
||||
.addrcfg = 0x00030201,
|
||||
.chnldec = 0x00050220,
|
||||
// steps 7-14 are skipped for FPGA since only freq used is 50 MHz
|
||||
// <rdar://problem/19339246> Cayman: Implement stesp 7-14 of the memory init sequence (only used on silicon)
|
||||
// .mr3cmd_step11 = 0xb2,
|
||||
.mr13cmd_step15 = 0x50,
|
||||
.freqchngctl_step15 = 0x00009999,
|
||||
.rdsdllctrl_step15 = 0x00140004,
|
||||
.odtszqc2 = 0xc0001000,
|
||||
.qbren_step16 = 0x0000000f,
|
||||
.b0dyniselasrtime = 0x00001c25,
|
||||
.b0dynisel = 0x00000003,
|
||||
.b1dynisel = 0x00000003,
|
||||
.qbrparam = 0x00001070,
|
||||
.qbren = 0x0000000f,
|
||||
.mccgen = 0x00100124,
|
||||
.caampclk = 0x8a000000,
|
||||
.dqampclk = 0x80000000,
|
||||
.pwrmngten = 0x00000033,
|
||||
.odtszqc3 = 0xc0003320,
|
||||
|
||||
.freq = {
|
||||
{ // 1600MHz
|
||||
.clk_period = CLK_PERIOD_1600,
|
||||
.freqchngctl = {0x18cd104d, 0x110c110e, 0xa303440b, 0xde012d02, 0x00000416},
|
||||
.freqchngtim = 0x000c1108,
|
||||
.lat = 0x00113387,
|
||||
.phyrdwrtim = 0x00060d0c,
|
||||
.caspch = 0x63e2080f,
|
||||
.act = 0x2008110f,
|
||||
.autoref = 0x489000a0,
|
||||
.selfref = 0xa0096012,
|
||||
.pdn = 0x00000076,
|
||||
.derate = 0x4d05a910,
|
||||
.lat2 = 0x00123387,
|
||||
.tat = 0x01412222,
|
||||
.mifqmaxctrl = 0x00000100,
|
||||
.cavref = 0x00000003,
|
||||
.dqvref = 0x00c00000,
|
||||
.dqdficaltiming = 0x04060604,
|
||||
.rddqcalwindow = 0x00f801d1,
|
||||
.wrdqcalwindow = 0x012f0360,
|
||||
.rdcapcfg = 0x00000810,
|
||||
.autoref2 = 0x48900092,
|
||||
},
|
||||
{ // 1066MHz
|
||||
.freqchngctl = {0x18cd104d, 0x110c110e, 0xd303220b, 0xbe011b02, 0x00000216},
|
||||
.freqchngtim = 0x000c1108,
|
||||
.lat = 0x001022c5,
|
||||
.phyrdwrtim = 0x00040c09,
|
||||
.caspch = 0x4297060a,
|
||||
.act = 0x16060c0a,
|
||||
.autoref = 0x3060006b,
|
||||
.selfref = 0x6b064012,
|
||||
.pdn = 0x00000054,
|
||||
.derate = 0x34b3760b,
|
||||
.lat2 = 0x001122c5,
|
||||
.tat = 0x01312222,
|
||||
.cavref = 0x00000003,
|
||||
.dqvref = 0x00c00000,
|
||||
.cadficaltiming = 0x04060604,
|
||||
.dqdficaltiming = 0x04060604,
|
||||
.rddqcalwindow = 0x00f801d1,
|
||||
.wrdqcalwindow = 0x012f0360,
|
||||
.rdcapcfg = 0x2000070c,
|
||||
.autoref2 = 0x30600061,
|
||||
},
|
||||
{ // 200MHz
|
||||
.freqchngctl = {0x18cd104d, 0x590c590e, 0xf303000b, 0x8e010002, 0x00000016},
|
||||
.freqchngtim = 0x000c1108,
|
||||
.phyrdwrtim = 0x00010b01,
|
||||
.caspch = 0x40c50402,
|
||||
.act = 0x04020302,
|
||||
.autoref = 0x09120014,
|
||||
.selfref = 0x28013012,
|
||||
.pdn = 0x00000033,
|
||||
.derate = 0x0c212142,
|
||||
.lat2 = 0x001110c2,
|
||||
.tat = 0x01212222,
|
||||
.cavref = 0x00000003,
|
||||
.dqvref = 0x00000000,
|
||||
.cadficaltiming = 0x04060604,
|
||||
.dqdficaltiming = 0x04060604,
|
||||
.rdcapcfg = 0x40000406,
|
||||
.autoref2 = 0x09120013,
|
||||
},
|
||||
{ // 50MHz
|
||||
.freqchngctl = {0x18cd104d, 0x590c590e, 0xf303000b, 0x8e010002, 0x00000016},
|
||||
.freqchngtim = 0x000c1108,
|
||||
.phyrdwrtim = 0x00010901,
|
||||
.caspch = 0x40c20402,
|
||||
.act = 0x02020404,
|
||||
.autoref = 0x03050005,
|
||||
.selfref = 0x28006012,
|
||||
.pdn = 0x00000033,
|
||||
.derate = 0x10412082,
|
||||
.lat2 = 0x001110c2,
|
||||
.tat = 0x01212222,
|
||||
.mifqmaxctrl = 0x00000001,
|
||||
.cavref = 0x00000003,
|
||||
.dqvref = 0x00000000,
|
||||
.cadficaltiming = 0x02060602,
|
||||
.dqdficaltiming = 0x02060602,
|
||||
.rdcapcfg = 0x60000406,
|
||||
.autoref2 = 0x03050005,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#define BIT32_MASKFULL (0xFFFFFFFF)
|
||||
#define BIT32_MASK(_n) (BIT32_MASKFULL >> (32 - (_n)))
|
||||
#define BIT32_MASK_VAL(_h,_l,_d) (((_d) & BIT32_MASK((_h) - (_l) + 1)) << (_l))
|
||||
#define BIT32_MASK_HI_LO(_h,_l) BIT32_MASK_VAL(_h,_l,BIT32_MASKFULL)
|
||||
#define DCS_MASK_VAL(_h,_l,_d) BIT32_MASK_HI_LO(_h,_l) , BIT32_MASK_VAL(_h,_l,_d)
|
||||
|
||||
// DCS Tunables for t8010
|
||||
// Tunables Spec versions:
|
||||
// MCU: https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/tunables/MCU.html dated 2015/02/09
|
||||
// Notes:
|
||||
// All channels are tuned in exactly the same way
|
||||
// Registers with all fields' tunable values matching the reset value omitted
|
||||
const dcs_tunable_t dcs_tunables[] = {
|
||||
|
||||
{ rDCS_MCU_CLKGATE, DCS_MASK_VAL(19, 16, 0x1) },
|
||||
{ rDCS_MCU_CLKGATE, DCS_MASK_VAL(15, 12, 0x3) },
|
||||
{ rDCS_MCU_CLKGATE, DCS_MASK_VAL( 8, 7, 0x2) },
|
||||
{ rDCS_MCU_CLKGATE, DCS_MASK_VAL( 6, 4, 0x1) },
|
||||
|
||||
{ rDCS_MCU_AMCCLKPWRGATE, DCS_MASK_VAL(12, 12, 0x1) },
|
||||
{ rDCS_MCU_AMCCLKPWRGATE, DCS_MASK_VAL( 8, 8, 0x1) },
|
||||
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL(31, 24, 0xff) },
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL(20, 20, 0x0) },
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL(16, 16, 0x1) },
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL(12, 12, 0x0) },
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL( 8, 8, 0x1) },
|
||||
{ rDCS_MCU_PSQRQCTL0, DCS_MASK_VAL( 4, 4, 0x1) },
|
||||
|
||||
{ rDCS_MCU_PSQRQTIMER0, DCS_MASK_VAL(27, 16, 0x014) },
|
||||
{ rDCS_MCU_PSQRQTIMER0, DCS_MASK_VAL(11, 0, 0x040) },
|
||||
|
||||
{ rDCS_MCU_PSQRQTIMER1, DCS_MASK_VAL(27, 16, 0x00f) },
|
||||
{ rDCS_MCU_PSQRQTIMER1, DCS_MASK_VAL(11, 0, 0x040) },
|
||||
|
||||
{ rDCS_MCU_PSQRQBRST, DCS_MASK_VAL(28, 24, 0x04) },
|
||||
{ rDCS_MCU_PSQRQBRST, DCS_MASK_VAL(20, 16, 0x10) },
|
||||
{ rDCS_MCU_PSQRQBRST, DCS_MASK_VAL(12, 8, 0x04) },
|
||||
{ rDCS_MCU_PSQRQBRST, DCS_MASK_VAL( 4, 0, 0x10) },
|
||||
|
||||
{ rDCS_MCU_PSQRQSCHCRD, DCS_MASK_VAL(23, 16, 0x10) },
|
||||
{ rDCS_MCU_PSQRQSCHCRD, DCS_MASK_VAL(15, 8, 0x14) },
|
||||
{ rDCS_MCU_PSQRQSCHCRD, DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
{ rDCS_MCU_PSQWQ_CTL(0), DCS_MASK_VAL(16, 16, 0x1) },
|
||||
{ rDCS_MCU_PSQWQ_CTL(0), DCS_MASK_VAL( 8, 8, 0x1) },
|
||||
|
||||
// part of init sequence, so have to apply tunables even if same as reset values
|
||||
{ rDCS_MCU_PSQWQ_CTL(1), DCS_MASK_VAL(31, 16, 0x01e6) },
|
||||
{ rDCS_MCU_PSQWQ_CTL(1), DCS_MASK_VAL(15, 0, 0x02da) },
|
||||
|
||||
{ rDCS_MCU_PSQWQBRST, DCS_MASK_VAL(28, 24, 0x04) },
|
||||
{ rDCS_MCU_PSQWQBRST, DCS_MASK_VAL(20, 16, 0x08) },
|
||||
{ rDCS_MCU_PSQWQBRST, DCS_MASK_VAL(12, 8, 0x04) },
|
||||
{ rDCS_MCU_PSQWQBRST, DCS_MASK_VAL( 4, 0, 0x10) },
|
||||
|
||||
{ rDCS_MCU_PSQWQSCHCRD, DCS_MASK_VAL(23, 16, 0x10) },
|
||||
{ rDCS_MCU_PSQWQSCHCRD, DCS_MASK_VAL(15, 8, 0x14) },
|
||||
{ rDCS_MCU_PSQWQSCHCRD, DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
{ rDCS_MCU_QOSLLT, DCS_MASK_VAL( 8, 8, 0x1) },
|
||||
{ rDCS_MCU_QOSLLT, DCS_MASK_VAL( 4, 0, 0x1f) },
|
||||
|
||||
{ rDCS_MCU_SBQOSUPGCTL, DCS_MASK_VAL(31, 31, 0x1) },
|
||||
{ rDCS_MCU_SBQOSUPGCTL, DCS_MASK_VAL(15, 8, 0x6f) },
|
||||
{ rDCS_MCU_SBQOSUPGCTL, DCS_MASK_VAL( 7, 0, 0x6e) },
|
||||
|
||||
// DRAM Cfg
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(0), DCS_MASK_VAL(31, 16, 0x0300) },
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(0), DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(1), DCS_MASK_VAL(31, 16, 0x0200) },
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(1), DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(2), DCS_MASK_VAL(31, 16, 0x0180) },
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(2), DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(3), DCS_MASK_VAL(31, 16, 0x0017) },
|
||||
{ rDCS_MCU_PWRMNGTPARAM_FREQ(3), DCS_MASK_VAL( 7, 0, 0x00) },
|
||||
|
||||
// Alternate End Marker
|
||||
// { 0, 0, 0 }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_ERROR_HANDLER_H
|
||||
#define __PLATFORM_ERROR_HANDLER_H
|
||||
|
||||
void platform_enable_error_handler();
|
||||
|
||||
#endif // __PLATFORM_ERROR_HANDLER_H
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_GPIODEF_H
|
||||
#define __PLATFORM_GPIODEF_H
|
||||
|
||||
#include <platform.h>
|
||||
#include <platform/gpio.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
|
||||
#if WITH_TARGET_CONFIG
|
||||
# include <target/gpiodef.h>
|
||||
#endif
|
||||
|
||||
#include SUB_PLATFORM_HEADER(gpiodef)
|
||||
|
||||
#endif /* ! __PLATFORM_GPIODEF_H */
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_GPIODEF_t8010_H
|
||||
#define __PLATFORM_GPIODEF_t8010_H
|
||||
|
||||
#if !SUB_PLATFORM_T8010
|
||||
#error "Only include for t8010 platform"
|
||||
#endif
|
||||
|
||||
/* t8010 specific gpio -> pin mappings - Cayman I/O Spreadsheet v2.05 */
|
||||
|
||||
/* Boot configuration pins */
|
||||
#define GPIO_BOOT_CONFIG0 GPIO(167)
|
||||
#define GPIO_BOOT_CONFIG1 GPIO(204)
|
||||
#define GPIO_BOOT_CONFIG2 GPIO(207)
|
||||
|
||||
/* Boot configuration pin encodings */
|
||||
#define BOOT_CONFIG_SPI0 (0)
|
||||
#define BOOT_CONFIG_SPI0_TEST (1)
|
||||
#define BOOT_CONFIG_NVME0_X2 (2)
|
||||
#define BOOT_CONFIG_NVME0_X2_TEST (3)
|
||||
#define BOOT_CONFIG_NVME0_X1 (4)
|
||||
#define BOOT_CONFIG_NVME0_X1_TEST (5)
|
||||
#define BOOT_CONFIG_SLOW_SPI0_TEST (6)
|
||||
#define BOOT_CONFIG_FAST_SPI0_TEST (7)
|
||||
|
||||
#define GPIO_REQUEST_DFU1 GPIO(179) // Formerly HOLD_KEY
|
||||
#define GPIO_REQUEST_DFU2 GPIO(180) // Formerly MENU_KEY
|
||||
#define GPIO_FORCE_DFU GPIO(205) // FORCE_DFU
|
||||
#define GPIO_DFU_STATUS GPIO(206) // DFU_STATUS
|
||||
|
||||
#define SPI_NOR0 (0)
|
||||
|
||||
#define GPIO_SPI0_SCLK GPIO(184)
|
||||
#define GPIO_SPI0_MOSI GPIO(185)
|
||||
#define GPIO_SPI0_MISO GPIO(186)
|
||||
#define GPIO_SPI0_SSIN GPIO(187)
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
#define GPIO_SPI0_CS GPIO(GPIO_PAD_SPI, 0)
|
||||
#else
|
||||
#define GPIO_SPI0_CS GPIO(187) // Alias of GPIO_SPI0_SSIN
|
||||
#endif
|
||||
|
||||
#define GPIO_IIC0_SCL GPIO(197)
|
||||
#define GPIO_IIC0_SDA GPIO(196)
|
||||
#define GPIO_IIC1_SCL GPIO(40)
|
||||
#define GPIO_IIC1_SDA GPIO(39)
|
||||
#define GPIO_IIC2_SCL GPIO(133)
|
||||
#define GPIO_IIC2_SDA GPIO(132)
|
||||
#define GPIO_IIC3_SCL GPIO(42)
|
||||
#define GPIO_IIC3_SDA GPIO(41)
|
||||
|
||||
#define GPIO_PCIE0_PERST GPIO(12)
|
||||
#define GPIO_PCIE1_PERST GPIO(13)
|
||||
#define GPIO_PCIE2_PERST GPIO(14)
|
||||
#define GPIO_PCIE3_PERST GPIO(15)
|
||||
#define GPIO_PCIE0_CLKREQ GPIO(16)
|
||||
#define GPIO_PCIE1_CLKREQ GPIO(17)
|
||||
#define GPIO_PCIE2_CLKREQ GPIO(18)
|
||||
#define GPIO_PCIE3_CLKREQ GPIO(19)
|
||||
|
||||
#define GPIO_NAND_SYS_CLK GPIO(10)
|
||||
|
||||
#endif /* ! __PLATFORM_GPIODEF_t8010_H */
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_IMAGE_DEVICES_H
|
||||
#define __PLATFORM_IMAGE_DEVICES_H
|
||||
|
||||
static const struct image_device platform_image_devices[] = {
|
||||
#if defined(WITH_HW_ASP)
|
||||
{ "asp_fw", 0x00000 },
|
||||
#elif defined(WITH_ANC_FIRMWARE)
|
||||
{ "anc_firmware", 0x00000 },
|
||||
#endif
|
||||
#if defined(WITH_NVME)
|
||||
{ "nvme_firmware0", 0x0000 },
|
||||
#endif
|
||||
#if !defined(WITH_HW_ASP) && !defined(WITH_ANC_FIRMWARE) && !defined(WITH_NVME)
|
||||
{ "nor0", 0x00000 },
|
||||
#endif
|
||||
};
|
||||
|
||||
#if WITH_SYSCFG
|
||||
static const struct image_device platform_syscfg_devices[] = {
|
||||
#if defined(WITH_NAND_BOOT)
|
||||
{ "nand_syscfg", 0x00000 },
|
||||
#endif
|
||||
#if defined(WITH_NVME)
|
||||
{ "nvme_syscfg0", 0x0000 },
|
||||
#endif
|
||||
#if !defined(WITH_NAND_BOOT) && !defined(WITH_NVME)
|
||||
{ "nor0", 0x00000 },
|
||||
#endif
|
||||
};
|
||||
#endif /* WITH_SYSCFG */
|
||||
|
||||
#endif /* ! __PLATFORM_IMAGE_DEVICES_H */
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_MEMCONFIG_H
|
||||
#define __PLATFORM_MEMCONFIG_H
|
||||
|
||||
/* T8010 SoC Mem Pin Configuration */
|
||||
|
||||
static const gpio_t memory_interface_gpios[] = {
|
||||
/* Not needed */
|
||||
};
|
||||
#endif /* ! __PLATFORM_MEMCONFIG_H */
|
||||
@@ -0,0 +1,258 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_MEMMAP_H
|
||||
#define __PLATFORM_MEMMAP_H
|
||||
|
||||
// <rdar://problem/18127631>Remove memory map hack in s8000's memmap.h
|
||||
//#include <platform/memmap_defaults.h>
|
||||
#define DEFAULT_LOAD_ADDRESS (INSECURE_MEMORY_BASE)
|
||||
#define DEFAULT_LOAD_SIZE (0x08000000ULL) // 128 MB instead of 64 MB in memmap_defaults.h
|
||||
#define DEFAULT_KERNEL_ADDRESS (DEFAULT_LOAD_ADDRESS + DEFAULT_LOAD_SIZE)
|
||||
#define DEFAULT_KERNEL_SIZE (0x03F00000ULL)
|
||||
#define DEFAULT_DEVICETREE_ADDRESS (DEFAULT_KERNEL_ADDRESS + DEFAULT_KERNEL_SIZE)
|
||||
#define DEFAULT_DEVICETREE_SIZE (0x00100000ULL)
|
||||
#define DEFAULT_RAMDISK_ADDRESS (DEFAULT_DEVICETREE_ADDRESS + DEFAULT_DEVICETREE_SIZE)
|
||||
#define DEFAULT_RAMDISK_SIZE (0x04000000ULL)
|
||||
#define DEFAULT_FREE_ADDRESS (DEFAULT_RAMDISK_ADDRESS + DEFAULT_RAMDISK_SIZE)
|
||||
|
||||
/* T8010 specific memory map */
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// 0x800000000 + dram_size -------------------------------
|
||||
// | NVMe (12MiB) |
|
||||
// | |
|
||||
// |-----------------------------|
|
||||
// | Consistent Debug (16KiB) |
|
||||
// |-----------------------------|
|
||||
// | Sleep Token Buffer (16KiB) |
|
||||
// |-----------------------------|
|
||||
// | DRAM Config Sequence (16KiB)|
|
||||
// |-----------------------------|
|
||||
// | Panic (512KiB) |
|
||||
// |-----------------------------|
|
||||
// | Display |
|
||||
// | (Framebuffer + scratch) |
|
||||
// | |
|
||||
// | |
|
||||
// |-----------------------------|
|
||||
// | |
|
||||
// | iBoot (Heap) |
|
||||
// | (Variable size depending |
|
||||
// (Cayman) | on DISPLAY_SIZE) |
|
||||
// 0x870180000 --> |-----------------------------|
|
||||
// | iBoot (Trampoline) |
|
||||
// (Cayman) | (BOOT_TRAMPOLINE_SIZE) |
|
||||
// 0x87017C000 --> |-----------------------------|
|
||||
// | iBoot (Stacks) |
|
||||
// (Cayman) | (STACKS_SIZE) |
|
||||
// 0x870178000 --> |-----------------------------|
|
||||
// | iBoot (Page Tables) |
|
||||
// (Cayman) | (PAGE_TABLES_SIZE) |
|
||||
// 0x870100000 --> |-----------------------------|
|
||||
// | iBoot (Text + Data) |
|
||||
// (Cayman) | (TEXT_FOOTPRINT) |
|
||||
// 0x870000000 --> |-----------------------------| <-- 0x800000000 + dram_size - 256MB
|
||||
// | |
|
||||
// | Unused |
|
||||
// | |
|
||||
// |-----------------------------|
|
||||
// | |
|
||||
// | (Ramdisk) |
|
||||
// | (Kernel + DeviceTree) |
|
||||
// | Secure memory |
|
||||
// | |
|
||||
// |-----------------------------|
|
||||
// | |
|
||||
// | Load region / |
|
||||
// | Insecure Memory |
|
||||
// | (overlaps with TZ0) | |-----------------------------|
|
||||
// | | | TZ0 (varies) |
|
||||
// 0x800000000 --> ------------------------------- -------------------------------
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define SDRAM_BASE (0x800000000ULL)
|
||||
#define SDRAM_BANK_LEN (SDRAM_LEN)
|
||||
#define SDRAM_BANK_COUNT (1)
|
||||
#define SDRAM_END (SDRAM_BASE + SDRAM_LEN)
|
||||
|
||||
#define VROM_BASE (0x100000000ULL)
|
||||
#define VROM_BANK_LEN (0x002000000ULL)
|
||||
#define VROM_RSVD (0x00080000ULL) // 512 KiB reserved for SecureROM testing
|
||||
#define SRAM_BASE (0x180000000ULL)
|
||||
#define SRAM_LEN (0x000200000ULL) // 2 MiB
|
||||
#define SRAM_BANK_LEN (SRAM_LEN) // SRAM should be in a 32 MB decode region
|
||||
#define SRAM_BANK_COUNT (1)
|
||||
#define SRAM_END (SRAM_BASE + SRAM_LEN)
|
||||
|
||||
#define IO_BASE (0x200000000ULL)
|
||||
#define IO_SIZE (0x020000000ULL)
|
||||
|
||||
#define PCI_REG_BASE (0x600000000ULL)
|
||||
#define PCI_REG_LEN (0x00C000000ULL)
|
||||
#define PCI_CONFIG_BASE (0x610000000ULL)
|
||||
#define PCI_CONFIG_LEN (0x10000000ULL)
|
||||
#define PCI_32BIT_BASE (0x7C0000000ULL)
|
||||
#define PCI_32BIT_LEN (0x002000000ULL) // 32 MiB fits nicely into a 32 MiB L2 MMU block
|
||||
|
||||
#define SECUREROM_LOAD_ADDRESS (VROM_BASE)
|
||||
|
||||
/* reserved for ASP/NVMe */
|
||||
// NOTE ASP_SIZE is now defined by the platform or target makefile.
|
||||
#define ASP_BASE (SDRAM_END - ASP_SIZE)
|
||||
|
||||
#define CONSISTENT_DEBUG_SIZE (0x00004000ULL)
|
||||
#define CONSISTENT_DEBUG_BASE (ASP_BASE - CONSISTENT_DEBUG_SIZE)
|
||||
|
||||
/* reserved area for sleep token info */
|
||||
#define SLEEP_TOKEN_BUFFER_SIZE (0x00004000ULL)
|
||||
#define SLEEP_TOKEN_BUFFER_BASE (CONSISTENT_DEBUG_BASE - SLEEP_TOKEN_BUFFER_SIZE)
|
||||
|
||||
/* reserved area for config sequence region */
|
||||
#define DRAM_CONFIG_SEQ_SIZE (0x00004000ULL)
|
||||
#define DRAM_CONFIG_SEQ_BASE (SLEEP_TOKEN_BUFFER_BASE - DRAM_CONFIG_SEQ_SIZE)
|
||||
|
||||
/* reserved area for panic info */
|
||||
#define PANIC_SIZE (0x00080000ULL)
|
||||
#define PANIC_BASE (DRAM_CONFIG_SEQ_BASE - PANIC_SIZE)
|
||||
|
||||
/* reserved area for display */
|
||||
// DISPLAY_SIZE comes from platform's rules.mk
|
||||
#define DISPLAY_BASE (PANIC_BASE - DISPLAY_SIZE)
|
||||
|
||||
// Reserved for TZ0/SEP
|
||||
// TZ0_SIZE is defined by the platform or target makefile
|
||||
#define TZ0_BASE (SDRAM_BASE)
|
||||
|
||||
/* where to stick heap and insecure memory */
|
||||
#if APPLICATION_SECUREROM
|
||||
|
||||
// SecureROM SRAM memory map
|
||||
//
|
||||
// ROM Testing 0x000000 - 0x07FFFF ( 512 KiB)
|
||||
// Data 0x080000 - 0x09FFFF ( 128 KiB)
|
||||
// Page Tables 0x0A0000 - 0x0A7FFF ( 32 KiB)
|
||||
// Stacks 0x0A8000 - 0x0ABFFF ( 16 KiB)
|
||||
// Boot Trampoline 0x0AC000 - 0x0AFFFF ( 16 KiB)
|
||||
// DFU Region 0x0B0000 - 0x1AFFFF (1024 KiB)
|
||||
// Heap 0x1B0000 - 0x1FFFFF ( 320 KiB)
|
||||
|
||||
// DATA_BASE comes from platform/t8010/rules.mk
|
||||
#define DATA_SIZE (0x00020000ULL)
|
||||
|
||||
#define PAGE_TABLES_BASE (DATA_BASE + DATA_SIZE)
|
||||
#define PAGE_TABLES_SIZE (0x00008000ULL)
|
||||
|
||||
#define STACKS_BASE (PAGE_TABLES_BASE + PAGE_TABLES_SIZE)
|
||||
#define STACKS_SIZE (0x00004000ULL)
|
||||
|
||||
#define BOOT_TRAMPOLINE_BASE (STACKS_BASE + STACKS_SIZE)
|
||||
#define BOOT_TRAMPOLINE_SIZE (0x00004000ULL)
|
||||
|
||||
#define INSECURE_MEMORY_BASE (BOOT_TRAMPOLINE_BASE + BOOT_TRAMPOLINE_SIZE)
|
||||
#define INSECURE_MEMORY_SIZE (0x00100000ULL)
|
||||
|
||||
#define HEAP_BASE (INSECURE_MEMORY_BASE + INSECURE_MEMORY_SIZE)
|
||||
#define HEAP_END (SRAM_END)
|
||||
#define HEAP_SIZE (HEAP_END - HEAP_BASE)
|
||||
#define HEAP_GUARD (HEAP_END)
|
||||
|
||||
#endif /* APPLICATION_SECUREROM */
|
||||
|
||||
#if APPLICATION_IBOOT
|
||||
|
||||
#if WITH_DFU_MODE
|
||||
|
||||
// iBSS/LLB SRAM memory map
|
||||
//
|
||||
// ROM Testing 0x000000 - 0x07FFFF ( 512 KiB)
|
||||
// Page Tables 0x080000 - 0x097FFF ( 96 KiB)
|
||||
// Stacks 0x098000 - 0x09BFFF ( 16 KiB)
|
||||
// <unused> 0x09C000 - 0x0AFFFF ( 96 KiB)
|
||||
// Code/Data 0x0B0000 - 0x1AFFFF (1024 KiB)
|
||||
// Boot Trampoline 0x1B0000 - 0x1B3FFF ( 16 KiB)
|
||||
// Heap 0x1B4000 - 0x1FFFFF ( 304 KiB)
|
||||
|
||||
#define PAGE_TABLES_BASE (SRAM_BASE + VROM_RSVD)
|
||||
#define PAGE_TABLES_SIZE (0x0018000ULL)
|
||||
|
||||
#define STACKS_BASE (PAGE_TABLES_BASE + PAGE_TABLES_SIZE)
|
||||
#define STACKS_SIZE (EXCEPTION_STACK_SIZE + BOOTSTRAP_STACK_SIZE + INTERRUPT_STACK_SIZE)
|
||||
|
||||
#define CODE_DATA_END (TEXT_BASE + TEXT_FOOTPRINT)
|
||||
|
||||
#define BOOT_TRAMPOLINE_BASE (CODE_DATA_END)
|
||||
#define BOOT_TRAMPOLINE_SIZE (PAGE_SIZE)
|
||||
|
||||
#define HEAP_BASE (BOOT_TRAMPOLINE_BASE + BOOT_TRAMPOLINE_SIZE)
|
||||
#define HEAP_END (SRAM_END)
|
||||
#define HEAP_SIZE (HEAP_END - HEAP_BASE)
|
||||
#define HEAP_GUARD (HEAP_END)
|
||||
|
||||
// Reserved area for iBoot
|
||||
#define IBOOT_BASE (SDRAM_END - SDRAM_LOAD_OFFSET)
|
||||
#define IBOOT_SIZE (0x01400000ULL)
|
||||
|
||||
#define INSECURE_MEMORY_BASE (IBOOT_BASE)
|
||||
#define INSECURE_MEMORY_SIZE (IBOOT_SIZE)
|
||||
|
||||
#else /* !WITH_DFU_MODE */
|
||||
|
||||
// iBoot/iBEC SDRAM memory map
|
||||
|
||||
// SDRAM memory map will usually look like the following for T8010:
|
||||
//
|
||||
// iBoot Text 0x870000000 - 0x8700FFFFF ( 1 MiB)
|
||||
// Page Tables 0x870100000 - 0x870177FFF (480 KiB)
|
||||
// Stacks 0x870178000 - 0x87017BFFF ( 16 KiB)
|
||||
// Boot trampoline 0x87017C000 - 0x87017FFFF ( 16 KiB)
|
||||
// Heap 0x870180000 - (DISPLAY_BASE - 1 page)
|
||||
// Guard (DISPLAY_BASE - 1 page) - DISPLAY_BASE
|
||||
|
||||
/* reserved area for iBoot */
|
||||
#define IBOOT_BASE (TEXT_BASE)
|
||||
#define IBOOT_SIZE (HEAP_END - IBOOT_BASE)
|
||||
|
||||
#define CODE_DATA_END (IBOOT_BASE + IBOOT_SIZE)
|
||||
|
||||
#if (IBOOT_BASE != (SDRAM_END - SDRAM_LOAD_OFFSET))
|
||||
#error "Memory map configuration error"
|
||||
#endif
|
||||
|
||||
#define PAGE_TABLES_BASE (IBOOT_BASE + TEXT_FOOTPRINT)
|
||||
#define PAGE_TABLES_SIZE (0x00078000ULL)
|
||||
#define STACKS_BASE (PAGE_TABLES_BASE + PAGE_TABLES_SIZE)
|
||||
#define STACKS_SIZE (EXCEPTION_STACK_SIZE + BOOTSTRAP_STACK_SIZE + INTERRUPT_STACK_SIZE)
|
||||
#define BOOT_TRAMPOLINE_BASE (STACKS_BASE + STACKS_SIZE)
|
||||
#define BOOT_TRAMPOLINE_SIZE (PAGE_SIZE)
|
||||
|
||||
#define HEAP_BASE (BOOT_TRAMPOLINE_BASE + BOOT_TRAMPOLINE_SIZE)
|
||||
#define HEAP_SIZE (DISPLAY_BASE - HEAP_BASE - PAGE_SIZE)
|
||||
#define HEAP_END (HEAP_BASE + HEAP_SIZE)
|
||||
#define HEAP_GUARD (HEAP_END)
|
||||
#if (HEAP_GUARD != (DISPLAY_BASE - PAGE_SIZE))
|
||||
#error "Memory map configuration error"
|
||||
#endif
|
||||
|
||||
#define INSECURE_MEMORY_BASE (SDRAM_BASE)
|
||||
#define INSECURE_MEMORY_SIZE (DEFAULT_LOAD_SIZE)
|
||||
|
||||
#define SECURE_MEMORY_BASE (INSECURE_MEMORY_BASE + INSECURE_MEMORY_SIZE)
|
||||
#define SECURE_MEMORY_SIZE (DEFAULT_FREE_ADDRESS - SECURE_MEMORY_BASE)
|
||||
|
||||
/* unused area */
|
||||
#define UNUSED_MEMORY_BASE (SECURE_MEMORY_BASE + SECURE_MEMORY_SIZE)
|
||||
#define UNUSED_MEMORY_SIZE (IBOOT_BASE - UNUSED_MEMORY_BASE)
|
||||
|
||||
#endif /* !WITH_DFU_MODE */
|
||||
|
||||
#endif /* APPLICATION_IBOOT */
|
||||
|
||||
#endif /* ! __PLATFORM_MEMMAP_H */
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_PCIMAP_H
|
||||
#define __PLATFORM_PCIMAP_H
|
||||
|
||||
/* T8010 specific bus/device/function and PCI base address map */
|
||||
|
||||
#include <platform/soc/hwregbase.h>
|
||||
|
||||
#define PCIE_PORT0_MEMORY_BASE (PCIE_MEMORY_BASE_ADDR)
|
||||
#define PCIE_PORT0_MEMORY_LEN (0x00100000ULL)
|
||||
|
||||
#define NVME0_PCI_BDF (PCI_BDF(1, 0, 0))
|
||||
#define NVME0_BASE_ADDR (PCIE_PORT0_MEMORY_BASE)
|
||||
#define NVME0_SIZE (0x00002000)
|
||||
#define NVME0_DART_ID (PCIE_PORT0_DART_ID)
|
||||
|
||||
|
||||
#endif /* ! __PLATFORM_PCIMAP_H */
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#include SUB_PLATFORM_HEADER(pinconfig)
|
||||
|
||||
@@ -0,0 +1,398 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
/* THIS FILE IS AUTOMATICALLY GENERATED BY tools/csvtopinconfig.py. DO NOT EDIT!
|
||||
I/O Spreadsheet version: cayman io list. ver 3.13
|
||||
I/O Spreadsheet tracker: <rdar://problem/20286828> H9: Update SecureROM pin configuration to I/O spreadsheet v3.13
|
||||
Conversion command: csvtopinconfig.py --rom --header --soc h9p --pupd-column 'Default pull-up/pull-down' --netname-column D1x_Net --copyright 2015 --radar '<rdar://problem/20286828> H9: Update SecureROM pin configuration to I/O spreadsheet v3.13' <filename>
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_PINCONFIG_H
|
||||
#define __PLATFORM_PINCONFIG_H
|
||||
|
||||
static const uint32_t gpio_default_cfg_0[GPIO_GROUP_COUNT * GPIOPADPINS] = {
|
||||
|
||||
/* Port 0 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 0 : I2S0_MCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 1 : I2S0_BCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 2 : I2S0_LRCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 3 : I2S0_DIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 4 : I2S0_DOUT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 5 : I2S2_MCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 6 : I2S2_BCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 7 : I2S2_LRCK ->
|
||||
|
||||
/* Port 1 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 8 : I2S2_DIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 9 : I2S2_DOUT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 10 : NAND_SYS_CLK -> AP_TO_NAND_SYS_CLK_R
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 11 : S3E_RESETN -> AP_TO_NAND_RESET_L
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 12 : PCIE_PERST0_N -> PCIE_AP_TO_NAND_RESET_L
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 13 : PCIE_PERST1_N ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 14 : PCIE_PERST2_N ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 15 : PCIE_PERST3_N ->
|
||||
|
||||
/* Port 2 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW | INPUT_SCHMITT, // 16 : PCIE_CLKREQ0_N -> PCIE_NAND_BI_AP_CLKREQ_L
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 17 : PCIE_CLKREQ1_N ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 18 : PCIE_CLKREQ2_N ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 19 : PCIE_CLKREQ3_N ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 20 : GPIO[0] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 21 : GPIO[1] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 22 : GPIO[2] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 23 : GPIO[3] ->
|
||||
|
||||
/* Port 3 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 24 : GPIO[4] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 25 : GPIO[5] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 26 : GPIO[6] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 27 : GPIO[7] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 28 : GPIO[8] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 29 : GPIO[9] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 30 : GPIO[10] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 31 : GPIO[11] ->
|
||||
|
||||
/* Port 4 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 32 : CLK32K_OUT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 33 : DWI_DO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 34 : DWI_CLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 35 : PMU_MOSI ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 36 : PMU_MISO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 37 : PMU_SCLK ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 38 : GPIO[12] ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 39 : I2C1_SDA ->
|
||||
|
||||
/* Port 5 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 40 : I2C1_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 41 : I2C3_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 42 : I2C3_SCL ->
|
||||
CFG_DISABLED, // 43 : SENSOR2_RST ->
|
||||
CFG_DISABLED, // 44 : SENSOR3_RST ->
|
||||
CFG_DISABLED, // 45 : SENSOR4_RST ->
|
||||
CFG_DISABLED, // 46 : SENSOR_INT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 47 : ISP_I2C3_SDA ->
|
||||
|
||||
/* Port 6 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 48 : ISP_I2C3_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 49 : ISP_I2C2_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 50 : ISP_I2C2_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 51 : ISP_I2C1_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 52 : ISP_I2C1_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 53 : ISP_I2C0_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 54 : ISP_I2C0_SCL ->
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 7 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 8 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 64 : SENSOR0_ISTRB ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 65 : SENSOR0_RST ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 66 : SENSOR0_CLK ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 67 : SENSOR0_XSHUTDOWN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 68 : SENSOR1_ISTRB ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 69 : SENSOR1_RST ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 70 : SENSOR1_CLK ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 71 : SENSOR1_XSHUTDOWN ->
|
||||
|
||||
/* Port 9 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 72 : SENSOR2_CLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 73 : I2S1_MCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 74 : I2S1_BCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 75 : I2S1_LRCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 76 : I2S1_DIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 77 : I2S1_DOUT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 78 : SPI2_SCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 79 : SPI2_MOSI ->
|
||||
|
||||
/* Port 10 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 80 : SPI2_MISO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 81 : SPI2_SSIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 82 : SPI3_SCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 83 : SPI3_MOSI ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 84 : SPI3_MISO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 85 : SPI3_SSIN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 86 : GPIO[31] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 87 : GPIO[32] ->
|
||||
|
||||
/* Port 11 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 88 : GPIO[33] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 89 : GPIO[34] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 90 : GPIO[35] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 91 : GPIO[36] ->
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 12 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 96 : UART1_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 97 : UART1_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 98 : UART1_RTSN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 99 : UART1_CTSN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 100 : UART4_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 101 : UART4_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 102 : UART4_RTSN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 103 : UART4_CTSN ->
|
||||
|
||||
/* Port 13 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 14 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 15 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 16 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 128 : SPI1_SCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 129 : SPI1_MOSI ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 130 : SPI1_MISO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 131 : SPI1_SSIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 132 : I2C2_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 133 : I2C2_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 134 : UART3_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 135 : UART3_RXD ->
|
||||
|
||||
/* Port 17 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 136 : UART3_RTSN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 137 : UART3_CTSN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 138 : GPIO[29] -> BOARD_ID4
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 139 : GPIO[30] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 140 : GPIO[13] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 141 : GPIO[14] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 142 : GPIO[15] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 143 : DROOP ->
|
||||
|
||||
/* Port 18 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 144 : SOCHOT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 145 : TMR32_PWM0 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 146 : TMR32_PWM1 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 147 : TMR32_PWM2 ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 148 : UART2_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 149 : UART2_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 150 : UART2_RTSN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 151 : UART2_CTSN ->
|
||||
|
||||
/* Port 19 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 152 : UART7_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 153 : UART7_RXD ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 154 : DP_WAKEUP ->
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 20 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 160 : GPIO[37] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 161 : GPIO[38] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 162 : GPIO[39] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 163 : GPIO[40] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 164 : GPIO[41] ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 165 : GPIO[16] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 166 : GPIO[17] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 167 : GPIO[18] -> BOOT_CONFIG0
|
||||
|
||||
/* Port 21 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 168 : GPIO[19] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 169 : GPIO[20] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 170 : GPIO[21] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 171 : GPIO[22] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 172 : GPIO[23] ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 173 : UART5_RTXD ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 174 : TST_CLKOUT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 175 : EDP_HPD ->
|
||||
|
||||
/* Port 22 */
|
||||
CFG_DISABLED, // 176 : DISP_TOUCH_BSYNC0 ->
|
||||
CFG_DISABLED, // 177 : DISP_TOUCH_BSYNC1 ->
|
||||
CFG_DISABLED, // 178 : DISP_TOUCH_EB ->
|
||||
CFG_IN, // 179 : REQUEST_DFU1 -> PMU_TO_AP_BUF_BUTTON1
|
||||
CFG_IN, // 180 : REQUEST_DFU2 -> PMU_TO_AP_BUF_BUTTON2
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 181 : SWD_TMS2 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 182 : SWD_TMS3 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 183 : GPU_TRIGGER ->
|
||||
|
||||
/* Port 23 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 184 : SPI0_SCLK -> BOARD_ID0
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 185 : SPI0_MOSI -> BOARD_ID1
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 186 : SPI0_MISO -> BOARD_ID2
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 187 : SPI0_SSIN -> BOARD_ID3
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 24 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 192 : UART0_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 193 : UART0_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 194 : UART6_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 195 : UART6_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 196 : I2C0_SDA ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 197 : I2C0_SCL ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 198 : I2S3_MCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 199 : I2S3_BCLK ->
|
||||
|
||||
/* Port 25 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 200 : I2S3_LRCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 201 : I2S3_DOUT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 202 : I2S3_DIN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 203 : GPIO[24] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 204 : GPIO[25] -> BOOT_CONFIG1
|
||||
CFG_IN | PULL_DOWN | DRIVE_S4 | SLOW_SLEW, // 205 : GPIO[26] -> FORCE_DFU
|
||||
CFG_DISABLED | PULL_DOWN | DRIVE_S4 | SLOW_SLEW, // 206 : GPIO[27] -> DFU_STATUS
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 207 : GPIO[28] -> BOOT_CONFIG2
|
||||
};
|
||||
|
||||
static const uint32_t gpio_default_cfg_1[GPIO_1_GROUP_COUNT * GPIOPADPINS] = {
|
||||
|
||||
/* Port 0 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 0 : AOP_SPI_SCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 1 : AOP_SPI_MOSI ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 2 : AOP_SPI_MISO ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 3 : AOP_UART0_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 4 : AOP_UART0_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 5 : AOP_UART1_TXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 6 : AOP_UART1_RXD ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 7 : AOP_UART2_TXD ->
|
||||
|
||||
/* Port 1 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 8 : AOP_UART2_RXD ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 9 : AOP_I2C0_SDA ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 10 : AOP_I2C0_SCL ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 11 : AOP_FUNC[0] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 12 : AOP_FUNC[1] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 13 : AOP_FUNC[2] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 14 : AOP_FUNC[3] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 15 : AOP_FUNC[4] ->
|
||||
|
||||
/* Port 2 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 16 : AOP_FUNC[5] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 17 : AOP_FUNC[6] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 18 : AOP_FUNC[7] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 19 : AOP_FUNC[8] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 20 : AOP_FUNC[9] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 21 : AOP_FUNC[10] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 22 : AOP_FUNC[11] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 23 : AOP_FUNC[12] ->
|
||||
|
||||
/* Port 3 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 24 : AOP_FUNC[13] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 25 : AOP_FUNC[14] ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 26 : AOP_FUNC[15] ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 27 : AOP_SWD_TCK_OUT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 28 : AOP_SWD_TMS0 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 29 : AOP_SWD_TMS1 ->
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 4 */
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 32 : AOP_I2S_DOUT ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 33 : AOP_I2S_BCLK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 34 : AOP_I2S_LRCK ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 35 : AOP_I2S_DIN ->
|
||||
CFG_DISABLED | DRIVE_S8 | SLOW_SLEW, // 36 : AOP_I2S_MCK ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 37 : DOCK_CONNECT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 38 : DOCK_ATTENTION ->
|
||||
CFG_DISABLED, // 39 : AOP_PDM_CLK0 ->
|
||||
|
||||
/* Port 5 */
|
||||
CFG_DISABLED, // 40 : AOP_PDM_DATA0 ->
|
||||
CFG_DISABLED, // 41 : AOP_PDM_DATA1 ->
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 6 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 7 */
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
|
||||
/* Port 8 */
|
||||
CFG_DISABLED, // 64 : XI0 ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 65 : XO0 ->
|
||||
CFG_DISABLED, // 66 : ANALOGMUX_OUT ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 67 : CFSB ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 68 : HOLD_RESET ->
|
||||
CFG_DISABLED, // 69 : TESTMODE ->
|
||||
CFG_DISABLED, // 70 : PACKAGED_N ->
|
||||
CFG_DISABLED, // 71 : CFSB_AOP ->
|
||||
|
||||
/* Port 9 */
|
||||
CFG_DISABLED, // 72 : COLD_RESETN ->
|
||||
CFG_DISABLED, // 73 : JTAG_TRSTN ->
|
||||
CFG_DISABLED, // 74 : JTAG_SEL ->
|
||||
CFG_DISABLED, // 75 : JTAG_TMS ->
|
||||
CFG_DISABLED, // 76 : JTAG_TDI ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 77 : JTAG_TDO ->
|
||||
CFG_DISABLED, // 78 : JTAG_TCK ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 79 : AOP_DDR_REQ ->
|
||||
|
||||
/* Port 10 */
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 80 : AOP_DDR_RESETN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 81 : AWAKE_REQ ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 82 : AWAKE_RESETN ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 83 : WDOG ->
|
||||
CFG_DISABLED | DRIVE_S4 | SLOW_SLEW, // 84 : RT_CLK32768 ->
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
CFG_DISABLED,
|
||||
};
|
||||
|
||||
|
||||
#endif /* __PLATFORM_PINCONFIG_H */
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __AOP_CONFIG_SEQUENCES_H__
|
||||
#define __AOP_CONFIG_SEQUENCES_H__
|
||||
|
||||
// These structures are valid reconfig commands. They are stitched together in
|
||||
// the platform init.c. For example look at the platform_s2r_aop_to_aop_ddr_post_sequence_insert()
|
||||
// to figure out how the reconfig sequences are stitched together for the transition
|
||||
// from s2r_aop to aop_ddr postamble
|
||||
|
||||
uint32_t s2r_aop_to_aop_ddr_post[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t s2r_aop_to_aop_ddr_post_2[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t s2r_aop_to_aop_ddr_post_3[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
/* Comment: // ** AOP_DDR->S2R_AOP PREAMBLE */
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
uint32_t aop_ddr_to_s2r_aop_pre[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
/* Comment: // ** AWAKE->AOP_DDR PREAMBLE */
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
uint32_t awake_to_aop_ddr_pre[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
/* Comment: // ** AWAKE->AOP_DDR POSTAMBLE */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ** Note: */
|
||||
/* Comment: // ** According to the PMGR spec section 11.14.4 (Software Teardown for Awake Exit), either */
|
||||
/* Comment: // ** SW or the config engine may turn off SIO/PCIE. For DV simulations, we chose to power */
|
||||
/* Comment: // ** power down ALL of the unneeded blocks in the config engine rather than from the AP. This */
|
||||
/* Comment: // ** provided functionally equivalent behavior and allowed the AWAKE->AOP_DDR and */
|
||||
/* Comment: // ** S2R_AOP->AOP_DDR to appear symmetric. SiVal/SW may move parts of this sequence */
|
||||
/* Comment: // ** to AP software if desired. */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
uint32_t awake_to_aop_ddr_post[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
/* Comment: // ** AOP_DDR->AWAKE PREAMBLE */
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
uint32_t aop_ddr_to_awake_pre[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
/* Comment: // ** AOP_DDR->AWAKE POSTAMBLE */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ** Note: */
|
||||
/* Comment: // ** According to the PMGR spec section 11.14.3 (Software Init for AOP_DDR to AWAKE), the */
|
||||
/* Comment: // ** config engine restores the state of the chip in this step. The specific use cases where */
|
||||
/* Comment: // ** the config engine is the owner of state restoration are not yet defined. */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ** The sequence below contains the minimum set of commands to re-boot the AP and restore */
|
||||
/* Comment: // ** DRAM operation at bucket 1. AP may bring DRAM up to bucket 0. */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ** It is assumed that SW will add extensively to this sequence for state restoration based */
|
||||
/* Comment: // ** on future use cases. */
|
||||
/* Comment: // ** */
|
||||
/* Comment: // ****************************************************************************************** */
|
||||
uint32_t aop_ddr_to_awake_post[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t aop_ddr_to_awake_post_2[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t mcu_aop_ddr_reconfig[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t mcu_aop_awake_reconfig_pre_restore[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
// Calibrated values will be added to this sequence, thus needs to be aligned.
|
||||
// The order of registers in this sequence impacts dcs_save_calibration_results and dcs_restore_calibration_results
|
||||
uint32_t mcu_aop_awake_reconfig_restore[]__aligned(32) = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
uint32_t mcu_aop_awake_reconfig_post_restore[] = {
|
||||
/* Comment: !!!FIXME!!! */
|
||||
0x00000000, /*Cfg End */
|
||||
0x00000000 /* END COMMAND */
|
||||
};
|
||||
|
||||
#endif // __AOP_CONFIG_SEQUENCES_H__
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_SOC_CCC_H
|
||||
#define __PLATFORM_SOC_CCC_H
|
||||
|
||||
#include <platform.h>
|
||||
#include SUB_PLATFORM_SPDS_HEADER(acc)
|
||||
|
||||
// CPU0 Regsiters
|
||||
#define rCCC_CPU0_IMPL_IORVBAR (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_IO_RVBAR_OFFSET))
|
||||
#define rCCC_CPU0_IMPL_MMU_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_MMU_ERR_STS_OFFSET))
|
||||
#define rCCC_CPU0_IMPL_MIGSTS_EL1 (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_MIGSTS_EL1_OFFSET))
|
||||
|
||||
// CPU0 Hurricane Regsiters
|
||||
#define rCCC_CPU0_IMPL_FED_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_FED_ERR_STS_OFFSET))
|
||||
#define rCCC_CPU0_IMPL_LSU_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_LSU_ERR_STS_OFFSET))
|
||||
|
||||
// CPU0 Zephyr Regsiters
|
||||
#define rCCC_CPU0_IMPL_E_FED_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_E_FED_ERR_STS_OFFSET))
|
||||
#define rCCC_CPU0_IMPL_E_LSU_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_CPU0_IMPL_E_LSU_ERR_STS_OFFSET))
|
||||
|
||||
// CPU1 Registers
|
||||
#define rCCC_CPU1_IMPL_IORVBAR (*(volatile u_int64_t *)(CCC_CPU1_SYS_BASE_ADDR + ACC_CPU0_IMPL_IO_RVBAR_OFFSET))
|
||||
|
||||
// Registers shared between all CPUs
|
||||
#define rCCC_CCC_IMPL_L2C_ERR_STS (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_IMPL_L2C_ERR_STS_OFFSET))
|
||||
#define rCCC_CCC_IMPL_L2C_ERR_ADR (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_IMPL_L2C_ERR_ADR_OFFSET))
|
||||
#define rCCC_CCC_IMPL_L2C_ERR_INF (*(volatile u_int64_t *)(CCC_CPU0_SYS_BASE_ADDR + ACC_IMPL_L2C_ERR_INF_OFFSET))
|
||||
|
||||
#endif /* __PLATFORM_SOC_CCC_H */
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_CHIPID_H
|
||||
#define __PLATFORM_SOC_CHIPID_H
|
||||
|
||||
#include <platform/chipid.h>
|
||||
#include <platform/soc/pmgr.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <soc/t8010/a0/minipmgr.h>
|
||||
|
||||
#define rCFG_FUSE0 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE0_OFFSET))
|
||||
#define rCFG_FUSE1 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE1_OFFSET))
|
||||
#define rCFG_FUSE2 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE2_OFFSET))
|
||||
#define rCFG_FUSE3 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE3_OFFSET))
|
||||
#define rCFG_FUSE4 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE4_OFFSET))
|
||||
#define rCFG_FUSE5 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE5_OFFSET))
|
||||
#define rCFG_FUSE9 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE9_OFFSET))
|
||||
|
||||
#define rECIDLO (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_ECID_FUSE0_OFFSET))
|
||||
#define rECIDHI (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_ECID_FUSE1_OFFSET))
|
||||
|
||||
#define rSEP_SECURITY (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_SEP_SECURITY_OFFSET))
|
||||
|
||||
#define rCFG_FUSE0_RAW (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_CFG_FUSE0_RAW_OFFSET))
|
||||
|
||||
enum chipid_voltage_index {
|
||||
CHIPID_CPU_VOLTAGE_BYPASS,
|
||||
CHIPID_CPU_VOLTAGE_SECUREROM,
|
||||
CHIPID_CPU_VOLTAGE_396,
|
||||
|
||||
CHIPID_GPU_VOLTAGE_OFF,
|
||||
|
||||
CHIPID_ALL_VOLTAGE_LAST,
|
||||
};
|
||||
|
||||
enum chipid_voltage_type {
|
||||
CHIPID_CPU_VOLTAGE,
|
||||
CHIPID_GPU_VOLTAGE,
|
||||
};
|
||||
|
||||
struct chipid_vol_adj {
|
||||
uint64_t volAdj0:20;
|
||||
uint64_t volAdj1:20;
|
||||
uint64_t volAdj2:20;
|
||||
uint64_t volAdj3:20;
|
||||
uint64_t dvfmMaxAdj:20;
|
||||
uint64_t dvmrAdj0:20;
|
||||
uint64_t dvmrAdj1:20;
|
||||
uint64_t dvmrAdj2:20;
|
||||
};
|
||||
|
||||
#define CHIPID_SOC_VOLTAGE_BYPASS (0)
|
||||
#define CHIPID_SOC_VOLTAGE_SECUREROM (1)
|
||||
#define CHIPID_SOC_VOLTAGE_VMIN (2)
|
||||
#define CHIPID_SOC_VOLTAGE_VNOM (3)
|
||||
|
||||
extern const struct chipid_vol_adj *chipid_get_vol_adj(enum chipid_voltage_index voltage_index);
|
||||
|
||||
uint32_t chipid_get_cpu_voltage(uint32_t index);
|
||||
|
||||
uint32_t chipid_get_cpu_sram_voltage(uint32_t index);
|
||||
|
||||
uint32_t chipid_get_soc_voltage(uint32_t index);
|
||||
|
||||
uint32_t chipid_get_gpu_voltage(uint32_t index);
|
||||
|
||||
uint32_t chipid_get_gpu_sram_voltage(uint32_t index);
|
||||
|
||||
uint32_t chipid_get_sram_voltage(uint32_t index);
|
||||
|
||||
int32_t chipid_get_cpu_temp_offset(uint32_t cpu_number);
|
||||
|
||||
uint32_t chipid_get_soc_temp_sensor_trim(uint32_t sensor_index);
|
||||
|
||||
uint32_t chipid_get_fuse_revision(void);
|
||||
|
||||
uint32_t chipid_get_total_rails_leakage();
|
||||
|
||||
uint32_t chipid_get_lpo_trim(void);
|
||||
|
||||
uint32_t chipid_get_pcie_refpll_fcal_vco_digctrl(void);
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
|
||||
#define FPGA_HAS_ALWAYS (1 << 31)
|
||||
#define FPGA_HAS_MEDIA (1 << 0)
|
||||
#define FPGA_HAS_MSR (1 << 1)
|
||||
#define FPGA_HAS_JPEG (1 << 2)
|
||||
#define FPGA_HAS_AVE (1 << 3)
|
||||
#define FPGA_HAS_VXD (1 << 4)
|
||||
#define FPGA_HAS_ISP (1 << 5)
|
||||
#define FPGA_HAS_RTBUSMUX (1 << 6)
|
||||
#define FPGA_HAS_DISP (1 << 7)
|
||||
#define FPGA_HAS_GFX (1 << 8)
|
||||
|
||||
#define rECID_FUSE3 (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_FUSE_ECID_FUSE3_OFFSET))
|
||||
|
||||
uint32_t chipid_get_fpga_block_instantiation(void);
|
||||
|
||||
#endif // SUPPORT_FPGA
|
||||
|
||||
#endif /* __PLATFORM_SOC_CHIPID_H */
|
||||
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __APPLE_DISPLAY_H
|
||||
#define __APPLE_DISPLAY_H
|
||||
|
||||
// Platform-specific displaypipe tunables
|
||||
|
||||
// XXX - disp_dpcafclkgate is listed as TBD
|
||||
// D620 is most likely something new based on the values. Update once we know more.
|
||||
|
||||
static struct adfe_v2_tuneable adfe_tuneables[] =
|
||||
{
|
||||
#if DISPLAY_IPHONE_TUNABLES
|
||||
#if DISPLAY_D620_TUNABLES
|
||||
{
|
||||
.name = "D620",
|
||||
.disp_dpcclkcntl = (ADPCCLKCNTL_FLOOR(0x60) | \
|
||||
ADPCCLKCNTL_PIPE_ENABLE | \
|
||||
ADPCCLKCNTL_LB_ENABLE | \
|
||||
ADPCCLKCNTL_PIO_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_STAT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_EXT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_DYN_GATE_ENABLE),
|
||||
.disp_dpcclklvl_clock_on_level = ADPCCLKLVL_ONLVL(0x709),
|
||||
.disp_dpcclklvl_clock_off_level = ADPCCLKLVL_OFFLVL(0x7f8),
|
||||
.disp_dpcqoscfg = (ADPCQOSCFG_QOS_TIMER(0xffff) | \
|
||||
ADPCQOSCFG_PIPE_ENABLE | \
|
||||
ADPCQOSCFG_QOS_ENABLE),
|
||||
.disp_dpcqosylvl_yellow_off = ADPCQOSYLVL_YELLOW_OFF(0x6ff),
|
||||
.disp_dpcqosylvl_yellow_on = ADPCQOSYLVL_YELLOW_ON(0x6f7),
|
||||
.disp_dpcqosrlvl_red_off = ADPCQOSRLVL_RED_OFF(0x5f6),
|
||||
.disp_dpcqosrlvl_red_on = ADPCQOSRLVL_RED_ON(0x5ee),
|
||||
.disp_dpclinkdown = (ADPCLINKDOWN_TEARDOWNNOSCL | \
|
||||
ADPCLINKDOWN_TEARDOWNEN),
|
||||
.disp_dpgpreqaggr = (ADPGPREQAGGR_REQAGGRTHRESH(0xe1) | \
|
||||
ADPGPREQAGGR_CACHEHINT(0x3) | \
|
||||
ADPGPREQARRG_OPPORTUNISMENAB | \
|
||||
ADPGPREQAGGR_REQAGGRENAB),
|
||||
.disp_dpcafclkgate = (ADPAFIDLECOUNT(0) | \
|
||||
ADPAFDYNCLKGATEEN),
|
||||
.disp_dpcenab = (ADPCENAB_IDEAL_ARB_ENAB),
|
||||
},
|
||||
#endif //DISPLAY_D620_TUNABLES
|
||||
|
||||
#if DISPLAY_D520_TUNABLES
|
||||
{
|
||||
.name = "D520",
|
||||
.disp_dpcclkcntl = (ADPCCLKCNTL_FLOOR(0x60) | \
|
||||
ADPCCLKCNTL_PIPE_ENABLE | \
|
||||
ADPCCLKCNTL_LB_ENABLE | \
|
||||
ADPCCLKCNTL_PIO_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_STAT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_EXT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_DYN_GATE_ENABLE),
|
||||
.disp_dpcclklvl_clock_on_level = ADPCCLKLVL_ONLVL(0x3db),
|
||||
.disp_dpcclklvl_clock_off_level = ADPCCLKLVL_OFFLVL(0x7f8),
|
||||
.disp_dpcqoscfg = (ADPCQOSCFG_QOS_TIMER(0x7a7) | \
|
||||
ADPCQOSCFG_PIPE_ENABLE | \
|
||||
ADPCQOSCFG_QOS_ENABLE),
|
||||
.disp_dpcqosylvl_yellow_off = ADPCQOSYLVL_YELLOW_OFF(0x3d1),
|
||||
.disp_dpcqosylvl_yellow_on = ADPCQOSYLVL_YELLOW_ON(0x3c9),
|
||||
.disp_dpcqosrlvl_red_off = ADPCQOSRLVL_RED_OFF(0x2ff),
|
||||
.disp_dpcqosrlvl_red_on = ADPCQOSRLVL_RED_ON(0x2f7),
|
||||
.disp_dpclinkdown = (ADPCLINKDOWN_TEARDOWNNOSCL | \
|
||||
ADPCLINKDOWN_TEARDOWNEN),
|
||||
.disp_dpgpreqaggr = (ADPGPREQAGGR_REQAGGRTHRESH(0x6b) | \
|
||||
ADPGPREQAGGR_CACHEHINT(0x3) | \
|
||||
ADPGPREQARRG_OPPORTUNISMENAB | \
|
||||
ADPGPREQAGGR_REQAGGRENAB),
|
||||
.disp_dpcafclkgate = (ADPAFIDLECOUNT(0) | \
|
||||
ADPAFDYNCLKGATEEN),
|
||||
.disp_dpcenab = (ADPCENAB_IDEAL_ARB_ENAB),
|
||||
},
|
||||
#endif //DISPLAY_D520_TUNABLES
|
||||
#endif //DISPLAY_IPHONE_TUNABLES
|
||||
|
||||
//Tunables for targets using the the timing based on landscape ipads
|
||||
#if DISPLAY_LANDSCAPE_IPAD_TUNABLES || DISPLAY_APPLE_TV_TUNABLES || DISPLAY_FPGA_TUNABLES
|
||||
{
|
||||
.name = "default",
|
||||
.disp_dpcclkcntl = (ADPCCLKCNTL_FLOOR(0x60) | \
|
||||
ADPCCLKCNTL_LB_ENABLE | \
|
||||
ADPCCLKCNTL_PIO_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_STAT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_EXT_GATE_ENABLE | \
|
||||
ADPCCLKCNTL_DYN_GATE_ENABLE),
|
||||
.disp_dpcclklvl_clock_on_level = ADPCCLKLVL_ONLVL(0x547),
|
||||
.disp_dpcclklvl_clock_off_level = ADPCCLKLVL_OFFLVL(0x7f8),
|
||||
.disp_dpcqoscfg = (ADPCQOSCFG_QOS_TIMER(0x3a2c) | \
|
||||
ADPCQOSCFG_PIPE_ENABLE | \
|
||||
ADPCQOSCFG_QOS_ENABLE),
|
||||
.disp_dpcqosylvl_yellow_off = ADPCQOSYLVL_YELLOW_OFF(0x545),
|
||||
.disp_dpcqosylvl_yellow_on = ADPCQOSYLVL_YELLOW_ON(0x53d),
|
||||
.disp_dpcqosrlvl_red_off = ADPCQOSRLVL_RED_OFF(0x3a1),
|
||||
.disp_dpcqosrlvl_red_on = ADPCQOSRLVL_RED_ON(0x399),
|
||||
.disp_dpclinkdown = (ADPCLINKDOWN_TEARDOWNNOSCL | \
|
||||
ADPCLINKDOWN_TEARDOWNEN),
|
||||
.disp_dpgpreqaggr = (ADPGPREQAGGR_REQAGGRTHRESH(0x4b) | \
|
||||
ADPGPREQAGGR_CACHEHINT(0x3) | \
|
||||
ADPGPREQARRG_OPPORTUNISMENAB | \
|
||||
ADPGPREQAGGR_REQAGGRENAB),
|
||||
.disp_dpcafclkgate = (ADPAFIDLECOUNT(0) | \
|
||||
ADPAFDYNCLKGATEEN),
|
||||
.disp_dpcenab = (ADPCENAB_IDEAL_ARB_ENAB),
|
||||
},
|
||||
#if DISPLAY_IPHONE_TUNABLES
|
||||
#error DISPLAY_IPHONE_TUNABLES set for IPAD
|
||||
#endif
|
||||
|
||||
#endif //DISPLAY_LANDSCAPE_IPAD_TUNABLES || DISPLAY_APPLE_TV_TUNABLES || DISPLAY_FPGA_TUNABLES
|
||||
};
|
||||
|
||||
#endif /* ! __APPLE_DISPLAY_H */
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __APPLE_DISPLAY_TIMINGS_H
|
||||
#define __APPLE_DISPLAY_TIMINGS_H
|
||||
|
||||
//Supported timings by this platform
|
||||
static struct display_timing timing_list[] =
|
||||
{
|
||||
#if DEBUG_BUILD || SUB_TARGET_T8010SIM
|
||||
{
|
||||
.display_name = "D520",
|
||||
.host_clock_id = CLK_VCLK0,
|
||||
.pixel_clock = 100000000,
|
||||
.dot_pitch = 326,
|
||||
.h_active = 750,
|
||||
.h_pulse_width = 32,
|
||||
.h_back_porch = 4,
|
||||
.h_front_porch = 102,
|
||||
.v_active = 1334,
|
||||
.v_pulse_width = 3,
|
||||
.v_back_porch = 4,
|
||||
.v_front_porch = 536,
|
||||
.neg_vclk = 0,
|
||||
.neg_hsync = 0,
|
||||
.neg_vsync = 0,
|
||||
.neg_vden = 0,
|
||||
.display_depth = 24,
|
||||
.display_type = DISPLAY_TYPE_PINOT,
|
||||
.display_config = NULL,
|
||||
},
|
||||
#endif
|
||||
#if DEBUG_BUILD
|
||||
{
|
||||
.display_name = "D620",
|
||||
.host_clock_id = CLK_VCLK0,
|
||||
.pixel_clock = 200000000,
|
||||
.dot_pitch = 326,
|
||||
.h_active = 1080,
|
||||
.h_pulse_width = 32,
|
||||
.h_back_porch = 4,
|
||||
.h_front_porch = 116,
|
||||
.v_active = 1920,
|
||||
.v_pulse_width = 3,
|
||||
.v_back_porch = 5,
|
||||
.v_front_porch = 778,
|
||||
.neg_vclk = 0,
|
||||
.neg_hsync = 0,
|
||||
.neg_vsync = 0,
|
||||
.neg_vden = 0,
|
||||
.display_depth = 24,
|
||||
.display_type = DISPLAY_TYPE_PINOT,
|
||||
.display_config = NULL,
|
||||
},
|
||||
#endif
|
||||
#if DEBUG_BUILD || SUB_TARGET_T8010FPGA
|
||||
{
|
||||
.display_name = "fpga-wsvga",
|
||||
.host_clock_id = CLK_VCLK0,
|
||||
.pixel_clock = 5000000,
|
||||
.dot_pitch = 243,
|
||||
.h_active = 1024,
|
||||
.h_pulse_width = 50,
|
||||
.h_back_porch = 50,
|
||||
.h_front_porch = 51,
|
||||
.v_active = 600,
|
||||
.v_pulse_width = 50,
|
||||
.v_back_porch = 218,
|
||||
.v_front_porch = 6,
|
||||
.neg_vclk = 0,
|
||||
.neg_hsync = 0,
|
||||
.neg_vsync = 0,
|
||||
.neg_vden = 0,
|
||||
.display_depth = 18,
|
||||
.display_type = DISPLAY_TYPE_DUMB,
|
||||
.display_config = NULL,
|
||||
},
|
||||
#endif
|
||||
#if DEBUG_BUILD || WITH_HW_DISPLAY_DISPLAYPORT
|
||||
{
|
||||
.display_name = "720p",
|
||||
.host_clock_id = CLK_VCLK0,
|
||||
.pixel_clock = 74250000,
|
||||
.dot_pitch = 243,
|
||||
.h_active = 1280,
|
||||
.h_pulse_width = 40,
|
||||
.h_back_porch = 110,
|
||||
.h_front_porch = 220,
|
||||
.v_active = 720,
|
||||
.v_pulse_width = 5,
|
||||
.v_back_porch = 5,
|
||||
.v_front_porch = 20,
|
||||
.neg_vclk = 0,
|
||||
.neg_hsync = 0,
|
||||
.neg_vsync = 0,
|
||||
.neg_vden = 0,
|
||||
.display_depth = 24,
|
||||
.display_type = DISPLAY_TYPE_DP,
|
||||
.display_config.dp.mode = 0x0,
|
||||
.display_config.dp.type = 0x1,
|
||||
.display_config.dp.min_link_rate = 0x6,
|
||||
.display_config.dp.max_link_rate = 0x6,
|
||||
.display_config.dp.lanes = 0x2,
|
||||
.display_config.dp.ssc = 0x0,
|
||||
.display_config.dp.alpm = 0x0,
|
||||
.display_config.dp.vrr_enable = 0x0,
|
||||
.display_config.dp.vrr_on = 0x0,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
#endif /* ! __APPLE_DISPLAY_TIMINGS_H */
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_DVFMPERF_H
|
||||
#define __PLATFORM_SOC_DVFMPERF_H
|
||||
#include <platform/soc/chipid.h>
|
||||
|
||||
enum chipid_voltage_index dvfmperf_get_voltage_index(uint32_t index, enum chipid_voltage_type voltage_type);
|
||||
|
||||
#endif /* __PLATFORM_SOC_DVFMPERF_H */
|
||||
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_HWCLOCKS_H
|
||||
#define __PLATFORM_SOC_HWCLOCKS_H
|
||||
|
||||
#include <platform/clocks.h>
|
||||
#include <soc/t8010/a0/pmgr.h>
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
#define OSC_FREQ (5000000UL)
|
||||
#define LPPLL_FREQ (OSC_FREQ)
|
||||
#else
|
||||
#define OSC_FREQ (24000000UL)
|
||||
#define LPPLL_FREQ (192000000UL)
|
||||
#endif
|
||||
|
||||
#if SUB_PLATFORM_T8010
|
||||
/*
|
||||
* T8010 clock gate devices.
|
||||
*/
|
||||
enum {
|
||||
// Mini-PMGR
|
||||
CLK_AOP = HWCLOCK_BASE,
|
||||
CLK_DEBUG,
|
||||
CLK_AOP_GPIO,
|
||||
CLK_AOP_UART0,
|
||||
CLK_AOP_UART1,
|
||||
CLK_AOP_UART2,
|
||||
CLK_AOP_I2CM,
|
||||
CLK_AOP_MCA0,
|
||||
CLK_AOP_PDM_REF,
|
||||
CLK_AOP_CPU,
|
||||
CLK_AOP_FILTER,
|
||||
CLK_AOP_BUSIF,
|
||||
CLK_AOP_LPD0,
|
||||
CLK_AOP_LPD1,
|
||||
CLK_AOP_HPDS,
|
||||
CLK_AOP_HPDSC,
|
||||
CLK_AOP_HPDD,
|
||||
|
||||
// PMGR
|
||||
CLK_SBR,
|
||||
CLK_AIC,
|
||||
CLK_DWI,
|
||||
CLK_GPIO,
|
||||
CLK_PMS,
|
||||
CLK_HSIC0PHY,
|
||||
CLK_ISPSENS0,
|
||||
CLK_ISPSENS1,
|
||||
CLK_ISPSENS2,
|
||||
CLK_PCIE_REF,
|
||||
CLK_SOCUVD,
|
||||
CLK_SIO_BUSIF,
|
||||
CLK_SIO_P,
|
||||
CLK_SIO,
|
||||
CLK_MCA0,
|
||||
CLK_MCA1,
|
||||
CLK_MCA2,
|
||||
CLK_MCA3,
|
||||
CLK_MCA4,
|
||||
CLK_PWM0,
|
||||
CLK_I2C0,
|
||||
CLK_I2C1,
|
||||
CLK_I2C2,
|
||||
CLK_I2C3,
|
||||
CLK_SPI0,
|
||||
CLK_SPI1,
|
||||
CLK_SPI2,
|
||||
CLK_SPI3,
|
||||
CLK_UART0,
|
||||
CLK_UART1,
|
||||
CLK_UART2,
|
||||
CLK_UART3,
|
||||
CLK_UART4,
|
||||
CLK_UART5,
|
||||
CLK_UART6,
|
||||
CLK_UART7,
|
||||
CLK_UART8,
|
||||
CLK_AES0,
|
||||
CLK_HFD0,
|
||||
CLK_MCC,
|
||||
CLK_DCS0,
|
||||
CLK_DCS1,
|
||||
CLK_DCS2,
|
||||
CLK_DCS3,
|
||||
CLK_USB,
|
||||
CLK_USBCTLREG,
|
||||
CLK_USB2HOST0,
|
||||
CLK_USB2HOST0_OHCI,
|
||||
CLK_USB2HOST1,
|
||||
CLK_USB_OTG,
|
||||
CLK_SMX,
|
||||
CLK_SF,
|
||||
CLK_RTMUX,
|
||||
CLK_DISP0_FE,
|
||||
CLK_DISP0_BE,
|
||||
CLK_MIPI_DSI,
|
||||
CLK_MIPI = CLK_MIPI_DSI,
|
||||
CLK_DP,
|
||||
CLK_EDPLINK = CLK_DP,
|
||||
CLK_DPLINK = CLK_DP,
|
||||
CLK_ISP_SYS,
|
||||
CLK_MEDIA,
|
||||
CLK_JPG,
|
||||
CLK_MSR,
|
||||
CLK_PMP,
|
||||
CLK_PMS_SRAM,
|
||||
CLK_VDEC0,
|
||||
CLK_VENC,
|
||||
CLK_PCIE,
|
||||
CLK_PCIE_AUX,
|
||||
CLK_GFX,
|
||||
|
||||
// Unmanaged
|
||||
CLK_CPU0,
|
||||
CLK_CPU1,
|
||||
CLK_CPM,
|
||||
CLK_SEP,
|
||||
CLK_ISP_RSTS0,
|
||||
CLK_ISP_RSTS1,
|
||||
CLK_ISP_VIS,
|
||||
CLK_ISP_BE,
|
||||
CLK_ISP_PEARL,
|
||||
CLK_DPRX,
|
||||
CLK_VENC_PIPE4,
|
||||
CLK_VENC_PIPE5,
|
||||
CLK_VENC_ME0,
|
||||
CLK_VENC_ME1,
|
||||
|
||||
CLK_LAST,
|
||||
};
|
||||
|
||||
#define PMGR_FIRST_DEVICE CLK_AOP
|
||||
#define PMGR_LAST_DEVICE CLK_GFX
|
||||
|
||||
#else
|
||||
#error "Unknown Platform"
|
||||
#endif
|
||||
|
||||
#define PMGR_DEVICE_INDEX(_clk) ((_clk) - HWCLOCK_BASE)
|
||||
#define PMGR_DEVICE_COUNT (CLK_LAST - HWCLOCK_BASE)
|
||||
|
||||
#define PMGR_VALID_DEVICE(_clk) ((_clk) >= PMGR_FIRST_DEVICE && (_clk) <= PMGR_LAST_DEVICE)
|
||||
|
||||
// Legacy clocks, no associated device or PS register
|
||||
enum {
|
||||
CLK_FCLK = CLK_LAST,
|
||||
CLK_ACLK,
|
||||
CLK_HCLK,
|
||||
CLK_PCLK,
|
||||
CLK_VCLK0,
|
||||
CLK_VCLK1,
|
||||
CLK_MCLK,
|
||||
CLK_NCLK,
|
||||
CLK_USBPHYCLK,
|
||||
CLK_NCOREF,
|
||||
};
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_HWCLOCKS_H */
|
||||
@@ -0,0 +1,347 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_HWISR_H
|
||||
#define __PLATFORM_SOC_HWISR_H
|
||||
|
||||
#if SUB_PLATFORM_T8010
|
||||
|
||||
#define INT_SW0 0 // Software 0 Interrupt
|
||||
#define INT_SW1 1 // Software 1 Interrupt
|
||||
#define INT_SW2 2 // Software 2 Interrupt
|
||||
#define INT_SW3 3 // Software 3 Interrupt
|
||||
#define INT_WDT 4 // Watchdog Timer Interrupt
|
||||
#define INT_DWI1 5 // DWI Interrupt
|
||||
#define INT_DWI2 6 // DWI Interrupt
|
||||
#define INT_PMGR_PERF_CNTRS 7 // PMGR Performace Counters Interrupt
|
||||
#define INT_THERM_TEMP0 8 // Thermal Temp 0 Interrupt
|
||||
#define INT_THERM_ALARM0 9 // Thermal Alarm 0 Interrupt
|
||||
#define INT_THERM_TEMP1 10 // Thermal Temp 1 Interrupt
|
||||
#define INT_THERM_ALARM1 11 // Thermal Alarm 1 Interrupt
|
||||
#define INT_THERM_TEMP2 12 // Thermal Temp 2 Interrupt
|
||||
#define INT_THERM_ALARM2 13 // Thermal Alarm 2 Interrupt
|
||||
|
||||
// Reserved 14 - 15
|
||||
|
||||
#define INT_CPM_THERM_TEMP 16 // CPM Thermal temp Interrupt
|
||||
#define INT_CPM_THERM_ALARM 17 // CPM Thermal alarm Interrupt
|
||||
#define INT_CPU0_THERM_TEMP 18 // CPU0 Thermal temp Interrupt
|
||||
#define INT_CPU0_THERM_ALARM 19 // CPU0 Thermal alarm Interrupt
|
||||
#define INT_CPU1_THERM_TEMP 20 // CPU1 Thermal temp Interrupt
|
||||
#define INT_CPU1_THERM_ALARM 21 // CPU1 Thermal alarm Interrupt
|
||||
|
||||
// Reserved 21 - 25
|
||||
|
||||
#define INT_THERM_FS_ACT0 26 // Thermal Failsafe Active 0 Interrupt
|
||||
#define INT_THERM_FS_ACT1 27 // Thermal Failsafe Active 1 Interrupt
|
||||
#define INT_THERM_FS_EXT0 28 // Thermal Failsafe Exit 0 Interrupt
|
||||
#define INT_THERM_FS_EXT1 29 // Thermal Failsafe Exit 1 Interrupt
|
||||
#define INT_SOC_THERM_FS_ACT0 30 // SoC Thermal Failsafe Active 0 Interrupt
|
||||
#define INT_SOC_THERM_FS_ACT1 31 // SoC Thermal Failsafe Active 1 Interrupt
|
||||
#define INT_PMGR_EVENT 32 // PMGR Event Interrupt
|
||||
#define INT_CTM_TRIGGER0 33 // CTM Trigger 0 Interrupt
|
||||
#define INT_CTM_TRIGGER1 34 // CTM Trigger 1 Interrupt
|
||||
#define INT_CTM_TRIGGER2 35 // CTM Trigger 2 Interrupt
|
||||
#define INT_CTM_TRIGGER3 36 // CTM Trigger 3 Interrupt
|
||||
#define INT_COHERENCE_PNT_ERR 37 // Coherence Point Error Interrupt
|
||||
#define INT_COHERENCE_PNT_PERF_CNTRS 38 // Coherence Point Performance Counter Interrupt
|
||||
|
||||
// Reserved 39-41
|
||||
|
||||
#define INT_GPIO_CLASS0 42 // GPIO Class 0 Interrupt
|
||||
#define INT_GPIO_CLASS1 43 // GPIO Class 1 Interrupt
|
||||
#define INT_GPIO_CLASS2 44 // GPIO Class 2 Interrupt
|
||||
#define INT_GPIO_CLASS3 45 // GPIO Class 3 Interrupt
|
||||
#define INT_GPIO_CLASS4 46 // GPIO Class 4 Interrupt
|
||||
#define INT_GPIO_CLASS5 47 // GPIO Class 5 Interrupt
|
||||
#define INT_GPIO_CLASS6 48 // GPIO Class 6 Interrupt
|
||||
|
||||
// Reserved 49
|
||||
|
||||
#define INT_MINIMPGR_PERF_CTR 50 // MINIPMGR Performance Counter Interrupt
|
||||
#define INT_GFX_PERF_CTR 51 // GFX Performance Counter Interrupt
|
||||
#define INT_MEM_CONTROLLER0 52 // Memory Controller MCC0 Interrupt
|
||||
#define INT_MEM_CONTROLLER1 53 // Memory Controller MCC1 Interrupt
|
||||
|
||||
// Reserved 54-55
|
||||
|
||||
#define INT_MEM_CTLR_DCS0_AMCX0 56 // Memory Controller DCS0 AMCX 0 Interrupt
|
||||
#define INT_MEM_CTLR_DCS0_AMCX1 57 // Memory Controller DCS0 AMCX 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS0_AMP_CAL_ERR 58 // Memory Controller DCS0 AMP Cal Error 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS1_AMCX0 59 // Memory Controller DCS1 AMCX 0 Interrupt
|
||||
#define INT_MEM_CTLR_DCS1_AMCX1 60 // Memory Controller DCS1 AMCX 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS1_AMP_CAL_ERR 61 // Memory Controller DCS1 AMP Cal Error 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS2_AMCX0 62 // Memory Controller DCS2 AMCX 0 Interrupt
|
||||
#define INT_MEM_CTLR_DCS2_AMCX1 63 // Memory Controller DCS2 AMCX 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS2_AMP_CAL_ERR 64 // Memory Controller DCS2 AMP Cal Error 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS3_AMCX0 65 // Memory Controller DCS3 AMCX 0 Interrupt
|
||||
#define INT_MEM_CTLR_DCS3_AMCX1 66 // Memory Controller DCS3 AMCX 1 Interrupt
|
||||
#define INT_MEM_CTLR_DCS3_AMP_CAL_ERR 67 // Memory Controller DCS3 AMP Cal Error 1 Interrupt
|
||||
|
||||
// Reserved 68-80
|
||||
|
||||
#define INT_CPU0_COMM_TX 81 // CPU 0 COMM TX Interrupt
|
||||
#define INT_CPU0_COMM_RX 82 // CPU 0 COMM RX Interrupt
|
||||
#define INT_CPU0_PMU_IRQ 83 // CPU 0 PMU IRQ Interrupt
|
||||
#define INT_CPU1_COMM_TX 84 // CPU 1 COMM TX Interrupt
|
||||
#define INT_CPU1_COMM_RX 85 // CPU 1 COMM RX Interrupt
|
||||
#define INT_CPU1_PMU_IRQ 86 // CPU 1 PMU IRQ Interrupt
|
||||
|
||||
// Reserved 87 - 92
|
||||
|
||||
#define INT_CCC_UNIFIED_TRIGGER 93 // CCC Unified Trigger Interrupt
|
||||
|
||||
// Reserved 94
|
||||
|
||||
#define INT_GFX_THROTTLING_TRIGGER 95 // GFX Throttling Trigger Interrupt
|
||||
|
||||
// Reserved 96 - 103
|
||||
|
||||
#define INT_ISP_KF_INBOX_EMPTY 104 // ISP KF Inbox Empty Interrupt
|
||||
#define INT_ISP_KF_INBOX_NOTEMPTY 105 // ISP KF Inbox Not Empty Interrupt
|
||||
#define INT_ISP_KF_OUTBOX_EMPTY 106 // ISP KF Outbox Empty Interrupt
|
||||
#define INT_ISP_KF_OUTBOX_NOTEMPTY 107 // ISP KF Outbox Not Empty Interrupt
|
||||
#define INT_ISP0 108 // ISP 0 Interrupt
|
||||
#define INT_ISP1 109 // ISP 1 Interrupt
|
||||
#define INT_ISP2 110 // ISP 2 Interrupt
|
||||
#define INT_ISP3 111 // ISP 3 Interrupt
|
||||
#define INT_ISP_DART 112 // ISP DART Interrupt
|
||||
|
||||
// Reserved 113
|
||||
|
||||
#define INT_SEP_KF_INBOX_EMPTY 114 // SEP KF Inbox Empty Interrupt
|
||||
#define INT_SEP_KF_INBOX_NOTEMPTY 115 // SEP KF Inbox Not Empty Interrupt
|
||||
#define INT_SEP_KF_OUTBOX_EMPTY 116 // SEP KF Outbox Empty Interrupt
|
||||
#define INT_SEP_KF_OUTBOX_NOTEMPTY 117 // SEP KF Outbox Not Empty Interrupt
|
||||
#define INT_SEP_AUTH_ERROR 118 // SEP Authentication Error Interrupt
|
||||
#define INT_SEP_CRIT_PATH_MONITOR 119 // SEP Critical Path Monitor Interrupt
|
||||
|
||||
// Reserved 120 - 122
|
||||
|
||||
#define INT_DOCK_CHANNELS 123 // Dock Channels Interrupt
|
||||
#define INT_SCM_SPI 124 // SCM SPI Interrupt
|
||||
#define INT_AOP_UART0 125 // AOP UART0 Interrupt
|
||||
#define INT_AOP_UART1 126 // AOP UART1 Interrupt
|
||||
#define INT_AOP_I2CM 127 // AOP I2CM Interrupt
|
||||
#define INT_AOP_GPIO_IRQ0 128 // AOP GPIO IRQ0 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ1 129 // AOP GPIO IRQ1 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ2 130 // AOP GPIO IRQ2 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ3 131 // AOP GPIO IRQ3 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ4 132 // AOP GPIO IRQ4 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ5 133 // AOP GPIO IRQ5 Interrupt
|
||||
#define INT_AOP_GPIO_IRQ6 134 // AOP GPIO IRQ6 Interrupt
|
||||
#define INT_WAKEUP_AP 135 // AOP Wakeup AP Interrupt
|
||||
#define INT_CPU_WAKEUP_AP 136 // AOP CPU Wakeup AP Interrupt
|
||||
#define INT_SCM_RX_BUFFER_FULL0 137 // AOP SCM Buffer Full 0 Interrupt
|
||||
#define INT_SCM_RX_BUFFER_FULL1 138 // AOP SCM Buffer Full 1 Interrupt
|
||||
#define INT_SCM_MAX_COUNT0 139 // AOP SCM Max Count 0 Interrupt
|
||||
#define INT_SCM_MAX_COUNT1 140 // AOP SCM Max Count 1 Interrupt
|
||||
#define INT_SCM_SLAVE_ERROR 141 // AOP SCM Slave Error Interrupt
|
||||
#define INT_AOP_UART2 142 // AOP UART2 Interrupt
|
||||
#define INT_AOP_MCA0 143 // AOP MCA0 Interrupt
|
||||
#define INT_AOP_HPD_DETECT 144 // AOP HPD Detect Interrupt
|
||||
#define INT_AOP_KF_INBOX_EMPTY 145 // AOP KF Inbox Empty Interrupt
|
||||
#define INT_AOP_KF_INBOX_NOTEMPTY 146 // AOP KF Inbox Not Empty Interrupt
|
||||
#define INT_AOP_KF_OUTBOX_EMPTY 147 // AOP KF Outbox Empty Interrupt
|
||||
#define INT_AOP_KF_OUTBOX_NOTEMPTY 148 // AOP KF Outbox Not Empty Interrupt
|
||||
#define INT_AOP_AP_WATCHDOG 149 // AOP MCA0 Interrupt
|
||||
#define INT_AOP_AP_WAKEUP_TIME 150 // AOP MCA0 Interrupt
|
||||
#define INT_AOP_CDBGPWRUPREQ 151 // AOP CDBGPWRUPREQ Interrupt
|
||||
#define INT_AOP_HPD_ERROR 152 // AOP HPD Error Interrupt
|
||||
|
||||
// Reserved 153
|
||||
|
||||
#define INT_DISP0 154 // Display 0 Interrupt
|
||||
#define INT_DISP0_PIO_DMA 155 // Display 0 PIO DMA Interrupt
|
||||
#define INT_DISP0_DART 156 // Display 0 DART Interrupt
|
||||
#define INT_DISP0_SMMU 157 // Display 0 SMMU Interrupt
|
||||
#define INT_DISP0_BACK_END_BLU 158 // Display 0 Back End Back Light Update Interrupt
|
||||
#define INT_DISP0_BACK_END_VBI 159 // Display 0 Back End VBI Interrupt
|
||||
#define INT_DISP0_BACK_END_VFTG 160 // Display 0 Back End VFTG Idle Interrupt
|
||||
#define INT_DISP0_BACK_END_VBL 161 // Display 0 Back End VBL counter Interrupt
|
||||
#define INT_DISPLAY_PORT_TX0 162 // Display Port TX 0 Interrupt
|
||||
#define INT_MIPIDSI0 163 // MIPI DSI 0 Interrupt
|
||||
#define INT_EDP0 INT_DISPLAY_PORT
|
||||
#define INT_DPORT0 INT_DISPLAY_PORT
|
||||
#define INT_DISP0_BACK_END_VBI2 164 // Display 0 Back End - VBI2 Interrupt
|
||||
#define INT_DISP0_SUBFRAME_TIMESTAMP 165 // Display 0 Sub Frame Line Count TimeStamp Interrupt
|
||||
#define INT_DISP0_BACK_END_PARAM_FIFO 166 // Display 0 Back End - Param FIFO completion Interrupt
|
||||
#define INT_PMP_KF_INBOX_EMPTY 167 // PMP KF Inbox Empty Interrupt
|
||||
#define INT_PMP_KF_INBOX_NOTEMPTY 168 // PMP KF Inbox Not Empty Interrupt
|
||||
#define INT_PMP_KF_OUTBOX_EMPTY 169 // PMP KF Outbox Empty Interrupt
|
||||
#define INT_PMP_KF_OUTBOX_NOTEMPTY 170 // PMP KF Outbox Not Empty Interrupt
|
||||
|
||||
// Reserved 171
|
||||
|
||||
#define INT_VDEC0 172 // Video Decoder 0 Interrupt
|
||||
|
||||
// Reserved 173
|
||||
|
||||
#define INT_AVE_KF_INBOX_EMPTY 174 // AVE KF Inbox Empty Interrupt
|
||||
#define INT_AVE_KF_INBOX_NOTEMPTY 175 // AVE KF Inbox Not Empty Interrupt
|
||||
#define INT_AVE_KF_OUTBOX_EMPTY 176 // AVE KF Outbox Empty Interrupt
|
||||
#define INT_AVE_KF_OUTBOX_NOTEMPTY 177 // AVE KF Outbox Not Empty Interrupt
|
||||
#define INT_AVE_SMMU 178 // AVE SMMU Interrupt
|
||||
#define INT_AVE_DART 179 // AVE DART Interrupt
|
||||
#define INT_AVE 180 // AVE Interrupt
|
||||
#define INT_SVE_SYNC 181 // SVE Driver Synchronization Interrupt
|
||||
|
||||
// Reserved 182 - 184
|
||||
|
||||
#define INT_GFX 185 // GFX Interrupt
|
||||
#define INT_GFX_SLEEP 186 // GFX Sleep Interrupt
|
||||
#define INT_GFX_WAKE 187 // GFX Wake Interrupt
|
||||
#define INT_GFX_CHG 188 // GFX Change Interrupt
|
||||
#define INT_GHX_KF_INBOX_EMPTY 189 // GHX KF Inbox Empty Interrupt
|
||||
#define INT_GHX_KF_INBOX_NOTEMPTY 190 // GHX KF Inbox Not Empty Interrupt
|
||||
#define INT_GHX_KF_OUTBOX_EMPTY 191 // GHX KF Outbox Empty Interrupt
|
||||
#define INT_GHX_KF_OUTBOX_NOTEMPTY 192 // GHX KF Outbox Not Empty Interrupt
|
||||
#define INT_GHX_FIRMWARE 193 // GHX Firmware Only Interrupt
|
||||
|
||||
// Reserved 194
|
||||
|
||||
#define INT_GPU_TIMER 195 // GPU Timer Interrupt
|
||||
#define INT_JPEG0 196 // JPEG0 Interrupt
|
||||
#define INT_JPEG0_DART 197 // JPEG0 DART Interrupt
|
||||
#define INT_JPEG0_DART_PERF 198 // JPEG0 DART Performance Interrupt
|
||||
#define INT_JPEG1 199 // JPEG1 Interrupt
|
||||
#define INT_JPEG1_DART 200 // JPEG1 DART Interrupt
|
||||
#define INT_JPEG1_DART_PERF 201 // JPEG1 DART Performance Interrupt
|
||||
|
||||
// Reserved 202 - 203
|
||||
|
||||
#define INT_MSR 204 // MSR Interrupt
|
||||
#define INT_MSR_PIO_DMA 205 // MSR PIO DMA Interrupt
|
||||
#define INT_MSR_SMMU 206 // MSR SMMU Interrupt
|
||||
#define INT_MSR_DART 207 // MSR DART Interrupt
|
||||
#define INT_MSR_DART_PERF 208 // MSR DART Performance Interrupt
|
||||
|
||||
// Reserved 209
|
||||
|
||||
#define INT_SIO_KF_INBOX_EMPTY 210 // SIO KF Inbox Empty Interrupt
|
||||
#define INT_SIO_KF_INBOX_NOTEMPTY 211 // SIO KF Inbox Not Empty Interrupt
|
||||
#define INT_SIO_KF_OUTBOX_EMPTY 212 // SIO KF Outbox Empty Interrupt
|
||||
#define INT_SIO_KF_OUTBOX_NOTEMPTY 213 // SIO KF Outbox Not Empty Interrupt
|
||||
#define INT_SPI0 214 // SPI 0 Interrupt
|
||||
#define INT_SPI1 215 // SPI 1 Interrupt
|
||||
#define INT_SPI2 216 // SPI 2 Interrupt
|
||||
#define INT_SPI3 217 // SPI 3 Interrupt
|
||||
#define INT_UART0 218 // UART 0 Interrupt
|
||||
#define INT_UART1 219 // UART 1 Interrupt
|
||||
#define INT_UART2 220 // UART 2 Interrupt
|
||||
#define INT_UART3 221 // UART 3 Interrupt
|
||||
#define INT_UART4 222 // UART 4 Interrupt
|
||||
#define INT_UART5 223 // UART 5 Interrupt
|
||||
#define INT_UART6 224 // UART 6 Interrupt
|
||||
#define INT_UART7 225 // UART 7 Interrupt
|
||||
#define INT_UART8 226 // UART 8 Interrupt
|
||||
#define INT_MCA0 227 // Multi-Channel Audio 0 Interrupt
|
||||
#define INT_MCA1 228 // Multi-Channel Audio 1 Interrupt
|
||||
#define INT_MCA2 229 // Multi-Channel Audio 2 Interrupt
|
||||
#define INT_MCA3 230 // Multi-Channel Audio 3 Interrupt
|
||||
#define INT_MCA4 231 // Multi-Channel Audio 4 Interrupt
|
||||
#define INT_IIC0 232 // I2C 0 Interrupt
|
||||
#define INT_IIC1 233 // I2C 1 Interrupt
|
||||
#define INT_IIC2 234 // I2C 2 Interrupt
|
||||
#define INT_IIC3 235 // I2C 3 Interrupt
|
||||
#define INT_PWM 236 // PWM Interrupt
|
||||
#define INT_AES0 237 // AES 0 Interrupt
|
||||
#define INT_HFD 238 // HFD Interrupt
|
||||
|
||||
// Reserved 239 - 240
|
||||
|
||||
#define INT_USB_OTG 241 // USB OTG Interrupt
|
||||
#define INT_USB2HOST0_EHCI 242 // USB EHCI 0 Interrupt
|
||||
#define INT_USB2HOST0_OHCI 243 // USB OHCI 0 Interrupt
|
||||
#define INT_USB2HOST1_EHCI 244 // USB EHCI 1 Interrupt
|
||||
|
||||
// Reserved 245
|
||||
|
||||
#define INT_USBOTG_RESUME 246 // USB OTG Resume Interrupt
|
||||
#define INT_USB_20_BATT_CHRG_DET 247 // USB 2.0 Battery Charge Detect Interrupt
|
||||
#define INT_USB2HOST0_PHY_RESUME 248 // USB Host 0 Resume Interrupt
|
||||
#define INT_USB2HOST1_PHY_RESUME 249 // USB Host 1 Resume Interrupt
|
||||
|
||||
// Reserved 250
|
||||
|
||||
#define INT_OTG_IN_EP0 251 // OTG IN Endpoint 0 Interrupt
|
||||
#define INT_OTG_IN_EP1 252 // OTG IN Endpoint 1 Interrupt
|
||||
#define INT_OTG_IN_EP2 253 // OTG IN Endpoint 2 Interrupt
|
||||
#define INT_OTG_IN_EP3 254 // OTG IN Endpoint 3 Interrupt
|
||||
#define INT_OTG_IN_EP4 255 // OTG IN Endpoint 4 Interrupt
|
||||
#define INT_OTG_IN_EP5 256 // OTG IN Endpoint 5 Interrupt
|
||||
#define INT_OTG_IN_EP6 257 // OTG IN Endpoint 6 Interrupt
|
||||
#define INT_OTG_IN_EP7 258 // OTG IN Endpoint 7 Interrupt
|
||||
#define INT_OTG_IN_EP8 259 // OTG IN Endpoint 8 Interrupt
|
||||
#define INT_OTG_OUT_EP0 260 // OTG OUT Endpoint 0 Interrupt
|
||||
#define INT_OTG_OUT_EP1 261 // OTG OUT Endpoint 1 Interrupt
|
||||
#define INT_OTG_OUT_EP2 262 // OTG OUT Endpoint 2 Interrupt
|
||||
#define INT_OTG_OUT_EP3 263 // OTG OUT Endpoint 3 Interrupt
|
||||
#define INT_OTG_OUT_EP4 264 // OTG OUT Endpoint 4 Interrupt
|
||||
#define INT_OTG_OUT_EP5 265 // OTG OUT Endpoint 5 Interrupt
|
||||
#define INT_OTG_OUT_EP6 266 // OTG OUT Endpoint 6 Interrupt
|
||||
#define INT_OTG_OUT_EP7 267 // OTG OUT Endpoint 7 Interrupt
|
||||
#define INT_OTG_OUT_EP8 268 // OTG OUT Endpoint 8 Interrupt
|
||||
|
||||
// Reserved 269
|
||||
|
||||
#define PCIE_LINK0 270 // PCIE Link 0 Interrupt
|
||||
#define PCIE_LINK0_DART 271 // PCIE Link 0 DART Interrupt
|
||||
#define PCIE_LINK0_MMU 272 // PCIE Link 0 MMU Interrupt
|
||||
#define PCIE_LINK1 273 // PCIE Link 1 Interrupt
|
||||
#define PCIE_LINK1_DART 274 // PCIE Link 1 DART Interrupt
|
||||
#define PCIE_LINK1_MMU 275 // PCIE Link 1 MMU Interrupt
|
||||
#define PCIE_LINK2 276 // PCIE Link 1 Interrupt
|
||||
#define PCIE_LINK2_DART 277 // PCIE Link 1 DART Interrupt
|
||||
#define PCIE_LINK2_MMU 278 // PCIE Link 1 MMU Interrupt
|
||||
#define PCIE_LINK3 279 // PCIE Link 1 Interrupt
|
||||
#define PCIE_LINK3_DART 280 // PCIE Link 1 DART Interrupt
|
||||
#define PCIE_LINK3_MMU 281 // PCIE Link 1 MMU Interrupt
|
||||
|
||||
// Reserved 282 - 287
|
||||
|
||||
#define PCIE_MSI0 288 // PCIE MSI 0 Interrupt
|
||||
#define PCIE_MSI1 289 // PCIE MSI 1 Interrupt
|
||||
#define PCIE_MSI2 290 // PCIE MSI 2 Interrupt
|
||||
#define PCIE_MSI3 291 // PCIE MSI 3 Interrupt
|
||||
#define PCIE_MSI4 292 // PCIE MSI 4 Interrupt
|
||||
#define PCIE_MSI5 293 // PCIE MSI 5 Interrupt
|
||||
#define PCIE_MSI6 294 // PCIE MSI 6 Interrupt
|
||||
#define PCIE_MSI7 295 // PCIE MSI 7 Interrupt
|
||||
#define PCIE_MSI8 296 // PCIE MSI 8 Interrupt
|
||||
#define PCIE_MSI9 297 // PCIE MSI 9 Interrupt
|
||||
#define PCIE_MSI10 298 // PCIE MSI 10 Interrupt
|
||||
#define PCIE_MSI11 299 // PCIE MSI 11 Interrupt
|
||||
#define PCIE_MSI12 300 // PCIE MSI 12 Interrupt
|
||||
#define PCIE_MSI13 301 // PCIE MSI 13 Interrupt
|
||||
#define PCIE_MSI14 302 // PCIE MSI 14 Interrupt
|
||||
#define PCIE_MSI15 303 // PCIE MSI 15 Interrupt
|
||||
#define PCIE_MSI16 304 // PCIE MSI 16 Interrupt
|
||||
#define PCIE_MSI17 305 // PCIE MSI 17 Interrupt
|
||||
#define PCIE_MSI18 306 // PCIE MSI 18 Interrupt
|
||||
#define PCIE_MSI19 307 // PCIE MSI 19 Interrupt
|
||||
#define PCIE_MSI20 308 // PCIE MSI 20 Interrupt
|
||||
#define PCIE_MSI21 309 // PCIE MSI 21 Interrupt
|
||||
#define PCIE_MSI22 310 // PCIE MSI 22 Interrupt
|
||||
#define PCIE_MSI23 311 // PCIE MSI 23 Interrupt
|
||||
#define PCIE_MSI24 312 // PCIE MSI 24 Interrupt
|
||||
#define PCIE_MSI25 313 // PCIE MSI 25 Interrupt
|
||||
#define PCIE_MSI26 314 // PCIE MSI 26 Interrupt
|
||||
#define PCIE_MSI27 315 // PCIE MSI 27 Interrupt
|
||||
#define PCIE_MSI28 316 // PCIE MSI 28 Interrupt
|
||||
#define PCIE_MSI29 317 // PCIE MSI 29 Interrupt
|
||||
#define PCIE_MSI30 318 // PCIE MSI 30 Interrupt
|
||||
#define PCIE_MSI31 319 // PCIE MSI 31 Interrupt
|
||||
|
||||
#else
|
||||
#error Unsupported Platform
|
||||
#endif
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_HWISR_H */
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_HWREGBASE_H
|
||||
#define __PLATFORM_SOC_HWREGBASE_H
|
||||
|
||||
#include <platform.h>
|
||||
#include <platform/memmap.h>
|
||||
|
||||
// Common definitions for T801x SoCs go here. Put everything into the
|
||||
// SoC-specific header until there is another chip in the family.
|
||||
|
||||
#include SUB_PLATFORM_SOC_HEADER(hwregbase)
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_HWREGBASE_H */
|
||||
@@ -0,0 +1,237 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_HWREGBASE_T8010_H
|
||||
#define __PLATFORM_SOC_HWREGBASE_T8010_H
|
||||
|
||||
#include <platform/memmap.h>
|
||||
|
||||
#if !SUB_PLATFORM_T8010
|
||||
#error "Include only for T8010"
|
||||
#endif
|
||||
|
||||
#define DCS_REG_VERSION (4)
|
||||
|
||||
/* T8010 Reg Base Definitions */
|
||||
|
||||
#define AMCC_BASE_ADDR(_n) (IO_BASE + ((_n) * 0x000200000)) // AMCC Config
|
||||
#define NUM_AMCCS (1)
|
||||
|
||||
#define DCS_BASE_ADDR (IO_BASE + 0x000200000) // DCS
|
||||
|
||||
#define DCS_SPACING (0x40000)
|
||||
#define SPLLCTRL_SPACING (0x00000C000)
|
||||
#define AMP_CA_SPACING (0x000020000)
|
||||
#define AMP_DQ_SPACING (0x000008000)
|
||||
#define AMP_SPACING (DCS_SPACING)
|
||||
#define AMP_BASE_ADDR (DCS_BASE_ADDR + AMP_CA_SPACING)
|
||||
#define AMPH_BASE_ADDR (AMP_BASE_ADDR + 3 * AMP_DQ_SPACING)
|
||||
|
||||
#define SWTCH_FAB_BASE_ADDR (IO_BASE + 0x000800000) // Switch Fabric Config
|
||||
|
||||
#define CP_COM_BASE_ADDR (IO_BASE + 0x000D00000) // CP Common Registers
|
||||
#define CP_COM_INT_BASE_ADDR (CP_COM_BASE_ADDR + 0x10000) // CP Common Interrupt Config Registers
|
||||
|
||||
#define CP_0_DT_DBG_CA0_ADDR (IO_BASE + 0x000D40000) // Dup Tag Debug backdoor Ram Access For CP0/CA0
|
||||
#define CP_1_DT_DBG_CA0_ADDR (IO_BASE + 0x000E40000) // Dup Tag Debug backdoor Ram Access For CP1/CA0
|
||||
|
||||
#define ACC_BASE_ADDR (IO_BASE + 0x002000000) // Apple Compute Complex
|
||||
#define CCC_CPU0_SYS_BASE_ADDR (IO_BASE + 0x002000000) // Hurricane/Zephyr CPU0 Implementation Specific Registers
|
||||
#define CCC_CPU1_SYS_BASE_ADDR (IO_BASE + 0x002100000) // Hurricane/Zephyr CPU1 Implementation Specific Registers
|
||||
|
||||
#define SOC_BUSMUX_BASE_ADDR (IO_BASE + 0x004000000) // AF SoC BusMux Config
|
||||
|
||||
#define DISP0_FAB_BASE_ADDR (IO_BASE + 0x006100000) // DisplayPipe0 AF and AXI Config
|
||||
#define DISP0_BASE_ADDR (IO_BASE + 0x006200000) // DisplayPipe0
|
||||
#define DISP0_ADP_BASE_ADDR (IO_BASE + 0x006200000) // DisplayPipe0 Configuration
|
||||
#define DISP0_SMMU_BASE_ADDR (IO_BASE + 0x006300000) // DisplayPipe0 SMMU Configuration
|
||||
#define DISP0_DART_BASE_ADDR (IO_BASE + 0x006304000) // DisplayPipe0 DART Configuration
|
||||
#define DISP0_ADBE_BASE_ADDR (IO_BASE + 0x006400000) // DisplayPipe0 Backend Config
|
||||
#define DISP0_AAP_BASE_ADDR (IO_BASE + 0x006440000) // DisplayPipe0 Ambient-Adaptive Pixel Config
|
||||
#define DISP0_DPB_BASE_ADDR (IO_BASE + 0x006480000) // DisplayPipe0 Dynamic Pixel Backlight Config
|
||||
#define DISP0_WPC_BASE_ADDR (IO_BASE + 0x0064C0000) // DisplayPipe0 White Point Correction Config
|
||||
#define DISP0_PRC_BASE_ADDR (IO_BASE + 0x006500000) // DisplayPipe0 Panel Regamma Correction Config
|
||||
#define DISP0_DITHER_BASE_ADDR (IO_BASE + 0x006540000) // DisplayPipe0 Dither Config
|
||||
#define DISP0_CDRR_BASE_ADDR (IO_BASE + 0x0065C0000) // DisplayPipe0 Content Dependent Refresh Rate Statistics Config
|
||||
#define DISP0_ADP_PARAM_FIFO_BASE_ADDR (IO_BASE + 0x006600000) // DisplayPipe0 Backend Parameter Buffer Config
|
||||
#define DITHER_BASE_ADDR DISP0_DITHER_BASE_ADDR
|
||||
#define DITHER_VERSION (3)
|
||||
|
||||
#define DISP0_DPTX_BASE_ADDR (IO_BASE + 0x006780000) // DisplayPipe0 DisplayPort TX Config
|
||||
#define DISP0_MIPI_DSI_BASE_ADDR (IO_BASE + 0x006800000) // DisplayPipe0 MIPI DSI Config
|
||||
|
||||
#define ASIO_MISC_0_BASE_ADDR (IO_BASE + 0x00A000000) // ASIO Shim0 Misc Registers
|
||||
#define ASIO_AUD_MUX_BASE_ADDR (IO_BASE + 0x00A003000) // ASIO Audio I2S Switch Config
|
||||
#define ASIO_SPI_BASE_ADDR (IO_BASE + 0x00A080000) // ASIO SPI Device
|
||||
#define ASIO_SPI_TX_CFG_BASE_ADDR (IO_BASE + 0x00A081000) // ASIO SPI TX DMA Channel
|
||||
#define ASIO_SPI_RX_CFG_BASE_ADDR (IO_BASE + 0x00A081800) // ASIO SPI RX DMA Channel
|
||||
#define ASIO_SPI_TX_FIFO_BASE_ADDR (IO_BASE + 0x00A082000) // ASIO SPI TX DMA Shim FIFO
|
||||
#define ASIO_SPI_RX_FIFO_BASE_ADDR (IO_BASE + 0x00A083000) // ASIO SPI RX DMA Shim FIFO
|
||||
#define ASIO_MCA_BASE_ADDR (IO_BASE + 0x00A0A0000) // ASIO MCA Device
|
||||
#define ASIO_MCA_TX_CFG_BASE_ADDR (IO_BASE + 0x00A0A1000) // ASIO MCA TX DMA Channel
|
||||
#define ASIO_MCA_RX_CFG_BASE_ADDR (IO_BASE + 0x00A0A1800) // ASIO MCA RX DMA Channel
|
||||
#define ASIO_MCA_TX_FIFO_BASE_ADDR (IO_BASE + 0x00A0A2000) // ASIO MCA TX DMA Shim FIFO
|
||||
#define ASIO_MCA_RX_FIFO_BASE_ADDR (IO_BASE + 0x00A0A3000) // ASIO MCA RX DMA Shim FIFO
|
||||
#define ASIO_PDM_BASE_ADDR (IO_BASE + 0x00A0B4000) // ASIO PDM Device
|
||||
#define ASIO_PDM_DEMOD_BASE_ADDR (IO_BASE + 0x00A0B4000)
|
||||
#define ASIO_PDM_TX_CFG_BASE_ADDR (IO_BASE + 0x00A0B5000)
|
||||
#define ASIO_PDM_RX_CFG_BASE_ADDR (IO_BASE + 0x00A0B5800)
|
||||
#define ASIO_PDM_TX_FIFO_BASE_ADDR (IO_BASE + 0x00A0BC000)
|
||||
#define ASIO_PDM_RX_FIFO_BASE_ADDR (IO_BASE + 0x00A0B7000)
|
||||
#define ASIO_UART_BASE_ADDR (IO_BASE + 0x00A0C0000) // ASIO UART Device
|
||||
#define ASIO_UART_TX_CFG_BASE_ADDR (IO_BASE + 0x00A0C1000) // ASIO UART TX DMA Channel
|
||||
#define ASIO_UART_RX_CFG_BASE_ADDR (IO_BASE + 0x00A0C1800) // ASIO UART RX DMA Channel
|
||||
#define ASIO_UART_TX_FIFO_BASE_ADDR (IO_BASE + 0x00A0C2000) // ASIO UART TX DMA Shim FIFO
|
||||
#define ASIO_UART_RX_FIFO_BASE_ADDR (IO_BASE + 0x00A0C3000) // ASIO UART RX DMA Shim FIFO
|
||||
#define ASIO_MISC_1_BASE_ADDR (IO_BASE + 0x00A100000) // ASIO Shim1 Misc Registers
|
||||
#define ASIO_AES_BASE_ADDR (IO_BASE + 0x00A108000) // ASIO AES Config and DMA Registers
|
||||
#define ASIO_SMB_0_BASE_ADDR (IO_BASE + 0x00A110000) // ASIO I2C 0 Device
|
||||
#define ASIO_SMB_1_BASE_ADDR (IO_BASE + 0x00A111000) // ASIO I2C 1 Device
|
||||
#define ASIO_SMB_2_BASE_ADDR (IO_BASE + 0x00A112000) // ASIO I2C 2 Device
|
||||
#define ASIO_SMB_3_BASE_ADDR (IO_BASE + 0x00A113000) // ASIO I2C 3 Device
|
||||
#define ASIO_PWM_BASE_ADDR (IO_BASE + 0x00A118000) // ASIO PWM
|
||||
#define ASIO_PL301_BASE_ADDR (IO_BASE + 0x00A140000) // ASIO PL301
|
||||
#define ASIO_PL301_AES_BASE_ADDR (IO_BASE + 0x00A141000) // ASIO PL301 AES
|
||||
#define ASIO_DNSZ_AXI_0_BASE_ADDR (IO_BASE + 0x00A142000) // ASIO Downsizer 0 Configuration Registers
|
||||
#define ASIO_DNSZ_AXI_1_BASE_ADDR (IO_BASE + 0x00A143000) // ASIO Downsizer 1 Configuration Registers
|
||||
#define ASIO_AKF_BASE_ADDR (IO_BASE + 0x00AE00000) // ASIO KF Wrapper
|
||||
#define ASIO_AKF_DEBUG_BASE_ADDR (IO_BASE + 0x00AE20000) // ASIO KF Debug Wrapper
|
||||
|
||||
#define AUSB_CTL_REG_BASE_ADDR (IO_BASE + 0x00C000000) // USBCTL Config
|
||||
#define AUSB_CTL_USB20PHY_REG_OFFSET (0x30) // USB20PHY Register offset within AUSBCTL registers
|
||||
#define AUSB_OTG_BASE_ADDR (IO_BASE + 0x00C100000) // USB OTG
|
||||
#define AUSB_USB2HOST0_EHCI_BASE_ADDR (IO_BASE + 0x00C200000) // EHCI0
|
||||
#define AUSB_USB2HOST0_OHCI_BASE_ADDR (IO_BASE + 0x00C300000) // OHCI0
|
||||
#define AUSB_PL301_BASE_ADDR (IO_BASE + 0x00C800000) // AUSB PL301 4-AHB Master to 1-AXI Slave
|
||||
#define AUSB_PL301_WIDGET_BASE_ADDR (IO_BASE + 0x00C900000) // AUSB PL301 Widget
|
||||
#define AUSB_INTR2AXI_BASE_ADDR (IO_BASE + 0x00CA00000) // AUSB Interrupt to AXI Widget
|
||||
#define AUSB_AFIFO_WIDGET_BASE_ADDR (IO_BASE + 0x00CB00000) // AUSB Async FIFO
|
||||
|
||||
#define ASEP_AKF_BASE_ADDR (IO_BASE + 0x00DA00000) // ASEP AKF control Registers
|
||||
|
||||
#define PMGR_BASE_ADDR (IO_BASE + 0x00E000000) // PMGR
|
||||
#define PMS_CRS_BASE_ADDR (IO_BASE + 0x00E400000) // PMS control registers
|
||||
|
||||
#define AIC_BASE_ADDR (IO_BASE + 0x00E100000) // AIC
|
||||
#define AIC_WIRE_VIRT_BASE_ADDR (IO_BASE + 0x00E110000) // AIC Wrapper
|
||||
|
||||
#define DWI_BASE_ADDR (IO_BASE + 0x00E200000) // DWI
|
||||
|
||||
#define AFC_AIU_SB_BASE_ADDR (IO_BASE + 0x00F000000) // AFC_AIU_SB
|
||||
|
||||
#define GPIO_BASE_ADDR (IO_BASE + 0x00F100000) // GPIO
|
||||
#define GLBTIMER_BASE_ADDR (IO_BASE + 0x00F140000) // Global Timer
|
||||
|
||||
#define LIO_MEM_PL301_BASE_ADDR (IO_BASE + 0x00F160000) // PL310 for pd_lio memory
|
||||
#define LIO_PIO_PL310_BASE_ADDR (IO_BASE + 0x00F180000) // PL310 for pd_lio PIO
|
||||
#define LIO_DNSZ_AXI_BASE_ADDR (IO_BASE + 0x00F1A0000) // PL310 for pd_lio downsizer
|
||||
|
||||
#define SB_GLUE_REG_BASE (IO_BASE + 0x00f1c0000) // Local registers for south bridge
|
||||
|
||||
#define ERR_REFLECTION_BASE_ADDR (IO_BASE + 0x00FFFC000)
|
||||
|
||||
#define AOP_BASE_ADDR (IO_BASE + 0x010000000)
|
||||
#define AOP_MINIPMGR_BASE_ADDR (IO_BASE + 0x010200000)
|
||||
#define DBG_WRP_BASE_ADDR (IO_BASE + 0x010300000) // Debug Sub-system Config
|
||||
#define AOP_GPIO_BASE_ADDR (IO_BASE + 0x0100f0000)
|
||||
#define AOP_SRAM_BASE_ADDR (IO_BASE + 0x010E00000)
|
||||
#define AOP_RECONFIG_REGION_BASE_ADDR (IO_BASE + 0x010E9B000)
|
||||
#define AOP_RECONFIG_REGION_SIZE (IO_BASE + 0x010EA0000 - AOP_RECONFIG_REGION_BASE_ADDR)
|
||||
#define MEMORY_CALIB_SAVE_BASE_ADDR AOP_SRAM_BASE_ADDR // Temporarily save cold boot memcal results in AOP_SRAM
|
||||
|
||||
#define APCIE_VERSION (2)
|
||||
#define APCIE_COMMON_BASE_ADDR (PCI_REG_BASE + 0x00000000)
|
||||
#define APCIE_COUNTER_BASE_ADDR (PCI_REG_BASE + 0x00004000)
|
||||
#define APCIE_PHY_BASE_ADDR (PCI_REG_BASE + 0x00008000)
|
||||
#define APCIE_CONFIG_BASE_ADDR (PCI_REG_BASE + 0x01000000)
|
||||
#define APCIE_CONFIG_PORT_STRIDE (0x01000000)
|
||||
#define APCIE_PHY_PMA_COMMON_BASE_ADDR (PCI_REG_BASE + 0x0a000000)
|
||||
#define APCIE_PHY_PMA_TX_LANE_BASE_ADDR (PCI_REG_BASE + 0x0a010000)
|
||||
#define APCIE_PHY_PMA_TX_LANE_STRIDE (0x800)
|
||||
#define APCIE_PHY_PMA_RX_LANE_BASE_ADDR (PCI_REG_BASE + 0x0a020000)
|
||||
#define APCIE_PHY_PMA_RX_LANE_STRIDE (0x800)
|
||||
|
||||
/* iBoot Specific Defs */
|
||||
|
||||
#define AKF_VERSION (2)
|
||||
|
||||
#define UART0_BASE_ADDR (ASIO_UART_BASE_ADDR)
|
||||
#define UART1_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x04000)
|
||||
#define UART2_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x08000)
|
||||
#define UART3_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x0C000)
|
||||
#define UART4_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x10000)
|
||||
#define UART5_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x14000)
|
||||
#define UART6_BASE_ADDR (ASIO_UART_BASE_ADDR + 0x18000)
|
||||
#define UARTS_COUNT (7)
|
||||
#define UART_VERSION (1)
|
||||
|
||||
#define SPI0_BASE_ADDR (ASIO_SPI_BASE_ADDR)
|
||||
#define SPI1_BASE_ADDR (ASIO_SPI_BASE_ADDR + 0x04000)
|
||||
#define SPI2_BASE_ADDR (ASIO_SPI_BASE_ADDR + 0x08000)
|
||||
#define SPI_VERSION (1)
|
||||
#define SPIS_COUNT (3)
|
||||
|
||||
#define IIC_BASE_ADDR (ASIO_SMB_0_BASE_ADDR)
|
||||
#define IIC_SPACING (0x00001000)
|
||||
#define IICS_COUNT (4)
|
||||
|
||||
#define USBPHY_VERSION (4)
|
||||
|
||||
#define DSIM_BASE_ADDR (DISP0_MIPI_DSI_BASE_ADDR)
|
||||
#define DSIM_LANE_COUNT (4)
|
||||
#define DSIM_VERSION (2)
|
||||
|
||||
#define EDP_BASE_ADDR (DISP0_DPTX_BASE_ADDR)
|
||||
#define DP_BASE_ADDR (DISP0_DPTX_BASE_ADDR)
|
||||
#define LPDP_PHY_BASE_ADDR (DISP0_DPTX_BASE_ADDR + 0x080000)
|
||||
#define DISPLAYPORT_VERSION (3)
|
||||
|
||||
#define ADBE_DISPLAYPIPE_BASE_ADDR (DISP0_BASE_ADDR)
|
||||
#define DISP_VERSION (5)
|
||||
#define ADP_VERSION (2)
|
||||
|
||||
#define GPIOC_COUNT (2)
|
||||
#define GPIO_VERSION (6)
|
||||
#define GPIO_0_GROUP_COUNT (26)
|
||||
#define GPIO_1_BASE_ADDR (AOP_GPIO_BASE_ADDR)
|
||||
#define GPIO_1_GROUP_COUNT (11)
|
||||
#define GPIO_AP (GPIOC_0)
|
||||
#define GPIO_AOP (GPIOC_1)
|
||||
#define GPIO_GROUP_COUNT (GPIO_0_GROUP_COUNT)
|
||||
#define GPIO_PAD_SPI (GPIO_GROUP_COUNT)
|
||||
|
||||
#define AIC_VERSION (3)
|
||||
#define AIC_INT_COUNT (320)
|
||||
|
||||
#define PMGR_WDG_VERSION (1)
|
||||
|
||||
#define USBOTG_BASE_ADDR (AUSB_OTG_BASE_ADDR)
|
||||
|
||||
#define APCIE_NUM_LINKS (4)
|
||||
|
||||
#define DART0_BASE_ADDR (PCI_REG_BASE + 0x1008000)
|
||||
#define DART0_ADDR_MASK (0x3FFFFFFF)
|
||||
#define DART1_BASE_ADDR (PCI_REG_BASE + 0x2008000)
|
||||
#define DART1_ADDR_MASK (0x3FFFFFFF)
|
||||
#define DART2_BASE_ADDR (PCI_REG_BASE + 0x3008000)
|
||||
#define DART2_ADDR_MASK (0x3FFFFFFF)
|
||||
#define DART3_BASE_ADDR (PCI_REG_BASE + 0x4008000)
|
||||
#define DART3_ADDR_MASK (0x3FFFFFFF)
|
||||
|
||||
#define PCIE_PORT0_DART_ID (0)
|
||||
#define PCIE_PORT1_DART_ID (1)
|
||||
#define PCIE_PORT2_DART_ID (2)
|
||||
#define PCIE_PORT3_DART_ID (3)
|
||||
#define NUM_DARTS (4)
|
||||
|
||||
#define AES_AP_BASE_ADDR (ASIO_AES_BASE_ADDR)
|
||||
#define AES_AP_VERSION (0)
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_HWREGBASE_T8010_H */
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_MIU_H
|
||||
#define __PLATFORM_SOC_MIU_H
|
||||
|
||||
#include <lib/devicetree.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include SUB_PLATFORM_SPDS_HEADER(afc_aiu_sb)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(amcc)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(cp_com)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(minipmgr)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(misc1)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(pms_csr)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(sb_glue)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(socbusmux)
|
||||
#include SUB_PLATFORM_SPDS_HEADER(switchfabric)
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/MINIPMGR.html?baseaddr=0x210200000#MINIPMGR_SECURITY
|
||||
#define rSECUREROMCTRL_ROMADDRREMAP (*(volatile u_int32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_MCC_ROMADDRREMAP_OFFSET))
|
||||
#define SECUREROMCTRL_ROMADDRREMAP_SRAM (1 << 0)
|
||||
#define SECUREROMCTRL_ROMADDRREMAP_SDRAM (1 << 1)
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/amcc.html?baseaddr=0x200000000
|
||||
#define MCCLOCKREGION_TZ0BASEADDR(_n) (AMCC_BASE_ADDR(_n) + AMCC_MCC_LOCK_REGION_TZ0_BASE_ADDR_OFFSET)
|
||||
#define MCCLOCKREGION_TZ0ENDADDR(_n) (AMCC_BASE_ADDR(_n) + AMCC_MCC_LOCK_REGION_TZ0_END_ADDR_OFFSET)
|
||||
#define MCCLOCKREGION_TZ0LOCK(_n) (AMCC_BASE_ADDR(_n) + AMCC_MCC_LOCK_REGION_TZ0_LOCK_OFFSET)
|
||||
|
||||
#define rMCCLOCKREGION_TZ0BASEADDR(_n) (*(volatile u_int32_t *)(MCCLOCKREGION_TZ0BASEADDR(_n)))
|
||||
#define rMCCLOCKREGION_TZ0ENDADDR(_n) (*(volatile u_int32_t *)(MCCLOCKREGION_TZ0ENDADDR(_n)))
|
||||
#define rMCCLOCKREGION_TZ0LOCK(_n) (*(volatile u_int32_t *)(MCCLOCKREGION_TZ0LOCK(_n)))
|
||||
|
||||
#define rAMCC_IRERRDBG_INTEN(_n) (*(volatile uint32_t *)(AMCC_BASE_ADDR(_n) + AMCC_IRERRDBG_INTEN_OFFSET))
|
||||
#define rAMCC_IRERRDBG_INTSTS(_n) (*(volatile uint32_t *)(AMCC_BASE_ADDR(_n) + AMCC_IRERRDBG_INTSTS_OFFSET))
|
||||
#define rAMCC_IRERRDBG_MCC_AF_ERR_LOG2(_n) (*(volatile uint32_t *)(AMCC_BASE_ADDR(_n) + AMCC_IRERRDBG_MCC_AF_ERR_LOG2_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/SWITCHFABRIC.html?baseaddr=0x200800000
|
||||
#define rSWITCH_FAB_CPG_CNTL (*(volatile u_int32_t *)(SWTCH_FAB_BASE_ADDR + SWITCHFABRIC_BLK_REGS_CPG_CNTL_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/CP_COM.html?baseaddr=0x200d00000
|
||||
#define rCP_COM_DYN_CLK_GATING_CTRL (*(volatile u_int32_t *)(CP_COM_BASE_ADDR + CP_COM_CFG_DYN_CLK_GATE_CTRL_OFFSET))
|
||||
#define rCP_COM_INT_NORM_REQUEST (*(volatile u_int32_t *)(CP_COM_INT_BASE_ADDR + CP_COM_INT_NORM_REQUEST_OFFSET))
|
||||
#define rCP_COM_INT_NORM_MASK_SET (*(volatile u_int32_t *)(CP_COM_INT_BASE_ADDR + CP_COM_INT_NORM_MASK_SET_OFFSET))
|
||||
#define rCP_COM_INT_NORM_MASK_CLR (*(volatile u_int32_t *)(CP_COM_INT_BASE_ADDR + CP_COM_INT_NORM_MASK_CLR_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/SOCBUSMUX.html?baseaddr=0x204000000
|
||||
#define rSOCBUSMUX_CPG_CNTL (*(volatile u_int32_t *)(SOC_BUSMUX_BASE_ADDR + SOCBUSMUX_BLK_REGS_CPG_CNTL_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/Misc1.html?baseaddr=0x20a100000
|
||||
#define rASIO_CLK_CTRL (*(volatile u_int32_t *)(ASIO_MISC_1_BASE_ADDR + MISC1_BLK_CLOCK_CONTROL_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/pmsCSR.html?baseaddr=0x20e400000
|
||||
#define rPMS_SRAM_CPG_CTRL (*(volatile u_int32_t *)(PMS_CRS_BASE_ADDR + PMS_CSR_PMSCSR_PMP_PMS_SRAM_CPG_CTRL_OFFSET))
|
||||
#define rPMP_CPG_CTRL (*(volatile u_int32_t *)(PMS_CRS_BASE_ADDR + PMS_CSR_PMSCSR_PMP_PMP_CPG_CTRL_OFFSET))
|
||||
#define rPMS_CPG_CTRL (*(volatile u_int32_t *)(PMS_CRS_BASE_ADDR + PMS_CSR_PMSCSR_PMP_PMS_CPG_CTRL_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/afc_aiu_sb.html?baseaddr=0x20f000000
|
||||
#define rAIU_SB_CPG_CNTL (*(volatile u_int32_t *)(AFC_AIU_SB_BASE_ADDR + AFC_AIU_SB_SELF_OFFSET))
|
||||
|
||||
// https://seg-docs.ecs.apple.com/projects/cayman//release/UserManual/regs/DYNAMIC_CLK_GATING.html?baseaddr=0x20f1c0000
|
||||
#define rDYN_CLK_GATING (*(volatile u_int32_t *)(SB_GLUE_REG_BASE + SB_GLUE_BLK_DYNAMIC_CLK_GATING_OFFSET))
|
||||
#define rDYN_CLK_GATING2 (*(volatile u_int32_t *)(SB_GLUE_REG_BASE + SB_GLUE_BLK_DYNAMIC_CLK_GATING2_OFFSET))
|
||||
|
||||
enum remap_select {
|
||||
REMAP_SRAM = 0,
|
||||
REMAP_SDRAM
|
||||
};
|
||||
|
||||
extern void miu_select_remap(enum remap_select sel);
|
||||
extern void miu_bypass_prep(void);
|
||||
extern void miu_update_device_tree(DTNode *pmgr_node);
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_MIU_H */
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2013 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_OPERATING_POINT_H
|
||||
#define __PLATFORM_SOC_OPERATING_POINT_H
|
||||
|
||||
#include <platform/soc/chipid.h>
|
||||
struct operating_point_params {
|
||||
union {
|
||||
struct {
|
||||
uint64_t voltage_index:9;
|
||||
uint64_t bypass:1;
|
||||
uint64_t clkSrc:1;
|
||||
uint64_t fcwInt:8;
|
||||
uint64_t fcwFrac:3;
|
||||
uint64_t pstDivS:4;
|
||||
uint64_t migDivS:4;
|
||||
uint64_t coreTyp:2;
|
||||
uint64_t biuDiv4HiVol:3;
|
||||
uint64_t biuDiv4LoVol:3;
|
||||
uint64_t dvmrMaxWgt:7;
|
||||
uint64_t iexrfCfgWrData:2;
|
||||
uint64_t iexrfCfgWrIdxa:2;
|
||||
uint64_t iexrfCfgWrIdxb:2;
|
||||
uint64_t exrfCfgWrIdxmuxsel:2;
|
||||
} cpu;
|
||||
struct {
|
||||
uint64_t voltage_index:9;
|
||||
uint64_t preDivP:6;
|
||||
uint64_t fbkDivM:9;
|
||||
uint64_t pstDivS:4;
|
||||
} gpu;
|
||||
struct {
|
||||
uint64_t voltage_index:9; // must contains CHIPID_MAX
|
||||
uint64_t chip_id:16;
|
||||
uint64_t voltage_type:3;
|
||||
uint64_t reserved:34;
|
||||
};
|
||||
};
|
||||
};
|
||||
extern const struct operating_point_params *operating_point_get_params(enum chipid_voltage_index voltage_index, enum chipid_voltage_type voltage_type);
|
||||
|
||||
|
||||
|
||||
#endif /* __PLATFORM_SOC_CHIPID_H */
|
||||
@@ -0,0 +1,581 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_SOC_PMGR_H
|
||||
#define __PLATFORM_SOC_PMGR_H
|
||||
|
||||
#include <lib/devicetree.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <soc/t8010/a0/acc.h>
|
||||
#include <soc/t8010/a0/minipmgr.h>
|
||||
#include <soc/t8010/a0/pmgr.h>
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PMGR specific
|
||||
//
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
enum coreTyp {
|
||||
kACC_CORETYP_ECORE,
|
||||
kACC_CORETYP_PCORE,
|
||||
kACC_CORETYP_FUSED
|
||||
};
|
||||
|
||||
#define PMGR_PLL_COUNT (7)
|
||||
|
||||
#define PMGR_PLL_REG_STRIDE (PMGR_PLL1_OFFSET - PMGR_PLL0_OFFSET)
|
||||
|
||||
#define rPMGR_PLL_CTL(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
#define PMGR_PLL_ENABLE (1 << PMGR_PLL0_CTL_ENABLE_SHIFT)
|
||||
#define PMGR_PLL_LOAD (1 << PMGR_PLL0_CTL_LOAD_SHIFT)
|
||||
#define PMGR_PLL_BYPASS (1 << PMGR_PLL0_CTL_BYPASS_SHIFT)
|
||||
#define PMGR_PLL_PENDING (1 << PMGR_PLL0_CTL_PLL_PENDING_SHIFT)
|
||||
#define PMGR_PLL_M_SHIFT PMGR_PLL0_CTL_FB_DIVN_SHIFT
|
||||
#define PMGR_PLL_M_MASK PMGR_PLL0_CTL_FB_DIVN_SMASK
|
||||
#define PMGR_PLL_P_SHIFT PMGR_PLL0_CTL_PRE_DIVN_SHIFT
|
||||
#define PMGR_PLL_P_MASK PMGR_PLL0_CTL_PRE_DIVN_SMASK
|
||||
#define PMGR_PLL_S_SHIFT PMGR_PLL0_CTL_OP_DIVN_SHIFT
|
||||
#define PMGR_PLL_S_MASK PMGR_PLL0_CTL_OP_DIVN_SMASK
|
||||
#define PMGR_PLL_PCIE_S_MASK PMGR_PLL_PCIE_CTL_OP_DIVN_SMASK
|
||||
#define PMGR_PLL_M(_m) (((_m) & PMGR_PLL_M_MASK) << PMGR_PLL_M_SHIFT)
|
||||
#define PMGR_PLL_P(_p) (((_p) & PMGR_PLL_P_MASK) << PMGR_PLL_P_SHIFT)
|
||||
#define PMGR_PLL_S(_s) (((_s) & PMGR_PLL_S_MASK) << PMGR_PLL_S_SHIFT)
|
||||
#define PMGR_PLL_PCIE_S(_s) (((_s) & PMGR_PLL_PCIE_S_MASK) << PMGR_PLL_S_SHIFT)
|
||||
#define PMGR_PLL_FREQ(_m, _p, _s) ((((_m) * OSC_FREQ) / (_p))/((_s) + 1))
|
||||
|
||||
#define rPMGR_PLL_CFG(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x0004 + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
#define PMGR_PLL_OFF_MODE(_n) PMGR_PLL0_CFG_OFF_MODE_INSRT(_n)
|
||||
#define PMGR_PLL_OFF_MODE_RESET (0)
|
||||
#define PMGR_PLL_OFF_MODE_CLOCK_GATED (1)
|
||||
#define PMGR_PLL_OFF_MODE_POWER_DOWN (2)
|
||||
#define PMGR_PLL_LOCK_MODE(_n) PMGR_PLL0_CFG_LOCK_MODE_INSRT(_n)
|
||||
#define PMGR_PLL_LOCK_MODE_COUNTER (0)
|
||||
#define PMGR_PLL_LOCK_MODE_LOCK (1)
|
||||
#define PMGR_PLL_AUTO_DISABLE (1 << PMGR_PLL0_CFG_AUTO_DISABLE_SHIFT)
|
||||
#define PMGR_PLL_RELOCK_MODE_SHIFT PMGR_PLL0_CFG_RELOCK_MODE_SHIFT
|
||||
#define PMGR_PLL_RELOCK_MODE_MASK PMGR_PLL0_CFG_RELOCK_MODE_SMASK
|
||||
#define PMGR_PLL_RELOCK_MODE_STOP (0)
|
||||
#define PMGR_PLL_RELOCK_MODE_BYPASS (1)
|
||||
#define PMGR_PLL_FRAC_LOCK_TIME(_n) PMGR_PLL0_CFG_FRAC_LOCK_TIME_INSRT(_n)
|
||||
#define PMGR_PLL_LOCK_TIME(_n) PMGR_PLL0_CFG_LOCK_TIME_INSRT(_n)
|
||||
|
||||
#define rPMGR_PLL_ANA_PARAMS1(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x000c + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
#define rPMGR_PLL_ANA_PARAMS2(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x0010 + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
#define rPMGR_PLL_ANA_PARAMS3(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x0014 + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
|
||||
#define rPMGR_PLL_DEBUG1(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x0014 + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
#define PMGR_PLL_DEBUG1_RESERVE_IN_SHIFT (20)
|
||||
#define PMGR_PLL_DEBUG1_RESERVE_IN_MASK (0x3f)
|
||||
|
||||
#define rPMGR_PLL_PCIE_DELAY_CTL0(_p) (*(volatile uint32_t *)(PMGR_BASE_ADDR + 0x0028 + ((_p == PLL_PCIE) ? PMGR_PLL_PCIE_OFFSET : ((_p) * PMGR_PLL_REG_STRIDE))))
|
||||
|
||||
#define rPMGR_CLK_CFG(_x) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_CLKCFG_##_x##_CLK_CFG_OFFSET))
|
||||
|
||||
#define PMGR_CLK_CFG_ENABLE (1 << 31)
|
||||
#define PMGR_CLK_CFG_PENDING (1 << 30)
|
||||
#define PMGR_CLK_CFG_PENDING_SHIFT (30)
|
||||
#define PMGR_CLK_CFG_SRC_SEL_MASK (0xF)
|
||||
#define PMGR_CLK_CFG_SRC_SEL_SHIFT (24)
|
||||
#define PMGR_CLK_CFG_DIVISOR_MASK (0x3F)
|
||||
|
||||
#define PMGR_SPARE_COUNT (7)
|
||||
|
||||
#define rPMGR_CLK_DIVIDER_ACG_CFG (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_CLKCFG_CLK_DIVIDER_ACG_CFG_OFFSET))
|
||||
|
||||
#define PMGR_NCO_REG_STRIDE (PMGR_NCO_1_CLK_CFG_OFFSET - PMGR_NCO_0_CLK_CFG_OFFSET)
|
||||
|
||||
#define rPMGR_NCO_CLK_CFG(_n) (*(volatile uint32_t *) (PMGR_BASE_ADDR + (_n) * PMGR_NCO_REG_STRIDE + PMGR_NCO_0_CLK_CFG_OFFSET))
|
||||
#define rPMGR_NCO_DIV_INT(_n) (*(volatile uint32_t *) (PMGR_BASE_ADDR + (_n) * PMGR_NCO_REG_STRIDE + PMGR_NCO_0_DIV_INT_OFFSET))
|
||||
#define rPMGR_NCO_DIV_FRAC_N1(_n) (*(volatile uint32_t *) (PMGR_BASE_ADDR + (_n) * PMGR_NCO_REG_STRIDE + PMGR_NCO_0_DIV_FRAC_N1_OFFSET))
|
||||
#define rPMGR_NCO_DIV_FRAC_N2(_n) (*(volatile uint32_t *) (PMGR_BASE_ADDR + (_n) * PMGR_NCO_REG_STRIDE + PMGR_NCO_0_DIV_FRAC_N2_OFFSET))
|
||||
#define rPMGR_NCO_DIV_FRAC_PRIME(_n) (*(volatile uint32_t *) (PMGR_BASE_ADDR + (_n) * PMGR_NCO_REG_STRIDE + PMGR_NCO_0_DIV_FRAC_PRIME_OFFSET))
|
||||
|
||||
#define PMGR_NCO_CLK_CFG_ENABLE (1 << PMGR_NCO_0_CLK_CFG_ENABLE_SHIFT)
|
||||
#define PMGR_NCO_CLK_CFG_PENDING (1 << PMGR_NCO_0_CLK_CFG_PENDING_SHIFT)
|
||||
|
||||
#define PMGR_NUM_NCO (5)
|
||||
|
||||
#define kSOC_PERF_STATE_BYPASS (0)
|
||||
#define kSOC_PERF_STATE_SECUREROM (kSOC_PERF_STATE_BYPASS + 1)
|
||||
#define kSOC_PERF_STATE_IBOOT (kSOC_PERF_STATE_BYPASS + 2)
|
||||
#define kSOC_PERF_STATE_VMIN (kSOC_PERF_STATE_IBOOT + 0)
|
||||
#define kSOC_PERF_STATE_VNOM (kSOC_PERF_STATE_IBOOT + 1)
|
||||
|
||||
#define kSOC_PERF_STATE_VMAX (kSOC_PERF_STATE_VNOM)
|
||||
|
||||
#define kSOC_PERF_STATE_IBOOT_CNT (kSOC_PERF_STATE_VMAX + 1)
|
||||
#define kSOC_PERF_STATE_MAX_CNT (14)
|
||||
|
||||
#define rPMGR_SOC_PERF_STATE_CTL (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SOC_PERF_STATE_CTL_OFFSET))
|
||||
#define PMGR_SOC_PERF_STATE_CTL_PENDING_MASK (1 << PMGR_SOC_PERF_STATE_CTL_PENDING_SHIFT)
|
||||
|
||||
#define PMGR_SOC_PERF_STATE_STRIDE (PMGR_SOC_PERF_STATE_ENTRY_1A_OFFSET - PMGR_SOC_PERF_STATE_ENTRY_0A_OFFSET)
|
||||
|
||||
#define rPMGR_SOC_PERF_STATE_ENTRY_A(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SOC_PERF_STATE_ENTRY_0A_OFFSET + (_n) * PMGR_SOC_PERF_STATE_STRIDE))
|
||||
#define rPMGR_SOC_PERF_STATE_ENTRY_B(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SOC_PERF_STATE_ENTRY_0B_OFFSET + (_n) * PMGR_SOC_PERF_STATE_STRIDE))
|
||||
#define rPMGR_SOC_PERF_STATE_ENTRY_C(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SOC_PERF_STATE_ENTRY_0C_OFFSET + (_n) * PMGR_SOC_PERF_STATE_STRIDE))
|
||||
#define rPMGR_SOC_PERF_STATE_ENTRY_D(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SOC_PERF_STATE_ENTRY_0D_OFFSET + (_n) * PMGR_SOC_PERF_STATE_STRIDE))
|
||||
|
||||
#define PMGR_SOC_PERF_STATE_ENTRY_MCU_REF_MASK (PMGR_SOC_PERF_STATE_ENTRY_0A_MCU_REF_SRC_SEL_UMASK | PMGR_SOC_PERF_STATE_ENTRY_0A_MCU_REF_CFG_SEL_UMASK)
|
||||
#define PMGR_SOC_PERF_STATE_ENTRY_MCU_REF(_cfg, _src) (PMGR_SOC_PERF_STATE_ENTRY_0A_MCU_REF_SRC_SEL_INSRT(_src) | PMGR_SOC_PERF_STATE_ENTRY_0A_MCU_REF_CFG_SEL_INSRT(_cfg))
|
||||
#define PMGR_SOC_PERF_STATE_ENTRY_VID0(_src) (PMGR_SOC_PERF_STATE_ENTRY_0B_VID0_SRC_SEL_INSRT(_src))
|
||||
#define PMGR_SOC_PERF_STATE_ENTRY_VOLTAGE(_v) (PMGR_SOC_PERF_STATE_ENTRY_0C_VOLTAGE_INSRT(_v))
|
||||
|
||||
#define PMGR_SOC_PERF_STATE_ENTRY_COUNT (16)
|
||||
// First two entries used by AOP Config Engine
|
||||
#define PMGR_SOC_PERF_STATE_FIRST_ENTRY (PMGR_SOC_PERF_STATE_ENTRY_COUNT - kSOC_PERF_STATE_MAX_CNT)
|
||||
#define PMGR_SOC_PERF_STATE_TO_ENTRY(_s) (PMGR_SOC_PERF_STATE_ENTRY_COUNT - (_s) - 1)
|
||||
|
||||
#define kPMGR_GFX_STATE_MAX (16)
|
||||
#define rPMGR_GFX_PERF_STATE_ENTRY_A(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + (_n) * 0x10 + PMGR_GFX_PERF_STATE_ENTRY0A_OFFSET))
|
||||
#define rPMGR_GFX_PERF_STATE_ENTRY_B(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + (_n) * 0x10 + PMGR_GFX_PERF_STATE_ENTRY0B_OFFSET))
|
||||
#define rPMGR_GFX_PERF_STATE_ENTRY_C(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + (_n) * 0x10 + PMGR_GFX_PERF_STATE_ENTRY0C_OFFSET))
|
||||
#define rPMGR_GFX_PERF_STATE_CTL (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_GFX_PERF_STATE_CTL_OFFSET))
|
||||
#define PMGR_GFX_PERF_STATE_CTL_ENABLE (1 << PMGR_GFX_PERF_STATE_CTL_ENABLE_SHIFT)
|
||||
#define rPMGR_GFX_PERF_STATE_SOCHOT (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_GFX_PERF_STATE_SOCHOT_OFFSET))
|
||||
|
||||
#define rPMGR_PS(_x) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_PS_##_x##_PS_OFFSET))
|
||||
|
||||
#define PMGR_PS_RESET (1 << 31)
|
||||
#define PMGR_PS_AUTO_PM_EN (1 << 28)
|
||||
#define PMGR_PS_FORCE_NOACCESS (1 << 10)
|
||||
#define PMGR_PS_ACTUAL_PS_SHIFT (4)
|
||||
#define PMGR_PS_ACTUAL_PS_MASK (0xF)
|
||||
#define PMGR_PS_MANUAL_PS_MASK (0xF)
|
||||
#define PMGR_PS_RUN_MAX (0xF)
|
||||
#define PMGR_PS_CLOCK_OFF (0x4)
|
||||
#define PMGR_PS_POWER_OFF (0x0)
|
||||
|
||||
#define rPMGR_VOLMAN_CTL (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_CTL_OFFSET))
|
||||
#define rPMGR_VOLMAN_BUCK_MAP (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_BUCK_MAP_OFFSET))
|
||||
#define rPMGR_VOLMAN_SOC_VOLTAGE (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_SOC_VOLTAGE_OFFSET))
|
||||
#define rPMGR_VOLMAN_GFX_SRAM_VOLTAGE (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_GFX_SRAM_VOLTAGE_OFFSET))
|
||||
#define rPMGR_VOLMAN_CPU_SRAM_VOLTAGE (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_CPU_SRAM_VOLTAGE_OFFSET))
|
||||
#define rPMGR_VOLMAN_GFX_VOLTAGE (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_GFX_VOLTAGE_OFFSET))
|
||||
#define rPMGR_VOLMAN_CPU_VOLTAGE (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_CPU_VOLTAGE_OFFSET))
|
||||
#define rPMGR_VOLMAN_SOC_DELAY (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_SOC_DELAY_OFFSET))
|
||||
#define rPMGR_VOLMAN_GFX_SRAM_DELAY (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_GFX_SRAM_DELAY_OFFSET))
|
||||
#define rPMGR_VOLMAN_CPU_SRAM_DELAY (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_CPU_SRAM_DELAY_OFFSET))
|
||||
#define rPMGR_VOLMAN_GFX_DELAY (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_GFX_DELAY_OFFSET))
|
||||
#define rPMGR_VOLMAN_CPU_DELAY (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_VOLMAN_CPU_DELAY_OFFSET))
|
||||
|
||||
#define PMGR_VOLMAN_DISABLE_CPU_VOL_CHANGE (1 << PMGR_VOLMAN_CTL_DISABLE_CPU_VOL_CHANGE_SHIFT)
|
||||
#define PMGR_VOLMAN_DISABLE_GFX_VOL_CHANGE (1 << PMGR_VOLMAN_CTL_DISABLE_GFX_VOL_CHANGE_SHIFT)
|
||||
#define PMGR_VOLMAN_DISABLE_CPU_SRAM_VOL_CHANGE (1 << PMGR_VOLMAN_CTL_DISABLE_CPU_SRAM_VOL_CHANGE_SHIFT)
|
||||
#define PMGR_VOLMAN_DISABLE_GFX_SRAM_VOL_CHANGE (1 << PMGR_VOLMAN_CTL_DISABLE_GFX_SRAM_VOL_CHANGE_SHIFT)
|
||||
#define PMGR_VOLMAN_DISABLE_SOC_VOL_CHANGE (1 << PMGR_VOLMAN_CTL_DISABLE_SOC_VOL_CHANGE_SHIFT)
|
||||
|
||||
#define PMGR_VOLMAN_VOLTAGE_PENDING (1 << 31)
|
||||
|
||||
#define rPMGR_EMA_FIXED_SOC0 (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_EMA_FIXED_SOC0_OFFSET)
|
||||
#define rPMGR_EMA_FIXED_SOC1 (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_EMA_FIXED_SOC1_OFFSET)
|
||||
#define rPMGR_EMA_GPU_SRAM_GFX (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_EMA_FIXED_GPU_SRAM_GFX_OFFSET)
|
||||
#define rPMGR_EMA_FIXED_GFX (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_EMA_FIXED_FIXED_GFX_OFFSET)
|
||||
#define rPMGR_EMA_FIXED_SEP0 (*(volatile uint32_t *) (PMGR_BASE_ADDR + PMGR_EMA_FIXED_FIXED_SEP0_OFFSET)
|
||||
|
||||
#define rPMGR_SCRATCH(_n) (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_SCRATCH_0_OFFSET + ((_n)*4)))
|
||||
#define rPMGR_SCRATCH0 rPMGR_SCRATCH(0) /* Flags */
|
||||
#define rPMGR_SCRATCH1 rPMGR_SCRATCH(1)
|
||||
#define rPMGR_SCRATCH2 rPMGR_SCRATCH(2)
|
||||
#define rPMGR_SCRATCH3 rPMGR_SCRATCH(3)
|
||||
#define rPMGR_SCRATCH4 rPMGR_SCRATCH(4)
|
||||
#define rPMGR_SCRATCH5 rPMGR_SCRATCH(5)
|
||||
#define rPMGR_SCRATCH6 rPMGR_SCRATCH(6)
|
||||
#define rPMGR_SCRATCH7 rPMGR_SCRATCH(7)
|
||||
#define rPMGR_SCRATCH8 rPMGR_SCRATCH(8)
|
||||
// Use the symbolic functional name assignments below for these scratch registers
|
||||
//#define rPMGR_SCRATCH9 rPMGR_SCRATCH(9) /* Memory info */
|
||||
//#define rPMGR_SCRATCH10 rPMGR_SCRATCH(10) /* Boot Nonce 0 */
|
||||
//#define rPMGR_SCRATCH11 rPMGR_SCRATCH(11) /* Boot Nonce 1 */
|
||||
//#define rPMGR_SCRATCH12 rPMGR_SCRATCH(12) /* Boot Manifest Hash 0 */
|
||||
//#define rPMGR_SCRATCH13 rPMGR_SCRATCH(13) /* Boot Manifest Hash 1 */
|
||||
//#define rPMGR_SCRATCH14 rPMGR_SCRATCH(14) /* Boot Manifest Hash 2 */
|
||||
//#define rPMGR_SCRATCH15 rPMGR_SCRATCH(15) /* Boot Manifest Hash 3 */
|
||||
//#define rPMGR_SCRATCH16 rPMGR_SCRATCH(16) /* Boot Manifest Hash 4 */
|
||||
//#define rPMGR_SCRATCH17 rPMGR_SCRATCH(17) /* Boot Manifest Hash 5 */
|
||||
//#define rPMGR_SCRATCH18 rPMGR_SCRATCH(18) /* Boot Manifest Hash 6 */
|
||||
//#define rPMGR_SCRATCH19 rPMGR_SCRATCH(19) /* Boot Manifest Hash 7 */
|
||||
//#define rPMGR_SCRATCH20 rPMGR_SCRATCH(20) /* Boot Manifest Hash 8 */
|
||||
//#define rPMGR_SCRATCH21 rPMGR_SCRATCH(21) /* Boot Manifest Hash 9 */
|
||||
//#define rPMGR_SCRATCH22 rPMGR_SCRATCH(22) /* Boot Manifest Hash 10 */
|
||||
//#define rPMGR_SCRATCH23 rPMGR_SCRATCH(23) /* Boot Manifest Hash 11 */
|
||||
|
||||
#define rPMGR_SCRATCH_MEM_INFO rPMGR_SCRATCH(9)
|
||||
#define rPMGR_SCRATCH_BOOT_NONCE_0 rPMGR_SCRATCH(10)
|
||||
#define rPMGR_SCRATCH_BOOT_NONCE_1 rPMGR_SCRATCH(11)
|
||||
#define rPMGR_SCRATCH_BOOT_MANIFEST_HASH_FIRST rPMGR_SCRATCH(12)
|
||||
#define rPMGR_SCRATCH_BOOT_MANIFEST_HASH_LAST rPMGR_SCRATCH(23)
|
||||
#define PMGR_SCRATCH_BOOT_MANIFEST_REGISTERS (384 / 32)
|
||||
|
||||
#define rMINIPMGR_SCRATCH(_n) (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_SCRATCH_OFFSET + ((_n)*4)))
|
||||
#define rMINIPMGR_SCRATCH0 rMINIPMGR_SCRATCH(0)
|
||||
#define rMINIPMGR_SCRATCH1 rMINIPMGR_SCRATCH(1) /* Consistent debug root pointer */
|
||||
#define rMINIPMGR_SCRATCH2 rMINIPMGR_SCRATCH(2)
|
||||
#define rMINIPMGR_SCRATCH3 rMINIPMGR_SCRATCH(3)
|
||||
#define rMINIPMGR_SCRATCH4 rMINIPMGR_SCRATCH(4)
|
||||
#define rMINIPMGR_SCRATCH5 rMINIPMGR_SCRATCH(5)
|
||||
#define rMINIPMGR_SCRATCH6 rMINIPMGR_SCRATCH(6)
|
||||
#define rMINIPMGR_SCRATCH7 rMINIPMGR_SCRATCH(7)
|
||||
#define rMINIPMGR_SCRATCH8 rMINIPMGR_SCRATCH(8)
|
||||
#define rMINIPMGR_SCRATCH9 rMINIPMGR_SCRATCH(9)
|
||||
#define rMINIPMGR_SCRATCH10 rMINIPMGR_SCRATCH(10)
|
||||
#define rMINIPMGR_SCRATCH11 rMINIPMGR_SCRATCH(11)
|
||||
|
||||
#define rPMGR_THERMAL0_CTL0_SET (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_CTL0_SET_OFFSET))
|
||||
#define rPMGR_THERMAL0_CTL0_CLR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_CTL0_CLR_OFFSET))
|
||||
#define rPMGR_THERMAL0_CTL1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_CTL1_OFFSET))
|
||||
#define rPMGR_THERMAL0_CTL2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_CTL2_OFFSET))
|
||||
#define rPMGR_THERMAL0_STATUS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_STATUS_OFFSET))
|
||||
#define rPMGR_THERMAL0_PARAM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_PARAM_OFFSET))
|
||||
#define rPMGR_THERMAL0_RDBK0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_RDBK0_OFFSET))
|
||||
#define rPMGR_THERMAL0_RDBK1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_RDBK1_OFFSET))
|
||||
#define rPMGR_THERMAL0_SUM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_SUM_OFFSET))
|
||||
#define rPMGR_THERMAL0_SUM_CNT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_SUM_CNT_OFFSET))
|
||||
#define rPMGR_THERMAL0_PIECE0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_PIECE0_OFFSET))
|
||||
#define rPMGR_THERMAL0_PIECE1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_PIECE1_OFFSET))
|
||||
#define rPMGR_THERMAL0_PIECE2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_PIECE2_OFFSET))
|
||||
#define rPMGR_THERMAL0_ALARM0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_ALARM0_OFFSET))
|
||||
#define rPMGR_THERMAL0_ALARM1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_ALARM1_OFFSET))
|
||||
#define rPMGR_THERMAL0_ALARM2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_ALARM2_OFFSET))
|
||||
#define rPMGR_THERMAL0_ALARM3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_ALARM3_OFFSET))
|
||||
#define rPMGR_THERMAL0_FAILSAFE_TRIP_TEMP_0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_FAILSAFE_TRIP_TEMP_0_OFFSET))
|
||||
#define rPMGR_THERMAL0_FAILSAFE_TRIP_TEMP_1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_0_FAILSAFE_TRIP_TEMP_1_OFFSET))
|
||||
#define rPMGR_THERMAL1_CTL0_SET (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_CTL0_SET_OFFSET))
|
||||
#define rPMGR_THERMAL1_CTL0_CLR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_CTL0_CLR_OFFSET))
|
||||
#define rPMGR_THERMAL1_CTL1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_CTL1_OFFSET))
|
||||
#define rPMGR_THERMAL1_CTL2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_CTL2_OFFSET))
|
||||
#define rPMGR_THERMAL1_STATUS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_STATUS_OFFSET))
|
||||
#define rPMGR_THERMAL1_PARAM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_PARAM_OFFSET))
|
||||
#define rPMGR_THERMAL1_RDBK0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_RDBK0_OFFSET))
|
||||
#define rPMGR_THERMAL1_RDBK1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_RDBK1_OFFSET))
|
||||
#define rPMGR_THERMAL1_SUM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_SUM_OFFSET))
|
||||
#define rPMGR_THERMAL1_SUM_CNT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_SUM_CNT_OFFSET))
|
||||
#define rPMGR_THERMAL1_PIECE0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_PIECE0_OFFSET))
|
||||
#define rPMGR_THERMAL1_PIECE1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_PIECE1_OFFSET))
|
||||
#define rPMGR_THERMAL1_PIECE2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_PIECE2_OFFSET))
|
||||
#define rPMGR_THERMAL1_ALARM0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_ALARM0_OFFSET))
|
||||
#define rPMGR_THERMAL1_ALARM1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_ALARM1_OFFSET))
|
||||
#define rPMGR_THERMAL1_ALARM2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_ALARM2_OFFSET))
|
||||
#define rPMGR_THERMAL1_ALARM3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_ALARM3_OFFSET))
|
||||
#define rPMGR_THERMAL1_FAILSAFE_TRIP_TEMP_0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_FAILSAFE_TRIP_TEMP_0_OFFSET))
|
||||
#define rPMGR_THERMAL1_FAILSAFE_TRIP_TEMP_1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_1_FAILSAFE_TRIP_TEMP_1_OFFSET))
|
||||
#define rPMGR_THERMAL2_CTL0_SET (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_CTL0_SET_OFFSET))
|
||||
#define rPMGR_THERMAL2_CTL0_CLR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_CTL0_CLR_OFFSET))
|
||||
#define rPMGR_THERMAL2_CTL1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_CTL1_OFFSET))
|
||||
#define rPMGR_THERMAL2_CTL2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_CTL2_OFFSET))
|
||||
#define rPMGR_THERMAL2_STATUS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_STATUS_OFFSET))
|
||||
#define rPMGR_THERMAL2_PARAM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_PARAM_OFFSET))
|
||||
#define rPMGR_THERMAL2_RDBK0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_RDBK0_OFFSET))
|
||||
#define rPMGR_THERMAL2_RDBK1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_RDBK1_OFFSET))
|
||||
#define rPMGR_THERMAL2_SUM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_SUM_OFFSET))
|
||||
#define rPMGR_THERMAL2_SUM_CNT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_SUM_CNT_OFFSET))
|
||||
#define rPMGR_THERMAL2_PIECE0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_PIECE0_OFFSET))
|
||||
#define rPMGR_THERMAL2_PIECE1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_PIECE1_OFFSET))
|
||||
#define rPMGR_THERMAL2_PIECE2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_PIECE2_OFFSET))
|
||||
#define rPMGR_THERMAL2_ALARM0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_ALARM0_OFFSET))
|
||||
#define rPMGR_THERMAL2_ALARM1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_ALARM1_OFFSET))
|
||||
#define rPMGR_THERMAL2_ALARM2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_ALARM2_OFFSET))
|
||||
#define rPMGR_THERMAL2_ALARM3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_ALARM3_OFFSET))
|
||||
#define rPMGR_THERMAL2_FAILSAFE_TRIP_TEMP_0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_FAILSAFE_TRIP_TEMP_0_OFFSET))
|
||||
#define rPMGR_THERMAL2_FAILSAFE_TRIP_TEMP_1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_THERMAL_2_FAILSAFE_TRIP_TEMP_1_OFFSET))
|
||||
|
||||
#define PMGR_THERMAL0_PIECE0(_c, _o, _s) (PMGR_THERMAL_0_PIECE0_START_CODE_INSRT(_c) | PMGR_THERMAL_0_PIECE0_OFFSET_INSRT(_o) | PMGR_THERMAL_0_PIECE0_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL0_PIECE1(_c, _o, _s) (PMGR_THERMAL_0_PIECE1_START_CODE_INSRT(_c) | PMGR_THERMAL_0_PIECE1_OFFSET_INSRT(_o) | PMGR_THERMAL_0_PIECE1_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL0_PIECE2(_c, _o, _s) (PMGR_THERMAL_0_PIECE2_START_CODE_INSRT(_c) | PMGR_THERMAL_0_PIECE2_OFFSET_INSRT(_o) | PMGR_THERMAL_0_PIECE2_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL1_PIECE0(_c, _o, _s) (PMGR_THERMAL_1_PIECE0_START_CODE_INSRT(_c) | PMGR_THERMAL_1_PIECE0_OFFSET_INSRT(_o) | PMGR_THERMAL_1_PIECE0_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL1_PIECE1(_c, _o, _s) (PMGR_THERMAL_1_PIECE1_START_CODE_INSRT(_c) | PMGR_THERMAL_1_PIECE1_OFFSET_INSRT(_o) | PMGR_THERMAL_1_PIECE1_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL1_PIECE2(_c, _o, _s) (PMGR_THERMAL_1_PIECE2_START_CODE_INSRT(_c) | PMGR_THERMAL_1_PIECE2_OFFSET_INSRT(_o) | PMGR_THERMAL_1_PIECE2_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL2_PIECE0(_c, _o, _s) (PMGR_THERMAL_2_PIECE0_START_CODE_INSRT(_c) | PMGR_THERMAL_2_PIECE0_OFFSET_INSRT(_o) | PMGR_THERMAL_2_PIECE0_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL2_PIECE1(_c, _o, _s) (PMGR_THERMAL_2_PIECE1_START_CODE_INSRT(_c) | PMGR_THERMAL_2_PIECE1_OFFSET_INSRT(_o) | PMGR_THERMAL_2_PIECE1_SLOPE_INSRT(_s))
|
||||
#define PMGR_THERMAL2_PIECE2(_c, _o, _s) (PMGR_THERMAL_2_PIECE2_START_CODE_INSRT(_c) | PMGR_THERMAL_2_PIECE2_OFFSET_INSRT(_o) | PMGR_THERMAL_2_PIECE2_SLOPE_INSRT(_s))
|
||||
|
||||
#define rPMGR_SOC_TVM_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_CTL_OFFSET))
|
||||
#define rPMGR_SOC_TVM_THRESH0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH0_OFFSET))
|
||||
#define rPMGR_SOC_TVM_THRESH1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH1_OFFSET))
|
||||
#define rPMGR_SOC_TVM_THRESH2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH2_OFFSET))
|
||||
#define rPMGR_SOC_TVM_TEMP0_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_TEMP0_CFG_OFFSET))
|
||||
#define rPMGR_SOC_TVM_TEMP1_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_TEMP1_CFG_OFFSET))
|
||||
#define rPMGR_SOC_TVM_DEBUG0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG0_OFFSET))
|
||||
#define rPMGR_SOC_TVM_DEBUG1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG1_OFFSET))
|
||||
#define rPMGR_SOC_TVM_DEBUG2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG2_OFFSET))
|
||||
|
||||
#define rPMGR_GFX_TVM_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_CTL_OFFSET))
|
||||
#define rPMGR_GFX_TVM_THRESH0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH0_OFFSET))
|
||||
#define rPMGR_GFX_TVM_THRESH1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH1_OFFSET))
|
||||
#define rPMGR_GFX_TVM_THRESH2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_THRESH2_OFFSET))
|
||||
#define rPMGR_GFX_TVM_TEMP0_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_TEMP0_CFG_OFFSET))
|
||||
#define rPMGR_GFX_TVM_TEMP1_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_TEMP1_CFG_OFFSET))
|
||||
#define rPMGR_GFX_TVM_DEBUG0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG0_OFFSET))
|
||||
#define rPMGR_GFX_TVM_DEBUG1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG1_OFFSET))
|
||||
#define rPMGR_GFX_TVM_DEBUG2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + PMGR_TVM_DEBUG2_OFFSET))
|
||||
|
||||
#define PMGR_TVM_THRESH(_t) ((_t) & 0x1FF)
|
||||
#define PMGR_TVM_TEMP_CFG_MAX_OFFSET(_mo) (((_mo) & 0x1FF) << 16)
|
||||
#define PMGR_TVM_TEMP_CFG_MIN_OFFSET(_mo) (((_mo) & 0x1FF) << 0)
|
||||
|
||||
#define rPMGR_MISC_CFG_ACG (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_MISC_CFG_ACG_OFFSET))
|
||||
|
||||
#define rPMGR_MISC_SPARE0 (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_MISC_SPARE_SPARE0_OFFSET))
|
||||
|
||||
#define rPMGR_DEBUG_PMGR_DEBUG20 (*(volatile uint32_t *)(PMGR_BASE_ADDR + PMGR_DEBUG_20_OFFSET))
|
||||
#define rPMGR_PCIE_REFCLK_GOOD rPMGR_DEBUG_PMGR_DEBUG20
|
||||
#define PMGR_PCIE_REFCLK_GOOD_UMASK (PMGR_DEBUG_20_CLKGEN_PMGR_PCIE_REF_CLK_GOOD_UMASK)
|
||||
|
||||
#define rPMGR_CHIP_WDOG_TMR (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_CHIP_WATCHDOG_TIMER_OFFSET))
|
||||
#define rPMGR_CHIP_WDOG_RST_CNT (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_CHIP_WATCHDOG_RESET_COUNT_OFFSET))
|
||||
#define rPMGR_CHIP_WDOG_INTR_CNT (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_CHIP_WATCHDOG_INTERRUPT_COUNT_OFFSET))
|
||||
#define rPMGR_CHIP_WDOG_CTL (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_CHIP_WATCHDOG_CONTROL_OFFSET))
|
||||
#define rPMGR_SYS_WDOG_TMR (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_SYS_WATCHDOG_TIMER_OFFSET))
|
||||
#define rPMGR_SYS_WDOG_RST_CNT (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_SYS_WATCHDOG_RESET_COUNT_OFFSET))
|
||||
#define rPMGR_SYS_WDOG_CTL (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_WATCHDOG_SYS_WATCHDOG_CONTROL_OFFSET))
|
||||
|
||||
#define rMINIPMGR_LPPLL_CTL (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_LPPLL_CTL_OFFSET))
|
||||
#define MINIPMGR_LPPLL_CTL_ENABLE (1 << MINIPMGR_LPPLL_CTL_ENABLE_SHIFT)
|
||||
#define MINIPMGR_LPPLL_CTL_PENDING (1 << MINIPMGR_LPPLL_CTL_PENDING_SHIFT)
|
||||
#define rMINIPMGR_LPPLL_CFG (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_LPPLL_CFG_OFFSET))
|
||||
|
||||
#define rMINIPMGR_CLK_CFG(_x) (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_CLKCFG_##_x##_CLK_CFG_OFFSET))
|
||||
#define rMINIPMGR_CLK_DIVIDER_ACG_CFG (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_CLKCFG_CLK_DIVIDER_ACG_CFG_OFFSET))
|
||||
|
||||
#define rMINIPMGR_PS(_x) (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_PS_##_x##_PS_OFFSET))
|
||||
|
||||
#define rMINIPMGR_MISC_CFG_ACG (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_MISC_CFG_ACG_OFFSET))
|
||||
#define rMINIPMGR_MISC_CFG_CPU (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_MINI_MISC_CFG_CPU_CFG_OFFSET))
|
||||
|
||||
#if SUB_PLATFORM_T8010
|
||||
enum {
|
||||
PMGR_CLK_OSC = 0, // 0x00
|
||||
PMGR_CLK_PLL0, // 0x01
|
||||
PMGR_CLK_PLL1, // 0x02
|
||||
PMGR_CLK_PLL2, // 0x03
|
||||
PMGR_CLK_PLL3, // 0x04
|
||||
PMGR_CLK_PLL4, // 0x05
|
||||
PMGR_CLK_PLL5, // 0x06
|
||||
PMGR_CLK_PLL_PCIE, // 0x07
|
||||
PMGR_CLK_CPU, // 0x08
|
||||
PMGR_CLK_GFX_FENDER, // 0x09
|
||||
PMGR_CLK_FIRST = PMGR_CLK_GFX_FENDER,
|
||||
PMGR_CLK_MCU_REF, // 0x0A
|
||||
PMGR_CLK_PMP, // 0x0B
|
||||
PMGR_CLK_TEMP_MIPI_DSI, // 0x0C
|
||||
PMGR_CLK_NCO_REF0, // 0x0D
|
||||
PMGR_CLK_NCO_REF1, // 0x0E
|
||||
PMGR_CLK_NCO_ALG0, // 0x0F
|
||||
PMGR_CLK_NCO_ALG1, // 0x10
|
||||
PMGR_CLK_HSICPHY_REF_12M, // 0x11
|
||||
PMGR_CLK_USB480_0, // 0x12
|
||||
PMGR_CLK_USB_OHCI_48M, // 0x13
|
||||
PMGR_CLK_USB, // 0x14
|
||||
PMGR_CLK_USB_FREE_60M, // 0x15
|
||||
PMGR_CLK_SIO_C, // 0x16
|
||||
PMGR_CLK_SIO_P, // 0x17
|
||||
PMGR_CLK_SIO_AES, // 0x18
|
||||
PMGR_CLK_HFD, // 0x19
|
||||
PMGR_CLK_ISP_C, // 0x1A
|
||||
PMGR_CLK_ISP_AHFD, // 0x1B
|
||||
PMGR_CLK_ISP_PEARL, // 0x1C
|
||||
PMGR_CLK_ISP, // 0x1D
|
||||
PMGR_CLK_ISP_SENSOR0_REF, // 0x1E
|
||||
PMGR_CLK_ISP_SENSOR1_REF, // 0x1F
|
||||
PMGR_CLK_ISP_SENSOR2_REF, // 0x20
|
||||
PMGR_CLK_VDEC, // 0x21
|
||||
PMGR_CLK_VENC, // 0x22
|
||||
PMGR_CLK_VID0, // 0x23
|
||||
PMGR_CLK_DISP0, // 0x24
|
||||
PMGR_CLK_AJPEG_IP, // 0x25
|
||||
PMGR_CLK_AJPEG_WRAP, // 0x26
|
||||
PMGR_CLK_MSR, // 0x27
|
||||
PMGR_CLK_FAST_AF, // 0x28
|
||||
PMGR_CLK_SLOW_AF, // 0x29
|
||||
PMGR_CLK_SBR, // 0x2A
|
||||
PMGR_CLK_MCA0_M, // 0x2B
|
||||
PMGR_CLK_MCA1_M, // 0x2C
|
||||
PMGR_CLK_MCA2_M, // 0x2D
|
||||
PMGR_CLK_MCA3_M, // 0x2E
|
||||
PMGR_CLK_MCA4_M, // 0x2F
|
||||
PMGR_CLK_SEP, // 0x30
|
||||
PMGR_CLK_GPIO, // 0x31
|
||||
PMGR_CLK_SPI0_N, // 0x32
|
||||
PMGR_CLK_SPI1_N, // 0x33
|
||||
PMGR_CLK_SPI2_N, // 0x34
|
||||
PMGR_CLK_SPI3_N, // 0x35
|
||||
PMGR_CLK_TMPS, // 0x36
|
||||
PMGR_CLK_CPU_UVD, // 0x37
|
||||
PMGR_CLK_GFX_UVD, // 0x38
|
||||
PMGR_CLK_SOC_UVD, // 0x39
|
||||
PMGR_CLK_LPDP_RX_REF, // 0x3A
|
||||
PMGR_CLK_LAST = PMGR_CLK_LPDP_RX_REF,
|
||||
PMGR_CLK_S0, // 0x3B
|
||||
PMGR_CLK_SPARE_FIRST = PMGR_CLK_S0,
|
||||
PMGR_CLK_S1, // 0x3C
|
||||
PMGR_CLK_S2, // 0x3D
|
||||
PMGR_CLK_S3, // 0x3E
|
||||
PMGR_CLK_ISP_REF0, // 0x3F
|
||||
PMGR_CLK_ISP_REF1, // 0x40
|
||||
PMGR_CLK_ISP_REF2, // 0x41
|
||||
PMGR_CLK_SPARE_LAST = PMGR_CLK_ISP_REF2,
|
||||
PMGR_CLK_LPO, // 0x42
|
||||
PMGR_CLK_AOP, // 0x43
|
||||
PMGR_CLK_MINI_FIRST = PMGR_CLK_AOP,
|
||||
PMGR_CLK_UART0, // 0x44
|
||||
PMGR_CLK_UART1, // 0x45
|
||||
PMGR_CLK_UART2, // 0x46
|
||||
PMGR_CLK_AOP_MCA0_M, // 0x47
|
||||
PMGR_CLK_I2CM, // 0x48
|
||||
PMGR_CLK_PDM_REF, // 0x49
|
||||
PMGR_CLK_SENSE_2X, // 0x4A
|
||||
PMGR_CLK_DETECT, // 0x4B
|
||||
PMGR_CLK_PROXY_FABRIC, // 0x4C
|
||||
PMGR_CLK_PROXY_MCU_REF, // 0x4D
|
||||
PMGR_CLK_MINI_LAST = PMGR_CLK_PROXY_MCU_REF,
|
||||
PMGR_CLK_COUNT, // 0x4E
|
||||
PMGR_CLK_NOT_SUPPORTED
|
||||
};
|
||||
|
||||
#else
|
||||
#error "Unknown platform"
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// CCC specific
|
||||
//
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
#define rACC_PRE_TD_TMR (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_PRE_TD_TMR_OFFSET))
|
||||
#define rACC_PRE_FLUSH_TMR (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_PRE_FLUSH_TMR_OFFSET))
|
||||
|
||||
#define rACC_APSC_SCR (*(volatile uint64_t *)(ACC_BASE_ADDR + ACC_PWRCTL_APSC_SCR_OFFSET))
|
||||
#define ACC_APSC_PENDING (1 << ACC_PWRCTL_APSC_SCR_MANUAL_PENDING_SHIFT)
|
||||
#define ACC_APSC_MANUAL_CHANGE(_d) ((1 << ACC_PWRCTL_APSC_SCR_MANUAL_CHANGE_SHIFT) | ACC_PWRCTL_APSC_SCR_MANUAL_ST_INSRT((uint64_t)_d))
|
||||
|
||||
#define rACC_DVFM_CFG (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_DVFM_CFG_OFFSET))
|
||||
|
||||
#define rACC_DVFM_SCR (*(volatile uint64_t *)(ACC_BASE_ADDR + ACC_PWRCTL_DVFM_SCR_OFFSET)) // 64-bit
|
||||
#define ACC_DVFM_SCR_TEMPSENSORMODE (ACC_PWRCTL_DVFM_MODE_INSRT((uint64_t)1))
|
||||
|
||||
#define rACC_DVFM_CFG_SEL (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_DVFM_CFG_SEL_OFFSET))
|
||||
|
||||
#define rACC_DVFM_CFG1 (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_DVFM_CFG1_OFFSET))
|
||||
|
||||
#define kDVFM_STATE_BYPASS (0)
|
||||
#define kDVFM_STATE_SECUREROM (kDVFM_STATE_BYPASS + 1)
|
||||
#define kDVFM_STATE_IBOOT (kDVFM_STATE_BYPASS + 2)
|
||||
#define kDVFM_STATE_V0 (kDVFM_STATE_IBOOT + 0)
|
||||
|
||||
#define kDVFM_STATE_VMAX (kDVFM_STATE_IBOOT) // !!! FIXME !!! (kDVFM_STATE_V5)
|
||||
|
||||
#define kDVFM_STATE_VNOM (kDVFM_STATE_V0)
|
||||
#define kDVFM_STATE_VBOOST (kDVFM_STATE_VNOM + 1)
|
||||
|
||||
#define kDVFM_STATE_IBOOT_CNT (kDVFM_STATE_VMAX + 1)
|
||||
|
||||
#define kVOLTAGE_STATES1_COUNT (kDVFM_STATE_VMAX - kDVFM_STATE_V0 + 1)
|
||||
#define kVOLTAGE_STATES1_SIZE (kVOLTAGE_STATES1_COUNT*2) // Minimum size of voltage-state1 property in devicetree
|
||||
|
||||
#define kDVFM_STATE_MAX_CNT (16)
|
||||
|
||||
// TODO: Remove these when added to EmbeddedHeaders
|
||||
#define ACC_PWRCTL_DVFM_ST0_PRE_DIV_P_INSRT(f) ((((uint64_t)f) & 0x1f) << 13)
|
||||
#define ACC_PWRCTL_DVFM_ST0_FBK_DIV_M_INSRT(f) ((((uint64_t)f) & 0x1ff) << 4)
|
||||
#define ACC_PWRCTL_DVFM_ST0_PST_DIV_S_INSRT(f) ((((uint64_t)f) & 0xf) << 0)
|
||||
|
||||
#define ACC_DVFM_ST_STRIDE (ACC_DVFM_ST1_OFFSET - ACC_DVFM_ST0_OFFSET)
|
||||
|
||||
#define rACC_DVFM_ST(_n) (*(volatile uint64_t *)(ACC_BASE_ADDR + ACC_DVFM_ST0_OFFSET + ((_n) * ACC_DVFM_ST_STRIDE)))
|
||||
#define ACC_DVFM_ST_SAFE_VOL_INSRT(_sv) (ACC_DVFM_ST0_SAFE_VOL_INSRT((uint64_t)_sv))
|
||||
#define ACC_DVFM_ST_SAFE_VOL_XTRCT(_sv) (ACC_DVFM_ST0_SAFE_VOL_XTRCT((uint64_t)_sv))
|
||||
#define ACC_DVFM_ST_VOL_ADJ3(_va) (ACC_DVFM_ST0_VOL_ADJ3_INSRT((uint64_t)_va))
|
||||
#define ACC_DVFM_ST_VOL_ADJ2(_va) (ACC_DVFM_ST0_VOL_ADJ2_INSRT((uint64_t)_va))
|
||||
#define ACC_DVFM_ST_VOL_ADJ1(_va) (ACC_DVFM_ST0_VOL_ADJ1_INSRT((uint64_t)_va))
|
||||
#define ACC_DVFM_ST_VOL_ADJ0(_va) (ACC_DVFM_ST0_VOL_ADJ0_INSRT((uint64_t)_va))
|
||||
#define ACC_DVFM_ST_CORE_TYP(_ct) (ACC_DVFM_ST0_CORE_TYP_INSRT((uint64_t)_ct))
|
||||
#define ACC_DVFM_ST_VOL_BYP(_vb) (ACC_DVFM_ST0_VOL_BYP_INSRT((uint64_t)_vb))
|
||||
#define ACC_DVFM_ST_CLK_SRC(_s) (ACC_DVFM_ST0_CLK_SRC_INSRT((uint64_t)_s))
|
||||
#define ACC_DVFM_ST_MIG_DIV_S(_s) (ACC_DVFM_ST0_MIG_DIV_S_INSRT((uint64_t)_s))
|
||||
#define ACC_DVFM_ST_FCW_FRAC_INSRT(_f) (ACC_DVFM_ST0_FCW_FRAC_INSRT((uint64_t)_f))
|
||||
#define ACC_DVFM_ST_FCW_INT_INSRT(_i) (ACC_DVFM_ST0_FCW_INT_INSRT((uint64_t)_i))
|
||||
#define ACC_DVFM_ST_PST_DIV_S_INSRT(_s) (ACC_DVFM_ST0_PST_DIV_S_INSRT((uint64_t)_s))
|
||||
#define ACC_DVFM_ST_FCW_FRAC_XTRCT(_f) (ACC_DVFM_ST0_FCW_FRAC_XTRCT((uint64_t)_f))
|
||||
#define ACC_DVFM_ST_FCW_INT_XTRCT(_i) (ACC_DVFM_ST0_FCW_INT_XTRCT((uint64_t)_i))
|
||||
#define ACC_DVFM_ST_PST_DIV_S_XTRCT(_s) (ACC_DVFM_ST0_PST_DIV_S_XTRCT((uint64_t)_s))
|
||||
|
||||
#define rACC_DVFM_ST_EXT(_n) (*(volatile uint64_t *)(ACC_BASE_ADDR + ACC_DVFM_ST0_EXT_OFFSET + ((_n) * ACC_DVFM_ST_STRIDE)))
|
||||
#define ACC_DVFM_ST_BIU_DIV_HI_VOL(_d) (ACC_DVFM_ST0_EXT_BIU_DIV4_HI_VOL_INSRT((uint64_t)(_d)))
|
||||
#define ACC_DVFM_ST_BIU_DIV_LO_VOL(_d) (ACC_DVFM_ST0_EXT_BIU_DIV4_LO_VOL_INSRT((uint64_t)(_d)))
|
||||
#define ACC_DVFM_ST_DVMR_MAX_WGT(_w) (ACC_DVFM_ST0_EXT_DVMR_MAX_WGT_INSRT((uint64_t)(_w)))
|
||||
#define ACC_DVFM_ST_SRAM_VOL(_v) (ACC_DVFM_ST0_EXT_SRAM_VOL_INSRT((uint64_t)(_v)))
|
||||
#define ACC_DVFM_ST_DVFM_MAX_ADJ(_a) (ACC_DVFM_ST0_EXT_MAX_ADJ_INSRT((uint64_t)(_a)))
|
||||
#define ACC_DVFM_ST_DVMR_ADJ2(_a) (ACC_DVFM_ST0_EXT_DVMR_ADJ2_INSRT((uint64_t)(_a)))
|
||||
#define ACC_DVFM_ST_DVMR_ADJ1(_a) (ACC_DVFM_ST0_EXT_DVMR_ADJ1_INSRT((uint64_t)(_a)))
|
||||
#define ACC_DVFM_ST_DVMR_ADJ0(_a) (ACC_DVFM_ST0_EXT_DVMR_ADJ0_INSRT((uint64_t)(_a)))
|
||||
|
||||
#define rACC_DVFM_ST_EXT2(_n) (*(volatile uint64_t *)(ACC_BASE_ADDR + ACC_DVFM_ST0_EXT2_OFFSET + ((_n) * ACC_DVFM_ST_STRIDE)))
|
||||
#define ACC_DVFM_ST_ADCLK_EN(_a) (ACC_DVFM_ST0_EXT2_ADCLK_EN_INSRT((uint64_t)(_a)))
|
||||
|
||||
#define rACC_PLL_SCR1 (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_PLL_SCR1_OFFSET))
|
||||
#define rACC_PLL_CFG2 (*(volatile uint32_t *)(ACC_BASE_ADDR + ACC_PWRCTL_PLL_CFG2_OFFSET))
|
||||
#define rACC_DVMR_SCR (*(volatile uint64_t *)(ACC_BASE_ADDR + DVMR_SCR_OFFSET))
|
||||
|
||||
#define rMINIPMGR_SIO_AES_DISABLE (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SIO_AES_DISABLE_OFFSET))
|
||||
#define rMINIPMGR_SECURITY_GPIO_STRAPS (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_GPIO_STRAPS_OFFSET))
|
||||
#define rMINIPMGR_SET_ONLY (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SET_ONLY_OFFSET))
|
||||
#define MINIPMGR_SET_ONLY_MIX_N_MATCH (1 << 31)
|
||||
#define rMINIPMGR_SEAL_DATA_A_FIRST (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_DATA_A0_OFFSET))
|
||||
#define rMINIPMGR_SEAL_DATA_A_LAST (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_DATA_A7_OFFSET))
|
||||
#define rMINIPMGR_SEAL_CTL_A (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_CTL_A_OFFSET))
|
||||
#define rMINIPMGR_SEAL_DATA_B_FIRST (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_DATA_B0_OFFSET))
|
||||
#define rMINIPMGR_SEAL_DATA_B_LAST (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_DATA_B7_OFFSET))
|
||||
#define rMINIPMGR_SEAL_CTL_B (*(volatile uint32_t *)(AOP_MINIPMGR_BASE_ADDR + MINIPMGR_SECURITY_SEAL_CTL_B_OFFSET))
|
||||
|
||||
#define rACC_THRM0_CTL0_SET (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_CTL0_SET_OFFSET))
|
||||
#define rACC_THRM0_CTL1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_CTL1_OFFSET))
|
||||
#define rACC_THRM0_PARAM (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_PARAM_OFFSET))
|
||||
#define rACC_THRM0_PIECE0 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_PIECE0_OFFSET))
|
||||
#define rACC_THRM0_PIECE1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_PIECE1_OFFSET))
|
||||
#define rACC_THRM0_PIECE2 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM0_PIECE2_OFFSET))
|
||||
|
||||
#define rACC_THRM1_CTL0_SET (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_CTL0_SET_OFFSET))
|
||||
#define rACC_THRM1_CTL1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_CTL1_OFFSET))
|
||||
#define rACC_THRM1_PARAM (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_PARAM_OFFSET))
|
||||
#define rACC_THRM1_PIECE0 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_PIECE0_OFFSET))
|
||||
#define rACC_THRM1_PIECE1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_PIECE1_OFFSET))
|
||||
#define rACC_THRM1_PIECE2 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM1_PIECE2_OFFSET))
|
||||
|
||||
#define rACC_THRM2_CTL0_SET (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_CTL0_SET_OFFSET))
|
||||
#define rACC_THRM2_CTL1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_CTL1_OFFSET))
|
||||
#define rACC_THRM2_PARAM (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_PARAM_OFFSET))
|
||||
#define rACC_THRM2_PIECE0 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_PIECE0_OFFSET))
|
||||
#define rACC_THRM2_PIECE1 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_PIECE1_OFFSET))
|
||||
#define rACC_THRM2_PIECE2 (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_THRM2_PIECE2_OFFSET))
|
||||
|
||||
#define rACC_DVFM_FSHOT_IDX (*(volatile uint64_t*)(ACC_BASE_ADDR + ACC_THERMAL_DVFM_FSHOT_IDX_OFFSET))
|
||||
|
||||
#define ACC_THRM0_PIECE0(_c, _o, _s) (ACC_THERMAL_THRM0_PIECE0_START_CODE_INSRT(_c) | ACC_THERMAL_THRM0_PIECE0_OFFSET_INSRT(_o) | ACC_THERMAL_THRM0_PIECE0_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM0_PIECE1(_c, _o, _s) (ACC_THERMAL_THRM0_PIECE1_START_CODE_INSRT(_c) | ACC_THERMAL_THRM0_PIECE1_OFFSET_INSRT(_o) | ACC_THERMAL_THRM0_PIECE1_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM0_PIECE2(_c, _o, _s) (ACC_THERMAL_THRM0_PIECE2_START_CODE_INSRT(_c) | ACC_THERMAL_THRM0_PIECE2_OFFSET_INSRT(_o) | ACC_THERMAL_THRM0_PIECE2_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM1_PIECE0(_c, _o, _s) (ACC_THERMAL_THRM1_PIECE0_START_CODE_INSRT(_c) | ACC_THERMAL_THRM1_PIECE0_OFFSET_INSRT(_o) | ACC_THERMAL_THRM1_PIECE0_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM1_PIECE1(_c, _o, _s) (ACC_THERMAL_THRM1_PIECE1_START_CODE_INSRT(_c) | ACC_THERMAL_THRM1_PIECE1_OFFSET_INSRT(_o) | ACC_THERMAL_THRM1_PIECE1_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM1_PIECE2(_c, _o, _s) (ACC_THERMAL_THRM1_PIECE2_START_CODE_INSRT(_c) | ACC_THERMAL_THRM1_PIECE2_OFFSET_INSRT(_o) | ACC_THERMAL_THRM1_PIECE2_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM2_PIECE0(_c, _o, _s) (ACC_THERMAL_THRM2_PIECE0_START_CODE_INSRT(_c) | ACC_THERMAL_THRM2_PIECE0_OFFSET_INSRT(_o) | ACC_THERMAL_THRM2_PIECE0_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM2_PIECE1(_c, _o, _s) (ACC_THERMAL_THRM2_PIECE1_START_CODE_INSRT(_c) | ACC_THERMAL_THRM2_PIECE1_OFFSET_INSRT(_o) | ACC_THERMAL_THRM2_PIECE1_SLOPE_INSRT(_s))
|
||||
#define ACC_THRM2_PIECE2(_c, _o, _s) (ACC_THERMAL_THRM2_PIECE2_START_CODE_INSRT(_c) | ACC_THERMAL_THRM2_PIECE2_OFFSET_INSRT(_o) | ACC_THERMAL_THRM2_PIECE2_SLOPE_INSRT(_s))
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Externs
|
||||
//
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
extern void pmgr_update_device_tree(DTNode *pmgr_node);
|
||||
extern void pmgr_gfx_update_device_tree(DTNode *gfx_node);
|
||||
|
||||
#endif /* ! __PLATFORM_SOC_PMGR_H */
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_RECONFIG_H
|
||||
#define __PLATFORM_RECONFIG_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <platform/memmap.h>
|
||||
|
||||
#define rAOP_GLOBAL(_p) (*(volatile uint32_t *)(AOP_BASE_ADDR + (_p)))
|
||||
#define rRECONFIG_RAM_BASE(base, count) *(volatile uint32_t *)((base) + ((count) * 4))
|
||||
#define rRECONFIG_RAM_BASE_BYTE(base, count, count_bytes) *(volatile uint32_t *)((base) + ((count) * 4) + (count_bytes))
|
||||
|
||||
#define ALIGNMENT_MASK_1KB ~(0x3FF)
|
||||
#define RECONFIG_NUMBER_OF_REGS(regs) ((((regs) - 1) & 0xF) << 2)
|
||||
#define AOP_CFG_TABLE (AOP_RECONFIG_REGION_BASE_ADDR)
|
||||
#define WRITE_OFFSETS(addr, values) (((addr) >> 2) & 0xFF) << (((values) % 4) * 8)
|
||||
#define MAX_WRITE_REGS 16
|
||||
|
||||
// SRAM sequences
|
||||
#define AOP_DDR_S2R_AOP_PRE_BASE_ADDR (AOP_RECONFIG_REGION_BASE_ADDR + 0x100)
|
||||
#define AOP_DDR_S2R_AOP_PRE_MAX_SIZE 0x200
|
||||
|
||||
#define AOP_DDR_S2R_AOP_POST_BASE_ADDR (AOP_DDR_S2R_AOP_PRE_BASE_ADDR + AOP_DDR_S2R_AOP_PRE_MAX_SIZE)
|
||||
#define AOP_DDR_S2R_AOP_POST_MAX_SIZE 0x100
|
||||
|
||||
#define S2R_AOP_AOP_DDR_PRE_BASE_ADDR (AOP_DDR_S2R_AOP_POST_BASE_ADDR + AOP_DDR_S2R_AOP_POST_MAX_SIZE)
|
||||
#define S2R_AOP_AOP_DDR_PRE_MAX_SIZE 0x100
|
||||
|
||||
#define S2R_AOP_AOP_DDR_POST_BASE_ADDR (S2R_AOP_AOP_DDR_PRE_BASE_ADDR + S2R_AOP_AOP_DDR_PRE_MAX_SIZE)
|
||||
#define S2R_AOP_AOP_DDR_POST_MAX_SIZE 0x3000
|
||||
|
||||
#define AOP_RECONFIG_REGION_USED (AOP_RECONFIG_REGION_BASE_ADDR - S2R_AOP_AOP_DDR_PRE_BASE_ADDR + S2R_AOP_AOP_DDR_POST_MAX_SIZE)
|
||||
|
||||
#if AOP_RECONFIG_REGION_USED > AOP_RECONFIG_REGION_SIZE
|
||||
#error "Reconfig engine programs overflow their SRAM allocation
|
||||
#endif
|
||||
|
||||
// DRAM sequences
|
||||
#define AWAKE_AOP_DDR_PRE_BASE_ADDR (DRAM_CONFIG_SEQ_BASE)
|
||||
#define AWAKE_AOP_DDR_PRE_MAX_SIZE 0x200
|
||||
|
||||
#define AWAKE_AOP_DDR_POST_BASE_ADDR (AWAKE_AOP_DDR_PRE_BASE_ADDR + AWAKE_AOP_DDR_PRE_MAX_SIZE)
|
||||
#define AWAKE_AOP_DDR_POST_MAX_SIZE 0x600
|
||||
|
||||
#define AOP_DDR_AWAKE_PRE_BASE_ADDR (AWAKE_AOP_DDR_POST_BASE_ADDR + AWAKE_AOP_DDR_POST_MAX_SIZE)
|
||||
#define AOP_DDR_AWAKE_PRE_MAX_SIZE 0x800
|
||||
|
||||
#define AOP_DDR_AWAKE_POST_BASE_ADDR (AOP_DDR_AWAKE_PRE_BASE_ADDR + AOP_DDR_AWAKE_PRE_MAX_SIZE)
|
||||
#define AOP_DDR_AWAKE_POST_MAX_SIZE 0x2400
|
||||
|
||||
#define DRAM_CONFIG_SEQ_USED (AOP_DDR_AWAKE_POST_BASE_ADDR + AOP_DDR_AWAKE_POST_MAX_SIZE - DRAM_CONFIG_SEQ_BASE)
|
||||
|
||||
#if DRAM_CONFIG_SEQ_USED > DRAM_CONFIG_SEQ_SIZE
|
||||
#error "Reconfig engine programs overflow their DRAM allocation
|
||||
#endif
|
||||
|
||||
#endif /* __PLATFORM_RECONFIG_H */
|
||||
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
* Automatically generated by socgen. DO NOT EDIT!
|
||||
*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_A0_TUNABLE_APCIE_COMMON_H
|
||||
#define SPDS_T8010_A0_TUNABLE_APCIE_COMMON_H
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_FABRIC_TLIMITS_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f7f7f7f)
|
||||
#define PCIE_APCIE_COMMON_BLK_FABRIC_TLIMITS_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_LLT_RATE_LIMITER_CTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_LLT_RATE_LIMITER_CTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_COMMON_PRIORITY_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x700)
|
||||
#define PCIE_APCIE_COMMON_BLK_COMMON_PRIORITY_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NANDSYSCLK_TIMING_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xffffff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NANDSYSCLK_TIMING_DEFAULT_TUNABLE_VALUE_T8010_A0 (0xc0800)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NAND_LTR_THRESH_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x1fff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NAND_LTR_THRESH_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x92c)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_REFCLKBUF_TIMING_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_REFCLKBUF_TIMING_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x9)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_NVME_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_NVME_TUNABLE_VALUE_T8010_A0 (0x10)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x31100010)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1000000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_FPGA_TUNABLE_UMASK_T8010_A0 (0x100000)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_0_FPGA_TUNABLE_VALUE_T8010_A0 (0x100000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x707)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NVME_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x11)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NVME_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NVME_CTRL_0_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_NVME_CTRL_0_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_NVME_PRIORITY_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7)
|
||||
#define PCIE_APCIE_COMMON_BLK_NVME_PRIORITY_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_NVME_RATE_LIMITER_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_NVME_RATE_LIMITER_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x333003f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x111000f)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0xf)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_0_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_0_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x3e)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_NVME_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_NVME_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x31100010)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1000000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_FPGA_TUNABLE_UMASK_T8010_A0 (0x100000)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_1_FPGA_TUNABLE_VALUE_T8010_A0 (0x100000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x707)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x333003f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x111000f)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0xf)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_1_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_1_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x3e)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_NVME_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_NVME_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x31100010)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1000000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_FPGA_TUNABLE_UMASK_T8010_A0 (0x100000)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_2_FPGA_TUNABLE_VALUE_T8010_A0 (0x100000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x707)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x333003f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x111000f)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0xf)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_2_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_2_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x3e)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_NVME_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_NVME_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x31100010)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1000000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x10)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_FPGA_TUNABLE_UMASK_T8010_A0 (0x100000)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_CTRL_3_FPGA_TUNABLE_VALUE_T8010_A0 (0x100000)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x707)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_PRIORITY_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x73f3f)
|
||||
#define PCIE_APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x43f00)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x333003f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x111000f)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0xf)
|
||||
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_3_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f)
|
||||
#define PCIE_APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_3_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x3e)
|
||||
|
||||
#define PCIE_APCIE_COMMON_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_COMMON_BLK_FABRIC_TLIMITS */ 0x8, sizeof(uint32_t), 0x7f7f7f7f, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_LLT_RATE_LIMITER_CTRL */ 0xc, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_COMMON_PRIORITY */ 0x10, sizeof(uint32_t), 0x700, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_NANDSYSCLK_TIMING */ 0x18, sizeof(uint32_t), 0xffffff, 0xc0800 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_NAND_LTR_THRESH */ 0x1c, sizeof(uint32_t), 0x1fff, 0x92c }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_REFCLKBUF_TIMING */ 0x2c, sizeof(uint32_t), 0xff, 0x9 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_0 */ 0x100, sizeof(uint32_t), 0x31100010, 0x1000000 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_PRIORITY_0 */ 0x108, sizeof(uint32_t), 0x707, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_0 */ 0x10c, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_NVME_CTRL_0 */ 0x110, sizeof(uint32_t), 0x11, 0x1 }, \
|
||||
{ /* APCIE_COMMON_BLK_NVME_PRIORITY_0 */ 0x114, sizeof(uint32_t), 0x7, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_NVME_RATE_LIMITER_CTRL_0 */ 0x118, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_0 */ 0x120, sizeof(uint32_t), 0x333003f, 0x111000f }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_0 */ 0x130, sizeof(uint32_t), 0xff, 0xf }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_0 */ 0x138, sizeof(uint32_t), 0x7f, 0x3e }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_1 */ 0x180, sizeof(uint32_t), 0x31100010, 0x1000000 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_PRIORITY_1 */ 0x188, sizeof(uint32_t), 0x707, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_1 */ 0x18c, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_1 */ 0x1a0, sizeof(uint32_t), 0x333003f, 0x111000f }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_1 */ 0x1b0, sizeof(uint32_t), 0xff, 0xf }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_1 */ 0x1b8, sizeof(uint32_t), 0x7f, 0x3e }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_2 */ 0x200, sizeof(uint32_t), 0x31100010, 0x1000000 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_PRIORITY_2 */ 0x208, sizeof(uint32_t), 0x707, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_2 */ 0x20c, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_2 */ 0x220, sizeof(uint32_t), 0x333003f, 0x111000f }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_2 */ 0x230, sizeof(uint32_t), 0xff, 0xf }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_2 */ 0x238, sizeof(uint32_t), 0x7f, 0x3e }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_3 */ 0x280, sizeof(uint32_t), 0x31100010, 0x1000000 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_PRIORITY_3 */ 0x288, sizeof(uint32_t), 0x707, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_PORT_RATE_LIMITER_CTRL_3 */ 0x28c, sizeof(uint32_t), 0x73f3f, 0x43f00 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_SQUELCH_CTRL_3 */ 0x2a0, sizeof(uint32_t), 0x333003f, 0x111000f }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_ACG_IDLE_CTRL_3 */ 0x2b0, sizeof(uint32_t), 0xff, 0xf }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PIPE_OVERRIDE_VAL_3 */ 0x2b8, sizeof(uint32_t), 0x7f, 0x3e }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_COMMON_FPGA_TUNABLES_T8010_A0 \
|
||||
/* Key = fpga_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_0 */ 0x100, sizeof(uint32_t), 0x100000, 0x100000 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_1 */ 0x180, sizeof(uint32_t), 0x100000, 0x100000 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_2 */ 0x200, sizeof(uint32_t), 0x100000, 0x100000 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_3 */ 0x280, sizeof(uint32_t), 0x100000, 0x100000 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_COMMON_NVME_TUNABLES_T8010_A0 \
|
||||
/* Key = nvme_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_0 */ 0x100, sizeof(uint32_t), 0x10, 0x10 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_1 */ 0x180, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_2 */ 0x200, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_3 */ 0x280, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_COMMON_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_0 */ 0x100, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_NVME_CTRL_0 */ 0x110, sizeof(uint32_t), 0x1, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_1 */ 0x180, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_2 */ 0x200, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ /* APCIE_COMMON_BLK_APCIE_PORT_CTRL_3 */ 0x280, sizeof(uint32_t), 0x10, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#endif /* SPDS_T8010_A0_TUNABLE_APCIE_COMMON_H */
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Automatically generated by socgen. DO NOT EDIT!
|
||||
*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_A0_TUNABLE_APCIE_CONFIG_H
|
||||
#define SPDS_T8010_A0_TUNABLE_APCIE_CONFIG_H
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xd)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x5)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x2)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f7f)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x3)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x8073ffff)
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x403d09)
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0xd, 0x5 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ /* APCIE_CONFIG_BLK_MCACHE_HINT */ 0x138, sizeof(uint32_t), 0x7f7f, 0x0 }, \
|
||||
{ /* APCIE_CONFIG_BLK_L1_SUBCTRL */ 0x13c, sizeof(uint32_t), 0x3, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_AF_TMOT_CTRL */ 0x140, sizeof(uint32_t), 0x8073ffff, 0x403d09 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT0_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0x2, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xd)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x5)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x2)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f7f)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x3)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x8073ffff)
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x403d09)
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0xd, 0x5 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ /* APCIE_CONFIG_BLK_MCACHE_HINT */ 0x138, sizeof(uint32_t), 0x7f7f, 0x0 }, \
|
||||
{ /* APCIE_CONFIG_BLK_L1_SUBCTRL */ 0x13c, sizeof(uint32_t), 0x3, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_AF_TMOT_CTRL */ 0x140, sizeof(uint32_t), 0x8073ffff, 0x403d09 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT1_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0x2, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xd)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x5)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x2)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f7f)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x3)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x8073ffff)
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x403d09)
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0xd, 0x5 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ /* APCIE_CONFIG_BLK_MCACHE_HINT */ 0x138, sizeof(uint32_t), 0x7f7f, 0x0 }, \
|
||||
{ /* APCIE_CONFIG_BLK_L1_SUBCTRL */ 0x13c, sizeof(uint32_t), 0x3, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_AF_TMOT_CTRL */ 0x140, sizeof(uint32_t), 0x8073ffff, 0x403d09 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT2_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0x2, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xff)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_PMETOACK_TMOTLIM_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x28)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xd)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_INBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x5)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x2)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_INBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_OUTBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0x1)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_OUTBCTRL_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x1)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x7f7f)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_MCACHE_HINT_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x3)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_L1_SUBCTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x2)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_UMASK_T8010_A0 (0x8073ffff)
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_BLK_AF_TMOT_CTRL_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x403d09)
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0xd, 0x5 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ /* APCIE_CONFIG_BLK_MCACHE_HINT */ 0x138, sizeof(uint32_t), 0x7f7f, 0x0 }, \
|
||||
{ /* APCIE_CONFIG_BLK_L1_SUBCTRL */ 0x13c, sizeof(uint32_t), 0x3, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_AF_TMOT_CTRL */ 0x140, sizeof(uint32_t), 0x8073ffff, 0x403d09 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_APCIE_PORT3_APCIE_CONFIG_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* APCIE_CONFIG_BLK_PMETOACK_TMOTLIM */ 0x90, sizeof(uint32_t), 0xff, 0x28 }, \
|
||||
{ /* APCIE_CONFIG_BLK_INBCTRL */ 0x130, sizeof(uint32_t), 0x2, 0x2 }, \
|
||||
{ /* APCIE_CONFIG_BLK_OUTBCTRL */ 0x134, sizeof(uint32_t), 0x1, 0x1 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#endif /* SPDS_T8010_A0_TUNABLE_APCIE_CONFIG_H */
|
||||
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Automatically generated by socgen. DO NOT EDIT!
|
||||
*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_A0_TUNABLE_X2_PCIE_RC_H
|
||||
#define SPDS_T8010_A0_TUNABLE_X2_PCIE_RC_H
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_UMASK_T8010_A0 (0x1f)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG */ 0x98, sizeof(uint32_t), 0xf, 0x0 }, \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_FPGA_TUNABLES_T8010_A0 \
|
||||
/* Key = fpga_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0x1f, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC0_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_UMASK_T8010_A0 (0x1f)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG */ 0x98, sizeof(uint32_t), 0xf, 0x0 }, \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_FPGA_TUNABLES_T8010_A0 \
|
||||
/* Key = fpga_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0x1f, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC1_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_UMASK_T8010_A0 (0x1f)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG */ 0x98, sizeof(uint32_t), 0xf, 0x0 }, \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_FPGA_TUNABLES_T8010_A0 \
|
||||
/* Key = fpga_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0x1f, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC2_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_UMASK_T8010_A0 (0x1f)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_FPGA_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_DEFAULT_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_UMASK_T8010_A0 (0xf8ff00)
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG_SECURE_ROM_TUNABLE_VALUE_T8010_A0 (0x0)
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_DEFAULT_TUNABLES_T8010_A0 \
|
||||
/* Key = default_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_PCIE_CAP_DEVICE_CONTROL2_DEVICE_STATUS2_REG */ 0x98, sizeof(uint32_t), 0xf, 0x0 }, \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_FPGA_TUNABLES_T8010_A0 \
|
||||
/* Key = fpga_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0x1f, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#define PCIE_PCIE_CONFIG_PCIE_RC3_SECURE_ROM_TUNABLES_T8010_A0 \
|
||||
/* Key = secure_rom_tunable_key */ \
|
||||
/* Register Macro Identifier Register Offset Register Size Tunable Mask Tunable Value */ \
|
||||
{ /* X2_PCIE_RC_X2_PCIE_DSP_PF0_L1SUB_CAP_L1SUB_CAPABILITY_REG */ 0x164, sizeof(uint32_t), 0xf8ff00, 0x0 }, \
|
||||
{ -1, -1, -1, -1 }
|
||||
|
||||
#endif /* SPDS_T8010_A0_TUNABLE_X2_PCIE_RC_H */
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_TUNABLE_APCIE_COMMON_H
|
||||
#define SPDS_T8010_TUNABLE_APCIE_COMMON_H
|
||||
|
||||
#include <platform/soc/t8010/a0/tunable/apcie_common.h>
|
||||
|
||||
#endif /* SPDS_T8010_TUNABLE_APCIE_COMMON_H */
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_TUNABLE_APCIE_CONFIG_H
|
||||
#define SPDS_T8010_TUNABLE_APCIE_CONFIG_H
|
||||
|
||||
#include <platform/soc/t8010/a0/tunable/apcie_config.h>
|
||||
|
||||
#endif /* SPDS_T8010_TUNABLE_APCIE_CONFIG_H */
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple inc.
|
||||
*/
|
||||
|
||||
#ifndef SPDS_T8010_TUNABLE_X2_PCIE_RC_H
|
||||
#define SPDS_T8010_TUNABLE_X2_PCIE_RC_H
|
||||
|
||||
#include <platform/soc/t8010/a0/tunable/x2_pcie_rc.h>
|
||||
|
||||
#endif /* SPDS_T8010_TUNABLE_X2_PCIE_RC_H */
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_TRAMPOLINE_H
|
||||
#define __PLATFORM_TRAMPOLINE_H
|
||||
|
||||
#include <platform/soc/hwregbase.h>
|
||||
|
||||
/* ROM related registers in AOP MINIPMGR space */
|
||||
|
||||
#define SECURITY_REG (AOP_MINIPMGR_BASE_ADDR + 0xD0010)
|
||||
#define ROM_READ_DISABLE (1 << 0)
|
||||
|
||||
#define REMAP_REG (AOP_MINIPMGR_BASE_ADDR + 0xD0014)
|
||||
|
||||
#endif /* ! __PLATFORM_TRAMPOLINE_H */
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_UARTCONFIG_H
|
||||
#define __PLATFORM_UARTCONFIG_H
|
||||
|
||||
/* define one debug serial ports */
|
||||
#define DEBUG_SERIAL_PORT (0)
|
||||
|
||||
#if SUPPORT_FPGA
|
||||
#define UART_OVERSAMPLE_OVERRIDE (11)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#ifndef __PLATFORM_USBCONFIG_H
|
||||
#define __PLATFORM_USBCONFIG_H
|
||||
|
||||
#if SUB_PLATFORM_T8010
|
||||
/*
|
||||
* per Cayman Tunables Specification, SPDS version 0.0.1
|
||||
*/
|
||||
|
||||
#define USBPHY_OTGTUNE0 (0x37377BC3)
|
||||
#define USBPHY_OTGTUNE1 (0x00020C04)
|
||||
|
||||
#else
|
||||
#error "Unknown SUB_PLATFORM"
|
||||
#endif
|
||||
|
||||
#define USBOTG_AHB_DMA_BURST (DWCUSB_GAHBCFG_HBST_INCR16)
|
||||
|
||||
#endif /* ! __PLATFORM_USBCONFIG_H */
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,210 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple Inc.
|
||||
*/
|
||||
#include <arch.h>
|
||||
#include <debug.h>
|
||||
#include <drivers/miu.h>
|
||||
#include <platform.h>
|
||||
#include <platform/memmap.h>
|
||||
#include <platform/miu.h>
|
||||
#include <platform/soc/miu.h>
|
||||
#include <platform/soc/pmgr.h>
|
||||
#include <platform/clocks.h>
|
||||
#include <platform/soc/chipid.h>
|
||||
#include <platform/soc/hwclocks.h>
|
||||
|
||||
static void miu_configure_bridge(const uint32_t *bridge_settings);
|
||||
|
||||
#define STATIC_BRIDGE_SHIFT (28)
|
||||
#define STATIC_BRIDGE_MASK ((1 << STATIC_BRIDGE_SHIFT) - 1)
|
||||
|
||||
// !!!FIXME!!! <rdar://problem/19602477> H9: Implement static MIU bridge setting
|
||||
#define SB_WIDGETS (0 << STATIC_BRIDGE_SHIFT)
|
||||
#define SOCBUSMUX_WIDGETS (1 << STATIC_BRIDGE_SHIFT)
|
||||
#define SWITCH_FAB_WIDGETS (2 << STATIC_BRIDGE_SHIFT)
|
||||
#define CP_WIDGETS (3 << STATIC_BRIDGE_SHIFT)
|
||||
|
||||
static const uint64_t bridge_registers[] = {
|
||||
#if 0 // <rdar://problem/19602477> H9: Implement static MIU bridge setting
|
||||
SB_BASE_ADDR,
|
||||
SOC_BUSMUX_BASE_ADDR,
|
||||
SWTCH_FAB_BASE_ADDR,
|
||||
CP_COM_BASE_ADDR,
|
||||
#endif
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
#if (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
|
||||
|
||||
static const uint32_t bridge_settings_static[] = {
|
||||
0,0
|
||||
};
|
||||
|
||||
#endif // (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
|
||||
|
||||
#if WITH_DEVICETREE
|
||||
#if SUPPORT_FPGA
|
||||
|
||||
struct bridge_list_t {
|
||||
char *bridge_settings;
|
||||
uint32_t fpga_enable_mask;
|
||||
};
|
||||
|
||||
#define BRIDGE(b, m) { "bridge-settings-" #b, (m) }
|
||||
|
||||
// ALERT: The ordering effects the device tree entries under pmgr node's reg dictionary.
|
||||
// It also affects the bridge id used in the pmgr device-clock nodes. The
|
||||
// bridge id must match the id on the device tree bridge-settings-<n> properties.
|
||||
// NOTE: The second parameter on the BRIDGE macro is used to dynamically determine
|
||||
// which bridge settings properties should exist based upon the hardware
|
||||
// blocks actually present on the device.
|
||||
|
||||
static const struct bridge_list_t bridge_list[] = {
|
||||
BRIDGE(0, FPGA_HAS_MEDIA), // Media Bus Mux
|
||||
BRIDGE(1, FPGA_HAS_MSR), // MSR_AXI2AF
|
||||
BRIDGE(2, FPGA_HAS_JPEG), // AJPEG_AXI2AF
|
||||
BRIDGE(3, FPGA_HAS_AVE), // AVE_AXI2AF
|
||||
BRIDGE(4, FPGA_HAS_VXD), // VDEC0_AXI2AF
|
||||
BRIDGE(5, FPGA_HAS_ISP), // ISP_DMA_AXI2AF + ISAP_KF_AXI2AF
|
||||
BRIDGE(6, FPGA_HAS_RTBUSMUX), // RTBusMux
|
||||
BRIDGE(7, FPGA_HAS_DISP), // Disp0
|
||||
BRIDGE(8, FPGA_HAS_GFX), // GFX
|
||||
BRIDGE(9, FPGA_HAS_GFX), // GFX_AFUSER
|
||||
BRIDGE(10, FPGA_HAS_ALWAYS), // USB
|
||||
BRIDGE(11, FPGA_HAS_ALWAYS), // PCIe
|
||||
};
|
||||
|
||||
#endif // SUPPORT_FPGA
|
||||
#endif // WITH_DEVICETREE
|
||||
|
||||
extern void ausb_setup_widgets();
|
||||
|
||||
int miu_initialize_internal_ram(void)
|
||||
{
|
||||
#if APPLICATION_SECUREROM
|
||||
// Ensure that rPMGR_SCRATCH0-3 get cleared
|
||||
rPMGR_SCRATCH0 = 0;
|
||||
rPMGR_SCRATCH1 = 0;
|
||||
rPMGR_SCRATCH2 = 0;
|
||||
rPMGR_SCRATCH3 = 0;
|
||||
#endif /* APPLICATION_SECUREROM */
|
||||
|
||||
// Save the Security Epoch in the top byte of PMGR_SCRATCH0
|
||||
rPMGR_SCRATCH0 &= ~0xFF000000;
|
||||
rPMGR_SCRATCH0 |= (platform_get_security_epoch()) << 24;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int miu_init(void)
|
||||
{
|
||||
#if APPLICATION_IBOOT && !PRODUCT_IBEC
|
||||
// Verify that the Security Epoch in PMGR_SCRATCH0 matches
|
||||
if ((rPMGR_SCRATCH0 >> 24) != platform_get_security_epoch()) {
|
||||
panic("miu_init: Epoch Mismatch\n");
|
||||
}
|
||||
#endif
|
||||
#if (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
|
||||
miu_configure_bridge(bridge_settings_static);
|
||||
#endif
|
||||
ausb_setup_widgets();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void miu_suspend(void)
|
||||
{
|
||||
/* nothing required for suspend */
|
||||
}
|
||||
|
||||
int miu_initialize_dram(bool resume)
|
||||
{
|
||||
RELEASE_ASSERT(!resume);
|
||||
|
||||
#if APPLICATION_IBOOT && WITH_HW_DCS
|
||||
mcu_initialize_dram(resume);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void miu_select_remap(enum remap_select sel)
|
||||
{
|
||||
switch (sel) {
|
||||
case REMAP_SRAM:
|
||||
rSECUREROMCTRL_ROMADDRREMAP = (rSECUREROMCTRL_ROMADDRREMAP & ~MINIPMGR_SECURITY_MCC_ROMADDRREMAP_ROMADDRRREMAP_UMASK) | SECUREROMCTRL_ROMADDRREMAP_SRAM;
|
||||
break;
|
||||
|
||||
case REMAP_SDRAM:
|
||||
rSECUREROMCTRL_ROMADDRREMAP = (rSECUREROMCTRL_ROMADDRREMAP & ~MINIPMGR_SECURITY_MCC_ROMADDRREMAP_ROMADDRRREMAP_UMASK) | SECUREROMCTRL_ROMADDRREMAP_SDRAM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void miu_bypass_prep(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void miu_configure_bridge(const uint32_t *bridge_settings)
|
||||
{
|
||||
volatile uint32_t *reg;
|
||||
uint32_t cnt = 0, bridge, offset, data;
|
||||
|
||||
while ((bridge_settings[cnt] != 0) || (bridge_settings[cnt + 1] != 0)) {
|
||||
while ((bridge_settings[cnt] != 0) || (bridge_settings[cnt + 1] != 0)) {
|
||||
bridge = bridge_settings[cnt] >> STATIC_BRIDGE_SHIFT;
|
||||
offset = bridge_settings[cnt] & STATIC_BRIDGE_MASK;
|
||||
data = bridge_settings[cnt + 1];
|
||||
reg = (volatile uint32_t *)(bridge_registers[bridge] + offset);
|
||||
*reg = data;
|
||||
cnt += 2;
|
||||
}
|
||||
cnt += 2;
|
||||
}
|
||||
}
|
||||
|
||||
#if WITH_DEVICETREE
|
||||
|
||||
#define DEBUG_BRIDGE DEBUG_SPEW // Debug level for bridge messages
|
||||
|
||||
void miu_update_device_tree(DTNode *pmgr_node)
|
||||
{
|
||||
#if SUPPORT_FPGA
|
||||
DTNode *node;
|
||||
char *propName;
|
||||
void *propData;
|
||||
uint32_t propSize;
|
||||
uint32_t fpga_blocks = chipid_get_fpga_block_instantiation();
|
||||
uint32_t i;
|
||||
|
||||
dprintf(DEBUG_INFO, "chipid_get_fpga_block_instantiation() = 0x%08X\n",
|
||||
fpga_blocks);
|
||||
|
||||
if (FindNode(0, "arm-io/pmgr", &node)) {
|
||||
|
||||
// For each bridge...
|
||||
for (i = 0; i < ARRAY_SIZE(bridge_list); i++) {
|
||||
|
||||
// Filter out if not supported by FPGA
|
||||
if (!(fpga_blocks & bridge_list[i].fpga_enable_mask)) {
|
||||
|
||||
propName = bridge_list[i].bridge_settings;
|
||||
|
||||
if (FindProperty(node, &propName, &propData, &propSize)) {
|
||||
dprintf(DEBUG_CRITICAL, "Eliding %s\n", propName);
|
||||
propName[0] = '~';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // SUPPORT_FPGA
|
||||
}
|
||||
|
||||
#endif // WITH_DEVICETREE
|
||||
@@ -0,0 +1,15 @@
|
||||
# Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
OPTIONS += \
|
||||
WITH_HW_MIU=1
|
||||
|
||||
ALL_OBJS += $(LOCAL_DIR)/miu.o
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,17 @@
|
||||
# Copyright (C) 2012-2014 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
OPTIONS += \
|
||||
WITH_HW_CLOCKS=1 \
|
||||
WITH_HW_PLATFORM_POWER=1 \
|
||||
WITH_HW_POWER_GATING=0
|
||||
|
||||
ALL_OBJS += $(LOCAL_DIR)/pmgr.o
|
||||
@@ -0,0 +1,136 @@
|
||||
# Copyright (C) 2012-2015 Apple Inc. All rights reserved.
|
||||
#
|
||||
# This document is the property of Apple Inc.
|
||||
# It is considered confidential and proprietary.
|
||||
#
|
||||
# This document may not be reproduced or transmitted in any form,
|
||||
# in whole or in part, without the express written permission of
|
||||
# Apple Inc.
|
||||
#
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
GLOBAL_INCLUDES += $(LOCAL_DIR)/include
|
||||
|
||||
# modules implied by this platform
|
||||
MODULES += \
|
||||
platform/defaults \
|
||||
platform/generic \
|
||||
arch/$(ARCH)
|
||||
|
||||
# Devmap chip ID, CPU, and memory default configs based on sub-platform identifier
|
||||
ifeq ($(SUB_PLATFORM),t8010)
|
||||
ARM_CPU := apple-hurricane-zephyr
|
||||
DEVMAP_CHIP_ID := 8010
|
||||
DISPLAY_SIZE_DEFAULT := 34*1024*1024
|
||||
MAX_DFU_SIZE := 512*1024
|
||||
SDRAM_LEN_DEFAULT := 2*1024*1024*1024
|
||||
SDRAM_LOAD_OFFSET := 256*1024*1024
|
||||
SDRAM_TEXT_BASE := 0x870000000
|
||||
SDRAM_TEXT_FOOTPRINT := 1024*1024
|
||||
SRAM_TEXT_BASE := 0x1800B0000
|
||||
SRAM_TEXT_FOOTPRINT := 1024*1024
|
||||
SROM_DATA_BASE := 0x180080000
|
||||
SPDS_CHIP_REV := a0
|
||||
else
|
||||
$(error "Unrecognized SUB_PLATFORM \"$(SUB_PLATFORM)\"")
|
||||
endif
|
||||
|
||||
# SROM is always defined here
|
||||
ifeq ($(TEXT_BANK),srom)
|
||||
TEXT_BASE := 0x100000000
|
||||
endif
|
||||
|
||||
# Overriding SRAM_LEN is not allowed.
|
||||
ifeq ($(TEXT_BANK),sram)
|
||||
# SRAM TEXT_BASE is fixed by SecureROM.
|
||||
TEXT_BASE := $(SRAM_TEXT_BASE)
|
||||
|
||||
# iBSS/LLB memory configuration
|
||||
ifeq ($(TEXT_FOOTPRINT),)
|
||||
TEXT_FOOTPRINT := $(SRAM_TEXT_FOOTPRINT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Platform target can override SDRAM config by specifying this in target config file (apps/iBoot/$target-config.mk)
|
||||
ifeq ($(SDRAM_LEN),)
|
||||
SDRAM_LEN := $(SDRAM_LEN_DEFAULT)
|
||||
|
||||
# iBoot/iBEC memory configuration
|
||||
ifeq ($(TEXT_BANK),sdram)
|
||||
# SDRAM TEXT_BASE is now set such that you don't have to do lots of math to
|
||||
# calulate the correct value if you change any of the other region sizes:
|
||||
# TEXT_BASE = SDRAM_BASE + SDRAM_LEN - 256MB
|
||||
TEXT_BASE := $(SDRAM_TEXT_BASE)
|
||||
# Platform target can override SRAM config by specifying this in target config file (apps/iBoot/$target-config.mk)
|
||||
ifeq ($(TEXT_FOOTPRINT),)
|
||||
TEXT_FOOTPRINT := $(SDRAM_TEXT_FOOTPRINT)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Platform target can override any of these sizes by specifying in target config file (apps/iBoot/$target-config.mk)
|
||||
ifeq ($(TZ0_SIZE),)
|
||||
TZ0_SIZE := 12*1024*1024
|
||||
endif
|
||||
ifeq ($(DISPLAY_SIZE),)
|
||||
DISPLAY_SIZE := $(DISPLAY_SIZE_DEFAULT)
|
||||
endif
|
||||
|
||||
ifeq ($(TEXT_FOOTPRINT),)
|
||||
$(error TEXT_FOOTPRINT has not been set)
|
||||
endif
|
||||
|
||||
# platform target can override ASP size by specifying this in target config file (apps/iBoot/$target-config.mk)
|
||||
ifeq ($(ASP_SIZE),)
|
||||
ASP_SIZE := 12*1024*1024
|
||||
endif
|
||||
|
||||
OPTIONS += \
|
||||
AIC_CPU_ID=0 \
|
||||
ANC_PPNNPL_DS_DRIVE_STRENGTH=6 \
|
||||
ANC_PPNNPL_INPUT_SELECT_SCHMITT=1 \
|
||||
ANC_LINK_CMD_ADDR_PULSE_TIMING_CA_HOLD_TIME=2 \
|
||||
ANC_LINK_CMD_ADDR_PULSE_TIMING_CA_SETUP_TIME=3 \
|
||||
ANC_LINK_SDR_REN_HOLD_TIME=2 \
|
||||
ANC_LINK_SDR_REN_SETUP_TIME=3 \
|
||||
ANC_LINK_SDR_WEN_HOLD_TIME=2 \
|
||||
ANC_LINK_SDR_WEN_SETUP_TIME=3 \
|
||||
ANC_LINK_SDR_DATA_CAPTURE_DELAY=1 \
|
||||
ANC_LINK_SDR_CLE_ALE_SETUP_TIME=0 \
|
||||
ANC_BOOT_CONTROLLERS=2 \
|
||||
ANC_TOGGLE_SUPPORTED=1 \
|
||||
DISPLAY_SIZE="($(DISPLAY_SIZE)ULL)" \
|
||||
PLATFORM_ENTROPY_RATIO=200 \
|
||||
PLATFORM_IRQ_COUNT=288 \
|
||||
PLATFORM_START_FUNCTION=_platform_start \
|
||||
SDRAM_LEN="$(SDRAM_LEN)ULL" \
|
||||
TZ0_SIZE="$(TZ0_SIZE)ULL" \
|
||||
ASP_SIZE="$(ASP_SIZE)" \
|
||||
SDRAM_LOAD_OFFSET="$(SDRAM_LOAD_OFFSET)ULL" \
|
||||
PLATFORM_SPDS_CHIP_REV=$(SUB_PLATFORM)/$(SPDS_CHIP_REV) \
|
||||
TEXT_BASE="$(TEXT_BASE)" \
|
||||
TEXT_FOOTPRINT="$(TEXT_FOOTPRINT)" \
|
||||
WITH_DPA=1 \
|
||||
WITH_SIDP=1
|
||||
|
||||
GLOBAL_LDFLAGS += \
|
||||
-seg1addr $(TEXT_BASE)
|
||||
|
||||
ifeq ($(APPLICATION),SecureROM)
|
||||
DATA_BASE := $(SROM_DATA_BASE)
|
||||
GLOBAL_LDFLAGS += \
|
||||
-segaddr __DATA $(DATA_BASE)
|
||||
OPTIONS += \
|
||||
WITH_ROM_TRAMPOLINE=1 \
|
||||
DATA_BASE="$(DATA_BASE)"
|
||||
|
||||
ifeq ($(CONFIGS),fpga)
|
||||
OPTIONS += \
|
||||
SUPPORT_FPGA=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ALL_OBJS += \
|
||||
$(LOCAL_DIR)/asm.o \
|
||||
$(LOCAL_DIR)/init.o \
|
||||
$(LOCAL_DIR)/trampoline.o
|
||||
@@ -0,0 +1,215 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Apple, Inc. All rights reserved.
|
||||
*
|
||||
* This document is the property of Apple, Inc.
|
||||
* It is considered confidential and proprietary.
|
||||
*
|
||||
* This document may not be reproduced or transmitted in any form,
|
||||
* in whole or in part, without the express written permission of
|
||||
* Apple, Inc.
|
||||
*/
|
||||
|
||||
#include <platform/memmap.h>
|
||||
#include <platform/trampoline.h>
|
||||
#include <platform/soc/hwregbase.h>
|
||||
#include <arch/arm64/proc_reg.h>
|
||||
|
||||
// Clears from X0 to X1 (not including X1).
|
||||
// Assumes that X0 and X1 are both 64-byte aligned as this
|
||||
// will normally be used to clear a whole page.
|
||||
.macro CLEAR_X0_TO_X1
|
||||
1:
|
||||
stp xzr, xzr, [x0], #16
|
||||
stp xzr, xzr, [x0], #16
|
||||
stp xzr, xzr, [x0], #16
|
||||
stp xzr, xzr, [x0], #16
|
||||
cmp x0, x1
|
||||
b.lo 1b
|
||||
.endmacro
|
||||
|
||||
// Clears from X0 to X1 (not including X1) using cacheline clear
|
||||
// operations.
|
||||
// Assumes that X0 and X1 are both cacheline aligned as this
|
||||
// will normally be used to clear a whole page.
|
||||
.macro CLEAR_X0_TO_X1_CACHE_ON
|
||||
1:
|
||||
dc zva, x0 // zero cacheline
|
||||
add x0, x0, #L1_CACHELINE_SIZE
|
||||
cmp x0, x1
|
||||
b.lo 1b
|
||||
.endmacro
|
||||
|
||||
.text
|
||||
.balign 16
|
||||
.globl _boot_handoff_trampoline, _boot_handoff_trampoline_end
|
||||
_boot_handoff_trampoline:
|
||||
|
||||
// Disable external aborts, interrupts
|
||||
msr DAIFSet, #(0xf)
|
||||
|
||||
// Save jump address in x29, and next stage boot info into x28.
|
||||
mov x29, x0
|
||||
mov x28, x1
|
||||
|
||||
// Start by clearing the heap.
|
||||
ldr x0, L_heap_base
|
||||
ldr x1, L_heap_end
|
||||
CLEAR_X0_TO_X1_CACHE_ON
|
||||
|
||||
// Clear the stacks area.
|
||||
ldr x0, L_stacks_base
|
||||
ldr x1, L_stacks_end
|
||||
CLEAR_X0_TO_X1_CACHE_ON
|
||||
|
||||
// Retire all data accesses prior to this
|
||||
// <rdar://problem/19862668> H9: L2 as RAM request RO and DO alias result in prb hang
|
||||
dsb sy
|
||||
// Retire all instructions executed prior to this (may include ROM).
|
||||
isb sy
|
||||
|
||||
// Disable caches, mmu, stack alignment fault
|
||||
mov x3, #0
|
||||
msr SCTLR_EL1, x3
|
||||
dsb sy
|
||||
isb sy
|
||||
|
||||
// Flush the TLBs
|
||||
tlbi vmalle1
|
||||
dsb sy
|
||||
isb sy
|
||||
|
||||
// Now running EL1 with MMU off. All accesses are device.
|
||||
|
||||
// Clear the page tables.
|
||||
ldr x0, L_page_tables_base
|
||||
ldr x1, L_page_tables_end
|
||||
CLEAR_X0_TO_X1
|
||||
|
||||
// Clear the text area (or data area in ROM)
|
||||
// This can only be done if the trampoline was copied to a safe location
|
||||
ldr x0, L_text_base
|
||||
ldr x1, L_text_end
|
||||
CLEAR_X0_TO_X1
|
||||
|
||||
// Clear all the pointers to interesting memory areas
|
||||
// that were included in the trampoline
|
||||
adr x0, L_pointers_base
|
||||
adr x1, L_pointers_end
|
||||
CLEAR_X0_TO_X1
|
||||
|
||||
#if WITH_ROM_TRAMPOLINE
|
||||
// Disable R/W access to ROM region
|
||||
ldr x1, L_rom_trampoline_reg
|
||||
ldr w2, L_rom_trampoline_val
|
||||
ldr w3, [x1]
|
||||
orr w3, w3, w2
|
||||
str w3, [x1]
|
||||
dsb sy
|
||||
ldr w3, [x1]
|
||||
tst w3, w2 // Verify ROM access is disabled
|
||||
b.eq _trampoline_spin // Oops, not disabled
|
||||
|
||||
// ROM doesn't pass any info to next stage (LLB)
|
||||
mov x28, #0
|
||||
|
||||
// Clear remap if enabled to boot this ROM
|
||||
ldr x1, L_rom_remap_reg
|
||||
str wzr, [x1]
|
||||
#endif // WITH_ROM_TRAMPOLINE
|
||||
|
||||
// Reset CPU state
|
||||
mov x1, #0
|
||||
mov x2, #0
|
||||
mov x3, #0
|
||||
mov x4, #0
|
||||
mov x5, #0
|
||||
mov x6, #0
|
||||
mov x7, #0
|
||||
mov x8, #0
|
||||
mov x9, #0
|
||||
mov x10, #0
|
||||
mov x11, #0
|
||||
mov x12, #0
|
||||
mov x13, #0
|
||||
mov x14, #0
|
||||
mov x15, #0
|
||||
mov x16, #0
|
||||
mov x17, #0
|
||||
mov x18, #0
|
||||
mov x19, #0
|
||||
mov x20, #0
|
||||
mov x21, #0
|
||||
mov x22, #0
|
||||
mov x23, #0
|
||||
mov x24, #0
|
||||
mov x25, #0
|
||||
mov x26, #0
|
||||
mov x27, #0
|
||||
mov x30, x29 // lr = next boot stage PC
|
||||
mov x0, x28 // x0 = next boot stage info
|
||||
mov x28, #0
|
||||
mov x29, #0
|
||||
msr TTBR0_EL1, x1
|
||||
msr VBAR_EL1, x1
|
||||
msr ELR_EL1, x1
|
||||
msr SPSR_EL1, x1
|
||||
msr SPSel, #0
|
||||
mov sp, x1 // SP_EL0
|
||||
msr SPSel, #1
|
||||
mov sp, x1 // SP_EL1
|
||||
|
||||
// Invalidate I-cache
|
||||
ic iallu
|
||||
dsb sy
|
||||
isb sy
|
||||
|
||||
ret
|
||||
|
||||
#if WITH_ROM_TRAMPOLINE
|
||||
// Not really able to panic at this point, so let's just spin.
|
||||
_trampoline_spin:
|
||||
wfe
|
||||
b _trampoline_spin
|
||||
|
||||
.balign 8
|
||||
L_rom_remap_reg:
|
||||
.8byte REMAP_REG
|
||||
L_rom_trampoline_reg:
|
||||
.8byte SECURITY_REG
|
||||
L_rom_trampoline_val:
|
||||
.4byte ROM_READ_DISABLE
|
||||
#endif // WITH_ROM_TRAMPOLINE
|
||||
|
||||
.balign 64
|
||||
L_pointers_base:
|
||||
#if WITH_ROM_TRAMPOLINE
|
||||
// in ROM we don't erase TEXT, but we can erase DATA
|
||||
L_text_base:
|
||||
.8byte DATA_BASE
|
||||
L_text_end:
|
||||
.8byte DATA_BASE + DATA_SIZE
|
||||
#else
|
||||
// In non-ROM we erase TEXT_FOOTPRINT, which includes both TEXT and DATA
|
||||
L_text_base:
|
||||
.8byte TEXT_BASE
|
||||
L_text_end:
|
||||
.8byte TEXT_BASE + TEXT_FOOTPRINT
|
||||
#endif // WITH_ROM_TRAMPOLINE
|
||||
L_heap_base:
|
||||
.8byte HEAP_BASE
|
||||
L_heap_end:
|
||||
.8byte HEAP_BASE + HEAP_SIZE
|
||||
L_stacks_base:
|
||||
.8byte STACKS_BASE
|
||||
L_stacks_end:
|
||||
.8byte STACKS_BASE + STACKS_SIZE
|
||||
L_page_tables_base:
|
||||
.8byte PAGE_TABLES_BASE
|
||||
L_page_tables_end:
|
||||
.8byte PAGE_TABLES_BASE + PAGE_TABLES_SIZE
|
||||
.balign 64
|
||||
L_pointers_end:
|
||||
|
||||
_boot_handoff_trampoline_end:
|
||||
|
||||
.balign 16
|
||||
Reference in new issue
Block a user