10722d05aSBenjamin Herrenschmidt /* 20722d05aSBenjamin Herrenschmidt * QEMU PowerPC PowerNV Emulation of a few OCC related registers 30722d05aSBenjamin Herrenschmidt * 4b0ae5c69SCédric Le Goater * Copyright (c) 2015-2022, IBM Corporation. 50722d05aSBenjamin Herrenschmidt * 60722d05aSBenjamin Herrenschmidt * This library is free software; you can redistribute it and/or 70722d05aSBenjamin Herrenschmidt * modify it under the terms of the GNU Lesser General Public 80722d05aSBenjamin Herrenschmidt * License as published by the Free Software Foundation; either 9f70c5966SChetan Pant * version 2.1 of the License, or (at your option) any later version. 100722d05aSBenjamin Herrenschmidt * 110722d05aSBenjamin Herrenschmidt * This library is distributed in the hope that it will be useful, 120722d05aSBenjamin Herrenschmidt * but WITHOUT ANY WARRANTY; without even the implied warranty of 130722d05aSBenjamin Herrenschmidt * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140722d05aSBenjamin Herrenschmidt * Lesser General Public License for more details. 150722d05aSBenjamin Herrenschmidt * 160722d05aSBenjamin Herrenschmidt * You should have received a copy of the GNU Lesser General Public 170722d05aSBenjamin Herrenschmidt * License along with this library; if not, see <http://www.gnu.org/licenses/>. 180722d05aSBenjamin Herrenschmidt */ 19a8b991b5SMarkus Armbruster 20a8b991b5SMarkus Armbruster #ifndef PPC_PNV_OCC_H 21a8b991b5SMarkus Armbruster #define PPC_PNV_OCC_H 220722d05aSBenjamin Herrenschmidt 23*8be545baSRichard Henderson #include "system/memory.h" 2414f11a20SMarkus Armbruster #include "hw/qdev-core.h" 25eaf87a39SDavid Gibson 260722d05aSBenjamin Herrenschmidt #define TYPE_PNV_OCC "pnv-occ" 27c821774aSEduardo Habkost OBJECT_DECLARE_TYPE(PnvOCC, PnvOCCClass, 2830b5707cSEduardo Habkost PNV_OCC) 293233838cSCédric Le Goater #define TYPE_PNV8_OCC TYPE_PNV_OCC "-POWER8" 308110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(PnvOCC, PNV8_OCC, 318110fa1dSEduardo Habkost TYPE_PNV8_OCC) 326598a70dSCédric Le Goater #define TYPE_PNV9_OCC TYPE_PNV_OCC "-POWER9" 338110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(PnvOCC, PNV9_OCC, 348110fa1dSEduardo Habkost TYPE_PNV9_OCC) 358bf682a3SCédric Le Goater #define TYPE_PNV10_OCC TYPE_PNV_OCC "-POWER10" 368bf682a3SCédric Le Goater DECLARE_INSTANCE_CHECKER(PnvOCC, PNV10_OCC, TYPE_PNV10_OCC) 370722d05aSBenjamin Herrenschmidt 383a1b70b6SCédric Le Goater #define PNV_OCC_SENSOR_DATA_BLOCK_OFFSET 0x00580000 393a1b70b6SCédric Le Goater #define PNV_OCC_SENSOR_DATA_BLOCK_SIZE 0x00025800 403a1b70b6SCédric Le Goater 41db1015e9SEduardo Habkost struct PnvOCC { 420722d05aSBenjamin Herrenschmidt DeviceState xd; 430722d05aSBenjamin Herrenschmidt 44a1750b2cSNicholas Piggin /* OCC dynamic model is driven by this timer. */ 45a1750b2cSNicholas Piggin QEMUTimer state_machine_timer; 46a1750b2cSNicholas Piggin 470722d05aSBenjamin Herrenschmidt /* OCC Misc interrupt */ 480722d05aSBenjamin Herrenschmidt uint64_t occmisc; 490722d05aSBenjamin Herrenschmidt 50b0ae5c69SCédric Le Goater qemu_irq psi_irq; 510722d05aSBenjamin Herrenschmidt 5270bc5c24SNicholas Piggin /* OCCs operate on regions of HOMER memory */ 5370bc5c24SNicholas Piggin PnvHomer *homer; 5470bc5c24SNicholas Piggin 550722d05aSBenjamin Herrenschmidt MemoryRegion xscom_regs; 56f3db8266SBalamuruhan S MemoryRegion sram_regs; 57db1015e9SEduardo Habkost }; 580722d05aSBenjamin Herrenschmidt 59db1015e9SEduardo Habkost struct PnvOCCClass { 603233838cSCédric Le Goater DeviceClass parent_class; 613233838cSCédric Le Goater 6270bc5c24SNicholas Piggin hwaddr opal_shared_memory_offset; /* offset in HOMER */ 6370bc5c24SNicholas Piggin uint8_t opal_shared_memory_version; 6470bc5c24SNicholas Piggin 653233838cSCédric Le Goater int xscom_size; 663233838cSCédric Le Goater const MemoryRegionOps *xscom_ops; 67db1015e9SEduardo Habkost }; 683233838cSCédric Le Goater 693a1b70b6SCédric Le Goater #define PNV_OCC_SENSOR_DATA_BLOCK_BASE(i) \ 703a1b70b6SCédric Le Goater (PNV_OCC_SENSOR_DATA_BLOCK_OFFSET + (i) * PNV_OCC_SENSOR_DATA_BLOCK_SIZE) 713a1b70b6SCédric Le Goater 72a8b991b5SMarkus Armbruster #endif /* PPC_PNV_OCC_H */ 73