xemu/hw/arm
Mostafa Saleh 9dd6aa9b05 hw/arm/smmuv3: Translate CD and TT using stage-2 table
According to ARM SMMU architecture specification (ARM IHI 0070 F.b),
In "5.2 Stream Table Entry":
 [51:6] S1ContextPtr
 If Config[1] == 1 (stage 2 enabled), this pointer is an IPA translated by
 stage 2 and the programmed value must be within the range of the IAS.

In "5.4.1 CD notes":
 The translation table walks performed from TTB0 or TTB1 are always performed
 in IPA space if stage 2 translations are enabled.

This patch implements translation of the S1 context descriptor pointer and
TTBx base addresses through the S2 stage (IPA -> PA)

smmuv3_do_translate() is updated to have one arg which is translation
class, this is useful to:
 - Decide wether a translation is stage-2 only or use the STE config.
 - Populate the class in case of faults, WALK_EABT is left unchanged
   for stage-1 as it is always IN, while stage-2 would match the
   used class (TT, IN, CD), this will change slightly when the ptw
   supports nested translation as it can also issue TT event with
   class IN.

In case for stage-2 only translation, used in the context of nested
translation, the stage and asid are saved and restored before and
after calling smmu_translate().

Translating CD or TTBx can fail for the following reasons:
1) Large address size: This is described in
   (3.4.3 Address sizes of SMMU-originated accesses)
   - For CD ptr larger than IAS, for SMMUv3.1, it can trigger either
     C_BAD_STE or Translation fault, we implement the latter as it
     requires no extra code.
   - For TTBx, if larger than the effective stage 1 output address size, it
     triggers C_BAD_CD.

2) Faults from PTWs (7.3 Event records)
   - F_ADDR_SIZE: large address size after first level causes stage 2 Address
     Size fault (Also in 3.4.3 Address sizes of SMMU-originated accesses)
   - F_PERMISSION: Same as an address translation. However, when
     CLASS == CD, the access is implicitly Data and a read.
   - F_ACCESS: Same as an address translation.
   - F_TRANSLATION: Same as an address translation.
   - F_WALK_EABT: Same as an address translation.
  These are already implemented in the PTW logic, so no extra handling
  required.

As in CD and TTBx translation context, the iova is not known, setting
the InputAddr was removed from "smmuv3_do_translate" and set after
from "smmuv3_translate" with the new function "smmuv3_fixup_event"

Signed-off-by: Mostafa Saleh <smostafa@google.com>
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-id: 20240715084519.1189624-9-smostafa@google.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2024-07-18 13:49:29 +01:00
..
Kconfig hw/arm/xilinx_zynq: Add cache controller 2024-05-30 13:21:06 +01:00
allwinner-a10.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
allwinner-h3.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
allwinner-r40.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
armsse.c hw: Simplify accesses to the CPUState::'start-powered-off' property 2024-01-05 16:20:15 +01:00
armv7m.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
aspeed.c aspeed: Deprecate the tacoma-bmc machine 2024-07-02 07:52:43 +02:00
aspeed_ast10x0.c aspeed: Make the ast1030-a1 SoC not user creatable 2024-03-25 09:57:56 +01:00
aspeed_ast27x0.c aspeed/soc: set dma64 property for AST2700 ftgmac100 2024-07-09 08:05:44 +02:00
aspeed_ast2400.c aspeed: fix hardcode boot address 0 2024-02-27 13:47:05 +01:00
aspeed_ast2600.c aspeed: Make the ast2600-a3 SoC not user creatable 2024-03-25 09:57:56 +01:00
aspeed_eeprom.c aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
aspeed_eeprom.h aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
aspeed_soc_common.c aspeed: introduce a new UART0 device name 2024-02-27 13:47:05 +01:00
b-l475e-iot01a.c hw/arm : Connect DM163 to B-L475E-IOT01A 2024-04-30 16:05:08 +01:00
bananapi_m2u.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
bcm2835_peripherals.c hw/misc: Implement mailbox properties for customer OTP and device specific private keys 2024-07-01 12:48:55 +01:00
bcm2836.c hw/arm/bcm2836: Remove unusued struct 'BCM283XClass' 2024-06-30 19:51:44 +03:00
bcm2838.c hw/arm: Introduce Raspberry PI 4 machine 2024-02-27 13:01:42 +00:00
bcm2838_peripherals.c hw/arm/bcm2838_peripherals: Add clock_isp stub 2024-02-27 13:01:42 +00:00
boot.c hw: arm: Remove use of tabs in some source files 2024-05-28 14:20:48 +01:00
collie.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
cubieboard.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
digic.c arm/digic: replace snprintf() with g_strdup_printf() 2022-04-21 17:03:51 +04:00
digic_boards.c hw/arm: Don't include qemu-common.h unnecessarily 2021-12-15 10:35:26 +00:00
exynos4_boards.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
exynos4210.c hw/display/exynos4210_fimd: Pass frame buffer memory region as link 2024-02-26 18:40:09 +01:00
fby35.c hw/arm/aspeed: Move AspeedSoCState::a7mpcore to Aspeed2600SoCState 2023-10-25 09:52:44 +02:00
fsl-imx6.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx6ul.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx7.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx25.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx31.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
gumstix.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
highbank.c hw/ide/ahci: Move SysBus definitions to 'ahci-sysbus.h' 2024-02-15 16:58:46 +01:00
imx25_pdk.c hw/arm/fsl-imx25: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
integratorcp.c hw/display/pl110: Pass frame buffer memory region as link property 2024-02-26 18:39:58 +01:00
kzm.c hw/net/lan9118: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mainstone.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
mcimx6ul-evk.c hw/arm/fsl-imx6ul: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
mcimx7d-sabre.c hw/arm/fsl-imx7: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
meson.build aspeed/soc: Add AST2700 support 2024-06-16 21:08:54 +02:00
microbit.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
mps2-tz.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mps2.c hw/net/lan9118: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mps3r.c hw/arm/mps3r: Add remaining devices 2024-02-15 14:32:39 +00:00
msf2-soc.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
msf2-som.c hw/arm/msf2: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
musca.c hw/arm/musca: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
musicpal.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
netduino2.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
netduinoplus2.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
npcm7xx.c hw/arm/npcm7xx: remove setting of mp-affinity 2024-05-28 14:20:48 +01:00
npcm7xx_boards.c hw/arm/npcm7xx_boards: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
nrf51_soc.c hw: Simplify memory_region_init_ram() calls 2024-01-05 16:20:15 +01:00
nseries.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
olimex-stm32-h405.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
omap1.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
omap2.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
omap_sx1.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
orangepi.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
palm.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
pxa2xx.c hw/arm: Constify VMState 2023-12-29 11:17:30 +11:00
pxa2xx_gpio.c hw/arm: Constify VMState 2023-12-29 11:17:30 +11:00
pxa2xx_pic.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
raspi.c hw/arm/raspi4b: Temporarily disable unimplemented rpi4b devices 2024-02-27 13:01:42 +00:00
raspi4b.c raspi4b: Reduce RAM to 1Gb on 32-bit hosts 2024-04-02 10:13:48 +01:00
realview.c hw/display/pl110: Pass frame buffer memory region as link property 2024-02-26 18:39:58 +01:00
sabrelite.c hw/arm/fsl-imx6: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
sbsa-ref.c hw/arm/sbsa-ref: Enable CPU cluster on ARM sbsa machine 2024-06-21 16:24:46 +01:00
smmu-common.c hw/arm/smmu: Consolidate ASID and VMID types 2024-07-18 13:49:29 +01:00
smmu-internal.h hw/arm/smmuv3: Add VMID to TLB tagging 2023-05-30 15:50:16 +01:00
smmuv3-internal.h hw/arm/smmuv3: Fix encoding of CLASS in events 2024-07-18 13:49:29 +01:00
smmuv3.c hw/arm/smmuv3: Translate CD and TT using stage-2 table 2024-07-18 13:49:29 +01:00
spitz.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
stellaris.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
stm32f100_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32f205_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32f405_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32l4x5_soc.c hw/arm: In STM32L4x5 SOC, connect USART devices to EXTI 2024-07-11 11:41:34 +01:00
stm32vldiscovery.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
strongarm.c hw/arm/strongarm.c: convert DPRINTF to trace events and guest errors 2024-02-02 13:51:58 +00:00
strongarm.h hw/arm/collie: Create the RAM in the board 2019-10-22 17:44:01 +01:00
tosa.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00
trace-events hw/arm/smmu: Consolidate ASID and VMID types 2024-07-18 13:49:29 +01:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
versatilepb.c hw/display/pl110: Pass frame buffer memory region as link property 2024-02-26 18:39:58 +01:00
vexpress.c hw/display/pl110: Pass frame buffer memory region as link property 2024-02-26 18:39:58 +01:00
virt-acpi-build.c hw/arm/virt-acpi-build: Fix id_count in build_iort_id_mapping 2024-07-03 18:14:06 -04:00
virt.c hw: skip registration of outdated versioned machine types 2024-07-02 06:58:37 +02:00
xen_arm.c hw/arm: xen: Enable use of grant mappings 2024-06-09 20:16:14 +02:00
xilinx_zynq.c hw/arm/xilinx_zynq: Add boot-mode property 2024-07-01 15:40:54 +01:00
xlnx-versal-virt.c aspeed/smc: Only wire flash devices at reset 2024-03-19 11:58:15 +01:00
xlnx-versal.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
xlnx-zcu102.c hw/arm/xlnx-zynqmp: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
xlnx-zynqmp.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
z2.c hw/arm: Deprecate various old Arm machine types 2024-03-11 16:42:57 +00:00