Configuring CoreNet Platform Cache (CPC) as SRAM For Use by Linux Applications



Similar documents
How to Run the MQX RTOS on Various RAM Memories for i.mx 6SoloX

Production Flash Programming Best Practices for Kinetis K- and L-series MCUs

USB to SPI Device Driver Installation Instructions

etpu Host Interface by:

QorIQ espi Controller Register Setting Considerations and Programming Examples

How To Improve Performance On A P4080 Processor

MPR121 Serial Communication

MCF54418 NAND Flash Controller

OpenSPARC T1 Processor

Installing Service Pack Updater Archive for CodeWarrior Tools (Windows and Linux) Quick Start

PowerQUICC II Pro (MPC83xx) PCI Agent Initialization

Understanding LCD Memory and Bus Bandwidth Requirements ColdFire, LCD, and Crossbar Switch

Performance Monitor on PowerQUICC II Pro Processors

How To Build A Project On An Eclipse Powerbook For Anarc (Powerbook) On An Ipa (Powerpoint) On A Microcontroller (Powerboard) On Microcontrollers (Powerstation) On Your Microcontroller 2 (Powerclock

Installing Service Pack Updater Archive for CodeWarrior Tools (Windows and Linux) Quick Start

Bandwidth Calculations for SA-1100 Processor LCD Displays

UART Boot Loader Design on the Kinetis E Series

76-77 GHz RF Transmitter Front-end for W-band Radar Applications

Building and Debugging a project using Keil MDK-ARM Eclipse plug-in

How To Use A Watt Saver On A Microcontroller (Watt Saver) On A Cell Phone Or Mp3 Player

Measuring Cache and Memory Latency and CPU to Memory Bandwidth

White Paper. Freescale s Embedded Hypervisor for QorIQ P4 Series Communications Platform

Freescale MAC Security Setup

Initializing the TSEC Controller

The Freescale Embedded Hypervisor

Single Phase Two-Channel Interleaved PFC Operating in CrM

Data Movement Between Big-Endian and Little-Endian Devices

QorIQ T4 Family of Processors. Our highest performance processor family. freescale.com

TWR-KV31F120M Sample Code Guide for IAR Board configuration, software, and development tools Rev.0

Using the Performance Monitor Unit on the e200z760n3 Power Architecture Core

IRTC Compensation and 1 Hz Clock Generation

Hardware Configurations for the i.mx Family USB Modules

Simple Method of Changing the Frequency Range of a Power Amplifier Circuit

Have both hardware and software. Want to hide the details from the programmer (user).

Windows 7: Using USB TAP on a Classic CodeWarrior Installation (MGT V9.2 DSC V8.3)

Performance Analysis and Software Optimization on Systems Using the LAN91C111

Quick Start Guide. MRB-KW01 Development Platform Radio Utility Application Demo MODULAR REFERENCE BOARD

Software Real Time Clock Implementation on MC9S08LG32

MQX Lite Real-Time Operating System User Guide

AN10860_1. Contact information. NXP Semiconductors. LPC313x NAND flash data and bad block management

CodeWarrior Development Studio for Freescale S12(X) Microcontrollers Quick Start

AN LPC1700 timer triggered memory to GPIO data transfer. Document information. LPC1700, GPIO, DMA, Timer0, Sleep Mode

RF Power LDMOS Transistors Enhancement--Mode Lateral MOSFETs

Freescale MQX USB Device User Guide

White Paper Utilizing Leveling Techniques in DDR3 SDRAM Memory Interfaces

Buffer Management 5. Buffer Management

Intel Data Direct I/O Technology (Intel DDIO): A Primer >

Family 12h AMD Athlon II Processor Product Data Sheet

MPLAB TM C30 Managed PSV Pointers. Beta support included with MPLAB C30 V3.00

Flexible Active Shutter Control Interface using the MC1323x

i.mx28 Ethernet Performance on Linux

TECHNOLOGY BRIEF. Compaq RAID on a Chip Technology EXECUTIVE SUMMARY CONTENTS

Intel X38 Express Chipset Memory Technology and Configuration Guide

The Quest for Speed - Memory. Cache Memory. A Solution: Memory Hierarchy. Memory Hierarchy

AN LPC24XX external memory bus example. Document information

Intel Q35/Q33, G35/G33/G31, P35/P31 Express Chipset Memory Technology and Configuration Guide

Installation of the MMA955xL CodeWarrior Service Pack Author: Fengyi Li Application Engineer

COMPUTER HARDWARE. Input- Output and Communication Memory Systems

DDR Validation Tool User Guide

How To Control A Motor Control On An Hvac Platform

Performance Characteristics of VMFS and RDM VMware ESX Server 3.0.1

Binary search tree with SIMD bandwidth optimization using SSE

Intel 965 Express Chipset Family Memory Technology and Configuration Guide

Oracle Database Scalability in VMware ESX VMware ESX 3.5

Accelerating High-Speed Networking with Intel I/O Acceleration Technology

PAC52XX Clock Control Firmware Design

Scanning Comparator (ScanComp) Features. General Description. Input/Output Connections. When to Use a Scanning Comparator. clock - Digital Input* 1.

VxWorks Guest OS Programmer's Guide for Hypervisor 1.1, 6.8. VxWorks GUEST OS PROGRAMMER'S GUIDE FOR HYPERVISOR

Designing an Induction Cooker Using the S08PT Family

Eight Ways to Increase GPIB System Performance

CodeWarrior Development Studio Floating Licensing Quick Start

Programming Audio Applications in the i.mx21 MC9328MX21

I/O Device and Drivers

MPC8245/MPC8241 Memory Clock Design Guidelines: Part 1

SOC architecture and design

TCP Servers: Offloading TCP Processing in Internet Servers. Design, Implementation, and Performance

AVR32701: AVR32AP7 USB Performance. 32-bit Microcontrollers. Application Note. Features. 1 Introduction

Motorola 8- and 16-bit Embedded Application Binary Interface (M8/16EABI)

Qorivva MPC5643L Dual Processor Mode Mark Ruthenbeck Applications Engineering Microcontroller Solutions Group

Software and Support Activation. Quick Start Guide

Multi-Threading Performance on Commodity Multi-Core Processors

MLPPP in the Evolving Radio Access Network

Family 10h AMD Phenom II Processor Product Data Sheet

AMD PhenomII. Architecture for Multimedia System Prof. Cristina Silvano. Group Member: Nazanin Vahabi Kosar Tayebani

Software Datapath Acceleration for Stateless Packet Processing

MSC8156 and MSC8157 PCI Express Performance

Computer Systems Structure Main Memory Organization

AMD Opteron Quad-Core

Introduction to the NI Real-Time Hypervisor

Freescale Semiconductor, Inc. Product Brief Integrated Portable System Processor DragonBall ΤΜ

1. Memory technology & Hierarchy

Introduction to PCI Express Positioning Information

System Performance Analysis of an All Programmable SoC

73S1215F, 73S1217F Device Firmware Upgrade Host Driver/Application Development User s Guide April 27, 2009 Rev UG_12xxF_029

Intel StrongARM SA-110 Microprocessor

Developing an Application for the i.mx Devices on the Linux Platform

COLO: COarse-grain LOck-stepping Virtual Machine for Non-stop Service

HEF4011B. 1. General description. 2. Features and benefits. 3. Ordering information. 4. Functional diagram. Quad 2-input NAND gate

Transcription:

Freescale Semiconductor Document Number:AN4749 Application Note Rev 0, 07/2013 Configuring CoreNet Platform Cache (CPC) as SRAM For Use by Linux Applications 1 Introduction This document provides, with examples, software methods to configure the CoreNet Platform Cache (CPC) as very high performance SRAM for use by Linux applications. The CPC is a CoreNet-compliant target device that can serve as a general purpose write-back, an I/O stash, a memorymapped SRAM device, or any combination of these functions. As a general purpose cache, the CPC manages allocations and victimizations to reduce read latency and increase bandwidth for accesses to backing store (DRAM). As an I/O stash, the CPC can accept and allocate writes from an I/O device in order to reduce latency and improve bandwidth for multiple read operations to the same address. As an SRAM device, the CPC acts as a low-latency, high-bandwidth memory that occupies a programmable address range. Below, illustrative examples from the P4080 are discussed which demonstrate how to configure the CPC in both hardware and software. Finally, examples show methods for measuring performance benchmarking results. Readers should be familiar with the P4080 QorIQ Integrated Multicore Communication Processor Family Reference Manual. Contents 1 Introduction...1 2 Configuring the CPC SRAM in hardware...2 3 Modifying the Software configuration...2 4 Understanding the SRAM performance benchmark...5 5 Configuring a standalone Linux kernel....7 6 Revision history...8 2013 Freescale Semiconductor, Inc. Review Draft

Configuring the CPC SRAM in hardware 2 Configuring the CPC SRAM in hardware At a high level, the steps required to configure the CPC hardware are shown below: Step Table 1. USDPAA offloading applications Description 1 Use the SRAM mode registers to configure the CPC to use some of its (32) ways as a direct-mapped SRAM memory. 2 Enable the CPC's SRAM mode with the CPCSRCR0[SRAMEN] bit. 3 Control the size of the SRAM address space with the CPCSRCR0[SRAMSZ] bits. 4 Control the base address of the SRAM address space with the CPCSRCR0[SRBARL] and CPCSRCR1[SRBARU] bits. 5 Interleave SRAM address space on the same address boundary by setting the CPCSRCR0[INTLVEN] bit if DRAM addresses are interleaved using the DDR controller configuration registers. (If DDR addresses are not interleaved, SRAM address space cannot be interleaved.) NOTE SRAM interleaving requires that each CPC instance in the system that participates in interleaving be configured to use the same SRAM size and base address. Enabling SRAM interleaving effectively doubles the total SRAM address space. 2.1 Modifying the register settings for CPC SRAM mode Change the CPC SRAM control register 1 (CPCSRCR1) to modify the upper base address when the CPC is used as SRAM. The least significant 16 bits defines the SRAM physical address 16:31. Note that for each CPU core, it is 64 bits address width. But for SRAM, it can only be set up to 48 bits (0xffff_ffff_ffff) The CPC SRAM control register 0 (CPCSRCR0), configures the CPC when it is used as SRAM. The most significant 16 bits defines the SRAM physical address 32:48. This means that the SRAM base address can only be set at 32K boundary. Also, this register is used to configure SRAM size and interleaving mode. The least significant bit of the register is used to enable or disable SRAM mode. In addition to the registers described above, the SRAM/CACHE mode must be enabled using the CPC configuration and status register (CPCCSR0). 3 Modifying the Software configuration The CPC SRAM is designed for cases in which efficiency is critical. For example, for high-speed data loading and data storage and transfer. In the ideal case, SRAM throughput can be up to: CoreNet frequency * CoreNet data width For the P4080 SoC, this works out to 800MHz * 128 bits/sec. That said, real-world performance is limited by software and DMA performance. 2 Review Draft Freescale Semiconductor, Inc.

Modifying the Software configuration 3.1 Invoking the U-boot configuration The following shows how to use U-boot to enable the CPC to speed up image loads, decompression, etc. For Linux applications that require SRAM, one can configure the CPC as well as SRAM and as cache in U-boot. Example U-boot SRAM configuration code is shown here: /* Configure the SRAM upper base address */ out_be32(&cpc-> cpcsrcr1, CPC_SRCR1_SRBARU(SRAM_BASE_ADDRESS)); /* Configure the SRAM lower base address, SRAM size and enable SRAM mode */ out_be32(&cpc->cpcsrcr0, CPC_SRCR0_SRAMEN CPC_SRCR0_SRAMSZ_32_WAY CPC_SRCR0_SRBARL(SRAM_BASE_ADDRESS)); /*Enable the SRAM CS */ out_be32(&cpc->cpccsr0, CPC_CSR0_CE); /* Read the configuration to let it work */ in_be32(&cpc-> cpccsr0); /* Set the SRAM access window in memory address space */ law_idx = set_next_law(sram_base_address, LAW_SIZE_1M, LAW_TRGT_IF_DDR_1); /* Set a TLB1 entry for SRAM, it is not necessary in U-boot, just for test. SRAM TLB1 entry will be set in Linux eventually */ tlb_idx = find_free_tlbcam(); set_tlb(1, SRAM_VIRTUAL_BASE_ADDRESS, (u64) SRAM_BASE_ADDRESS, MAS3_SX MAS3_SW MAS3_SR, 0, 0, tlb_idx, BOOKE_PAGESZ_1M, 1); /* Set the other CPC chip as cache */ cpc++ out_be32(&cpc->cpccsr0, CPC_CSR0_CE CPC_CSR0_PE); in_be32(&cpc->cpccsr0); In the U-boot code above, SRAM is mapped to SRAM_BASE_ADDRESS, which is the physical base address defined by the user. It is suggested that the SRAM address not overlap with the DDR controller's region or any other devices' I/O region. U- boot can configure the SRAM base address and size using the hwconfig parameters. 3.2 Linux kernel configuration The SRAM's physical base address and size configured in U-boot must be passed to the Linux kernel as parameters. The sections that follow explain how the kernel allows applications to access SRAM. 3.2.1 mmap interface callback The QorIQ DPAA SDK includes a Linux SRAM device driver that provides an interface that lets application use the SRAM. An application calls this drivers' mmap interface to access the SRAM address space. In the mmap callback function, the function remap_pfn_range is called for the current user process to map its virtual address to SRAM physical address. However, translation lookaside buffer (TLB) entries for this mapping are not created. static int sram_mmap(struct file *file, struct vm_area_struct *vma) size_t size = vma->vm_end - vma->vm_start; Freescale Semiconductor, Inc. Review Draft 3

Modifying the Software configuration if (remap_pfn_range(vma, vma->vm_start, (sram_alloc_addr >> PAGE_SHIFT), size, vma->vm_page_prot)) printk("sram mmap error\r\n"); return -EAGAIN; 3.2.2 TLB miss exception handling An application can get a virtual address mapped to SRAM using the mmap system call. However, as stated above, a TLB entry for the mapping is not set up. Therefore, when you access a virtual address returned by mmap, a TLB miss exception is asserted. In the TLB miss exception interrupt service routine (ISR), the function shown below is called to set up a TLB1 entry for this virtual address to physical address translation. static inline void hook_sramcpc_tlb(struct vm_area_struct *vma, unsigned long address, pte_t *ptep) unsigned long pfn = pte_pfn(*ptep); if ((pfn < (sramcpc_pfn_start + sramcpc_pfn_len)) && (pfn >= sramcpc_pfn_start)) unsigned long va = address & ~(sramcpc_phys_size - 1); flush_tlb_mm(vma->vm_mm); settlbcam(usdpaa_tlbcam_index, va, sramcpc_phys_start, sramcpc_phys_size, pte_val(*ptep), 0); Consider an SMP Linux kernel running on an eight CPU core SoC in which each core has its own TLB and is running a single process. When a given process accesses SRAM, an SRAM address translation TLB1 entry is set up by the TLB miss exception ISR of the core on which this process is running. If a second process is spawned on this core and this process accesses SRAM, a TLB miss exception is not asserted. Instead, the address translation uses the TLB entry created when the first process accessed SRAM. 3.2.3 SRAM memory management All processes share the same SRAM space. Therefore we must break the SRAM into partitions so one process cannot overwrite data written by another. A 1 MB SRAM can be broken into 256 4KB blocks. We create a memory map to record memory use. When an application calls the mmap callback to allocate memory in the SRAM, this map is checked to determine if there is a sufficient contiguous memory to satisfy the request. If there is, the physical beginning address of the contiguous memory (sram_alloc_addr) is mapped to the application's virtual address. The virtual address returned to the application by mmap is BASE_VIRTUAL_ADDRESS + offset where BASE_VIRTUAL_ADDRESS is 0 and offset is the offset to the SRAM base address of the allocated blocks. Otherwise, an error is returned to notify the application that the operation failed. vma->vm_star= BASE_VIRTUAL_ADDRESS+4*1024*begin_blocks; vma->vm_end= vma->vm_star+4*1024*allocated_blocks; remap_pfn_range(vma, vma->vm_start, (sram_alloc_addr >> PAGE_SHIFT), size, vma->vm_page_prot); 4 Review Draft Freescale Semiconductor, Inc.

A process is allowed to acquire memory from the SRAM no more than ten times using the mmap interface. Further, before calling the mmap, the application should call ioctl to notify the kernel driver of the alloc ID of the SRAM memory block being acquired. When an SRAM memory block is no longer needed or before a process terminates, the process must call ioctl to free the memory, otherwise a memory leak results. The process ID and alloc ID are used to record memory usage in memory map. Understanding the SRAM performance benchmark 3.3 Using SRAM from a Linux application An application can access the SRAM via the normal driver interface, the mmap system call. When a block of SRAM is no longer needed, the application must call ioctl to free the memory. An application can also use ioctl to get the SRAM physical address for DMA operations. Shown below is typical code that manipulates SRAM: unsigned long long allocid=1; volatile unsigned int* temp_addr; fd = open(cpc_sram_path, O_RDWR); ret = ioctl(fd, CPCSRAM_IOCTL_ALLOC, &allocid); virt = mmap(0, 200*1024, PROT_READ PROT_WRITE,MAP_SHARED MAP_FIXED, fd, 0); temp_addr = (volatile unsigned int*)virt; *temp_addr= *temp_addr + 1; //access the SRAM allocid = 2; ret = ioctl(fd, CPCSRAM_IOCTL_ALLOC, &allocid); virt = mmap(0, 400*1024, PROT_READ PROT_WRITE,MAP_SHARED MAP_FIXED, fd, 0); temp_addr = (volatile unsigned int*)virt; *temp_addr = *temp_addr+10;//access the SRAM allocid = 1; ret = ioctl(fd, CPCSRAM_IOCTL_FREE, &allocid); allocid = 2; ret = ioctl(fd, CPCSRAM_IOCTL_FREE, &allocid); close(fd); 4 Understanding the SRAM performance benchmark In the ideal case, for a CoreNet running at a frequency of 800MHz with a data width of 128 bits, SRAM throughput is: 800 MHz * 128 bits/second However, this calculation does not take into consideration SRAM access wait-states. The DDR controller's working frequency is also 800 MHz, but considering the latency of preparing for 64-byte burst accesses and page open, DDR throughput is about half that of the SRAM throughput. 4.1 Software benchmark We cannot calculate SRAM bandwidth using software because it is extremely difficult to exclude the time consumed executing core instructions. However, it is easy to compare the throughputs of DDR memory and CPC SRAM. The code shown here makes this comparison: dcache_disable(); // L1 & L2 data cache disable for DDR and SRAM benchmark atbl0 = mfspr(526); atbu0 = mfspr(527); time_begin = (u64)atbu0; time_begin <<= 32; time_begin = time_begin (u64)atbl0; Freescale Semiconductor, Inc. Review Draft 5

Understanding the SRAM performance benchmark for( j = 0; j < 500; j++)//this loop is easy to test and compare temp=ddr_ptr; for( k = 0;k < (1024*256) / 16; k++) *(temp+0) = *(temp+1); *(temp+1) = *(temp+2); *(temp+14) = *(temp+15); *(temp+15) = *(temp+0); temp=temp+16; /* end inner loop */ /* end outer loop */ atbl1 = mfspr(526); atbu1 = mfspr(527); time_end = (u64)atbu1; time_end <<= 32; time_end = time_end (u64)atbl1; printf("soft DDR cycle expired:0x%llx\r\n", time_end-time_begin); atbl0 = mfspr(526); atbu0=mfspr(527); atbl0 = mfspr(526); atbu0=mfspr(527); time_begin = (u64)atbu0; time_begin <<= 32; time_begin = time_begin (u64)atbl0; for( j = 0; j < 500; j++) temp=sram_ptr; for( k = 0; k < (1024 * 256) / 16; k++) *(temp + 0) = *(temp + 1); *(temp + 1) = *(temp + 2); *(temp + 14) = *(temp + 15); *(temp + 15) = **(temp + 0); temp=temp+16; /* end inner loop */ /* end outer loop */ atbl1 = mfspr(526); atbu1 = mfspr(527); time_end = (u64)atbu1; time_end <<= 32; time_end = time_end (u64)atbl1; printf("soft SRAM cycle expired:0x%llx\r\n", time_end - time_begin); The test code's output proves that the SRAM efficiency is about twice that of DDR memory. soft DDR cycle expired: 0x23eea58e5 soft SRAM cycle expired: 0xfac014a2 4.2 DMA benchmark We cannot exploit the SRAM's superior performance when used for DMA transfers. This is because the OCN which connects the DMA engine has limited bandwidth and creates a bottleneck. As the test results show, the DMA-to-SRAM transfer performance is about the same as the DMA-to-DMA transfer. This limits application of SRAM a great deal. Here is the code for the DMA-to-SRAM and the DMA-to-DMA benchmarks: out_dma32(&dma->satr, FSL_DMA_SATR_SREAD_SNOOP); out_dma32(&dma->datr, FSL_DMA_DATR_DWRITE_SNOOP); out_dma32(&dma->sr, ffff_ffffh); /* clear any errors */ xfer_size = count; //MIN(FSL_DMA_MAX_SIZE, count); out_dma32(&dma->dar, (u32) (dest & FFFF_FFFFh)); out_dma32(&dma->sar, (u32) (src & FFFF_FFFFh)); 6 Review Draft Freescale Semiconductor, Inc.

out_dma32(&dma->satr,(in_dma32(&dma->satr)&ffff_fc00) (u32)((u64)src >> 32)); out_dma32(&dma->datr,in_dma32(&dma->datr) (u32)((u64)dest >> 32)); out_dma32(&dma->bcr, xfer_size); out_dma32(&dma->mr, FSL_DMA_MR_DEFAULT 0002_8000h); atbl0=mfspr(526);atbu0=mfspr(527); time_begin = (u64)atbu0; time_begin <= 32; time_begin = time_begin (u64)atbl0; out_dma32(&dma->mr, 0800_0000h FSL_DMA_MR_DEFAULT FSL_DMA_MR_CS 0002_8000h); do status = in_dma32(&dma->sr); while (status & FSL_DMA_SR_CB); out_dma32(&dma->mr, in_dma32(&dma->mr) & ~FSL_DMA_MR_CS); if (status!= 0) printf ("DMA Error: status = %x\n", status); return status; atbl1=mfspr(526);atbu1=mfspr(527); time_end = (u64)atbu1; time_end <<= 32; time_end = time_end (u64)atbl1; printf("hh: 00DMA test time expired:0x%11x\n",time_end-time_begin); Configuring a standalone Linux kernel. 5 Configuring a standalone Linux kernel. A CPC SRAM configuration for a standalone Linux kernel that does not depend on U-boot configuration has not been implemented. However, the sections that follow cover the basic concepts implementing a physical CPC SRAM configuration in a standalone Linux kernel. 5.1 Disable CPC configuration To reconfigure the CPC as SRAM, the CPC configuration should first be disabled. Table 2. Steps to disable CPC Step Action Description 1 Clear all bits of CPC ARn This prevents any new transactions from allocating CPC resources using a write operation. 2 Flush the CPC by performing a dcbf operation on each coherency granule mapped to the memory target (i.e. one dcbf for each 64 bytes. 3 Clear all lock bits by setting CPCCSR0[CPCLFC]. To do this, first read 2MB of contiguous memory in a loop. When this operation completes, the CPC cache lines are filled with this memory region. Then, in a loop, perform a dcbf operation on every 64 bytes to cover this entire memory region, thereby flushing the CPC. - Table continues on the next page... Freescale Semiconductor, Inc. Review Draft 7

Revision history Table 2. Steps to disable CPC (continued) Step Action Description 4 Wait for the hardware to clear CPCCSR0[CPCLFC] using a polling loop. 5 Disable the CPC by clearing CPCCSR0[CPCE]. - - 5.2 Reconfigure CPC as SRAM First, configure the CPC as SRAM in the same manner as described for U-boot above. However, when performing these steps during Linux kernel initialization the kernel halts after dcbf operations. This behavior remains to be analyzed and debugged. 6 Revision history This table summarizes revisions to this document. Table 3. Revision history Revision Date Description 0 07/2013 Initial public release. 8 Review Draft Freescale Semiconductor, Inc.

How to Reach Us: Home Page: freescale.com Web Support: freescale.com/support Information in this document is provided solely to enable system and software implementers to use Freescale products. There are no express or implied copyright licenses granted hereunder to design or fabricate any integrated circuits based on the information in this document. Freescale reserves the right to make changes without further notice to any products herein. Freescale makes no warranty, representation, or guarantee regarding the suitability of its products for any particular purpose, nor does Freescale assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. Typical parameters that may be provided in Freescale data sheets and/or specifications can and do vary in different applications, and actual performance may vary over time. All operating parameters, including typicals, must be validated for each customer application by customer's technical experts. Freescale does not convey any license under its patent rights nor the rights of others. Freescale sells products pursuant to standard terms and conditions of sale, which can be found at the following address: freescale.com/salestermsandconditions. Freescale, the Freescale logo, and QorIQ are trademarks of Freescale Semiconductor, Inc., Reg. U.S. Pat. & Tm. Off. CoreNet, is a trademark of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. The Power Architecture and Power.org word marks and the Power and Power.org logos and related marks are trademarks and service marks licensed by Power.org. 2013 Freescale Semiconductor, Inc. Document Number AN4749 Revision 0, 07/2013 Review Draft