112266Sradhika.jagtap@arm.com/* 212266Sradhika.jagtap@arm.com * Copyright (c) 2012-2014, TU Delft 312266Sradhika.jagtap@arm.com * Copyright (c) 2012-2014, TU Eindhoven 412266Sradhika.jagtap@arm.com * Copyright (c) 2012-2016, TU Kaiserslautern 512266Sradhika.jagtap@arm.com * All rights reserved. 612266Sradhika.jagtap@arm.com * 712266Sradhika.jagtap@arm.com * Redistribution and use in source and binary forms, with or without 812266Sradhika.jagtap@arm.com * modification, are permitted provided that the following conditions are 912266Sradhika.jagtap@arm.com * met: 1012266Sradhika.jagtap@arm.com * 1112266Sradhika.jagtap@arm.com * 1. Redistributions of source code must retain the above copyright 1212266Sradhika.jagtap@arm.com * notice, this list of conditions and the following disclaimer. 1312266Sradhika.jagtap@arm.com * 1412266Sradhika.jagtap@arm.com * 2. Redistributions in binary form must reproduce the above copyright 1512266Sradhika.jagtap@arm.com * notice, this list of conditions and the following disclaimer in the 1612266Sradhika.jagtap@arm.com * documentation and/or other materials provided with the distribution. 1712266Sradhika.jagtap@arm.com * 1812266Sradhika.jagtap@arm.com * 3. Neither the name of the copyright holder nor the names of its 1912266Sradhika.jagtap@arm.com * contributors may be used to endorse or promote products derived from 2012266Sradhika.jagtap@arm.com * this software without specific prior written permission. 2112266Sradhika.jagtap@arm.com * 2212266Sradhika.jagtap@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 2312266Sradhika.jagtap@arm.com * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2412266Sradhika.jagtap@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 2512266Sradhika.jagtap@arm.com * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2612266Sradhika.jagtap@arm.com * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2712266Sradhika.jagtap@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2812266Sradhika.jagtap@arm.com * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2912266Sradhika.jagtap@arm.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 3012266Sradhika.jagtap@arm.com * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 3112266Sradhika.jagtap@arm.com * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3212266Sradhika.jagtap@arm.com * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3312266Sradhika.jagtap@arm.com * 3412266Sradhika.jagtap@arm.com * Authors: Subash Kannoth, Matthias Jung, Éder F. Zulian 3512266Sradhika.jagtap@arm.com * 3612266Sradhika.jagtap@arm.com */ 3712266Sradhika.jagtap@arm.com 3812266Sradhika.jagtap@arm.com#include "MemBankWiseParams.h" 3912266Sradhika.jagtap@arm.com 4012266Sradhika.jagtap@arm.comusing namespace Data; 4112266Sradhika.jagtap@arm.com/** 4212266Sradhika.jagtap@arm.com * Sets the default bankwise configurations. 4312266Sradhika.jagtap@arm.com */ 4412266Sradhika.jagtap@arm.comMemBankWiseParams::MemBankWiseParams(): 4512266Sradhika.jagtap@arm.com bwPowerFactRho(100), 4612266Sradhika.jagtap@arm.com bwPowerFactSigma(100), 4712266Sradhika.jagtap@arm.com bwMode(false), 4812266Sradhika.jagtap@arm.com flgPASR(false) 4912266Sradhika.jagtap@arm.com{ 5012266Sradhika.jagtap@arm.com} 5112266Sradhika.jagtap@arm.com/** 5212266Sradhika.jagtap@arm.com * Sets all the bankwise parameters required in bankwise mode 5312266Sradhika.jagtap@arm.com */ 5412266Sradhika.jagtap@arm.comMemBankWiseParams::MemBankWiseParams(int64_t factRho, int64_t factSigma, 5512266Sradhika.jagtap@arm.com bool hasPASR, int64_t pasrMode, 5612266Sradhika.jagtap@arm.com bool opMode, unsigned nbrofBanks) 5712266Sradhika.jagtap@arm.com{ 5812266Sradhika.jagtap@arm.com 5912266Sradhika.jagtap@arm.com bwPowerFactRho = factRho; 6012266Sradhika.jagtap@arm.com bwPowerFactSigma = factSigma; 6112266Sradhika.jagtap@arm.com bwMode = opMode; 6212266Sradhika.jagtap@arm.com flgPASR = hasPASR; 6312266Sradhika.jagtap@arm.com /////////////////////////////////////////////////////////// 6412266Sradhika.jagtap@arm.com // Activate banks for self refresh based on the PASR mode 6512266Sradhika.jagtap@arm.com // ACTIVE - X 6612266Sradhika.jagtap@arm.com // NOT ACTIVE - 0 6712266Sradhika.jagtap@arm.com /////////////////////////////////////////////////////////// 6812266Sradhika.jagtap@arm.com switch(pasrMode){ 6912266Sradhika.jagtap@arm.com 7012266Sradhika.jagtap@arm.com case(PASR_0):{ 7112266Sradhika.jagtap@arm.com // PASR MODE 0 7212266Sradhika.jagtap@arm.com // FULL ARRAY 7312266Sradhika.jagtap@arm.com // |X X X X | 7412266Sradhika.jagtap@arm.com // |X X X X | 7512266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks); 7612266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 0); 7712266Sradhika.jagtap@arm.com break; 7812266Sradhika.jagtap@arm.com } 7912266Sradhika.jagtap@arm.com case(PASR_1):{ 8012266Sradhika.jagtap@arm.com // PASR MODE 1 8112266Sradhika.jagtap@arm.com // (1/2) ARRAY 8212266Sradhika.jagtap@arm.com // |X X X X | 8312266Sradhika.jagtap@arm.com // |0 0 0 0 | 8412266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 4); 8512266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 0); 8612266Sradhika.jagtap@arm.com break; 8712266Sradhika.jagtap@arm.com } 8812266Sradhika.jagtap@arm.com case(PASR_2):{ 8912266Sradhika.jagtap@arm.com // PASR MODE 2 9012266Sradhika.jagtap@arm.com // (1/4) ARRAY 9112266Sradhika.jagtap@arm.com // |X X 0 0 | 9212266Sradhika.jagtap@arm.com // |0 0 0 0 | 9312266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 6); 9412266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 0); 9512266Sradhika.jagtap@arm.com break; 9612266Sradhika.jagtap@arm.com } 9712266Sradhika.jagtap@arm.com case(PASR_3):{ 9812266Sradhika.jagtap@arm.com // PASR MODE 3 9912266Sradhika.jagtap@arm.com // (1/8) ARRAY 10012266Sradhika.jagtap@arm.com // |X 0 0 0 | 10112266Sradhika.jagtap@arm.com // |0 0 0 0 | 10212266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 7); 10312266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 0); 10412266Sradhika.jagtap@arm.com break; 10512266Sradhika.jagtap@arm.com } 10612266Sradhika.jagtap@arm.com case(PASR_4):{ 10712266Sradhika.jagtap@arm.com // PASR MODE 4 10812266Sradhika.jagtap@arm.com // (3/4) ARRAY 10912266Sradhika.jagtap@arm.com // |0 0 X X | 11012266Sradhika.jagtap@arm.com // |X X X X | 11112266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 2); 11212266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 2); 11312266Sradhika.jagtap@arm.com break; 11412266Sradhika.jagtap@arm.com } 11512266Sradhika.jagtap@arm.com case(PASR_5):{ 11612266Sradhika.jagtap@arm.com // PASR MODE 5 11712266Sradhika.jagtap@arm.com // (1/2) ARRAY 11812266Sradhika.jagtap@arm.com // |0 0 0 0 | 11912266Sradhika.jagtap@arm.com // |X X X X | 12012266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 4); 12112266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 4); 12212266Sradhika.jagtap@arm.com break; 12312266Sradhika.jagtap@arm.com } 12412266Sradhika.jagtap@arm.com case(PASR_6):{ 12512266Sradhika.jagtap@arm.com // PASR MODE 6 12612266Sradhika.jagtap@arm.com // (1/4) ARRAY 12712266Sradhika.jagtap@arm.com // |0 0 0 0 | 12812266Sradhika.jagtap@arm.com // |0 0 X X | 12912266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 6); 13012266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 6); 13112266Sradhika.jagtap@arm.com break; 13212266Sradhika.jagtap@arm.com } 13312266Sradhika.jagtap@arm.com case(PASR_7):{ 13412266Sradhika.jagtap@arm.com // PASR MODE 7 13512266Sradhika.jagtap@arm.com // (1/8) ARRAY 13612266Sradhika.jagtap@arm.com // |0 0 0 0 | 13712266Sradhika.jagtap@arm.com // |0 0 0 X | 13812266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks - 7); 13912266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 7); 14012266Sradhika.jagtap@arm.com break; 14112266Sradhika.jagtap@arm.com } 14212266Sradhika.jagtap@arm.com default:{ 14312266Sradhika.jagtap@arm.com // PASR MODE 0 14412266Sradhika.jagtap@arm.com // FULL ARRAY 14512266Sradhika.jagtap@arm.com // |X X X X | 14612266Sradhika.jagtap@arm.com // |X X X X | 14712266Sradhika.jagtap@arm.com activeBanks.resize(nbrofBanks); 14812266Sradhika.jagtap@arm.com std::iota(activeBanks.begin(), activeBanks.end(), 0); 14912266Sradhika.jagtap@arm.com break; 15012266Sradhika.jagtap@arm.com } 15112266Sradhika.jagtap@arm.com } 15212266Sradhika.jagtap@arm.com} 15312266Sradhika.jagtap@arm.com 15412266Sradhika.jagtap@arm.com/** 15512266Sradhika.jagtap@arm.com * Returns true if the given bank is active under the current PASR mode. 15612266Sradhika.jagtap@arm.com */ 15712266Sradhika.jagtap@arm.combool MemBankWiseParams::isBankActiveInPasr(const unsigned bankIdx) const 15812266Sradhika.jagtap@arm.com{ 15912266Sradhika.jagtap@arm.com return (std::find(activeBanks.begin(), activeBanks.end(), bankIdx) 16012266Sradhika.jagtap@arm.com != activeBanks.end()); 16112266Sradhika.jagtap@arm.com} 162