User:Flamingradian
Jump to navigation
Jump to search
📱 |
This user's main device is a Google Pixel 3a (google-sargo). |
---|
![]() |
This user has a GitLab profile. |
---|
![]() |
This user has a Matrix account. |
---|
♻ |
This user has ported 1 devices to postmarketOS. |
---|
♻ |
This user mainlined 1 devices. |
---|
The tools that I have for debugging are a USB cable, a screwdriver, and a chair.
Owns Devices
Device | Notes |
---|---|
Google Pixel 3a (google-sargo) | PVT 1.0, daily driver + mainlining target |
Various information I found for mainlining
SMMU
There are 7 valid IOMMU stream match registers on the Pixel 3a provided by the bootloader:
<&apps_smmu 0x140 0xf> // for eMMC <&apps_smmu 0xa0 0xf> // unknown, might be for SD card <&apps_smmu 0xc0 0xf> // unknown <&apps_smmu 0x100 0xf> // unknown, might be for UFS HC <&apps_smmu 0x740 0x0> // for USB <&apps_smmu 0x880 0x8> // for MDSS <&apps_smmu 0xc80 0x8> // for MDSS
The vendor kernel preserves the bootloader's settings on these streams and doesn't specify what all of them are used for. If you're experiencing insane behaviour trying to add a device node (reboot not initiated by the kernel, bring down of all peripherals, etc.), then you might have some luck trying these.
Patch used to fetch these:
diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c index 2ff7a72cf377..e2c7e123285d 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c @@ -2057,6 +2057,7 @@ static int arm_smmu_device_probe(struct platform_device *pdev) int num_irqs, i, err; u32 global_irqs, pmu_irqs; irqreturn_t (*global_fault)(int irq, void *dev); + u32 smr; smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL); if (!smmu) { @@ -2174,6 +2175,15 @@ static int arm_smmu_device_probe(struct platform_device *pdev) /* Check for RMRs and install bypass SMRs if any */ arm_smmu_rmr_install_bypass_smr(smmu); + for (i = 0; i < smmu->num_mapping_groups; i++) { + smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i)); + + if (smr & ARM_SMMU_SMR_VALID) + dev_info(dev, "Stream match register: <&apps_smmu 0x%lx 0x%lx>", + FIELD_GET(ARM_SMMU_SMR_ID, smr), + FIELD_GET(ARM_SMMU_SMR_MASK, smr & ~ARM_SMMU_SMR_VALID)); + } + arm_smmu_device_reset(smmu); arm_smmu_test_smr_masks(smmu);