Skip to content

Commit 9b7776f

Browse files
committed
Add RISC-V support
1 parent f7e6036 commit 9b7776f

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

testcloud/distro_utils/fedora.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ def get_fedora_image_url(version: str, arch: str) -> str:
125125
if version == "latest":
126126
version = str(oraculum_releases["fedora"]["stable"])
127127

128+
# RISC-V image not released
129+
if arch == "riscv64":
130+
return "https://dl.fedoraproject.org/pub/alt/risc-v/release/42/Cloud/riscv64/images/Fedora-Cloud-Base-Generic-42.20250911-2251ba41cdd3.riscv64.qcow2"
131+
128132
try:
129133
releases = session.get("https://getfedora.org/releases.json").json()
130134
except (ConnectionError, requests.exceptions.JSONDecodeError):

testcloud/domain_configuration.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,37 @@ def generate(self) -> str:
155155
)
156156

157157

158+
class RISCV64ArchitectureConfiguration(ArchitectureConfiguration):
159+
qemu = "qemu-system-riscv64"
160+
arch = "riscv64"
161+
model = "virt"
162+
163+
def __init__(self, kvm=True, uefi=True, model="virt") -> None:
164+
self.kvm = kvm
165+
self.uefi = uefi
166+
self.model = model
167+
168+
def generate(self) -> str:
169+
return """
170+
<os>
171+
<type arch='{arch}' machine='{model}'>hvm</type>
172+
{uefi_loader}
173+
<boot dev='hd'/>
174+
</os>
175+
{cpu}
176+
<memballoon model='virtio'></memballoon>
177+
""".format(
178+
arch=self.arch,
179+
model=self.model,
180+
uefi_loader="<loader readonly='yes' type='pflash'>/usr/share/edk2/riscv/RISCV_VIRT_CODE.qcow2</loader>",
181+
cpu=(
182+
"<cpu mode='host-passthrough' check='none'/>"
183+
if self.kvm
184+
else "<cpu mode='custom' match='exact'><model>rva23s64</model></cpu>"
185+
),
186+
)
187+
188+
158189
def storage_device_name_generator():
159190
prefix = "vd"
160191
for i in range(26):
@@ -529,6 +560,8 @@ def _get_default_domain_conf(
529560
domain_configuration.system_architecture = Ppc64leArchitectureConfiguration(kvm=kvm, uefi=False, model="pseries")
530561
elif desired_arch == "s390x":
531562
domain_configuration.system_architecture = S390xArchitectureConfiguration(kvm=kvm, uefi=False, model="s390-ccw-virtio")
563+
elif desired_arch == "riscv64":
564+
domain_configuration.system_architecture = RISCV64ArchitectureConfiguration(kvm=kvm, uefi=True, model="virt")
532565
else:
533566
raise TestcloudInstanceError("Unsupported arch")
534567

0 commit comments

Comments
 (0)