All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL v2 00/41] Misc HW patches for 2026-05-12
@ 2026-05-12 20:38 Philippe Mathieu-Daudé
  2026-05-12 20:38 ` [PULL v2 06/41] hw/sd/sd: Allow multi-byte read/write for generic paths Philippe Mathieu-Daudé
  2026-05-14 16:27 ` [PULL v2 00/41] Misc HW patches for 2026-05-12 Stefan Hajnoczi
  0 siblings, 2 replies; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-05-12 20:38 UTC (permalink / raw)
  To: qemu-devel

The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:

  Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)

are available in the Git repository at:

  https://github.com/philmd/qemu.git tags/hw-misc-20260512

for you to fetch changes up to 23af8ed3c4633f965bc47c6a84971301a07a8d55:

  scripts: strip leading './' when searching MAINTAINERS file (2026-05-12 22:35:54 +0200)

----------------------------------------------------------------
Misc HW patches

- More ATI VGA fixes
- Add support for pre-setting RPMB authentication key on eMMC cards
- Fix VDPA on big-endian hosts
- Handle sub-page granularity in cpu_memory_rw_debug()
- Fix leak in pca955x_set_led()
- Mark IPv6 header structure as packed
- MAINTAINERS updates
----------------------------------------------------------------

Chad Jablonski (1):
  ati-vga: fix ati_set_dirty address calculation

Christian Speich (3):
  hw/sd: Switch read/write primitive to buf+len
  hw/sd/sd: Allow multi-byte read/write for generic paths
  hw/sd: Update trace events for buf+len data

Daniel P. Berrangé (1):
  scripts: strip leading './' when searching MAINTAINERS file

Jan Kiszka (2):
  scripts: mkemmc.sh: Fix output pollution on missing images
  hw/sd/sdcard: Add support for pre-setting the authentication key

Konstantin Shkolnyy (1):
  vdpa: Allow VDPA to work on big-endian machine

Magnus Kulke (1):
  MAINTAINERS: Add Doru Blânzeanu as MSHV reviewer

Marc-André Lureau (1):
  hw/gpio/pca9552: fix state_str leak in pca955x_set_led

Mauro Carvalho Chehab (1):
  MAINTAINERS: update HEST maintainership entries

Peter Maydell (29):
  hw/display/cirrus_vga: Fix packed-24 color-expansion transparent
    pattern fills
  hw/display/cirrus_vga: Fix packed-24 color-expansion transparent
    copies
  hw/i386/vapic: Cope with non-page-aligned return from
    cpu_get_phys_page_debug()
  target/riscv: Make get_phys_page_debug handle non-page-aligned addrs
  target/alpha: Make get_phys_page_debug handle non-page-aligned addrs
  target/microblaze: Make get_phys_page_attrs_debug handle
    non-page-aligned addrs
  target/sparc: Make get_phys_page_debug handle non-page-aligned addrs
  target/x86: Make get_phys_page_attrs_debug handle non-page-aligned
    addrs
  target/s390x: Make get_phys_page_debug handle non-page-aligned addrs
  target/ppc: Make get_phys_page_debug handle non-page-aligned addrs
  target: Rename get_phys_page_debug to get_phys_addr_debug
  target: Rename cpu_get_phys_page_{,attrs_}debug
  hw/core: Update docs for get_phys_addr_{attrs_, }debug
  target/arm: Rename arm_cpu_get_phys_page()
  monitor: hmp_gva2gpa: Don't page-align cpu_get_phys_addr_debug() arg
    and return
  plugins/api.c: Trust cpu_get_phys_addr_debug() return address
  hw/core: Implement new cpu_translate_for_debug()
  hw/core: Implement cpu_get_phys_addr_attrs_debug() with
    cpu_translate_for_debug()
  target/arm: Implement translate_for_debug
  system/physmem: Use translate_for_debug() in cpu_memory_rw_debug()
  hw/i386/vapic.c: Use cpu_translate_for_debug()
  target/sparc: Use cpu_translate_for_debug()
  hw/xtensa: Use cpu_translate_for_debug()
  target/xtensa/xtensa-semi: Use cpu_translate_for_debug()
  monitor/hmp-cmds: Use cpu_translate_for_debug()
  plugins/api.c: Use cpu_translate_for_debug()
  Remove cpu_get_phys_addr_debug() and cpu_get_phys_addr_attrs_debug()
  hw/i2c/microbit_i2c: Don't index off end of twi_read_sequence[]
  net: mark struct ip6_header as QEMU_PACKED

Philippe Mathieu-Daudé (1):
  MAINTAINERS: Step up to maintain core machine code

 MAINTAINERS                      |  13 +++-
 docs/system/devices/emmc.rst     |  23 ++++++
 hw/display/cirrus_vga_rop2.h     |  52 +++++++++++--
 include/hw/core/cpu.h            |  40 +++++-----
 include/hw/core/sysemu-cpu-ops.h |  39 ++++++++--
 include/hw/sd/sd.h               |  22 ++++--
 include/net/eth.h                |   2 +-
 target/alpha/cpu.h               |   2 +-
 target/arm/cpu.h                 |   3 -
 target/arm/internals.h           |   4 +
 target/avr/cpu.h                 |   2 +-
 target/hppa/cpu.h                |   2 +-
 target/i386/cpu.h                |   2 +-
 target/loongarch/cpu-mmu.h       |   2 +-
 target/m68k/cpu.h                |   2 +-
 target/microblaze/cpu.h          |   2 +-
 target/mips/internal.h           |   2 +-
 target/or1k/cpu.h                |   2 +-
 target/ppc/cpu.h                 |   2 +-
 target/riscv/cpu.h               |   2 +-
 target/rx/cpu.h                  |   2 +-
 target/s390x/s390x-internal.h    |   1 -
 target/sh4/cpu.h                 |   2 +-
 target/sparc/cpu.h               |   2 +-
 target/tricore/cpu.h             |   2 +-
 target/xtensa/cpu.h              |   2 +-
 hw/core/cpu-system.c             |  47 +++++++-----
 hw/display/ati_2d.c              |  24 ++++--
 hw/gpio/pca9552.c                |   2 +-
 hw/i2c/microbit_i2c.c            |   7 +-
 hw/i386/vapic.c                  |  13 ++--
 hw/sd/core.c                     |  53 ++++++++++---
 hw/sd/sd.c                       | 125 +++++++++++++++++++++++--------
 hw/xtensa/sim.c                  |   6 +-
 hw/xtensa/xtfpga.c               |   6 +-
 monitor/hmp-cmds.c               |   8 +-
 net/vhost-vdpa.c                 |   5 +-
 plugins/api.c                    |   8 +-
 system/physmem.c                 |  38 ++++++----
 target/alpha/cpu.c               |   2 +-
 target/alpha/helper.c            |   3 +-
 target/arm/cpu.c                 |   2 +-
 target/arm/ptw.c                 |  39 ++++++----
 target/avr/cpu.c                 |   2 +-
 target/avr/helper.c              |   2 +-
 target/hppa/cpu.c                |   2 +-
 target/hppa/mem_helper.c         |   2 +-
 target/i386/cpu.c                |   2 +-
 target/i386/helper.c             |   4 +-
 target/i386/whpx/whpx-all.c      |   2 +-
 target/loongarch/cpu.c           |   2 +-
 target/loongarch/cpu_helper.c    |   2 +-
 target/m68k/cpu.c                |   2 +-
 target/m68k/helper.c             |   2 +-
 target/microblaze/cpu.c          |   2 +-
 target/microblaze/helper.c       |  11 ++-
 target/mips/cpu.c                |   2 +-
 target/mips/system/physaddr.c    |   2 +-
 target/or1k/cpu.c                |   2 +-
 target/or1k/mmu.c                |   2 +-
 target/ppc/cpu_init.c            |   2 +-
 target/ppc/mmu-hash32.c          |   2 +-
 target/ppc/mmu_common.c          |   4 +-
 target/riscv/cpu.c               |   2 +-
 target/riscv/cpu_helper.c        |   4 +-
 target/rx/cpu.c                  |   2 +-
 target/rx/helper.c               |   2 +-
 target/s390x/cpu-system.c        |   2 +-
 target/s390x/helper.c            |  20 ++---
 target/sh4/cpu.c                 |   2 +-
 target/sh4/helper.c              |   2 +-
 target/sparc/cpu.c               |   2 +-
 target/sparc/mmu_helper.c        |  23 ++++--
 target/tricore/cpu.c             |   2 +-
 target/tricore/helper.c          |   2 +-
 target/xtensa/cpu.c              |   2 +-
 target/xtensa/mmu_helper.c       |   2 +-
 target/xtensa/xtensa-semi.c      |   9 ++-
 hw/sd/trace-events               |   6 +-
 scripts/get_maintainer.pl        |   1 +
 scripts/mkemmc.sh                |   4 +-
 81 files changed, 508 insertions(+), 253 deletions(-)

-- 
2.53.0



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PULL v2 06/41] hw/sd/sd: Allow multi-byte read/write for generic paths
  2026-05-12 20:38 [PULL v2 00/41] Misc HW patches for 2026-05-12 Philippe Mathieu-Daudé
@ 2026-05-12 20:38 ` Philippe Mathieu-Daudé
  2026-05-14 16:27 ` [PULL v2 00/41] Misc HW patches for 2026-05-12 Stefan Hajnoczi
  1 sibling, 0 replies; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-05-12 20:38 UTC (permalink / raw)
  To: qemu-devel

From: Christian Speich <c.speich@avm.de>

Paths that use sd_generic_write/read_data can now write/read multiple
bytes with one call.

Signed-off-by: Christian Speich <c.speich@avm.de>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260417-sdcard-performance-b4-v4-2-119e66be10c2@avm.de>
[PMD: Access &sd->data[sd->data_offset] in sd_generic_read/write_data]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/sd/sd.c | 62 ++++++++++++++++++++++++++++++------------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index c0b89735f69..11f6b91576a 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -1610,7 +1610,7 @@ static sd_rsp_type_t sd_cmd_optional(SDState *sd, SDRequest req)
     return sd_illegal;
 }
 
-/* Configure fields for following sd_generic_write_byte() calls */
+/* Configure fields for following sd_generic_write_data() calls */
 static sd_rsp_type_t sd_cmd_to_receivingdata(SDState *sd, SDRequest req,
                                              uint64_t start, size_t size)
 {
@@ -1625,7 +1625,7 @@ static sd_rsp_type_t sd_cmd_to_receivingdata(SDState *sd, SDRequest req,
     return sd_r1;
 }
 
-/* Configure fields for following sd_generic_read_byte() calls */
+/* Configure fields for following sd_generic_read_data() calls */
 static sd_rsp_type_t sd_cmd_to_sendingdata(SDState *sd, SDRequest req,
                                            uint64_t start,
                                            const void *data, size_t size)
@@ -2615,11 +2615,15 @@ send_response:
 }
 
 /* Return true if buffer is consumed. Configured by sd_cmd_to_receivingdata() */
-static bool sd_generic_write_byte(SDState *sd, uint8_t value)
+static bool sd_generic_write_data(SDState *sd, const void *buf, size_t *len)
 {
-    sd->data[sd->data_offset] = value;
+    size_t to_write = MIN(sd->data_size - sd->data_offset, *len);
 
-    if (++sd->data_offset >= sd->data_size) {
+    memcpy(&sd->data[sd->data_offset], buf, to_write);
+    sd->data_offset += to_write;
+    *len = to_write;
+
+    if (sd->data_offset >= sd->data_size) {
         sd->state = sd_transfer_state;
         return true;
     }
@@ -2627,11 +2631,15 @@ static bool sd_generic_write_byte(SDState *sd, uint8_t value)
 }
 
 /* Return true when buffer is consumed. Configured by sd_cmd_to_sendingdata() */
-static bool sd_generic_read_byte(SDState *sd, uint8_t *value)
+static bool sd_generic_read_data(SDState *sd, void *buf, size_t *len)
 {
-    *value = sd->data[sd->data_offset];
+    size_t to_read = MIN(sd->data_size - sd->data_offset, *len);
 
-    if (++sd->data_offset >= sd->data_size) {
+    memcpy(buf, &sd->data[sd->data_offset], to_read);
+    sd->data_offset += to_read;
+    *len = to_read;
+
+    if (sd->data_offset >= sd->data_size) {
         sd->state = sd_transfer_state;
         return true;
     }
@@ -2658,18 +2666,12 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
     if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
         return length;
 
-    /*
-     * Only read one byte at a time. We will be called again with the
-     * remaining.
-     */
-    length = 1;
-
     trace_sdcard_write_data(sd->proto->name,
                             sd->last_cmd_name,
                             sd->current_cmd, sd->data_offset, value[0]);
     switch (sd->current_cmd) {
     case 24:  /* CMD24:  WRITE_SINGLE_BLOCK */
-        if (sd_generic_write_byte(sd, value[0])) {
+        if (sd_generic_write_data(sd, buf, &length)) {
             /* TODO: Check CRC before committing */
             sd->state = sd_programming_state;
             sd_blk_write(sd, sd->data_start, sd->data_offset);
@@ -2681,6 +2683,12 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
         break;
 
     case 25:  /* CMD25:  WRITE_MULTIPLE_BLOCK */
+        /*
+         * Only read one byte at a time. We will be called again with the
+         * remaining.
+         */
+        length = 1;
+
         if (sd->data_offset == 0) {
             /* Start of the block - let's check the address is valid */
             if (!address_in_range(sd, "WRITE_MULTIPLE_BLOCK",
@@ -2724,7 +2732,7 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
         break;
 
     case 26:  /* CMD26:  PROGRAM_CID */
-        if (sd_generic_write_byte(sd, value[0])) {
+        if (sd_generic_write_data(sd, buf, &length)) {
             /* TODO: Check CRC before committing */
             sd->state = sd_programming_state;
             for (i = 0; i < sizeof(sd->cid); i ++)
@@ -2742,7 +2750,7 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
         break;
 
     case 27:  /* CMD27:  PROGRAM_CSD */
-        if (sd_generic_write_byte(sd, value[0])) {
+        if (sd_generic_write_data(sd, buf, &length)) {
             /* TODO: Check CRC before committing */
             sd->state = sd_programming_state;
             for (i = 0; i < sizeof(sd->csd); i ++)
@@ -2765,7 +2773,7 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
         break;
 
     case 42:  /* CMD42:  LOCK_UNLOCK */
-        if (sd_generic_write_byte(sd, value[0])) {
+        if (sd_generic_write_data(sd, buf, &length)) {
             /* TODO: Check CRC before committing */
             sd->state = sd_programming_state;
             sd_lock_command(sd);
@@ -2775,7 +2783,7 @@ static size_t sd_write_data(SDState *sd, const void *buf, size_t length)
         break;
 
     case 56:  /* CMD56:  GEN_CMD */
-        sd_generic_write_byte(sd, value[0]);
+        sd_generic_write_data(sd, buf, &length);
         break;
 
     default:
@@ -2810,12 +2818,6 @@ static size_t sd_read_data(SDState *sd, void *buf, size_t length)
         return length;
     }
 
-    /*
-     * We will only read one byte at a time. We will be called again with the
-     * remaining buffer.
-     */
-    length = 1;
-
     io_len = sd_blk_len(sd);
 
     trace_sdcard_read_data(sd->proto->name,
@@ -2833,10 +2835,16 @@ static size_t sd_read_data(SDState *sd, void *buf, size_t length)
     case 30: /* CMD30:  SEND_WRITE_PROT */
     case 51: /* ACMD51: SEND_SCR */
     case 56: /* CMD56:  GEN_CMD */
-        sd_generic_read_byte(sd, value);
+        sd_generic_read_data(sd, buf, &length);
         break;
 
     case 18:  /* CMD18:  READ_MULTIPLE_BLOCK */
+        /*
+         * We will only read one byte at a time. We will be called again with
+         * the remaining buffer.
+         */
+        length = 1;
+
         if (sd->data_offset == 0) {
             if (!address_in_range(sd, "READ_MULTIPLE_BLOCK",
                                   sd->data_start, io_len)) {
@@ -2869,7 +2877,7 @@ static size_t sd_read_data(SDState *sd, void *buf, size_t length)
     default:
         qemu_log_mask(LOG_GUEST_ERROR, "%s: DAT read illegal for command %s\n",
                                        __func__, sd->last_cmd_name);
-        *value = dummy_byte;
+        memset(buf, dummy_byte, length);
     }
 
     return length;
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PULL v2 00/41] Misc HW patches for 2026-05-12
  2026-05-12 20:38 [PULL v2 00/41] Misc HW patches for 2026-05-12 Philippe Mathieu-Daudé
  2026-05-12 20:38 ` [PULL v2 06/41] hw/sd/sd: Allow multi-byte read/write for generic paths Philippe Mathieu-Daudé
@ 2026-05-14 16:27 ` Stefan Hajnoczi
  1 sibling, 0 replies; 3+ messages in thread
From: Stefan Hajnoczi @ 2026-05-14 16:27 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 116 bytes --]

Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/11.1 for any user-visible changes.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-05-14 18:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-12 20:38 [PULL v2 00/41] Misc HW patches for 2026-05-12 Philippe Mathieu-Daudé
2026-05-12 20:38 ` [PULL v2 06/41] hw/sd/sd: Allow multi-byte read/write for generic paths Philippe Mathieu-Daudé
2026-05-14 16:27 ` [PULL v2 00/41] Misc HW patches for 2026-05-12 Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.