iBoot/drivers/apple/h2fmi/H2fmi_timing.h

111 lines
2.3 KiB
C

// 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.
//
//
// Note: This file is intended to compile for an iBoot and x86 host target
#ifndef _H2FMI_TIMING_H_
#define _H2FMI_TIMING_H_
#include "WMRTypes.h"
#include "H2fmi_private.h"
#define CEIL_DIV(a,b) (((a)/(b)) + (((a) % (b)) ? 1 : 0))
#define PS_PER_NS (1000)
#define NS_PER_S ((UInt64)1000000000)
#define PS_PER_S ((UInt64)1000000000000)
typedef struct _NandRequiredTimings
{
UInt64 clock_hz;
Int32 soc_tx_prop_ns;
Int32 soc_rx_prop_ns;
BOOL32 edo_limit; // TRUE32 if using H2P/H2A/H3P for rdar://7063954
BOOL32 balance_write_cycle;
// -- Legacy only
Int32 soc_to_nand_rise_ns;
Int32 soc_to_nand_fall_ns;
Int32 nand_to_soc_rise_ns;
Int32 nand_to_soc_fall_ns;
// -- End Legacy only
Int32 tRC_ns;
Int32 tRP_ns;
Int32 tREH_ns;
Int32 tREA_ns;
Int32 tRHOH_ns;
Int32 tRLOH_ns;
Int32 tWC_ns;
Int32 tWP_ns;
Int32 tWH_ns;
#if SUPPORT_TOGGLE_NAND
UInt32 ddr_tRC_ps;
UInt32 ddr_tREH_ps;
UInt32 ddr_tRP_ps;
UInt32 tDSC_ps;
UInt32 tDQSH_ps;
UInt32 tDQSL_ps;
#endif
} NandRequiredTimings;
typedef struct _NandFmcSettings
{
UInt8 read_setup_clocks; // 0 is one cycle
UInt8 read_hold_clocks; // 0 is one cycle
UInt8 read_dccycle_clocks; // 0 means rising edge of /RE
UInt8 write_setup_clocks; // 0 is one cycle
UInt8 write_hold_clocks; // 0 is one cycle
#if SUPPORT_TOGGLE_NAND
UInt8 ddr_half_cycle_clocks;
UInt8 read_pre_clocks;
UInt8 read_post_clocks;
UInt8 write_pre_clocks;
UInt8 write_post_clocks;
UInt8 ce_setup_clocks;
UInt8 ce_hold_clocks;
UInt8 adl_clocks;
UInt8 whr_clocks;
#endif
} NandFmcSettings;
BOOL32
NandRequirementToIFCTRL (
const NandRequiredTimings *required,
NandFmcSettings *actual
);
BOOL32
Legacy_NandRequirementToIFCTRL (
const NandRequiredTimings *required,
NandFmcSettings *actual
);
#if SUPPORT_TOGGLE_NAND
BOOL32
Toggle_NandRequirementToIFCTRL (
const NandRequiredTimings *required,
NandFmcSettings *actual
);
#endif
#endif // _H2FMI_TIMING_H_