qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: Alistair Francis <alistair23@gmail.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Zoltán Baldaszti" <bztemail@gmail.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Alistair Francis" <alistair@alistair23.me>,
	"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
	"Andrew Baumann" <Andrew.Baumann@microsoft.com>,
	"Esteban Bosse" <estebanbosse@gmail.com>,
	"Cleber Rosa" <crosa@redhat.com>, qemu-arm <qemu-arm@nongnu.org>,
	"Clement Deschamps" <clement.deschamps@antfield.fr>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Laurent Bonnans" <laurent.bonnans@here.com>,
	"Cheng Xiang" <ext-cheng.xiang@here.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Pekka Enberg" <penberg@iki.fi>,
	"Guenter Roeck" <linux@roeck-us.net>,
	"Eduardo Habkost" <ehabkost@redhat.com>
Subject: Re: [PATCH 05/19] hw/arm/bcm2835: Add various unimplemented peripherals
Date: Tue, 8 Oct 2019 11:43:05 +0200	[thread overview]
Message-ID: <d2ab9145-cf4e-008c-8351-51f271fa37f8@amsat.org> (raw)
In-Reply-To: <CAKmqyKP+ABP9J=1UJEA+HEO4+UBuyjOoyzZVEJEDiM7N63bMag@mail.gmail.com>

Hi Alistair,

On 9/27/19 11:42 PM, Alistair Francis wrote:
>   On Thu, Sep 26, 2019 at 10:44 AM Philippe Mathieu-Daudé
> <f4bug@amsat.org> wrote:
>>
>> Base addresses and sizes taken from the "BCM2835 ARM Peripherals"
>> datasheet from February 06 2012:
>> https://www.raspberrypi.org/app/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
>>
>> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>>   hw/arm/bcm2835_peripherals.c         | 31 ++++++++++++++++++++++++++++
>>   include/hw/arm/bcm2835_peripherals.h | 15 ++++++++++++++
>>   include/hw/arm/raspi_platform.h      |  8 +++++++
>>   3 files changed, 54 insertions(+)
>>
>> diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c
>> index 1bd2ff41d5..fdcf616c56 100644
>> --- a/hw/arm/bcm2835_peripherals.c
>> +++ b/hw/arm/bcm2835_peripherals.c
>> @@ -22,6 +22,20 @@
>>   /* Capabilities for SD controller: no DMA, high-speed, default clocks etc. */
>>   #define BCM2835_SDHC_CAPAREG 0x52134b4
>>
>> +static void create_unimp(BCM2835PeripheralState *ps,
>> +                         UnimplementedDeviceState *uds,
>> +                         const char *name, hwaddr ofs, hwaddr size)
>> +{
>> +    sysbus_init_child_obj(OBJECT(ps), name, uds,
>> +                          sizeof(UnimplementedDeviceState),
>> +                          TYPE_UNIMPLEMENTED_DEVICE);
>> +    qdev_prop_set_string(DEVICE(uds), "name", name);
>> +    qdev_prop_set_uint64(DEVICE(uds), "size", size);
>> +    object_property_set_bool(OBJECT(uds), true, "realized", &error_fatal);
>> +    memory_region_add_subregion_overlap(&ps->peri_mr, ofs,
>> +                    sysbus_mmio_get_region(SYS_BUS_DEVICE(uds), 0), -1000);
> 
> Why not just use create_unimplemented_device() and not bother saving
> the UnimplementedDeviceState members in the struct?

create_unimplemented_device() calls
  -> sysbus_mmio_map_overlap()
     -> sysbus_mmio_map_common()
       -> memory_region_del_subregion(get_system_memory())

So it maps the device at *absolute* offset in the system memory.

create_unimp() maps the device at offset *relative* to peri_mr.

Patch 8 of this series maps the PERI (container) block at peri_base 
(fixed at BCM2836_PERI_BASE=0x3F000000 for the 2836/2837), then patch 12 
adds the 2838 which has PERI mapped at 0xfe000000. So we have the same 
"container" block mapped at different addresses.
Not the PERI block itself doesn't know its base address, all offsets are 
relative.

So using create_unimp() allow to use the same block in two different SoCs.

8:  https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg00678.html
12: https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg00684.html

>> +}
>> +
>>   static void bcm2835_peripherals_init(Object *obj)
>>   {
>>       BCM2835PeripheralState *s = BCM2835_PERIPHERALS(obj);
>> @@ -323,6 +337,23 @@ static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp)
>>           error_propagate(errp, err);
>>           return;
>>       }
>> +
>> +    create_unimp(s, &s->armtmr, "bcm2835-sp804", ARMCTRL_TIMER0_1_OFFSET, 0x40);
>> +    create_unimp(s, &s->systmr, "bcm2835-systimer", ST_OFFSET, 0x20);
>> +    create_unimp(s, &s->cprman, "bcm2835-cprman", CPRMAN_OFFSET, 0x1000);
>> +    create_unimp(s, &s->a2w, "bcm2835-a2w", A2W_OFFSET, 0x1000);
>> +    create_unimp(s, &s->i2s, "bcm2835-i2s", I2S_OFFSET, 0x100);
>> +    create_unimp(s, &s->smi, "bcm2835-smi", SMI_OFFSET, 0x100);
>> +    create_unimp(s, &s->spi[0], "bcm2835-spi0", SPI0_OFFSET, 0x20);
>> +    create_unimp(s, &s->bscsl, "bcm2835-spis", BSC_SL_OFFSET, 0x100);
>> +    create_unimp(s, &s->i2c[0], "bcm2835-i2c0", BSC0_OFFSET, 0x20);
>> +    create_unimp(s, &s->i2c[1], "bcm2835-i2c1", BSC1_OFFSET, 0x20);
>> +    create_unimp(s, &s->i2c[2], "bcm2835-i2c2", BSC2_OFFSET, 0x20);
>> +    create_unimp(s, &s->otp, "bcm2835-otp", OTP_OFFSET, 0x80);
>> +    create_unimp(s, &s->dbus, "bcm2835-dbus", DBUS_OFFSET, 0x8000);
>> +    create_unimp(s, &s->ave0, "bcm2835-ave0", AVE0_OFFSET, 0x8000);
>> +    create_unimp(s, &s->dwc2, "dwc-usb2", USB_OTG_OFFSET, 0x1000);
>> +    create_unimp(s, &s->sdramc, "bcm2835-sdramc", SDRAMC_OFFSET, 0x100);
>>   }
>>
>>   static void bcm2835_peripherals_class_init(ObjectClass *oc, void *data)
>> diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h
>> index 6b17f6a382..62a4c7b559 100644
>> --- a/include/hw/arm/bcm2835_peripherals.h
>> +++ b/include/hw/arm/bcm2835_peripherals.h
>> @@ -23,6 +23,7 @@
>>   #include "hw/sd/sdhci.h"
>>   #include "hw/sd/bcm2835_sdhost.h"
>>   #include "hw/gpio/bcm2835_gpio.h"
>> +#include "hw/misc/unimp.h"
>>
>>   #define TYPE_BCM2835_PERIPHERALS "bcm2835-peripherals"
>>   #define BCM2835_PERIPHERALS(obj) \
>> @@ -37,6 +38,10 @@ typedef struct BCM2835PeripheralState {
>>       MemoryRegion ram_alias[4];
>>       qemu_irq irq, fiq;
>>
>> +    UnimplementedDeviceState systmr;
>> +    UnimplementedDeviceState armtmr;
>> +    UnimplementedDeviceState cprman;
>> +    UnimplementedDeviceState a2w;
>>       PL011State uart0;
>>       BCM2835AuxState aux;
>>       BCM2835FBState fb;
>> @@ -48,6 +53,16 @@ typedef struct BCM2835PeripheralState {
>>       SDHCIState sdhci;
>>       BCM2835SDHostState sdhost;
>>       BCM2835GpioState gpio;
>> +    UnimplementedDeviceState i2s;
>> +    UnimplementedDeviceState spi[1];
>> +    UnimplementedDeviceState i2c[3];
>> +    UnimplementedDeviceState otp;
>> +    UnimplementedDeviceState dbus;
>> +    UnimplementedDeviceState ave0;
>> +    UnimplementedDeviceState bscsl;
>> +    UnimplementedDeviceState smi;
>> +    UnimplementedDeviceState dwc2;
>> +    UnimplementedDeviceState sdramc;
>>   } BCM2835PeripheralState;
>>
>>   #endif /* BCM2835_PERIPHERALS_H */
>> diff --git a/include/hw/arm/raspi_platform.h b/include/hw/arm/raspi_platform.h
>> index 66969fac5d..cdcbca943f 100644
>> --- a/include/hw/arm/raspi_platform.h
>> +++ b/include/hw/arm/raspi_platform.h
>> @@ -38,6 +38,8 @@
>>                                                         * Doorbells & Mailboxes */
>>   #define CPRMAN_OFFSET           0x100000 /* Power Management, Watchdog */
>>   #define CM_OFFSET               0x101000 /* Clock Management */
>> +#define A2W_OFFSET              0x102000 /* Reset controller */
>> +#define AVS_OFFSET              0x103000 /* Audio Video Standard */
>>   #define RNG_OFFSET              0x104000
>>   #define GPIO_OFFSET             0x200000
>>   #define UART0_OFFSET            0x201000
>> @@ -45,11 +47,17 @@
>>   #define I2S_OFFSET              0x203000
>>   #define SPI0_OFFSET             0x204000
>>   #define BSC0_OFFSET             0x205000 /* BSC0 I2C/TWI */
>> +#define OTP_OFFSET              0x20f000
>> +#define BSC_SL_OFFSET           0x214000 /* SPI slave */
>>   #define AUX_OFFSET              0x215000 /* AUX: UART1/SPI1/SPI2 */
>>   #define EMMC1_OFFSET            0x300000
>>   #define SMI_OFFSET              0x600000
>>   #define BSC1_OFFSET             0x804000 /* BSC1 I2C/TWI */
>> +#define BSC2_OFFSET             0x805000 /* BSC2 I2C/TWI */
>> +#define DBUS_OFFSET             0x900000
>> +#define AVE0_OFFSET             0x910000
>>   #define USB_OTG_OFFSET          0x980000 /* DTC_OTG USB controller */
>> +#define SDRAMC_OFFSET           0xe00000
>>   #define DMA15_OFFSET            0xE05000 /* DMA controller, channel 15 */
>>
>>   /* GPU interrupts */
>> --
>> 2.20.1
>>
>>


  reply	other threads:[~2019-10-08  9:46 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-26 17:34 [PATCH 00/19] hw/arm/raspi: Improve Raspberry Pi 2/3 reliability Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 01/19] hw/arm/raspi: Use the IEC binary prefix definitions Philippe Mathieu-Daudé
2019-09-27 21:36   ` Alistair Francis
2019-10-08  8:57   ` Alex Bennée
2019-10-09  0:26   ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 02/19] hw/arm/bcm2835_peripherals: Improve logging Philippe Mathieu-Daudé
2019-09-27 21:37   ` Alistair Francis
2019-10-08  9:00   ` Alex Bennée
2019-10-09  1:28     ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 03/19] hw/arm/bcm2835_peripherals: Name various address spaces Philippe Mathieu-Daudé
2019-09-27 21:38   ` Alistair Francis
2019-10-08  9:04   ` Alex Bennée
2019-10-09  1:48   ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 04/19] hw/arm/bcm2835: Rename some definitions Philippe Mathieu-Daudé
2019-09-27 21:40   ` Alistair Francis
2019-10-08 10:40   ` Alex Bennée
2019-09-26 17:34 ` [PATCH 05/19] hw/arm/bcm2835: Add various unimplemented peripherals Philippe Mathieu-Daudé
2019-09-27 21:42   ` Alistair Francis
2019-10-08  9:43     ` Philippe Mathieu-Daudé [this message]
2019-10-11 21:55       ` Alistair Francis
2019-10-08 11:09   ` Alex Bennée
2019-09-26 17:34 ` [PATCH 06/19] hw/char/bcm2835_aux: Add trace events Philippe Mathieu-Daudé
2019-10-08 11:22   ` Alex Bennée
2019-10-14 15:36   ` Peter Maydell
2019-10-14 16:03     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 07/19] hw/misc/bcm2835_mbox: " Philippe Mathieu-Daudé
2019-10-08 11:32   ` Alex Bennée
2019-10-08 11:38     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 08/19] hw/misc/bcm2835_thermal: Add a dummy BCM2835 thermal sensor Philippe Mathieu-Daudé
2019-10-08 11:36   ` Alex Bennée
2019-10-08 11:42     ` Philippe Mathieu-Daudé
2019-10-14 15:37   ` Peter Maydell
2019-10-14 16:05     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 09/19] hw/arm/bcm2835_peripherals: Use the thermal sensor block Philippe Mathieu-Daudé
2019-09-27 21:51   ` Alistair Francis
2019-09-26 17:34 ` [PATCH 10/19] hw/timer/bcm2835: Add the BCM2835 SYS_timer Philippe Mathieu-Daudé
2019-10-08 14:52   ` Alex Bennée
2019-10-08 14:53     ` Philippe Mathieu-Daudé
2019-10-09 11:06       ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 11/19] hw/arm/bcm2835_peripherals: Use the SYS_timer Philippe Mathieu-Daudé
2019-10-08 15:22   ` Alex Bennée
2019-10-09  7:39     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 12/19] hw/arm/bcm2835_peripherals: Add Clock/Power/Reset Manager blocks Philippe Mathieu-Daudé
2019-10-01  9:51   ` Philippe Mathieu-Daudé
2019-10-07 17:23     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 13/19] hw/arm/raspi: Define various blocks base addresses Philippe Mathieu-Daudé
2019-10-08 15:32   ` Alex Bennée
2019-09-26 17:34 ` [PATCH 14/19] python/qemu/machine: Allow to use other serial consoles than default Philippe Mathieu-Daudé
2019-09-27 12:54   ` bzt
2019-09-27 13:26     ` Guenter Roeck
2019-09-27 13:36       ` Peter Maydell
2019-09-27 14:44         ` Philippe Mathieu-Daudé
2019-10-09 15:28   ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 15/19] tests/boot_linux_console: Extract the gunzip() helper Philippe Mathieu-Daudé
2019-10-08 15:33   ` Alex Bennée
2019-10-09 15:31   ` Cleber Rosa
2019-10-24  9:23   ` Esteban Bosse
2019-09-26 17:34 ` [PATCH 16/19] tests/boot_linux_console: Add a test for the Raspberry Pi 2 Philippe Mathieu-Daudé
2019-10-08 15:34   ` Alex Bennée
2019-10-09 15:43   ` Cleber Rosa
2019-10-09 15:43     ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 17/19] tests/boot_linux_console: Test the raspi2 UART1 (16550 based) Philippe Mathieu-Daudé
2019-10-08 15:35   ` Alex Bennée
2019-10-09 15:54   ` Cleber Rosa
2019-09-26 17:34 ` [PATCH 18/19] tests/boot_linux_console: Boot Linux and run few commands on raspi3 Philippe Mathieu-Daudé
2019-10-09 16:12   ` Cleber Rosa
2019-10-09 16:21     ` Philippe Mathieu-Daudé
2019-09-26 17:34 ` [PATCH 19/19] tests/boot_linux_console: Test SDHCI and termal sensor " Philippe Mathieu-Daudé
2019-10-09 16:23   ` Cleber Rosa
2019-09-26 20:32 ` [PATCH 00/19] hw/arm/raspi: Improve Raspberry Pi 2/3 reliability BALATON Zoltan
2019-09-27  8:50   ` Philippe Mathieu-Daudé
2019-10-14 15:45 ` Peter Maydell
2019-10-14 16:07   ` Philippe Mathieu-Daudé
2019-10-16  9:57 ` Bonnans, Laurent

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d2ab9145-cf4e-008c-8351-51f271fa37f8@amsat.org \
    --to=f4bug@amsat.org \
    --cc=Andrew.Baumann@microsoft.com \
    --cc=alistair23@gmail.com \
    --cc=alistair@alistair23.me \
    --cc=bztemail@gmail.com \
    --cc=clement.deschamps@antfield.fr \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=estebanbosse@gmail.com \
    --cc=ext-cheng.xiang@here.com \
    --cc=laurent.bonnans@here.com \
    --cc=linux@roeck-us.net \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=penberg@iki.fi \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).