blob: c926b6f00b21aab66166f16d5af4b2eb18cf829d [file]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gtest/gtest.h>
#include <helper/platform_device_helper.h>
#include <magma_util/register_io.h>
TEST(RegisterIo, Read) {
magma::PlatformDevice* platform_device = TestPlatformDevice::GetInstance();
ASSERT_TRUE(platform_device);
auto platform_mmio =
platform_device->CpuMapMmio(0, magma::PlatformMmio::CACHE_POLICY_UNCACHED_DEVICE);
ASSERT_TRUE(platform_mmio);
auto register_io = std::make_unique<magma::RegisterIo>(std::move(platform_mmio));
ASSERT_TRUE(register_io);
DLOG("reading timestamp...");
uint64_t timestamp = register_io->Read32(0x00000400 << 2);
timestamp |= static_cast<uint64_t>(register_io->Read32(0x00000401 << 2)) << 32;
EXPECT_NE(0u, timestamp);
DLOG("read timestamp %lu", timestamp);
DLOG("reading rbbm status...");
uint32_t rbbm_status = register_io->Read32(0x00000210 << 2);
DLOG("read rbbm_status 0x%x", rbbm_status);
EXPECT_NE(0u, rbbm_status);
}
TEST(RegisterIo, Write) {
magma::PlatformDevice* platform_device = TestPlatformDevice::GetInstance();
ASSERT_TRUE(platform_device);
constexpr uint32_t kScratchRegisterOffset = 0x883 << 2;
uint32_t original;
{
auto platform_mmio =
platform_device->CpuMapMmio(0, magma::PlatformMmio::CACHE_POLICY_UNCACHED_DEVICE);
ASSERT_TRUE(platform_mmio);
auto register_io = std::make_unique<magma::RegisterIo>(std::move(platform_mmio));
original = register_io->Read32(kScratchRegisterOffset);
register_io->Write32(kScratchRegisterOffset, ~original);
}
{
auto platform_mmio =
platform_device->CpuMapMmio(0, magma::PlatformMmio::CACHE_POLICY_UNCACHED_DEVICE);
ASSERT_TRUE(platform_mmio);
auto register_io = std::make_unique<magma::RegisterIo>(std::move(platform_mmio));
uint32_t value = register_io->Read32(kScratchRegisterOffset);
EXPECT_EQ(value, ~original);
register_io->Write32(kScratchRegisterOffset, original);
}
}