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 *
4113665Sandreas.sandberg@arm.com
4213665Sandreas.sandberg@arm.comfrom m5.objects.AbstractNVM import *
4310801Srene.dejong@arm.com
4410801Srene.dejong@arm.com#Distribution of the data.
4510801Srene.dejong@arm.com#sequential: sequential (address n+1 is likely to be on the same plane as n)
4610801Srene.dejong@arm.com#Random: @TODO Not yet implemented
4710801Srene.dejong@arm.com#stripe: striping over all the planes
4810801Srene.dejong@arm.comclass DataDistribution(Enum): vals = ['sequential', 'stripe']
4910801Srene.dejong@arm.com
5010801Srene.dejong@arm.comclass FlashDevice(AbstractNVM):
5110801Srene.dejong@arm.com    type = 'FlashDevice'
5210801Srene.dejong@arm.com    cxx_header = "dev/arm/flash_device.hh"
5310801Srene.dejong@arm.com    # default blocksize is 128 kB.This seems to be the most common size in
5410801Srene.dejong@arm.com    # mobile devices (not the image blocksize)
5510801Srene.dejong@arm.com    blk_size = Param.MemorySize("128kB", "Size of one disk block")
5610801Srene.dejong@arm.com    # disk page size is 2 kB. This is the most commonly used page size in
5710801Srene.dejong@arm.com    # flash devices
5810801Srene.dejong@arm.com    page_size = Param.MemorySize("2kB", "Size of one disk page")
5910801Srene.dejong@arm.com    # There are many GC flavours. It is impossible to cover them all; this
6010801Srene.dejong@arm.com    # parameter enables the approximation of different GC algorithms
6110801Srene.dejong@arm.com    GC_active = Param.Percent(50, "Percentage of the time (in whole numbers) \
6210801Srene.dejong@arm.com        that the GC is activated if a block is full")
6310801Srene.dejong@arm.com    # Access latencies. Different devices will have different latencies, but
6410801Srene.dejong@arm.com    # the latencies will be around the default values.
6510801Srene.dejong@arm.com    read_lat = Param.Latency("25us", "Read Latency")
6610801Srene.dejong@arm.com    write_lat = Param.Latency("200us", "Write Latency")
6710801Srene.dejong@arm.com    erase_lat = Param.Latency("1500us", "Erase Delay")
6810801Srene.dejong@arm.com    # Number of planes ought to be a power of two according to ONFI standard
6910801Srene.dejong@arm.com    num_planes = Param.UInt32(1, "Number of planes per die")
7010801Srene.dejong@arm.com    # Data distribution. Default is none. It is adviced to switch to stripe
7110801Srene.dejong@arm.com    # when more than one plane is used.
7210801Srene.dejong@arm.com    data_distribution = Param.DataDistribution('sequential', "Distribution \
7310801Srene.dejong@arm.com        of the data in the adress table; Stripe needed for multiple\
7410801Srene.dejong@arm.com        planes; otherwise use: sequential")
7510801Srene.dejong@arm.com
76