110915Sandreas.sandberg@arm.com/*
211313Sandreas.sandberg@arm.com * Copyright (c) 2014-2016 ARM Limited
310915Sandreas.sandberg@arm.com * All rights reserved
410915Sandreas.sandberg@arm.com *
510915Sandreas.sandberg@arm.com * Licensed under the Apache License, Version 2.0 (the "License");
610915Sandreas.sandberg@arm.com * you may not use this file except in compliance with the License.
710915Sandreas.sandberg@arm.com * You may obtain a copy of the License at
810915Sandreas.sandberg@arm.com *
910915Sandreas.sandberg@arm.com *     http://www.apache.org/licenses/LICENSE-2.0
1010915Sandreas.sandberg@arm.com *
1110915Sandreas.sandberg@arm.com * Unless required by applicable law or agreed to in writing, software
1210915Sandreas.sandberg@arm.com * distributed under the License is distributed on an "AS IS" BASIS,
1310915Sandreas.sandberg@arm.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1410915Sandreas.sandberg@arm.com * See the License for the specific language governing permissions and
1510915Sandreas.sandberg@arm.com * limitations under the License.
1610915Sandreas.sandberg@arm.com *
1710915Sandreas.sandberg@arm.com * Authors: Andreas Sandberg
1810915Sandreas.sandberg@arm.com */
1910915Sandreas.sandberg@arm.com
2010915Sandreas.sandberg@arm.com#ifndef _LIBNOMALIMODEL_MMU_HH
2110915Sandreas.sandberg@arm.com#define _LIBNOMALIMODEL_MMU_HH
2210915Sandreas.sandberg@arm.com
2310915Sandreas.sandberg@arm.com#include <vector>
2410915Sandreas.sandberg@arm.com
2510915Sandreas.sandberg@arm.com#include "gpublock.hh"
2611313Sandreas.sandberg@arm.com#include "addrspace.hh"
2710915Sandreas.sandberg@arm.com#include "types.hh"
2810915Sandreas.sandberg@arm.com
2910915Sandreas.sandberg@arm.comnamespace NoMali {
3010915Sandreas.sandberg@arm.com
3110915Sandreas.sandberg@arm.comclass GPU;
3210915Sandreas.sandberg@arm.com
3310915Sandreas.sandberg@arm.com/**
3410915Sandreas.sandberg@arm.com * MMU dummy implementation.
3510915Sandreas.sandberg@arm.com *
3610915Sandreas.sandberg@arm.com * This is a dummy implementation of a Midgard GPU MMU block. The only
3710915Sandreas.sandberg@arm.com * features supported by the block is interrupt delivery and registers
3810915Sandreas.sandberg@arm.com * related to interrupt delivery. Writes to unimplemented registers
3910915Sandreas.sandberg@arm.com * (most registers) are discarded and their values are read as zero.
4010915Sandreas.sandberg@arm.com */
4110915Sandreas.sandberg@arm.comclass MMU
4210915Sandreas.sandberg@arm.com    : public GPUBlockInt
4310915Sandreas.sandberg@arm.com{
4410915Sandreas.sandberg@arm.com  public:
4510915Sandreas.sandberg@arm.com    MMU(GPU &_gpu);
4610915Sandreas.sandberg@arm.com    virtual ~MMU();
4710915Sandreas.sandberg@arm.com
4811313Sandreas.sandberg@arm.com    void reset() override;
4911313Sandreas.sandberg@arm.com
5011313Sandreas.sandberg@arm.com    uint32_t readReg(RegAddr idx)  override;
5110915Sandreas.sandberg@arm.com    void writeReg(RegAddr idx, uint32_t value) override;
5210915Sandreas.sandberg@arm.com
5311313Sandreas.sandberg@arm.com    uint32_t readRegRaw(RegAddr idx)  override;
5411313Sandreas.sandberg@arm.com    void writeRegRaw(RegAddr idx, uint32_t value) override;
5511313Sandreas.sandberg@arm.com
5610915Sandreas.sandberg@arm.com  protected:
5710915Sandreas.sandberg@arm.com    void onInterrupt(int set) override;
5810915Sandreas.sandberg@arm.com
5911313Sandreas.sandberg@arm.com    /** Address spaces belonging to this MMU block */
6011313Sandreas.sandberg@arm.com    std::vector<AddrSpace> spaces;
6110915Sandreas.sandberg@arm.com};
6210915Sandreas.sandberg@arm.com
6310915Sandreas.sandberg@arm.com}
6410915Sandreas.sandberg@arm.com
6510915Sandreas.sandberg@arm.com#endif // _LIBNOMALIMODEL_MMU_HH
66