diff mbox series

[v3,8/9] hw/arm/raspi: Add the Raspberry Pi Zero machine

Message ID 20201018203358.1530378-9-f4bug@amsat.org
State Superseded
Headers show
Series hw/arm: Add raspi Zero, 1A+ and 3A+ machines | expand

Commit Message

Philippe Mathieu-Daudé Oct. 18, 2020, 8:33 p.m. UTC
Similarly to the Pi A, the Pi Zero uses a BCM2835 SoC (ARMv6Z core).

Example booting the machine using content from [*]:

  $ qemu-system-arm -M raspi0 -serial stdio \
      -kernel raspberrypi/firmware/boot/kernel.img \
      -dtb raspberrypi/firmware/boot/bcm2708-rpi-zero.dtb \
      -append 'printk.time=0 earlycon=pl011,0x20201000 console=ttyAMA0'
  [    0.000000] Booting Linux on physical CPU 0x0
  [    0.000000] Linux version 4.19.118+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1311 Mon Apr 27 14:16:15 BST 2020
  [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
  [    0.000000] CPU: VIPT aliasing data cache, unknown instruction cache
  [    0.000000] OF: fdt: Machine model: Raspberry Pi Zero
  ...

[*] http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel_1.20200512-2_armhf.deb

Reviewed-by: Luc Michel <luc.michel@greensocs.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 hw/arm/raspi.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Igor Mammedov Oct. 23, 2020, 3:51 p.m. UTC | #1
On Sun, 18 Oct 2020 22:33:57 +0200
Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:

> Similarly to the Pi A, the Pi Zero uses a BCM2835 SoC (ARMv6Z core).

> 

> Example booting the machine using content from [*]:

> 

>   $ qemu-system-arm -M raspi0 -serial stdio \

>       -kernel raspberrypi/firmware/boot/kernel.img \

>       -dtb raspberrypi/firmware/boot/bcm2708-rpi-zero.dtb \

>       -append 'printk.time=0 earlycon=pl011,0x20201000 console=ttyAMA0'

>   [    0.000000] Booting Linux on physical CPU 0x0

>   [    0.000000] Linux version 4.19.118+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1311 Mon Apr 27 14:16:15 BST 2020

>   [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d

>   [    0.000000] CPU: VIPT aliasing data cache, unknown instruction cache

>   [    0.000000] OF: fdt: Machine model: Raspberry Pi Zero

>   ...

> 

> [*] http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel_1.20200512-2_armhf.deb

> 

> Reviewed-by: Luc Michel <luc.michel@greensocs.com>

> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---

>  hw/arm/raspi.c | 13 +++++++++++++

>  1 file changed, 13 insertions(+)

> 

> diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c

> index 91a59d1d489..1510ca01afe 100644

> --- a/hw/arm/raspi.c

> +++ b/hw/arm/raspi.c

> @@ -319,6 +319,15 @@ static void raspi_machine_class_common_init(MachineClass *mc,

>      mc->default_ram_id = "ram";

>  };

>  

> +static void raspi0_machine_class_init(ObjectClass *oc, void *data)

> +{

> +    MachineClass *mc = MACHINE_CLASS(oc);

> +    RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc);

> +

> +    rmc->board_rev = 0x900092;


shouldn't it be 
920092	Zero	1.2	512MB	Embest
or
920093  Zero	1.3	512MB	Embest

> +    raspi_machine_class_common_init(mc, rmc->board_rev);

> +};

> +

>  static void raspi1ap_machine_class_init(ObjectClass *oc, void *data)

>  {

>      MachineClass *mc = MACHINE_CLASS(oc);

> @@ -352,6 +361,10 @@ static void raspi3b_machine_class_init(ObjectClass *oc, void *data)

>  

>  static const TypeInfo raspi_machine_types[] = {

>      {

> +        .name           = MACHINE_TYPE_NAME("raspi0"),

> +        .parent         = TYPE_RASPI_MACHINE,

> +        .class_init     = raspi0_machine_class_init,

> +    }, {

>          .name           = MACHINE_TYPE_NAME("raspi1ap"),

>          .parent         = TYPE_RASPI_MACHINE,

>          .class_init     = raspi1ap_machine_class_init,
Philippe Mathieu-Daudé Oct. 23, 2020, 5:35 p.m. UTC | #2
Hi Igor,

On 10/23/20 5:51 PM, Igor Mammedov wrote:
> On Sun, 18 Oct 2020 22:33:57 +0200

> Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:

> 

>> Similarly to the Pi A, the Pi Zero uses a BCM2835 SoC (ARMv6Z core).

>>

>> Example booting the machine using content from [*]:

>>

>>    $ qemu-system-arm -M raspi0 -serial stdio \

>>        -kernel raspberrypi/firmware/boot/kernel.img \

>>        -dtb raspberrypi/firmware/boot/bcm2708-rpi-zero.dtb \

>>        -append 'printk.time=0 earlycon=pl011,0x20201000 console=ttyAMA0'

>>    [    0.000000] Booting Linux on physical CPU 0x0

>>    [    0.000000] Linux version 4.19.118+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1311 Mon Apr 27 14:16:15 BST 2020

>>    [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d

>>    [    0.000000] CPU: VIPT aliasing data cache, unknown instruction cache

>>    [    0.000000] OF: fdt: Machine model: Raspberry Pi Zero

>>    ...

>>

>> [*] http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel_1.20200512-2_armhf.deb

>>

>> Reviewed-by: Luc Michel <luc.michel@greensocs.com>

>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

>> ---

>>   hw/arm/raspi.c | 13 +++++++++++++

>>   1 file changed, 13 insertions(+)

>>

>> diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c

>> index 91a59d1d489..1510ca01afe 100644

>> --- a/hw/arm/raspi.c

>> +++ b/hw/arm/raspi.c

>> @@ -319,6 +319,15 @@ static void raspi_machine_class_common_init(MachineClass *mc,

>>       mc->default_ram_id = "ram";

>>   };

>>   

>> +static void raspi0_machine_class_init(ObjectClass *oc, void *data)

>> +{

>> +    MachineClass *mc = MACHINE_CLASS(oc);

>> +    RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc);

>> +

>> +    rmc->board_rev = 0x900092;

> 

> shouldn't it be

> 920092	Zero	1.2	512MB	Embest

> or

> 920093  Zero	1.3	512MB	Embest


I took the value from the "New-style revision codes"
table listed in hw/arm/raspi.c before the REV_CODE
register definitions:

https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md

90009x's manufacturer is "Sony UK", 92009x is "Embest".
I guess we don't care much the manufacturer :)

The Revision 1.3 exposed the MIPI camera interface.
As we don't model it, I prefer to use the 1.2 revision
which matches better.

I'll add this information in the commit description.

Thanks for reviewing!

> 

>> +    raspi_machine_class_common_init(mc, rmc->board_rev);

>> +};

>> +

>>   static void raspi1ap_machine_class_init(ObjectClass *oc, void *data)

>>   {

>>       MachineClass *mc = MACHINE_CLASS(oc);

>> @@ -352,6 +361,10 @@ static void raspi3b_machine_class_init(ObjectClass *oc, void *data)

>>   

>>   static const TypeInfo raspi_machine_types[] = {

>>       {

>> +        .name           = MACHINE_TYPE_NAME("raspi0"),

>> +        .parent         = TYPE_RASPI_MACHINE,

>> +        .class_init     = raspi0_machine_class_init,

>> +    }, {

>>           .name           = MACHINE_TYPE_NAME("raspi1ap"),

>>           .parent         = TYPE_RASPI_MACHINE,

>>           .class_init     = raspi1ap_machine_class_init,

> 

>
Igor Mammedov Oct. 23, 2020, 5:39 p.m. UTC | #3
On Fri, 23 Oct 2020 19:35:19 +0200
Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:

> Hi Igor,

> 

> On 10/23/20 5:51 PM, Igor Mammedov wrote:

> > On Sun, 18 Oct 2020 22:33:57 +0200

> > Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:

> >   

> >> Similarly to the Pi A, the Pi Zero uses a BCM2835 SoC (ARMv6Z core).

> >>

> >> Example booting the machine using content from [*]:

> >>

> >>    $ qemu-system-arm -M raspi0 -serial stdio \

> >>        -kernel raspberrypi/firmware/boot/kernel.img \

> >>        -dtb raspberrypi/firmware/boot/bcm2708-rpi-zero.dtb \

> >>        -append 'printk.time=0 earlycon=pl011,0x20201000 console=ttyAMA0'

> >>    [    0.000000] Booting Linux on physical CPU 0x0

> >>    [    0.000000] Linux version 4.19.118+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1311 Mon Apr 27 14:16:15 BST 2020

> >>    [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d

> >>    [    0.000000] CPU: VIPT aliasing data cache, unknown instruction cache

> >>    [    0.000000] OF: fdt: Machine model: Raspberry Pi Zero

> >>    ...

> >>

> >> [*] http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel_1.20200512-2_armhf.deb

> >>

> >> Reviewed-by: Luc Michel <luc.michel@greensocs.com>

> >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> >> ---

> >>   hw/arm/raspi.c | 13 +++++++++++++

> >>   1 file changed, 13 insertions(+)

> >>

> >> diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c

> >> index 91a59d1d489..1510ca01afe 100644

> >> --- a/hw/arm/raspi.c

> >> +++ b/hw/arm/raspi.c

> >> @@ -319,6 +319,15 @@ static void raspi_machine_class_common_init(MachineClass *mc,

> >>       mc->default_ram_id = "ram";

> >>   };

> >>   

> >> +static void raspi0_machine_class_init(ObjectClass *oc, void *data)

> >> +{

> >> +    MachineClass *mc = MACHINE_CLASS(oc);

> >> +    RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc);

> >> +

> >> +    rmc->board_rev = 0x900092;  

> > 

> > shouldn't it be

> > 920092	Zero	1.2	512MB	Embest

> > or

> > 920093  Zero	1.3	512MB	Embest  

> 

> I took the value from the "New-style revision codes"

> table listed in hw/arm/raspi.c before the REV_CODE

> register definitions:

> 

> https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md

> 

> 90009x's manufacturer is "Sony UK", 92009x is "Embest".

> I guess we don't care much the manufacturer :)

> 

> The Revision 1.3 exposed the MIPI camera interface.

> As we don't model it, I prefer to use the 1.2 revision

> which matches better.

> 

> I'll add this information in the commit description.


With that
Reviewed-by: Igor Mammedov <imammedo@redhat.com>


> 

> Thanks for reviewing!

> 

> >   

> >> +    raspi_machine_class_common_init(mc, rmc->board_rev);

> >> +};

> >> +

> >>   static void raspi1ap_machine_class_init(ObjectClass *oc, void *data)

> >>   {

> >>       MachineClass *mc = MACHINE_CLASS(oc);

> >> @@ -352,6 +361,10 @@ static void raspi3b_machine_class_init(ObjectClass *oc, void *data)

> >>   

> >>   static const TypeInfo raspi_machine_types[] = {

> >>       {

> >> +        .name           = MACHINE_TYPE_NAME("raspi0"),

> >> +        .parent         = TYPE_RASPI_MACHINE,

> >> +        .class_init     = raspi0_machine_class_init,

> >> +    }, {

> >>           .name           = MACHINE_TYPE_NAME("raspi1ap"),

> >>           .parent         = TYPE_RASPI_MACHINE,

> >>           .class_init     = raspi1ap_machine_class_init,  

> > 

> >   

>
diff mbox series

Patch

diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
index 91a59d1d489..1510ca01afe 100644
--- a/hw/arm/raspi.c
+++ b/hw/arm/raspi.c
@@ -319,6 +319,15 @@  static void raspi_machine_class_common_init(MachineClass *mc,
     mc->default_ram_id = "ram";
 };
 
+static void raspi0_machine_class_init(ObjectClass *oc, void *data)
+{
+    MachineClass *mc = MACHINE_CLASS(oc);
+    RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc);
+
+    rmc->board_rev = 0x900092;
+    raspi_machine_class_common_init(mc, rmc->board_rev);
+};
+
 static void raspi1ap_machine_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
@@ -352,6 +361,10 @@  static void raspi3b_machine_class_init(ObjectClass *oc, void *data)
 
 static const TypeInfo raspi_machine_types[] = {
     {
+        .name           = MACHINE_TYPE_NAME("raspi0"),
+        .parent         = TYPE_RASPI_MACHINE,
+        .class_init     = raspi0_machine_class_init,
+    }, {
         .name           = MACHINE_TYPE_NAME("raspi1ap"),
         .parent         = TYPE_RASPI_MACHINE,
         .class_init     = raspi1ap_machine_class_init,