Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions acpi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Imaging ACPI Configuration SSDT
## Overview
This directory contains imaging specific ACPI SSDT ASL sources

Table of sensor ASL sources
| File | Component |
|---------------|---------------------------------------------|
| isx031.asl | 4x D3 ISX031 sensor with MAX9295 serializer |

Table of common ASL include sources
| File | Component |
|---------------|-----------------------------|
| _ipu0.asl | IPU7 |
| _max96724.asl | MAX96724 GMSL2 deserializer |

## How to compile ACPI ASL source
1. Install acpica tools version 20250807 https://github.com/acpica/acpica/releases/tag/20250807
```sh
wget https://github.com/user-attachments/files/21674610/acpica-unix-20250807.tar.gz
tar zxf ../acpica-unix-20250807.tar.gz
cd acpica-unix-20250807/
make
sudo make install
```

2. Compile ASL source into AML file
```sh
iasl isx031.asl
```

## How to load imaging SSDT at boot time
1. Create initramfs containing AML file
```sh
mkdir -p kernel/firmware/acpi/
find kernel | cpio -H newc --create > img_ssdt.img
```

2. Copy initfamfs to /boot directory
```sh
sudo cp img_ssdt.img /boot
```

3. Add following line to /etc/default/grub for GRUB to load SSDT initramf
```
GRUB_EARLY_INITRD_LINUX_CUSTOM="img_ssdt.img"
```
4. Rebuild GRUB configuration
```sh
sudo update-grub
```

5. Reboot system and inspect loading of SSDT in kernel dmesg
```sh
dmesg | grep SSDT
```
You should see
```
[ 0.009303] ACPI: SSDT ACPI table found in initrd [kernel/firmware/acpi/isx031.aml][0x143d]
...
[ 0.009609] ACPI: Table Upgrade: install [SSDT- - IMG_PTL]
[ 0.009611] ACPI: SSDT 0x00000000678E6000 00143D (v02 IMG_PTL 20250920 INTL 20250404)
```
27 changes: 27 additions & 0 deletions acpi/_ipu.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
External (_SB.PC00.IPU0, DeviceObj)

Scope (\_SB.PC00.IPU0)
{
Name (_DSD, Package () /* method */
{
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), /* Hierarchical Data Extension */,
Package () {
Package () { "mipi-img-port-0", "PRT0" },// mipi port 0 to DES0
Package () { "mipi-img-port-2", "PRT2" },// mipi port 2 to DES1
},
})
Name (PRT0, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } }
},
})
Name (PRT2, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } }
},
})
}
213 changes: 213 additions & 0 deletions acpi/_max96724.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
Device (DES0)
{
Name (_UID, Zero) // _UID: Unique ID
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
Return ("INTC1139")
}
Method (_CID, 0, NotSerialized) // _CID: Compatible ID
{
Return ("INTC1139")
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
CSI2Bus(DeviceInitiated, 0, 6, "\\_SB.PC00.IPU0", 0,,,) // type 0 for CPHY, IPU0 local port 6 remote port 0
I2cSerialBusV2 (
0x0027, // SlaveAddress
ControllerInitiated, // SlaveMode
0x00061A80, // ConnectionSpeed
AddressingMode7Bit, // AddressingMode
"\\_SB.PC00.I2C1", // ResourceSource
0x00, // ResourceSourceIndex
ResourceConsumer, // ResourceUsage
, // DescriptorName
Exclusive, // ShareType
)
})

Name (_DEP, Package () // _DEP: Dependencies
{
\_SB.PC00.IPU0
})

Name (_DSD, Package ()
{
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), /* Device Properties for _DSD */,
Package ()
{
Package () { "i2c-alias-pool", Package () { 0x44, 0x45, 0x46, 0x47 } },
},
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), /* Hierarchical Data Extension */,
Package ()
{
Package () { "mipi-img-port-0", "PRT0" },
Package () { "mipi-img-port-1", "PRT1" },
Package () { "mipi-img-port-2", "PRT2" },
Package () { "mipi-img-port-3", "PRT3" },
Package () { "mipi-img-port-6", "PRT6" },
}
})
Name (PRT0, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } },
},
})

Name (PRT1, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

})

Name (PRT2, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } },
},
})

Name (PRT3, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

})

Name (PRT6, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2 } },
Package () { "mipi-img-link-frequencies", Package() { 1200000000 } }, // 1200 MHz
},
})
}

Device (DES1)
{
Name (_UID, Zero) // _UID: Unique ID
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
Return ("INTC1139")
}
Method (_CID, 0, NotSerialized) // _CID: Compatible ID
{
Return ("INTC1139")
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
CSI2Bus(DeviceInitiated, 0, 4, "\\_SB.PC00.IPU0", 2,,,) // type 0 for CPHY, IPU0 local port 4 remote port 2
I2cSerialBusV2 (
0x0027, // SlaveAddress
ControllerInitiated, // SlaveMode
0x00061A80, // ConnectionSpeed
AddressingMode7Bit, // AddressingMode
"\\_SB.PC00.I2C2", // ResourceSource
0x00, // ResourceSourceIndex
ResourceConsumer, // ResourceUsage
, // DescriptorName
Exclusive, // ShareType
)
})

Name (_DEP, Package () // _DEP: Dependencies
{
\_SB.PC00.IPU0
})

Name (_DSD, Package ()
{
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), /* Device Properties for _DSD */,
Package ()
{
Package () { "i2c-alias-pool", Package () { 0x44, 0x45, 0x46, 0x47 } },
},
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), /* Hierarchical Data Extension */,
Package ()
{
Package () { "mipi-img-port-0", "PRT0" }, // to ser4
Package () { "mipi-img-port-1", "PRT1" }, // to ser5
Package () { "mipi-img-port-2", "PRT2" }, // to ser6
Package () { "mipi-img-port-3", "PRT3" }, // to ser7
Package () { "mipi-img-port-4", "PRT4" }, // to ipu0
}
})
Name (PRT0, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } },
},
})

Name (PRT1, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

})

Name (PRT2, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } },
},
})

Name (PRT3, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

})

Name (PRT4, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2 } },
Package () { "mipi-img-link-frequencies", Package() { 1200000000 } }, // 1200 MHz
},
})
}
Loading