FlashDevice.py revision 10801
110801Srene.dejong@arm.com# Copyright (c) 2013-2015 ARM Limited 210801Srene.dejong@arm.com# All rights reserved. 310801Srene.dejong@arm.com# 410801Srene.dejong@arm.com# The license below extends only to copyright in the software and shall 510801Srene.dejong@arm.com# not be construed as granting a license to any other intellectual 610801Srene.dejong@arm.com# property including but not limited to intellectual property relating 710801Srene.dejong@arm.com# to a hardware implementation of the functionality of the software 810801Srene.dejong@arm.com# licensed hereunder. You may use the software subject to the license 910801Srene.dejong@arm.com# terms below provided that you ensure that this notice is replicated 1010801Srene.dejong@arm.com# unmodified and in its entirety in all distributions of the software, 1110801Srene.dejong@arm.com# modified or unmodified, in source code or in binary form. 1210801Srene.dejong@arm.com# 1310801Srene.dejong@arm.com# Redistribution and use in source and binary forms, with or without 1410801Srene.dejong@arm.com# modification, are permitted provided that the following conditions are 1510801Srene.dejong@arm.com# met: redistributions of source code must retain the above copyright 1610801Srene.dejong@arm.com# notice, this list of conditions and the following disclaimer; 1710801Srene.dejong@arm.com# redistributions in binary form must reproduce the above copyright 1810801Srene.dejong@arm.com# notice, this list of conditions and the following disclaimer in the 1910801Srene.dejong@arm.com# documentation and/or other materials provided with the distribution; 2010801Srene.dejong@arm.com# neither the name of the copyright holders nor the names of its 2110801Srene.dejong@arm.com# contributors may be used to endorse or promote products derived from 2210801Srene.dejong@arm.com# this software without specific prior written permission. 2310801Srene.dejong@arm.com# 2410801Srene.dejong@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2510801Srene.dejong@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2610801Srene.dejong@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2710801Srene.dejong@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2810801Srene.dejong@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2910801Srene.dejong@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3010801Srene.dejong@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3110801Srene.dejong@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3210801Srene.dejong@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3310801Srene.dejong@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3410801Srene.dejong@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3510801Srene.dejong@arm.com# 3610801Srene.dejong@arm.com# Authors: Rene de Jong 3710801Srene.dejong@arm.com# 3810801Srene.dejong@arm.com 3910801Srene.dejong@arm.comfrom m5.params import * 4010801Srene.dejong@arm.comfrom m5.proxy import * 4110801Srene.dejong@arm.comfrom AbstractNVM import * 4210801Srene.dejong@arm.com 4310801Srene.dejong@arm.com#Distribution of the data. 4410801Srene.dejong@arm.com#sequential: sequential (address n+1 is likely to be on the same plane as n) 4510801Srene.dejong@arm.com#Random: @TODO Not yet implemented 4610801Srene.dejong@arm.com#stripe: striping over all the planes 4710801Srene.dejong@arm.comclass DataDistribution(Enum): vals = ['sequential', 'stripe'] 4810801Srene.dejong@arm.com 4910801Srene.dejong@arm.comclass FlashDevice(AbstractNVM): 5010801Srene.dejong@arm.com type = 'FlashDevice' 5110801Srene.dejong@arm.com cxx_header = "dev/arm/flash_device.hh" 5210801Srene.dejong@arm.com # default blocksize is 128 kB.This seems to be the most common size in 5310801Srene.dejong@arm.com # mobile devices (not the image blocksize) 5410801Srene.dejong@arm.com blk_size = Param.MemorySize("128kB", "Size of one disk block") 5510801Srene.dejong@arm.com # disk page size is 2 kB. This is the most commonly used page size in 5610801Srene.dejong@arm.com # flash devices 5710801Srene.dejong@arm.com page_size = Param.MemorySize("2kB", "Size of one disk page") 5810801Srene.dejong@arm.com # There are many GC flavours. It is impossible to cover them all; this 5910801Srene.dejong@arm.com # parameter enables the approximation of different GC algorithms 6010801Srene.dejong@arm.com GC_active = Param.Percent(50, "Percentage of the time (in whole numbers) \ 6110801Srene.dejong@arm.com that the GC is activated if a block is full") 6210801Srene.dejong@arm.com # Access latencies. Different devices will have different latencies, but 6310801Srene.dejong@arm.com # the latencies will be around the default values. 6410801Srene.dejong@arm.com read_lat = Param.Latency("25us", "Read Latency") 6510801Srene.dejong@arm.com write_lat = Param.Latency("200us", "Write Latency") 6610801Srene.dejong@arm.com erase_lat = Param.Latency("1500us", "Erase Delay") 6710801Srene.dejong@arm.com # Number of planes ought to be a power of two according to ONFI standard 6810801Srene.dejong@arm.com num_planes = Param.UInt32(1, "Number of planes per die") 6910801Srene.dejong@arm.com # Data distribution. Default is none. It is adviced to switch to stripe 7010801Srene.dejong@arm.com # when more than one plane is used. 7110801Srene.dejong@arm.com data_distribution = Param.DataDistribution('sequential', "Distribution \ 7210801Srene.dejong@arm.com of the data in the adress table; Stripe needed for multiple\ 7310801Srene.dejong@arm.com planes; otherwise use: sequential") 7410801Srene.dejong@arm.com 75