Files
Yaya48 cf256aa081 Import QEMU upstream snapshot d2e570c
Upstream: https://gitlab.com/qemu-project/qemu.git

Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
2026-08-31 02:15:30 +02:00

80 lines
2.0 KiB
C

/*
* Axiado Clock Control
*
* Author: Kuan-Jui Chiu <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "qemu/osdep.h"
#include "hw/misc/axiado_clk.h"
#include "qemu/log.h"
#define CLKRST_CPU_PLL_POSTDIV_OFFSET 0x0C
#define CLKRST_CPU_PLL_STS_OFFSET 0x14
static uint64_t pll_read(void *opaque, hwaddr offset, unsigned size)
{
switch (offset) {
case CLKRST_CPU_PLL_POSTDIV_OFFSET:
return 0x20891b;
case CLKRST_CPU_PLL_STS_OFFSET:
return 0x01;
default:
qemu_log_mask(LOG_UNIMP,
"Register 0x%" HWADDR_PRIx " not implemented\n", offset);
break;
}
return 0x00;
}
static void pll_write(void *opaque, hwaddr offset, uint64_t val, unsigned size)
{
qemu_log_mask(LOG_UNIMP,
"Register 0x%" HWADDR_PRIx " not implemented\n", offset);
}
static const MemoryRegionOps pll_ops = {
.read = pll_read,
.write = pll_write,
.endianness = DEVICE_LITTLE_ENDIAN,
.impl = {
.min_access_size = 4,
.max_access_size = 4,
},
.valid = {
.min_access_size = 4,
.max_access_size = 4,
}
};
static void ax3000_clk_init(Object *obj)
{
Ax3000ClkState *s = AX3000_CLK(obj);
memory_region_init_io(&s->pll_ctrl, obj, &pll_ops, s,
TYPE_AX3000_CLK, AX3000_CLK_PLL_CTRL_SIZE);
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->pll_ctrl);
}
static void ax3000_clk_class_init(ObjectClass *klass, const void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "Axiado AX3000 Clock Control";
}
static const TypeInfo ax3000_clk_info = {
.parent = TYPE_SYS_BUS_DEVICE,
.name = TYPE_AX3000_CLK,
.instance_size = sizeof(Ax3000ClkState),
.instance_init = ax3000_clk_init,
.class_init = ax3000_clk_class_init,
};
static void axiado_clk_register_type(void)
{
type_register_static(&ax3000_clk_info);
}
type_init(axiado_clk_register_type);