first and last commit

This commit is contained in:
Chris Nutter committed 2023-07-08 13:03:17 -07:00
commit 1bf4efd552
2612 files changed
+636500

No files matched your search

+169
View File
@@ -0,0 +1,169 @@
/*
* 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.
*/
#include <drivers/amc/amc.h>
#include <drivers/amc/amc_phy.h>
#include <drivers/amc/amc_regs.h>
#include <drivers/dram.h>
#include <drivers/miu.h>
#include <sys.h>
int mcu_initialize_dram (bool resume)
{
return amc_init(resume);
}
void mcu_bypass_prep (int step)
{
amc_phy_bypass_prep(step);
}
uint64_t mcu_get_memory_size (void)
{
return amc_get_memory_size();
}
void amc_configure_address_decoding_and_mapping (void)
{
amc_configure_default_address_decoding_and_mapping();
}
void amc_enable_slow_boot (bool enable)
{
int slow_freqsel;
if (enable) {
if ((amc_params.flags & FLAG_AMC_PARAM_SLOW_BOOT) == false) {
rAMC_FREQSEL = amc_params.freqsel;
return;
}
slow_freqsel = 3;
rAMC_BOOTCLK = (amc_params.bootclkdivsr << 8) | 1;
spin(1);
rAMC_FREQSEL = slow_freqsel;
amc_phy_scale_dll(slow_freqsel, amc_params.bootclkdivsr);
} else {
if ((amc_params.flags & FLAG_AMC_PARAM_SLOW_BOOT) == false) {
return;
}
rAMC_PWRMNGTPARAM = amc_params.pwrmngtparam_small;
spin(2);
rAMC_BOOTCLK &= ~1;
spin(5);
rAMC_FREQSEL = amc_params.freqsel;
amc_phy_scale_dll(amc_params.freqsel, 1);
rAMC_PWRMNGTPARAM = amc_params.pwrmngtparam_guided;
}
}
void amc_finalize (bool resume)
{
uint8_t odts;
#if SUPPORT_FPGA
rAMC_PWRMNGTEN |= 0x00000001; // Sharing clocks between channels so do not enable clock stopping for PD or SR
#else
rAMC_PWRMNGTEN |= 0x00011011;
#endif
rAMC_AREFPARAM |= (0x00001000); // Turn on freq change waiting for refresh and self-refresh exit
amc_mrcmd(MR_READ, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x4, (uintptr_t)&odts);
rAMC_ODTS = 0x00010320; // [16] => TempDrtEn, [9:0] RdIntrvl XXX based on tREFI
if (!resume) {
amc_enable_autorefresh();
}
#if SUPPORT_FPGA
rAMC_FREQSEL = amc_params.freqsel;
#endif
#if !SUPPORT_FPGA
// Turn of Fast Critical Word Forwarding feature and AIU CWF feature
// Disabled for NRT <rdar://problem/9416881>
rAMC_AIUPRT_RD_CWF = 0x00161600;
rAMC_QBRPARAM = 0x00810000;
rAMC_QBREN = 0x00111001;
#endif
}
void amc_dram_workarounds (bool resume)
{
const struct amc_memory_device_info *dev_info;
dev_info = amc_get_memory_device_info();
switch (dev_info->vendor_id) {
case JEDEC_MANUF_ID_SAMSUNG:
// <rdar://problem/11060879> Samsung 3xnm DRAMs - not functional
if ((!resume) && (dev_info->rev_id == 1) && (dev_info->rev_id2 == 0)) {
// Test MRS Entry
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x20);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x20);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x20);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0xff);
// PDL_M(-500ps)
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x80);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x20);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x01);
// Latch Command
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x00);
amc_mrcmd(MR_WRITE, AMC_NUM_CHANNELS, AMC_NUM_RANKS, 0x9, 0x00);
}
break;
case JEDEC_MANUF_ID_HYNIX:
break;
default:
break;
}
return;
}
// Shift dq offset as needed.
// In the future, it's possible the shift value changes based on SOC or DRAM vendor.
// Thus, we need to have this function per SOC.
void amc_dram_shift_dq_offset (int8_t *dq_offset, uint8_t num_bytes) {
int8_t shift_val;
uint8_t i;
const struct amc_memory_device_info *dev_info;
dev_info = amc_get_memory_device_info();
switch (dev_info->vendor_id) {
case JEDEC_MANUF_ID_HYNIX:
case JEDEC_MANUF_ID_SAMSUNG:
case JEDEC_MANUF_ID_ELPIDA:
// shift 2 steps
shift_val = -2;
break;
default:
shift_val = 0;
break;
}
for (i = 0; i < num_bytes; i++)
dq_offset[i] += shift_val;
}
+16
View File
@@ -0,0 +1,16 @@
# Copyright (C) 2011 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_AMC=1
ALL_OBJS += \
$(LOCAL_DIR)/amc.o
+36
View File
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2010-2011 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/arm/assembler.h>
.text
ARM_FUNCTION _platform_start
// Configure the first half of the cache as RAM
mov r2, #0xFF000000 // L2CCONFIG0.AcpMask[7:0] = 0xFF
orr r2, r2, #0x000F0000 // L2CCONFIG0.RamWayMask[7:0] = 0x0F
orr r2, r2, #0x00000002 // L2CCONFIG0.RamEna = 1
mcr p15, 1, r2, c15, c2, 0 // Write to L2CCONFIG0
isb // Wait for the write to take effect
bx lr
ARM_FUNCTION _miu_read_l2cadrmap
mrc p15, 1, r0, c15, c2, 4
bx lr
ARM_FUNCTION _miu_write_l2cadrmap
mcr p15, 1, r0, c15, c2, 4
isb
bx lr
+249
View File
@@ -0,0 +1,249 @@
/*
* Copyright (C) 2010-2012 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 <lib/env.h>
#include <platform.h>
#include <platform/soc/chipid.h>
#include <platform/soc/hwclocks.h>
#if SUPPORT_FPGA
#define _rCFG_FUSE0 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x00))
#undef rCFG_FUSE0
// XXX ECID (1 << 7)?
// XXX double-check memory values
#define rCFG_FUSE0 ((0 << 31) | (3 << 28) | (0xE << 24) | (2 << 22) | \
(0 << 9) | (1 << 8) | (3 << 4) | (kPlatformSecurityDomainDarwin << 2) | (0 << 1) | (0 << 0) | \
_rCFG_FUSE0)
#endif
#if SUB_PLATFORM_S5L8955X
// Based on H5P/H5G tunables v0.63 and H5G Test Plan rev 1.5
#define MINIMUM_BINNING_VERSION (2)
static u_int32_t default_soc_voltages[CHIPID_SOC_VOLTAGE_COUNT] = { 980, 1030, 1130 };
/* 600, 1008, 1200, 1296, 1396 - - - MHz */
static u_int32_t default_cpu_voltages[CHIPID_CPU_VOLTAGE_COUNT] = { 810, 1020, 1100, 1145, 1180, 0, 0, 0};
static u_int32_t default_ram_voltages[CHIPID_RAM_VOLTAGE_COUNT] = { 950, 1000 };
#endif
static u_int32_t chipid_get_binning_revision(void);
static u_int32_t chipid_get_base_voltage(void);
bool chipid_get_production_mode(void)
{
return ((rCFG_FUSE0 >> 0) & 1) != 0;
}
void chipid_clear_production_mode(void)
{
#if SUPPORT_FPGA
_rCFG_FUSE0 &= ~1;
#else
rCFG_FUSE0 &= ~1;
#endif
}
bool chipid_get_secure_mode(void)
{
return ((rCFG_FUSE0 >> 1) & 1) != 0;
}
u_int32_t chipid_get_security_domain(void)
{
return (rCFG_FUSE0 >> 2) & 3;
}
u_int32_t chipid_get_board_id(void)
{
return (rCFG_FUSE0 >> 4) & 3;
}
bool chipid_get_ecid_image_personalization_required(void)
{
return ((rCFG_FUSE0 >> 7) & 1) != 0;
}
u_int32_t chipid_get_minimum_epoch(void)
{
return (rCFG_FUSE0 >> 9) & 0x7F;
}
u_int32_t chipid_get_chip_id(void)
{
#if SUB_PLATFORM_S5L8955X
return 0x8955;
#endif
}
u_int32_t chipid_get_chip_revision(void)
{
return (((rECIDHI >> 13) & 0x7) << 4) | (((rECIDHI >> 10) & 0x7) << 0);
}
u_int32_t chipid_get_osc_frequency(void)
{
return OSC_FREQ;
}
u_int64_t chipid_get_ecid_id(void)
{
u_int64_t ecid = 0;
#if SUPPORT_FPGA
ecid = 0x000012345678ABCDULL;
#else
ecid |= ((rECIDLO >> 0)) & ((1ULL << (21 - 0)) - 1); // LOT_ID
ecid <<= (26 - 21);
ecid |= ((rECIDLO >> 21)) & ((1ULL << (26 - 21)) - 1); // WAFER_NUM
ecid <<= (10 - 2);
ecid |= ((rECIDHI >> 2)) & ((1ULL << (10 - 2)) - 1); // Y_POS
ecid <<= (32 - 26);
ecid |= ((rECIDLO >> 26)) & ((1ULL << (32 - 26)) - 1); // X_POS_H
ecid <<= ( 2 - 0);
ecid |= ((rECIDHI >> 0)) & ((1ULL << ( 2 - 0)) - 1); // X_POS_L
#endif
return ecid;
}
u_int64_t chipid_get_die_id(void)
{
return ((u_int64_t)rECIDHI << 32) | rECIDLO;
}
u_int32_t chipid_get_soc_voltage(u_int32_t index)
{
u_int32_t soc_voltage;
u_int64_t soc_bin_data;
if (index > CHIPID_SOC_VOLTAGE_COUNT) return 0;
if (chipid_get_binning_revision() < MINIMUM_BINNING_VERSION) {
// This part is unbinned or the binning version is not supported
// Use the default voltage
soc_voltage = default_soc_voltages[index];
} else {
// Read the SoC bin data from the fuses
soc_bin_data = ((((u_int64_t)rCFG_FUSE1) << 32) | rCFG_FUSE0) >> 25;
// Start with the base voltage
soc_voltage = chipid_get_base_voltage();
// Add in the correct bin from the "array"
soc_voltage += 5 * ((soc_bin_data >> (index * 7)) & 0x7F);
}
return soc_voltage;
}
u_int32_t chipid_get_cpu_voltage(u_int32_t index)
{
u_int32_t cpu_voltage;
u_int64_t cpu_bin_data;
if (index > CHIPID_CPU_VOLTAGE_COUNT) return 0;
if (chipid_get_binning_revision() < MINIMUM_BINNING_VERSION) {
// This part is unbinned to the binning version is not supported
// Use the default voltage
cpu_voltage = default_cpu_voltages[index];
} else {
// Read the CPU bin data from the fuses
cpu_bin_data = ((((u_int64_t)rDVFM_FUSE(1)) << 32) | rDVFM_FUSE(0)) >> 5;
// Start with the base voltage
cpu_voltage = chipid_get_base_voltage();
// Add in the correct bin from the "array"
cpu_voltage += 5 * ((cpu_bin_data >> (index * 7)) & 0x7F);
}
return cpu_voltage;
}
u_int32_t chipid_get_ram_voltage(u_int32_t index)
{
u_int32_t ram_voltage;
if (index > CHIPID_RAM_VOLTAGE_COUNT) return 0;
// RAM voltage is not binned, use the default voltage
ram_voltage = default_ram_voltages[index];
return ram_voltage;
}
bool chipid_get_fuse_lock(void)
{
return (rCFG_FUSE1 & (1 << 31)) != 0;
}
void chipid_set_fuse_lock(bool locked)
{
if (locked) rCFG_FUSE1 |= 1 << 31;
}
int32_t chipid_get_cpu_temp_offset(u_int32_t cpu_number)
{
int32_t temp_cal;
switch (cpu_number) {
case 0 : temp_cal = (rDVFM_FUSE(9) >> 0) & 0x7F; break;
case 1 : temp_cal = (rDVFM_FUSE(9) >> 16) & 0x7F; break;
default : return 0;
}
return 0x3B - temp_cal;
}
u_int32_t chipid_get_fused_thermal_sensor_70C(u_int32_t sensorID)
{
u_int32_t temp_cal;
switch (sensorID) {
case 0: temp_cal = (rCFG_FUSE4 >> 8) & 0x7F; break;
case 1: temp_cal = (rCFG_FUSE4 >> 24) & 0x7F; break;
default : return 0;
}
return temp_cal;
}
u_int32_t chipid_get_fused_thermal_sensor_25C(u_int32_t sensorID)
{
u_int32_t temp_cal;
switch (sensorID) {
case 0: temp_cal = (rCFG_FUSE4 >> 0) & 0x7F; break;
case 1: temp_cal = (rCFG_FUSE4 >> 16) & 0x7F; break;
default : return 0;
}
return temp_cal;
}
u_int32_t chipid_get_fuse_revision(void)
{
return (rCFG_FUSE0 >> 18) & 0xf;
}
static u_int32_t chipid_get_binning_revision(void)
{
return (rDVFM_FUSE(1) >> (61 - 32)) & 7;
}
static u_int32_t chipid_get_base_voltage(void)
{
return 25 * (1 + ((rDVFM_FUSE(0) >> 0) & 0x1F));
}
+15
View File
@@ -0,0 +1,15 @@
# Copyright (C) 2010 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
@@ -0,0 +1,142 @@
/*
* Copyright (C) 2011 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.
*/
#if WITH_TARGET_AMC_PARAMS
#include <target/amcconfig.h>
#else
static const struct amc_param amc_params = {
.flags = (FLAG_AMC_PARAM_BUSTAT23 | FLAG_AMC_PARAM_SLOW_BOOT | FLAG_AMC_PARAM_RECONFIG | FLAG_AMC_PARAM_ENABLE_AIU | FLAG_AMC_PARAM_MRR_BYTE_SWIZZLE),
.tREFi = 0x5d,
.longsrcnt = 0x2008,
.tREFi_1Gb = 0x5d,
.longsrcnt_1Gb = 0x2008,
.rdlat = 8,
.wrlat = 4,
.phyrdlat = 10,
.phywrlat = 4,
.pdn = 0x33000503,
.read = 0x00000103,
.bustat = 0x00222212,
.bustat2 = 0x00222212,
.derate = 0x34b3187b,
.mcphyupdate = 0x05030000,
.autoref_params = 0x22, // <rdar://problem/9133484> MIF: tREFBW violation due to freq change
.pwrmngtparam_small = 0x00011000,
.pwrmngtparam_guided = 0x01801000,
.chnldec = 0x00000100,
.chnldec2 = 0x00155555,
.chnldec4 = 0x002aaaaa,
.bootclkdivsr = 10,
.arefparam = 0x0600a000,
.aref_freq1 = 0x00100100,
.aref_freq0 = 0x00100100,
.srextrarefcnt = 0x00010000,
.readleveling = 0x01000301,
.freq = {
{ // 522MHz
.cas = 0x0000040a,
.pch = 0x00040817,
.act = 0x1b060c0a,
.autoref = 0x20469000,
.selfref = 0x0004b080,
.modereg = 0x00300502,
.mifcassch = 0x001f0111,
},
{ // 400MHz
.cas = 0x00000008,
.pch = 0x00000012,
.act = 0x14050a08,
.autoref = 0x18340000,
.selfref = 0x00038000,
.modereg = 0x00240000,
.mifcassch = 0x00000010,
},
{ // 200MHz
.cas = 0x00000004,
.pch = 0x00000009,
.act = 0x0a030504,
.autoref = 0x0c1a0000,
.selfref = 0x0001c000,
.modereg = 0x00120000,
.mifcassch = 0x00000000,
},
{ // 50 & 24MHz
.cas = 0x00000003,
.pch = 0x00000003,
.act = 0x08020303,
.autoref = 0x03070000,
.selfref = 0x00007000,
.modereg = 0x00060000,
.mifcassch = 0x00000010,
}
}
};
static const struct amc_tunable amc_tunables[] = {
// These settings are common across all H4x and H5P. Channel decode and hashing
// is done in mainline init code. Any tunables that match hardware defaults are
// omitted here.
{ &rAMC_AIUPRT_CFG, 0x00070000 }, // address error enable
{ &rAMC_AIUPRT_RD_GEN, 0x00000018 }, // fence read detect on GFX
{ &rAMC_AIUPRT_WR, 0x00000001 }, // out-of-order write, ignore B-bit
{ &rAMC_AIU_CHNLDEC2, 0x00155555 },
{ &rAMC_AIU_CHNLDEC4, 0x002AAAAA },
{ &rAMC_AIU_RDBRSTLEN, 0x01010101 }, // burst len is 64B
{ &rAMC_AIU_WRBRSTLEN, 0x01010101 }, // burst len is 64B
{ &rAMC_AIU_CPUSPCREQ, 0x00000019 }, // CPU ageout timer
{ &rAMC_AIU_GFXSPCREQ, 0x00000032 }, // GFX ageout timer
{ &rAMC_AIU_NRTSPCREQ, 0x00000032 }, // Hperf-NRT ageout timer
{ &rAMC_AIU_RTSPCREQ, 0x00000019 }, // Hperf-RT ageout timer
{ &rAMC_AIU_PUSHEN, 0x00001100 }, // only supported for Hperf-RT
{ &rAMC_OPIDLETMR, 0x00200000 },
{ &rAMC_OPTMRADJEN, 0x00000001 },
{ &rAMC_OPTMRADJPARAM, 0x20400064 },
{ &rAMC_MIFACTSCH, 0x00000001 },
{ &rAMC_PSQRQTIMER0, 0x00000040 }, // RTG bypass up to 64 transactions
{ &rAMC_PSQRQTIMER1, 0x00000018 }, // RTY bypass up to 24 transactions
{ &rAMC_PSQRQTIMER2, 0x00000020 }, // RTG bypass up to 32 transactions
{ &rAMC_PSQRQBRST, 0x040c040c }, // RTR transactions don't affect read burst size
{ &rAMC_PSQRQSCHCRD, 0x002028f5 }, // read credits = 2 * write credits
{ &rAMC_PSQWQBRST, 0x0208040c }, // RTR reads cause reduced write burst size
{ &rAMC_PSQWQSCHCRD, 0x001014f5 }, // write credits = 1/2 * read credits
{ &rAMC_MCUQOS, 0x00010f04 }, // RTG=4, RTY=15, enable pick-oldest-RTY
// Platform specific
{ &rAMC_AIU_RDMAXCRD, 0x1912047F }, // RT:NRT:CPU:GFX = 25:18:04:MAX
{ &rAMC_AIU_RDREFL, 0x140f037f }, // 5/6 of AIURDMAXCRD fields
{ &rAMC_AIU_WRMAXCRD, 0x1912047f }, // RT:NRT:CPU:GFX = 25:18:04:MAX
{ &rAMC_AIU_WRREFL, 0x140f037f }, // 5/6 of AIUWRMAXCRD fields
{ &rAMC_AIU_ADDRBANKHASH0, 0x00006db6 }, // Enable bank hashing, bank[0] derived from bits 0,3,6,..
{ &rAMC_AIU_ADDRBANKHASH1, 0x00005b6d }, // Enable bank hashing, bank[1] derived from bits 1,4,7,..
{ &rAMC_AIU_ADDRBANKHASH2, 0x000036db }, // Enable bank hashing, bank[2] derived from bits 2,5,8,..
{ &rAMC_AIU_CHNLCRD, 0x00180018 },
{ &rAMC_AIU_LLTSCHCTL, 0x00000001 }, // Ensure LLT traffic from all ports is treated as medium priority request in the AIU arbitration
{ &rAMC_MCUQOSLLT, 0x00010108 },
{ &rAMC_AIU_CHNLTM, 0x40006101 },
{ &rAMC_AIU_WPQSCH, 0x08000800 }, // set starvation counts to 8
{ &rAMC_PSQRQCTL1, 0x0000132a },
{ &rAMC_PSQWQCTL0, 0x00010100 }, // enable write merging
{ &rAMC_PSQWQCTL1, 0x00000180 }, // optimized for 4 channels
{ &rAMC_PWRMNGTPARAM, 0x03001000 }, // optimized for 4 channels
};
#endif
@@ -0,0 +1,41 @@
/*
* Copyright (C) 2011 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.
*/
/*
* The amc_param struct is defined in drivers/apple/amp/amp.h, and this
* file should only by included from that amp.c.
*/
#if WITH_TARGET_AMP_PARAMS
#include <target/ampconfig.h>
#else
static const struct amp_params amc_phy_params = {
.flags = (FLAG_AMP_PARAM_SUPPORT_FMCLK_OFF | FLAG_AMP_PARAM_FULLDIFFMODE),
.freq = {
{
.scl = 0x08,
.rdcapcfg = 0x00010308,
},
{
.scl = 0x0b,
.rdcapcfg = 0x00010306,
},
{
.scl = 0x16,
.rdcapcfg = 0x00010303,
},
{
.scl = 0x3f,
.rdcapcfg = 0x00010301,
},
},
};
#endif
@@ -0,0 +1,62 @@
/*
* Copyright (C) 2011-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_GPIODEF_H
#define __PLATFORM_GPIODEF_H
/* S5L8955X specific gpio -> pin mappings */
#include <platform/gpio.h>
#include <platform/soc/hwregbase.h>
#if WITH_TARGET_CONFIG
# include <target/gpiodef.h>
#endif
/* define platform-specific gpios in a generic fashion here. */
#define GPIO_IIC0_SCL GPIO(15, 1)
#define GPIO_IIC0_SDA GPIO(15, 0)
#define GPIO_IIC1_SCL GPIO(15, 3)
#define GPIO_IIC1_SDA GPIO(15, 2)
#define GPIO_IIC2_SCL GPIO(28, 5)
#define GPIO_IIC2_SDA GPIO(28, 4)
#define GPIO_BOARD_ID0 GPIO(14, 0)
#define GPIO_BOARD_ID1 GPIO(14, 1)
#define GPIO_BOARD_ID2 GPIO(14, 2)
#define GPIO_BOARD_ID3 GPIO( 4, 6)
#define GPIO_BOOT_CONFIG0 GPIO( 5, 0)
#define GPIO_BOOT_CONFIG1 GPIO(24, 5)
#define GPIO_BOOT_CONFIG2 GPIO(25, 0)
#define GPIO_BOOT_CONFIG3 GPIO(25, 1)
#define GPIO_REQUEST_DFU1 GPIO( 0, 1) // formerly known as HOLD_KEY
#define GPIO_REQUEST_DFU2 GPIO( 0, 0) // formerly known as MENU_KEY
#define GPIO_FORCE_DFU GPIO(24, 6)
#define GPIO_DFU_STATUS GPIO(24, 7)
#define SPI_NOR0 (0)
#define SPI_NOR3 (3)
#if SUPPORT_FPGA
// XXX Need to understand this and possibly correct it.
#define GPIO_SPI0_CS GPIO(GPIO_PAD_SPI, 0)
#define GPIO_SPI3_CS GPIO(GPIO_PAD_SPI, 3)
#else
#define GPIO_SPI0_CS GPIO(14, 3)
#define GPIO_SPI3_CS GPIO(28, 3)
#endif
#define GPIO_UART1_TXD GPIO( 5, 2)
#define GPIO_SYSTEM_RESET GPIO(30, 0)
#endif /* ! __PLATFORM_GPIODEF_H */
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2010 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_NAND_BOOT)
{ "nand_firmware", 0x00000 }
#else
#if defined(WITH_SW_H2FMI)
{ "sw-h2fmi", 0x0000 }
#else
{ "nor0", 0x00000 }
#endif
#endif
};
#if WITH_SYSCFG
static const struct image_device platform_syscfg_devices[] = {
#if defined(WITH_NAND_BOOT)
{ "nand_syscfg", 0x00000 }
#else
{ "nor0", 0x00000 }
#endif
};
#endif /* WITH_SYSCFG */
#endif /* ! __PLATFORM_IMAGE_DEVICES_H */
@@ -0,0 +1,19 @@
/*
* Copyright (C) 2010-2011 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
/* S5L8955X SoC Mem Pin Configuration */
static const gpio_t memory_interface_gpios[] = {
/* Not needed */
};
#endif /* ! __PLATFORM_MEMCONFIG_H */
+117
View File
@@ -0,0 +1,117 @@
/*
* Copyright (C) 2010-2012 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
#include <platform/memmap_defaults.h>
/* S5L8955X specific memory map */
#define SDRAM_BASE (0x80000000ULL)
#define SDRAM_BANK_LEN (0x20000000ULL)
#define SDRAM_BANK_COUNT (2)
#define SDRAM_MAX_LEN (SDRAM_BANK_LEN * SDRAM_BANK_COUNT)
#define SDRAM_END (SDRAM_BASE + SDRAM_MAX_LEN)
#define VROM_BASE (0x3F000000ULL)
#define VROM_BANK_LEN (0x00100000ULL)
#define VROM_LEN (0x00010000ULL) /* XXX Doesn't match H5P spec. Find out why before changing to match Bali spec. */
#define SRAM_BASE (0x10000000ULL)
#define SRAM_BANK_LEN (0x00100000ULL)
#define SRAM_LEN (0x00080000ULL)
/* Sleep token is stored at first physical page in kernel memory */
#define SLEEP_TOKEN_BUFFER_BASE (SDRAM_BASE)
/* reserved area for panic info */
#define PANIC_SIZE (0x00004000ULL)
#define PANIC_BASE (SDRAM_END - PANIC_SIZE)
/* reserved area for iBoot */
#define IBOOT_SIZE (0x00100000 - PANIC_SIZE)
#define IBOOT_BASE (PANIC_BASE - IBOOT_SIZE)
#define PROTECTED_REGION_SIZE IBOOT_SIZE
/* reserved area for display */
#define DISPLAY_SIZE (0x03F00000ULL)
#define DISPLAY_BASE (IBOOT_BASE - DISPLAY_SIZE)
/* where to stick the mmu tt, default heap and insecure memory*/
#if APPLICATION_SECUREROM
#define MMU_TT_SIZE (0x4000ULL)
#define MMU_TT_BASE (SRAM_BASE + SRAM_LEN - MMU_TT_SIZE)
#define MMU_NONCACHE0_SIZE (SRAM_BANK_LEN)
#define MMU_NONCACHE0_PBASE (SRAM_BASE)
#define MMU_NONCACHE0_VBASE (SRAM_BASE + SRAM_BANK_LEN)
#define STACK_SIZE (0x3000ULL)
#define STACK_BASE (MMU_TT_BASE - STACK_SIZE)
#define HEAP_END (STACK_BASE)
#ifndef __ASSEMBLY__
#define INSECURE_MEMORY_BASE (SRAM_BASE)
#define INSECURE_MEMORY_SIZE ((uintptr_t)__segment_start(__DATA) - INSECURE_MEMORY_BASE)
#endif /* ! __ASSEMBLY__ */
#endif /* APPLICATION_SECUREROM */
#if APPLICATION_IBOOT
#define MMU_TT_SIZE (0x4000ULL)
#define MMU_TT_BASE (TEXT_BASE + TEXT_FOOTPRINT - MMU_TT_SIZE)
#define MMU_NONCACHE0_SIZE (SRAM_BANK_LEN)
#define MMU_NONCACHE0_PBASE (SRAM_BASE)
#define MMU_NONCACHE0_VBASE (SRAM_BASE + SRAM_BANK_LEN * 3)
#define MMU_NONCACHE1_SIZE (0x40000000ULL)
#define MMU_NONCACHE1_PBASE (0x80000000ULL)
#define MMU_NONCACHE1_VBASE (0xC0000000ULL)
#if WITH_DFU_MODE
#define STACK_SIZE (0x3000ULL)
#define INSECURE_MEMORY_SIZE (0x00200000ULL)
#define INSECURE_MEMORY_BASE (SDRAM_BASE + SDRAM_BANK_LEN - INSECURE_MEMORY_SIZE)
#define HEAP_EXT_SIZE (0x00100000ULL)
#define HEAP_EXT_BASE (INSECURE_MEMORY_BASE - HEAP_EXT_SIZE)
#else /* !WITH_DFU_MODE */
#define STACK_SIZE (0x1000ULL)
#define INSECURE_MEMORY_BASE (SDRAM_BASE)
#define INSECURE_MEMORY_SIZE (DEFAULT_KERNEL_ADDRESS - SDRAM_BASE)
#define SECURE_MEMORY_BASE (INSECURE_MEMORY_BASE + INSECURE_MEMORY_SIZE)
/* If only 1 bank is populated, this only clears to the alias of
* DISPLAY_BASE in the first bank. If 2 banks are populated, this
* clears all the was to DISPLAY_BASE in the second bank. */
#define SECURE_MEMORY_SIZE (DISPLAY_BASE - SECURE_MEMORY_BASE - SDRAM_MAX_LEN + ((uint32_t)platform_get_memory_size()))
#define HEAP_EXT_BASE (DEFAULT_FREE_ADDRESS)
#define HEAP_EXT_SIZE (DISPLAY_BASE - SDRAM_BANK_LEN - HEAP_EXT_BASE)
#endif /* !WITH_DFU_MODE */
#define STACK_BASE (MMU_TT_BASE - STACK_SIZE)
#define HEAP_END (STACK_BASE)
#endif /* APPLICATION_IBOOT */
#if APPLICATION_EMBEDDEDIOP
# if ARCH_ARMv7
# define MMU_TT_SIZE (0x4000ULL)
# endif
#endif /* !APPLICATION_EMBEDDEDIOP */
#define SCRATCH_BASE (0x33600000ULL)
#define SCRATCH_LEN (2048)
#endif /* ! __PLATFORM_MEMMAP_H */
@@ -0,0 +1,336 @@
/*
* Copyright (C) 2011 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_PINCONFIG_H
#define __PLATFORM_PINCONFIG_H
/* Default S5L8955X SoC Pin Configuration */
#define FMI_DRIVE_STR (DRIVE_X2 | SLOW_SLEW)
static const u_int32_t gpio_default_cfg[GPIO_GROUP_COUNT * GPIOPADPINS] = {
/*
* config idx pad connection
* ======== === ======== ================
*/
/* Port 0 */
CFG_IN, // 0: GPIO0 -> Menu Button (DFU)
CFG_IN, // 1: GPIO1 -> Hoid Button (DFU)
CFG_DISABLED, // 2: GPIO2 -> Vol+
CFG_DISABLED, // 3: GPIO3 -> Vol-
CFG_DISABLED, // 4: GPIO4 -> Ringer
CFG_DISABLED, // 5: GPIO5 -> WLAN wake
CFG_DISABLED, // 6: GPIO6 -> WLAN reset_L
CFG_DISABLED, // 7: GPIO7 -> BT wake
/* Port 1 */
CFG_DISABLED, // 8: GPIO10 -> BB reset
CFG_DISABLED, // 9: GPIO11 -> BB reset detect
CFG_DISABLED, // 10: GPIO12 -> Baseband IPC SRDY
CFG_DISABLED, // 11: GPIO13 -> Codec IRQ
CFG_DISABLED, // 12: GPIO14 -> Codec reset
CFG_DISABLED, // 13: GPIO15 -> Diff mic sel_L
CFG_DISABLED, // 14: (reserved)
CFG_DISABLED, // 15: (reserved)
/* Port 2 */
CFG_DISABLED, // 16: (reserved)
CFG_DISABLED, // 17: (reserved)
CFG_DISABLED, // 18: (reserved)
CFG_DISABLED, // 19: (reserved)
CFG_DISABLED, // 20: (reserved)
CFG_DISABLED, // 21: (reserved)
CFG_DISABLED, // 22: (reserved)
CFG_DISABLED, // 23: (reserved)
/* Port 3 */
CFG_DISABLED, // 24: (reserved)
CFG_DISABLED, // 25: (reserved)
CFG_DISABLED, // 26: (reserved)
CFG_DISABLED, // 27: (reserved)
CFG_DISABLED, // 28: (reserved)
CFG_DISABLED, // 29: (reserved)
CFG_DISABLED, // 30: (reserved)
CFG_DISABLED, // 31: (reserved)
/* Port 4 */
CFG_DISABLED, // 32: GPIO8 -> BT reset_L
CFG_DISABLED, // 33: GPIO9 -> RADIO_ON
CFG_DISABLED, // 34: EHCI_PORT_PWR0 ->
CFG_DISABLED, // 35: EHCI_PORT_PWR1 ->
CFG_DISABLED, // 36: EHCI_PORT_PWR2 ->
CFG_DISABLED, // 37: EHCI_PORT_PWR3 ->
CFG_DISABLED, // 38: GPIO16 -> Board ID 3
CFG_DISABLED, // 39: GPIO17 -> MICEY_PRESENT
/* Port 5 */
CFG_DISABLED, // 40: GPIO18 -> PMU IRQ_L/Boot Config Bit 0
CFG_DISABLED, // 41: GPIO19 -> PMU Keepact
CFG_DISABLED, // 42: UART1_TXD -> BB_USART0 TXD
CFG_DISABLED, // 43: UART1_RXD -> BB_USART0 RXD
CFG_DISABLED, // 44: UART1_RTSN -> BB_USART0 RTSN
CFG_DISABLED, // 45: UART1_CTSN -> BB_USART0 CTSN
CFG_DISABLED | FMI_DRIVE_STR, // 46: FMI0_CEN3 -> NAND Ch. 0
CFG_DISABLED | FMI_DRIVE_STR, // 47: FMI0_CEN2 -> "
/* Port 6 */
CFG_DISABLED | FMI_DRIVE_STR, // 48: FMI0_CEN1 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 49: FMI0_CEN0 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 50: FMI0_CLE -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 51: FMI0_ALE -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 52: FMI0_REN -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 53: FMI0_WEN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 54: FMI0_WENN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 55: FMI0_IO7 -> "
/* Port 7 */
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 56: FMI0_IO6 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 57: FMI0_IO5 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 58: FMI0_IO4 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 59: FMI0_DQS -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 60: FMI0_DQSN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 61: FMI0_IO3 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 62: FMI0_IO2 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 63: FMI0_IO1 -> "
/* Port 8 */
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 64: FMI0_IO0 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 65: FMI0_CEN7 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 66: FMI0_CEN6 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 67: FMI0_CEN5 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 68: FMI0_CEN4 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 69: FMI1_CEN3 -> NAND Ch. 1
CFG_DISABLED | FMI_DRIVE_STR, // 70: FMI1_CEN2 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 71: FMI1_CEN1 -> "
/* Port 9 */
CFG_DISABLED | FMI_DRIVE_STR, // 72: FMI1_CEN0 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 73: FMI1_CLE -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 74: FMI1_ALE -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 75: FMI1_REN -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 76: FMI1_WEN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 77: FMI1_WENN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 78: FMI1_IO7 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 79: FMI1_IO6 -> "
/* Port 10 */
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 80: FMI1_IO5 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 81: FMI1_IO4 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 82: FMI1_DQS -> "
CFG_DISABLED | PULL_UP | FMI_DRIVE_STR, // 83: FMI1_DQSN -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 84: FMI1_IO3 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 85: FMI1_IO2 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 86: FMI1_IO1 -> "
CFG_DISABLED | PULL_DOWN | FMI_DRIVE_STR, // 87: FMI1_IO0 -> "
/* Port 11 */
CFG_DISABLED | FMI_DRIVE_STR, // 88: FMI1_CEN7 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 89: FMI1_CEN6 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 90: FMI1_CEN5 -> "
CFG_DISABLED | FMI_DRIVE_STR, // 91: FMI1_CEN4 -> "
CFG_DISABLED, // 92: UART2_TXD -> UMTS debug TXD
CFG_DISABLED, // 93: UART2_RXD -> UMTS debug RXD
CFG_DISABLED, // 94: UART2_RTSN -> UMTS debug RTSN
CFG_DISABLED, // 95: UART2_CTSN -> UMTS debug CTSN
/* Port 12 */
CFG_DISABLED, // 96: UART3_TXD -> Bluetooth TXD
CFG_DISABLED, // 97: UART3_RXD -> Bluetooth RXD
CFG_DISABLED, // 98: UART3_RTSN -> Bluetooth RTSN
CFG_DISABLED, // 99: UART3_CTSN -> Bluetooth CTSN
CFG_DISABLED, // 100: UART4_TXD -> GPS? TXD
CFG_DISABLED, // 101: UART4_RXD -> GPS? RXD
CFG_DISABLED, // 102: UART4_RTSN -> GPS? RTSN
CFG_DISABLED, // 103: UART4_CTSN -> GPS? CTSN
/* Port 13 */
CFG_DISABLED, // 104: UART6_TXD -> Spare
CFG_DISABLED, // 105: UART6_RXD -> Spare
CFG_DISABLED, // 106: UART6_RTSN -> Spare
CFG_DISABLED, // 107: UART6_CTSN -> Spare
CFG_DISABLED, // 108: SPI1_SCLK -> Touch Panel (Grape) CLK
CFG_DISABLED, // 109: SPI1_MOSI -> Touch Panel (Grape) MOSI
CFG_DISABLED, // 110: SPI1_MISO -> Touch Panel (Grape) MISO
CFG_DISABLED, // 111: SPI1_SSIN -> Touch Panel (Grape) SSIN
/* Port 14 */
CFG_DISABLED, // 112: SPI0_SCLK -> Serial ROM CLK/Board ID Bit 0
CFG_DISABLED, // 113: SPI0_MOSI -> Serial ROM MOSI/Board ID Bit 1
CFG_DISABLED, // 114: SPI0_MISO -> Serial ROM MISO/Board ID Bit 2
CFG_DISABLED | PULL_UP, // 115: SPI0_SSIN -> Serial ROM SSIN
CFG_DISABLED, // 116: SPI2_SCLK -> Baseband IPC CLK
CFG_DISABLED, // 117: SPI2_MOSI -> Baseband IPC MOSI
CFG_DISABLED, // 118: SPI2_MISO -> Baseband IPC MISO
CFG_DISABLED, // 119: SPI2_SSIN -> Baseband IPC SSIN
/* Port 15 */
CFG_DISABLED, // 120: I2C0_SDA -> PMU, Codec, etc SDA
CFG_DISABLED, // 121: I2C0_SCL -> PMU, Codec, etc SCL
CFG_DISABLED, // 122: I2C1_SDA -> ALS, etc SDA
CFG_DISABLED, // 123: I2C1_SCL -> ALS, etc SCL
CFG_DISABLED, // 124: ISP0_SDA ->
CFG_DISABLED, // 125: ISP0_SCL ->
CFG_DISABLED, // 126: ISP1_SDA ->
CFG_DISABLED, // 127: ISP1_SCL ->
/* Port 16 */
CFG_DISABLED, // 128: MIPI_VSYNC ->
CFG_DISABLED, // 129: TMR32_PWM0 -> Highland park 6MHz clock
CFG_DISABLED, // 130: TMR32_PWM1 -> Vibrator
CFG_DISABLED, // 131: TMR32_PWM2 ->
CFG_DISABLED, // 132: SWI_DATA -> Backlight control
CFG_DISABLED, // 133: DWI_DI -> Backlight control
CFG_DISABLED, // 134: DWI_DO -> Backlight control
CFG_DISABLED, // 135: DWI_CLK -> Backlight control
/* Port 17 */
CFG_DISABLED, // 136: SENSOR0_RST -> Sensor reset
CFG_DISABLED, // 137: SENSOR0_CLK -> Sensor clk
CFG_DISABLED, // 138: SENSOR1_RST -> Sensor reset
CFG_DISABLED, // 139: SENSOR1_CLK -> Sensor clk
CFG_DISABLED, // 140: (reserved)
CFG_DISABLED, // 141: (reserved)
CFG_DISABLED, // 142: (reserved)
CFG_DISABLED, // 143: (reserved)
/* Port 18 */
CFG_DISABLED, // 144: (reserved)
CFG_DISABLED, // 145: (reserved)
CFG_DISABLED, // 146: (reserved)
CFG_DISABLED, // 147: (reserved)
CFG_DISABLED, // 148: (reserved)
CFG_DISABLED, // 149: (reserved)
CFG_DISABLED, // 150: (reserved)
CFG_DISABLED, // 151: (reserved)
/* Port 19 */
CFG_DISABLED, // 152: (reserved)
CFG_DISABLED, // 153: (reserved)
CFG_DISABLED, // 154: (reserved)
CFG_DISABLED, // 155: (reserved)
CFG_DISABLED, // 156: (reserved)
CFG_DISABLED, // 157: (reserved)
CFG_DISABLED, // 158: (reserved)
CFG_DISABLED, // 159: (reserved)
/* Port 20 */
CFG_DISABLED, // 160: CPU0_SWITCH -> Sensor clk (XXX Suspected to be incorrect. Follow up.)
CFG_DISABLED, // 161: CPU1_SWITCH -> Sensor clk
CFG_DISABLED, // 162: ISP0_PRE_FLASH -> "
CFG_DISABLED, // 163: ISP0_FLASH -> "
CFG_DISABLED, // 164: ISP1_PRE_FLASH -> "
CFG_DISABLED, // 165: ISP1_FLASH -> "
CFG_DISABLED, // 166: I2S0_MCK -> Audio Codec
CFG_DISABLED, // 167: I2S0_LRCK -> "
/* Port 21 */
CFG_DISABLED, // 168: I2S0_BCLK -> "
CFG_DISABLED, // 169: I2S0_DOUT -> "
CFG_DISABLED, // 170: I2S0_DIN -> "
CFG_DISABLED, // 171: I2S1_MCK -> Bluetooth
CFG_DISABLED, // 172: I2S1_LRCK -> "
CFG_DISABLED, // 173: I2S1_BCLK -> "
CFG_DISABLED, // 174: I2S1_DOUT -> "
CFG_DISABLED, // 175: I2S1_DIN -> "
/* Port 22 */
CFG_DISABLED, // 176: I2S2_MCK -> BB audio
CFG_DISABLED, // 177: I2S2_LRCK -> "
CFG_DISABLED, // 178: I2S2_BCLK -> "
CFG_DISABLED, // 179: I2S2_DOUT -> "
CFG_DISABLED, // 180: I2S2_DIN -> "
CFG_DISABLED, // 181: I2S3_MCK ->
CFG_DISABLED, // 182: I2S3_LRCK ->
CFG_DISABLED, // 183: I2S3_BCLK ->
/* Port 23 */
CFG_DISABLED, // 184: I2S3_DOUT ->
CFG_DISABLED, // 185: I2S3_DIN ->
CFG_DISABLED, // 186: I2S4_MCK -> BB audio
CFG_DISABLED, // 187: I2S4_LRCK -> "
CFG_DISABLED, // 188: I2S4_BCLK -> "
CFG_DISABLED, // 189: I2S4_DOUT -> "
CFG_DISABLED, // 190: I2S4_DIN -> "
CFG_DISABLED, // 191: SPDIF -> HDMI Transmitter
/* Port 24 */
CFG_DISABLED, // 192: GPIO20 -> Grape reset_L
CFG_DISABLED, // 193: GPIO21 -> Grape IRQ_L
CFG_DISABLED, // 194: GPIO22 -> LCD reset_L
CFG_DISABLED, // 195: GPIO23 -> LCD checksum
CFG_DISABLED, // 196: GPIO24 -> Compass reset_L
CFG_DISABLED, // 197: GPIO25 -> Compass IRQ_L/Boot Config Bit 1
CFG_IN | PULL_DOWN, // 198: GPIO26 -> DFU force
CFG_DISABLED | PULL_DOWN, // 199: GPIO27 -> DFU status
/* Port 25 */
CFG_DISABLED, // 200: GPIO28 -> Accelerometer IRQ_L/Boot Config Bit 2
CFG_DISABLED, // 201: GPIO29 -> ALS IRQ_L/Boot Config Bit 3
CFG_DISABLED, // 202: GPIO30 -> GPS reset_ap_L
CFG_DISABLED, // 203: GPIO31 -> GPS standby_ap_L
CFG_DISABLED, // 204: GPIO32 -> GPS_intr_L
CFG_DISABLED, // 205: GPIO33 -> GSM_txburst_int
CFG_DISABLED, // 206: GPIO34 -> FM mux select
CFG_DISABLED, // 207: GPIO35 -> Board reliability test NE
/* Port 26 */
CFG_DISABLED, // 208: GPIO36 -> Board reliability test SE
CFG_DISABLED, // 209: GPIO37 -> Board reliability test SW
CFG_DISABLED, // 210: GPIO38 -> Board reliability test NW
CFG_DISABLED, // 211: GPIO39 ->
CFG_DISABLED, // 212: (reserved)
CFG_DISABLED, // 213: (reserved)
CFG_DISABLED, // 214: (reserved)
CFG_DISABLED, // 215: (reserved)
/* Port 27 */
CFG_DISABLED, // 216: (reserved)
CFG_DISABLED, // 217: (reserved)
CFG_DISABLED, // 218: (reserved)
CFG_DISABLED, // 219: (reserved)
CFG_DISABLED, // 220: (reserved)
CFG_DISABLED, // 221: (reserved)
CFG_DISABLED, // 222: (reserved)
CFG_DISABLED, // 223: (reserved)
/* Port 28 */
CFG_DISABLED, // 224: SPI3_MOSI -> MOSI
CFG_DISABLED, // 225: SPI3_MISO -> MISO
CFG_DISABLED, // 226: SPI3_SCLK -> CLK
CFG_DISABLED, // 227: SPI3_SSIN -> SSIN
CFG_DISABLED, // 228: I2C2_SDA -> ALS/prox
CFG_DISABLED, // 229: I2C2_SCL -> "
CFG_DISABLED, // 230: GPIO_3V0 -> Video amp enable
CFG_DISABLED, // 231: GPIO_3V1 -> SEL_SECURE_BOOT
/* Port 29 */
CFG_DISABLED, // 232: DP_HPD -> Hot Plug Detect
CFG_DISABLED, // 233: EDP_HPD -> Hot Plug Detect
CFG_DISABLED, // 234: UART0_TXD -> Dock, UART TXD
CFG_DISABLED, // 235: UART0_RXD -> Dock, UART RXD
CFG_DISABLED, // 236: UART5_RXD -> Battery gas gauge RXD
CFG_DISABLED, // 237: UART5_TXD -> Battery gas gauge TXD
CFG_DISABLED, // 238: TST_CLKOUT ->
CFG_DISABLED, // 239: TST_STPCLK ->
/* Port 30 */
CFG_DISABLED, // 240: WDOG ->
CFG_DISABLED, // 241: (reserved)
CFG_DISABLED, // 242: (reserved)
CFG_DISABLED, // 243: (reserved)
CFG_DISABLED, // 244: (reserved)
CFG_DISABLED, // 245: (reserved)
CFG_DISABLED, // 246: (reserved)
CFG_DISABLED, // 247: (reserved)
};
#endif /* ! __PLATFORM_PINCONFIG_H */
@@ -0,0 +1,52 @@
/*
* Copyright (C) 2010-2012 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/hwregbase.h>
#define rCFG_FUSE0 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x00))
#define rCFG_FUSE1 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x04))
#define rCFG_FUSE2 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x08))
#define rCFG_FUSE3 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x0C))
#define rCFG_FUSE4 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x10))
#define rCFG_FUSE5 (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x14))
#define rECIDLO (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x20))
#define rECIDHI (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x24))
#define rDVFM_FUSE(n) (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x40 + (n) * 4))
#define rSCC_FUSE(n) (*(volatile u_int32_t *)(CHIPID_BASE_ADDR + 0x80 + (n) * 4))
extern bool chipid_get_ecid_image_personalization_required(void);
#define CHIPID_SOC_VOLTAGE_COUNT (3)
#define CHIPID_SOC_VOLTAGE_LOW (0)
#define CHIPID_SOC_VOLTAGE_MED (1)
#define CHIPID_SOC_VOLTAGE_HIGH (2)
extern u_int32_t chipid_get_soc_voltage(u_int32_t index);
#define CHIPID_CPU_VOLTAGE_COUNT (8)
extern u_int32_t chipid_get_cpu_voltage(u_int32_t index);
#define CHIPID_RAM_VOLTAGE_COUNT (2)
#define CHIPID_RAM_VOLTAGE_LOW (0)
#define CHIPID_RAM_VOLTAGE_HIGH (1)
extern u_int32_t chipid_get_ram_voltage(u_int32_t index);
extern int32_t chipid_get_cpu_temp_offset(u_int32_t cpu_number);
extern u_int32_t chipid_get_fused_thermal_sensor_70C(u_int32_t sensorID);
extern u_int32_t chipid_get_fused_thermal_sensor_25C(u_int32_t sensorID);
extern u_int32_t chipid_get_fuse_revision(void);
#endif /* __PLATFORM_SOC_CHIPID_H */
@@ -0,0 +1,45 @@
/*
* 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 __APPLE_DISPLAY_H
#define __APPLE_DISPLAY_H
// Platform-specific displaypipe tunables
static struct adfe_v1_tuneable adfe_tuneables[] =
{
{
.name = "default",
.disp_dpcclkcntl[0] = 0,
.disp_dpbclklvl_clock_off_level[0] = DPBCLKLVL_OFFLVL(0x09F0),
.disp_dpbclklvl_clock_on_level[0] = DPBCLKLVL_ONLVL(0x0780),
.disp_dpusrcstrd[0] = DPUSRCSTRD_SRCBURST_8BLOCKS,
.disp_dpcqoscnfg[0] = (DPCQOSCNFG_QOS_TIMER(0x0040) | \
DPCQOSCNFG_UIFIFO_ENABLE | \
DPCQOSCNFG_VIDFIFO_ENABLE | \
DPCQOSCNFG_QOS_ENABLE),
.disp_dpbqoslvl_med_watermark[0] = DPBQOSLVL_MED_WATERMARK(0x0500),
.disp_dpbqoslvl_high_watermark[0] = DPBQOSLVL_HIGH_WATERMARK(0x0280),
.disp_dpureqcfg[0] = 0,
.disp_dpcclkcntl[1] = 0,
.disp_dpbclklvl_clock_off_level[1] = DPBCLKLVL_OFFLVL(0x09F0),
.disp_dpbclklvl_clock_on_level[1] = DPBCLKLVL_ONLVL(0x0780),
.disp_dpusrcstrd[1] = DPUSRCSTRD_SRCBURST_4BLOCKS,
.disp_dpcqoscnfg[1] = (DPCQOSCNFG_QOS_TIMER(0x2000) | \
DPCQOSCNFG_UIFIFO_ENABLE | \
DPCQOSCNFG_VIDFIFO_ENABLE | \
DPCQOSCNFG_QOS_ENABLE),
.disp_dpbqoslvl_med_watermark[1] = DPBQOSLVL_MED_WATERMARK(0x0500),
.disp_dpbqoslvl_high_watermark[1] = DPBQOSLVL_HIGH_WATERMARK(0x0280),
.disp_dpureqcfg[1] = 0,
},
};
#endif /* ! __APPLE_DISPLAY_H */
@@ -0,0 +1,41 @@
/*
* 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_P101 || SUB_TARGET_P102 || SUB_TARGET_P103
{
.display_name = "ipad3",
.host_clock_id = CLK_VCLK0,
.pixel_clock = 205200000,
.dot_pitch = 264,
.h_active = 2048,
.h_pulse_width = 32,
.h_back_porch = 80,
.h_front_porch = 48,
.v_active = 1536,
.v_pulse_width = 4,
.v_back_porch = 6,
.v_front_porch = 3,
.neg_vclk = 0,
.neg_hsync = 0,
.neg_vsync = 0,
.neg_vden = 0,
.display_depth = 24,
.display_type = DISPLAY_TYPE_EDP,
.display_config = NULL,
},
#endif
};
#endif /* ! __APPLE_DISPLAY_TIMINGS_H */
@@ -0,0 +1,129 @@
/*
* Copyright (C) 2010-2011 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
// XXX Will almost certainly need changes from H5P to Bali.
#include <platform/clocks.h>
#if SUPPORT_FPGA
#define OSC_FREQ ( 7000000UL)
#else
#define OSC_FREQ (24000000UL)
#endif
#define CLK_FCLK (HWCLOCK_BASE+0)
#define CLK_ACLK (HWCLOCK_BASE+1)
#define CLK_HCLK (HWCLOCK_BASE+2)
#define CLK_PCLK (HWCLOCK_BASE+3)
#define CLK_VCLK0 (HWCLOCK_BASE+4)
#define CLK_VCLK1 (HWCLOCK_BASE+5)
#define CLK_MCLK (HWCLOCK_BASE+6)
#define CLK_NCLK (HWCLOCK_BASE+7)
#define CLK_USBPHYCLK (HWCLOCK_BASE+8)
#define CLK_NCOREF (HWCLOCK_BASE+9)
#define CLK_FMI (HWCLOCK_BASE+10)
/* S5L8955X clock gate devices */
enum {
CLK_rsvd0 = 0,
CLK_SCC,
CLK_CPU0,
CLK_CPU1,
CLK_L2_BIU,
CLK_L2,
CLK_rsvd1,
CLK_rsvd2,
CLK_MCU,
CLK_GFX_SYS,
CLK_GFX_CORES,
CLK_HPERFNRT,
CLK_VDEC,
CLK_SCALER0,
CLK_SCALER1,
CLK_JPG0,
CLK_JPG1,
CLK_rsvd3,
CLK_VENC,
CLK_HPERFRT,
CLK_ISP,
CLK_EDPLINK,
CLK_DISP0,
CLK_DISP1,
CLK_DISPOUT,
CLK_rsvd4,
CLK_CLCD,
CLK_TVDAC,
CLK_RGBOUT,
CLK_DPLINK,
CLK_CDIO,
CLK_CDMA,
CLK_IOP,
CLK_UPERF,
CLK_USBOTG0,
CLK_USB2HOST0,
CLK_USB11HOST,
CLK_USB2HOST0_OHCI,
CLK_USB11HOST_OHCI,
CLK_USBPHY,
CLK_AUDIO,
CLK_I2S0,
CLK_I2S1,
CLK_I2S2,
CLK_I2S3,
CLK_SPDIF,
CLK_rsvd5,
CLK_SDIO,
CLK_SHA1,
CLK_SHA2,
CLK_FMI0,
CLK_FMI0BCH,
CLK_FMI1,
CLK_FMI1BCH,
CLK_FMI_DLL,
CLK_rsvd6,
CLK_MCA,
CLK_SPI0,
CLK_SPI1,
CLK_SPI2,
CLK_SPI3,
CLK_SPI4,
CLK_UART0,
CLK_UART1,
CLK_UART2,
CLK_UART3,
CLK_UART4,
CLK_UART5,
CLK_UART6,
CLK_PKE,
CLK_I2C0,
CLK_I2C1,
CLK_I2C2,
CLK_PWM,
CLK_SCRT,
CLK_GPIO,
CLK_SWI,
CLK_DWI,
CLK_DEBUG,
CLK_AIC,
CLK_USB2HOST1,
CLK_USB2HOST1_OHCI,
};
// XXX hack for driver expecting prior names until we decide appropriate way to address the renaming
#define CLK_USBOTG CLK_USBOTG0
#define CLK_USB20 CLK_USB2HOST0
#define CLK_USB11 CLK_USB11HOST
#define CLK_USBOHCI0 CLK_USB2HOST0_OHCI
#define CLK_USBOHCI1 CLK_USB11HOST_OHCI
#endif /* ! __PLATFORM_SOC_HWCLOCKS_H */
@@ -0,0 +1,40 @@
/*
* Copyright (C) 2010-2011 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_HWDMACHANNELS_H
#define __PLATFORM_SOC_HWDMACHANNELS_H
#define DMA_MEMORY_TX (1)
#define DMA_MEMORY_RX (2)
#define DMA_SDIO (3)
#define DMA_FMI0DATA (5)
#define DMA_FMI0CHECK (6)
#define DMA_FMI1DATA (7)
#define DMA_FMI1CHECK (8)
#define DMA_CHANNEL_COUNT (44)
#define DMA_CHANNEL_CONFIG \
{ \
/* low high AES OK reqID FIFO address */ \
{ 3, 4, false, 0x00, 0x30000020 }, \
{ 3, 4, false, 0x01, 0x301000A0 }, \
{ 3, 4, false, 0x01, 0x30200020 }, \
{ 5, 8, true, 0x00, 0x31200014 }, \
{ 5, 8, true, 0x01, 0x31200018 }, \
{ 5, 8, true, 0x02, 0x31300014 }, \
{ 5, 8, true, 0x03, 0x31300018 }, \
}
#define DMA_SDIO_TIMEOUT_US (10 * 1000)
#endif /* ! __PLATFORM_SOC_HWDMACHANNELS_H */
@@ -0,0 +1,235 @@
/*
* Copyright (C) 2011 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
// XXX Apply changes from H5P to Bali.
#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_SWI 5 // SWI Interrupt
#define INT_DWI 6 // DWI Interrupt
#define INT_ISP0 7 // ISP 0 Interrupt
#define INT_ISP1 8 // ISP 1 Interrupt
#define INT_SCALER0 9 // Scaler Interrupt
#define INT_SCALER1 10 // Scaler Interrupt
#define INT_USB_DEV 11 // USB OTG Interrupt
#define INT_USB2HOST0_EHCI 12 // USB2HOST0 EHCI Interrupt
#define INT_USB2HOST0_OHCI0 13 // USB2HOST0 OHCI 0 Interrupt
#define INT_USB2HOST0_OHCI1 14 // USB2HOST0 OHCI 1 Interrupt
#define INT_USB_RES 15 // USB PHY Interrupt
#define INT_PWM 16 // PWM Interrupt
#define INT_PKE 17 // PKE Interrupt
#define INT_IIC0 18 // I2C 0 Interrupt
#define INT_IIC1 19 // I2C 1 Interrupt
#define INT_IIC2 20 // I2C 2 Interrupt
#define INT_UART0 21 // UART 0 Interrupt
#define INT_UART1 22 // UART 1 Interrupt
#define INT_UART2 23 // UART 2 Interrupt
#define INT_UART3 24 // UART 3 Interrupt
#define INT_UART4 25 // UART 4 Interrupt
#define INT_UART5 26 // UART 5 Interrupt
#define INT_UART6 27 // UART 6 Interrupt
#define INT_SPI0 28 // SPI 0 Interrupt
#define INT_SPI1 29 // SPI 1 Interrupt
#define INT_SPI2 30 // SPI 2 Interrupt
#define INT_SPI3 31 // SPI 3 Interrupt
#define INT_SPI4 32 // SPI 4 Interrupt
#define INT_FMI0 33 // FMI 0 Interrupt
#define INT_FMI1 34 // FMI 1 Interrupt
#define INT_USB2HOST1_EHCI 35 // USB2HOST1 EHCI Interrupt
#define INT_DPB 36 // DPB Interrupt
#define INT_SHA1 37 // SHA-1 Interrupt
#define INT_SHA2 38 // SHA-1 Interrupt
#define INT_WIFI 39 // WiFi Interrupt
#define INT_TVOUT 40 // TV Out Interrupt
// Reserved 41
#define INT_CLCD 42 // CLCD Interrupt
#define INT_DISP0 43 // Display Pipe 0 Interrupt
#define INT_DISP1 44 // Display Pipe 1 Interrupt
#define INT_RGBOUT 45 // RGB Out Interrupt
#define INT_DPORT0 46 // DisplayPort 0 Interrupt
#define INT_DPORT1 47 // DisplayPort 1 Interrupt
#define INT_VENC 48 // Video Encoder Interrupt
#define INT_SGX 49 // SGX Interrupt
#define INT_VDEC 50 // Video Decoder Interrupt
#define INT_CDMA_DMAC1 51 // CDMA DMA Channel 1 Interrupt
#define INT_CDMA_DMAC2 52 // CDMA DMA Channel 2 Interrupt
#define INT_CDMA_DMAC3 53 // CDMA DMA Channel 3 Interrupt
#define INT_CDMA_DMAC4 54 // CDMA DMA Channel 4 Interrupt
#define INT_CDMA_DMAC5 55 // CDMA DMA Channel 5 Interrupt
#define INT_CDMA_DMAC6 56 // CDMA DMA Channel 6 Interrupt
#define INT_CDMA_DMAC7 57 // CDMA DMA Channel 7 Interrupt
#define INT_CDMA_DMAC8 58 // CDMA DMA Channel 8 Interrupt
#define INT_CDMA_DMAC9 59 // CDMA DMA Channel 9 Interrupt
#define INT_CDMA_DMAC10 60 // CDMA DMA Channel 10 Interrupt
#define INT_CDMA_DMAC11 61 // CDMA DMA Channel 11 Interrupt
#define INT_CDMA_DMAC12 62 // CDMA DMA Channel 12 Interrupt
#define INT_CDMA_DMAC13 63 // CDMA DMA Channel 13 Interrupt
#define INT_CDMA_DMAC14 64 // CDMA DMA Channel 14 Interrupt
#define INT_CDMA_DMAC15 65 // CDMA DMA Channel 15 Interrupt
#define INT_CDMA_DMAC16 66 // CDMA DMA Channel 16 Interrupt
#define INT_CDMA_DMAC17 67 // CDMA DMA Channel 17 Interrupt
#define INT_CDMA_DMAC18 68 // CDMA DMA Channel 18 Interrupt
#define INT_CDMA_DMAC19 69 // CDMA DMA Channel 19 Interrupt
#define INT_CDMA_DMAC20 70 // CDMA DMA Channel 20 Interrupt
#define INT_CDMA_DMAC21 71 // CDMA DMA Channel 21 Interrupt
#define INT_CDMA_DMAC22 72 // CDMA DMA Channel 22 Interrupt
#define INT_CDMA_DMAC23 73 // CDMA DMA Channel 23 Interrupt
#define INT_CDMA_DMAC24 74 // CDMA DMA Channel 24 Interrupt
#define INT_CDMA_DMAC25 75 // CDMA DMA Channel 25 Interrupt
#define INT_CDMA_DMAC26 76 // CDMA DMA Channel 26 Interrupt
#define INT_CDMA_DMAC27 77 // CDMA DMA Channel 27 Interrupt
#define INT_CDMA_DMAC28 78 // CDMA DMA Channel 28 Interrupt
#define INT_CDMA_DMAC29 79 // CDMA DMA Channel 29 Interrupt
#define INT_CDMA_DMAC30 80 // CDMA DMA Channel 30 Interrupt
#define INT_CDMA_DMAC31 81 // CDMA DMA Channel 31 Interrupt
#define INT_CDMA_DMAC32 82 // CDMA DMA Channel 32 Interrupt
#define INT_CDMA_DMAC33 83 // CDMA DMA Channel 33 Interrupt
#define INT_CDMA_DMAC34 84 // CDMA DMA Channel 34 Interrupt
#define INT_CDMA_DMAC35 85 // CDMA DMA Channel 35 Interrupt
#define INT_CDMA_DMAC36 86 // CDMA DMA Channel 36 Interrupt
#define INT_CDMA_DMAC37 87 // CDMA DMA Channel 37 Interrupt
#define INT_CDMA_DMAC38 88 // CDMA DMA Channel 38 Interrupt
#define INT_CDMA_DMAC39 89 // CDMA DMA Channel 39 Interrupt
#define INT_CDMA_DMAC40 90 // CDMA DMA Channel 40 Interrupt
#define INT_CDMA_DMAC41 91 // CDMA DMA Channel 41 Interrupt
#define INT_CDMA_DMAC42 92 // CDMA DMA Channel 42 Interrupt
#define INT_CDMA_DMAC43 93 // CDMA DMA Channel 43 Interrupt
// Reserved 94
#define INT_FAILSAFE_EXIT_0 95 // THERMAL FAILSAFE EXIT 0 Interrupt
#define INT_FAILSAFE_EXIT_1 96 // THERMAL FAILSAFE EXIT 1 Interrupt
// Audio Interrupts 97 - 111
#define INT_AUDIO_CPU_IRQ0 97 // AUDIO CPU 0 Interrupt
#define INT_AUDIO_CPU_IRQ1 98 // AUDIO CPU 1 Interrupt
#define INT_AUDIO_I2S0 99 // AUDIO I2S0 Interrupt
#define INT_AUDIO_I2S1 100 // AUDIO I2S1 Interrupt
#define INT_AUDIO_I2S2 101 // AUDIO I2S2 Interrupt
#define INT_AUDIO_I2S3 102 // AUDIO I2S3 Interrupt
#define INT_AUDIO_SPDIF 103 // AUDIO SPDIF Interrupt
#define INT_AUDIO_DP0 104 // AUDIO DisplayPort 0 Interrupt
#define INT_AUDIO_DP1 105 // AUDIO DisplayPort 1 Interrupt
#define INT_AUDIO_DMAC_ERR 106 // AUDIO DMAC ERR Interrupt
#define INT_AUDIO_DMA_TC 107 // AUDIO DMA TC Interrupt
#define INT_AUDIO_PERFMON 108 // AUDIO PERFMON Interrupt
#define INT_AUDIO_DBGCOMMRX 109 // AUDIO DBGCOMMRX Interrupt
#define INT_AUDIO_DBGCOMMTX 110 // AUDIO DBGCOMMTX Interrupt
#define INT_AUDIO_CTI 111 // AUDIO CTI Interrupt
#define INT_SOC_FAILSAFE_0 112 // THERMAL SOC FAILSAFE 0 Interrupt
#define INT_SOC_FAILSAFE_1 113 // THERMAL SOC FAILSAFE 1 Interrupt
#define INT_FAILSAFE_0 114 // THERMAL FAILSAFE 0 Interrupt
#define INT_FAILSAFE_1 115 // THERMAL FAILSAFE 1 Interrupt
#define INT_HPERFNRT_DART 116 // HPerf-NRT DART Interrupt
#define INT_HPERFRT_DART 117 // HPerf-RT DART Interrupt
#define INT_JPEG0 118 // JPEG 0 Interrupt
#define INT_GPIO0 119 // GPIO 0 Interrupt
#define INT_GPIO1 120 // GPIO 1 Interrupt
#define INT_MCU 121 // MCU Interrupt
#define INT_MCU0 122 // MCU Phy 0 Interrupt
#define INT_MCU1 123 // MCU Phy 1 Interrupt
#define INT_PIO0 124 // PIO 0 Interrupt
#define INT_PIO1 125 // PIO 1 Interrupt
#define INT_JPEG1 126 // JPEG 1 Interrupt
#define INT_IOP_COMMRX 127 // IOP CommRx Interrupt
#define INT_IOP_COMMTX 128 // IOP CommTx Interrupt
#define INT_IOP_PMI 129 // IOP PerfMon Interrupt
#define INT_IOP_CTIIRQ 130 // IOP CTIIRQ Interrupt
#define INT_ISP_COMMRX 131 // IOP CommRx Interrupt
#define INT_ISP_COMMTX 132 // IOP CommTx Interrupt
#define INT_ISP_PMI 133 // IOP PerfMon Interrupt
#define INT_ISP_CTIIRQ 134 // IOP CTIIRQ Interrupt
// Reserved 135 - 136
#define INT_CPU0_COMMRX 137 // IOP CommRx Interrupt
#define INT_CPU0_COMMTX 138 // IOP CommTx Interrupt
// Reserved 139 - 140
#define INT_CPU1_COMMRX 141 // IOP CommRx Interrupt
#define INT_CPU1_COMMTX 142 // IOP CommTx Interrupt
// Reserved 143
#define INT_EDP0 144 // Embedded Display Port 0 Interrupt
#define INT_EDP1 145 // Embedded Display Port 1 Interrupt
// Reserved 146 - 149
#define INT_MCU2 150 // MCU Phy 2 Interrupt
#define INT_MCU3 151 // MCU Phy 3 Interrupt
#define INT_PMGR_PMI 152 // PMGR PerfMon Interrupt
#define INT_HPERFNTR_PMI 153 // HPerf-NRT PerfMon Interrupt
#define INT_HPERFRT_PMI 154 // HPerf-RT PerfMon Interrupt
#define INT_DPIPE0_PMI 155 // Display Pipe 0 PerfMon Interrupt
#define INT_DPIPE1_PMI 156 // Display Pipe 1 PerfMon Interrupt
// Reserved 157 - 159
#define INT_ETB_FULL 160 // ETB Full Interrupt
// Reserved 161
#define INT_CPU0_VTIMER 162 // CPU 0 Virtual Timer Interrupt
#define INT_CPU0_DEBUG 163 // CPU 0 Debug Interrupt
// Reserved 164
#define INT_CPU1_VTIMER 165 // CPU 1 Virtual Timer Interrupt
#define INT_CPU1_DEBUG 166 // CPU 1 Debug Interrupt
// Reserved 167
#define INT_MCA 168 // Multi-Channel Audio Interrupt
#define INT_KEYGEN 169 // CDMA Keygen Interrupt
#define INT_THERM_ALARM0 170 // Thermal Alarm 0 Interrupt
#define INT_THERM_ALARM1 171 // Thermal Alarm 1 Interrupt
#define INT_THERM_TEMP0 172 // Thermal Temp 0 Interrupt
#define INT_THERM_TEMP1 173 // Thermal Temp 1 Interrupt
// Reserved 174 - 191
// H5P compatibility definitions related to Bali USB renaming.
#define INT_USB_OTG INT_USB_DEV
#define INT_USB_EHCI INT_USB2HOST0_EHCI
#define INT_USB_OHCI0 INT_USB2HOST0_OHCI0
#define INT_USB_OHCI1 INT_USB2HOST0_OHCI1
#if PLATFORM_VARIANT_IOP
#include <drivers/aic/aic.h>
#define INT_HOST INT_SW2 // Host processor doorbell
#define INT_IOP INT_SW3 // I/O coprocessor doorbell
#define INT_IOP_NMI kAIC_VEC_SW_TMR // I/O coprocessor NMI
#elif PLATFORM_VARIANT_AUDIO
#include <drivers/audio/audio.h>
#define INT_HOST AE2_INT_SW0 // Host processor doorbell
#define INT_IOP AE2_INT_SW0 // I/O coprocessor doorbell
#define INT_IOP_NMI AE2_INT_SW1 // I/O coprocessor NMI
#endif
#endif /* ! __PLATFORM_SOC_HWISR_H */
@@ -0,0 +1,172 @@
/*
* Copyright (C) 2010-2012 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
#define AIC_VERSION 0
#define AIC_INT_COUNT (192)
#define PMGR_WDG_VERSION 0
/* S5L8955X Reg Base Defs */
#define SDIO_BASE_ADDR (0x30000000)
#define SHA1_BASE_ADDR (0x30100000)
#define SHA2_BASE_ADDR (0x30200000)
#define NAND_DLL_BASE_ADDR (0x31000000)
#define FMI0_BASE_ADDR (0x31200000)
#define FMI1_BASE_ADDR (0x31300000)
#define FMI_VERSION (5)
#define SPI0_BASE_ADDR (0x32000000)
#define SPI1_BASE_ADDR (0x32100000)
#define SPI2_BASE_ADDR (0x32200000)
#define SPI3_BASE_ADDR (0x32300000)
#define SPI4_BASE_ADDR (0x32400000)
#define SPI_VERSION (1)
#define SPIS_COUNT (5)
#define UART0_BASE_ADDR (0x32500000)
#define UART1_BASE_ADDR (0x32600000)
#define UART2_BASE_ADDR (0x32700000)
#define UART3_BASE_ADDR (0x32800000)
#define UART4_BASE_ADDR (0x32900000)
#define UART5_BASE_ADDR (0x32A00000)
#define UART6_BASE_ADDR (0x32B00000)
#define UART_VERSION (1)
#define UARTS_COUNT (7)
#define PKE_BASE_ADDR (0x33100000)
#define IIC_BASE_ADDR (0x33200000)
#define IIC_SPACING (0x00100000)
#define IICS_COUNT (3)
#define AUDIO_BASE_ADDR (0x34000000)
#define USBPHY_BASE_ADDR (0x36000000)
#define USBPHY_VERSION (4)
#define USBOTG_BASE_ADDR (0x36100000)
#define UPERF_WIDGETS_BASE_ADDR (0x36E00000)
#define UPERF_PL301_BASE_ADDR (0x36F00000)
#define CDMA_BASE_ADDR (0x37000000)
#define CDMA_VERSION 5
#define VENC_BASE_ADDR (0x38000000)
#define VDEC_BASE_ADDR (0x38100000)
#define JPEG0_BASE_ADDR (0x38200000)
#define JPEG1_BASE_ADDR (0x38500000)
#define SCALER_BASE_ADDR (0x38300000)
#define SCALER_SPACING (0x00100000)
#define NRT_DART_BASE_ADDR (0x38B00000)
#define NRT_DART_WIDGETS_BASE_ADDR (0x38C00000)
#define NRT_DART_PL301_BASE_ADDR (0x38D00000)
#define NRT_TOP_WIDGETS_BASE_ADDR (0x38E00000)
#define NRT_TOP_PL301_BASE_ADDR (0x38F00000)
#define CLCD_BASE_ADDR (0x39200000)
#define CLCD_VERSION (1)
// XXX Different in Bali.
#define DITHER0_BASE_ADDR (0x39300000)
#define DITHER_VERSION (2)
#define DITHER_BASE_ADDR DITHER0_BASE_ADDR
#define TVOUT_BASE_ADDR (0x39400000)
#define TVOUT_DAC0_SCALE_VALUE (0x782)
#define TVOUT_DAC1_SCALE_VALUE (0x782)
#define TVOUT_DAC2_SCALE_VALUE (0x782)
// XXX New in Bali.
#define EDP_BASE_ADDR (0x39500000)
#define DISPLAYPORT_VERSION (2)
// XXX Removed in Bali?
#define DSIM_BASE_ADDR (0x39500000)
#define DSIM_LANE_COUNT (4)
#define DSIM_VERSION (1)
#define RGBOUT_BASE_ADDR (0x39600000)
#define DISPLAYPORT_BASE_ADDR (0x39700000)
// XXX Different in Bali.
//#define DITHER1_BASE_ADDR (0x39800000)
// XXX New in Bali.
#define ASCALER_BASE_ADDR (0x39900000)
#define DPB_BASE_ADDR (0x39A00000)
#define AAP_BASE_ADDR (0x39B00000)
// XXX Removed in Bali.
//#define LPDP_BASE_ADDR (0x39900000)
#define ISP_BASE_ADDR (0x3A000000)
#define DISP0_BASE_ADDR (0x3A100000)
#define DISP1_BASE_ADDR (0x3A200000)
#define CLCD_DISPLAYPIPE_BASE_ADDR (DISP0_BASE_ADDR)
#define RGBOUT_DISPLAYPIPE_BASE_ADDR (DISP1_BASE_ADDR)
#define DISP_VERSION (4)
#define RT_DART_BASE_ADDR (0x3A400000)
#define RT_TOP_WIDGETS_BASE_ADDR (0x3A500000)
#define RT_TOP_PL301_BASE_ADDR (0x3A600000)
// XXX Removed in Bali.
//#define ADSP_BASE_ADDR (0x3B000000)
#define AMP_BASE_ADDR (0x3D000000)
#define AMP_SPACING (0x00100000)
#define SCC_BASE_ADDR (0x3D200000)
#define PMGR_BASE_ADDR (0x3F100000)
#define AIC_BASE_ADDR (0x3F200000)
#define IOP_BASE_ADDR (0x3F300000)
// XXX Removed in Bali.
//#define ROSC_BASE_ADDR (0x3F400000)
//#define ROSC_MASK (0x57FF)
//#define ROSC_WITH_CLOCK (0)
#define CHIPID_BASE_ADDR (0x3F500000)
#define SWI_BASE_ADDR (0x3F600000)
#define DWI_BASE_ADDR (0x3F700000)
#define AMC_BASE_ADDR (0x3F800000)
#define GPIO_BASE_ADDR (0x3FA00000)
#define GPIO_VERSION (2)
#define GPIO_GROUP_COUNT (31)
#define GPIO_PAD_SPI (GPIO_GROUP_COUNT)
#define PIO_BASE_ADDR (0x3FB00000)
#define PIO_SPACING (0x00100000)
#define CIM_BASE_ADDR (0x3FD00000)
#define CDIO_WIDGETS_BASE_ADDR (0x3FE00000)
#define CDIO_PL301_BASE_ADDR (0x3FF00000)
#endif /* ! __PLATFORM_SOC_HWREGBASE_H */
@@ -0,0 +1,211 @@
/*
* Copyright (C) 2010-2011 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>
#define rREMAP_CTL (*(volatile u_int32_t *)(PIO_BASE_ADDR + 0x0000))
#define rCIM_TID_DEST_CONFIG(n) (*(volatile u_int32_t *)(CIM_BASE_ADDR + 0x000 + (n) * 4))
#define rCIM_CONFIG_REG (*(volatile u_int32_t *)(CIM_BASE_ADDR + 0x040)
#define rCIM_STATUS_REG0 (*(volatile u_int32_t *)(CIM_BASE_ADDR + 0x044)
#define rCIM_STATUS_REG1 (*(volatile u_int32_t *)(CIM_BASE_ADDR + 0x048)
#define CDIO_IOP_RRLIMIT (0x0000)
#define rCDIO_IOP_RRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_RRLIMIT))
#define CDIO_IOP_WRLIMIT (0x0004)
#define rCDIO_IOP_WRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_WRLIMIT))
#define CDIO_IOP_RTLIMIT (0x0008)
#define rCDIO_IOP_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_RTLIMIT))
#define CDIO_IOP_WTLIMIT (0x000C)
#define rCDIO_IOP_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_WTLIMIT))
#define CDIO_IOP_WGATHER (0x0010)
#define rCDIO_IOP_WGATHER (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_WGATHER))
#define CDIO_IOP_C_REMAP_EN (0x001C)
#define rCDIO_IOP_C_REMAP_EN (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_C_REMAP_EN))
#define CDIO_IOP_RC_REMAP(n) (0x0020 + ((n) * 4))
#define rCDIO_IOP_RC_REMAP(n) (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_RC_REMAP(n)))
#define CDIO_IOP_WC_REMAP(n) (0x0030 + ((n) * 4))
#define rCDIO_IOP_WC_REMAP(n) (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_IOP_WC_REMAP(n)))
#define CDIO_CDMA_RRLIMIT (0x1000)
#define rCDIO_CDMA_RRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CDMA_RRLIMIT))
#define CDIO_CDMA_WRLIMIT (0x1004)
#define rCDIO_CDMA_WRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CDMA_WRLIMIT))
#define CDIO_CDMA_RTLIMIT (0x1008)
#define rCDIO_CDMA_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CDMA_RTLIMIT))
#define CDIO_CDMA_WTLIMIT (0x100C)
#define rCDIO_CDMA_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CDMA_WTLIMIT))
#define CDIO_CDMA_WGATHER (0x1010)
#define rCDIO_CDMA_WGATHER (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CDMA_WGATHER))
#define CDIO_UPERF_RRLIMIT (0x2000)
#define rCDIO_UPERF_RRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_UPERF_RRLIMIT))
#define CDIO_UPERF_WRLIMIT (0x2004)
#define rCDIO_UPERF_WRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_UPERF_WRLIMIT))
#define CDIO_UPERF_RTLIMIT (0x2008)
#define rCDIO_UPERF_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_UPERF_RTLIMIT))
#define CDIO_UPERF_WTLIMIT (0x200C)
#define rCDIO_UPERF_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_UPERF_WTLIMIT))
#define CDIO_UPERF_WGATHER (0x2010)
#define rCDIO_UPERF_WGATHER (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_UPERF_WGATHER))
#define CDIO_AUDIO_RRLIMIT (0x3000)
#define rCDIO_AUDIO_RRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_AUDIO_RRLIMIT))
#define CDIO_AUDIO_WRLIMIT (0x3004)
#define rCDIO_AUDIO_WRLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_AUDIO_WRLIMIT))
#define CDIO_AUDIO_RTLIMIT (0x3008)
#define rCDIO_AUDIO_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_AUDIO_RTLIMIT))
#define CDIO_AUDIO_WTLIMIT (0x300C)
#define rCDIO_AUDIO_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_AUDIO_WTLIMIT))
#define CDIO_AUDIO_WGATHER (0x3010)
#define rCDIO_AUDIO_WGATHER (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_AUDIO_WGATHER))
#define CDIO_PIO_RTLIMIT (0x5008)
#define rCDIO_PIO_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_PIO_RTLIMIT))
#define CDIO_PIO_WTLIMIT (0x500C)
#define rCDIO_PIO_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_PIO_WTLIMIT))
#define CDIO_CIM_RTLIMIT (0x6008)
#define rCDIO_CIM_RTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CIM_RTLIMIT))
#define CDIO_CIM_WTLIMIT (0x600C)
#define rCDIO_CIM_WTLIMIT (*(volatile u_int32_t *)(CDIO_WIDGETS_BASE_ADDR + CDIO_CIM_WTLIMIT))
#define CDIO_AR_CHAN_ARB_MI0 (0x0408)
#define rCDIO_AR_CHAN_ARB_MI0 (*(volatile u_int32_t *)(CDIO_PL301_BASE_ADDR + CDIO_AR_CHAN_ARB_MI0))
#define CDIO_AW_CHAN_ARB_MI0 (0x040C)
#define rCDIO_AW_CHAN_ARB_MI0 (*(volatile u_int32_t *)(CDIO_PL301_BASE_ADDR + CDIO_AW_CHAN_ARB_MI0))
#define CDIO_AR_CHAN_ARB_MI1 (0x0428)
#define rCDIO_AR_CHAN_ARB_MI1 (*(volatile u_int32_t *)(CDIO_PL301_BASE_ADDR + CDIO_AR_CHAN_ARB_MI1))
#define CDIO_AW_CHAN_ARB_MI1 (0x042C)
#define rCDIO_AW_CHAN_ARB_MI1 (*(volatile u_int32_t *)(CDIO_PL301_BASE_ADDR + CDIO_AW_CHAN_ARB_MI1))
#define UPERF_OTG_QOS (0x0014)
#define rUPERF_OTG_QOS (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OTG_QOS))
#define UPERF_OTG_CACHE (0x0018)
#define rUPERF_OTG_CACHE (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OTG_CACHE))
#define UPERF_EHCI_QOS (0x0034)
#define rUPERF_EHCI_QOS (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_EHCI_QOS))
#define UPERF_EHCI_CACHE (0x0038)
#define rUPERF_EHCI_CACHE (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_EHCI_CACHE))
#define UPERF_OHCI0_QOS (0x0054)
#define rUPERF_OHCI0_QOS (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OHCI0_QOS))
#define UPERF_OHCI0_CACHE (0x0058)
#define rUPERF_OHCI0_CACHE (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OHCI0_CACHE))
#define UPERF_OHCI1_QOS (0x0074)
#define rUPERF_OHCI1_QOS (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OHCI1_QOS))
#define UPERF_OHCI1_CACHE (0x0078)
#define rUPERF_OHCI1_CACHE (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_OHCI1_CACHE))
#define UPERF_RTLIMIT (0x0088)
#define rUPERF_RTLIMIT (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_RTLIMIT))
#define UPERF_WTLIMIT (0x008C)
#define rUPERF_WTLIMIT (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_WTLIMIT))
#define UPERF_USB2HOST1EHCI_QOS (0x0094)
#define rUPERF_USB2HOST1EHCI_QOS (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_USB2HOST1EHCI_QOS))
#define UPERF_USB2HOST1EHCI_CACHE (0x0098)
#define rUPERF_USB2HOST1EHCI_CACHE (*(volatile u_int32_t *)(UPERF_WIDGETS_BASE_ADDR + UPERF_USB2HOST1EHCI_CACHE))
#define UPERF_AR_CHAN_ARB_MI (0x0408)
#define rUPERF_AR_CHAN_ARB_MI (*(volatile u_int32_t *)(UPERF_PL301_BASE_ADDR + UPERF_AR_CHAN_ARB_MI0))
#define UPERF_AW_CHAN_ARB_MI (0x040C)
#define rUPERF_AW_CHAN_ARB_MI (*(volatile u_int32_t *)(UPERF_PL301_BASE_ADDR + UPERF_AW_CHAN_ARB_MI0))
#define HPERF_NRT_DART_DART_RTLIMIT (0x0000)
#define rHPERF_NRT_DART_DART_RTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_DART_RTLIMIT))
#define HPERF_NRT_DART_DART_WTLIMIT (0x0004)
#define rHPERF_NRT_DART_DART_WTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_DART_WTLIMIT))
#define HPERF_NRT_DART_DART_WGATHER (0x0010)
#define rHPERF_NRT_DART_DART_WGATHER (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_DART_WGATHER))
#define HPERF_NRT_DART_SCALER0_RTLIMIT (0x0108)
#define rHPERF_NRT_DART_SCALER0_RTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_SCALER0_RTLIMIT))
#define HPERF_NRT_DART_SCALER0_WTLIMIT (0x010C)
#define rHPERF_NRT_DART_SCALER0_WTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_SCALER0_WTLIMIT))
#define HPERF_NRT_DART_SCALER1_RTLIMIT (0x0208)
#define rHPERF_NRT_DART_SCALER1_RTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_SCALER1_RTLIMIT))
#define HPERF_NRT_DART_SCALER1_WTLIMIT (0x020C)
#define rHPERF_NRT_DART_SCALER1_WTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_SCALER1_WTLIMIT))
#define HPERF_NRT_DART_JPEG0_RTLIMIT (0x0308)
#define rHPERF_NRT_DART_JPEG0_RTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_RTLIMIT))
#define HPERF_NRT_DART_JPEG0_WTLIMIT (0x030C)
#define rHPERF_NRT_DART_JPEG0_WTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_WTLIMIT))
#define HPERF_NRT_DART_JPEG0_QOS (0x0314)
#define rHPERF_NRT_DART_JPEG0_QOS (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_QOS))
#define HPERF_NRT_DART_JPEG1_RTLIMIT (0x0408)
#define rHPERF_NRT_DART_JPEG1_RTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_RTLIMIT))
#define HPERF_NRT_DART_JPEG1_WTLIMIT (0x040C)
#define rHPERF_NRT_DART_JPEG1_WTLIMIT (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_WTLIMIT))
#define HPERF_NRT_DART_JPEG1_QOS (0x0414)
#define rHPERF_NRT_DART_JPEG1_QOS (*(volatile u_int32_t *)(NRT_DART_WIDGETS_BASE_ADDR + HPERF_NRT_DART_JPEG0_QOS))
#define HPERF_NRT_DART_AR_CHAN_ARB_MI (0x0408)
#define rHPERF_NRT_DART_AR_CHAN_ARB_MI (*(volatile u_int32_t *)(NRT_DART_PL301_BASE_ADDR + HPERF_NRT_DART_AR_CHAN_ARB_MI0))
#define HPERF_NRT_DART_AW_CHAN_ARB_MI (0x040C)
#define rHPERF_NRT_DART_AW_CHAN_ARB_MI (*(volatile u_int32_t *)(NRT_DART_PL301_BASE_ADDR + HPERF_NRT_DART_AW_CHAN_ARB_MI0))
#define HPERF_NRT_TOP_TOP_RTLIMIT (0x0008)
#define rHPERF_NRT_TOP_TOP_RTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_TOP_RTLIMIT))
#define HPERF_NRT_TOP_TOP_WTLIMIT (0x000C)
#define rHPERF_NRT_TOP_TOP_WTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_TOP_WTLIMIT))
#define HPERF_NRT_TOP_VENC_RTLIMIT (0x0108)
#define rHPERF_NRT_TOP_VENC_RTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VENC_RTLIMIT))
#define HPERF_NRT_TOP_VENC_WTLIMIT (0x010C)
#define rHPERF_NRT_TOP_VENC_WTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VENC_WTLIMIT))
#define HPERF_NRT_TOP_VENC_WREQSP (0x0110)
#define rHPERF_NRT_TOP_VENC_WREQSP (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VENC_WREQSP))
#define HPERF_NRT_TOP_VDEC_RTLIMIT (0x0208)
#define rHPERF_NRT_TOP_VDEC_RTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VDEC_RTLIMIT))
#define HPERF_NRT_TOP_VDEC_WTLIMIT (0x020C)
#define rHPERF_NRT_TOP_VDEC_WTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VDEC_WTLIMIT))
#define HPERF_NRT_TOP_VDEC_WREQSP (0x0210)
#define rHPERF_NRT_TOP_VDEC_WREQSP (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VDEC_WREQSP))
#define HPERF_NRT_TOP_AUX_RTLIMIT (0x0308)
#define rHPERF_NRT_TOP_AUX_RTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VDEC_RTLIMIT))
#define HPERF_NRT_TOP_AUX_WTLIMIT (0x030C)
#define rHPERF_NRT_TOP_AUX_WTLIMIT (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_VDEC_WTLIMIT))
#define HPERF_NRT_TOP_AUX_WGATHER (0x0310)
#define rHPERF_NRT_TOP_AUX_WGATHER (*(volatile u_int32_t *)(NRT_TOP_WIDGETS_BASE_ADDR + HPERF_NRT_TOP_AUX_WGATHER))
#define HPERF_NRT_TOP_AR_CHAN_ARB_MI (0x0408)
#define rHPERF_NRT_TOP_AR_CHAN_ARB_MI (*(volatile u_int32_t *)(NRT_TOP_PL301_BASE_ADDR + HPERF_NRT_TOP_AR_CHAN_ARB_MI0))
#define HPERF_NRT_TOP_AW_CHAN_ARB_MI (0x040C)
#define rHPERF_NRT_TOP_AW_CHAN_ARB_MI (*(volatile u_int32_t *)(NRT_TOP_PL301_BASE_ADDR + HPERF_NRT_TOP_AW_CHAN_ARB_MI0))
#define HPERF_RT_TOP_DISP0_RTLIMIT (0x0004)
#define rHPERF_RT_TOP_DISP0_RTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_DISP0_RTLIMIT))
#define HPERF_RT_TOP_DISP1_RTLIMIT (0x000C)
#define rHPERF_RT_TOP_DISP1_RTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_DISP1_RTLIMIT))
#define HPERF_RT_TOP_ISP_RTLIMIT (0x0018)
#define rHPERF_RT_TOP_ISP_RTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_ISP_WTLIMIT))
#define HPERF_RT_TOP_ISP_WTLIMIT (0x001C)
#define rHPERF_RT_TOP_ISP_WTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_ISP_RTLIMIT))
#define HPERF_RT_TOP_TOP_RTLIMIT (0x0020)
#define rHPERF_RT_TOP_TOP_RTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_TOP_WTLIMIT))
#define HPERF_RT_TOP_TOP_WTLIMIT (0x0024)
#define rHPERF_RT_TOP_TOP_WTLIMIT (*(volatile u_int32_t *)(RT_TOP_WIDGETS_BASE_ADDR + HPERF_RT_TOP_TOP_RTLIMIT))
#define HPERF_RT_TOP_AR_CHAN_ARB_MI (0x0408)
#define rHPERF_RT_TOP_AR_CHAN_ARB_MI (*(volatile u_int32_t *)(RT_TOP_PL301_BASE_ADDR + HPERF_RT_TOP_AR_CHAN_ARB_MI0))
#define HPERF_RT_TOP_AW_CHAN_ARB_MI (0x040C)
#define rHPERF_RT_TOP_AW_CHAN_ARB_MI (*(volatile u_int32_t *)(RT_TOP_PL301_BASE_ADDR + HPERF_RT_TOP_AW_CHAN_ARB_MI0))
#define rSCC_CCXPWRCTRL (*(volatile u_int32_t *)(SCC_BASE_ADDR + 0x2603C))
enum remap_select {
REMAP_SRAM = 0,
REMAP_SDRAM
};
extern void miu_select_remap(enum remap_select sel);
extern void miu_bypass_prep(int step);
extern void miu_update_device_tree(DTNode *pmgr_node);
extern u_int32_t miu_read_l2cadrmap(void);
extern void miu_write_l2cadrmap(u_int32_t value);
#endif /* ! __PLATFORM_SOC_MIU_H */
@@ -0,0 +1,536 @@
/*
* Copyright (C) 2010-2012 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>
#define PMGR_PLL_COUNT (8)
#define rPMGR_PLL_CTL0(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0000 + ((_n) * 0x18)))
#define PMGR_PLL_ENABLE (1 << 31)
#define PMGR_PLL_EXT_BYPASS (1 << 30)
#define PMGR_PLL_REAL_LOCK (1 << 29)
#define PMGR_PLL_LOAD (1 << 27)
#define PMGR_PLL_BYPASS (1 << 23)
#define rPMGR_PLL_CTL1(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0004 + ((_n) * 0x18)))
#define PMGR_PLL_MASK (0x1FF)
#define PMGR_PLL_M_SHIFT (18)
#define PMGR_PLL_P_SHIFT (9)
#define PMGR_PLL_S_SHIFT (0)
#define PMGR_PLL_P(_p) (((_p) & PMGR_PLL_MASK) << PMGR_PLL_P_SHIFT)
#define PMGR_PLL_M(_m) (((_m) & PMGR_PLL_MASK) << PMGR_PLL_M_SHIFT)
#define PMGR_PLL_S(_s) (((_s) & PMGR_PLL_MASK) << PMGR_PLL_S_SHIFT)
#define rPMGR_PLL_PARAM(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0008 + ((_n) * 0x18)))
#define PMGR_PARAM_LOCK_TIME_MASK (0xFFFF)
#define PMGR_PARAM_LOCK_TIME(_n) (((_n) & PMGR_PARAM_LOCK_TIME_MASK) << 0)
#define rPMGR_PLL_FD(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x000C + ((_n) * 0x18)))
#define rPMGR_DOUBLER_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0100))
#define PMGR_DOUBLER_ENABLE (1 << 31)
#define PMGR_DOUBLER_EXT_BYPASS (1 << 30)
#define rPMGR_CPU_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0140))
#define rPMGR_PLL2_GATE_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0150))
#define rPMGR_PLL4_GATE_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0154))
#define rPMGR_PLL5_GATE_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0158))
#define rPMGR_MCU_FIXED_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0164))
#define rPMGR_MCU_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0168))
#define rPMGR_PCLK1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x016C))
#define rPMGR_GFX_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0170))
#define rPMGR_PREDIV0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0190))
#define rPMGR_PREDIV1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0194))
#define rPMGR_PREDIV2_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0198))
#define rPMGR_PREDIV3_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x019C))
#define rPMGR_PREDIV4_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01A0))
#define rPMGR_PREDIV5_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01A4))
#define rPMGR_VENC_MTX_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01D0))
#define rPMGR_VENC_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01D4))
#define rPMGR_HPERFRT_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01D8))
#define rPMGR_GFX_SYS_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01DC))
#define rPMGR_HPERFNRT_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01E0))
#define rPMGR_NRT_MEM_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01E4))
#define rPMGR_VDEC_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01E8))
#define rPMGR_ISP_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01EC))
#define rPMGR_IOP_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01F0))
#define rPMGR_CDIO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01F4))
#define rPMGR_LPERFS_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01F8))
#define rPMGR_PCLK0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x01FC))
#define rPMGR_PCLK2_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0200))
#define rPMGR_PCLK3_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0204))
#define rPMGR_AES_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0208))
#define rPMGR_MEDIUM0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0230))
#define rPMGR_MEDIUM1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0234))
#define rPMGR_VID0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0238))
#define rPMGR_VID1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x023C))
#define rPMGR_DISPOUT_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0240))
#define rPMGR_I2C_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0244))
#define rPMGR_SDIO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0248))
#define rPMGR_AUDIO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0250))
#define rPMGR_UPERF_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0260))
#define rPMGR_DEBUG_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0264))
#define rPMGR_SCC_PWR_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0268))
#define rPMGR_SCC_DMA_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x026C))
#define rPMGR_SPI0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0270))
#define rPMGR_SPI1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0274))
#define rPMGR_SPI2_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0278))
#define rPMGR_SPI3_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x027C))
#define rPMGR_SPI4_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0280))
#define rPMGR_SLOW_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0284))
#define rPMGR_SLEEP_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0288))
#define rPMGR_USB_PHY0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x028C))
#define rPMGR_USBOHCI_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0290))
#define rPMGR_USB12_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0294))
#define rPMGR_NCO_REF0_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0298))
#define rPMGR_NCO_REF1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x029C))
#define rPMGR_NCO_REF2_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02A0))
#define rPMGR_USB_PHY1_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02A4))
#define rPMGR_USB_EHCI_FREE_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02A8))
#define PMGR_FIRST_CLK_CFG (&rPMGR_CPU_CLK_CFG)
#define PMGR_LAST_CLK_CFG (&rPMGR_USB_EHCI_FREE_CLK_CFG)
#define PMGR_CLK_CFG_COUNT (((((u_int32_t)(PMGR_LAST_CLK_CFG)) - ((u_int32_t)(PMGR_FIRST_CLK_CFG))) / 4) + 1)
#define PMGR_CLK_NUM(_r) (((u_int32_t)&(rPMGR_ ## _r ## _CLK_CFG) - ((u_int32_t)(PMGR_FIRST_CLK_CFG))) / 4)
#define PMGR_FIRST_MANAGED_CLK_NUM PMGR_CLK_NUM(VENC_MTX)
#define PMGR_CLK_CFG_ENABLE (1 << 31)
#define PMGR_CLK_CFG_PENDING (1 << 30)
#define PMGR_CLK_CFG_AUTO_DISABLE (1 << 25)
#define PMGR_CLK_CFG_SRC(_d) (((_d) & 0x3) << 28)
#define PMGR_CLK_CFG_SRC_MASK PMGR_CLK_CFG_SRC(0x3)
#define PMGR_CLK_CFG_DIVIDER(_d) (((_d) & 0x1F) << 0)
#define PMGR_CLK_CFG_DIV_MASK PMGR_CLK_CFG_DIVIDER(0x1F)
#define PMGR_PREDIV4_SRC__OSC PMGR_CLK_CFG_SRC(0x0)
#define PMGR_PREDIV4_SRC__PLL5 PMGR_CLK_CFG_SRC(0x1)
#define PMGR_PREDIV4_SRC__PLL6 PMGR_CLK_CFG_SRC(0x2)
#define PMGR_PREDIV4_SRC__PLL3 PMGR_CLK_CFG_SRC(0x3)
#define rPMGR_I2S0_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02B0))
#define rPMGR_I2S0_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02B4))
#define rPMGR_I2S0_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02B8))
#define rPMGR_I2S1_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02C0))
#define rPMGR_I2S1_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02C4))
#define rPMGR_I2S1_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02C8))
#define rPMGR_I2S2_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02D0))
#define rPMGR_I2S2_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02D4))
#define rPMGR_I2S2_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02D8))
#define rPMGR_I2S3_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02E0))
#define rPMGR_I2S3_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02E4))
#define rPMGR_I2S3_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02E8))
#define rPMGR_SPDIF_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02F0))
#define rPMGR_SPDIF_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02F4))
#define rPMGR_SPDIF_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x02F8))
#define rPMGR_DP_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0300))
#define rPMGR_DP_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0304))
#define rPMGR_DP_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0308))
#define rPMGR_MCA_NCO_CLK_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0310))
#define rPMGR_MCA_NCO_N1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0314))
#define rPMGR_MCA_NCO_N2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0318))
#define rPMGR_ENABLE_CLK_GATE (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0330))
#define kPERF_STATE_BYPASS (0)
#define kPERF_STATE_SECUREROM (1)
#define kPERF_STATE_IBOOT (2)
#define kPERF_STATE_IBOOT_CNT (5)
#define PMGR_PERF_STATE_COUNT (16)
#define rPMGR_PERF_STATE_A(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0400 + ((_s) * 0x20)))
#define rPMGR_PERF_STATE_B(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0404 + ((_s) * 0x20)))
#define rPMGR_PERF_STATE_C(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0408 + ((_s) * 0x20)))
#define rPMGR_PERF_STATE_D(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x040C + ((_s) * 0x20)))
#define rPMGR_PERF_STATE_E(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0410 + ((_s) * 0x20)))
#define PMGR_PERF_STATE_E_VOL_SHIFT (0)
#define PMGR_PERF_STATE_E_VOL_MASK (0xFF)
#define rPMGR_PERF_STATE_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0600))
#define PMGR_PERF_STATE_SEL_SHIFT (0)
#define PMGR_PERF_STATE_SEL_MASK (0xF)
#define PMGR_PERF_STATE_SEL(_s) (((_s) & PMGR_PERF_STATE_SEL_MASK) << PMGR_PERF_STATE_SEL_SHIFT)
#define PMGR_PERF_STATE_PENDING (0xFFFFFFF << 4)
#define rPMGR_PERF_STATE_DELAY (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0604))
#define PMGR_PERF_STATE_DELAY_VOL_CHG_FIX_DLY_SHIFT (8)
#define PMGR_PERF_STATE_DELAY_VOL_CHG_VAR_DLY_SHIFT (0)
#define rPMGR_MCU_CLK_DEBUG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0620))
#define rPMGR_AUTOMATIC_CLK_GATE (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x0640))
#define PMGR_ACG_CLK_GEN__ENABLE (1 << 0)
#define PMGR_ACG_PS_ENABLE (1 << 1)
#define PMGR_ACG_NCO_CLK_GEN_ENABLE (1 << 2)
#define rPMGR_FIRST_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1000))
#define rPMGR_SCC_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1004))
#define rPMGR_CPU0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1008))
#define rPMGR_CPU1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x100C))
#define rPMGR_L2_BIU_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1010))
#define rPMGR_L2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1014))
#define rPMGR_MCU_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1020))
#define rPMGR_GFX_SYS_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1024))
#define rPMGR_GFX_CORES_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1028))
#define rPMGR_HPERFNRT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x102C))
#define rPMGR_VDEC_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1030))
#define rPMGR_SCALER0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1034))
#define rPMGR_SCALER1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1038))
#define rPMGR_JPG0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x103C))
#define rPMGR_JPG1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1040))
#define rPMGR_VENCD_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1048))
#define rPMGR_HPERFRT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x104C))
#define rPMGR_ISP_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1050))
#define rPMGR_EDP_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1054))
#define rPMGR_DISP0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1058))
#define rPMGR_DISP1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x105C))
#define rPMGR_DISPOUT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1060))
#define rPMGR_CLCD_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1068))
#define rPMGR_TVOUT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x106C))
#define rPMGR_RGBOUT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1070))
#define rPMGR_DPLINK_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1074))
#define rPMGR_CDIO_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1078))
#define rPMGR_CDMA_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x107C))
#define rPMGR_IOP_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1080))
#define rPMGR_UPERF_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1084))
#define rPMGR_USBOTG0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1088))
#define rPMGR_USB2HOST0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x108C))
#define rPMGR_USB11HOST_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1090))
#define rPMGR_USB2HOST0_OHCI_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1094))
#define rPMGR_USB11HOST_OHCI_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1098))
#define rPMGR_USBREG_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x109C))
#define rPMGR_AUDIO_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10A0))
#define rPMGR_I2S0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10A4))
#define rPMGR_I2S1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10A8))
#define rPMGR_I2S2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10AC))
#define rPMGR_I2S3_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10B0))
#define rPMGR_SPDIF_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10B4))
#define rPMGR_SDIO_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10BC))
#define rPMGR_SHA1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10C0))
#define rPMGR_SHA2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10C4))
#define rPMGR_FMI0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10C8))
#define rPMGR_FMI0BCH_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10CC))
#define rPMGR_FMI1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10D0))
#define rPMGR_FMI1BCH_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10D4))
#define rPMGR_FMI_DLL_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10D8))
#define rPMGR_MCA_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10E0))
#define rPMGR_SPI0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10E4))
#define rPMGR_SPI1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10E8))
#define rPMGR_SPI2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10EC))
#define rPMGR_SPI3_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10F0))
#define rPMGR_SPI4_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10F4))
#define rPMGR_UART0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10F8))
#define rPMGR_UART1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x10FC))
#define rPMGR_UART2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1100))
#define rPMGR_UART3_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1104))
#define rPMGR_UART4_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1108))
#define rPMGR_UART5_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x110C))
#define rPMGR_UART6_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1110))
#define rPMGR_PKE_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1114))
#define rPMGR_I2C0_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1118))
#define rPMGR_I2C1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x111C))
#define rPMGR_I2C2_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1120))
#define rPMGR_PWM_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1124))
#define rPMGR_SCRT_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1128))
#define rPMGR_GPIO_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x112C))
#define rPMGR_SWI_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1130))
#define rPMGR_DWI_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1134))
#define rPMGR_DEBUG_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1138))
#define rPMGR_AIC_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x113C))
#define rPMGR_USB2HOST1_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1140))
#define rPMGR_USB2HOST1_OHCI_PS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1144))
#define PMGR_PS_RESET (1 << 31)
#define PMGR_FIRST_PS (&rPMGR_FIRST_PS)
#define PMGR_LAST_PS (&rPMGR_USB2HOST1_OHCI_PS)
#define PMGR_PS_COUNT (((((u_int32_t)(PMGR_LAST_PS)) - ((u_int32_t)(PMGR_FIRST_PS))) / 4) + 1)
#define PMGR_PS_NUM(_r) (((u_int32_t)&(rPMGR_ ## _r ## _PS) - ((u_int32_t)(PMGR_FIRST_PS))) / 4)
#define rPMGR_PWR_GATE_CTL_SET (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1200))
#define rPMGR_PWR_GATE_CTL_CLR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1204))
#define PMGR_PWR_GATE_IOP (1 << 6)
#define rPMGR_PWR_GATE_GFX_MODE (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1208))
#define rPMGR_CORE_OFFLINE_SET (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1210))
#define rPMGR_CORE_OFFLINE_CLR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1214))
#define rPMGR_WAKE_CORES (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1220))
#define PMGR_PWR_GATE_TIME_COUNT (15)
#define rPMGR_PWR_GATE_TIME_A(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1240 + (((_n) - 1) * 8)))
#define rPMGR_PWR_GATE_TIME_B(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1244 + (((_n) - 1) * 8)))
#define rPMGR_PWR_GATE_DBG0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x12E0))
#define rPMGR_PWR_GATE_DBG1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x12E4))
#define rPMGR_VOLMAN_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1380))
#define PMGR_VOLMAN_DISABLE_VOL_CHANGE (1 << 10)
#define PMGR_VOLMAN_CPU_SW_OFF_TIME_VALUE(_x) ((_x) << 2)
#define PMGR_VOLMAN_BIT_ORDER_MSB (0 << 1)
#define PMGR_VOLMAN_BIT_ORDER_LSB (1 << 1)
#define PMGR_VOLMAN_BYTE_NO_SWAP (0 << 0)
#define PMGR_VOLMAM_BYTE_SWAP (1 << 0)
#define kDVFM_STATE_COUNT (8)
#define kDVFM_STATE_BYPASS (0)
#define kDVFM_STATE_SECUREROM (1)
#define kDVFM_STATE_IBOOT (2)
#define PMGR_DVFM_STATE_COUNT (8)
#define rPMGR_DVFM_CFG0(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1400 + ((_s) * 0x20)))
#define rPMGR_DVFM_CFG1(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1404 + ((_s) * 0x20)))
#define PMGR_DVFM_CFG1_CLK_SRC_SHIFT (18)
#define PMGR_DVFM_CFG1_MIN_VOL_SHIFT (8)
#define PMGR_DVFM_CFG1_SAFE_VOL_SHIFT (0)
#define PMGR_DVFM_CFG1_VOL_MASK (0xFF)
#define rPMGR_DVFM_CFG2(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1408 + ((_s) * 0x20)))
#define PMGR_DVFM_CFG2_SRAM_VOL_SHIFT (24)
#define PMGR_DVFM_CFG2_SRAM_VOL_MASK (0xFF)
#define rPMGR_DVFM_CFG3(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x140C + ((_s) * 0x20)))
#define rPMGR_DVFM_CFG4(_s) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1410 + ((_s) * 0x20)))
#define rPMGR_DVFM_COMMON_CFG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1600))
#define rPMGR_DVFM_STA_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1604))
#define rPMGR_DVFM_CFG_SEL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1608))
#define rPMGR_DVFM_DELAY (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x160C))
#define PMGR_DVFM_DELAY_VOL_CHG_FIX_DLY_SHIFT (8)
#define PMGR_DVFM_DELAY_VOL_CHG_VAR_DLY_SHIFT (0)
#define rPMGR_DVFM_SRAM_VOL_DELAY (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1610))
#define PMGR_DVFM_SRAM_VOL_DELAY_VOL_CHG_FIX_DLY_SHIFT (8)
#define PMGR_DVFM_SRAM_VOL_DELAY_VOL_CHG_VAR_DLY_SHIFT (0)
#define rPMGR_SENSOR_CMD (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1680))
#define rPMGR_CORE0_TMP_SEN_RSLT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1684))
#define rPMGR_CORE1_TMP_SEN_RSLT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1688))
#define rPMGR_CORE0_SPD_SEN_RSLT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x168C))
#define rPMGR_CORE1_SPD_SEN_RSLT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1690))
#define rPMGR_APSC_STA_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1700))
#define PMGR_APSC_PENDING (1 << 31)
#define PMGR_APSC_SCC_MANUAL_CHANGE (1 << 25)
#define PMGR_APSC_SOC_MANUAL_CHANGE (1 << 24)
#define PMGR_APSC_SCC_MANUAL_STATE(_d) (((_d) & 0x7) << 20)
#define PMGR_APSC_SOC_MANUAL_STATE(_p) (((_p) & 0xF) << 8)
#define PMGR_APSC_MANUAL_CHANGE(_d, _p) \
(PMGR_APSC_SCC_MANUAL_CHANGE | PMGR_APSC_SOC_MANUAL_CHANGE | \
PMGR_APSC_SCC_MANUAL_STATE(_d) | PMGR_APSC_SOC_MANUAL_STATE(_p))
#define rPMGR_SCC_SLEEP_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1704))
#define rPMGR_SCC_SLEEP_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1708))
#define rPMGR_SCC_WAKE_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x170C))
#define rPMGR_SCC_WAKE_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1710))
#define rPMGR_SCC_MANUAL_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1714))
#define rPMGR_SCC_MANUAL_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1718))
#define rPMGR_SOC_SLEEP_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x171C))
#define rPMGR_SOC_SLEEP_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1720))
#define rPMGR_SOC_WAKE_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1724))
#define rPMGR_SOC_WAKE_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1728))
#define rPMGR_SOC_MANUAL_TIME_STAMP_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x172C))
#define rPMGR_SOC_MANUAL_TIME_STAMP_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x1730))
#define rPMGR_TEST_CLK (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x2000))
#define rPMGR_OSC_DEBUG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x200C))
#define rPMGR_PLL_DEBUG(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x2010 + ((_n) * 4)))
#define PMGR_PLL_DEBUG_ENABLED (1 << 31)
#define PMGR_PLL_DEBUG_BYP_ENABLED (1 << 30)
#define PMGR_PLL_DEBUG_DBG_STPCLK_EN (1 << 24)
#define PMGR_PLL_DEBUG_FSTATE (1 << 12)
#define PMGR_PLL_DEBUG_STATE(_r) (((_r) >> 0) & 0xFFF)
#define rPMGR_DOUBLER_DEBUG (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x2030))
#define PMGR_DOUBLER_DEBUG_ENABLED (1 << 31)
#define PMGR_DOUBLER_DEBUG_BYP_ENABLED (1 << 30)
#define rPMGR_SRAM_EMA_B0_Pn_LO(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x2128 + (((_n) - 1) * 8)))
#define rPMGR_SRAM_EMA_B0_Pn_HI(_n) (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x212C + (((_n) - 1) * 8)))
enum {
EMA_MCU = 1,
EMA_GFX_PIPES_SYS = 2,
EMA_GFX_HYDRA = 3,
EMA_VDEC = 4,
EMA_VENC = 5,
EMA_ISP = 6,
EMA_DISP = 7,
EMA_NRT = 8,
EMA_PMGR = 9,
EMA_IOP = 10,
EMA_SAUDIO = 11,
EMA_CDIO = 12,
EMA_FMI = 13,
EMA_ADSP = 14,
};
#define rPMGR_WDOG_TMR (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x3020))
#define rPMGR_WDOG_RST (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x3024))
#define rPMGR_WDOG_INT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x3028))
#define rPMGR_WDOG_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x302C))
#define rPMGR_PERF_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4000))
#define rPMGR_PERF_STATUS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4004))
#define rPMGR_PERF_CTR0_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4020))
#define rPMGR_PERF_CTR0_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4024))
#define rPMGR_PERF_CFG0_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4028))
#define rPMGR_PERF_CFG0_MID (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x402C))
#define rPMGR_PERF_CFG0_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4030))
#define rPMGR_PERF_CTR1_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4040))
#define rPMGR_PERF_CTR1_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4044))
#define rPMGR_PERF_CFG1_LO (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4048))
#define rPMGR_PERF_CFG1_MID (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x404C))
#define rPMGR_PERF_CFG1_HI (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x4050))
#define rPMGR_SCRATCH0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6000))
#define rPMGR_SCRATCH1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6004))
#define rPMGR_SCRATCH2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6008))
#define rPMGR_SCRATCH3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x600C))
#define rPMGR_SCRATCH4 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6010))
#define rPMGR_SCRATCH5 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6014))
#define rPMGR_SCRATCH6 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6018))
#define rPMGR_SCRATCH7 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x601C))
#define rPMGR_SCRATCH8 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6020))
#define rPMGR_SCRATCH9 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6024))
#define rPMGR_SCRATCH10 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6028))
#define rPMGR_SCRATCH11 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x602C))
#define rPMGR_SCRATCH12 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6030))
#define rPMGR_SCRATCH13 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6034))
#define rPMGR_SCRATCH14 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x6038))
#define rPMGR_SCRATCH15 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x603C))
#define rPMGR_DAC_FS (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x7000))
#define rPMGR_USB_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x8000))
#define rPMGR_SHA_SEL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0x9000))
#define rPMGR_SECURITY (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xA000))
#define rPMGR_GFX_CTL (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xB000))
#define rPMGR_THERMAL0_CTL0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC000))
#define rPMGR_THERMAL0_CTL1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC004))
#define rPMGR_THERMAL0_CTL2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC008))
#define rPMGR_THERMAL0_CTL3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC00C))
#define rPMGR_THERMAL0_RDBK0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC010))
#define rPMGR_THERMAL0_RDBK1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC014))
#define rPMGR_THERMAL0_SUM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC018))
#define rPMGR_THERMAL0_SUM_CNT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC01C))
#define rPMGR_THERMAL1_CTL0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC040))
#define rPMGR_THERMAL1_CTL1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC044))
#define rPMGR_THERMAL1_CTL2 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC048))
#define rPMGR_THERMAL1_CTL3 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC04C))
#define rPMGR_THERMAL1_RDBK0 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC050))
#define rPMGR_THERMAL1_RDBK1 (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC054))
#define rPMGR_THERMAL1_SUM (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC058))
#define rPMGR_THERMAL1_SUM_CNT (*(volatile u_int32_t *)(PMGR_BASE_ADDR + 0xC05C))
#define PGMR_GET_PERF_STATE_INDEX(_n, _x) (((_x) >> ((_n) * 4)) & 0xF)
#define PGMR_SET_PERF_STATE_INDEX(_n, _i) (((_i) & 0xF) << ((_n) * 4))
#define PMGR_PERF_STATE_V(_n) (_n)
#define PMGR_PERF_STATE_P (3)
#define PMGR_PERF_STATE_M(_n) (4 + (_n))
enum {
PMGR_CLK_OSC = 0,
PMGR_CLK_PLL0,
PMGR_CLK_PLL1,
PMGR_CLK_PLL2,
PMGR_CLK_PLL3,
PMGR_CLK_PLL4,
PMGR_CLK_PLL5,
PMGR_CLK_PLL6,
PMGR_CLK_PLLUSB,
PMGR_CLK_DOUBLER,
PMGR_CLK_PLL2_GATED,
PMGR_CLK_PLL4_GATED,
PMGR_CLK_PLL5_GATED,
PMGR_CLK_MCU_FIXED,
PMGR_CLK_MCU,
PMGR_CLK_CPU,
PMGR_CLK_PREDIV0,
PMGR_CLK_PREDIV1,
PMGR_CLK_PREDIV2,
PMGR_CLK_PREDIV3,
PMGR_CLK_PREDIV4,
PMGR_CLK_PREDIV5,
PMGR_CLK_GFX,
PMGR_CLK_GFX_SYS,
PMGR_CLK_HPERFRT,
PMGR_CLK_DISPOUT,
PMGR_CLK_VID0,
PMGR_CLK_VID1,
PMGR_CLK_HPERFNRT,
PMGR_CLK_NRT_MEM,
PMGR_CLK_VENC_MTX,
PMGR_CLK_VENC,
PMGR_CLK_VDEC,
PMGR_CLK_ISP,
PMGR_CLK_IOP,
PMGR_CLK_CDIO,
PMGR_CLK_LPERFS,
PMGR_CLK_PCLK0,
PMGR_CLK_PCLK1,
PMGR_CLK_PCLK2,
PMGR_CLK_PCLK3,
PMGR_CLK_AES,
PMGR_CLK_MEDIUM0,
PMGR_CLK_MEDIUM1,
PMGR_CLK_I2C,
PMGR_CLK_SDIO,
PMGR_CLK_AUDIO,
PMGR_CLK_UPERF,
PMGR_CLK_DEBUG,
PMGR_CLK_SCC_PWR,
PMGR_CLK_SCC_DMA,
PMGR_CLK_SPI0,
PMGR_CLK_SPI1,
PMGR_CLK_SPI2,
PMGR_CLK_SPI3,
PMGR_CLK_SPI4,
PMGR_CLK_SLOW,
PMGR_CLK_SLEEP,
PMGR_CLK_USB_PHY0,
PMGR_CLK_USBOHCI,
PMGR_CLK_USB12,
PMGR_CLK_NCO_REF0,
PMGR_CLK_NCO_REF1,
PMGR_CLK_NCO_REF2,
PMGR_CLK_USB_PHY1,
PMGR_CLK_USB_EHCI_FREE,
PMGR_CLK_COUNT
};
extern void pmgr_update_device_tree(DTNode *pmgr_node);
#endif /* ! __PLATFORM_SOC_PMGR_H */
@@ -0,0 +1,20 @@
/*
* Copyright (C) 2010 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/memmap.h>
#include <platform/soc/hwregbase.h>
#define SECURITY_REG (PMGR_BASE_ADDR + 0xA000)
#define ROM_READ_DISABLE (1 << 0)
#endif /* ! __PLATFORM_TRAMPOLINE_H */
@@ -0,0 +1,21 @@
/*
* Copyright (C) 2010 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
#define USBPHY_CLK_TYPE (3) /* Use CLKCORE */
#define USBPHY_UOTGTUNE1 (0x649)
#define USBPHY_UOTGTUNE2 (0x2FF3)
#define USBOTG_AHB_DMA_BURST (DWCUSB_GAHBCFG_HBST_INCR16)
#endif /* ! __PLATFORM_USBCONFIG_H */
File diff suppressed because it is too large. Load diff
+212
View File
@@ -0,0 +1,212 @@
/*
* Copyright (C) 2010 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 <arch/arm/arm.h>
#include <debug.h>
#include <drivers/a5iop/a5iop.h>
#include <platform.h>
#include <platform/clocks.h>
#include <platform/int.h>
#include <platform/memmap.h>
#include <platform/timer.h>
#include <platform/soc/hwisr.h>
#include <platform/soc/pmgr.h>
#include <sys.h>
#include <sys/boot.h>
#include <sys/callout.h>
/*
* Platform memory layout.
*
* The IOP sees SDRAM at its physical location uncached, and has an cached aperture
* visible elsewhere. SDRAM size of up to 1GB is currently supported.
* SRAM is not visible/legally usable.
*
* For some platforms/targets, SDRAM_LEN is not constant and so we
* have to compute a maximum via other means.
*
* Note that the AE2 Sparrow shares this code.
*/
#define MEM_CACHED_BASE (SDRAM_BASE | 0xc0000000)
#define SDRAM_MAX_LEN (SDRAM_BANK_LEN * SDRAM_BANK_COUNT)
struct mem_static_map_entry mem_static_map_entries[] = {
{
MEM_CACHED_BASE, /* cached */
SDRAM_BASE, /* uncached */
SDRAM_BASE, /* physical */
SDRAM_MAX_LEN /* length */
},
{MAP_NO_ENTRY, MAP_NO_ENTRY, MAP_NO_ENTRY, 0}
};
void platform_mmu_setup(bool resume)
{
if (false == resume) {
/* Note: sharing settings aren't critical, as SCC doesn't see the AxUSER bits
* and the AxCACHE widget does all the heavy lifting. */
/* Remap text base to zero, outer uncacheable, shared */
arm_mmu_map_section(0, TEXT_BASE, kARMMMUInnerNormalOuterNoncached, true);
/* Remap all of SDRAM through the cacheable aperture, outer uncacheable, shared */
arm_mmu_map_section_range(MEM_CACHED_BASE, SDRAM_BASE, ROUNDUP(SDRAM_BANK_LEN * SDRAM_BANK_COUNT, MB)/MB,
kARMMMUInnerNormalOuterNoncached, true, false);
/* Remap all of SDRAM through the uncacheable aperture (existing mappings should be there, but be sure) */
arm_mmu_map_section_range(SDRAM_BASE, SDRAM_BASE, ROUNDUP(SDRAM_BANK_LEN * SDRAM_BANK_COUNT, MB)/MB,
kARMMMUStronglyOrdered, false, false);
}
}
bool platform_get_production_mode(void)
{
return(true);
}
bool platform_get_secure_mode(void)
{
return(true);
}
void platform_reset(bool panic)
{
for (;;)
;
}
/*
* Early init is done every time the IOP starts.
*/
int
platform_early_init()
{
#if PLATFORM_VARIANT_IOP
/* In general we want power-gating to be disabled. */
rPMGR_PWR_GATE_CTL_CLR = PMGR_PWR_GATE_IOP;
while (rPMGR_PWR_GATE_CTL_CLR & PMGR_PWR_GATE_IOP) ;
#endif
interrupt_init();
timer_init(0);
return(0);
}
/*
* Halt waiting for an interrupt.
*/
void
platform_halt(void)
{
arch_halt();
}
#if SUPPORT_SLEEP
#if WITH_IOP_POWER_GATING
/*
* Deep idle sleep with power gating
*/
void
platform_deep_idle(void)
{
rPMGR_PWR_GATE_CTL_SET = PMGR_PWR_GATE_IOP;
while (!(rPMGR_PWR_GATE_CTL_SET & PMGR_PWR_GATE_IOP)) ;
a5iop_sleep(1);
rPMGR_PWR_GATE_CTL_CLR = PMGR_PWR_GATE_IOP;
while (rPMGR_PWR_GATE_CTL_CLR & PMGR_PWR_GATE_IOP) ;
}
#endif
void
platform_sleep(void)
{
/* We assume power-gating is disabled, which it need to be so
* the IOP wrapper registers don't disappear. */
a5iop_sleep(0);
}
#endif
/*
* Cache control
*/
void
platform_cache_operation(int operation, void *address, u_int32_t length)
{
/* Wrap the operation with interrupt disable to avoid
* reentrance (while allowing the low-level cacheop function
* to be used without bumping the IRQ disable level) */
enter_critical_section();
a5iop_cache_operation(operation, address, length);
exit_critical_section();
}
/*
* Host doorbell uses a SWI in the AIC.
*/
static void (* _doorbell_handler)(void *arg);
static void
platform_doorbell_handler(void *arg)
{
/* clear the doorbell before passing up */
interrupt_clear_ipc(INT_IOP);
_doorbell_handler(arg);
}
void
platform_init_iop_doorbell(void (* handler)(void *arg), void *arg)
{
_doorbell_handler = handler;
install_int_handler(INT_IOP, platform_doorbell_handler, arg);
set_int_type(INT_IOP, INT_TYPE_IRQ | INT_TYPE_LEVEL);
unmask_int(INT_IOP);
}
void
platform_mask_doorbell(void)
{
mask_int(INT_IOP);
}
void
platform_unmask_doorbell(void)
{
unmask_int(INT_IOP);
}
void
platform_ring_host_doorbell(void)
{
interrupt_generate_ipc(INT_HOST);
}
int
platform_init_nmi(void (*handler)(void *arg), void *arg)
{
#ifdef INT_IOP_NMI
install_int_handler(INT_IOP_NMI, handler, arg);
set_int_type(INT_IOP_NMI, INT_TYPE_FIQ | INT_TYPE_LEVEL);
unmask_int(INT_IOP_NMI);
#endif
return(0);
}
/*
* Clock management.
*
* Currently the IOP does none for this platform.
*/
void clock_gate(int device, bool enable)
{
}
+312
View File
@@ -0,0 +1,312 @@
/*
* Copyright (C) 2010-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.
*/
#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/hwclocks.h>
static void miu_configure_bridge(const u_int32_t *bridge_settings);
#define BRIDGE_SHIFT (16)
#define BRIDGE_MASK (0xFFFF)
#define NRT_DART_WIDGETS (0 << BRIDGE_SHIFT)
#define NRT_DART_BRIDGE (1 << BRIDGE_SHIFT)
#define NRT_TOP_WIDGETS (2 << BRIDGE_SHIFT)
#define NRT_TOP_BRIDGE (3 << BRIDGE_SHIFT)
#define RT_TOP_WIDGETS (4 << BRIDGE_SHIFT)
#define RT_TOP_BRIDGE (5 << BRIDGE_SHIFT)
#define UPERF_WIDGETS (6 << BRIDGE_SHIFT)
#define UPERF_BRIDGE (7 << BRIDGE_SHIFT)
#define CDIO_WIDGETS (8 << BRIDGE_SHIFT)
#define CDIO_BRIDGE (9 << BRIDGE_SHIFT)
static const u_int32_t bridge_registers[] = {
NRT_DART_WIDGETS_BASE_ADDR, NRT_DART_PL301_BASE_ADDR,
NRT_TOP_WIDGETS_BASE_ADDR, NRT_TOP_PL301_BASE_ADDR,
RT_TOP_WIDGETS_BASE_ADDR, RT_TOP_PL301_BASE_ADDR,
UPERF_WIDGETS_BASE_ADDR, UPERF_PL301_BASE_ADDR,
CDIO_WIDGETS_BASE_ADDR, CDIO_PL301_BASE_ADDR,
};
#if APPLICATION_SECUREROM || (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
// The following settings are based on H5P/Bali Tunables Revision 0.46
static const u_int32_t bridge_settings_static[] = {
// Configure recommended transaction limits in CDIO
CDIO_WIDGETS | CDIO_IOP_RRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_IOP_WRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_IOP_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_IOP_WTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_CDMA_RRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_CDMA_WRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_CDMA_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_CDMA_WTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_UPERF_RRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_UPERF_WRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_UPERF_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_UPERF_WTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_AUDIO_RRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_AUDIO_WRLIMIT, 0x00000000,
CDIO_WIDGETS | CDIO_AUDIO_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_AUDIO_WTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_PIO_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_PIO_WTLIMIT, 0x00000404,
CDIO_WIDGETS | CDIO_CIM_RTLIMIT, 0x00003F3F,
CDIO_WIDGETS | CDIO_CIM_WTLIMIT, 0x00000F0F,
// Configure recommended bridge settings in CDIO
CDIO_BRIDGE | CDIO_AR_CHAN_ARB_MI0, 0x00000000,
CDIO_BRIDGE | CDIO_AW_CHAN_ARB_MI0, 0x00000000,
CDIO_BRIDGE | CDIO_AR_CHAN_ARB_MI1, 0x00000000,
CDIO_BRIDGE | CDIO_AW_CHAN_ARB_MI1, 0x00000000,
// Configure recommended features in CDIO
CDIO_WIDGETS | CDIO_IOP_WGATHER, 0x00000100,
CDIO_WIDGETS | CDIO_IOP_RC_REMAP(0), 0xffffbbbb,
CDIO_WIDGETS | CDIO_IOP_RC_REMAP(1), 0xfedcba98,
CDIO_WIDGETS | CDIO_IOP_RC_REMAP(2), 0xffffbbbb,
CDIO_WIDGETS | CDIO_IOP_RC_REMAP(3), 0xfedcba98,
CDIO_WIDGETS | CDIO_IOP_WC_REMAP(0), 0x76767676,
CDIO_WIDGETS | CDIO_IOP_WC_REMAP(1), 0xfedcfedc,
CDIO_WIDGETS | CDIO_IOP_WC_REMAP(2), 0x76767676,
CDIO_WIDGETS | CDIO_IOP_WC_REMAP(3), 0xfedcfedc,
CDIO_WIDGETS | CDIO_IOP_C_REMAP_EN, 0x00000003,
CDIO_WIDGETS | CDIO_CDMA_WGATHER, 0x00000100,
CDIO_WIDGETS | CDIO_UPERF_WGATHER, 0x00000100,
CDIO_WIDGETS | CDIO_AUDIO_WGATHER, 0x00000100,
// Configure recommended traffic attributes in UPERF
// AxCACHE = Cacheable
// AxUSER = enable Shared bit
UPERF_WIDGETS | UPERF_OTG_QOS, 0x01010101,
UPERF_WIDGETS | UPERF_OTG_CACHE, 0x0107010B,
UPERF_WIDGETS | UPERF_EHCI_QOS, 0x01010101,
UPERF_WIDGETS | UPERF_EHCI_CACHE, 0x0107010B,
UPERF_WIDGETS | UPERF_OHCI0_QOS, 0x01010101,
UPERF_WIDGETS | UPERF_OHCI0_CACHE, 0x0107010B,
UPERF_WIDGETS | UPERF_OHCI1_QOS, 0x01010101,
UPERF_WIDGETS | UPERF_OHCI1_CACHE, 0x0107010B,
UPERF_WIDGETS | UPERF_USB2HOST1EHCI_QOS, 0x01010101,
UPERF_WIDGETS | UPERF_USB2HOST1EHCI_CACHE, 0x0107010B,
// Configure recommended bridge settings in UPERF
UPERF_BRIDGE | UPERF_RTLIMIT, 0x00000404,
UPERF_BRIDGE | UPERF_WTLIMIT, 0x00000404,
0, 0,
0, 0
};
#endif // APPLICATION_SECUREROM || (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
#if WITH_DEVICETREE || (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
static const u_int32_t bridge_settings_dynamic[] = {
// Configure recommended transaction limits in HPerf-NRT DART
NRT_DART_WIDGETS | HPERF_NRT_DART_DART_RTLIMIT, 0x00003F3F,
NRT_DART_WIDGETS | HPERF_NRT_DART_DART_WTLIMIT, 0x00003F3F,
NRT_DART_WIDGETS | HPERF_NRT_DART_SCALER0_RTLIMIT, 0x00000707,
NRT_DART_WIDGETS | HPERF_NRT_DART_SCALER0_WTLIMIT, 0x00000404,
NRT_DART_WIDGETS | HPERF_NRT_DART_SCALER1_RTLIMIT, 0x00000707,
NRT_DART_WIDGETS | HPERF_NRT_DART_SCALER1_WTLIMIT, 0x00000404,
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG0_RTLIMIT, 0x00003F3F,
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG0_WTLIMIT, 0x00003F3F,
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG1_RTLIMIT, 0x00003F3F,
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG1_WTLIMIT, 0x00003F3F,
// Configure recommended bridge settings in HPerf-NRT DART
NRT_DART_BRIDGE | HPERF_NRT_DART_AR_CHAN_ARB_MI, 0x00000000, // JPEG0 High Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AR_CHAN_ARB_MI, 0x01000001, // JPEG1 High Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AR_CHAN_ARB_MI, 0x02000002, // Scaler0 Reduced Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AR_CHAN_ARB_MI, 0x03000003, // Sclaer1 Reduced Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AW_CHAN_ARB_MI, 0x00000000, // JPEG0 High Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AW_CHAN_ARB_MI, 0x01000001, // JPEG1 High Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AW_CHAN_ARB_MI, 0x02000002, // Scaler0 Reduced Priority
NRT_DART_BRIDGE | HPERF_NRT_DART_AW_CHAN_ARB_MI, 0x03000003, // Sclaer1 Reduced Priority
// Configure recommended bridge settings in HPerf-NRT DART
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG0_QOS, 0x01010101, // JPEG0 LLT Traffic for R&W
NRT_DART_WIDGETS | HPERF_NRT_DART_JPEG1_QOS, 0x01010101, // JPEG1 LLT Traffic for R&W
0, 0,
// Configure recommended transaction limits in HPerf-NRT Top
NRT_TOP_WIDGETS | HPERF_NRT_TOP_TOP_RTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_TOP_WTLIMIT, 0x00000F0F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_VENC_RTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_VENC_WTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_VDEC_RTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_VDEC_WTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_AUX_RTLIMIT, 0x00003F3F,
NRT_TOP_WIDGETS | HPERF_NRT_TOP_AUX_WTLIMIT, 0x00003F3F,
// Configure recommended bridge settings in HPerf-NRT Top
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AR_CHAN_ARB_MI, 0x00000000,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AR_CHAN_ARB_MI, 0x01000001,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AR_CHAN_ARB_MI, 0x02000002,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AR_CHAN_ARB_MI, 0x03000003,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AW_CHAN_ARB_MI, 0x00000000,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AW_CHAN_ARB_MI, 0x01000001,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AW_CHAN_ARB_MI, 0x02000002,
NRT_TOP_BRIDGE | HPERF_NRT_TOP_AW_CHAN_ARB_MI, 0x03000003,
// Configure recommended features in HPerf-NRT Top
NRT_TOP_WIDGETS | HPERF_NRT_TOP_AUX_WGATHER, 0x00000100,
0, 0,
// Configure recommended transaction limits in HPerf-RT Top
RT_TOP_WIDGETS | HPERF_RT_TOP_DISP0_RTLIMIT, 0x00003F3F,
RT_TOP_WIDGETS | HPERF_RT_TOP_DISP1_RTLIMIT, 0x00001818,
RT_TOP_WIDGETS | HPERF_RT_TOP_ISP_RTLIMIT, 0x00003F3F,
RT_TOP_WIDGETS | HPERF_RT_TOP_ISP_WTLIMIT, 0x00003F3F,
RT_TOP_WIDGETS | HPERF_RT_TOP_TOP_RTLIMIT, 0x00003F3F,
RT_TOP_WIDGETS | HPERF_RT_TOP_TOP_WTLIMIT, 0x00000F0F,
// Configure recommended bridge settings in HPerf-RT Top
RT_TOP_BRIDGE | HPERF_RT_TOP_AR_CHAN_ARB_MI, 0x00000000,
RT_TOP_BRIDGE | HPERF_RT_TOP_AW_CHAN_ARB_MI, 0x00000000,
0, 0,
0, 0
};
#endif // WITH_DEVICETREE || (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
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_SECUREROM || (APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC)
// Configure bridges that are statically powered
clock_gate(CLK_UPERF, true);
miu_configure_bridge(bridge_settings_static);
clock_gate(CLK_UPERF, false);
#endif
#if APPLICATION_IBOOT && !PRODUCT_IBOOT && !PRODUCT_IBEC
// Configure bridges that are dynamically powered
clock_gate(CLK_HPERFNRT, true);
clock_gate(CLK_HPERFRT, true);
miu_configure_bridge(bridge_settings_dynamic);
clock_gate(CLK_HPERFNRT, false);
clock_gate(CLK_HPERFRT, false);
#endif
/* remap whatever bank of ram we're in to zero */
if (TEXT_BASE == SRAM_BASE)
miu_select_remap(REMAP_SRAM);
else if ((TEXT_BASE >= SDRAM_BASE) && (TEXT_BASE < SDRAM_END))
miu_select_remap(REMAP_SDRAM);
return 0;
}
static void miu_configure_bridge(const u_int32_t *bridge_settings)
{
volatile u_int32_t *reg;
u_int32_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] >> BRIDGE_SHIFT;
offset = bridge_settings[cnt] & BRIDGE_MASK;
data = bridge_settings[cnt + 1];
reg = (volatile u_int32_t *)(bridge_registers[bridge] + offset);
*reg = data;
cnt += 2;
}
cnt += 2;
}
}
void miu_suspend(void)
{
/* nothing required for suspend */
}
int miu_initialize_dram(bool resume)
{
#if APPLICATION_IBOOT && WITH_HW_AMC
mcu_initialize_dram(resume);
#endif
return 0;
}
void miu_select_remap(enum remap_select sel)
{
u_int32_t tmp;
switch (sel) {
case REMAP_SRAM:
tmp = miu_read_l2cadrmap() & ~3;
tmp |= 1; // RemapMode = 1 (L2C RAM)
miu_write_l2cadrmap(tmp);
break;
case REMAP_SDRAM:
tmp = miu_read_l2cadrmap() & ~3;
tmp |= 2; // RemapMode = 2 (MEM)
miu_write_l2cadrmap(tmp);
break;
}
}
void miu_bypass_prep(int step)
{
#if APPLICATION_IBOOT && WITH_HW_AMC
extern void mcu_bypass_prep(int step);
mcu_bypass_prep(step);
#endif
}
#if WITH_DEVICETREE
void miu_update_device_tree(DTNode *pmgr_node)
{
uint32_t propSize;
char *propName;
void *propData;
// Fill in the bridge-settings property
propName = "bridge-settings";
if (FindProperty(pmgr_node, &propName, &propData, &propSize)) {
if (propSize < sizeof(bridge_settings_dynamic)) {
panic("miu_update_device_tree: bridge-settings property is too small (0x%x)", propSize);
}
memcpy(propData, bridge_settings_dynamic, sizeof(bridge_settings_dynamic));
}
}
#endif
+15
View File
@@ -0,0 +1,15 @@
# Copyright (C) 2010 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
+17
View File
@@ -0,0 +1,17 @@
# Copyright (C) 2010 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
+124
View File
@@ -0,0 +1,124 @@
# Copyright (C) 2010-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.
#
LOCAL_DIR := $(GET_LOCAL_DIR)
GLOBAL_INCLUDES += $(LOCAL_DIR)/include
# modules implied by this platform
MODULES += \
platform/defaults \
platform/generic \
arch/$(ARCH)
##############################################################################
# Code running on the main CPU
#
ifeq ($(PLATFORM_VARIANT),)
ARM_CPU := apple-swift
# Devmap chip ID based on sub-platform identifier
ifeq ($(SUB_PLATFORM),s5l8955x)
DEVMAP_CHIP_ID := 8955
endif
MAX_DFU_SIZE := 393216
ifeq ($(TEXT_BANK),srom)
TEXT_BASE := 0x00000000
endif
ifeq ($(TEXT_BANK),sram)
TEXT_BASE := 0x10000000
endif
ifeq ($(TEXT_BANK),sdram)
TEXT_BASE := 0xBFF00000
endif
OPTIONS += \
AIC_CPU_ID=0 \
WITH_CLASSIC_SUSPEND_TO_RAM=1 \
WITH_LEGACY_PANIC_LOGS=1 \
WITH_NO_RANDOM_HEAP_COOKIE=1 \
WITH_NO_RANDOM_STACK_COOKIE=1 \
WITH_NON_COHERENT_DMA=1 \
WITH_ROM_TRAMPOLINE=1 \
PLATFORM_ENTROPY_RATIO=200 \
PLATFORM_IRQ_COUNT=192 \
PLATFORM_START_FUNCTION=_platform_start \
TEXT_BASE="$(TEXT_BASE)" \
TEXT_FOOTPRINT="$(TEXT_FOOTPRINT)"
# L2_CACHE_SIZE=1048576 \
#
GLOBAL_LDFLAGS += \
-seg1addr $(TEXT_BASE)
ifeq ($(APPLICATION),SecureROM)
# This selects the start of the DATA segment and the end of the INSECURE_MEMORY area
DATA_BASE := 0x10060000
OPTIONS += \
DATA_BASE="$(DATA_BASE)"
GLOBAL_LDFLAGS += \
-segaddr __DATA $(DATA_BASE)
endif
ALL_OBJS += \
$(LOCAL_DIR)/asm.o \
$(LOCAL_DIR)/init.o
endif
##############################################################################
# Code running on the IOP
#
ifeq ($(PLATFORM_VARIANT),IOP)
OPTIONS += \
PLATFORM_VARIANT_IOP=1 \
AIC_CPU_ID=2 \
WITH_PLATFORM_HALT=1 \
SUPPORT_SLEEP=1 \
WITH_IOP_POWER_GATING=1 \
DEEP_IDLE_THRESHOLD_US=10000
ARM_CPU := cortex-a5
TEXT_BASE := 0x0
OPTIONS += \
TEXT_BASE="$(TEXT_BASE)"
ALL_OBJS += $(LOCAL_DIR)/iop_init.o
endif
##############################################################################
# Code running on the audio engine
#
ifeq ($(PLATFORM_VARIANT),Audio)
OPTIONS += \
PLATFORM_VARIANT_AUDIO=1 \
WITH_PLATFORM_HALT=1 \
SUPPORT_SLEEP=1
ARM_CPU := cortex-a5
TEXT_BASE := 0x0
OPTIONS += \
TEXT_BASE="$(TEXT_BASE)" \
TEXT_FOOTPRINT="$(TEXT_FOOTPRINT)"
ALL_OBJS += $(LOCAL_DIR)/iop_init.o
endif