Linux on Apple SoCs

By: @never_released (none.delete@this.none.none), August 4, 2019 11:05 am
Room: Moderated Discussions
Looking at Apple pre-release firmware, I was able to extract a device tree, which confirms directly the fact that Apple ported Linux to their SoCs...

This prompts a few questions, including why they use Linux instead of their own kernels for internal engineering purposes.

Wasn't a surprise to me because of other references earlier, but having it confirmed directly dissipates the remaining doubts.

Dumped flattened device tree on Apple Cayman:

[/]
| model str 'Cayman B0'
| compatible str 'apple,cayman-rs1'
| #address-cells val 0x00000002
| #size-cells val 0x00000001
| interrupt-parent val 0x00000001
[cpus]
| name str 'cpus'
| #address-cells val 0x00000001
| #size-cells val 0x00000000
[cpu@0]
| name str 'cpu'
| device_type str 'cpu'
| compatible str 'arm,armv8'
| reg val 0x00000000
| enable-method str 'spin-table'
| cpu-release-addr cell 00000008 0007FFF8
[cpu@1]
| name str 'cpu'
| device_type str 'cpu'
| compatible str 'arm,armv8'
| reg val 0x00000001
| enable-method str 'spin-table'
| cpu-release-addr cell 00000008 0007FFF8
[memory]
| name str 'memory'
| device_type str 'memory'
| reg cell 00000008 00000000 02000000
[reserved-memory]
| name str 'reserved-memory'
| #address-cells val 0x00000002
| #size-cells val 0x00000001
| ranges val 0x00000000
[immr]
| name str 'immr'
| device_type str 'immr'
| compatible str 'hx,uio'
| reg cell 00000002 00000000 11000000 00000006 00000000 20000000 00000007 C0000000 01000000
[usd]
| name str 'usd'
| compatible str 'hx,uio'
| reg cell 00000002 00000000 00000000
[usd-dmem]
| name str 'usd-dmem'
| compatible str 'hx,uio-dmem'
| reg cell 00000008 00000000 00000000
[interrupt-controller@20e100000]
| name str 'interrupt-controller'
| device_type str 'interrupt-controller'
| compatible str 'hx,aic'
| #interrupt-cells val 0x00000003
| #address-cells val 0x00000000
| interrupt-controller str ''
| reg cell 00000002 0E100000 00010000
| linux,phandle val 0x00000001
| phandle val 0x00000001
[timer]
| name str 'timer'
| device_type str 'timer'
| compatible str 'arm,armv8-timer'
| interrupts cell 00000001 00000000 0000FF01
[uart0]
| name str 'uart0'
| device_type str 'uart0'
| compatible str 'hx,uart'
| reg cell 00000002 0A0C0000 00001000
| id val 0x00000000
| interrupts cell 00000001 000000DA 0000FF01
[ehci@20c200000]
| name str 'ehci'
| device_type str 'ehci'
| compatible str 'hx,ehci'
| reg cell 00000002 0C200000 00001000 00000002 0C000000 00001000 00000002 0C900000 00001000
| interrupts cell 00000001 000000F2 0000FF01
[ehci@20c400000]
| name str 'ehci'
| device_type str 'ehci'
| compatible str 'hx,ehci'
| reg cell 00000002 0C400000 00001000 00000002 0C000000 00001000 00000002 0C900000 00001000
| interrupts cell 00000001 000000F4 0000FF01
[otg@20c100000]
| name str 'otg'
| device_type str 'otg'
| compatible str 'snps,dwc2'
| reg cell 00000002 0C100000 00100000
| interrupts cell 00000001 000000F1 0000FF01
[gpio]
| name str 'gpio'
| device_type str 'gpio'
| compatible str 'simple-bus'
| reg cell 00000002 0F100000 00001000
| max_gpios val 0x000000D0
[acc]
| name str 'acc'
| device_type str 'acc'
| compatible str 'hx,uio'
| reg cell 00000002 02000000 01000000
[vxd]
| name str 'vxd'
| device_type str 'vxd'
| compatible str 'hx,uio-dmem'
| reg cell 00000002 08100000 00030000
| dma cell 08000000
[spis]
| name str 'spis'
| compatible str 'samsung,hx-spi'
| reg cell 00000002 0A080000 00004000
| interrupts cell 00000001 000000D6 0000FF01
| num-cs cell 00000002
[spi@0]
| name str 'spi'
| device_type str 'spi'
| compatible str 'samsung,hx-spi'
| reg cell 00000000
| spi-tx-bus-width cell 00000001
| spi-rx-bus-width cell 00000001
| spi-max-frequency cell 0007A120
[spi@1]
| name str 'spi'
| device_type str 'spi'
| compatible str 'samsung,hx-spi'
| reg cell 00000001
| spi-tx-bus-width cell 00000001
| spi-rx-bus-width cell 00000001
| spi-max-frequency cell 0007A120
[rgx_cr]
| name str 'rgx_cr'
| device_type str 'rgx_cr'
| compatible str 'hx,uio-dmem'
| reg cell 00000002 01000000 00FD0000
[rgxcr]
| name str 'rgxcr'
| device_type str 'rgxcr'
| compatible str 'hx,gpu'
| reg cell 00000002 01000000 00020000 00000002 01D00000 00004000 00000002 01D10000 00000400 00000002 01F00000 00090000
[pmgr]
| name str 'pmgr'
| device_type str 'pmgr'
| compatible str 'hx,uio'
| reg cell 00000002 0E000000 00100000
[pmscsr]
| name str 'pmscsr'
| device_type str 'pmscsr'
| compatible str 'simple-bus'
| reg cell 00000002 0E400000 00005000
[aop_global]
| name str 'aop_global'
| device_type str 'aop_global'
| compatible str 'simple-bus'
| reg cell 00000002 10000000 00010000 00000002 10E00000 000E0000
[minipmgr]
| name str 'minipmgr'
| device_type str 'minipmgr'
| compatible str 'simple-bus'
| reg cell 00000002 10200000 00100000
[apcie_common]
| name str 'apcie_common'
| device_type str 'apcie_common'
| compatible str 'simple-bus'
| reg cell 00000006 00000000 0FFF0000
[pcie_config]
| name str 'pcie_config'
| device_type str 'pcie_config'
| compatible str 'simple-bus'
| reg cell 00000006 10000000 10000000
[cp]
| name str 'cp'
| device_type str 'cp'
| compatible str 'simple-bus'
| reg cell 00000002 00D00000 001F0000
| interrupts cell 00000001 00000025 0000FF01
[amcc]
| name str 'amcc'
| device_type str 'amcc'
| compatible str 'hx,uio'
| reg cell 00000002 00000000 00040000
| interrupts cell 00000001 00000034 0000FF01
[amcx]
| name str 'amcx'
| device_type str 'amcx'
| compatible str 'hx,uio'
| reg cell 00000002 00200000 00100000
| interrupts cell 00000001 00000038 0000FF01
| max_dcs val 0x00000004
[i2c0]
| name str 'i2c0'
| compatible str 'hx,i2c'
| reg cell 00000002 0A110000 00001000
| interrupts cell 00000001 000000E8 0000FF01
[i2c1]
| name str 'i2c1'
| compatible str 'hx,i2c'
| reg cell 00000002 0A111000 00001000
| interrupts cell 00000001 000000E9 0000FF01
[i2c2]
| name str 'i2c2'
| compatible str 'hx,i2c'
| reg cell 00000002 0A112000 00001000
| interrupts cell 00000001 000000EA 0000FF01
[dvfm]
| name str 'dvfm'
| device_type str 'dvfm'
| dvfmtable cell 00223DA0 0000000C 001DA9C0 0000000B 001915E0 0000000A 0014B0E0 00000009 00101D00 00000008 000B8920 00000007 001B7740 00000006 0015F900 00000005 0010A9A0 00000004 000B2B60 00000003 00060AE0 00000002 00005DC0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
| sleep_st val 0x0000000F
[socperf]
| name str 'socperf'
| device_type str 'socperf'
| socperf_table_mask cell 0000FFF6
[chosen]
| name str 'chosen'
 Next Post in Thread >
TopicPosted ByDate
Linux on Apple SoCs@never_released2019/08/04 11:05 AM
  Linux on Apple SoCsMaynard Handley2019/08/04 12:03 PM
  Linux on Apple SoCsme2019/08/04 12:05 PM
    Linux on Apple SoCs@never_released2019/08/04 12:19 PM
  Linux on Apple SoCsAdrian2019/08/04 01:03 PM
    Linux on Apple SoCsMontaray Jack2019/08/04 01:51 PM
      Linux on Apple SoCsGabriele Svelto2019/08/06 12:49 AM
        Linux on Apple SoCsMontaray Jack2019/08/07 04:05 PM
          Linux on Apple SoCsUngo2019/08/08 02:38 AM
  Linux on Apple SoCsDoug S2019/08/04 05:46 PM
    Linux on Apple SoCsMaynard Handley2019/08/04 06:35 PM
      Linux on Apple SoCs@never_released2019/08/04 07:08 PM
        Linux on Apple SoCsMaynard Handley2019/08/04 07:39 PM
  Linux on Apple SoCsrjs2019/08/04 07:09 PM
    Linux on Apple SoCs@never_released2019/08/04 07:15 PM
      Linux on Apple SoCsrjs2019/08/04 07:27 PM
      Linux on Apple SoCsAnon32019/08/04 10:13 PM
  Linux on Apple SoCsJames Wise2019/08/04 08:14 PM
    Linux on Apple SoCsGabriele Svelto2019/08/06 12:50 AM
  Linux on Apple SoCsSimon Farnsworth2019/08/06 03:04 AM
Reply to this Topic
Name:
Email:
Topic:
Body: No Text
How do you spell green?