On Sat, 2026-08-08 at 14:22 +0800, Tao Ding wrote:
> Hi all,
> 
> This patch series adds GSDMA and Decomp_gzip to the K230 board.
> Enable k230 to use k230_unzip to decompress files during the u-boot
> phase.
> 
> This series includes the following features:
> 
> *patch1: add K230 gsdma which supports sdma, gdma is temporarily not
> supported
> *patch2: add gsdma to K230 board
> *patch3: add K230 gsdma qtest
> *patch4: add K230 decomp_gzip which decompress data work with sdma
> *patch5: add decomp_gzip to K230 board
> *patch6: add K230 decomp_gzip qtest
> *patch7: add a noc-stub region in K230 board
> 
> Patch-v2 is posted in:
> https://lore.kernel.org/qemu-devel/[email protected]/
> 
> Changes in v3:
> *patch1: 
>   Removed temporarily unimplemented GDMA register read and write.
>   Print with qemu_log_mask for access register errors.
> *patch4:
>   Print with qemu_log_mask for handle error ack signal.
> 
> Tao Ding (7):
>   hw/dma: add K230 gsdma
>   hw/riscv: k230: add gsdma in K230 board
>   tests/qtest: add test for K230 gsdma
>   hw/misc: add K230 decomp gzip
>   hw/riscv: k230: add decomp gzip in K230 board
>   tests/qtest: add test for K230 decomp gzip
>   hw/riscv: k230: add a noc stub region in K230 board

This is causing some coverity issues

Can you send patches to fix them up?

*** CID 1685517:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
/builds/qemu-project/qemu/hw/misc/k230_decomp_gzip.c: 62             in
k230_decomp_gzip_input_addr()
56                s->output.slot * K230_DECOMP_GZIP_BLOCK_SIZE +
57                s->output.current_offset;
58     }
59     
60     static hwaddr k230_decomp_gzip_input_addr(K230DecompGzipState
*s)
61     {
>>>     CID 1685517:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
>>>     Potentially overflowing expression "s->input.slot * 131072U"
with type "unsigned int" (32 bits, unsigned) is evaluated using 32-bit
arithmetic, and then used in a context that expects an expression of
type "hwaddr" (64 bits, unsigned).
62         return s->input.slot * K230_DECOMP_GZIP_BLOCK_SIZE +
63                K230_DECOMP_GZIP_SRAM_IN_BASE;
64     }
65     
66     static uint32_t
k230_decomp_gzip_current_input_size(K230DecompGzipState *s)
67     {



*** CID 1685516:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
/builds/qemu-project/qemu/tests/qtest/k230-decomp-gzip-test.c: 49     
in k230_sram_input_addr()
43         return K230_SRAM_BASE + off;
44     }
45     
46     static inline hwaddr k230_sram_input_addr(unsigned int slot)
47     {
48         return k230_sram_addr(K230_DECOMP_GZIP_SRAM_IN_BASE +
>>>     CID 1685516:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
>>>     Potentially overflowing expression "slot * 131072U" with type
"unsigned int" (32 bits, unsigned) is evaluated using 32-bit
arithmetic, and then used in a context that expects an expression of
type "hwaddr" (64 bits, unsigned).
49                               slot * K230_DECOMP_GZIP_BLOCK_SIZE);
50     }
51     
52     /*
53      * test_gzip_data was generated by compressing test_payload in
gzip format
54      * using Dynamic Huffman coding. The compression method byte in
the gzip


*** CID 1685515:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
/builds/qemu-project/qemu/hw/misc/k230_decomp_gzip.c: 56             in
k230_decomp_gzip_output_addr()
50                                    MEMTXATTRS_UNSPECIFIED, buf, len)
== MEMTX_OK;
51     }
52     
53     static hwaddr k230_decomp_gzip_output_addr(K230DecompGzipState
*s)
54     {
55         return K230_DECOMP_GZIP_SRAM_OUT_BASE +
>>>     CID 1685515:         Integer handling issues 
(OVERFLOW_BEFORE_WIDEN)
>>>     Potentially overflowing expression "s->output.slot * 131072U"
with type "unsigned int" (32 bits, unsigned) is evaluated using 32-bit
arithmetic, and then used in a context that expects an expression of
type "hwaddr" (64 bits, unsigned).
56                s->output.slot * K230_DECOMP_GZIP_BLOCK_SIZE +
57                s->output.current_offset;
58     }
59     
60     static hwaddr k230_decomp_gzip_input_addr(K230DecompGzipState
*s)
61     {

*** CID 1685514:           (INTEGER_OVERFLOW)
/builds/qemu-project/qemu/hw/dma/k230_gsdma.c: 332             in
k230_gsdma_read()
326                             "%s: not implement gdma at offset 0x%"
HWADDR_PRIx
327                             "\n", __func__, addr);
328             }
329             break;
330         }
331     
>>>     CID 1685514:           (INTEGER_OVERFLOW)
>>>     Expression "ch", where "(addr - 80UL) / 48UL" is known to be
equal to 1431655763, overflows the type of "ch", which is type
"unsigned int".
332         ch = (addr - K230_GSDMA_CH_BASE) / K230_GSDMA_CH_STRIDE;
333         ch_off = (addr - K230_GSDMA_CH_BASE) %
K230_GSDMA_CH_STRIDE;
334         if (ch < K230_GSDMA_NUM_SDMA_CHANNELS) {
335             switch (ch_off) {
336             case K230_GSDMA_CH_CTL:
337                 break;
/builds/qemu-project/qemu/hw/dma/k230_gsdma.c: 332             in
k230_gsdma_read()
326                             "%s: not implement gdma at offset 0x%"
HWADDR_PRIx
327                             "\n", __func__, addr);
328             }
329             break;
330         }
331     
>>>     CID 1685514:           (INTEGER_OVERFLOW)
>>>     Expression "addr - 80UL", where "addr" is known to be equal to
0, underflows the type of "addr - 80UL", which is type "unsigned long".
332         ch = (addr - K230_GSDMA_CH_BASE) / K230_GSDMA_CH_STRIDE;
333         ch_off = (addr - K230_GSDMA_CH_BASE) %
K230_GSDMA_CH_STRIDE;
334         if (ch < K230_GSDMA_NUM_SDMA_CHANNELS) {
335             switch (ch_off) {
336             case K230_GSDMA_CH_CTL:
337                 break;

*** CID 1685513:         Control flow issues  (UNREACHABLE)
/builds/qemu-project/qemu/disas/riscv.c: 2562             in
decode_inst_opcode()
2556                     case 3: return &op_fscsr;
2557                     default: return &op_csrrw;
2558                     }
2559                     break;
2560                 case 2:
2561                     return &op_csrrs;
>>>     CID 1685513:         Control flow issues  (UNREACHABLE)
>>>     This code cannot be reached: "if (operand_rs1(inst) == 0U...".
2562                     if (operand_rs1(inst) == 0) {
2563                         switch (operand_csr12(inst)) {
2564                         case 0x001: return &op_frflags;
2565                         case 0x002: return &op_frrm;
2566                         case 0x003: return &op_frcsr;
2567                         case 0xc00: return &op_rdcycle;


> 
>  MAINTAINERS                         |   6 +
>  docs/system/riscv/k230.rst          |   2 +
>  hw/dma/Kconfig                      |   3 +
>  hw/dma/k230_gsdma.c                 | 551
> ++++++++++++++++++++++++++++
>  hw/dma/meson.build                  |   1 +
>  hw/dma/trace-events                 |   6 +
>  hw/misc/Kconfig                     |   3 +
>  hw/misc/k230_decomp_gzip.c          | 511 ++++++++++++++++++++++++++
>  hw/misc/meson.build                 |   1 +
>  hw/misc/trace-events                |   4 +
>  hw/riscv/Kconfig                    |   2 +
>  hw/riscv/k230.c                     |  38 +-
>  include/hw/dma/k230_gsdma.h         | 130 +++++++
>  include/hw/misc/k230_decomp_gzip.h  |  92 +++++
>  include/hw/riscv/k230.h             |   5 +
>  tests/qtest/k230-decomp-gzip-test.c | 200 ++++++++++
>  tests/qtest/k230-gsdma-test.c       | 201 ++++++++++
>  tests/qtest/meson.build             |   2 +-
>  18 files changed, 1750 insertions(+), 8 deletions(-)
>  create mode 100644 hw/dma/k230_gsdma.c
>  create mode 100644 hw/misc/k230_decomp_gzip.c
>  create mode 100644 include/hw/dma/k230_gsdma.h
>  create mode 100644 include/hw/misc/k230_decomp_gzip.h
>  create mode 100644 tests/qtest/k230-decomp-gzip-test.c
>  create mode 100644 tests/qtest/k230-gsdma-test.c
> 
> 
> base-commit: 300438ffbb8d9430cac2fcc15cba6f482b2c0587

Reply via email to