I don't know why it isn't documented in that PDF (or in the register map), but
if you check
https://github.com/polarfire-soc/polarfire-soc-bare-metal-library/blob/master/src/platform/drivers/mss_sys_services/mss_sys_services.h
you'll see the following
```
typedef struct
{
volatile uint32_t SOFT_RESET;
volatile uint32_t VDETECTOR;
volatile uint32_t TVS_CONTROL;
volatile uint32_t TVS_TEMP_A;
volatile uint32_t TVS_TEMP_B;
volatile uint32_t TVS_TEMP_C;
volatile uint32_t TVS_VOLT_A;
volatile uint32_t TVS_VOLT_B;
volatile uint32_t TVS_VOLT_C;
volatile uint32_t TVS_OUTPUT0;
volatile uint32_t TVS_OUTPUT1;
volatile uint32_t TVS_TRIGGER;
volatile uint32_t TRIM_VDET1P05;
volatile uint32_t TRIM_VDET1P8;
volatile uint32_t TRIM_VDET2P5;
volatile uint32_t TRIM_TVS;
volatile uint32_t TRIM_GDET1P05;
volatile uint32_t RESERVED0;
volatile uint32_t RESERVED1;
volatile uint32_t RESERVED2;
volatile uint32_t SERVICES_CR;
volatile uint32_t SERVICES_SR;
volatile uint32_t USER_DETECTOR_SR;
volatile uint32_t USER_DETECTOR_CR;
volatile uint32_t MSS_SPI_CR;
} SCBCTRL_TypeDef;
#define MSS_SCBCTRL ((SCBCTRL_TypeDef*) (0x37020000UL))
/*2kB bytes long mailbox.*/
#define MSS_SCBMAILBOX ((uint32_t*) (0x37020800UL))
```
And in
https://github.com/polarfire-soc/polarfire-soc-bare-metal-library/blob/master/src/platform/drivers/mss_sys_services/mss_sys_services.c
you'll see MSS_SCB and MSS_SCBMAILBOX used in many places to interact with the
FPGA system controller to perform various services.
Cheers,
Ivan
-----Original Message-----
From: Alistair Francis <[email protected]>
Sent: Friday 16 October 2020 17:08
To: Ivan Griffin <[email protected]>
Cc: Bin Meng <[email protected]>; QEMU Trivial <[email protected]>;
open list:RISC-V <[email protected]>; [email protected] Developers
<[email protected]>
Subject: Re: [PATCH] hw/riscv: microchip_pfsoc: IOSCBCTRL memmap entry
On Fri, Oct 16, 2020 at 8:04 AM Ivan Griffin <[email protected]> wrote:
>
> Adding the PolarFire SoC IOSCBCTRL memory region to prevent QEMU
> reporting a STORE/AMO Access Fault.
>
> This region is used by the PolarFire SoC port of U-Boot to interact
> with the FPGA system controller.
>
> Signed-off-by: Ivan Griffin <[email protected]>
> ---
> hw/riscv/microchip_pfsoc.c | 6 ++++++
> include/hw/riscv/microchip_pfsoc.h | 1 +
> 2 files changed, 7 insertions(+)
>
> diff --git a/hw/riscv/microchip_pfsoc.c b/hw/riscv/microchip_pfsoc.c
> index 4627179cd3..20e1496e3e 100644
> --- a/hw/riscv/microchip_pfsoc.c
> +++ b/hw/riscv/microchip_pfsoc.c
> @@ -97,6 +97,7 @@ static const struct MemmapEntry {
> [MICROCHIP_PFSOC_GPIO2] = { 0x20122000, 0x1000 },
> [MICROCHIP_PFSOC_ENVM_CFG] = { 0x20200000, 0x1000 },
> [MICROCHIP_PFSOC_ENVM_DATA] = { 0x20220000, 0x20000 },
> + [MICROCHIP_PFSOC_IOSCB_CTRL] = { 0x37020000, 0x1000 },
I don't see this in the UG0880 "User Guide PolarFire SoC FPGA Microprocessor
Sub-System" memory map.
Where is this documented?
Alistair
> [MICROCHIP_PFSOC_IOSCB_CFG] = { 0x37080000, 0x1000 },
> [MICROCHIP_PFSOC_DRAM] = { 0x80000000, 0x0 },
> };
> @@ -341,6 +342,11 @@ static void microchip_pfsoc_soc_realize(DeviceState
> *dev, Error **errp)
> create_unimplemented_device("microchip.pfsoc.ioscb.cfg",
> memmap[MICROCHIP_PFSOC_IOSCB_CFG].base,
> memmap[MICROCHIP_PFSOC_IOSCB_CFG].size);
> +
> + /* IOSCBCTRL */
> + create_unimplemented_device("microchip.pfsoc.ioscb.ctrl",
> + memmap[MICROCHIP_PFSOC_IOSCB_CTRL].base,
> + memmap[MICROCHIP_PFSOC_IOSCB_CTRL].size);
> }
>
> static void microchip_pfsoc_soc_class_init(ObjectClass *oc, void
> *data) diff --git a/include/hw/riscv/microchip_pfsoc.h
> b/include/hw/riscv/microchip_pfsoc.h
> index 8bfc7e1a85..3f1874b162 100644
> --- a/include/hw/riscv/microchip_pfsoc.h
> +++ b/include/hw/riscv/microchip_pfsoc.h
> @@ -95,6 +95,7 @@ enum {
> MICROCHIP_PFSOC_ENVM_CFG,
> MICROCHIP_PFSOC_ENVM_DATA,
> MICROCHIP_PFSOC_IOSCB_CFG,
> + MICROCHIP_PFSOC_IOSCB_CTRL,
> MICROCHIP_PFSOC_DRAM,
> };
>
> --
> 2.17.1
>
>