diff mbox series

[v2,12/21] hw/arm/musicpal: Open-code pflash_cfi02_register()

Message ID 20230109120833.3330-13-philmd@linaro.org
State New
Headers show
Series hw: Remove implicit sysbus_mmio_map() from pflash APIs | expand

Commit Message

Philippe Mathieu-Daudé Jan. 9, 2023, 12:08 p.m. UTC
pflash_cfi02_register() hides an implicit sysbus mapping of
MMIO region #0. This is not practical in a heterogeneous world
where multiple cores use different address spaces. In order to
remove pflash_cfi02_register() from the pflash API, open-code it
as a qdev creation call followed by an explicit sysbus mapping.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/arm/musicpal.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

Comments

Peter Maydell Jan. 13, 2023, 1:48 p.m. UTC | #1
On Mon, 9 Jan 2023 at 12:56, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> pflash_cfi02_register() hides an implicit sysbus mapping of
> MMIO region #0. This is not practical in a heterogeneous world
> where multiple cores use different address spaces. In order to
> remove pflash_cfi02_register() from the pflash API, open-code it
> as a qdev creation call followed by an explicit sysbus mapping.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  hw/arm/musicpal.c | 21 +++++++++++++++------
>  1 file changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
> index 73e2b7e4ce..b5f2b9d9de 100644
> --- a/hw/arm/musicpal.c
> +++ b/hw/arm/musicpal.c
> @@ -1278,12 +1278,21 @@ static void musicpal_init(MachineState *machine)
>           * 0xFF800000 (if there is 8 MB flash). So remap flash access if the
>           * image is smaller than 32 MB.
>           */
> -        pflash_cfi02_register(0x100000000ULL - MP_FLASH_SIZE_MAX,
> -                              "musicpal.flash", flash_size,
> -                              blk, FLASH_SECTOR_SIZE,
> -                              MP_FLASH_SIZE_MAX / flash_size,
> -                              2, 0x00BF, 0x236D, 0x0000, 0x0000,
> -                              0x5555, 0x2AAA, 0);
> +        dev = qdev_new(TYPE_PFLASH_CFI02);
> +        qdev_prop_set_string(dev, "name", "musicpal.flash");
> +        qdev_prop_set_drive(dev, "drive", blk);
> +        qdev_prop_set_uint32(dev, "num-blocks", flash_size / FLASH_SECTOR_SIZE);
> +        qdev_prop_set_uint32(dev, "sector-length", FLASH_SECTOR_SIZE);
> +        qdev_prop_set_uint8(dev, "device-width", 2);
> +        qdev_prop_set_uint8(dev, "mappings", MP_FLASH_SIZE_MAX / flash_size);
> +        qdev_prop_set_uint8(dev, "big-endian", false);
> +        qdev_prop_set_uint16(dev, "id0", 0x00bf);
> +        qdev_prop_set_uint16(dev, "id1", 0x236d);
> +        qdev_prop_set_uint16(dev, "unlock-addr0", 0x5555);
> +        qdev_prop_set_uint16(dev, "unlock-addr1", 0x2aaa);
> +        sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
> +        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0,
> +                        0x100000000ULL - MP_FLASH_SIZE_MAX);

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM
diff mbox series

Patch

diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index 73e2b7e4ce..b5f2b9d9de 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -1278,12 +1278,21 @@  static void musicpal_init(MachineState *machine)
          * 0xFF800000 (if there is 8 MB flash). So remap flash access if the
          * image is smaller than 32 MB.
          */
-        pflash_cfi02_register(0x100000000ULL - MP_FLASH_SIZE_MAX,
-                              "musicpal.flash", flash_size,
-                              blk, FLASH_SECTOR_SIZE,
-                              MP_FLASH_SIZE_MAX / flash_size,
-                              2, 0x00BF, 0x236D, 0x0000, 0x0000,
-                              0x5555, 0x2AAA, 0);
+        dev = qdev_new(TYPE_PFLASH_CFI02);
+        qdev_prop_set_string(dev, "name", "musicpal.flash");
+        qdev_prop_set_drive(dev, "drive", blk);
+        qdev_prop_set_uint32(dev, "num-blocks", flash_size / FLASH_SECTOR_SIZE);
+        qdev_prop_set_uint32(dev, "sector-length", FLASH_SECTOR_SIZE);
+        qdev_prop_set_uint8(dev, "device-width", 2);
+        qdev_prop_set_uint8(dev, "mappings", MP_FLASH_SIZE_MAX / flash_size);
+        qdev_prop_set_uint8(dev, "big-endian", false);
+        qdev_prop_set_uint16(dev, "id0", 0x00bf);
+        qdev_prop_set_uint16(dev, "id1", 0x236d);
+        qdev_prop_set_uint16(dev, "unlock-addr0", 0x5555);
+        qdev_prop_set_uint16(dev, "unlock-addr1", 0x2aaa);
+        sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0,
+                        0x100000000ULL - MP_FLASH_SIZE_MAX);
     }
     sysbus_create_simple(TYPE_MV88W8618_FLASHCFG, MP_FLASHCFG_BASE, NULL);