# Debug PDC (RPMh hardware block)

Source: [https://docs.qualcomm.com/doc/80-88500-3/topic/debugging_pdc_rpmh_hardware_block.html](https://docs.qualcomm.com/doc/80-88500-3/topic/debugging_pdc_rpmh_hardware_block.html)

PDC performs the following.
      
- Run sleep sequences to shut down critical resources for a given subsystem
- Run wake sequences to wake up critical resources to get a subsystem RSC operational
- Handle wake-up interrupts when a subsystem is in a power collapse assisted by RPMh.

## Debugging scenarios

The CMM script checks the following when it parses for each resource (for example, global or subsystem).
- General status
- Interrupt request (IRQ) configuration

The following are the example debug scenarios.
- PDC is stuck:
    1. Check PDC for DRV
    2. Check DRV
- Issue with subsystem wake-up:
    1. Check PDC IRQ status
    2. Check IRQ configuration for expected interrupt

## PDC ulog on subsystem

In Non-HLOS, run uLogDump.cmm to parse the PDC log.

    ULogDump.cmm <output file path> PDC LogCopy to clipboard

Example log:

    Content-Type: text/pdc-driver-1.0; title=PDC Driver
    0x2F92FC02: Initializing target
    0x2F93089E: Initializing main driver
    0x2F930B86:  Interrupt configuration (Number of Interrupts: 15)
    0x2F930DA4:  GPIO configuration (Number of GPIOs: 96) (Number of MUXs: 20)
    0x2F9F7231: TCS Resource lookup: (Name: cx.lvl) (Base address: 0x30000)
    0x2F9F77ED: TCS Resource lookup: (Name: mx.lvl) (Base address: 0x30010)
    0x2F9F8287: TCS Resource lookup: (Name: xo.lvl) (Base address: 0x30080)
    0x2F9F89DA: TCS write (Resource: xo.lvl) (TCS.Cmd: 0.0) (hlvl: 1)
    0x2F9F8BC0: TCS write (Resource: cx.lvl) (TCS.Cmd: 0.1) (hlvl: 1)
    0x2F9F8DE2: TCS write (Resource: mx.lvl) (TCS.Cmd: 0.2) (hlvl: 1)
    0x2F9F9195: TCS write (Resource: xo.lvl) (TCS.Cmd: 1.0) (hlvl: 1)
    0x2F9F9381: TCS write (Resource: cx.lvl) (TCS.Cmd: 1.1) (hlvl: 0)
    0x2F9F969E: TCS write (Resource: mx.lvl) (TCS.Cmd: 1.2) (hlvl: 1)
    0x2F9F9903: TCS write (Resource: mx.lvl) (TCS.Cmd: 2.0) (hlvl: 2)
    0x2F9F9C0F: TCS write (Resource: cx.lvl) (TCS.Cmd: 2.1) (hlvl: 2)
    0x2F9F9ED1: TCS write (Resource: xo.lvl) (TCS.Cmd: 2.2) (hlvl: 3)
    0x2F9FA04A: TCS registers programmed successfully
    0x2FB5EF50: Config subsystem int 475 (PDC bit: 0) (trigger: 4)
    0x2FD0A43E: Successfully enabled 4 of 5 profiling unitsCopy to clipboard

## Dump script

The `pdc_dump.cmm ss=<subsystem name> [op=<output file path>]` script dumps information for each PDC for the following:

- Sequencer
- Triggered command set (TCS)
- IRQ
- Parameter

Note: The subsystem name can be application processor, modem, audio, sensors, AOP, debug, GPU, display, or compute DSP.

The following is the script for the sequencer.

    Start:  0×0
        Busy:   0
        PC:     0×0
        Instr:  0×E1
        Timer:  0×0
        Pwr Override:  (0×0, 0×0)
        Wait Override: (0×0, 0×0)
        Br Override:   (0×0, 0×0)
        Branches:      (0×0, 0×0, 0×0, 0×0)
        Delays:        (0×0, 0×0, 0×0, 0×0, 0×0, 0×0, 0×0, 0×0, 0×0, 0×0, 0x0, 0×0, 0×0, 0×0, 0×0, 0×0)Copy to clipboard

The following is the script for TCS0.

            AMC Mode:    0
            En Mask:    0x7
            Wait Mask:    0
            Idle:    0
            CMD0
                slave: 3, addr: 0x80, data: 0x1
                resp req: 0, triggerd: 0,  issued: 0, ackd: 0
             …
            CMDc
        …
        TCSnCopy to clipboard

The following is the script for the software IRQ:

    Num: (ss_irq, gpio, en, status, cfg,     owner)
            0:   (475,    -,       0,    0,      high,    0)
            1:   (476,    -,       0,    0,      falling,  0FFFFFFFF)
            2:   (477,    -,       0,    0,      falling,  0FFFFFFFF)
            3:   (478,    -,       0,    0,      falling,  0FFFFFFFF)
            4:  (479,    -,       0,    0,      falling,  0FFFFFFFF)
            5:  (480,    -,       0,    0,      falling,  0FFFFFFFF)
            6:  (481,    -,       0,    0,      falling,  0FFFFFFFF)
          …
          IRQnCopy to clipboard

The following are the parameters:

- Version
    - Major – 1
    - Minor – 0
- Resources
    - DRV – 2
    - TCS – 3
    - cmds/tcs – 4
    - ProfUnits – 5
    - Timestamps – 0
- Sequencer
    - CMDs – 96
    - XPwrCtrls – 1
    - XWaitInputs – 1
    - AOP IRQs – 2
- IRQ and GPIOs
    - IRQs – 15
    - GPIOs – 96
    - GP SELs – 30

**Parent Topic:** [RPMh debugging](https://docs.qualcomm.com/doc/80-88500-3/topic/81_RPMh_hardening_and_debugging_.html)

Last Published: Sep 26, 2023

[Previous Topic
Debug BCM (RPMh hardware block)](https://docs.qualcomm.com/bundle/publicresource/80-88500-3/topics/debugging_bcm_rpmh_hardware_block.md) [Next Topic
Debug VRM (RPMh hardware block)](https://docs.qualcomm.com/bundle/publicresource/80-88500-3/topics/debugging_vrm_rpmh_hardware_block.md)