[PATCH 0/5] Apple M1 Support

Simon Glass sjg at chromium.org
Tue Sep 28 05:46:56 CEST 2021


Hi Mark,

On Sun, 26 Sept 2021 at 09:53, Simon Glass <sjg at chromium.org> wrote:
>
> Hi Mark,
>
> On Sat, 25 Sept 2021 at 10:46, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
> >
> > > From: Simon Glass <sjg at chromium.org>
> > > Date: Sat, 25 Sep 2021 08:42:30 -0600
> > >
> > > Hi Mark,
> > >
> > > On Sat, 25 Sept 2021 at 07:52, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
> > > >
> > > > > From: Simon Glass <sjg at chromium.org>
> > > > > Date: Sat, 25 Sep 2021 07:27:41 -0600
> > > > >
> > > > > Hi Mark,
> > > > >
> > > > > On Sat, 25 Sept 2021 at 02:11, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
> > > > > >
> > > > > > > From: Simon Glass <sjg at chromium.org>
> > > > > > > Date: Fri, 24 Sep 2021 19:20:32 -0600
> > > > > > >
> > > > > > > Hi Mark,
> > > > > > >
> > > > > > > On Sat, 18 Sept 2021 at 07:54, Mark Kettenis <kettenis at openbsd.org> wrote:
> > > > > > > >
> > > > > > > > This series adds basic support for Apple's M1 SoC to U-Boot.
> > > > > > > > This builds a basic U-Boot that can be used as a payload
> > > > > > > > for the m1n1 boot loader being developed by the Asahi Linux
> > > > > > > > project.
> > > > > > > >
> > > > > > > > The goal here is to privide an UEFI interface on these machines that
> > > > > > >
> > > > > > > provide
> > > > > > >
> > > > > > > > allows booting various open source OSes.  This initial series provides
> > > > > > > > support for the serial port, framebuffer and the USB 3.1 Type-C ports.
> > > > > > > > It can boot a support OS (e.g. OpenBSD/arm64) from a USB disk.
> > > > > > > >
> > > > > > > > Mark Kettenis (5):
> > > > > > > >   arm: apple: Add initial support for Apple's M1 SoC
> > > > > > > >   serial: s5p: Add Apple M1 support
> > > > > > > >   misc: Add Apple DART driver
> > > > > > > >   arm: dts: apple: Add preliminary device trees
> > > > > > > >   doc: board: apple: Add Apple M1 documentation
> > > > > > > >
> > > > > > > >  arch/arm/Kconfig                              |  22 +
> > > > > > > >  arch/arm/Makefile                             |   1 +
> > > > > > > >  arch/arm/dts/t8103-j274.dts                   | 135 +++++
> > > > > > > >  arch/arm/dts/t8103-j293.dts                   |  97 ++++
> > > > > > > >  arch/arm/dts/t8103.dtsi                       | 506 ++++++++++++++++++
> > > > > > > >  arch/arm/include/asm/arch-m1/clk.h            |  11 +
> > > > > > > >  arch/arm/include/asm/arch-m1/uart.h           |  41 ++
> > > > > > > >  arch/arm/mach-apple/Kconfig                   |  18 +
> > > > > > > >  arch/arm/mach-apple/Makefile                  |   4 +
> > > > > > > >  arch/arm/mach-apple/board.c                   | 163 ++++++
> > > > > > > >  arch/arm/mach-apple/lowlevel_init.S           |  16 +
> > > > > > > >  configs/apple_m1_defconfig                    |  14 +
> > > > > > > >  doc/board/apple/index.rst                     |   9 +
> > > > > > > >  doc/board/apple/m1.rst                        |  54 ++
> > > > > > > >  doc/board/index.rst                           |   1 +
> > > > > > > >  drivers/misc/Kconfig                          |   7 +
> > > > > > > >  drivers/misc/Makefile                         |   1 +
> > > > > > > >  drivers/misc/apple_dart.c                     | 171 ++++++
> > > > > > > >  drivers/serial/Kconfig                        |   2 +-
> > > > > > > >  drivers/serial/serial_s5p.c                   |  22 +
> > > > > > > >  include/configs/apple.h                       |  38 ++
> > > > > > > >  .../interrupt-controller/apple-aic.h          |  15 +
> > > > > > > >  include/dt-bindings/pinctrl/apple.h           |  13 +
> > > > > > > >  include/dt-bindings/spmi/spmi.h               |  10 +
> > > > > > > >  24 files changed, 1370 insertions(+), 1 deletion(-)
> > > > > > > >  create mode 100644 arch/arm/dts/t8103-j274.dts
> > > > > > > >  create mode 100644 arch/arm/dts/t8103-j293.dts
> > > > > > > >  create mode 100644 arch/arm/dts/t8103.dtsi
> > > > > > > >  create mode 100644 arch/arm/include/asm/arch-m1/clk.h
> > > > > > > >  create mode 100644 arch/arm/include/asm/arch-m1/uart.h
> > > > > > > >  create mode 100644 arch/arm/mach-apple/Kconfig
> > > > > > > >  create mode 100644 arch/arm/mach-apple/Makefile
> > > > > > > >  create mode 100644 arch/arm/mach-apple/board.c
> > > > > > > >  create mode 100644 arch/arm/mach-apple/lowlevel_init.S
> > > > > > > >  create mode 100644 configs/apple_m1_defconfig
> > > > > > > >  create mode 100644 doc/board/apple/index.rst
> > > > > > > >  create mode 100644 doc/board/apple/m1.rst
> > > > > > > >  create mode 100644 drivers/misc/apple_dart.c
> > > > > > > >  create mode 100644 include/configs/apple.h
> > > > > > > >  create mode 100644 include/dt-bindings/interrupt-controller/apple-aic.h
> > > > > > > >  create mode 100644 include/dt-bindings/pinctrl/apple.h
> > > > > > > >  create mode 100644 include/dt-bindings/spmi/spmi.h
> > > > > > > >
> > > > > > > > --
> > > > > > > > 2.33.0
> > > > > > > >
> > > > > > >
> > > > > > > I gave this a whirl on a Macbook Air A2337 and needed the patch below
> > > > > > > to build the devicetree files. Sorry the formatting is broken.
> > > > > > >
> > > > > > > Also when booting I get this:
> > > > > > >
> > > > > > > ...
> > > > > > > Preparing to boot kernel at 0x808200000 with fdt at 0x8082e8000
> > > > > > > Valid payload found
> > > > > > > Preparing to run next stage at 0x808200000...
> > > > > > > MMU: shutting down...
> > > > > > > MMU: shutdown successful, clearing caches
> > > > > > >
> > > > > > >
> > > > > > > Then the display clears and it hangs. If I try the J274 devicetree it
> > > > > > > just reboots at that point.
> > > > > > >
> > > > > > > What should I expect? I was hoping for console output as I don't have
> > > > > > > serial connected. I don't have a suitable serial cable, and the USB
> > > > > > > gadget mode did not result in a ttyACM0 device appearing.
> > > > > >
> > > > > > For framebuffer support you also need the "30bpp framebuffer support"
> > > > > > series I posted earlier:
> > > > > >
> > > > > > https://patchwork.ozlabs.org/project/uboot/list/?series=262617
> > > > > >
> > > > > > With that your should get the usual U-Boot output on the screen.  I've
> > > > > > not tested the Air, but it should work there.
> > > > >
> > > > > Ah OK, yes that fixes it, thanks!
> > > > >
> > > > > So how do I get the keyboard to work in U-Boot? Or are you using
> > > > > serial somehow?
> > > >
> > > > The laptop keyboard doesn't work yet, so I'm using a USB keyboard when
> > > > I'm not using a serial console.  You need the xhci-dwc3 diff I sent
> > > > earlier for that:
> > > >
> > > > https://patchwork.ozlabs.org/project/uboot/patch/20210916140009.59009-1-kettenis@openbsd.org/
> > >
> > > Actually that seems to be applied in mainline now. Yes USB keyboard works.
> > >
> > > It looks like the keyboard needs SPI and there is some sort of linux
> > > keyboard driver, but perhaps not for M1.
> >
> > Yes.  It is certaily doable in u-boot, but not a priority.  I plan to
> > revisit this once I have a driver going in OpenBSD and a better
> > understanding of how the hardware works.
>
> Makes sense.
>
> >
> > > > > Also it takes for ever to put a test version on the device...how are
> > > > > you doing that for development?
> > > >
> > > > If you install m1n1.macho without a payload, you can then use the
> > > > python scripts that come with m1n1 to upload kernels over serial.
> > > > There is a USB gadget implementation in m1n1, so you don't need a real
> > > > serial connection.  Just connect a Linux machine to the M1 Mac using a
> > > > USB cable and a USB serial device should show up on the Linux machine
> > > > once m1n1 is running on the Mac.  Set the M1N1DEVICE environment
> > > > variable to the right device name and run:
> > > >
> > > > $ python3 linux.py --compression=none u-boot-nodtb.bin t8103-j274.dtb
> > >
> > > OK I see. I did try the USB serial thing but was missing the fact that
> > > U-Boot seems to kill it. So this works fine, thank you will await your
> > > next series. Any way to get U-Boot serial console going in the same
> > > way?
> >
> > Probably, but the existing USB gadget code in u-boot doesn't seem to
> > implement USB serial so it would be a significant amount of work.  And
> > it would only work after you bring the USB controller up, so it
> > wouldn't be very useful for debugging purposes.
>
> Yse, usbtty.c is very old and doesn't even use driver model, so would
> need a refresh.
>
> >
> > There is a real serial port, and if you have another M1 Mac it should
> > be fairly easy to access it:
> >
> > https://github.com/AsahiLinux/docs/wiki/Developer-Quickstart#using-an-m1-machine
> >
> > Otherwise you need to build some special hardware.
>
> Yes I saw that but I only have one. Will see if I can steal/find another.

OK got a mini as a DUT. It works so far as running macvdmtool on the
Air and I can see the /dev/cu.debug-console device, but don't see any
serial output when I reboot the DUT. The display works fine, although
the USB keyboard only works on the USB-C ports of the mini, not the
USB-A ones.

Do you use 'screen /dev/cu.debug-console' or something else? I have a
cable with SS on it: This is what I see on the air.

sudo ./macvdmtool reboot serial
Mac type: J313AP
Looking for HPM devices...
Found: IOService:/AppleARMPE/arm-io at 10F00000/AppleT810xIO/i2c0 at 35010000/AppleS5L8940XI2CController/hpmBusManager at 6B/AppleHPMBusController/hpm0/AppleHPMARM
Connection: Sink
Status: APP
Unlocking... OK
Entering DBMa mode... Status: DBMa
Rebooting target into normal mode... OK
Waiting for connection........ Connected
Putting target into serial mode... OK
Putting local end into serial mode... OK
Exiting DBMa mode... OK
sglass at Simons-MacBook-Air macvdmtool

So it seems to be connected but I am not seeing serial output from
m1n1 or U-Boot.

Regards,
Simon


More information about the U-Boot mailing list