<feed xmlns='http://www.w3.org/2005/Atom'>
<title>openslx-ng/ipxe.git/src/arch/riscv/include/bits, branch openslx</title>
<subtitle>Fork of ipxe; additional commands and features</subtitle>
<id>https://git.openslx.org/openslx-ng/ipxe.git/atom/src/arch/riscv/include/bits?h=openslx</id>
<link rel='self' href='https://git.openslx.org/openslx-ng/ipxe.git/atom/src/arch/riscv/include/bits?h=openslx'/>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/'/>
<updated>2025-07-10T12:32:45+00:00</updated>
<entry>
<title>[riscv] Add optimised TCP/IP checksumming</title>
<updated>2025-07-10T12:32:45+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-07-10T11:50:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=634d9abefbb896e0c563ede4b6a7df40d0948501'/>
<id>urn:sha1:634d9abefbb896e0c563ede4b6a7df40d0948501</id>
<content type='text'>
Add a RISC-V assembly language implementation of TCP/IP checksumming,
which is around 50x faster than the generic algorithm.  The main loop
checksums aligned xlen-bit words, using almost entirely compressible
instructions and accumulating carries in a separate register to allow
folding to be deferred until after all loops have completed.

Experimentation on a C910 CPU suggests that this achieves around four
bytes per clock cycle, which is comparable to the x86 implementation.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[riscv] Provide a DMA API implementation for RISC-V bare-metal systems</title>
<updated>2025-07-09T10:07:37+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-07-08T13:56:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=101ef74a6e7ed29af42f9d5432504b437e75374d'/>
<id>urn:sha1:101ef74a6e7ed29af42f9d5432504b437e75374d</id>
<content type='text'>
Provide an implementation of dma_map() that performs cache clean or
invalidation as required, and an implementation of dma_alloc() that
returns virtual addresses within the coherent mapping of the 32-bit
physical address space.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[riscv] Support mapping I/O devices outside of the identity map</title>
<updated>2025-05-26T16:56:27+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-05-26T14:45:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=eae9a27542b020c4192c0435718f7c7d71251a4a'/>
<id>urn:sha1:eae9a27542b020c4192c0435718f7c7d71251a4a</id>
<content type='text'>
With the 64-bit paging schemes (Sv39, Sv48, and Sv57), we identity-map
as much of the physical address space as is possible.  Experimentation
shows that this is not sufficient to provide access to all I/O
devices.  For example: the Sipeed Lichee Pi 4A includes a CPU that
supports only Sv39, but places I/O devices at the top of a 40-bit
address space.

Add support for creating I/O page table entries on demand to map I/O
devices, based on the existing design used for x86_64 BIOS.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[riscv] Speed up memmove() when copying in forwards direction</title>
<updated>2025-05-21T15:12:56+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-05-21T15:12:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=a53456334512f8de2e5d744abbc0a0cddd0eb962'/>
<id>urn:sha1:a53456334512f8de2e5d744abbc0a0cddd0eb962</id>
<content type='text'>
Use the word-at-a-time variable-length memcpy() implementation when
performing an overlapping copy in the forwards direction, since this
is guaranteed to be safe and likely to be substantially faster than
the existing bytewise copy.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[lkrn] Add basic support for the RISC-V Linux kernel image format</title>
<updated>2025-05-20T12:08:38+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-05-19T23:26:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=ecac4a34c7be8d1d81d21fa662460bf162d6a434'/>
<id>urn:sha1:ecac4a34c7be8d1d81d21fa662460bf162d6a434</id>
<content type='text'>
The RISC-V and AArch64 bare-metal kernel images share a common header
format, and require essentially the same execution environment: loaded
close to the start of RAM, entered with paging disabled, and passed a
pointer to a flattened device tree that describes the hardware and any
boot arguments.

Implement basic support for executing bare-metal RISC-V and AArch64
kernel images.  The (trivial) AArch64-specific code path is untested
since we do not yet have the ability to build for any bare-metal
AArch64 platforms.  Constructing and passing an initramfs image is not
yet supported.

Rename the IMAGE_BZIMAGE build configuration option to IMAGE_LKRN,
since "bzImage" is specific to x86.  To retain backwards compatibility
with existing local build configurations, we leave IMAGE_BZIMAGE as
the enabled option in config/default/pcbios.h and treat IMAGE_LKRN as
a synonym for IMAGE_BZIMAGE when building for x86 BIOS.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[riscv] Use generic external heap based on the system memory map</title>
<updated>2025-05-19T18:36:25+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-05-19T15:16:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=140ceeeb089f605e29592697239a28bb4db1a7e2'/>
<id>urn:sha1:140ceeeb089f605e29592697239a28bb4db1a7e2</id>
<content type='text'>
Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[riscv] Hold virtual address offset in the thread pointer register</title>
<updated>2025-05-11T12:46:21+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-05-11T12:04:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=95ede670bcfea5ea22965962fe764841243eb864'/>
<id>urn:sha1:95ede670bcfea5ea22965962fe764841243eb864</id>
<content type='text'>
iPXE does not make use of any thread-local storage.  Use the otherwise
unused thread pointer register ("tp") to hold the current value of
the virtual address offset, rather than using a global variable.

This ensures that virt_offset can be made valid even during very early
initialisation (when iPXE may be executing directly from read-only
memory and so cannot update a global variable).

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[crypto] Expose shifted out bit from big integer shifts</title>
<updated>2025-02-13T15:25:35+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2025-02-13T14:18:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=5056e8ad936742ba410031cff14c0f72d87805fc'/>
<id>urn:sha1:5056e8ad936742ba410031cff14c0f72d87805fc</id>
<content type='text'>
Expose the bit shifted out as a result of shifting a big integer left
or right.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[crypto] Expose carry flag from big integer addition and subtraction</title>
<updated>2024-11-26T12:55:13+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2024-11-26T12:53:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=167a08f08928c7e469f50d5d364287abb784e99c'/>
<id>urn:sha1:167a08f08928c7e469f50d5d364287abb784e99c</id>
<content type='text'>
Expose the effective carry (or borrow) out flag from big integer
addition and subtraction, and use this to elide an explicit bit test
when performing x25519 reduction.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
<entry>
<title>[sbi] Add support for running as a RISC-V SBI payload</title>
<updated>2024-10-28T19:20:50+00:00</updated>
<author>
<name>Michael Brown</name>
</author>
<published>2024-10-28T14:40:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.openslx.org/openslx-ng/ipxe.git/commit/?id=e0e102ee24bdab68b0318b505402f60cfb88a5f0'/>
<id>urn:sha1:e0e102ee24bdab68b0318b505402f60cfb88a5f0</id>
<content type='text'>
Add basic support for running directly on top of SBI, with no UEFI
firmware present.  Build as e.g.:

  make CROSS=riscv64-linux-gnu- bin-riscv64/ipxe.sbi

The resulting binary can be tested in QEMU using e.g.:

  qemu-system-riscv64 -M virt -cpu max -serial stdio \
                      -kernel bin-riscv64/ipxe.sbi

No drivers or executable binary formats are supported yet, but the
unit test suite may be run successfully.

Signed-off-by: Michael Brown &lt;mcb30@ipxe.org&gt;
</content>
</entry>
</feed>
