qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/45] Raspberry Pi 4B machine
@ 2023-12-08  2:31 Sergey Kambalin
  2023-12-08  2:31 ` [PATCH v4 01/45] Split out common part of BCM283X classes Sergey Kambalin
                   ` (46 more replies)
  0 siblings, 47 replies; 83+ messages in thread
From: Sergey Kambalin @ 2023-12-08  2:31 UTC (permalink / raw)
  To: qemu-arm; +Cc: qemu-devel, Sergey Kambalin

Introducing Raspberry Pi 4B model.
It contains new BCM2838 SoC, PCIE subsystem,
RNG200, Thermal sensor and Genet network controller.

It can work with recent linux kernels 6.x.x.
Two avocado tests was added to check that.

Unit tests has been made as read/write operations
via mailbox properties.

Genet integration test is under development.

Every single commit
1) builds without errors
2) passes regression tests
3) passes style check*
*the only exception is bcm2838-mbox-property-test.c file
containing heavy macros usage which cause a lot of
false-positives of checkpatch.pl.

I did my best to keep the commits less than 200 changes,
but had to make some of them a bit more in order to
keep their integrity.

This is v2 patchset with the most of v1 remarks fixed.
I named it as 'v4' because of mistakes while attempts to send previous patchsets
Please ignore all other v1...v3 patchsets except the very first one.

Sergey Kambalin (45):
  Split out common part of BCM283X classes
  Split out common part of peripherals
  Split out raspi machine common part
  Introduce BCM2838 SoC
  Add GIC-400 to BCM2838 SoC
  Add BCM2838 GPIO stub
  Implement BCM2838 GPIO functionality
  Connect SD controller to BCM2838 GPIO
  Add GPIO and SD to BCM2838 periph
  Add BCM2838 checkpoint support
  Introduce Raspberry PI 4 machine
  Temporarily disable unimplemented rpi4b devices
  Add memory region for BCM2837 RPiVid ASB
  Add BCM2838 PCIE Root Complex
  Add BCM2838 PCIE host
  Enable BCM2838 PCIE
  Add RNG200 skeleton
  Add RNG200 RNG and RBG
  Get rid of RNG200 timer
  Implement BCM2838 thermal sensor
  Add clock_isp stub
  Add GENET stub
  Add GENET register structs. Part 1
  Add GENET register structs. Part 2
  Add GENET register structs. Part 3
  Add GENET register structs. Part 4
  Add GENET register access macros
  Implement GENET register ops
  Implement GENET MDIO
  Implement GENET TX path
  Implement GENET RX path
  Enable BCM2838 GENET controller
  Connect RNG200, PCIE and GENET to GIC
  Add Rpi4b boot tests
  Add mailbox test stub
  Add mailbox test constants
  Add mailbox tests tags. Part 1
  Add mailbox tests tags. Part 2
  Add mailbox tests tags. Part 3
  Add mailbox property tests. Part 1
  Add mailbox property tests. Part 2
  Add mailbox property tests. Part 3
  Add missed BCM2835 properties
  Append added properties to mailbox test
  Add RPi4B to paspi4.rst

 docs/system/arm/raspi.rst                |   11 +-
 hw/arm/bcm2835_peripherals.c             |  218 +++--
 hw/arm/bcm2836.c                         |  116 ++-
 hw/arm/bcm2838.c                         |  288 ++++++
 hw/arm/bcm2838_pcie.c                    |  289 ++++++
 hw/arm/bcm2838_peripherals.c             |  292 ++++++
 hw/arm/meson.build                       |    8 +-
 hw/arm/raspi.c                           |  131 +--
 hw/arm/raspi4b.c                         |  112 +++
 hw/arm/trace-events                      |    6 +
 hw/gpio/bcm2838_gpio.c                   |  389 ++++++++
 hw/gpio/meson.build                      |    5 +-
 hw/misc/bcm2835_property.c               |   47 +
 hw/misc/bcm2838_rng200.c                 |  420 +++++++++
 hw/misc/bcm2838_thermal.c                |   98 ++
 hw/misc/meson.build                      |    2 +
 hw/misc/trace-events                     |    9 +
 hw/net/bcm2838_genet.c                   | 1088 ++++++++++++++++++++++
 hw/net/meson.build                       |    2 +
 hw/net/trace-events                      |   16 +
 include/hw/arm/bcm2835_peripherals.h     |   29 +-
 include/hw/arm/bcm2836.h                 |   27 +-
 include/hw/arm/bcm2838.h                 |   31 +
 include/hw/arm/bcm2838_pcie.h            |   75 ++
 include/hw/arm/bcm2838_peripherals.h     |   97 ++
 include/hw/arm/raspberrypi-fw-defs.h     |   12 +-
 include/hw/arm/raspi_platform.h          |   37 +
 include/hw/display/bcm2835_fb.h          |    2 +
 include/hw/gpio/bcm2838_gpio.h           |   45 +
 include/hw/misc/bcm2838_rng200.h         |   43 +
 include/hw/misc/bcm2838_thermal.h        |   24 +
 include/hw/net/bcm2838_genet.h           |  426 +++++++++
 tests/avocado/boot_linux_console.py      |   92 ++
 tests/qtest/bcm2838-mailbox.c            |   61 ++
 tests/qtest/bcm2838-mailbox.h            |  584 ++++++++++++
 tests/qtest/bcm2838-mbox-property-test.c |  621 ++++++++++++
 tests/qtest/meson.build                  |    3 +-
 37 files changed, 5551 insertions(+), 205 deletions(-)
 create mode 100644 hw/arm/bcm2838.c
 create mode 100644 hw/arm/bcm2838_pcie.c
 create mode 100644 hw/arm/bcm2838_peripherals.c
 create mode 100644 hw/arm/raspi4b.c
 create mode 100644 hw/gpio/bcm2838_gpio.c
 create mode 100644 hw/misc/bcm2838_rng200.c
 create mode 100644 hw/misc/bcm2838_thermal.c
 create mode 100644 hw/net/bcm2838_genet.c
 create mode 100644 include/hw/arm/bcm2838.h
 create mode 100644 include/hw/arm/bcm2838_pcie.h
 create mode 100644 include/hw/arm/bcm2838_peripherals.h
 create mode 100644 include/hw/gpio/bcm2838_gpio.h
 create mode 100644 include/hw/misc/bcm2838_rng200.h
 create mode 100644 include/hw/misc/bcm2838_thermal.h
 create mode 100644 include/hw/net/bcm2838_genet.h
 create mode 100644 tests/qtest/bcm2838-mailbox.c
 create mode 100644 tests/qtest/bcm2838-mailbox.h
 create mode 100644 tests/qtest/bcm2838-mbox-property-test.c

-- 
2.34.1



^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: [PATCH v4 00/45] Raspberry Pi 4B machine
@ 2023-12-19 17:08 Kambalin, Sergey
  0 siblings, 0 replies; 83+ messages in thread
From: Kambalin, Sergey @ 2023-12-19 17:08 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Sergey Kambalin, qemu-arm@nongnu.org, qemu-devel@nongnu.org

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

Thanks!

I know about the 'offset' parameter, but in this particular case I use these structures as layouts only and don't 'switch' over them. So I decided to set the offsets to 0 in order to simplify the code.


And extra thanks for highlighting the potential issue with memcpy() 😊. I'll fix it in [v5] as well as the comments to first 10 patches.


Have a nice holidays!



Sergey Kambalin
Software Developer,
Auriga Inc.


________________________________
От: Peter Maydell <peter.maydell@linaro.org>
Отправлено: 19 декабря 2023 г. 10:39:13
Кому: Kambalin, Sergey
Копия: Sergey Kambalin; qemu-arm@nongnu.org; qemu-devel@nongnu.org
Тема: Re: [PATCH v4 00/45] Raspberry Pi 4B machine

On Tue, 19 Dec 2023 at 16:18, Kambalin, Sergey
<sergey.kambalin@auriga.com> wrote:
>
> Thank you a lot for the review Peter!
>
>
> May I kindly ask you to take just a brief look at the first patches of GENET? I'd like to know if I've chosen the right way to replace bitfields with  QEMU REG32/FIELD32 macros.

The FIELD and REG32 uses look mostly OK, but the
second argument to REG32() should not be 0 each time:

REG32(GENET_SYS_REV_CTRL,              0)
REG32(GENET_INTRL_0,                0)

etc. The idea is that that second argument is the offset
in the register file of the register; then the macro
defines you an A_GENET_SYS_REV_CTRL which is that value,
and you can use it as a case label in the "switch (offset) {"
in the read/write function.

I'm a also a bit confused about the use of offsetof() in patch 27.

In patch 28 the implementation of bcm2838_genet_read() and
bcm2838_genet_write() use a memcpy() between a local variable
and memory which I'm assuming is an index into one of these
register structs, which won't do the right thing if the host
is big-endian. If you need a "load/store N bytes to memory in
host order", we have ldn_he_p() and stn_he_p(); also available
in _le_ and _be_ flavours for load/store in specific endianness.

thanks
-- PMM

[-- Attachment #2: Type: text/html, Size: 4594 bytes --]

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

end of thread, other threads:[~2024-01-29  3:19 UTC | newest]

Thread overview: 83+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-08  2:31 [PATCH v4 00/45] Raspberry Pi 4B machine Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 01/45] Split out common part of BCM283X classes Sergey Kambalin
2023-12-18 15:58   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 02/45] Split out common part of peripherals Sergey Kambalin
2023-12-18 15:58   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 03/45] Split out raspi machine common part Sergey Kambalin
2023-12-18 15:59   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 04/45] Introduce BCM2838 SoC Sergey Kambalin
2023-12-18 16:07   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 05/45] Add GIC-400 to " Sergey Kambalin
2023-12-18 16:23   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 06/45] Add BCM2838 GPIO stub Sergey Kambalin
2023-12-18 16:28   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 07/45] Implement BCM2838 GPIO functionality Sergey Kambalin
2023-12-18 16:35   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 08/45] Connect SD controller to BCM2838 GPIO Sergey Kambalin
2023-12-18 16:38   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 09/45] Add GPIO and SD to BCM2838 periph Sergey Kambalin
2023-12-18 16:41   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 10/45] Add BCM2838 checkpoint support Sergey Kambalin
2023-12-18 16:42   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 11/45] Introduce Raspberry PI 4 machine Sergey Kambalin
2024-01-15 12:32   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 12/45] Temporarily disable unimplemented rpi4b devices Sergey Kambalin
2024-01-15 12:37   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 13/45] Add memory region for BCM2837 RPiVid ASB Sergey Kambalin
2024-01-15 13:12   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 14/45] Add BCM2838 PCIE Root Complex Sergey Kambalin
2024-01-15 13:57   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 15/45] Add BCM2838 PCIE host Sergey Kambalin
2024-01-15 14:08   ` Peter Maydell
2024-01-29  3:18   ` Sergei Kambalin
2023-12-08  2:31 ` [PATCH v4 16/45] Enable BCM2838 PCIE Sergey Kambalin
2024-01-15 14:10   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 17/45] Add RNG200 skeleton Sergey Kambalin
2024-01-15 14:19   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 18/45] Add RNG200 RNG and RBG Sergey Kambalin
2024-01-15 14:29   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 19/45] Get rid of RNG200 timer Sergey Kambalin
2024-01-15 14:33   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 20/45] Implement BCM2838 thermal sensor Sergey Kambalin
2024-01-15 14:42   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 21/45] Add clock_isp stub Sergey Kambalin
2024-01-15 14:43   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 22/45] Add GENET stub Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 23/45] Add GENET register structs. Part 1 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 24/45] Add GENET register structs. Part 2 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 25/45] Add GENET register structs. Part 3 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 26/45] Add GENET register structs. Part 4 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 27/45] Add GENET register access macros Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 28/45] Implement GENET register ops Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 29/45] Implement GENET MDIO Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 30/45] Implement GENET TX path Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 31/45] Implement GENET RX path Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 32/45] Enable BCM2838 GENET controller Sergey Kambalin
2024-01-15 15:13   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 33/45] Connect RNG200, PCIE and GENET to GIC Sergey Kambalin
2024-01-15 14:48   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 34/45] Add Rpi4b boot tests Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 35/45] Add mailbox test stub Sergey Kambalin
2024-01-15 14:52   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 36/45] Add mailbox test constants Sergey Kambalin
2024-01-15 14:55   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 37/45] Add mailbox tests tags. Part 1 Sergey Kambalin
2024-01-15 14:58   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 38/45] Add mailbox tests tags. Part 2 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 39/45] Add mailbox tests tags. Part 3 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 40/45] Add mailbox property tests. Part 1 Sergey Kambalin
2024-01-15 15:01   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 41/45] Add mailbox property tests. Part 2 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 42/45] Add mailbox property tests. Part 3 Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 43/45] Add missed BCM2835 properties Sergey Kambalin
2024-01-15 15:07   ` Peter Maydell
2023-12-08  2:31 ` [PATCH v4 44/45] Append added properties to mailbox test Sergey Kambalin
2023-12-08  2:31 ` [PATCH v4 45/45] Add RPi4B to paspi4.rst Sergey Kambalin
2024-01-15 15:02   ` Peter Maydell
2023-12-09 10:47 ` [PATCH v4 00/45] Raspberry Pi 4B machine Philippe Mathieu-Daudé
2023-12-19 16:11 ` Peter Maydell
2023-12-19 16:18   ` Kambalin, Sergey
2023-12-19 16:39     ` Peter Maydell
2023-12-19 17:07       ` Kambalin, Sergey
2024-01-15 15:17   ` Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2023-12-19 17:08 Kambalin, Sergey

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).