From f5572b489f74741588449963a68b78ed2f5e3bef Mon Sep 17 00:00:00 2001 From: Xilin Wu Date: Sun, 6 Feb 2022 12:39:18 +0800 Subject: [PATCH] Add split DSDT source for dipper --- dipper/DSDT.AML | Bin 0 -> 251963 bytes dipper/Dsdt.asl | 61 + dipper/adc.asl | 708 +++++ dipper/audio.asl | 3 + dipper/audio_bus.asl | 120 + dipper/backlightcfg.asl | 79 + dipper/backlightcfg2.asl | 16 + dipper/buses.asl | 678 +++++ dipper/cust_adc.asl | 899 ++++++ dipper/cust_arraybutton.asl | 42 + dipper/cust_camera.asl | 647 +++++ dipper/cust_camera_exasoc.asl | 577 ++++ dipper/cust_camera_exasoc_resources.asl | 664 +++++ dipper/cust_camera_resources.asl | 1259 +++++++++ dipper/cust_dsdt.asl | 39 + dipper/cust_hwn.asl | 171 ++ dipper/cust_pmic_batt.asl | 50 + dipper/cust_sensors.asl | 31 + dipper/cust_thermal_zones.asl | 569 ++++ dipper/cust_touch.asl | 74 + dipper/cust_touch_resources.asl | 204 ++ dipper/cust_win_mproc.asl | 33 + dipper/display.asl | 609 ++++ dipper/display2.asl | 389 +++ dipper/displayext.asl | 49 + dipper/dsdt_common.asl | 148 + dipper/graphics.asl | 3424 +++++++++++++++++++++++ dipper/nfc.asl | 172 ++ dipper/panelcfg.asl | 89 + dipper/panelcfg2.asl | 6 + dipper/panelcfgext.asl | 7 + dipper/pep.asl | 12 + dipper/pep_defaults.asl | 70 + dipper/pep_tsens.asl | 228 ++ dipper/plat_win_mproc.asl | 38 + dipper/pmic_batt.asl | 552 ++++ dipper/qcgpio.asl | 44 + dipper/spi.asl | 38 + dipper/testdev.asl | 0 dipper/usb.asl | 953 +++++++ dipper/wcnss_wlan.asl | 101 + dipper/wlan_11ad.asl | 6 + 42 files changed, 13859 insertions(+) create mode 100755 dipper/DSDT.AML create mode 100755 dipper/Dsdt.asl create mode 100755 dipper/adc.asl create mode 100755 dipper/audio.asl create mode 100755 dipper/audio_bus.asl create mode 100755 dipper/backlightcfg.asl create mode 100755 dipper/backlightcfg2.asl create mode 100755 dipper/buses.asl create mode 100755 dipper/cust_adc.asl create mode 100755 dipper/cust_arraybutton.asl create mode 100755 dipper/cust_camera.asl create mode 100755 dipper/cust_camera_exasoc.asl create mode 100755 dipper/cust_camera_exasoc_resources.asl create mode 100755 dipper/cust_camera_resources.asl create mode 100755 dipper/cust_dsdt.asl create mode 100755 dipper/cust_hwn.asl create mode 100755 dipper/cust_pmic_batt.asl create mode 100755 dipper/cust_sensors.asl create mode 100755 dipper/cust_thermal_zones.asl create mode 100755 dipper/cust_touch.asl create mode 100755 dipper/cust_touch_resources.asl create mode 100755 dipper/cust_win_mproc.asl create mode 100755 dipper/display.asl create mode 100755 dipper/display2.asl create mode 100755 dipper/displayext.asl create mode 100755 dipper/dsdt_common.asl create mode 100755 dipper/graphics.asl create mode 100755 dipper/nfc.asl create mode 100755 dipper/panelcfg.asl create mode 100755 dipper/panelcfg2.asl create mode 100755 dipper/panelcfgext.asl create mode 100755 dipper/pep.asl create mode 100755 dipper/pep_defaults.asl create mode 100755 dipper/pep_tsens.asl create mode 100755 dipper/plat_win_mproc.asl create mode 100755 dipper/pmic_batt.asl create mode 100755 dipper/qcgpio.asl create mode 100755 dipper/spi.asl create mode 100755 dipper/testdev.asl create mode 100755 dipper/usb.asl create mode 100755 dipper/wcnss_wlan.asl create mode 100755 dipper/wlan_11ad.asl diff --git a/dipper/DSDT.AML b/dipper/DSDT.AML new file mode 100755 index 0000000000000000000000000000000000000000..5ced2e2e7066f851c62240f368faff6bbee626c4 GIT binary patch literal 251963 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%0A5jHtz>ZzrQYq)AutUU1 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 for 64-bit integer support. +// +DefinitionBlock("DSDT.AML", "DSDT", 0x02, "QCOMM ", "SDM850 ", 3) +{ + Scope(\_SB_) { + + Include("../Common/addSub.asl") + Include("dsdt_common.asl") + Include("cust_dsdt.asl") + + Include("usb.asl") + + // Thermal Zone devices depend on PEP (included in dsdt_common). Please be CAREFUL on location + Include("cust_thermal_zones.asl") + + // + // Hardware Notifications + // + Include("cust_hwn.asl") + + // + // Touch + // + Include("cust_touch.asl") + + // + // Buttons + // + Include("cust_arraybutton.asl") + + // + // Data components + // + Include("../Common/data.asl") + + // + //Qualcomm Diagnostic Consumer Interface + // + Device (QDCI) + { + Name (_DEP, Package(0x1) + { + \_SB_.GLNK + }) + Name (_HID, "QCOM0224") + Alias(\_SB.PSUB, _SUB) + } + + // + // Bluetooth + // + Include("../Common/wcnss_bt.asl") + + // + // ADC driver + // + Include("adc.asl") + } + +} diff --git a/dipper/adc.asl b/dipper/adc.asl new file mode 100755 index 0000000..9dc911f --- /dev/null +++ b/dipper/adc.asl @@ -0,0 +1,708 @@ +/*============================================================================ + FILE: adc.asl + + OVERVIEW: This file contains the board-specific configuration info for + ADC1 - qcadc analog-to-digital converter (ADC): ACPI device + definitions, common settings, etc. + + DEPENDENCIES: None + +============================================================================*/ + +/*---------------------------------------------------------------------------- + * QCADC + * -------------------------------------------------------------------------*/ + +Device(ADC1) +{ + /*---------------------------------------------------------------------------- + * Dependencies + * -------------------------------------------------------------------------*/ + Name(_DEP, Package(0x2) + { + \_SB_.SPMI, + \_SB_.PMIC + }) + + /*---------------------------------------------------------------------------- + * HID + * -------------------------------------------------------------------------*/ + Name(_HID, "QCOM0221") + Alias(\_SB.PSUB, _SUB) + Name(_UID, 0) + + /*---------------------------------------------------------------------------- + * ADC Resources + * -------------------------------------------------------------------------*/ + Method(_CRS) + { + /* + * Interrupts + */ + Name (INTB, ResourceTemplate() + { + // VAdc - EOC + // ID = {slave id}{perph id}{int} = {0}{0011 0001}{000} = 0x188 + GpioInt(Edge, ActiveHigh, ExclusiveAndWake, PullUp, 0, "\\_SB.PM01", , , , RawDataBuffer(){0x2}) {32} // 0x188 - PM_INT__VADC_HC1_USR__EOC + + // VAdc TM - All interrupts + // ID = {slave id}{perph id}{int} = {0}{0011 0100}{000} = 0x1A0 + GpioInt(Edge, ActiveHigh, ExclusiveAndWake, PullUp, 0, "\\_SB.PM01", , , , RawDataBuffer(){0x2}) {40} // 0x1A0 - PM_INT__VADC_HC7_BTM__THR + + // FgAdc - All interrupts + // ID = {slave id}{perph id}{int} = {10}{0100 0101}{000} = 0x1228 + GpioInt(Edge, ActiveHigh, ExclusiveAndWake, PullUp, 0, "\\_SB.PM01", , , , RawDataBuffer(){0x2}) {360} // 0x1228 - PM_INT__FG_ADC__BT_ID + }) + + /* + * SPMI peripherals + */ + Name(NAM, Buffer() {"\\_SB.SPMI"}) + + // VAdc + Name(VUSR, Buffer() + { + 0x8E, // SPB Descriptor + 0x13, 0x00, // Length including NAM above + 0x01, // +0x00 SPB Descriptor Revision + 0x00, // +0x01 Resource Source Index + 0xC1, // +0x02 Bus type - vendor defined values are in the range 0xc0-0xff + 0x02, // +0x03 Consumer + controller initiated + 0x00, 0x31, // +0x04 Type specific flags . Slave id, Upper8 bit address + 0x01, // +0x06 Type specific revision + 0x00, 0x00 // +0x07 type specific data length + // +0x09 - 0xd bytes for NULL-terminated NAM + // Length = 0x13 + }) + + // VAdc TM + Name(VBTM, Buffer() + { + 0x8E, // SPB Descriptor + 0x13, 0x00, // Length including NAM above + 0x01, // +0x00 SPB Descriptor Revision + 0x00, // +0x01 Resource Source Index + 0xC1, // +0x02 Bus type - vendor defined values are in the range 0xc0-0xff + 0x02, // +0x03 Consumer + controller initiated + 0x00, 0x34, // +0x04 Type specific flags . Slave id, Upper8 bit address + 0x01, // +0x06 Type specific revision + 0x00, 0x00 // +0x07 type specific data length + // +0x09 - 0xd bytes for NULL-terminated NAM + // Length = 0x13 + }) + + // FgAdc + Name(FGRR, Buffer() + { + 0x8E, // SPB Descriptor + 0x13, 0x00, // Length including NAM above + 0x01, // +0x00 SPB Descriptor Revision + 0x00, // +0x01 Resource Source Index + 0xC1, // +0x02 Bus type - vendor defined values are in the range 0xc0-0xff + 0x02, // +0x03 Consumer + controller initiated + 0x02, 0x45, // +0x04 Type specific flags . Slave id, Upper8 bit address + 0x01, // +0x06 Type specific revision + 0x00, 0x00 // +0x07 type specific data length + // +0x09 - 0xd bytes for NULL-terminated NAM + // Length = 0x13 + }) + + // Name(END, Buffer() {0x79, 0x00}) + + // {VUSR, NAM, VBTM, NAM, FGRR, NAM, INTB} + // {Local1, Local2, Local3, INTB} + // {Local4, Local5} + // {Local0} + Concatenate(VUSR, NAM, Local1) + Concatenate(VBTM, NAM, Local2) + Concatenate(FGRR, NAM, Local3) + Concatenate(Local1, Local2, Local4) + Concatenate(Local3, INTB, Local5) + Concatenate(Local4, Local5, Local0) + + Return(Local0) + } + + /*---------------------------------------------------------------------------- + * Device configuration + * -------------------------------------------------------------------------*/ + /* + * General ADC properties + * + * bHasVAdc: + * Whether or not TM is supported. + * 0 - Not supported + * 1 - Supported + * + * bHasTM: + * Whether or not TM is supported. + * 0 - Not supported + * 1 - Supported + * + * bHasFgAdc: + * Whether or not FGADC is supported. + * 0 - Not supported + * 1 - Supported + * + */ + Method (ADDV) + { + Return (Package() + { + /* .bHasVAdc = */ 1, + /* .bHasTM = */ 1, + /* .bHasFgAdc = */ 1, + }) + } + + /*---------------------------------------------------------------------------- + * Voltage ADC (VADC) Configuration + * -------------------------------------------------------------------------*/ + /* + * General VADC properties + * + * bUsesInterrupts: + * End-of-conversion interrupt mode. + * 0 - Polling mode + * 1 - Interrupt mode + * + * uFullScale_code: + * Full-scale ADC code. + * + * uFullScale_uV: + * Full-scale ADC voltage in uV. + * + * uReadTimeout_us: + * Timeout for reading ADC channels in us. + * + * uLDOSettlingTime_us: + * LDO settling time in us. + * + * ucMasterID: + * Master ID to send the interrupt to. + * + * ucPmicDevice: + * PMIC which has the VAdc. + * + * usMinDigRev: + * Minimum digital version + * + * usMinAnaRev: + * Minimum analog version + * + * ucPerphType: + * ADC peripheral type. + * + */ + Method (GENP) + { + Return (Package() + { + /* .bUsesInterrupts = */ 0, + /* .uFullScale_code = */ 0x4000, + /* .uFullScale_uV = */ 1875000, + /* .uReadTimeout_us = */ 500000, + /* .uLDOSettlingTime_us = */ 17, + /* .ucMasterID = */ 0, + /* .ucPmicDevice = */ 0, + /* .usMinDigRev = */ 0x300, + /* .usMinAnaRev = */ 0x100, + /* .ucPerphType = */ 0x8, + }) + } + + /*=========================================================================== + + FUNCTION PTCF + + DESCRIPTION Scales the ADC result from millivolts to 0.001 degrees + Celsius using the PMIC thermistor conversion equation. + + DEPENDENCIES None + + PARAMETERS Arg0 [in] ADC result data (uMicroVolts) + + RETURN VALUE Scaled result in mDegC + + SIDE EFFECTS None + + ===========================================================================*/ + Method (PTCF, 1) + { + /* + * Divide by two to convert from microvolt reading to micro-Kelvin. + * + * Subtract 273160 to convert the temperature from Kelvin to + * 0.001 degrees Celsius. + */ + ShiftRight (Arg0, 1, Local0) + Subtract (Local0, 273160, Local0) + Return (Local0) + } + + /*=========================================================================== + + FUNCTION PTCI + + DESCRIPTION Inverse of PTCF - scaled PMIC temperature to microvolts. + + DEPENDENCIES None + + PARAMETERS Arg0 [in] temperature in mDegC + + RETURN VALUE ADC result data (uMicroVolts) + + SIDE EFFECTS None + + ===========================================================================*/ + Method (PTCI, 1) + { + Add (Arg0, 273160, Local0) + ShiftLeft (Local0, 1, Local0) + Return (Local0) + } + + /* + * VADC channel to GPIO mapping + * + */ + Method (VGIO) + { + Return (Package() + { + Package() + { + /* .GPIO = */ 8, + /* .aucChannels = */ Buffer(){0x12, 0x32, 0x52, 0x72}, + }, + + Package() + { + /* .GPIO = */ 9, + /* .aucChannels = */ Buffer(){0x13, 0x33, 0x53, 0x73}, + }, + + Package() + { + /* .GPIO = */ 10, + /* .aucChannels = */ Buffer(){0x14, 0x34, 0x54, 0x74}, + }, + + Package() + { + /* .GPIO = */ 11, + /* .aucChannels = */ Buffer(){0x15, 0x35, 0x55, 0x75}, + }, + + Package() + { + /* .GPIO = */ 12, + /* .aucChannels = */ Buffer(){0x16, 0x36, 0x56, 0x76}, + }, + + Package() + { + /* .GPIO = */ 21, + /* .aucChannels = */ Buffer(){0x17, 0x37, 0x57, 0x77, 0x97}, + }, + + Package() + { + /* .GPIO = */ 22, + /* .aucChannels = */ Buffer(){0x18, 0x38, 0x58, 0x78, 0x98}, + }, + + Package() + { + /* .GPIO = */ 23, + /* .aucChannels = */ Buffer(){0x19, 0x39, 0x59, 0x79, 0x99}, + }, + }) + } + + /*---------------------------------------------------------------------------- + * Voltage ADC Threshold Monitor (VADCTM) Configuration + * -------------------------------------------------------------------------*/ + /* + * General VADCTM properties + * + * eAverageMode: + * Obtains N ADC readings and averages them together. + * 0 - VADCTM_AVERAGE_1_SAMPLE + * 1 - VADCTM_AVERAGE_2_SAMPLES + * 2 - VADCTM_AVERAGE_4_SAMPLES + * 3 - VADCTM_AVERAGE_8_SAMPLES + * 4 - VADCTM_AVERAGE_16_SAMPLES + * + * eDecimationRatio: + * The decimation ratio. + * 0 - VADCTM_DECIMATION_RATIO_256 + * 1 - VADCTM_DECIMATION_RATIO_512 + * 2 - VADCTM_DECIMATION_RATIO_1024 + * + * uFullScale_code: + * Full-scale ADC code. + * + * uFullScale_uV: + * Full-scale ADC voltage in uV. + * + * ucMasterID: + * Master ID to send the interrupt to. + * + * ucPmicDevice: + * PMIC which has the VAdc. + * + * usMinDigRev: + * Minimum digital version + * + * usMinAnaRev: + * Minimum analog version + * + * ucPerphType: + * ADC peripheral type. + * + */ + Method (VTGN) + { + Return (Package() + { + /* .eAverageMode = */ 2, + /* .eDecimationRatio = */ 2, + /* .uFullScale_code = */ 0x4000, + /* .uFullScale_uV = */ 1875000, + /* .ucMasterID = */ 0, + /* .ucPmicDevice = */ 0, + /* .usMinDigRev = */ 0x300, + /* .usMinAnaRev = */ 0x100, + /* .ucPerphType = */ 0x8, + }) + } + + /*---------------------------------------------------------------------------- + * Fuel Gauge ADC (FGADC) Configuration + * -------------------------------------------------------------------------*/ + /* + * General FGADC properties + * + * skinTempThreshRange: + * Range for skin temperature thresholds + * + * chgTempThreshRange: + * Range for charger temperature thresholds + * + * uFullScale_code: + * Full scale ADC value in code. + * + * uFullScale_uV: + * Full scale ADC value in microvolts. + * + * uMicroVoltsPerMilliAmps: + * Microvolts per milliamp scaling factor. + * + * uCodePerKelvin: + * Code per Kelvin scaling factor. + * + * uBattIdClipThresh: + * Max code for a BATT ID channel. + * + * uMaxWaitTimeus: + * Maximum time to wait for a reading to complete in microseconds. + * + * uSlaveId: + * PMIC slave ID. + * + * ucPmicDevice: + * PMIC which has the VAdc. + * + * ucPerphType: + * ADC peripheral type. + * + */ + Method (GENF) + { + Return (Package() + { + /* .skinTempThreshRange.nMin = */ 0xFFFFFFE2, // -30 + /* .skinTempThreshRange.nMax = */ 97, + /* .chgTempThreshRange.nMin = */ 0xFFFFFFCE, // -50 + /* .chgTempThreshRange.nMax = */ 160, + /* .uFullScale_code = */ 0x3ff, + /* .uFullScale_uV = */ 2500000, + /* .uMicroVoltsPerMilliAmps = */ 500, + /* .uCodePerKelvin = */ 4, + /* .uBattIdClipThresh = */ 820, + /* .uMaxWaitTimeUs = */ 5000000, + /* .uSlaveId = */ 2, + /* .ucPmicDevice = */ 1, + /* .ucPerphType = */ 0xD, + }) + } + + /* + * FGADC Channel Configuration Table + * + * The following table is the list of channels the FGADC can read. Below is + * a description of each field: + * + * sName: + * Appropriate string name for the channel from AdcInputs.h. + * + * eChannel: + * Which channel. + * 0 - FGADC_CHAN_SKIN_TEMP + * 1 - FGADC_CHAN_BATT_ID + * 2 - FGADC_CHAN_BATT_ID_FRESH + * 3 - FGADC_CHAN_BATT_ID_5 + * 4 - FGADC_CHAN_BATT_ID_15 + * 5 - FGADC_CHAN_BATT_ID_150 + * 6 - FGADC_CHAN_BATT_THERM + * 7 - FGADC_CHAN_AUX_THERM + * 8 - FGADC_CHAN_USB_IN_V + * 9 - FGADC_CHAN_USB_IN_I + * 10 - FGADC_CHAN_DC_IN_V + * 11 - FGADC_CHAN_DC_IN_I + * 12 - FGADC_CHAN_DIE_TEMP + * 13 - FGADC_CHAN_CHARGER_TEMP + * 14 - FGADC_CHAN_GPIO + * + * eEnable: + * Whether or not to enable the channel. + * 0 - FGADC_DISABLE + * 1 - FGADC_ENABLE + * + * ucTriggers: + * Mask of triggers. Use 0x0 for default trigger configuration. + * + * scalingFactor.num: + * Numerator of the channel scaling + * + * scalingFactor.den: + * Denominator of the channel scaling + * + * eScaling: + * The scaling method to use. + * 0 - FGADC_SCALE_TO_MILLIVOLTS + * 1 - FGADC_SCALE_BATT_ID_TO_OHMS + * 2 - FGADC_SCALE_INTERPOLATE_FROM_MILLIVOLTS (requires uInterpolationTableName) + * 3 - FGADC_SCALE_THERMISTOR + * 4 - FGADC_SCALE_CURRENT_TO_MILLIAMPS + * + * uInterpolationTableName: + * The name of the lookup table in ACPI that will be interpolated to obtain + * a physical value. Note that the physical value (which has default units + * of millivolts unless custom scaling function is used) is passed as the + * input. This value corresponds to the first column of the table. The + * scaled output appears in the physical adc result. + * 0 - No interpolation table + * WXYZ - Where 'WXYZ' is the interpolation table name + * + */ + Method (FCHN) + { + Return (Package() + { + /* BATT_ID_OHMS (BATT_ID pin) */ + Package() + { + /* .sName = */ "BATT_ID_OHMS", + /* .eChannel = */ 1, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 1, + /* .uInterpolationTableName = */ 0, + }, + + /* BATT_ID_OHMS_FRESH (BATT_ID pin) */ + Package() + { + /* .sName = */ "BATT_ID_OHMS_FRESH", + /* .eChannel = */ 2, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 1, + /* .uInterpolationTableName = */ 0, + }, + + /* BATT_THERM (BATT_THERM pin) */ + Package() + { + /* .sName = */ "BATT_THERM", + /* .eChannel = */ 6, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 3, + /* .uInterpolationTableName = */ 0, + }, + + /* AUX_THERM (AUX_THERM pin) */ + Package() + { + /* .sName = */ "AUX_THERM", + /* .eChannel = */ 7, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 3, + /* .uInterpolationTableName = */ 0, + }, + + /* SKIN_THERM (AUX_THERM pin) */ + Package() + { + /* .sName = */ "SKIN_THERM", + /* .eChannel = */ 0, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 3, + /* .uInterpolationTableName = */ 0, + }, + + /* PMIC_TEMP2 (internal sensor) */ + Package() + { + /* .sName = */ "PMIC_TEMP2", + /* .eChannel = */ 12, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 3, + /* .scalingFactor.den = */ 2, + /* .eScaling = */ 2, + /* .uInterpolationTableName = */ FGDT, + }, + + /* CHG_TEMP (internal sensor) */ + Package() + { + /* .sName = */ "CHG_TEMP", + /* .eChannel = */ 13, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 3, + /* .scalingFactor.den = */ 2, + /* .eScaling = */ 2, + /* .uInterpolationTableName = */ FGCT, + }, + + /* USB_IN (USB_IN pin) */ + Package() + { + /* .sName = */ "USB_IN", + /* .eChannel = */ 8, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 8, + /* .eScaling = */ 0, + /* .uInterpolationTableName = */ 0, + }, + + /* USB_IN_I (USB_IN pin) */ + Package() + { + /* .sName = */ "USB_IN_I", + /* .eChannel = */ 9, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 4, + /* .uInterpolationTableName = */ 0, + }, + + /* DC_IN (DC_IN pin) */ + Package() + { + /* .sName = */ "DC_IN", + /* .eChannel = */ 10, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 8, + /* .eScaling = */ 0, + /* .uInterpolationTableName = */ 0, + }, + + /* DC_IN_I (DC_IN pin) */ + Package() + { + /* .sName = */ "DC_IN_I", + /* .eChannel = */ 11, + /* .eEnable = */ 1, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScaling = */ 4, + /* .uInterpolationTableName = */ 0, + }, + + /* FG_GPIO */ + Package() + { + /* .sName = */ "FG_GPIO", + /* .eChannel = */ 14, + /* .eEnable = */ 0, + /* .ucTriggers = */ 0x0, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 2, + /* .eScaling = */ 0, + /* .uInterpolationTableName = */ 0, + }, + }) + } + + /* + * Die temperature sensor scaling table + * + * The first column in the table is sensor voltage in millivolts and the + * second column is the temperature in milli degrees C. + * + * Scaling equation: + * + * milliDegC = (uV - 600000) / 2 + 25000 + * + */ + Method (FGDT) + { + Return (Package() + { + Package(){ 450, 0xFFFF3CB0}, // -50000 + Package(){ 870, 160000} + }) + } + + /* + * NOTE: CHG_TEMP on PMI8998 uses fab-dependent scaling in the driver. + * This is the default scaling if no fab-dependent scaling is found. + * It corresponds to GF. + */ + /* + * Charger temperature sensor scaling table + * + * The first column in the table is sensor voltage in millivolts and the + * second column is the temperature in milli degrees C. + * + * Scaling equation: + * + * milliDegC = (1303168 - uV) / 3.784 + 25000 + * + */ + Method (FGCT) + { + Return (Package() + { + Package(){ 1587, 0xFFFF3CB0}, // -50000 + Package(){ 792, 160000} + }) + } +} + +Include("cust_adc.asl") diff --git a/dipper/audio.asl b/dipper/audio.asl new file mode 100755 index 0000000..671f865 --- /dev/null +++ b/dipper/audio.asl @@ -0,0 +1,3 @@ +// This file contains the Audio Drivers +// ACPI device definitions, configuration and look-up tables. +// diff --git a/dipper/audio_bus.asl b/dipper/audio_bus.asl new file mode 100755 index 0000000..d0c74f9 --- /dev/null +++ b/dipper/audio_bus.asl @@ -0,0 +1,120 @@ +// This file contains the Audio Drivers +// ACPI device definitions, configuration and look-up tables. +// + +// +//ADCM +// +Device (ADCM) +{ + Alias(\_SB.PSUB, _SUB) + + // Address object for acpi device enumerated device (ADCM) on parent device bus + // Used to identify multiple child if present + Name (_ADR, 0) + + // Adding dependency for LPASS SMMU (Defined in HoneyBadgerSmmu_Resources.asl) + //Added new dependency for 845+ + Name (_DEP, Package() + { + \_SB_.MMU0, + \_SB_.IMM0, + }) + + + // Child Method lists immediate child of ADCM - That is AUDD (Codec Driver) + Method (CHLD) + { + Return (Package() + { + "ADCM\\QCOM0240" + }) + } + + // AUDD Driver Configurations + + Device (AUDD) + { + // Address object for acpi device enumerated device (AUDD) on parent device bus + // Used to identify multiple child if present + Name (_ADR, 0) + Alias(\_SB.PSUB, _SUB) + + // Adding dependency for SPI BUS + Name (_DEP, Package() + { + \_SB_.SPI9, + }) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + GpioIo(Exclusive, PullNone, 0, 1600, , "\\_SB.GIO0", ,) {64} //RESET + GpioInt(Edge, ActiveHigh, Exclusive, PullDown, 0, "\\_SB.GIO0", ,) {256} // GPIO number for interrupt changed for wakeup capability + // on target it is GPIO 54 + GpioIo(Shared, PullUp, 0, 200, IoRestrictionOutputOnly, "\\_SB.GIO0", ,) {49} //USB_AUDIO_EN1 + // SPI + SPISerialBus( + 0, // DeviceSelection: chip-select, GPIO, or other line selection + , // DeviceSelectionPolarity: defaults to PolarityLow (optional) + , // WireMode: defaults to FourWireMode (optional) + 8, // DataBitLength + , // SlaveMode: defaults to ControllerInitiated (optional) + 24000000, // ConnectionSpeed: in Hz (24MHz, wcd supports SPI clock up tp 26MHz) + ClockPolarityLow, // ClockPolarity + ClockPhaseFirst, // ClockPhase + "\\_SB.SPI9", // ResourceSource: SPI bus controller name + , // ResourceSourceIndex: defaults to 0 (optional) + , // ResourceUsage: defaults to ResourceConsumer (optional) + , // DescriptorName: creates name for offset of resource descriptor + RawDataBuffer(){ + 0x00, // Reserved; must be 0 + 0x00, // spi_mode + 0x00, // inter_word_delay_cycles + 0x00, // loopback_mode + 0x00, // cs_toggle + 0x00, // endianness + 0x00, // cs_clk_delay_cycles + }) // VendorData + }) + Return (RBUF) + } + + Method (CHLD) + { + Name(CH, Package() + { + "AUDD\\QCOM0277", + "AUDD\\QCOM0262", + }) + Return(CH) + } + + // + //MBHC + // + Device (MBHC) + { + // Address object for acpi device enumerated device (MBHC) on parent device bus + // Used to identify multiple child if present + Name (_ADR, 0) + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () { + //GpioIo(Shared, Pullup, 0, 200, IoRestrictionOutputOnly, "\\_SB.GIO0", ,) {51} //HSJ_US_EURO_SEL/EN2 + }) + Return (RBUF) + } + } // MBHC Device Configurations end + + // Miniport Device Configurations + Device (QCRT) + { + // Address object for acpi device enumerated device (QCRT) on parent device bus + // Used to identify multiple child if present + // Since, QCRT is second child of AUDD, we have assigned slot-1 + Name (_ADR, 1) + }// Miniport Device Configurations end + } // AUDD Driver Configurations end +} // end Device (ADCM) diff --git a/dipper/backlightcfg.asl b/dipper/backlightcfg.asl new file mode 100755 index 0000000..23b177a --- /dev/null +++ b/dipper/backlightcfg.asl @@ -0,0 +1,79 @@ +/// +// BLCP Method - Backlight control packet method, returns a +// command buffer for a specific backlight level +// +// Input Parameters +// Backlight level - Integer from 0% to 100% +// +// Output Parameters +// +// Packet format: +// +--32bits--+-----variable (8bit alignment)--+ +// | Header | Packet payload | +// +----------+--------------------------------+ +// +// For DSI Command packets, payload data must be in this format +// +// +-- 8 bits-+----variable (8bit alignment)----+ +// | Cmd Type | Packet Data | +// +----------+---------------------------------+ +// +// For I2C Command packets, payload data must be in this format +// +// +-- 16 bits-+----variable (8bit alignment)----+ +// | Address | Command Data | +// +-----------+---------------------------------+ +// +// All packets must follow with a DWORD header with 0x0 +// +Name (BLBK, Zero) +Method (BLCP, 1, Serialized) +{ + Name (RBUF, Buffer (0x0100){}) + Local0 = Zero + CreateField (RBUF, (Local0 * 0x08), 0x20, PKHR) + Local0 += 0x04 + CreateField (RBUF, (Local0 * 0x08), 0x08, PKCM) + Local0 += One + CreateField (RBUF, (Local0 * 0x08), 0x08, PKDS) + Local0 += One + CreateField (RBUF, (Local0 * 0x08), 0x08, PKUB) + Local0 += One + CreateField (RBUF, (Local0 * 0x08), 0x08, PKLB) + Local0 += One + Name (BON, Buffer (0x03) + { + 0x39, 0x53, 0x28 // 9S$ + }) + CreateField (RBUF, (Local0 * 0x08), 0x20, PKH2) + Local0 += 0x04 + CreateField (RBUF, (Local0 * 0x08), 0x20, PKP2) + PKH2 = SizeOf (BON) + PKP2 = BON /* \_SB_.GPU0.BLCP.BON_ */ + Local0 += SizeOf (BON) + CreateDWordField (RBUF, (Local0 * 0x08), EOF) + Local1 = 0; + Local2 = 0; + If(LLessEqual(Arg0, 0x300)) + { + Local1 = (BLBK / 0x188) + Local2 = (BLBK / 0x188) + } + Else + { + Local1 = (Arg0 / 0x188) + Local2 = (Arg0 / 0x188) + BLBK = Arg0 + } + Local1 &= 0xFF + ShiftRight(Local2, 8, Local2) + Local2 &= 0x03 + PKHR = 0x04 + PKCM = 0x39 + PKDS = 0x51 + PKUB = Local2 + PKLB = Local1 + EOF = Zero + Return (RBUF) /* \_SB_.GPU0.BLCP.RBUF */ +} + diff --git a/dipper/backlightcfg2.asl b/dipper/backlightcfg2.asl new file mode 100755 index 0000000..bf2536e --- /dev/null +++ b/dipper/backlightcfg2.asl @@ -0,0 +1,16 @@ +// +// BLCP Method - Secondary display backlight control packet method, returns a +// command buffer for a specific backlight level +// +// Backlight configuration format is same as BLCP of primary panel in backlightcfg.asl +// +Method (BLC2, 1, NotSerialized) { + + // Create Response buffer + Name(RBUF, Buffer(0x100){}) + + // Details to be populated by OEM based on the platform requirements + + // Return the packet data + Return(RBUF) +} diff --git a/dipper/buses.asl b/dipper/buses.asl new file mode 100755 index 0000000..d9121f7 --- /dev/null +++ b/dipper/buses.asl @@ -0,0 +1,678 @@ +// +// Please note that not all the SE engine instances (I2C/SPI/UART) from below asl file can be used directly by icluding in the client ACPI, +// The corresponding Access Control needs to be enabled from TZ side to get the SE/usecase working End 2 End. +// + +// +// QUPV3_ID0_SE7 (attached to BT SOC) +// +Device (UAR7) +{ + Name (_HID, "QCOM0236") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 7) + Name (_DEP, Package() { \_SB_.PEP0 }) + Name (_CCA, 0) + + Method (_CRS) + { + Name (RBUF, ResourceTemplate() + { + Memory32Fixed(ReadWrite, 0x00898000, 0x0004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {639} + GpioInt(Edge, ActiveLow, Exclusive, PullDown, 0, "\\_SB.GIO0") {48} // UART RX, + }) + Return (RBUF) + } + + Method (_STA) + { + Return (0xF) + } +} + +// +// QUPV3_ID1_SE2 (UART Debug port) +// + Device (UARD) + { + Name (_HID, "QCOM0236") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 10) + Name (_DEP, Package() { \_SB_.PEP0 }) + Name (_CCA, 0) + + Method (_CRS) + { + Name (RBUF, ResourceTemplate() + { + Memory32Fixed(ReadWrite, 0x00A84000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {386} + GpioInt(Edge, ActiveLow, Exclusive, PullDown, 0, "\\_SB.GIO0") {5} // UART RX + }) + Return (RBUF) + } + } + +// +// I2C4 - "Core I2C Bus" +// +Device (I2C4) +{ + Name (_HID, "QCOM0220") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 4) + Name (_DEP, Package(){\_SB_.PEP0,\_SB_.QGP0}) + Name (_CCA, 0) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x0088C000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {636} + }) + Return (RBUF) + } +} + +// +// I2C5 - "Core I2C Bus" +// +Device (I2C6) +{ + Name (_HID, "QCOM0220") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 6) + Name (_DEP, Package(){\_SB_.PEP0,\_SB_.QGP0}) + Name (_CCA, 0) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x894000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {638} + }) + Return (RBUF) + } +} + +// +// I2C11 - "Core I2C Bus" +// +Device (IC11) +{ + Name (_HID, "QCOM0220") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 11) + Name (_DEP, Package(){\_SB_.PEP0,\_SB_.QGP0}) + Name (_CCA, 0) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x00A88000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {387} + }) + Return (RBUF) + } +} + + +// +// I2C15 - "Core I2C Bus" +// +Device (IC15) +{ + Name (_HID, "QCOM0220") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 15) + Name (_DEP, Package(){\_SB_.PEP0,\_SB_.QGP0}) + Name (_CCA, 0) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x00A98000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {391} + }) + Return (RBUF) + } +} + + +//SPI9 - EPM + +Device (SPI9) +{ + Name (_HID, "QCOM021E") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 9) + Name (_DEP, Package(){\_SB_.PEP0,\_SB_.QGP1}) + Name (_CCA, 0) + + Method (_CRS) + { + Name (RBUF, ResourceTemplate() + { + Memory32Fixed(ReadWrite, 0xA80000, 0x00004000) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {385} + }) + Return (RBUF) + } +} + +// +// PEP resources for buses +// +Scope(\_SB_.PEP0) +{ + Method(BSMD) + { + Return(BSRC) + } + + Method(PQMD) + { + If (LLess(\_SB.SIDV,0x00020000)) + { + Return(DFS1) + } + Else + { + Return(DFS2) + } + } + + Name(BSRC, Package() + { + // "\\_SB.UAR7" + Package() + { + "DEVICE", "\\_SB.UAR7", + + Package() + { + "COMPONENT", 0, // UART resources + + Package() + { + "FSTATE", 0, // enable UART clocks + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk", 1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk", 1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 1}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 148000000, 50000000}}, + }, + + Package() + { + "FSTATE", 1, // disable UART clocks + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk", 2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk", 2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 2}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 0, 0}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 0, 0}}, + }, + + Package() + { + "PSTATE", 0, // enable GPIOs + Package(){"TLMMGPIO", Package(){ 45, 0, 1, 0, 1, 0 }}, + Package(){"TLMMGPIO", Package(){ 46, 0, 1, 0, 0, 0 }}, + Package(){"TLMMGPIO", Package(){ 47, 0, 1, 0, 0, 0 }}, + Package(){"TLMMGPIO", Package(){ 48, 0, 1, 0, 1, 0 }}, + }, + + Package() + { + "PSTATE", 1, // disable GPIOs + Package(){"TLMMGPIO", Package(){ 45, 0, 1, 0, 1, 0 }}, + Package(){"TLMMGPIO", Package(){ 46, 0, 1, 0, 0, 0 }}, + Package(){"TLMMGPIO", Package(){ 47, 0, 1, 0, 0, 0 }}, + Package(){"TLMMGPIO", Package(){ 48, 0, 1, 0, 1, 0 }}, + }, + + Package(){"PSTATE", 2, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 7372800, 4}}}, + Package(){"PSTATE", 3, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 14745600, 4}}}, + Package(){"PSTATE", 4, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 29491200, 4}}}, + Package(){"PSTATE", 5, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 32000000, 4}}}, + Package(){"PSTATE", 6, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 48000000, 4}}}, + Package(){"PSTATE", 7, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 64000000, 4}}}, + Package(){"PSTATE", 8, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 80000000, 4}}}, + Package(){"PSTATE", 9, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3, 96000000, 4}}}, + Package(){"PSTATE", 10, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3,102400000, 4}}}, + Package(){"PSTATE", 11, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3,112000000, 4}}}, + Package(){"PSTATE", 12, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3,117964800, 4}}}, + Package(){"PSTATE", 13, Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s6_clk", 3,128000000, 4}}}, + }, + + Package() + { + "COMPONENT", 1, // DMA resources + Package(){"FSTATE", 0}, // enable DMA clocks + Package(){"FSTATE", 1}, // disable DMA clocks + }, + }, + + // "\\_SB.UARD" + Package() + { + "DEVICE", 0x2, //Debug device + "\\_SB.UARD", + + Package() + { + "COMPONENT", 0, // UART resources + + Package() + { + "FSTATE", 0, // enable UART clocks + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk", 1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk", 1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk",3, 7372800, 4}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 1}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 148000000, 50000000}}, + }, + + Package() + { + "FSTATE", 1, // disable UART clocks + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk", 2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk", 2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 2}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 0, 0}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 0, 0}}, + }, + + Package() + { + "PSTATE", 0, // enable GPIOs + Package(){"TLMMGPIO", Package(){ 5, 0, 1, 0, 1, 0 }}, + Package(){"TLMMGPIO", Package(){ 4, 0, 1, 0, 0, 0 }}, + }, + + Package() + { + "PSTATE", 1, // disable GPIOs + Package(){"TLMMGPIO", Package(){ 5, 0, 1, 0, 1, 0 }}, + Package(){"TLMMGPIO", Package(){ 4, 0, 1, 0, 0, 0 }}, + }, + + Package(){"PSTATE", 2, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 7372800, 4}}}, + Package(){"PSTATE", 3, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 14745600, 4}}}, + Package(){"PSTATE", 4, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 29491200, 4}}}, + Package(){"PSTATE", 5, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 32000000, 4}}}, + Package(){"PSTATE", 6, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 48000000, 4}}}, + Package(){"PSTATE", 7, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 64000000, 4}}}, + Package(){"PSTATE", 8, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 80000000, 4}}}, + Package(){"PSTATE", 9, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3, 96000000, 4}}}, + Package(){"PSTATE", 10, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3,102400000, 4}}}, + Package(){"PSTATE", 11, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3,112000000, 4}}}, + Package(){"PSTATE", 12, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3,117964800, 4}}}, + Package(){"PSTATE", 13, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s1_clk", 3,128000000, 4}}}, + }, + + Package() + { + "COMPONENT", 1, // DMA resources + Package(){"FSTATE", 0}, // enable DMA clocks + Package(){"FSTATE", 1}, // disable DMA clocks + }, + }, + + // "\\_SB.I2C4" + Package() + { + "DEVICE", + "\\_SB.I2C4", + Package() + { + "COMPONENT", + 0x0, // Component 0. + Package() + { + "FSTATE", + 0x0, // f0 state + }, + }, + Package() + { + "DSTATE", + 0x0, // D0 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s3_clk",8,19200000, 4}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 148000000, 50000000}}, + + // Configure SDA and then SCL + package() {"TLMMGPIO", package() {41, 1, 1, 1, 3, 0}}, + package() {"TLMMGPIO", package() {42, 1, 1, 1, 3, 0}}, + }, + Package() + { + "DSTATE", + 0x1, // D1 state + }, + Package() + { + "DSTATE", + 0x2, // D2 state + }, + Package() + { + "DSTATE", + 0x3, // D3 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s3_clk",2}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 0, 0 }}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 0, 0 }}, + + // Configure SCL and then SDA + package() { "TLMMGPIO", package() {41, 0, 0, 0, 3, 0}}, + package() { "TLMMGPIO", package() {42, 0, 0, 0, 3, 0}}, + }, + }, + + // "\\_SB.I2C6" + Package() + { + "DEVICE", + "\\_SB.I2C6", + Package() + { + "COMPONENT", + 0x0, // Component 0. + Package() + { + "FSTATE", + 0x0, // f0 state + }, + }, + Package() + { + "DSTATE", + 0x0, // D0 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s5_clk",8,19200000, 4}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 148000000, 50000000}}, + + // Configure SDA and then SCL + package() {"TLMMGPIO", package() {85, 1, 1, 1, 3, 0}}, + package() {"TLMMGPIO", package() {86, 1, 1, 1, 3, 0}}, + }, + Package() + { + "DSTATE", + 0x1, // D1 state + }, + Package() + { + "DSTATE", + 0x2, // D2 state + }, + Package() + { + "DSTATE", + 0x3, // D3 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_0_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap0_s5_clk",2}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_1", "ICBID_SLAVE_EBI1", 0, 0 }}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_1", 0, 0 }}, + + // Configure SCL and then SDA + package() { "TLMMGPIO", package() {85, 0, 0, 0, 3, 0}}, + package() { "TLMMGPIO", package() {86, 0, 0, 0, 3, 0}}, + }, + }, + + // "\\_SB.IC11" + Package() + { + "DEVICE", + "\\_SB.IC11", + Package() + { + "COMPONENT", + 0x0, // Component 0. + Package() + { + "FSTATE", + 0x0, // f0 state + }, + + }, + Package() + { + "DSTATE", + 0x0, // D0 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s2_clk",8,19200000, 4}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 148000000,50000000}}, + + // Configure SDA and then SCL + package() {"TLMMGPIO", package() {55, 1, 1, 1, 3, 0}}, + package() {"TLMMGPIO", package() {56, 1, 1, 1, 3, 0}}, + }, + Package() + { + "DSTATE", + 0x1, // D1 state + }, + Package() + { + "DSTATE", + 0x2, // D2 state + }, + Package() + { + "DSTATE", + 0x3, // D3 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s2_clk",2}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 0, 0 }}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 0, 0 }}, + + // Configure SCL and then SDA + package() { "TLMMGPIO", package() {55, 0, 0, 0, 3, 0}}, + package() { "TLMMGPIO", package() {56, 0, 0, 0, 3, 0}}, + }, + }, + + // "\\_SB.IC15" + Package() + { + "DEVICE", + "\\_SB.IC15", + Package() + { + "COMPONENT", + 0x0, // Component 0. + Package() + { + "FSTATE", + 0x0, // f0 state + }, + }, + Package() + { + "DSTATE", + 0x0, // D0 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s6_clk",8,19200000, 4}}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 1400000000,1666 }}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 148000000,50000000 }}, + + // Configure SDA and then SCL + package() {"TLMMGPIO", package() {33, 1, 2, 1, 3, 0}}, + package() {"TLMMGPIO", package() {34, 1, 2, 1, 3, 0}}, + }, + Package() + { + "DSTATE", + 0x1, // D1 state + }, + Package() + { + "DSTATE", + 0x2, // D2 state + }, + Package() + { + "DSTATE", + 0x3, // D3 state + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s6_clk",2}}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 0, 0 }}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 0, 0 }}, + + // Configure SCL and then SDA + package() { "TLMMGPIO", package() {33, 0, 0, 0, 3, 0}}, + package() { "TLMMGPIO", package() {34, 0, 0, 0, 3, 0}}, + }, + }, + }) + + Name(DFS1, Package() + { + Package() + { + "DEVICE", "\\_SB.SPI9", + + Package() + { + "COMPONENT", 0, + + Package() {"FSTATE", 0}, + + Package(){"PSTATE", 0, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 19200000, 3}}}, + Package(){"PSTATE", 1, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 32000000, 3}}}, + Package(){"PSTATE", 2, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 38400000, 3}}}, + Package(){"PSTATE", 3, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 48000000, 3}}}, + Package(){"PSTATE", 4, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 64000000, 3}}}, + Package(){"PSTATE", 5, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 96000000, 3}}}, + Package(){"PSTATE", 6, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 100000000, 3}}}, + }, + + Package() + { + "DSTATE", 0, // enable clocks, enable GPIOs + + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk",1}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 148000000,50000000}}, + + Package(){"TLMMGPIO", Package(){ 65, 1, 2, 0, 1, 0}}, // MISO + Package(){"TLMMGPIO", Package(){ 66, 1, 2, 1, 1, 0}}, // MOSI + Package(){"TLMMGPIO", Package(){ 67, 1, 2, 1, 1, 0}}, // CLK + Package(){"TLMMGPIO", Package(){ 68, 1, 2, 1, 1, 0}}, // CS + }, + + Package() {"DSTATE", 1,}, + Package() {"DSTATE", 2,}, + + Package() + { + "DSTATE", 3, // disable clocks, disable GPIOs + + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk",2}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 0, 0}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 0, 0}}, + + Package(){"TLMMGPIO", Package(){ 65, 0, 2, 0, 1, 0}}, // MOSI + Package(){"TLMMGPIO", Package(){ 66, 0, 2, 0, 1, 0}}, // MISO + Package(){"TLMMGPIO", Package(){ 67, 0, 2, 0, 1, 0}}, // CS + Package(){"TLMMGPIO", Package(){ 68, 0, 2, 0, 1, 0}}, // CLK + }, + }, + }) + + Name(DFS2, Package() + { + Package() + { + "DEVICE", "\\_SB.SPI9", + + Package() + { + "COMPONENT", 0, + + Package() {"FSTATE", 0}, + + Package(){"PSTATE", 0, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 19200000, 3}}}, + Package(){"PSTATE", 1, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 32000000, 3}}}, + Package(){"PSTATE", 2, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 48000000, 3}}}, + Package(){"PSTATE", 3, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 64000000, 3}}}, + Package(){"PSTATE", 4, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 96000000, 3}}}, + Package(){"PSTATE", 5, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 100000000, 3}}}, + Package(){"PSTATE", 6, Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk", 3, 120000000, 3}}}, + }, + + Package() + { + "DSTATE", 0, // enable clocks, enable GPIOs + + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",1}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk",1}}, + + Package() {"BUSARB", Package() {3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 1400000000,1666}}, + Package() {"BUSARB", Package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 148000000,50000000}}, + + + Package(){"TLMMGPIO", Package(){ 65, 1, 2, 0, 1, 0}}, // MISO + Package(){"TLMMGPIO", Package(){ 66, 1, 2, 1, 1, 0}}, // MOSI + Package(){"TLMMGPIO", Package(){ 67, 1, 2, 1, 1, 0}}, // CLK + Package(){"TLMMGPIO", Package(){ 68, 1, 2, 1, 1, 0}}, // CS + }, + + Package() {"DSTATE", 1,}, + Package() {"DSTATE", 2,}, + + Package() + { + "DSTATE", 3, // disable clocks, disable GPIOs + + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_m_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap_1_s_ahb_clk",2}}, + Package(){"CLOCK", Package(){"gcc_qupv3_wrap1_s0_clk",2}}, + + Package(){"BUSARB", Package(){3, "ICBID_MASTER_BLSP_2", "ICBID_SLAVE_EBI1", 0, 0}}, + Package(){"BUSARB", Package(){3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_BLSP_2", 0, 0}}, + + Package(){"TLMMGPIO", Package(){ 65, 0, 2, 0, 1, 0}}, // MOSI + Package(){"TLMMGPIO", Package(){ 66, 0, 2, 0, 1, 0}}, // MISO + Package(){"TLMMGPIO", Package(){ 67, 0, 2, 0, 1, 0}}, // CS + Package(){"TLMMGPIO", Package(){ 68, 0, 2, 0, 1, 0}}, // CLK + }, + }, + }) +} diff --git a/dipper/cust_adc.asl b/dipper/cust_adc.asl new file mode 100755 index 0000000..4dd95de --- /dev/null +++ b/dipper/cust_adc.asl @@ -0,0 +1,899 @@ +/*============================================================================ + FILE: cust_adc.asl + + OVERVIEW: This file contains the board-specific configuration info for + ADC1 - qcadc analog-to-digital converter (ADC): channel + configurations, scaling functions, look-up tables, etc. + + DEPENDENCIES: None + +============================================================================*/ + +/*---------------------------------------------------------------------------- + * QCADC + * -------------------------------------------------------------------------*/ + +Scope(\_SB.ADC1) +{ + /*---------------------------------------------------------------------------- + * Voltage ADC (VADC) Configuration + * -------------------------------------------------------------------------*/ + /* + * VADC Channel Configuration Table + * + * The following table is the list of channels the ADC can read. Channels may + * be added or removed. Below is a description of each field: + * + * sName: + * Appropriate string name for the channel from AdcInputs.h. + * + * uAdcHardwareChannel: + * AMUX channel. + * + * eSettlingDelay: + * Holdoff time to allow the voltage to settle before reading the channel. + * 0 - VADC_SETTLING_DELAY_0_US + * 1 - VADC_SETTLING_DELAY_100_US + * 2 - VADC_SETTLING_DELAY_200_US + * 3 - VADC_SETTLING_DELAY_300_US + * 4 - VADC_SETTLING_DELAY_400_US + * 5 - VADC_SETTLING_DELAY_500_US + * 6 - VADC_SETTLING_DELAY_600_US + * 7 - VADC_SETTLING_DELAY_700_US + * 8 - VADC_SETTLING_DELAY_800_US + * 9 - VADC_SETTLING_DELAY_900_US + * 10 - VADC_SETTLING_DELAY_1_MS + * 11 - VADC_SETTLING_DELAY_2_MS + * 12 - VADC_SETTLING_DELAY_4_MS + * 13 - VADC_SETTLING_DELAY_6_MS + * 14 - VADC_SETTLING_DELAY_8_MS + * 15 - VADC_SETTLING_DELAY_10_MS + * + * eAverageMode: + * Obtains N ADC readings and averages them together. + * 0 - VADC_AVERAGE_1_SAMPLE + * 1 - VADC_AVERAGE_2_SAMPLES + * 2 - VADC_AVERAGE_4_SAMPLES + * 3 - VADC_AVERAGE_8_SAMPLES + * 4 - VADC_AVERAGE_16_SAMPLES + * + * eDecimationRatio: + * The decimation ratio. + * 0 - VADC_DECIMATION_RATIO_256 + * 1 - VADC_DECIMATION_RATIO_512 + * 2 - VADC_DECIMATION_RATIO_1024 + * + * eCalMethod: + * Calibration method. + * 0 - VADC_CAL_METHOD_NO_CAL + * 1 - VADC_CAL_METHOD_RATIOMETRIC + * 2 - VADC_CAL_METHOD_ABSOLUTE + * + * scalingFactor.num: + * Numerator of the channel scaling + * + * scalingFactor.den: + * Denominator of the channel scaling + * + * eScalingMethod: + * The scaling method to use. + * 0 - VADC_SCALE_TO_MILLIVOLTS + * 1 - VADC_SCALE_INTERPOLATE_FROM_MILLIVOLTS (requires uInterpolationTableName) + * 2 - VADC_SCALE_THERMISTOR (requires uPullUp and uInterpolationTableName) + * + * uPullUp: + * The pull up resistor value. Use with eScalingMethod == VADC_SCALE_THERMISTOR, + * otherwise, 0. + * + * uInterpolationTableName: + * The name of the lookup table in ACPI that will be interpolated to obtain + * a physical value. Note that the physical value (which has default units + * of millivolts unless custom scaling function is used) is passed as the + * input. This value corresponds to the first column of the table. The + * scaled output appears in the physical adc result. + * 0 - No interpolation table + * WXYZ - Where 'WXYZ' is the interpolation table name + * + * uScalingFunctionName: + * The name of the function to call in the ACPI table to perform custom + * scaling. The input to the custom scaling function is defined by + * eScalingFunctionInput. The output of the custom scaling function is + * the physical value. + * 0 - No scaling function + * WXYZ - Where 'WXYZ' is the scaling function name + * + * Note: if both a custon scaling function & interpolation table are used + * the custom scaling function is called first. + * + * eScalingFunctionInput: + * Defines which ADC result is passed to the custom scaling function. + * 0 - VADC_SCALING_FUNCTION_INPUT_PHYSICAL + * 1 - VADC_SCALING_FUNCTION_INPUT_PERCENT + * 2 - VADC_SCALING_FUNCTION_INPUT_MICROVOLTS + * 3 - VADC_SCALING_FUNCTION_INPUT_CODE + * + */ + Method (CHAN) + { + Return (Package() + { + /* VPH_PWR (VPH_PWR_SNS pin) */ + Package() + { + /* .sName = */ "VPH_PWR", + /* .uAdcHardwareChannel = */ 0x83, + /* .eSettlingDelay = */ 0, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 2, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 3, + /* .eScalingMethod = */ 0, + /* .uPullUp = */ 0, + /* .uInterpolationTableName = */ 0, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* VCOIN (VCOIN pin) */ + Package() + { + /* .sName = */ "VCOIN", + /* .uAdcHardwareChannel = */ 0x85, + /* .eSettlingDelay = */ 0, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 2, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 3, + /* .eScalingMethod = */ 0, + /* .uPullUp = */ 0, + /* .uInterpolationTableName = */ 0, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* PMIC_TEMP1 (internal sensor) */ + Package() + { + /* .sName = */ "PMIC_THERM", + /* .uAdcHardwareChannel = */ 0x6, + /* .eSettlingDelay = */ 0, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 2, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 0, + /* .uPullUp = */ 0, + /* .uInterpolationTableName = */ 0, + /* .uScalingFunctionName = */ PTCF, + /* .eScalingFunctionInput = */ 2, + }, + + /* XO_THERM (XO_THERM pin) */ + Package() + { + /* .sName = */ "XO_THERM", + /* .uAdcHardwareChannel = */ 0x4c, + /* .eSettlingDelay = */ 8, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ XTTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* XO_THERM_GPS (XO_THERM pin) */ + Package() + { + /* .sName = */ "XO_THERM_GPS", + /* .uAdcHardwareChannel = */ 0x4c, + /* .eSettlingDelay = */ 8, + /* .eAverageMode = */ 2, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ XTTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* SYS_THERM1 (AMUX_1 pin) */ + Package() + { + /* .sName = */ "SYS_THERM1", + /* .uAdcHardwareChannel = */ 0x4d, + /* .eSettlingDelay = */ 1, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* SYS_THERM2 (AMUX_2 pin) */ + Package() + { + /* .sName = */ "SYS_THERM2", + /* .uAdcHardwareChannel = */ 0x4e, + /* .eSettlingDelay = */ 1, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* PA_THERM (AMUX_3 pin) */ + Package() + { + /* .sName = */ "PA_THERM", + /* .uAdcHardwareChannel = */ 0x4f, + /* .eSettlingDelay = */ 1, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* PA_THERM1 (AMUX_4 pin) */ + Package() + { + /* .sName = */ "PA_THERM1", + /* .uAdcHardwareChannel = */ 0x50, + /* .eSettlingDelay = */ 1, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + + /* SYS_THERM3 (AMUX_5 pin) */ + Package() + { + /* .sName = */ "SYS_THERM3", + /* .uAdcHardwareChannel = */ 0x51, + /* .eSettlingDelay = */ 1, + /* .eAverageMode = */ 0, + /* .eDecimationRatio = */ 2, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + }, + }) + } + + /* + * System Thermistor Table + * + * The first column in the table is thermistor resistance R_T in ohms + * and the second column is the temperature in degrees C. + * + * VDD ___ + * | + * > + * P_PU < + * > + * | + * | + * |- - - V_T + * | + * > + * R_T < 100 kOhms (NTCG104EF104FB) + * > + * | + * | + * Gnd + * + */ + Method (SYTB) + { + Return (Package() + { + Package(){4251000, 0xFFFFFFD8}, // -40 + Package(){3004900, 0xFFFFFFDD}, // -35 + Package(){2148900, 0xFFFFFFE2}, // -30 + Package(){1553800, 0xFFFFFFE7}, // -25 + Package(){1135300, 0xFFFFFFEC}, // -20 + Package(){ 837800, 0xFFFFFFF1}, // -15 + Package(){ 624100, 0xFFFFFFF6}, // -10 + Package(){ 469100, 0xFFFFFFFB}, // -5 + Package(){ 355600, 0}, + Package(){ 271800, 5}, + Package(){ 209400, 10}, + Package(){ 162500, 15}, + Package(){ 127000, 20}, + Package(){ 100000, 25}, + Package(){ 79200, 30}, + Package(){ 63200, 35}, + Package(){ 50700, 40}, + Package(){ 40900, 45}, + Package(){ 33200, 50}, + Package(){ 27100, 55}, + Package(){ 22200, 60}, + Package(){ 18300, 65}, + Package(){ 15200, 70}, + Package(){ 12600, 75}, + Package(){ 10600, 80}, + Package(){ 8890, 85}, + Package(){ 7500, 90}, + Package(){ 6360, 95}, + Package(){ 5410, 100}, + Package(){ 4620, 105}, + Package(){ 3970, 110}, + Package(){ 3420, 115}, + Package(){ 2950, 120}, + Package(){ 2560, 125} + }) + } + + /* + * XO Thermistor Table + * + * This lookup table is used to convert the XO thermistor reading to temperature + * in degrees C multiplied by a factor of 1024. + * + * The first column in the table is thermistor resistance R_T in ohms + * + * The second column is the temperature in degrees Celsius multiplied by a factor + * of 1024. + * + * VDD ___ + * | + * > + * P_PU < 100 kOhms + * > + * | + * | + * |- - - V_T + * | + * > + * R_T < 100 kOhms (NTCG104EF104FB) + * > + * | + * | + * Gnd + * + */ + Method (XTTB) + { + Return (Package() + { + Package(){4250657, 0xFFFF6000}, // -40960 + Package(){3962085, 0xFFFF6400}, // -39936 + Package(){3694875, 0xFFFF6800}, // -38912 + Package(){3447322, 0xFFFF6C00}, // -37888 + Package(){3217867, 0xFFFF7000}, // -36864 + Package(){3005082, 0xFFFF7400}, // -35840 + Package(){2807660, 0xFFFF7800}, // -34816 + Package(){2624405, 0xFFFF7C00}, // -33792 + Package(){2454218, 0xFFFF8000}, // -32768 + Package(){2296094, 0xFFFF8400}, // -31744 + Package(){2149108, 0xFFFF8800}, // -30720 + Package(){2012414, 0xFFFF8C00}, // -29696 + Package(){1885232, 0xFFFF9000}, // -28672 + Package(){1766846, 0xFFFF9400}, // -27648 + Package(){1656598, 0xFFFF9800}, // -26624 + Package(){1553884, 0xFFFF9C00}, // -25600 + Package(){1458147, 0xFFFFA000}, // -24576 + Package(){1368873, 0xFFFFA400}, // -23552 + Package(){1285590, 0xFFFFA800}, // -22528 + Package(){1207863, 0xFFFFAC00}, // -21504 + Package(){1135290, 0xFFFFB000}, // -20480 + Package(){1067501, 0xFFFFB400}, // -19456 + Package(){1004155, 0xFFFFB800}, // -18432 + Package(){ 944935, 0xFFFFBC00}, // -17408 + Package(){ 889550, 0xFFFFC000}, // -16384 + Package(){ 837731, 0xFFFFC400}, // -15360 + Package(){ 789229, 0xFFFFC800}, // -14336 + Package(){ 743813, 0xFFFFCC00}, // -13312 + Package(){ 701271, 0xFFFFD000}, // -12288 + Package(){ 661405, 0xFFFFD400}, // -11264 + Package(){ 624032, 0xFFFFD800}, // -10240 + Package(){ 588982, 0xFFFFDC00}, // -9216 + Package(){ 556100, 0xFFFFE000}, // -8192 + Package(){ 525239, 0xFFFFE400}, // -7168 + Package(){ 496264, 0xFFFFE800}, // -6144 + Package(){ 469050, 0xFFFFEC00}, // -5120 + Package(){ 443480, 0xFFFFF000}, // -4096 + Package(){ 419448, 0xFFFFF400}, // -3072 + Package(){ 396851, 0xFFFFF800}, // -2048 + Package(){ 375597, 0xFFFFFC00}, // -1024 + Package(){ 355598, 0}, + Package(){ 336775, 1024}, + Package(){ 319052, 2048}, + Package(){ 302359, 3072}, + Package(){ 286630, 4096}, + Package(){ 271806, 5120}, + Package(){ 257829, 6144}, + Package(){ 244646, 7168}, + Package(){ 232209, 8192}, + Package(){ 220471, 9216}, + Package(){ 209390, 10240}, + Package(){ 198926, 11264}, + Package(){ 189040, 12288}, + Package(){ 179698, 13312}, + Package(){ 170868, 14336}, + Package(){ 162519, 15360}, + Package(){ 154622, 16384}, + Package(){ 147150, 17408}, + Package(){ 140079, 18432}, + Package(){ 133385, 19456}, + Package(){ 127046, 20480}, + Package(){ 121042, 21504}, + Package(){ 115352, 22528}, + Package(){ 109960, 23552}, + Package(){ 104848, 24576}, + Package(){ 100000, 25600}, + Package(){ 95402, 26624}, + Package(){ 91038, 27648}, + Package(){ 86897, 28672}, + Package(){ 82965, 29696}, + Package(){ 79232, 30720}, + Package(){ 75686, 31744}, + Package(){ 72316, 32768}, + Package(){ 69114, 33792}, + Package(){ 66070, 34816}, + Package(){ 63176, 35840}, + Package(){ 60423, 36864}, + Package(){ 57804, 37888}, + Package(){ 55312, 38912}, + Package(){ 52940, 39936}, + Package(){ 50681, 40960}, + Package(){ 48531, 41984}, + Package(){ 46482, 43008}, + Package(){ 44530, 44032}, + Package(){ 42670, 45056}, + Package(){ 40897, 46080}, + Package(){ 39207, 47104}, + Package(){ 37595, 48128}, + Package(){ 36057, 49152}, + Package(){ 34590, 50176}, + Package(){ 33190, 51200}, + Package(){ 31853, 52224}, + Package(){ 30577, 53248}, + Package(){ 29358, 54272}, + Package(){ 28194, 55296}, + Package(){ 27082, 56320}, + Package(){ 26020, 57344}, + Package(){ 25004, 58368}, + Package(){ 24033, 59392}, + Package(){ 23104, 60416}, + Package(){ 22216, 61440}, + Package(){ 21367, 62464}, + Package(){ 20554, 63488}, + Package(){ 19776, 64512}, + Package(){ 19031, 65536}, + Package(){ 18318, 66560}, + Package(){ 17636, 67584}, + Package(){ 16982, 68608}, + Package(){ 16355, 69632}, + Package(){ 15755, 70656}, + Package(){ 15180, 71680}, + Package(){ 14628, 72704}, + Package(){ 14099, 73728}, + Package(){ 13592, 74752}, + Package(){ 13106, 75776}, + Package(){ 12640, 76800}, + Package(){ 12192, 77824}, + Package(){ 11762, 78848}, + Package(){ 11350, 79872}, + Package(){ 10954, 80896}, + Package(){ 10574, 81920}, + Package(){ 10209, 82944}, + Package(){ 9858, 83968}, + Package(){ 9521, 84992}, + Package(){ 9197, 86016}, + Package(){ 8886, 87040}, + Package(){ 8587, 88064}, + Package(){ 8299, 89088}, + Package(){ 8023, 90112}, + Package(){ 7757, 91136}, + Package(){ 7501, 92160}, + Package(){ 7254, 93184}, + Package(){ 7017, 94208}, + Package(){ 6789, 95232}, + Package(){ 6570, 96256}, + Package(){ 6358, 97280}, + Package(){ 6155, 98304}, + Package(){ 5959, 99328}, + Package(){ 5770, 100352}, + Package(){ 5588, 101376}, + Package(){ 5412, 102400}, + Package(){ 5243, 103424}, + Package(){ 5080, 104448}, + Package(){ 4923, 105472}, + Package(){ 4771, 106496}, + Package(){ 4625, 107520}, + Package(){ 4484, 108544}, + Package(){ 4348, 109568}, + Package(){ 4217, 110592}, + Package(){ 4090, 111616}, + Package(){ 3968, 112640}, + Package(){ 3850, 113664}, + Package(){ 3736, 114688}, + Package(){ 3626, 115712}, + Package(){ 3519, 116736}, + Package(){ 3417, 117760}, + Package(){ 3317, 118784}, + Package(){ 3221, 119808}, + Package(){ 3129, 120832}, + Package(){ 3039, 121856}, + Package(){ 2952, 122880}, + Package(){ 2868, 123904}, + Package(){ 2787, 124928}, + Package(){ 2709, 125952}, + Package(){ 2633, 126976}, + Package(){ 2560, 128000}, + Package(){ 2489, 129024}, + Package(){ 2420, 130048} + }) + } + + /*---------------------------------------------------------------------------- + * Voltage ADC Threshold Monitor (VADCTM) Configuration + * -------------------------------------------------------------------------*/ + /* + * VADCTM Measurement Configuration Table + * + * The following is a list of periodic measurements that the VADCTM + * can periodically monitor. Thresholds for these measurements are set + * in software. + * + * sName: + * Appropriate string name for the channel from AdcInputs.h. + * + * uAdcHardwareChannel: + * AMUX channel. + * + * eSettlingDelay: + * Holdoff time to allow the voltage to settle before reading the channel. + * 0 - VADCTM_SETTLING_DELAY_0_US + * 1 - VADCTM_SETTLING_DELAY_100_US + * 2 - VADCTM_SETTLING_DELAY_200_US + * 3 - VADCTM_SETTLING_DELAY_300_US + * 4 - VADCTM_SETTLING_DELAY_400_US + * 5 - VADCTM_SETTLING_DELAY_500_US + * 6 - VADCTM_SETTLING_DELAY_600_US + * 7 - VADCTM_SETTLING_DELAY_700_US + * 8 - VADCTM_SETTLING_DELAY_800_US + * 9 - VADCTM_SETTLING_DELAY_900_US + * 10 - VADCTM_SETTLING_DELAY_1_MS + * 11 - VADCTM_SETTLING_DELAY_2_MS + * 12 - VADCTM_SETTLING_DELAY_4_MS + * 13 - VADCTM_SETTLING_DELAY_6_MS + * 14 - VADCTM_SETTLING_DELAY_8_MS + * 15 - VADCTM_SETTLING_DELAY_10_MS + * + * eMeasIntervalTimeSelect: + * The interval timer to use for the measurement period. + * 0 - VADCTM_MEAS_INTERVAL_TIME1 + * 1 - VADCTM_MEAS_INTERVAL_TIME2 + * 2 - VADCTM_MEAS_INTERVAL_TIME3 + * + * bAlwaysOn: + * Keep the measurement always sampling even if no thresholds are set. + * 0 - FALSE + * 1 - TRUE + * + * eCalMethod: + * Calibration method. + * 0 - VADC_CAL_METHOD_NO_CAL + * 1 - VADC_CAL_METHOD_RATIOMETRIC + * 2 - VADC_CAL_METHOD_ABSOLUTE + * + * scalingFactor.num: + * Numerator of the channel scaling + * + * scalingFactor.den: + * Denominator of the channel scaling + * + * eScalingMethod: + * The scaling method to use. + * 0 - VADC_SCALE_TO_MILLIVOLTS + * 1 - VADC_SCALE_INTERPOLATE_FROM_MILLIVOLTS (requires uInterpolationTableName) + * 2 - VADC_SCALE_THERMISTOR (requires uPullUp and uInterpolationTableName) + * + * uPullUp: + * The pull up resistor value. Use with eScalingMethod == VADC_SCALE_THERMISTOR, + * otherwise, 0. + * + * uInterpolationTableName: + * The name of the lookup table in ACPI that will be interpolated to obtain + * a physical value. Note that the physical value (which has default units + * of millivolts unless custom scaling function is used) is passed as the + * input. This value corresponds to the first column of the table. The + * scaled output appears in the physical adc result. + * 0 - No interpolation table + * WXYZ - Where 'WXYZ' is the interpolation table name + * + * uScalingFunctionName: + * The name of the function to call in the ACPI table to perform custom + * scaling. The input to the custom scaling function is defined by + * eScalingFunctionInput. The output of the custom scaling function is + * the physical value. + * 0 - No scaling function + * WXYZ - Where 'WXYZ' is the scaling function name + * + * Note: if both a custon scaling function & interpolation table are used + * the custom scaling function is called first. + * + * uInverseFunctionName: + * The name of the inverse scaling for uScalingFunctionName. + * 0 - No scaling function + * WXYZ - Where 'WXYZ' is the scaling function name + * + * eScalingFunctionInput: + * Defines which ADC result is passed to the custom scaling function. + * 0 - VADC_SCALING_FUNCTION_INPUT_PHYSICAL + * 1 - VADC_SCALING_FUNCTION_INPUT_PERCENT + * 2 - VADC_SCALING_FUNCTION_INPUT_MICROVOLTS + * 3 - VADC_SCALING_FUNCTION_INPUT_CODE + * + * nPhysicalMin: + * Minimum threshold value in physical units. + * + * nPhysicalMax: + * Maximum threshold value in physical units. + * + */ + Method (VTCH) + { + Return (Package() + { + /* VPH_PWR (VPH_PWR_SNS pin) */ + Package() + { + /* .sName = */ "VPH_PWR", + /* .uAdcHardwareChannel = */ 0x83, + /* .eSettlingDelay = */ 0, + /* .eMeasIntervalTimeSelect = */ 1, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 2, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 3, + /* .eScalingMethod = */ 0, + /* .uPullUp = */ 0, + /* .uInterpolationTableName = */ 0, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0, + /* .nPhysicalMax = */ 5625, + }, + + /* PMIC_TEMP1 (internal sensor) */ + Package() + { + /* .sName = */ "PMIC_THERM", + /* .uAdcHardwareChannel = */ 0x6, + /* .eSettlingDelay = */ 0, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 2, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 0, + /* .uPullUp = */ 0, + /* .uInterpolationTableName = */ 0, + /* .uScalingFunctionName = */ PTCF, + /* .uInverseFunctionName = */ PTCI, + /* .eScalingFunctionInput = */ 2, + /* .nPhysicalMin = */ 0xFFFF3CB0, // -50000 + /* .nPhysicalMax = */ 150000, + }, + + /* SYS_THERM1 (AMUX_1 pin) */ + Package() + { + /* .sName = */ "SYS_THERM1", + /* .uAdcHardwareChannel = */ 0x4d, + /* .eSettlingDelay = */ 1, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0xFFFFFFD8, // -40 + /* .nPhysicalMax = */ 125, + }, + + /* SYS_THERM2 (AMUX_2 pin) */ + Package() + { + /* .sName = */ "SYS_THERM2", + /* .uAdcHardwareChannel = */ 0x4e, + /* .eSettlingDelay = */ 1, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0xFFFFFFD8, // -40 + /* .nPhysicalMax = */ 125, + }, + + /* PA_THERM (AMUX_3 pin) */ + Package() + { + /* .sName = */ "PA_THERM", + /* .uAdcHardwareChannel = */ 0x4f, + /* .eSettlingDelay = */ 1, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0xFFFFFFD8, // -40 + /* .nPhysicalMax = */ 125, + }, + + /* PA_THERM1 (AMUX_4 pin) */ + Package() + { + /* .sName = */ "PA_THERM1", + /* .uAdcHardwareChannel = */ 0x50, + /* .eSettlingDelay = */ 1, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0xFFFFFFD8, // -40 + /* .nPhysicalMax = */ 125, + }, + + /* SYS_THERM3 (AMUX_5 pin) */ + Package() + { + /* .sName = */ "SYS_THERM3", + /* .uAdcHardwareChannel = */ 0x51, + /* .eSettlingDelay = */ 1, + /* .eMeasIntervalTimeSelect = */ 0, + /* .bAlwaysOn = */ 0, + /* .eCalMethod = */ 1, + /* .scalingFactor.num = */ 1, + /* .scalingFactor.den = */ 1, + /* .eScalingMethod = */ 2, + /* .uPullUp = */ 100000, + /* .uInterpolationTableName = */ SYTB, + /* .uScalingFunctionName = */ 0, + /* .uInverseFunctionName = */ 0, + /* .eScalingFunctionInput = */ 0, + /* .nPhysicalMin = */ 0xFFFFFFD8, // -40 + /* .nPhysicalMax = */ 125, + }, + }) + } + + /* + * General VADCTM measurement timer properties + * + * eMeasIntervalTime1: + * Interval timer 1 periodic value. + * 0 - VADCTM_MEAS_INTERVAL_TIME1_0_MS + * 1 - VADCTM_MEAS_INTERVAL_TIME1_1P0_MS + * 2 - VADCTM_MEAS_INTERVAL_TIME1_2P0_MS + * 3 - VADCTM_MEAS_INTERVAL_TIME1_3P9_MS + * 4 - VADCTM_MEAS_INTERVAL_TIME1_7P8_MS + * 5 - VADCTM_MEAS_INTERVAL_TIME1_15P6_MS + * 6 - VADCTM_MEAS_INTERVAL_TIME1_31P1_MS + * 7 - VADCTM_MEAS_INTERVAL_TIME1_62P5_MS + * 8 - VADCTM_MEAS_INTERVAL_TIME1_125_MS + * 9 - VADCTM_MEAS_INTERVAL_TIME1_250_MS + * 10 - VADCTM_MEAS_INTERVAL_TIME1_500_MS + * 11 - VADCTM_MEAS_INTERVAL_TIME1_1000_MS + * 12 - VADCTM_MEAS_INTERVAL_TIME1_2000_MS + * 13 - VADCTM_MEAS_INTERVAL_TIME1_4000_MS + * 14 - VADCTM_MEAS_INTERVAL_TIME1_8000_MS + * 15 - VADCTM_MEAS_INTERVAL_TIME1_16000_MS + * + * eMeasIntervalTime2: + * Interval timer 2 periodic value. + * 0 - VADCTM_MEAS_INTERVAL_TIME2_0_MS + * 1 - VADCTM_MEAS_INTERVAL_TIME2_100_MS + * 2 - VADCTM_MEAS_INTERVAL_TIME2_200_MS + * 3 - VADCTM_MEAS_INTERVAL_TIME2_300_MS + * 4 - VADCTM_MEAS_INTERVAL_TIME2_400_MS + * 5 - VADCTM_MEAS_INTERVAL_TIME2_500_MS + * 6 - VADCTM_MEAS_INTERVAL_TIME2_600_MS + * 7 - VADCTM_MEAS_INTERVAL_TIME2_700_MS + * 8 - VADCTM_MEAS_INTERVAL_TIME2_800_MS + * 9 - VADCTM_MEAS_INTERVAL_TIME2_900_MS + * 10 - VADCTM_MEAS_INTERVAL_TIME2_1000_MS + * 11 - VADCTM_MEAS_INTERVAL_TIME2_1100_MS + * 12 - VADCTM_MEAS_INTERVAL_TIME2_1200_MS + * 13 - VADCTM_MEAS_INTERVAL_TIME2_1300_MS + * 14 - VADCTM_MEAS_INTERVAL_TIME2_1400_MS + * 15 - VADCTM_MEAS_INTERVAL_TIME2_1500_MS + * + * eMeasIntervalTime3: + * Interval timer 3 periodic value. + * 0 - VADCTM_MEAS_INTERVAL_TIME3_0_S + * 1 - VADCTM_MEAS_INTERVAL_TIME3_1_S + * 2 - VADCTM_MEAS_INTERVAL_TIME3_2_S + * 3 - VADCTM_MEAS_INTERVAL_TIME3_3_S + * 4 - VADCTM_MEAS_INTERVAL_TIME3_4_S + * 5 - VADCTM_MEAS_INTERVAL_TIME3_5_S + * 6 - VADCTM_MEAS_INTERVAL_TIME3_6_S + * 7 - VADCTM_MEAS_INTERVAL_TIME3_7_S + * 8 - VADCTM_MEAS_INTERVAL_TIME3_8_S + * 9 - VADCTM_MEAS_INTERVAL_TIME3_9_S + * 10 - VADCTM_MEAS_INTERVAL_TIME3_10_S + * 11 - VADCTM_MEAS_INTERVAL_TIME3_11_S + * 12 - VADCTM_MEAS_INTERVAL_TIME3_12_S + * 13 - VADCTM_MEAS_INTERVAL_TIME3_13_S + * 14 - VADCTM_MEAS_INTERVAL_TIME3_14_S + * 15 - VADCTM_MEAS_INTERVAL_TIME3_15_S + * + */ + Method (VTMT) + { + Return (Package() + { + /* .eMeasIntervalTime1 = */ 11, // 1000 ms + /* .eMeasIntervalTime2 = */ 1, // 100 ms + /* .eMeasIntervalTime3 = */ 5, // 5000 ms + }) + } +} diff --git a/dipper/cust_arraybutton.asl b/dipper/cust_arraybutton.asl new file mode 100755 index 0000000..73dbef2 --- /dev/null +++ b/dipper/cust_arraybutton.asl @@ -0,0 +1,42 @@ +Device (BTNS) +{ + Name(_HID, "ACPI0011") + + Alias(\_SB.PSUB, _SUB) + + Name(_UID, 0) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + //Power Button + GpioInt(Edge, ActiveBoth, ExclusiveAndWake, PullDown, 0, "\\_SB.PM01", ,) {0} // 0x40 - PM_INT__PON__KPDPWR_ON + + // Volume Up button + GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.PM01", ,) {133} // 0x628 - PM_INT__PM1_GPIO6__GPIO_IN_STS + + // Volume Down button + GpioInt(Edge, ActiveBoth, Exclusive, PullDown, 0, "\\_SB.PM01", ,) {1} // 0x41 - PM_INT__PON__RESIN_ON + + // Camera Focus + // GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.PM01", ,) {135} // 0x638 - PM_INT__PM1_GPIO8__GPIO_IN_STS + + //Camera Snapshot + // GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.PM01", ,) {134} // 0x630 - PM_INT__PM1_GPIO7__GPIO_IN_STS + }) + Return (RBUF) + } + + Name(_DSD, Package(2) { + ToUUID("FA6BD625-9CE8-470D-A2C7-B3CA36C4282E"), + Package() { + Package(5) {0,1,0,0x01,0x0D}, // Portable Device Control Application Collection + Package(5) {1,0,1,0x01,0x81}, // Sleep + Package(5) {1,1,1,0x0C,0xE9}, // Volume Increment + Package(5) {1,2,1,0x0C,0xEA}, // Volume Decrement + // Package(5) {1,3,1,0x90,0x20}, // Camera Auto Focus + // Package(5) {1,4,1,0x90,0x21}, // Camera Shutter + }, + }) +} diff --git a/dipper/cust_camera.asl b/dipper/cust_camera.asl new file mode 100755 index 0000000..8bbe036 --- /dev/null +++ b/dipper/cust_camera.asl @@ -0,0 +1,647 @@ +//============================================================================== +// +// DESCRIPTION +// This file contains resources (such as memory address, GPIOs, etc.) and +// methods needed by camera drivers. +// +//============================================================================== + +Include("cust_camera_exasoc.asl") + +// +// CAMERA MIPI CSI (based on Titan 170 v1 hardware) +// +Device (MPCS) +{ + Name (_DEP, Package(0x1) + { + \_SB_.CAMP + }) + + Name (_HID, "QCOM02E8") + Name (_UID, 24) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + Memory32Fixed (ReadWrite, 0x0AC65000, 0x00000900) // PHY 0 memory + Memory32Fixed (ReadWrite, 0x0AC66000, 0x00000900) // PHY 1 memory + Memory32Fixed (ReadWrite, 0x0AC67000, 0x00000900) // PHY 2 memory + + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {509} // PHY 0 interrupt, csiphy_0_irq + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {510} // PHY 1 interrupt, csiphy_1_irq + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {511} // PHY 2 interrupt, csiphy_2_irq + }) + + Return (RBUF) + } + + // PERF, EBUF left blank intentionally as only F state support required at this point. + // PEP Proxy is not needed as it is there for D state support. +} + +// +// JPEG ENCODER (JPGE) +// JPEG 0: a dedicated JPEG encode instance; +// JPEG 3: a DMA instance (for downscaling only, not for encoding). +// Each JPEG instance is controlled indpendently; having its own set of +// registers for control and hardware operation, and its own core clock. +// +Device (JPGE) +{ + Name (_DEP, Package(0x2) + { + \_SB_.CAMP, + \_SB_.MMU0 + }) + + Name (_HID, "QCOM0276") + Name (_UID, 23) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // TITAN_A_JPEG_0 + Memory32Fixed ( ReadWrite, 0x0AC4E000, 0x0340 ) + + // TITAN_A_JPEG_3 + Memory32Fixed ( ReadWrite, 0x0AC52000, 0x01B4 ) + + // titan_jpeg_0_irq (Destination Subsystem: Application Processor) + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) { 506 } + + // titan_jpeg_3_irq (Destination Subsystem: Application Processor) + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) { 507 } + }) + + Return (RBUF) + } + + Method (PERF) + { + Name (EBUF, Package() + { + Package() // JPEG instance 0 PSET_0 + { + "COMPONENT", + 0, // Component ID: JPEG_0 = 0, JPEG_3/DMA = 1 + + Package() + { + "PSTATE_SET", + 0, // P_Set Index + 0, // CLK = 0, BW = 1 + "JPEG0_CLK", + + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 600000000, // cam_cc_jpeg_clk supported configurations (TURBO = NOM / SVS / Low SVS) + 600000000, + 404000000, + 200000000, + }, + }, + }, + + Package() // JPEG instance 3 PSET_0 + { + "COMPONENT", + 1, + + Package() { "PSTATE_SET", 0, 0, "DMA_CLK", Package() { "PSTATE", 0, 600000000, 600000000, 200000000, }, }, // cam_cc_jpeg_clk: Turbo / Nominal / LowSVS + }, + }) + + Return (EBUF) + } +} + +// +// VFE +// +Device (VFE0) +{ + Name (_DEP, Package(0x3) + { + \_SB_.MMU0, + \_SB_.PEP0, + \_SB_.CAMP + }) + + Name (_HID, "QCOM0243") + Name (_UID, 22) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // ICP + Memory32Fixed (ReadWrite, 0xAC00000, 0x20000) + + //CPASS_CDM + Memory32Fixed (ReadWrite, 0xAC48000, 0x1000) + + //FD_WRAPPER + Memory32Fixed (ReadWrite, 0xAC5A000, 0x4000) + + // LRME + Memory32Fixed (ReadWrite, 0xAC6B000, 0x1000) + + //BPS + Memory32Fixed (ReadOnly, 0xAC6F000, 0x8000) + + // IPE0 + Memory32Fixed (ReadOnly, 0xAC87000, 0xA000) + + // IPE1 + Memory32Fixed (ReadOnly, 0xAC91000, 0xA000) + + // IFE0 + Memory32Fixed (ReadWrite, 0xACAF000, 0x5000) + + //IFE1 + Memory32Fixed (ReadWrite, 0xACB6000, 0x5000) + + //IFE_LITE + Memory32Fixed (ReadWrite, 0xACC4000, 0x5000) + + //ICP FW + Memory32Fixed (ReadWrite, 0x8BF00000, 0x500000) + + + // CDM interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {493} + + // ICP interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {495} + + + // IFE0 interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {497} + + // IFE1 interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {499} + + // IFE LITE interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {501} + + // FD interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {494} + + // IFE0 CSID interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {496} + + // IFE1 CSID interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {498} + + // IFE LITE CSDI interrupt + Interrupt(ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) {500} + + + }) + Return (RBUF) + } + Method (PERF) + { + Name (EBUF, Package() + { + //------------------------------------------------------------------------------ + // VFE and CPP P-state values listed here specific to Platform + // These packages enumerates all of the expected P-state values that should be used + // for the P-state transitions decision by VFE/CPP cores + // Package format is mentioned below. + //------------------------------------------------------------------------------ + + // Package() + // { + // "COMPONENT" + // INTEGER, VFE0/JPEG = 0,VFE1 = 1,CPP = 2 + // Package() + // { + // "PSTATE_SET", + // PSTATE_INDEX_INTEGER, PStateIndex to access clocktable by index that contains Clock + // having PState. + // PSTATESET_TYPE_INTEGER, CLK = 0 , BW = 1 + // STRING, ResourceName + // Package() + // { + // "PSTATE" , Package type mentioned in ACPIPackageNames + // INTEGER, Chipversion list availabiliy + // + // Clock values , Chipversion supported, + // Clock values , Chipversion supported, + // Clock values , Chipversion supported, + // }, + // }, + // }, + + Package() + { + "COMPONENT", + 0, // IFE0 + // Clk Freq + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK = 0 , BW = 1 + "IFE0_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + + // BW: TODO + Package() + { + "PSTATE_SET", + 1, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF0_UNCOMP_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 38000000000, + 35000000000, + 28000000000, + 23000000000, + 20000000000, + 16000000000, + 14000000000, + 12000000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 2, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF0_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 38000000000, + 35000000000, + 28000000000, + 23000000000, + 20000000000, + 16000000000, + 14000000000, + 12000000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + + // CSID Clk Freq: TODO + }, + + Package() + { + "COMPONENT", + 1, // IFE1 + // Clk Freq + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK = 0 , BW = 1 + "IFE1_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + + // BW: TODO + Package() + { + "PSTATE_SET", + 1, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF1_UNCOMP_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 38000000000, + 35000000000, + 28000000000, + 23000000000, + 20000000000, + 16000000000, + 14000000000, + 12000000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 2, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF1_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 38000000000, + 35000000000, + 28000000000, + 23000000000, + 20000000000, + 16000000000, + 14000000000, + 12000000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + + // CSID Clk Freq: TODO + }, + + Package() + { + "COMPONENT", + 2, // IFE_LITE + // Clk Freq + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK = 0 , BW = 1 + "IFE_LITE_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_HF1_UNCOMP is used for both ife1 & ife_lite + + // CSID Clk Freq: TODO + + }, + + Package() + { + "COMPONENT", + 3, // ICP + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK =0 , BW =1 + "ICP_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 400000000, + 0, + }, + }, + + // AHB Clk: TODO + }, + + Package() + { + "COMPONENT", + 4, // IPE + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK =0 , BW =1 + "IPE0_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 1, // PStateSet Index + 0, // CLK =0 , BW =1 + "IPE1_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_SF_UNCOMP is used for ipe, bps, jepg, fd, icp, lrme + + // AHB Clk : TODO + + }, + + Package() + { + "COMPONENT", + 5, // BPS + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK =0 , BW =1 + "BPS_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 480000000, + 404000000, + 0, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_SF_UNCOMP is used for ipe, bps, jepg, fd, icp, lrme + + // AHB Clk : TODO + }, + + Package() + { + "COMPONENT", + 6, // LRME + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK =0 , BW =1 + "LRME_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 400000000, + 320000000, + 269000000, + 0, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_SF_UNCOMP is used for ipe, bps, jepg, fd, icp, lrme + + }, + + Package() + { + "COMPONENT", + 7, // FD + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK =0 , BW =1 + "FD_CLK", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + // Clock value Chipversion supported + 600000000, + 538000000, + 400000000, + 0, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_SF_UNCOMP is used for ipe, bps, jepg, fd, icp, lrme + + }, + + }) + + Return (EBUF) + } +} diff --git a/dipper/cust_camera_exasoc.asl b/dipper/cust_camera_exasoc.asl new file mode 100755 index 0000000..fce9d39 --- /dev/null +++ b/dipper/cust_camera_exasoc.asl @@ -0,0 +1,577 @@ +//============================================================================== +// +// DESCRIPTION +// This file contains resources (such as memory address, GPIOs, etc.) and +// methods needed by camera drivers for external components like sensors,flash etc. +// Customers can update these files for different external components +// +//============================================================================== + +// +// CAMERA PLATFORM +// +Device (CAMP) +{ + Name (_DEP, Package(0x3) + { + \_SB_.PEP0, + \_SB_.PMIC, + \_SB_.PMAP + }) + + Name (_HID, "QCOM026F") + Name (_UID, 27) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // TITAN_A_CPAS_0_CPAS_TOP_0 + Memory32Fixed ( ReadWrite, 0x0AC40000, 0x0000006C ) + + // TITAN_A_CAMNOC + Memory32Fixed ( ReadWrite, 0x0AC42000, 0x00004E8C ) + + // TITAN_A_CCI + Memory32Fixed ( ReadWrite, 0x0AC4A000, 0x00000C1C ) + + // titan_cci_irq (Destination Subsystem: Application Processor) + Interrupt( ResourceConsumer, Edge, ActiveHigh, Exclusive, , , ) { 492 } + }) + + Return (RBUF) + } + + // + // PLATFROM CONFIGURATION (PCFG) METHOD + // + // [1] SENSOR PRESENCE + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 | << BIT INDEX + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // | SENSOR PRESENCE [0/1] | << FIELD MEANING + // RESERVED | 7 6 5 4 3 2 1 0 | << SENSOR INDEX + // -----------------------|-----------------------|-----------------------|------------------------- + // 0b | 0 0 0 0 0 1 1 1 | << 0x07 + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // SENSOR INDEX: 0(RFC), 1(FFC), 2(AUX), etc. + // SENSOR PRESENCE: 0 (ABSENT) / 1(PRESENTED) + + // [2-9] SENSOR CONNECTION CONFIGURATION (here we only utilize three entires) + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 | << BIT INDEX + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // RESERVED | CSI_PHY | I2C_BUS | RESERVED | FL_INX |FP| DIR | ORI | << FIELD MEANING + // ------------------- --|-----------------------|-----------|--------|--|-----------|------------ + // 0b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 << 0x00000100 (RFC) + // 0b 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 << 0x00210010 (FFC) + // 0b 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 << 0x00110300 (AUX/IRIS); REVISIT AND DOUBLE CHECK FLASH_INDEX !!! + // -----------------------|-----------/-----------|-----------/-----------|-----------/------------ + // CSIPHY INDEX: 4-bit field, valid values 0/1/2, respectively CSIPHY_0/1/2 LD20-NE182-9 + // I2C_BUS INDEX: 4-bit field, valid values 0/1, respectively CCI_I2C_SDA/SCL0/1 LD20-NE182-7/42 + // FLASH_INDEX: 3-bit field, valid values 0/1/2, respectively FLASH_LED0/1/2 LD20-NE182-19/45 + // FLASH_PRESENCE: 1-bit field, valid values 0/1, respectively ABSENT/PRESENTED + // SENSOR_DIRECTION: 4-bit field, valid values 0/1, respectively Rear/Front + // SENSOR_ORIENTATION: 4-bit field, valid values 0/1/2/3 respectively 0/90/180/270 degrees + + Method (PCFG, 0x0, Serialized) + { + Return + ( + Package() + { + Package () + { + 0x00000001, // [1] SENSOR PRESENCE + 0x00000100, // [2] SENSOR_0/RFC CONNECTION + 0x00000000, // [3] SENSOR_1/FFC CONNECTION + 0x00000000, // [4] SENSOR_2/AUX/IRIS CONNECTION + 0x00000000, // [5] SENSOR_3 CONNECTION; RESERVED + 0x00000000, // [6] SENSOR_4 CONNECTION; RESERVED + 0x00000000, // [7] SENSOR_5 CONNECTION; RESERVED + 0x00000000, // [8] SENSOR_6 CONNECTION; RESERVED + 0x00000000 // [9] SENSOR_7 CONNECTION; RESERVED + } + } + ) + } + + // The method contains P state power setting used by the camera driver. The clock presented + // here MUST be consistent with the PSTATE_SET values under the CAMP section in the file of + // cust_camera_exasoc_resources.asl. + Method (PERF) + { + Name (EBUF, Package() + { + Package() + { + "COMPONENT", + 0, // Platform = 0 + + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 0, // CLK = 0, BW = 1 + "CAMP_CLK", + + Package() // The indexes and frequencies be consistent + { // with CCICLKFrqIdx in CCIResourceType.h and + "PSTATE", // cam_cc_cci_clk in cust_camera_exasoc_resources.asl + 0, // Chipversion list availabiliy + 37500000, // Index 0 clock + 19200000, // Index 1 clock + }, + }, + + Package() + { + "PSTATE_SET", + 1, // PStateSet Index + 1, // CLK =0 , BW =1 + "NRT_UNCOMP_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 12000000000, + 11500000000, + 11000000000, + 10500000000, + 10000000000, + 9500000000, + 9000000000, + 8500000000, + 8000000000, + 7500000000, + 7000000000, + 6500000000, + 6000000000, + 5500000000, + 5000000000, + 4500000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + + Package() + { + "PSTATE_SET", + 2, // PStateSet Index + 1, // CLK =0 , BW =1 + "NRT_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 12000000000, + 11500000000, + 11000000000, + 10500000000, + 10000000000, + 9500000000, + 9000000000, + 8500000000, + 8000000000, + 7500000000, + 7000000000, + 6500000000, + 6000000000, + 5500000000, + 5000000000, + 4500000000, + 4000000000, + 3500000000, + 3300000000, + 3100000000, + 2900000000, + 2700000000, + 2500000000, + 2300000000, + 2100000000, + 1900000000, + 1700000000, + 1500000000, + 1300000000, + 1100000000, + 900000000, + 700000000, + 500000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + }, + Package() + { + "COMPONENT", + 1, // Platform = 0 + Package() + { + "PSTATE_SET", + 0, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF0_UNCOMP_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 1100000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 1, // PStateSet Index + 1, // CLK =0 , BW =1 + "HF0_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 1100000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 2, // PStateSet Index + 1, // CLK =0 , BW =1 + "NRT_UNCOMP_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 1100000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + Package() + { + "PSTATE_SET", + 3, // PStateSet Index + 1, // CLK =0 , BW =1 + "NRT_BANDWIDTH", + Package() + { + "PSTATE", + 0, // Chipversion list availabiliy + 1100000000, + 400000000, + 300000000, + 200000000, + 100000000, + 0, + }, + }, + }, + }) + + Return (EBUF) + } +} + +// +// Primary Rear Camera (IMX363) +// +Device (CAMS) +{ + Name (_DEP, Package(0x1) + { + \_SB_.MPCS // MPCS has dependency on CAMP, which eventually ends up with PEP0 and PMIC + }) + + Name (_HID, "QCOM0245") + Name (_UID, 21) + + // Return 0x0 to disable CAMS sensor + Method (_STA) + { + Return (0xf) + } + + // + // SENSOR CONFIGURATION (SCFG) METHOD + // + // [1/2] Driver/Tuning binary file name (no more than 50 characters) + // + // [3] I2C Slave Information for Sensor Probing + //------------------------|-----------/-----------|-----------------------|------------------------ + // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 | << BIT INDEX + // RESERVED | DTT | ADT | FRQ | SLAVE ADDRESS | << MEANING + // -----------------------------|-----|-----|-----|------------------------------------------------ + // 0b 0 0 0 1 0 1 FROM IMX318 REG MAP | << 0x50034 + // -----------------------|-----------/-----------|-----------------------|-----------/------------ + // Register Data Type (DTT): 0b00 -- CAMERA_I2C_BYTE_DATA, 0b01 -- WORD, 0b10 -- DWORD + // Register Address Type (ADT): 0b00 -- CAMERA_I2C_BYTE_ADDR, 0b01 -- WORD, 0b10 -- 3B + // I2C Frequency mode: 0b00 -- 100 KHz (standard), 0b01 -- 400 KHz (fast), 0b10 -- 1 MHz (fast_plus). + // + // [4] Slave Data Part 1 for and from Probing + // Expected Reading (16 bits; 0x363) + Register Address (16 bits; 0x16) + // + // [5] Slave Data Part 2 for and from Probing + // Same format as above; Reserved for Revision # (if applied) + + Method (SCFG, 0x0, Serialized) + { + Return + ( + Package() + { + Package () + { + "com.qti.sensormodule.imx363.bin", // [1] Driver binary file name + "com.qti.tuned.semco_imx363.bin", // [2] Tuning binary file name + 0x00050034, // [3] I2C Slave Information for Sensor Probing + 0x03630016, // [4] Slave Data Part 1 for and from Probing + 0x00000000 // [5] Slave Data Part 2 for and from Probing; Reserved + } + } + ) + } + + // PEP Proxy Support + Name(PGID, Buffer(10) {"\\_SB.CAMS"}) // Device ID buffer - PGID (Pep given ID) + + Name(DBUF, Buffer(DBFL) {}) // Device ID buffer - PGID (Pep given ID) + CreateByteField(DBUF, 0x0, STAT) // STATUS 1 BYTE + // HIDDEN 1 BYTE (SIZE) + CreateByteField(DBUF, 2, DVAL) // Packet value, 1 BYTES Device Status + CreateField(DBUF, 24, 160, DEID) // Device ID, 20 BYTES (160 Bits) + + Method (_S1D, 0) { Return (3) } // S1 => D3 + Method (_S2D, 0) { Return (3) } // S2 => D3 + Method (_S3D, 0) { Return (3) } // S3 => D3 + + Method(_PS0, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(0, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } + + Method(_PS3, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(3, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } +} + +// +// Primary Front Camera (IMX258) +// +Device (CAMF) +{ + Name (_DEP, Package(0x1) + { + \_SB_.MPCS + }) + + Name (_HID, "QCOM024A") + Name (_UID, 26) + + // Return 0x0 to disable CAMF sensor + Method (_STA) + { + Return (0x0) + } + + Method (SCFG, 0x0, Serialized) + { + Return + ( + Package() + { + Package () + { + "com.qti.sensormodule.semco_imx258.bin", + "com.qti.tuned.semco_imx258.bin", + 0x00150034, // I2C Slave Info for Probing, primary address 0x34, secondary 0x20 + 0x02580016, + 0x00000000 + } + } + ) + } + + // PEP Proxy Support + Name(PGID, Buffer(10) {"\\_SB.CAMF"}) // Device ID buffer - PGID (Pep given ID) + + Name(DBUF, Buffer(DBFL) {}) // Device ID buffer - PGID (Pep given ID) + CreateByteField(DBUF, 0x0, STAT) // STATUS 1 BYTE + // HIDDEN 1 BYTE (SIZE) + CreateByteField(DBUF, 2, DVAL) // Packet value, 1 BYTES Device Status + CreateField(DBUF, 24, 160, DEID) // Device ID, 20 BYTES (160 Bits) + + Method (_S1D, 0) { Return (3) } // S1 => D3 + Method (_S2D, 0) { Return (3) } // S2 => D3 + Method (_S3D, 0) { Return (3) } // S3 => D3 + + Method(_PS0, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(0, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } + + Method(_PS3, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(3, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } +} + +// +// Auxiliary sensor (OV2281, IRIS) +// +Device (CAMI) +{ + Name (_DEP, Package(0x1) + { + \_SB_.MPCS + }) + + Name (_HID, "QCOM0247") + Name (_UID, 28) + + // Return 0x0 to disable CAMI sensor + Method (_STA) + { + Return (0x0) + } + + Method (SCFG, 0x0, Serialized) + { + Return + ( + Package() + { + Package () + { + "com.qti.sensormodule.sunny_ov2281.bin", + "UPDATEME.bin", // NEED UPDATE!!! + 0x00150020, + 0x0056300A, + 0x00000000 + } + } + ) + } + + // PEP Proxy Support + Name(PGID, Buffer(10) {"\\_SB.CAMI"}) // Device ID buffer - PGID (Pep given ID) + + Name(DBUF, Buffer(DBFL) {}) // Device ID buffer - PGID (Pep given ID) + CreateByteField(DBUF, 0x0, STAT) // STATUS 1 BYTE + // HIDDEN 1 BYTE (SIZE) + CreateByteField(DBUF, 2, DVAL) // Packet value, 1 BYTES Device Status + CreateField(DBUF, 24, 160, DEID) // Device ID, 20 BYTES (160 Bits) + + Method (_S1D, 0) { Return (3) } // S1 => D3 + Method (_S2D, 0) { Return (3) } // S2 => D3 + Method (_S3D, 0) { Return (3) } // S3 => D3 + + Method(_PS0, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(0, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } + + Method(_PS3, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(3, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } +} + +// +// CAMERA WHITE LED FLASH +// +Device (FLSH) +{ + Name (_DEP, Package(0x1) + { + \_SB_.CAMP + }) + + Name (_HID, "QCOM025C") + Name (_UID, 25) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // "GPIO Interrupt Connection Resource Descriptor Macro" Format (ACPI $19.5.53): + // GpioInt (EdgeLevel, ActiveLevel, Shared, PinConfig, DebounceTimeout, ResourceSource, + // ResourceSourceIndex, ResourceUsage, DescriptorName, VendorData) {PinList} + }) + + Return (RBUF) + } +} diff --git a/dipper/cust_camera_exasoc_resources.asl b/dipper/cust_camera_exasoc_resources.asl new file mode 100755 index 0000000..30e0319 --- /dev/null +++ b/dipper/cust_camera_exasoc_resources.asl @@ -0,0 +1,664 @@ +//=========================================================================== +// +// DESCRIPTION +// This file contains the resources needed by camera drivers for external components like sensors,flash etc. +// Customers can update these files for different external components. +// +// [1] Refer Table 3-10 "Titan 170 Power Use Cases" in "Titan Camera +// Hardware Architecture Specification" for the detailed information on +// the operating points under different use case scenarios. Based on +// the information in the table, this ACPI planned to support SVS and +// NOM frequencies. +// +// [2] Refer Chapter 2 "Defintions of Terms" in the ACPI Specification for +// the definitions of D, F, and P states. Refer the manual of PEP +// driver for the syntax of defining the power and clock resources. +// +// [3] ACPI keeps 2 mA for most GPIO pins by setting the field of +// "PullDriveStrength" to 0 on TLMMGPIO. For high frequency clock pins +// (such as cam_mclk0/1/2/3 running at 24 MHz), the strength shall be +// set to 6 mA to meet the timing requirement. +// +//=========================================================================== + +Scope(\_SB_.PEP0) +{ + // Exa-SoC Devices + Method(CPMX) + { + Return (CPXC) + } + + Name(CPXC, + Package () + { + // Flash device (ISRC_R/G/B_LED, ISRC_FLASH_1/2/3) + Package() + { + "DEVICE", + "\\_SB.FLSH", + + Package() + { + "COMPONENT", + 0x0, // Component ID + Package() { "FSTATE", 0x0, }, // Dummy F0 + Package() { "FSTATE", 0x1, }, // Dummy F1 + }, + }, + + // Device CAMP Data + Package() + { + "DEVICE", + "\\_SB.CAMP", + + Package() + { + "COMPONENT", + 0x0, // Component 0 + + Package() + { + "FSTATE", + 0x0, // F0 state (fully on) + + // FORMAT: FOOTSWITCH NAME; ACTION: 1 == ENABLE, 2 == DISABLE, 3 == HW_CONTROL_ENABLE, 4 == HW_CONTROL_ + // DISABLE. When the ACTION field is set to 1, the CLOCK driver shall set SW_COLLAPSE bit to 1 (which + // means DISABLING/NO SW_COLLAPSE) and poll PWR_ON bit on TITAN_CAM_CC_TITAN_TOP_GDSCR register (as + // inidicated in "$2.3.1.4 Core Power On Sequence" of Titan HPG). The CLOCK driver MUST ensure that + // the power domain has been enabled before returning. It shall be a blocking operation. If a HW block + // (e.g., IPE) is involved, use 3/4 to enable/disable it. HW ENABLING always overrides other settings. + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + + Package() { "PSTATE_ADJUST", Package() { 1, 35 } }, // Set to 2nd lowest BW, need revisit + Package() { "PSTATE_ADJUST", Package() { 2, 35 } }, // Set to 2nd lowest BW, need revisit + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // Action: 1 == ENABLE, 2 == DISABLE, 3 == SET_FREQ, 8 == ENABLE_SET_FREQ, 9 == CONFIGURE, + // 12 == Disable and Set Frequency (combines actions 2 & 3)(must pair with 8) + // Match_Type: 1 == CLOCK_FREQUENCY_HZ_AT_LEAST, 3 == CLOCK_FREQUENCY_HZ_CLOSEST + // ----------------------------------------------------------------------------------------------------- + // CLOCK Clock Name Action Freq (Hz) MatchType + // ----------------------------------------------------------------------------------------------------- + package() { "CLOCK", package() { "cam_cc_cci_clk", 1} }, // Func: CCI. For CCI operations. + + // Valid only in F-State; Used to adjust one or more current P-State within their respective P-State + // Sets. In this case, it will adjust to P state 0 in PSET 0 (to set cam_cc_cci_clk to 37.5 MHz). + Package() { "PSTATE_ADJUST", Package() { 0, 0 } }, + + // ----------------------------------------------------------------------------------------------------- + // GPIO PIN (Refer CAMS TLMMGPIO) Pin|State|FuncSel|Dirc|PullType|DriveStrength + // ----------------------------------------------------------------------------------------------------- + // Camera CCI 0/1 + package() { "TLMMGPIO", package() { 17, 1, 1, 1, 3, 0, }, }, // cci_i2c_sda0 + package() { "TLMMGPIO", package() { 18, 1, 1, 1, 3, 0, }, }, // cci_i2c_scl0 + package() { "TLMMGPIO", package() { 19, 1, 1, 1, 3, 0, }, }, // cci_i2c_sda1 + package() { "TLMMGPIO", package() { 20, 1, 1, 1, 3, 0, }, }, // cci_i2c_scl1 + + // Camera MCLK + package() { "TLMMGPIO", package() { 13, 1, 1, 1, 0, 2, }, }, // cam_mclk0, for CAM0/RFC/IMX318 + package() { "TLMMGPIO", package() { 14, 1, 1, 1, 0, 2, }, }, // cam_mclk1, for CAM1/FFC/IMX258 + package() { "TLMMGPIO", package() { 15, 1, 1, 1, 0, 2, }, }, // cam_mclk2, unused + package() { "TLMMGPIO", package() { 16, 1, 1, 1, 0, 2, }, }, // cam_mclk3, for CAM2/IRIS/OV2281 + }, + + Package() + { + "FSTATE", + 0x1, // F1 state (OFF) + + package() { "TLMMGPIO", package() { 16, 0, 0, 0, 1, 2, }, }, + package() { "TLMMGPIO", package() { 15, 0, 0, 0, 1, 2, }, }, + package() { "TLMMGPIO", package() { 14, 0, 0, 0, 1, 2, }, }, + package() { "TLMMGPIO", package() { 13, 0, 0, 0, 1, 2, }, }, + + package() { "TLMMGPIO", package() { 20, 0, 0, 0, 1, 0, }, }, + package() { "TLMMGPIO", package() { 19, 0, 0, 0, 1, 0, }, }, + package() { "TLMMGPIO", package() { 18, 0, 0, 0, 1, 0, }, }, + package() { "TLMMGPIO", package() { 17, 0, 0, 0, 1, 0, }, }, + + package() { "CLOCK", package() { "cam_cc_cci_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "PSTATE_ADJUST", Package() { 2, 37 } }, + Package() { "PSTATE_ADJUST", Package() { 1, 37 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // This packet contains P state power setting used by the PEP driver. The clock presented here + // MUST be consistent with the clock values under the PERF method in the file of cust_camera_exasoc.asl. + Package() + { + "PSTATE_SET", + 0, + + // Format: name / action / freq / match_type. The driver shall select the lowest frequency required to perform the task at the acceptable performance + // point. HPG recommends to limit the freq under 50 MHz. It is allowed to have multiple clock resources in one PSTATE package. The indexes and + // frequencies MUST be consistent with CCICLKFrqIdx in CCIResourceType.h and CAMP_CLK in cust_camera_exasoc.asl. + Package() { "PSTATE", 0, package() { "CLOCK", package() { "cam_cc_cci_clk", 3, 37500000, 3, } }, }, // LowSVS for all speeds from 100 KHz to 1 MHz. + Package() { "PSTATE", 1, package() { "CLOCK", package() { "cam_cc_cci_clk", 3, 19200000, 3, } }, }, // MinSVS, not used. + }, + + Package() + { + "PSTATE_SET", // PSET 1: Bandwidth adjustments (Type 3: Instantaneous and Arbitrated bandwidth); Driver limits the MaxComponentNameLen number as 40. + 1, + + // Format: Type-3 Bus Arbiter Req | Master Name | Slave Name | IB in bytes/sec | AB + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 12000000000, 12000000000 } }, }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 11500000000, 11500000000 } }, }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 11000000000, 11000000000 } }, }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 10500000000, 10500000000 } }, }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 10000000000, 10000000000 } }, }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 9500000000, 9500000000 } }, }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 9000000000, 9000000000 } }, }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 8500000000, 8500000000 } }, }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 8000000000, 8000000000 } }, }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 7500000000, 7500000000 } }, }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 7000000000, 7000000000 } }, }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 6500000000, 6500000000 } }, }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 6000000000, 6000000000 } }, }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 5500000000, 5500000000 } }, }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 5000000000, 5000000000 } }, }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 4500000000, 4500000000 } }, }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 4000000000, 4000000000 } }, }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3500000000, 3500000000 } }, }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3300000000, 3300000000 } }, }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3100000000, 3100000000 } }, }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2900000000, 2900000000 } }, }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2700000000, 2700000000 } }, }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2500000000, 2500000000 } }, }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2300000000, 2300000000 } }, }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2100000000, 2100000000 } }, }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1900000000, 1900000000 } }, }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1700000000, 1700000000 } }, }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1500000000, 1500000000 } }, }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1300000000, 1300000000 } }, }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1100000000, 1100000000 } }, }, + Package() { "PSTATE", 30, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 900000000, 900000000 } }, }, + Package() { "PSTATE", 31, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 700000000, 700000000 } }, }, + Package() { "PSTATE", 32, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 500000000, 500000000 } }, }, + Package() { "PSTATE", 33, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 400000000, 400000000 } }, }, + Package() { "PSTATE", 34, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 300000000, 300000000 } }, }, + Package() { "PSTATE", 35, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 200000000, 200000000 } }, }, + Package() { "PSTATE", 36, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 100000000, 100000000 } }, }, + Package() { "PSTATE", 37, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 0, 0 } }, }, + }, + + Package() + { + "PSTATE_SET", // PSET 2: Bandwidth adjustments (Type 3: Instantaneous and Arbitrated bandwidth) + 2, + + // Format: Type-3 Bus Arbiter Req | Master Name | Slave Name | IB in bytes/sec | AB + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 12000000000, 12000000000 } }, }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 11500000000, 11500000000 } }, }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 11000000000, 11000000000 } }, }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 10500000000, 10500000000 } }, }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 10000000000, 10000000000 } }, }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 9500000000, 9500000000 } }, }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 9000000000, 9000000000 } }, }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 8500000000, 8500000000 } }, }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 8000000000, 8000000000 } }, }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 7500000000, 7500000000 } }, }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 7000000000, 7000000000 } }, }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 6500000000, 6500000000 } }, }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 6000000000, 6000000000 } }, }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 5500000000, 5500000000 } }, }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 5000000000, 5000000000 } }, }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 4500000000, 4500000000 } }, }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 4000000000, 4000000000 } }, }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 3500000000, 3500000000 } }, }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 3300000000, 3300000000 } }, }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 3100000000, 3100000000 } }, }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 2900000000, 2900000000 } }, }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 2700000000, 2700000000 } }, }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 2500000000, 2500000000 } }, }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 2300000000, 2300000000 } }, }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 2100000000, 2100000000 } }, }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1900000000, 1900000000 } }, }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1700000000, 1700000000 } }, }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1500000000, 1500000000 } }, }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1300000000, 1300000000 } }, }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1100000000, 1100000000 } }, }, + Package() { "PSTATE", 30, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 900000000, 900000000 } }, }, + Package() { "PSTATE", 31, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 700000000, 700000000 } }, }, + Package() { "PSTATE", 32, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 500000000, 500000000 } }, }, + Package() { "PSTATE", 33, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 400000000, 400000000 } }, }, + Package() { "PSTATE", 34, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 300000000, 300000000 } }, }, + Package() { "PSTATE", 35, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 200000000, 200000000 } }, }, + Package() { "PSTATE", 36, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 100000000, 100000000 } }, }, + Package() { "PSTATE", 37, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 0, 0 } }, }, + }, + }, + + Package() + { + "COMPONENT", + 0x1, // Component 1 + + Package() + { + "FSTATE", + 0x0, // F0 state (fully on) + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + + Package() { "PSTATE_ADJUST", Package() { 3, 4 } }, + Package() { "PSTATE_ADJUST", Package() { 2, 4 } }, + Package() { "PSTATE_ADJUST", Package() { 1, 4 } }, + Package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + package() { "CLOCK", package() { "cam_cc_cci_clk", 1} }, // Func: CCI. For CCI operations. + }, + + Package() + { + "FSTATE", + 0x1, // F1 state (OFF) + + package() { "CLOCK", package() { "cam_cc_cci_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + + Package() { "PSTATE_ADJUST", Package() { 0, 5 } }, + Package() { "PSTATE_ADJUST", Package() { 1, 5 } }, + Package() { "PSTATE_ADJUST", Package() { 2, 5 } }, + Package() { "PSTATE_ADJUST", Package() { 3, 5 } }, + + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2} }, + }, + Package() + { + "PSTATE_SET", + 0, + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 400000000, 400000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 300000000, 300000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 200000000, 200000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 100000000, 100000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 0, 0 } } }, + }, + // BW - compressed + Package() + { + "PSTATE_SET", + 1, + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 400000000, 400000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 300000000, 300000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 200000000, 200000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 100000000, 100000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 0, 0 } } }, + }, + + // Moved BW from CAMP to here. this is temporary. + Package() + { + "PSTATE_SET", // PSET 3: Bandwidth adjustments (Type 3: Instantaneous and Arbitrated bandwidth) + 2, + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1100000000, 1100000000 } }, }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 400000000, 400000000 } }, }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 300000000, 300000000 } }, }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 200000000, 200000000 } }, }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 100000000, 100000000 } }, }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 0, 0 } }, }, + }, + + // Moved BW from CAMP to here. this is temporary. + Package() + { + "PSTATE_SET", // PSET 3: Bandwidth adjustments (Type 3: Instantaneous and Arbitrated bandwidth) + 3, + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 1100000000, 1100000000 } }, }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 400000000, 400000000 } }, }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 300000000, 300000000 } }, }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 200000000, 200000000 } }, }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 100000000, 100000000 } }, }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_SF", "ICBID_SLAVE_EBI1", 0, 0 } }, }, + }, + }, + + Package() + { + "COMPONENT", + 0x2, // Component 2 (SHARED_RES: AFVDD) + Package() + { + "FSTATE", + 0x0, // F0 state (fully on) + + // CAM1_STBY_N / CAM_ELDO3_EN (AF_VDD LDO Enable All Cameras) + // VIN_PM8998 - VIN_PMI8998 - BOB - ELDO3 - AF_VDD; LD20-NE182-7-C6; + // Format: Pin|State|FuncSel|Dirc|PullType|DriveStrength + package() { "TLMMGPIO", package() { 27, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + }, + + Package() + { + "FSTATE", + 0x1, // F1 state (OFF) + + // AF_VDD OFF + package() { "TLMMGPIO", package() { 27, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + }, + }, + }, + + // Primary RFC (IMX318) Power Setting Array from imx318_lib.h (sensor vendor supplied). Mapping + // between lib and IP_CAT: VDIG (DVDD), VIO (DOVDD), VANA (AVDD), VAF (AF_VDD). Sony IMX318 + // Application Note (AN): During power on, VANA, VDIG, and VIF may rise in any order. The XCLR + // pin needs to be LOW until all power supplies complete power-on. During power off, VANA, VDIG, + // and VIF may fall in any order. For delays, refer AN "Startup sequence timing constraints" + // and "Power down sequence timing constraints". + Package() + { + "DEVICE", + "\\_SB.CAMS", + + Package() + { + "DSTATE", + 0x0, // D0 state (ON) + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // [1] TLMM_GPIO: set CAM0_RST_N to LOW; LD20-NE182-8-C5 + package() + { + "TLMMGPIO", // Identifier: PMIC GPIO. Top Level Mode Mux (TLMM) + package() + { + 80, // Pin Number: CAM0_RST_N (Primary RFC) + 0, // State / OutVal: 0 == Low, 1 == High + 0, // Function Select: 0 == Generic I/O Pin, non-zero == Alternate Function + 1, // Direction: 0 == Input, 1 == Output + 0, // Pull Type: 0 == No Pull, 1 == Pull Down, 2 == Keeper, 3 == Pull Up + 0, // Strength: 0 == 2 mA, 1 == 4 mA, 2 == 6 mA, 3 == 8 mA, 4 == 10 mA, 5 == 12 mA, 4 == 14 mA, 7 == 16 mA + }, + }, + package() { "DELAY", package() { 1, }, }, // 1 ms(millisecond) delay + + // [2] TLMM_GPIO: VIN_PM8998 - VIN_PMI8998 - BOB - ELDO9 - AVDD (VANA); CAM0_STBY_N / CAM_ELDO9_EN; + // Primary Rear Camera AVDD LDO Enable. LD20-NE182-8-C5. L22A, IMX318_AVDD_ALT is not used. + package() { "TLMMGPIO", package() { 79, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [3] PMIC_GPIO: VIN_PM8998 - S3A - ELDO1 - DVDD; LD20-NE182-27-A6/41-D7 + package() + { + "PMICGPIO", + package() + { + "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", + 0, // PMIC Number: 0 == PM8998, 1 == PMI8998, 2 == PM8005 + 11, // GPIO Number: PM_GPIO_12 / CAM_ELDO1_EN + 0, // Out Buffer Config: 0 == PM_GPIO_OUT_BUFFER_CONFIG_CMOS, 1 == NMOS, 2 == CMOS + 1, // VIN: 0 == PM_GPIO_VIN0, 1 == VIN1 + 1, // Source: 0 == PM_GPIO_SOURCE_LOW, 1 == HIGH, 2 == PAIRED_GPIO, 3-4 == SPECIAL_FUNCTION1-2, 5-8 == DTEST1-4 + 3, // Out Buffer Strength: 0 == PM_GPIO_OUT_BUFFER_RESERVED, 1 == LOW, 2 == MEDIUM, 3 == HIGH + 0, // I Source Pull: 0 == PM_GPIO_I_SOURCE_PULL_UP_30uA, 1 == UP_1_5uA, 2 == UP_31_5uA, 3 == UP_1_5uA_PLUS_30uA_BOOST, 4 == DOWN_10uA, 5 == NO_PULL + }, + }, + package() { "DELAY", package() { 1, }, }, + + // [4] PMIC_VREG_VOTE: VIN_PM8998 - S4A - VIN_LVS1_LVS2 - LVS1A - DOVDD. LD20-NE182-41-B4. + // Regulator name from //deploy/qcom/qct/platform/wpci/prod/woa/QCDK/main/latest/inc/pmic/PmicIVreg.h + package() + { + "PMICVREGVOTE", // Identifier: PMIC VREG Resource + package() + { + "PPP_RESOURCE_ID_LVS1_A", // Voltage Regulator ID (Type VS) + 4, // TYPE of VREG: 4 == LVS (Low Voltage Switch), 5 == MVS (Medium Voltage Switch) + 1800000, // Voltage: 1.8 V + 1, // Software Enable: 0 == Disable, 1 == Enable (Recommended) + // "HLOS_DRV", // Optional: DRV ID (Default: HLOS_DRV; Valid: HLOS_DRV / DISPLAY_DRV) + // "REQUIRED", // Optional: Suppressible Type (Default: REQUIRED; Valid: REQUIRED / SUPPRESSIBLE) + }, + }, + + // [5] CLOCK; LD20-NE182-45-D4 + package() { "CLOCK", package() { "cam_cc_mclk0_clk", 8, 24000000, 3, } }, // Frequency from imx318_lib.h + package() { "DELAY", package() { 1, }, }, + + // [6] TLMM_GPIO: set CAM0_RST_N to HIGH + package() { "TLMMGPIO", package() { 80, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 18, }, }, // 18 ms wait time between XCLR rising and sending streaming command + }, + + Package() + { + "DSTATE", + 0x3, // D3 state (OFF) + + // [1] CLOCK OFF + package() { "CLOCK", package() { "cam_cc_mclk0_clk", 2} }, + package() { "DELAY", package() { 1, }, }, + + // [2] CAM0_RST_N LOW + package() { "TLMMGPIO", package() { 80, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [3] DOVDD OFF + package() { "PMICVREGVOTE", package() { "PPP_RESOURCE_ID_LVS1_A", 4, 0, 0, }, }, + + // [4] DVDD OFF + package() { "PMICGPIO", package() { "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", 0, 11, 0, 1, 0, 3, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [5] AVDD (VANA) OFF + package() { "TLMMGPIO", package() { 79, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + }, + + // Primary FFC (IMX258) Power Setting Array from imx258_lib.h. Sony IMX258 Application Note: During + // power on, VANA, VDIG, and VIF may rise in any order. The XCLR pin is set to "LOW" and the power + // suppliers are brought up. Then the XCLR pin should be set to "HIGH" after INCK supplied. During + // power off, VANA, VDIG, and VIF may fall in any order. For delays, refer AN "Startup sequence + // timing constraints" and "Power down sequence timing constraints". + Package() + { + "DEVICE", + "\\_SB.CAMF", + + Package() + { + "DSTATE", + 0x0, + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // [1] TLMM_GPIO: set CAM1_RST_N to LOW; LD20-NE182-7-C6 + package() { "TLMMGPIO", package() { 28, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [2] TLMM_GPIO: VIN_PM8998 - VIN_PMI8998 - BOB - ELDO2 (GPIO_8 / CAM_ELDO2_EN / Front Camera AVDD LDO Enable) - AVDD (VANA); LD20-NE182-41-C7 + package() { "TLMMGPIO", package() { 8, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [3] PM_IC_GPIO: VIN_PM8998 - S3A - ELDO4 ( PM_GPIO_09 / CAM_ELDO4_EN / Camera Front DVDD LDO Enable) - DVDD; LD20-NE182-41-B6 + package() { "PMICGPIO", package() { "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", 0, 8, 0, 1, 1, 3, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [4] PM_IC_VREG_VOTE: VIN_PM8998 - S4A - VIN_LVS1_LVS2 - LVS1A - DOVDD; LD20-NE182-41-B4 + package() { "PMICVREGVOTE", package() { "PPP_RESOURCE_ID_LVS1_A", 4, 1800000, 1, }, }, + + // [5] CLOCK; LD20-NE182-43-C2 + package() { "CLOCK", package() { "cam_cc_mclk1_clk", 8, 24000000, 3, } }, + package() { "DELAY", package() { 1, }, }, + + // [6] TLMM_GPIO: set CAM1_RST_N to HIGH; LD20-NE182-7-C6 + package() { "TLMMGPIO", package() { 28, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 12, }, }, // Delay between INCK-start-and-XCLR-rising and Sending-streaming-command + }, + + Package() + { + "DSTATE", + 0x3, + + // [1] CAM1_RST_N LOW + package() { "TLMMGPIO", package() { 28, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [2] CLOCK OFF + package(){ "CLOCK", package(){ "cam_cc_mclk1_clk", 2} }, + package() { "DELAY", package() { 1, }, }, + + // [3] DOVDD OFF + package() { "PMICVREGVOTE", package() { "PPP_RESOURCE_ID_LVS1_A", 4, 0, 0, }, }, + + // [4] DVDD OFF + package() { "PMICGPIO", package() { "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", 0, 8, 0, 1, 0, 3, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [5] AVDD (VANA) OFF + package() { "TLMMGPIO", package() { 8, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + }, + + // FFC Auxiliary (OV2281) Power Setting Array from ov2281_lib.h. Refer OV2281 datasheet + // "power up sequence", figure 2-3, "power down sequence", and figure 2-6 for more + // information. + Package() + { + "DEVICE", + "\\_SB.CAMI", + + Package() + { + "DSTATE", + 0x0, + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // [1] VIO / DOVDD - VREG_LVS1A_1P8 (All camera 1.8 V IO); PM_IC_VREG_VOTE; LD20-NE182-41-B4, 42-D6 + package() { "PMICVREGVOTE", package() { "PPP_RESOURCE_ID_LVS1_A", 4, 1800000, 1, }, }, + + // [2] AVDD 2.8 V - P2V85_AVDD_CAM1_2; LD20-NE182-41-C5, 42-D6; TLMM_GPIO: ELDO2 (GPIO_8 / CAM_ELDO2_EN / Front Camera AVDD LDO Enable / CAM2_STBY_N) + package() { "TLMMGPIO", package() { 8, 1, 0, 1, 0, 0, }, }, + + // [3] VDD 1.2 V - P1V2_DVDD_CAM1_2; PM_IC_GPIO: ELDO4 ( PM_GPIO_09 / CAM_ELDO4_EN / Camera Front DVDD LDO Enable) - DVDD; LD20-NE182-41-B6 + package() { "PMICGPIO", package() { "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", 0, 8, 0, 1, 1, 3, 0, }, }, + + // [4] CAM2_RST_N LOW (AUX1, 3rd camera in system); LD20-NE182-7-D6 + package() { "TLMMGPIO", package() { 9, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [5] CAM2_RST_N HIGH + package() { "TLMMGPIO", package() { 9, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [6] CLOCK; LD20-NE182-42-C6 + package() { "CLOCK", package() { "cam_cc_mclk3_clk", 8, 24000000, 3, } }, + package() { "DELAY", package() { 1, }, }, + }, + + Package() + { + "DSTATE", + 0x3, + + // [1] CLOCK OFF + package(){ "CLOCK", package(){ "cam_cc_mclk3_clk", 2} }, + package() { "DELAY", package() { 1, }, }, + + // [2] CAM2_RST_N HIGH + package() { "TLMMGPIO", package() { 9, 1, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [3] CAM2_RST_N LOW + package() { "TLMMGPIO", package() { 9, 0, 0, 1, 0, 0, }, }, + package() { "DELAY", package() { 1, }, }, + + // [4] VDD OFF + package() { "PMICGPIO", package() { "IOCTL_PM_GPIO_CONFIG_DIGITAL_OUTPUT", 0, 8, 0, 1, 0, 3, 0, }, }, + + // [5] AVDD OFF + package() { "TLMMGPIO", package() { 8, 0, 0, 1, 0, 0, }, }, + + // [6] DOVDD OFF + package() { "PMICVREGVOTE", package() { "PPP_RESOURCE_ID_LVS1_A", 4, 0, 0, }, }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + } + }) +} diff --git a/dipper/cust_camera_resources.asl b/dipper/cust_camera_resources.asl new file mode 100755 index 0000000..21b986e --- /dev/null +++ b/dipper/cust_camera_resources.asl @@ -0,0 +1,1259 @@ +//=========================================================================== +// +// DESCRIPTION +// This file contains the resources needed by camera drivers. +// +// [1] Refer Table 3-10 "Titan 170 Power Use Cases" in "Titan Camera +// Hardware Architecture Specification" for the detailed information on +// the operating points under different use case scenarios. Based on +// the information in the table, this ACPI planned to support SVS and +// NOM frequencies. +// +// [2] Refer Chapter 2 "Defintions of Terms" in the ACPI Specification for +// the definitions of D, F, and P states. Refer the manual of PEP +// driver for the syntax of defining the power and clock resources. +// +// [3] ACPI keeps 2 mA for most GPIO pins by setting the field of +// "PullDriveStrength" to 0 on TLMMGPIO. For high frequency clock pins +// (such as cam_mclk0/1/2/3 running at 24 MHz), the strength shall be +// set to 6 mA to meet the timing requirement. +// +//=========================================================================== + +Include("cust_camera_exasoc_resources.asl") + +Scope(\_SB_.PEP0) +{ + // CAMERA + Method(CPMD) + { + Return(CPCC) + } + + Name(CPCC, Package() + { + // JPEG ENCODER (JPGE) + Package() + { + "DEVICE", + "\\_SB.JPGE", + + Package() + { + "COMPONENT", + 0x0, // Component 0; JPEG 0 Encoder + + Package() + { + "FSTATE", + 0x0, // F0 State + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + package() { "CLOCK", package() { "cam_cc_jpeg_clk", 1} }, // For core processing on JPEG instance 0 and 3; SVS + + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + }, + + Package() + { + "FSTATE", + 0x1, // F1 State + + package() { "CLOCK", package() { "cam_cc_jpeg_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + Package() + { + "PSTATE_SET", // PSET 0: Clock frequency adjustments + 0, + + Package() { "PSTATE", 0, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 600000000, 3, } }, }, // TURBO for driver turbo + Package() { "PSTATE", 1, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 600000000, 3, } }, }, // NOMINAL for driver nominal + Package() { "PSTATE", 2, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 404000000, 3, } }, }, // SVS only used in driver (revisit) + Package() { "PSTATE", 3, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 200000000, 3, } }, }, // LowSVS for driver Standby + }, + }, + + Package() + { + "COMPONENT", + 0x1, // Component 2; JPEG_3/DMA. Note that this is normally indexed as JPEG core "3" in diagrams, but the ACPI entry index is 2 here + + Package() + { + "FSTATE", + 0x0, // F0 State + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + package() { "CLOCK", package() { "cam_cc_jpeg_clk", 1} }, // LowSVS for standby (JPEG3 ONLY) + + package() { "PSTATE_ADJUST", Package() { 0, 2 }}, + }, + + Package() + { + "FSTATE", + 0x1, // F1 State + + package() { "CLOCK", package() { "cam_cc_jpeg_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + Package() + { + "PSTATE_SET", + 0, + + Package() { "PSTATE", 0, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 600000000, 3, } }, }, // Turbo + Package() { "PSTATE", 1, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 600000000, 3, } }, }, // Nominal + Package() { "PSTATE", 2, Package() { "CLOCK", Package() { "cam_cc_jpeg_clk", 3, 200000000, 3, } }, }, // LowSVS for Standby + }, + }, + }, + + + // Device MPCS Data (DEVICE/COMPONENT/STATE) + Package() + { + "DEVICE", + "\\_SB.MPCS", + + Package() + { + "COMPONENT", + 0x0, // Component 0 (CSIPHY_0) + + Package() + { + "FSTATE", + 0x0, + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + Package() { "CLOCK", Package() { "phy_refgen_south", 1} }, //To enable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_csi0phytimer_clk", 8, 269330000, 3, }}, // SVS = NOM = TURBO + package() { "CLOCK", package() { "cam_cc_csiphy0_clk", 8, 384000000, 3, }}, // SVS = NOM = TURBO + }, + + Package() + { + "FSTATE", + 0x1, + + package() { "CLOCK", package() { "cam_cc_csiphy0_clk", 2}}, + package() { "CLOCK", package() { "cam_cc_csi0phytimer_clk", 2}}, + + Package() { "CLOCK", Package() { "phy_refgen_south", 2 }}, //To disable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + }, + + Package() + { + "COMPONENT", + 0x1, // Component 1 (CSIPHY_1) + + Package() + { + "FSTATE", + 0x0, + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + Package() { "CLOCK", Package() { "phy_refgen_south", 1} }, //To enable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_csi1phytimer_clk", 8, 269330000, 3, }}, + package() { "CLOCK", package() { "cam_cc_csiphy1_clk", 8, 384000000, 3, }}, + }, + + Package() + { + "FSTATE", + 0x1, + + package() { "CLOCK", package() { "cam_cc_csiphy1_clk", 2}}, + package() { "CLOCK", package() { "cam_cc_csi1phytimer_clk", 2}}, + + Package() { "CLOCK", Package() { "phy_refgen_south", 2 }}, //To disable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + }, + + Package() + { + "COMPONENT", + 0x2, // Component 2 (CSIPHY_2) + + Package() + { + "FSTATE", + 0x0, + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + Package() { "CLOCK", Package() { "phy_refgen_south", 1} }, //To enable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_csi2phytimer_clk", 8, 269330000, 3, }}, + package() { "CLOCK", package() { "cam_cc_csiphy2_clk", 8, 384000000, 3, }}, + }, + + Package() + { + "FSTATE", + 0x1, + + package() { "CLOCK", package() { "cam_cc_csiphy2_clk", 2}}, + package() { "CLOCK", package() { "cam_cc_csi2phytimer_clk", 2}}, + + + Package() { "CLOCK", Package() { "phy_refgen_south", 2 }}, //To disable REFGEN SOUTH + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + }, + }, + + //Device VFE0 Data + Package() + { + "DEVICE", + "\\_SB.VFE0", + Package() + { + "COMPONENT", + 0x0, // Component 0. //IFE0 component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Footswitch Name; Action (1 == Enable; 2 == Disable; 3 = HW_CONTROL enable, 4 = HW_CONTROL disable) + + // Action: 1 == ENABLE 2 == DISABLE 3 == SET_FREQ 8 == EN_SETFREQ + // MatchType: 1 == CLOCK_FREQUENCY_HZ_AT_LEAST 3 == CLOCK_FREQUENCY_HZ_CLOSEST + + // Clock Name Action Frequency MatchType + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + Package(){"PSTATE_ADJUST", Package () { 1, 10 }}, // bw voting + Package(){"PSTATE_ADJUST", Package () { 2, 10 }}, // bw voting + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + Package() { "FOOTSWITCH", Package() { "ife_0_gdsc", 1 } }, + + //IFE0 Clocks + package() { "PSTATE_ADJUST", Package() { 0, 1 } }, // Pstate adjustment for clock frequencies. Set to SVS + package(){ "CLOCK", package(){ "cam_cc_ife_0_clk", 1 } }, + package(){ "CLOCK", package(){ "cam_cc_ife_0_cphy_rx_clk", 8, 384000000, 3, } }, // SVS + package(){ "CLOCK", package(){ "cam_cc_ife_0_csid_clk", 8, 384000000, 3, } }, // SVS + package(){ "CLOCK", package(){ "cam_cc_ife_0_dsp_clk", 1} }, + + package(){ "CLOCK", package(){ "cam_cc_ife_0_axi_clk", 1} }, + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + package(){ "CLOCK", package(){ "cam_cc_ife_0_axi_clk", 2}}, + + package(){ "CLOCK", package(){ "cam_cc_ife_0_dsp_clk", 2}}, + package(){ "CLOCK", package(){ "cam_cc_ife_0_csid_clk", 2}}, + package(){ "CLOCK", package(){ "cam_cc_ife_0_cphy_rx_clk", 2}}, + //package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + + package(){ "CLOCK", package(){ "cam_cc_ife_0_clk", 2}}, + + Package() { "FOOTSWITCH", Package() { "ife_0_gdsc", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package(){"PSTATE_ADJUST", Package () { 2, 29 }}, // bw voting + Package(){"PSTATE_ADJUST", Package () { 1, 29 }}, // bw voting + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + // TURBO, NOM + Package() + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_ife_0_clk", 3, 600000000, 3, }}, + }, + // SVS_L1 + Package() + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_ife_0_clk", 3, 480000000, 3, }}, + }, + // SVS + Package() + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_ife_0_clk", 3, 404000000, 3, }}, + }, + // Off + Package() + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_ife_0_clk", 3, 0, 3, }}, + }, + }, + + + // BW - Uncompressed + Package() + { + "PSTATE_SET", + 1, + + // Req IB AB + // Type Master Slave Bytes/Sec Bytes/Sec + // ---- ----------------------- ---------------------- ---------- ---------- + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 38000000000, 38000000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 35000000000, 35000000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 28000000000, 28000000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 23000000000, 23000000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 20000000000, 20000000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 16000000000, 16000000000 } } }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 14000000000, 14000000000 } } }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 12000000000, 12000000000 } } }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 4000000000, 4000000000 } } }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3500000000, 3500000000 } } }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3300000000, 3300000000 } } }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3100000000, 3100000000 } } }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2900000000, 2900000000 } } }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2700000000, 2700000000 } } }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2500000000, 2500000000 } } }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2300000000, 2300000000 } } }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2100000000, 2100000000 } } }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1900000000, 1900000000 } } }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1700000000, 1700000000 } } }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1500000000, 1500000000 } } }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1300000000, 1300000000 } } }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 900000000, 900000000 } } }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 700000000, 700000000 } } }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 500000000, 500000000 } } }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 400000000, 400000000 } } }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 300000000, 300000000 } } }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 200000000, 200000000 } } }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 100000000, 100000000 } } }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 0, 0 } } }, + }, + // BW - compressed + Package() + { + "PSTATE_SET", + 2, + + // Req IB AB + // Type Master Slave Bytes/Sec Bytes/Sec + // ---- ----------------------- ---------------------- ---------- ---------- + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 38000000000, 38000000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 35000000000, 35000000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 28000000000, 28000000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 23000000000, 23000000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 20000000000, 20000000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 16000000000, 16000000000 } } }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 14000000000, 14000000000 } } }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 12000000000, 12000000000 } } }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 4000000000, 4000000000 } } }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 3500000000, 3500000000 } } }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 3300000000, 3300000000 } } }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 3100000000, 3100000000 } } }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 2900000000, 2900000000 } } }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 2700000000, 2700000000 } } }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 2500000000, 2500000000 } } }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 2300000000, 2300000000 } } }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 2100000000, 2100000000 } } }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1900000000, 1900000000 } } }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1700000000, 1700000000 } } }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1500000000, 1500000000 } } }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1300000000, 1300000000 } } }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 900000000, 900000000 } } }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 700000000, 700000000 } } }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 500000000, 500000000 } } }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 400000000, 400000000 } } }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 300000000, 300000000 } } }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 200000000, 200000000 } } }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 100000000, 100000000 } } }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF0", "ICBID_SLAVE_EBI1", 0, 0 } } }, + }, + + // CSID Clk Freq: TODO + + }, + + Package() + { + "COMPONENT", + 0x1, // Component 1. //IFE1 component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Footswitch Name; Action (1 == Enable; 2 == Disable; 3 = HW_CONTROL enable, 4 = HW_CONTROL disable) + // Action: 1 == ENABLE 2 == DISABLE 3 == SET_FREQ 8 == EN_SETFREQ + // MatchType: 1 == CLOCK_FREQUENCY_HZ_AT_LEAST 3 == CLOCK_FREQUENCY_HZ_CLOSEST + + // Clock Name Action Frequency MatchType + Package(){"PSTATE_ADJUST", Package () { 1, 10 }}, // bw voting + Package(){"PSTATE_ADJUST", Package () { 2, 10 }}, // bw voting + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + Package() { "FOOTSWITCH", Package() { "ife_1_gdsc", 1 } }, + + //IFE1 Clocks + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + package() { "CLOCK", package(){ "cam_cc_ife_1_clk", 1} }, + + package() { "CLOCK", package(){ "cam_cc_ife_1_cphy_rx_clk", 8, 384000000, 3, } }, // SVS + package() { "CLOCK", package(){ "cam_cc_ife_1_csid_clk", 8, 384000000, 3, } }, // SVS + package() { "CLOCK", package(){ "cam_cc_ife_1_dsp_clk", 1} }, + + package() { "CLOCK", package(){ "cam_cc_ife_1_axi_clk", 1} }, + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + package(){ "CLOCK", package(){ "cam_cc_ife_1_axi_clk", 2} }, + + package(){ "CLOCK", package(){ "cam_cc_ife_1_dsp_clk", 2} }, + package(){ "CLOCK", package(){ "cam_cc_ife_1_csid_clk", 2} }, + package(){ "CLOCK", package(){ "cam_cc_ife_1_cphy_rx_clk", 2} }, + + //package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package(){ "CLOCK", package(){ "cam_cc_ife_1_clk", 2} }, + + Package(){ "FOOTSWITCH", Package(){ "ife_1_gdsc", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + + Package(){"PSTATE_ADJUST", Package () { 2, 29 }}, // bw voting + Package(){"PSTATE_ADJUST", Package () { 1, 29 }}, // bw voting + + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + // TURBO, NOM + Package() + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_ife_1_clk", 3, 600000000, 3, }}, + }, + // SVS_L1 + Package() + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_ife_1_clk", 3, 480000000, 3, }}, + }, + // SVS + Package() + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_ife_1_clk", 3, 404000000, 3, }}, + }, + // Off + Package() + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_ife_1_clk", 3, 0, 3, }}, + }, + }, + + // BW - Uncompressed + Package() + { + "PSTATE_SET", + 1, + + // Req IB AB + // Type Master Slave Bytes/Sec Bytes/Sec + // ---- ----------------------- ---------------------- ---------- ---------- + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 38000000000, 38000000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 35000000000, 35000000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 28000000000, 28000000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 23000000000, 23000000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 20000000000, 20000000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 16000000000, 16000000000 } } }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 14000000000, 14000000000 } } }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 12000000000, 12000000000 } } }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 4000000000, 4000000000 } } }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3500000000, 3500000000 } } }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3300000000, 3300000000 } } }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 3100000000, 3100000000 } } }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2900000000, 2900000000 } } }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2700000000, 2700000000 } } }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2500000000, 2500000000 } } }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2300000000, 2300000000 } } }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 2100000000, 2100000000 } } }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1900000000, 1900000000 } } }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1700000000, 1700000000 } } }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1500000000, 1500000000 } } }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1300000000, 1300000000 } } }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 900000000, 900000000 } } }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 700000000, 700000000 } } }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 500000000, 500000000 } } }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 400000000, 400000000 } } }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 300000000, 300000000 } } }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 200000000, 200000000 } } }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 100000000, 100000000 } } }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1_UNCOMP", "ICBID_SLAVE_CAMNOC_UNCOMP", 0, 0 } } }, + }, + // BW - compressed + Package() + { + "PSTATE_SET", + 2, + + // Req IB AB + // Type Master Slave Bytes/Sec Bytes/Sec + // ---- ----------------------- ---------------------- ---------- ---------- + Package() { "PSTATE", 0, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 38000000000, 38000000000 } } }, + Package() { "PSTATE", 1, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 35000000000, 35000000000 } } }, + Package() { "PSTATE", 2, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 28000000000, 28000000000 } } }, + Package() { "PSTATE", 3, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 23000000000, 23000000000 } } }, + Package() { "PSTATE", 4, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 20000000000, 20000000000 } } }, + Package() { "PSTATE", 5, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 16000000000, 16000000000 } } }, + Package() { "PSTATE", 6, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 14000000000, 14000000000 } } }, + Package() { "PSTATE", 7, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 12000000000, 12000000000 } } }, + Package() { "PSTATE", 8, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 4000000000, 4000000000 } } }, + Package() { "PSTATE", 9, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 3500000000, 3500000000 } } }, + Package() { "PSTATE", 10, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 3300000000, 3300000000 } } }, + Package() { "PSTATE", 11, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 3100000000, 3100000000 } } }, + Package() { "PSTATE", 12, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 2900000000, 2900000000 } } }, + Package() { "PSTATE", 13, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 2700000000, 2700000000 } } }, + Package() { "PSTATE", 14, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 2500000000, 2500000000 } } }, + Package() { "PSTATE", 15, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 2300000000, 2300000000 } } }, + Package() { "PSTATE", 16, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 2100000000, 2100000000 } } }, + Package() { "PSTATE", 17, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 1900000000, 1900000000 } } }, + Package() { "PSTATE", 18, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 1700000000, 1700000000 } } }, + Package() { "PSTATE", 19, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 1500000000, 1500000000 } } }, + Package() { "PSTATE", 20, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 1300000000, 1300000000 } } }, + Package() { "PSTATE", 21, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 1100000000, 1100000000 } } }, + Package() { "PSTATE", 22, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 900000000, 900000000 } } }, + Package() { "PSTATE", 23, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 700000000, 700000000 } } }, + Package() { "PSTATE", 24, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 500000000, 500000000 } } }, + Package() { "PSTATE", 25, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 400000000, 400000000 } } }, + Package() { "PSTATE", 26, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 300000000, 300000000 } } }, + Package() { "PSTATE", 27, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 200000000, 200000000 } } }, + Package() { "PSTATE", 28, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 100000000, 100000000 } } }, + Package() { "PSTATE", 29, Package() { "BUSARB", Package() { 3, "ICBID_MASTER_CAMNOC_HF1", "ICBID_SLAVE_EBI1", 0, 0 } } }, + }, + + }, + + Package() + { + "COMPONENT", + 0x2, // Component 2. //IFE LITE component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Footswitch Name; Action (1 == Enable; 2 == Disable; 3 = HW_CONTROL enable, 4 = HW_CONTROL disable) + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + //IFE Lite Clocks + package(){ "CLOCK", package(){ "cam_cc_ife_lite_clk", 1 } }, + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + + package(){ "CLOCK", package(){ "cam_cc_ife_lite_cphy_rx_clk", 8, 384000000, 3, } }, // SVS + package(){ "CLOCK", package(){ "cam_cc_ife_lite_csid_clk", 8, 384000000, 3, } }, // SVS + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + package(){ "CLOCK", package(){ "cam_cc_ife_lite_csid_clk", 2 } }, + package(){ "CLOCK", package(){ "cam_cc_ife_lite_cphy_rx_clk", 2 } }, + + package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package(){ "CLOCK", package(){ "cam_cc_ife_lite_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + // TURBO, NOM + Package() + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_ife_lite_clk", 3, 600000000, 3, }}, + }, + // SVS_L1 + Package() + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_ife_lite_clk", 3, 480000000, 3, }}, + }, + // SVS + Package() + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_ife_lite_clk", 3, 404000000, 3, }}, + }, + // Off + Package() + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_ife_lite_clk", 3, 0, 3, }}, + }, + }, + + // BW: ICBID_MASTER_CAMNOC_HF1_UNCOMP is used for both ife1 & ife_lite + }, + + Package() + { + "COMPONENT", + 0x3, // Component 3. //ICP component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Vote for QDSS to enable the following AOP clocks: + // cam_cc_icp_apb_clk : gcc_mmss_icp_apb_clk : gcc_apb_clk + // cam_cc_icp_atb_clk : gcc_mmss_icp_atb_clk : gcc_mmss_at_clk + // cam_cc_icp_cti_clk : gcc_mmss_icp_cti_clk : gcc_mmss_trig_clk + // cam_cc_icp_ts_clk : gcc_mmss_icp_ts_clk : gcc_qdss_tsctr_clk + // + package() {"NPARESOURCE", package() {1, "/clk/qdss", 1},}, + + // Footswitch Name; Action (1 == Enable; 2 == Disable) + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + package() { "CLOCK", package() { "cam_cc_icp_apb_clk", 1 } }, + + package() { "CLOCK", package() { "cam_cc_icp_clk", 1 } }, // SVS. DCVS recommendation + package() { "PSTATE_ADJUST", Package() { 0, 1 } }, // Pstate adjustment for clock frequencies. Set to SVS + + package() { "CLOCK", package() { "cam_cc_icp_atb_clk", 1 } }, + package() { "CLOCK", package() { "cam_cc_icp_cti_clk", 1 } }, + package() { "CLOCK", package() { "cam_cc_icp_ts_clk", 1 } }, + }, + Package() + { + "FSTATE", + 0x1, // F1 state + package(){ "CLOCK", package(){ "cam_cc_icp_ts_clk", 2 } }, + package(){ "CLOCK", package(){ "cam_cc_icp_cti_clk", 2 } }, + package(){ "CLOCK", package(){ "cam_cc_icp_atb_clk", 2 } }, + + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, + package(){ "CLOCK", package(){ "cam_cc_icp_clk", 2 } }, + package(){ "CLOCK", package(){ "cam_cc_icp_apb_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + + // Remove the QDSS vote to disable the following AOP clocks: + // cam_cc_icp_apb_clk : gcc_mmss_icp_apb_clk : gcc_apb_clk + // cam_cc_icp_atb_clk : gcc_mmss_icp_atb_clk : gcc_mmss_at_clk + // cam_cc_icp_cti_clk : gcc_mmss_icp_cti_clk : gcc_mmss_trig_clk + // cam_cc_icp_ts_clk : gcc_mmss_icp_ts_clk : gcc_qdss_tsctr_clk + // + package() {"NPARESOURCE", package() {1, "/clk/qdss", 0},}, + }, + + Package() + { + "PSTATE_SET", + 0, + + // NOM + Package() + { + "PSTATE", + 0, + package() { "CLOCK", package() { "cam_cc_icp_clk", 3, 600000000, 3, } }, + + }, + + // SVS + Package() + { + "PSTATE", + 1, + package() { "CLOCK", package() { "cam_cc_icp_clk", 3, 400000000, 3, } }, + + }, + + // Off + Package() + { + "PSTATE", + 2, + package() { "CLOCK", package() { "cam_cc_icp_clk", 3, 0, 3, } }, + + }, + }, + }, + + Package() + { + "COMPONENT", + 0x4, // Component 4. //IPE0/1 component + Package() + { + "FSTATE", + 0x0, // F0 state + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // IPE0 clocks + Package() { "FOOTSWITCH", Package() { "ipe_0_gdsc", 1 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_0_ahb_clk", 1 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_0_clk", 1 } }, + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + + package() { "CLOCK", package() { "cam_cc_ipe_0_areg_clk", 1 } }, + package() { "CLOCK", package() { "cam_cc_ipe_0_axi_clk", 1 } }, + + Package() { "FOOTSWITCH", Package() { "ipe_0_gdsc", 3 } }, // HW control (TODO: need to enable by ES) + + + // IPE1 clocks + Package() { "FOOTSWITCH", Package() { "ipe_1_gdsc", 1 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_1_ahb_clk", 1 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_1_clk", 1 } }, + package() { "PSTATE_ADJUST", Package() { 1, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + + package() { "CLOCK", package() { "cam_cc_ipe_1_areg_clk", 1 } }, + package() { "CLOCK", package() { "cam_cc_ipe_1_axi_clk", 1 } }, + + Package() { "FOOTSWITCH", Package() { "ipe_1_gdsc", 3 } }, // HW control (TODO: need to enable by ES) + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + + Package() { "FOOTSWITCH", Package() { "ipe_1_gdsc", 4 } }, // HW control (TODO: need to enable by ES) + + package() { "CLOCK", package() { "cam_cc_ipe_1_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_ipe_1_areg_clk", 2 } }, + + package() { "PSTATE_ADJUST", Package() { 1, 4 } }, + package() { "CLOCK", package() { "cam_cc_ipe_1_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_1_ahb_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "ipe_1_gdsc", 2 } }, + + Package() { "FOOTSWITCH", Package() { "ipe_0_gdsc", 4 } }, // HW control (TODO: need to enable by ES) + + package() { "CLOCK", package() { "cam_cc_ipe_0_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_ipe_0_areg_clk", 2 } }, + + package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package() { "CLOCK", package() { "cam_cc_ipe_0_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_ipe_0_ahb_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "ipe_0_gdsc", 2 } }, + + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + Package() // Turbo + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_0_clk", 3, 600000000, 3, }}, + }, + Package() // SVS_L1 + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_0_clk", 3, 480000000, 3, }}, + }, + Package() // SVS + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_0_clk", 3, 404000000, 3, }}, + }, + Package() // Off + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_0_clk", 3, 0, 3, }}, + }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 1, + Package() // Turbo + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_1_clk", 3, 600000000, 3, }}, + }, + Package() // SVS_L1 + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_1_clk", 3, 480000000, 3, }}, + }, + Package() // SVS + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_1_clk", 3, 404000000, 3, }}, + }, + Package() // Off + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_ipe_1_clk", 3, 0, 3, }}, + }, + }, + + // IPE0/1 AHB & AREG Freq: TODO + }, + + Package() + { + "COMPONENT", + 0x5, // Component 5. //BPS component + Package() + { + "FSTATE", + 0x0, // F0 state + // Footswitch Name; Action (1 == Enable; 2 == Disable; 3 = HW_CONTROL enable, 4 = HW_CONTROL disable) + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // BPS clocks + Package() { "FOOTSWITCH", Package() { "bps_gdsc", 1 } }, + + package() { "CLOCK", package() { "cam_cc_bps_ahb_clk", 1 } }, // SVS + + package() { "CLOCK", package() { "cam_cc_bps_clk", 1 } }, + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + + package() { "CLOCK", package() { "cam_cc_bps_areg_clk", 1 } }, // SVS + package() { "CLOCK", package() { "cam_cc_bps_axi_clk", 1 } }, + + Package() { "FOOTSWITCH", Package() { "bps_gdsc", 3 } }, // HW control (TODO: need to enable by ES) + + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + Package() { "FOOTSWITCH", Package() { "bps_gdsc", 4 } }, // HW control (TODO: need to enable by ES) + + package() { "CLOCK", package() { "cam_cc_bps_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_bps_areg_clk", 2 } }, + + package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package() { "CLOCK", package() { "cam_cc_bps_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_bps_ahb_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "bps_gdsc", 2 } }, + + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + Package() // Turbo + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_bps_clk", 3, 600000000, 3, }}, + }, + Package() // SVS_L1 + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_bps_clk", 3, 480000000, 3, }}, + }, + Package() // SVS + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_bps_clk", 3, 404000000, 3, }}, + }, + Package() // Off + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_bps_clk", 3, 0, 3, }}, + }, + }, + // BPS AHB & AREG Freq: TODO + }, + + Package() + { + "COMPONENT", + 0x6, // Component 6. //LRME component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Footswitch Name; Action (1 == Enable; 2 == Disable; ) + + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // LRME clocks + package() { "CLOCK", package() { "cam_cc_lrme_clk", 1 } }, + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package() { "CLOCK", package() { "cam_cc_lrme_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + Package() // Turbo, NOM + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_lrme_clk", 3, 400000000, 3, }}, + }, + Package() // SVS_L1 + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_lrme_clk", 3, 320000000, 3, }}, + }, + Package() // SVS + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_lrme_clk", 3, 269000000, 3, }}, + }, + Package() // Off + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_lrme_clk", 3, 0, 3, }}, + }, + }, + }, + + + Package() + { + "COMPONENT", + 0x7, // Component 7. //FD component + Package() + { + "FSTATE", + 0x0, // F0 state + + // Footswitch Name; Action (1 == Enable; 2 == Disable; ) + package() { "CLOCK", package() { "gcc_camera_xo_clk", 1} }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 1} }, + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 1} }, + + package() { "CLOCK", package() { "gcc_camera_axi_clk", 1} }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 1 } }, // AHB clock for all register access within the JPEG core; SVS + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 1 } }, // Same as above; SVS + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 1} }, // For DDR access through CAMNOC + + // FD clocks + Package() { "CLOCK", Package(){ "cam_cc_fd_core_clk", 1 }}, // SVS. DCVS recommendation + package() { "PSTATE_ADJUST", Package() { 0, 2 } }, // Pstate adjustment for clock frequencies. Set to SVS + + }, + Package() + { + "FSTATE", + 0x1, // F1 state + + package() { "PSTATE_ADJUST", Package() { 0, 4 } }, + package() { "CLOCK", package() { "cam_cc_fd_core_clk", 2 } }, + + package() { "CLOCK", package() { "cam_cc_camnoc_axi_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_cpas_ahb_clk", 2 } }, + package() { "CLOCK", package() { "cam_cc_soc_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_axi_clk", 2 } }, + + Package() { "FOOTSWITCH", Package() { "titan_top_gdsc", 2 } }, + package() { "CLOCK", package() { "gcc_camera_ahb_clk", 2 } }, + package() { "CLOCK", package() { "gcc_camera_xo_clk", 2 } }, + }, + + // Clk Freq + Package() + { + "PSTATE_SET", + 0, + Package() // Turbo, NOM + { + "PSTATE", + 0, + Package(){ "CLOCK", Package(){ "cam_cc_fd_core_clk", 3, 600000000, 3, }}, + }, + Package() // SVS_L1 + { + "PSTATE", + 1, + Package(){ "CLOCK", Package(){ "cam_cc_fd_core_clk", 3, 538000000, 3, }}, + }, + Package() // SVS + { + "PSTATE", + 2, + Package(){ "CLOCK", Package(){ "cam_cc_fd_core_clk", 3, 400000000, 3, }}, + }, + Package() // Off + { + "PSTATE", + 3, + Package(){ "CLOCK", Package(){ "cam_cc_fd_core_clk", 3, 0, 3, }}, + }, + }, + }, + }, + }) +} diff --git a/dipper/cust_dsdt.asl b/dipper/cust_dsdt.asl new file mode 100755 index 0000000..7884613 --- /dev/null +++ b/dipper/cust_dsdt.asl @@ -0,0 +1,39 @@ +// +// Camera Platform, Camera Sensors, White LED Flash, JPEG HW, VFE Moved to a dedicated asl +// This is done to support Multiple platforms and Multiple OEM Projects in CRM Builds +// +Include("cust_camera.asl") +Include("cust_sensors.asl") + +// GPIO_11 + +Method (ADDR) +{ + If(Lequal(\_SB_.SVMJ, 1)) + { + return(0x390B000) + } + ElseIf(Lequal(\_SB_.SVMJ, 2)) + { + return(0x350B000) + } +} + +OperationRegion(NM11, SystemMemory, ADDR, 0x14) +Field(NM11, DWordAcc, NoLock, Preserve){ + PI1C, 32, + PIN1, 32, + PI1N, 32, + PI1S, 32, + PI1L, 32, +} + +// BOARD VERSION (NBID) +// NBID == 0x0 i.e. FULL MODEM BUILD +// NBID == 0x1 i.e. NO MODEM BUILD + +Method (_MID, 0, Serialized) { + Name(NMID, Zero) + Store(PIN1, NMID) + Return (NMID) +} diff --git a/dipper/cust_hwn.asl b/dipper/cust_hwn.asl new file mode 100755 index 0000000..4f829c6 --- /dev/null +++ b/dipper/cust_hwn.asl @@ -0,0 +1,171 @@ +Name(HWNH, 0) +Name(HWNL, 0) + +// +// HWN Haptics +// +Device (HWN1) +{ + Name (_HID, "QCOM02A9") + Alias(\_SB.PSUB, _SUB) + + Method (_STA) + { + if(LEqual(\_SB_.HWNH, 0)) { + Return (0) + } + else { + Return (0x0F) + } + } + + Name (_DEP, + Package(0x1) + { + \_SB_.PMIC + } + ) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, + ResourceTemplate () + { + // Short Circuit IRQ + GpioInt(Level, ActiveHigh, Exclusive, PullNone, 0, "\\_SB.PM01", , , , ) {400} // 0xE00 - PM_INT__HAPTICS__SC_INT + + // Play IRQ + // GpioInt(Level, ActiveHigh, Exclusive, PullNone, 0, "\\_SB.PM01", , , , ) {401} // 0xE01 - PM_INT__HAPTICS__PLAY_INT + } + ) + Return(RBUF) + } + + /* ACPI methods for HAPI - Haptics Device info */ + Method(HAPI, 0x0, NotSerialized) + { + Name (CFG0, + Package() + { + 1, // TotalHwnVib - Total HWN Vibs + 1, // PmicNumber - PMIC Number for HWN Vibs + 1, // HapticsConfigInputSource - Read configuration from 0: Registry, 1: ACPI (HAPC method) + } + ) + Return (CFG0) + } + + /* ACPI methods for HAPC - Haptics configuration method */ + Method(HAPC, 0x0, NotSerialized) + { + Name (CFG0, + Package() + { + //------------------------ Actuator Config ----------------------------------------------------- + 0, // VibType - 0: LRA, 1: ERM + 2436, // VibVmaxCfg - 2436 mV + 0, // PeakCurrentLimit - 0: 400ma, 1: 800ma + 1, // ShortCircuitDebounce - 0: No Deb, 1: 8 clk cycles, 2: 16 clk cycles, 3: 32 clk cycles + 1, // InternalPWMFreq - 0: 253KHz, 1: 505KHz, 2: 739KHz, 3: 1076KHz + 1, // PWMCapacitance - 0: 26PF, 1: 13PF, 2: 8p7PF, 3: 6p5PF + 1, // SlewRate - 0: 6ns, 1: 16ns + 0, // LRASignalType - 0: Sinusoidal, 1: Square + //---------------------------------------------------------------------------------------------- + + //------------------------ LRA Auto Resonance Config ------------------------------------------- + 4, // LRAAutoResMode - 0: No auto resonance, 1: ZXD, 2: QWD, 3: MAX QWD, 4: ZXD with EOP + + 1, // LRAAutoResHighZDuration - 0: No HighZ, + // 1: [2 LRA period (ZXD), 1/8 LRA period (QWD)], + // 2: [3 LRA period (ZXD), 1/4 LRA period (QWD)], + // 3: [4 LRA period (ZXD), 1/2 LRA period (QWD)] + + 3, // LRAAutoResCalibFreqZXD - 0: 4 LRA periods, 1: 8 LRA periods, + // 2: 16 LRA periods, 3: 32 LRA periods + + 20, // InitialAutoResDelayQWD - Delay(in ms) used for QWD mode before enabling auto-resonance + // Typical value is 5-20ms. This is to ensure there is enough + // back emf for Auto Resonance to work fine. + // - This is a don't care in ZXD mode + //---------------------------------------------------------------------------------------------- + + //------------------------ Braking Config ------------------------------------------------------ + 1, // AutoBrakingEnable - 0: Disable, 1: Enable + 0x03, // BrakePattern - brake pattern of [0,0,0,VMAX] = [ 00 00 00 11] = 0x03 + 0, // BrakeWithMaxVoltageEnable - 0: Disable, 1: Enable - Brake pattern applied with max voltage + // that can be supplied by PMIC Haptics module + //---------------------------------------------------------------------------------------------- + + //------------------------ Acceleration Config ------------------------------------------------- + 0, // DirectModeAccelerationEnable - 0: Disable, 1: Enable + 6, // DirectModeAccelerationDuration - in milli seconds + //---------------------------------------------------------------------------------------------- + + 0, // HapticsSource - 0: VMAX, 1: BUFFER, 2: AUDIO, 3: EXT PWM + 0, // HapticsTrigger - 0: Play, 1: Line In + 1333, // PlayRateCode - LRA Freq 150Hz, PlayRateCode = (200 * 1000) / LRA_Freq + + 3, // MaxSCIntrRetries - Max SC Interrupt retries before crashing the device + + 1, // HapticsAutoResErrorRecover - Enable Auto Resonance Error recovery support + } + ) + Return (CFG0) + } +} + + +// +// HWN LED +// +Device (HWN0) +{ + Name (_HID, "QCOM02A8") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 0) + + Method (_STA) + { + if(LEqual(\_SB_.HWNL, 0)) { + Return (0) + } + else { + Return (0x0F) + } + } + + // ACPI method for LED Configs + Method(HWNL, 0x0, NotSerialized) + { + Name (CFG0, + Package() + { + 1, // PMIC number PMI8994 + 3, // Total HWN LEDs + + //RGB LEDs + 411, // Fade interval in ms (0-511 ms) + 20, // Fade Steps i.e 5, 10, 15, 20(max) + + 0x20, // LED0 Id (BLUE) + 0x02, // LED0 bank on PMI8998 (LPG_CHAN3) + + 0x40, // LED1 Id (GREEN) + 0x03, // LED1 bank on PMI8998 (LPG_CHAN4) + + 0x80, // LED2 Id (RED) + 0x04, // LED2 bank on PMI8998 (LPG_CHAN5) + + //RGB PWM Config + 1, //PWM bit Resoultion + //Valid Inputs ( 0 - 6 bit mode, 1 - 9 bit mode) + 1, //PWM_EN_HI + 1, //PWM_EN_LO + 3, //PWM_MASTER_CLK_FREQ + //Valid Inputs(0- No Clk, 1 - 1.024 KHz, 2 - 32.764 KHz, 3 - 19.2 MHz) + 1, //Clock Pre Divide (Values can be 1, 3, 5, 6) + 1, //Exponent (Values range 0 - 7) + }) + Return (CFG0) + } +} diff --git a/dipper/cust_pmic_batt.asl b/dipper/cust_pmic_batt.asl new file mode 100755 index 0000000..7b0fcf7 --- /dev/null +++ b/dipper/cust_pmic_batt.asl @@ -0,0 +1,50 @@ +// This file contains the Power Management IC (PMIC) +// customer-modifiable ACPI configurations. +// + +//****************************************** +//Configs for Battery Manager Device: PMBT +//****************************************** +//-------------------- +//PMBT: Method(BBAT) +//-------------------- +Name(BFCC, 13100) //* (mWh), Full Charge Capacity +Name(PCT1, 5) //* (% of FCC), Default Alert 1 +Name(PCT2, 9) //* (% of FCC), Default Alert 2 + +//-------------------- +//PMBT: Method(BMNR) +//-------------------- +Name(CUST, "850_MTP") //* cust file identifier + +//-------------------- +//PMBT: Method(BPLT) +//-------------------- +Name(VNOM, 3800) //* (mV), Nominal Battery Voltage +Name(VLOW, 3300) //* (mV), Low Battery Voltage +Name(EMPT, 3200) //* (mV), VCutOff +Name(DCMA, 900) //* (mA), DC Current +Name(BOCP, 4500) //* (mA), OCP current used in BCL +Name(BVLO, 3000) //* (mV), BCL low Vbatt +Name(BLOP, 20) //* (%), BCL Low batt percent notification +Name(BNOP, 22) //* (%), BCL normal batt percent notification +Name(IFGD, 50) //* (mA), FG Iterm delta; (iterm + this value) determines when FG report 100% +Name(VFGD, 50) //* (mV), CC to CV Vdelta; (Vfloat - this value) determine when FG report 100% + +//-------------------------------- +//PMBT: Method(BJTA)/Method(BAT1) +//-------------------------------- +Name(VDD1, 4350) //* (mV), Battery-1: Float Voltage (Standard Zone) +Name(FCC1, 2100) //* (mA), Battery-1: Full Charge Current (Standard Zone) +Name(HCLI, 0) //* (degree C), hard-cold temperature limit +Name(SCLI, 10) //* (degree C), soft-cold temperature limit +Name(SHLI, 45) //* (degree C), soft-hot temperature limit +Name(HHLI, 55) //* (degree C), hard-hot temperature limit +Name(FVC1, 105) //* (mV), Float voltage compensation, when battery in JEITA soft-limit +Name(CCC1, 1000) //* (mA), Charge current compensation, when battery in JEITA soft-limit + +//-------------------- +//PMBT: Method(CTMC) +//-------------------- +Name(RID2, 15000) //* (Ohm), min RID for NORMAL category: 15K +Name(RID3, 140000) //* (Ohm), max RID for NORMAL category: 140K diff --git a/dipper/cust_sensors.asl b/dipper/cust_sensors.asl new file mode 100755 index 0000000..e9220a5 --- /dev/null +++ b/dipper/cust_sensors.asl @@ -0,0 +1,31 @@ +// This file contains the sensor ACPI device definitions. +// + + +// Qualcomm Sensor Collection +Device (SEN2) +{ + Name (_DEP, Package(0x3) + { + \_SB_.IPC0, //IPC Router used by QMI + \_SB_.SCSS, //SCSS loads the sensors image + \_SB_.ARPC //Dependency on FastRPC + }) + Name (_HID, "QCOM0308") + Alias(\_SB.PSUB, _SUB) + Name (_CID, "QCOM02A2") + + // Methods used for parsing the sensors configuration (.conf) file. + // HARD corresponds to ":hardware" + // PLAT corresponds to ":platform" + Method(HARD, 0x0, NotSerialized) { + Return("845") + } + Method(PLAT, 0x0, NotSerialized) { + Return("MTP") + } + Method(_STA, 0) + { + Return (0x0) + } +} diff --git a/dipper/cust_thermal_zones.asl b/dipper/cust_thermal_zones.asl new file mode 100755 index 0000000..d7c3570 --- /dev/null +++ b/dipper/cust_thermal_zones.asl @@ -0,0 +1,569 @@ + //CPU Aggregator Device -- Required for Thermal Parking + Device(AGR0) + { + Name(_HID, "ACPI000C") + Name(_PUR, Package() {1, 0}) + Method(_OST, 0x3, NotSerialized) + { + Store(Arg2, \_SB_.PEP0.ROST) + } + } + + //--------------------------------------------------------------------- + // + // Thermal Zones for QC reference hardware + // + //TZ0 - TZ39 are thermal zones developed by QC for reference hardware + //and can be modified by the OEMs. + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // Thermal Zones(0-19) for CPU sensors + //24AD - Little CPU virtual sensor + //24AE - Big CPU virtual sensor + // This thermal zone is only used for temperature logging for little CPUs + // as you may notice that _PSV, _TC1, _TC2, _TSP params are removed. + // This is the passive cooling mechanism by dialing down frequency is now + // done actively by hardware. + //--------------------------------------------------------------------- + ThermalZone (TZ0) { + Name (_HID, "QCOM02B0") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3}) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ0 + + //Regular Thermal Zone for Little CPU TSENS to Park cores at 110C + ThermalZone (TZ1) { + Name (_HID, "QCOM02B0") + Name (_UID, 1) + Name(_TZD, Package (){\_SB.PEP0}) + Name(TPSV, 3830) + Method(_PSV) { Return (\_SB.TZ1.TPSV) } + Name(_MTL, 20) // minimum throttle limit + //Control how aggressively the thermal manager applies thermal + //throttling performance against temperature change. + Name(TTC1, 0) + Method(_TC1) { Return (\_SB.TZ1.TTC1) } + + // _TC2 Controls how aggressively the thermal manager applies thermal + // throttling performance against temperature delta between the + // current temperature and _PSV. + // once the temp goes above _PSV, we like to have aggressive + // throttling based on how far above the temp is above the threshold. + // Since that is controlled via _TC2, we like it to be high. + // please refer to the ACPI spec 6.0 to understand the significance of + // _TC2 or take a look at the explanation at the top of this file. + Name(TTC2, 1) + Method(_TC2) { Return (\_SB.TZ1.TTC2) } + + // Appropriate temperature sampling interval for the zone in tenths + // of a second. The thermal manager uses this interval to determine + // how often it should evaluate the thermal throttling performance. + // Must be greater than zero. For more information, see Thermal + // throttling algorithm on msdn page + // https://msdn.microsoft.com/en-us/library/windows/hardware/mt643928(v=vs.85).aspx + Name(TTSP, 50) + Method(_TSP) { Return (\_SB.TZ1.TTSP) } + + // This optional object evaluates to a recommended polling frequency + // (in tenths of seconds) for this thermal zone. A value of zero indicates + // that OSPM does not need to poll the temperature of this thermal zone in + // order to detect temperature changes (the hardware is capable of + // generating asynchronous notifications). + // TZP should be marked 0 for all thermal zones as our TSENS sensors + // generate interrupts to complete thermal IOCTL read call. + Name(_TZP, 0) + + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ1 + + // This thermal zone is only used for temperature logging for Big CPUs + // as you may notice that _PSV, _TC1, _TC2, _TSP params are removed. + // This is the passive cooling mechanism by dialing down frequency is now + // done actively by hardware. + ThermalZone (TZ2) { + Name (_HID, "QCOM02B1") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5, \_SB.SYSM.CLUS.CPU6, \_SB.SYSM.CLUS.CPU7}) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ2 + + //Regular Thermal Zone for BigCPU TSENS to Park cores at 110C + ThermalZone (TZ3) { + Name (_HID, "QCOM02B1") + Name (_UID, 1) + Name(_TZD, Package (){\_SB.PEP0}) + + Name(TPSV, 3830) + Method(_PSV) { Return (\_SB.TZ3.TPSV) } + Name(TTC1, 0) + Method(_TC1) { Return (\_SB.TZ3.TTC1) } + Name(TTC2, 1) + Method(_TC2) { Return (\_SB.TZ3.TTC2) } + Name(TTSP, 1) + Method(_TSP) { Return (\_SB.TZ3.TTSP) } + Name(_MTL, 20) // minimum throttle limit + Name(_TZP, 0) + + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ3 + + //--------------------------------------------------------------------- + // Thermal Zones(20-21) for GPU TSENS + // + // \_SB.GPU0 should be used for GPU thermal mitigation, and + // \_SB.GPU0.AVS0 should be used for MDSS/Video thermal mitigation. + // Currently there is no handling for Video thermal mitigation. + // When needed, Video will be added to GPU0.AVS0 interface. + //--------------------------------------------------------------------- + //Thermal zone for TSENS11 dial back GPUs at 95C + ThermalZone (TZ20) { + Name (_HID, "QCOM02AB") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.GPU0}) + Name(TPSV, 3680) + Method(_PSV) { Return (\_SB.TZ20.TPSV) } + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ20.TTC1) } + // For non-cpu devices, tc2 should be atleast 5, please refer to the + // explanation at the top of the file or msdn link for thermal guide. + Name(TTC2, 2) + Method(_TC2) { Return (\_SB.TZ20.TTC2) } + // For non-cpu devices, _tsp should be 20 or 30 + Name(TTSP, 2) + Method(_TSP) { Return (\_SB.TZ20.TTSP) } + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ20 + + //Thermal zone for TSENS12 to dial back GPUs at 95C + ThermalZone (TZ21) { + Name (_HID, "QCOM02AC") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.GPU0}) + Name(TPSV, 3680) + Method(_PSV) { Return (\_SB.TZ21.TPSV) } + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ21.TTC1) } + Name(TTC2, 2) + Method(_TC2) { Return (\_SB.TZ21.TTC2) } + Name(TTSP, 2) + Method(_TSP) { Return (\_SB.TZ21.TTSP) } + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ21 + + //--------------------------------------------------------------------- + // Thermal Zones for QDSP TSENS + //4/16/15: TODO waiting to get a new HID assigned for TSENS17 + //--------------------------------------------------------------------- + //Thermall zone for TSENS14 dial back MSM at 95C + //ThermalZone (TZ31) { + //Name (_HID, "QCOM02AE") + //Name (_UID, 0) + //Name(_TZD, Package (){ + //\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3, + //\_SB.PEP0, \_SB.GPU0.MON0, \_SB.GPU0}) + //Method(_PSV) { Return (3680) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 10) + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ31 + + //--------------------------------------------------------------------- + // Thermal Zones for Camera TSENS + //--------------------------------------------------------------------- + //Thermal zone for TSENS17 to dial back MSM at 95C + ThermalZone (TZ32) { + Name (_HID, "QCOM02C9") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.GPU0.AVS0}) + Name(TPSV, 3680) + Method(_PSV) { Return (\_SB.TZ32.TPSV) } + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ32.TTC1) } + // For non-cpu devices, tc2 should be atleast 5, please refer to the + // explanation at the top of the file or msdn link for thermal guide. + Name(TTC2, 2) + Method(_TC2) { Return (\_SB.TZ32.TTC2) } + // For non-cpu devices, _tsp should be 20 or 30 + Name(TTSP, 10) + Method(_TSP) { Return (\_SB.TZ32.TTSP) } + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ32 + + ThermalZone (TZ33) { + Name (_HID, "QCOM02CB") + Name (_UID, 1) + Name(_TZD, Package (){\_SB.AMSS}) + + Name(TPSV, 3680) + Method(_PSV) { Return (\_SB.TZ33.TPSV) } + + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ33.TTC1) } + + Name(TTC2, 2) + Method(_TC2) { Return (\_SB.TZ33.TTC2) } + + Name(TTSP, 10) + Method(_TSP) { Return (\_SB.TZ33.TTSP) } + + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } + + //--------------------------------------------------------------------- + // Thermal Zones for MDSS TENS (Display Subsystem) + // Only the MDP Blt engine and Rotator engines on the MDSS are cooled + // using this interface. Display cooling is not supported currently. + //--------------------------------------------------------------------- + //Thermal zone for TSENS18 to dial back MSM at 95C + //ThermalZone (TZ34) { + //Name (_HID, "QCOM02CA") + //Name (_UID, 0) + //Name(_TZD, Package (){\_SB.GPU0.AVS0}) + //Method(_PSV) { Return (3680) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 10) + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ34 + + //--------------------------------------------------------------------- + // Thermal Zones for ADC Channels + //--------------------------------------------------------------------- + //Thermal zone for PMIC_THERM + ThermalZone (TZ36) { + Name (_HID, "QCOM029E") + Name (_UID, 0) + Name(_TZD, Package (){ + \_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3, + \_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5, \_SB.SYSM.CLUS.CPU6, \_SB.SYSM.CLUS.CPU7, + \_SB.PMBM}) + + Name(TPSV, 3780) + Method(_PSV) { Return (\_SB.TZ36.TPSV) } + + Name(TTC1, 4) + Method(_TC1) { Return (\_SB.TZ36.TTC1) } + + Name(TTC2, 3) + Method(_TC2) { Return (\_SB.TZ36.TTC2) } + + Name(TTSP, 50) + Method(_TSP) { Return (\_SB.TZ36.TTSP) } + + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0, \_SB.ADC1}) + } + } // end of TZ36 + + //Thermal zone for PMIC_THERM + ThermalZone (TZ37) { + Name (_HID, "QCOM029E") + Name (_UID, 1) + Name(_TZD, Package (){ + \_SB.PEP0, \_SB.PMBM}) + Name(TPSV, 3980) + Method(_PSV) { Return (\_SB.TZ37.TPSV) } + Name(TCRT, 4180) + Method(_CRT) { Return (\_SB.TZ37.TCRT) } + Name(TTC1, 4) + Method(_TC1) { Return (\_SB.TZ37.TTC1) } + Name(TTC2, 3) + Method(_TC2) { Return (\_SB.TZ37.TTC2) } + Name(TTSP, 50) + Method(_TSP) { Return (\_SB.TZ37.TTSP) } + + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0, \_SB.ADC1}) + } + } // end of TZ37 + + //Example: Inverse Thermal zone for PMIC_THERM + ThermalZone (TZ38) { + Name (_HID, "QCOM029E") + Name (_UID, 2) //Update UID on addition of new thermal zone with same HID + Name(_TZD, Package (){ + \_SB.PEP0}) + Method(INVT) { Return (1) } + Method(_MTL) { Return (60) } + Name(TPSV, 2830) + Method(_PSV) { Return (\_SB.TZ38.TPSV) } + Name(TTC1, 4) + Method(_TC1) { Return (\_SB.TZ38.TTC1) } + Name(TTC2, 3) + Method(_TC2) { Return (\_SB.TZ38.TTC2) } + Name(TTSP, 10) + Method(_TSP) { Return (\_SB.TZ38.TTSP) } + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0, \_SB.ADC1}) + } + } // end of TZ38 + + //------------------------------------------------------------------------ + // Thermal Zones for Wlan + //------------------------------------------------------------------------ + //Thermal zone for iHelium, Wlan MAC&PHY on SOC + ThermalZone (TZ40) { + Name (_HID, "QCOM02AF") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.COEX}) + + Name(TPSV, 3580) + Method(_PSV) { Return (\_SB.TZ40.TPSV) } + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ40.TTC1) } + Name(TTC2, 5) // For non-cpu devices, tc2 should be atleast 5 + Method(_TC2) { Return (\_SB.TZ40.TTC2) } + Name(TTSP, 30) // For non-cpu devices, _tsp should be 20 or 30 + Method(_TSP) { Return (\_SB.TZ40.TTSP) } + + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ40 + //Thermal zone for Cherokee, Wlan radio on WCN3990 + ThermalZone (TZ41) { + Name (_HID, "QCOM0295")//virtual sensor by wlan WMI thermal interface + Name (_UID, 1) + //Name(_TZD, Package (){\_SB.COEX}) // Temperature report only + //Method(_PSV) { Return (4030) } + //Name(_TC1, 4) + //Name(_TC2, 3) + Name(_TSP, 50) + Name(_TZP, 0) + } // end of TZ41 + + //------------------------------------------------------------------------ + // Thermal Zones for DDR/POP + //------------------------------------------------------------------------ + //Thermal zone for DDR + //Thermal zone for TSENS20 to dial back Big CPU's at 95C + + ThermalZone (TZ44) { + Name (_HID, "QCOM02CC") + Name (_UID, 0) + Name(_TZD, Package (){\_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5, \_SB.SYSM.CLUS.CPU6, \_SB.SYSM.CLUS.CPU7}) + Name(TPSV, 3680) + Method(_PSV) { Return (\_SB.TZ44.TPSV) } + Name(TTC1, 0) + Method(_TC1) { Return (\_SB.TZ44.TTC1) } + Name(TTC2, 1) + Method(_TC2) { Return (\_SB.TZ44.TTC2) } + Name(TTSP, 1) + Method(_TSP) { Return (\_SB.TZ44.TTSP) } + Name(_TZP, 0) + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ44 + + //--------------------------------------------------------------------- + // + // QC Recommended thermal limits starts + // + //TZ80 - TZ98 represent the thermal zones corresponding to QC + //recommended thermal limits. These thermal zones must not be removed + //or tampered with. + //--------------------------------------------------------------------- + //Thermal zone for TSENS2 at 70C to match the LA thermal limits + //ThermalZone (TZ80) { + //Name (_HID, "QCOM2472") + //Name (_UID, 0) + //Name(_TZD, Package (){ + // \_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3, + //Method(_PSV) { Return (3430) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 10) + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ80 + + //Thermal zone near for TSENS2 to shutdown the system at 85C to match LA + //thermal limits + //ThermalZone (TZ81) { + //Name (_HID, "QCOM2472") + //Name (_UID, 1) + //Name(_TZD, Package (){ + // \_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3, + // \_SB.PEP0}) + //Method(_PSV) { Return (3530) } + //Method(_CRT) { Return (3580) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 10) + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ81 + + //Entry for BCL thermal zone + ThermalZone (TZ98) { + Name (_HID, "QCOM0294") + Name (_UID, 0) + Name(_TZD, Package (){ + \_SB.GPU0.MON0, \_SB.GPU0}) + + Name(TPSV, 3630) + Method(_PSV) { Return (\_SB.TZ98.TPSV) } + Name(TTC1, 1) + Method(_TC1) { Return (\_SB.TZ98.TTC1) } + //Method(_CRT) { Return (5630) } + Name(TTC2, 5) + Method(_TC2) { Return (\_SB.TZ98.TTC2) } + Name(TTSP, 20) + Method(_TSP) { Return (\_SB.TZ98.TTSP) } + + Name(_TZP, 0) + Method(_DEP) { + Return (Package(0x2) {\_SB.PEP0,\_SB_.BCL1}) + } + } // end of TZ98 + + //--------------------------------------------------------------------- + // Critical Thermal Zones for ALL TSENS + //This sensor aggregates all the on chip TSENS into a single sensor + //for ACPI thermal manager. By having a critical thermal zone on this + //"virtual sensor" we don't have to add a critical thermal zone on every + //sensor and hence reduce the number of thermal zones. + //--------------------------------------------------------------------- + //Critical Thermal zone on MSM virtual sensor to shutdown entire system + //at 110C. + ThermalZone (TZ99) { + Name (_HID, "QCOM02B2") + Name (_UID, 100) + + Name(TCRT, 3830) + Method(_CRT) { Return (\_SB.TZ99.TCRT) } + Name(TTC1, 4) + Method(_TC1) { Return (\_SB.TZ99.TTC1) } + Name(TTC2, 3) + Method(_TC2) { Return (\_SB.TZ99.TTC2) } + Name(TTSP, 10) + Method(_TSP) { Return (\_SB.TZ99.TTSP) } + Name(_TZP, 0) + + Method(_DEP) { + Return (Package() {\_SB.PEP0}) + } + } // end of TZ99 + + //--------------------------------------------------------------------- + // QC Recommended thermal limits ends + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // + // Sample Thermal Zones for OEMs TZ40 - TZ79 + // + //Sample TSENS thermal zone that can be added on any TSENS + //--------------------------------------------------------------------- + //ThermalZone (TZ40) { + //Name (_HID, "QCOM2470") + //Name (_UID, 0) + //Name(_TZD, Package (){ + //\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3,\_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5, + //\_SB.PEP0, }) + //Method(_PSV) { Return (3730) } + //Method(_CRT) { Return (3780) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 10) //Sampling rate of 1sec + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ40 + + //ThermalZone (TZ41) { + //Name (_HID, "QCOM2470") + //Name (_UID, 0) + //Name(_TZD, Package (){ + //\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3,\_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5, + //\_SB.PEP0, }) + //Method(_PSV) { Return (3730) } + //Method(_CRT) { Return (3780) } + //Name(_TC1, 1) + //Name(_TC2, 2) + //Name(_TSP, 50) //Sampling rate of 5sec + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + //} // end of TZ41 + + + //--------------------------------------------------------------------------// + // + // Sample VADC Thermal zones for OEMs + // + //Following are sample thermal zones that use the off chip ADC thermistors + //they are all currently using CPUs as a cooling device for a lack of better + //option. The OEMs should change this. + //--------------------------------------------------------------------------// + + //Thermal zone for SYS_THERM2 + // ThermalZone (TZ51) { + // Name (_HID, "QCOM248D") + // Name (_UID, 0) + // Name(_TZD, Package (){ + //\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3,\_SB.SYSM.CLUS.CPU4, \_SB.SYSM.CLUS.CPU5,}) + // Method(_PSV) { Return (3830) } + //Name(_TC1, 4) + //Name(_TC2, 3) + // Name(_TSP, 50) + //Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + // } // end of TZ51 + + //Thermal zone for PA_THERM1 + // ThermalZone (TZ52) { + // Name (_HID, "QCOM248E") + // Name (_UID, 0) + // Name(_TZD, Package (){\_SB.SYSM.CLUS.CPU0, \_SB.SYSM.CLUS.CPU1, \_SB.SYSM.CLUS.CPU2, \_SB.SYSM.CLUS.CPU3}) + // Method(_PSV) { Return (3430) } + // Name(_TC1, 4) + // Name(_TC2, 3) + // Name(_TSP, 50) + // Name(_TZP, 0) + //Method(_DEP) { + // Return (Package() {\_SB.PEP0}) + //} + // } // end of TZ52 diff --git a/dipper/cust_touch.asl b/dipper/cust_touch.asl new file mode 100755 index 0000000..831772d --- /dev/null +++ b/dipper/cust_touch.asl @@ -0,0 +1,74 @@ +// +// This file contains the touch ACPI device definitions. +// + +Device (TSC1) +{ + Name (_HID, "STFT0521") // _HID: Hardware ID + Alias (\_SB.PSUB, _SUB) + Name (_DEP, Package (0x03) // _DEP: Dependencies + { + \_SB.GIO0, + \_SB.IC15, + \_SB.PEP0 + }) + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Name (RBUF, ResourceTemplate () + { + I2cSerialBusV2 (0x0049, ControllerInitiated, 0x00061A80, + AddressingMode7Bit, "\\_SB.IC15", + 0x00, ResourceConsumer, , Exclusive, + ) + GpioInt (Level, ActiveLow, Exclusive, PullUp, 0x0000, + "\\_SB.GIO0", 0x00, ResourceConsumer, , + ) + { // Pin list + 0x001F + } + }) + Return (RBUF) /* \_SB_.TSC1._CRS.RBUF */ + } + Name (PGID, Buffer (0x0A) + { + "\\_SB.TSC1" + }) + Name (DBUF, Buffer (DBFL){}) + CreateByteField (DBUF, Zero, STAT) + CreateByteField (DBUF, 0x02, DVAL) + CreateField (DBUF, 0x18, 0xA0, DEID) + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (0x03) + } + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (0x03) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (0x03) + } + + Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 + { + DEID = Buffer (ESNL){} + DVAL = Zero + DEID = PGID /* \_SB_.TSC1.PGID */ + If (\_SB.ABD.AVBL) + { + \_SB.PEP0.FLD0 = DBUF /* \_SB_.TSC1.DBUF */ + } + } + Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 + { + DEID = Buffer (ESNL){} + DVAL = 0x03 + DEID = PGID /* \_SB_.TSC1.PGID */ + If (\_SB.ABD.AVBL) + { + \_SB.PEP0.FLD0 = DBUF /* \_SB_.TSC1.DBUF */ + } + } +} diff --git a/dipper/cust_touch_resources.asl b/dipper/cust_touch_resources.asl new file mode 100755 index 0000000..656c8fb --- /dev/null +++ b/dipper/cust_touch_resources.asl @@ -0,0 +1,204 @@ +//=========================================================================== +// +// DESCRIPTION +// This file contains the resources needed by touch driver. +// +//=========================================================================== +Scope(\_SB_.PEP0) +{ + + Method(LPMX) + { + Return(LPXC) + } + + Name(LPXC, + Package(){ + Package () + { + "DEVICE", + "\\_SB.TSC1", + Package () + { + "DSTATE", + Zero, + Package () + { + "PMICVREGVOTE", + Package () + { + "PPP_RESOURCE_ID_LDO6_A", + One, + 0x001C5200, + One, + 0x07, + Zero + } + }, + + Package () + { + "PMICVREGVOTE", + Package () + { + "PPP_RESOURCE_ID_LDO28_A", + One, + 0x002DE600, + One, + 0x07, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 23, + One, + Zero, + One, + 0x03, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 125, + Zero, + Zero, + Zero, + 0x03, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 32, + Zero, + Zero, + One, + Zero, + Zero + } + }, + + Package () + { + "DELAY", + Package () + { + 0x02 + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 32, + One, + Zero, + One, + Zero, + Zero + } + }, + + Package () + { + "DELAY", + Package () + { + 0xC8 + } + } + }, + + Package () + { + "DSTATE", + 0x03, + Package () + { + "PMICVREGVOTE", + Package () + { + "PPP_RESOURCE_ID_LDO6_A", + One, + Zero, + Zero, + Zero, + Zero + } + }, + + Package () + { + "PMICVREGVOTE", + Package () + { + "PPP_RESOURCE_ID_LDO28_A", + One, + Zero, + Zero, + Zero, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 23, + Zero, + Zero, + One, + One, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 32, + Zero, + Zero, + Zero, + One, + Zero + } + }, + + Package () + { + "TLMMGPIO", + Package () + { + 125, + Zero, + Zero, + Zero, + One, + Zero + } + } + } + } + }) +} diff --git a/dipper/cust_win_mproc.asl b/dipper/cust_win_mproc.asl new file mode 100755 index 0000000..0e1e334 --- /dev/null +++ b/dipper/cust_win_mproc.asl @@ -0,0 +1,33 @@ +// +// MPROC Drivers (PIL Driver and Subsystem Drivers) +// + +Scope(\_SB.ADSP) +{ + +} + +Scope(\_SB.AMSS) +{ + +} + +Scope(\_SB.SCSS) +{ + +} + +Scope(\_SB.PILC) +{ + +} + +Scope(\_SB.CDI) +{ + +} + +Scope(\_SB.RPEN) +{ + +} diff --git a/dipper/display.asl b/dipper/display.asl new file mode 100755 index 0000000..e7a383d --- /dev/null +++ b/dipper/display.asl @@ -0,0 +1,609 @@ +// +// This file contains the ACPI Extensions for Display Adapters +// +/// +// _ROM Method - Used to retrieve proprietary ROM data for primary panel +// +Method (_ROM, 3, NotSerialized) { + + // Include primary panel specific ROM data + Include("panelcfg.asl") + + //====================================================================================== + // Based on the panel Id(Arg2), store the buffer object into Local2 + // + // IMPORTANT: + // PCFG is buffer name for all default panel configurations + // All other dynamically detected panel configurations must not use this name + //====================================================================================== + + Local2 = PCFG + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(Local2))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(Local2))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(Local2), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBuf + CreateField(Local2, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + Return(RBUF) +} + +// +// IGC method - panel inverse gamma correction table. +// +// The buffer contains inverse gamma correction data for 3 color components, each with 256 16-bit integers. +// The buffer size is 3*256*2 = 1536 bytes. +// each table entry is represend by a 16-bit integer and data format in the buffer is described below: +// +// +--- 16 bits ---+--- 16 bits ---+--- 16 bits ---+---------+--- 16 bits ---+ 0 +// | Red[0] | Red[1] | Red[2] | ... | Red[255] | +// +---------------+---------------+---------------+---------+---------------+ 512 +// | Green[0] | Green[1] | Green[2] | ... | Green[255] | +// +---------------+---------------+---------------+---------+---------------+ 1024 +// | Blue[0] | Blue[1] | Blue[2] | ... | Blue[255] | +// +---------------+---------------+---------------+---------+---------------+ 1536 +// +Method (PIGC, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the IGC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// PCC method - panel color correction matrix +// +// Buffer format for HW which support 3X8 color correction matrix. +// +// The buffer contains color correction coefficients for 3 color components, each with 11 64-bit integers. +// The buffer size is 3*11*8 = 264 bytes. +// each coefficient in the matrix is represented by a long long integer (64-bit), and data format in the +// buffer is described below: +// +// +--64 bits--+--64 bits--+--------+--64 bits--+--64 bits--+--64 bits--+--64 bits--+ 0 +// | Red[0] | Red[1] | ... | Red[7] | 0 | 0 | 0 | +// +-----------+-----------+--------+-----------+-----------+-----------+-----------+ 88 +// | Green[0] | Green[1] | ... | Green[7] | 0 | 0 | 0 | +// +-----------+-----------+--------+-----------+-----------+-----------+-----------+ 176 +// | Blue[0] | Blue[1] | ... | Blue[7] | 0 | 0 | 0 | +// +-----------+-----------+--------+-----------+-----------+-----------+-----------+ 264 +// +// Buffer format for HW which support 3X11 color correction matrix. +// +// The buffer contains color correction coefficients for 3 color components, each with 11 64-bit integers. +// The buffer size is 3*11*8 = 264 bytes. +// each coefficient in the matrix is represented by a long long integer (64-bit), and data format in the +// buffer is described below: +// +// +--- 64 bits ---+--- 64 bits ---+--- 64 bits ---+-----------+--- 64 bits ---+ 0 +// | Red[0] | Red[1] | Red[2] | ... | Red[10] | +// +---------------+---------------+---------------+-----------+---------------+ 88 +// | Green[0] | Green[1] | Green[2] | ... | Green[10] | +// +---------------+---------------+---------------+-----------+---------------+ 176 +// | Blue[0] | Blue[1] | Blue[2] | ... | Blue[10] | +// +---------------+---------------+---------------+-----------+---------------+ 264 +// +Method (PPCC, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the PCC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// PGC method - panel segment gamma correction table +// +// there're thee components and each with 16 gamma correction segments. Each segment is defined +// as below with parameters, and each parameter is represented by a 32-bit integer (DWORD): +// +// +--4 bytes--+--4 bytes--+--4 bytes--+--4 bytes--+ +// | enable | start | gain | offset | one gamma correction segment(16 bytes) +// +-----------+-----------+-----------+-----------+ +// +// +--- 16 bytes ---+--- 16 bytes ---+--- 16 bytes ---+-----------+--- 16 bytes ---+ 0 +// | red_seg[0] | red_seg[1] | red_seg[2] | ... | red_seg[15] | +// +----------------+----------------+----------------+-----------+----------------+ 256 +// | green_seg[0] | green_seg[1] | green_seg[2] | ... | green_seg[15] | +// +----------------+----------------+----------------+-----------+----------------+ 512 +// | blue_seg[0] | blue_seg[1] | blue_seg[2] | ... | blue_seg[15] | +// +----------------+----------------+----------------+-----------+----------------+ 768 +// +Method (PGCT, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GCT buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// PLGC method - panel linear gamma correction table +// +// There are three color components, each color component has 1024 entries. each entry is 2 bytes. +// +// +--- 2 bytes ---+--- 2 bytes ---+--- 2 bytes ---+-----------+--- 2 bytes ---+ 0 +// | red[0] | red[1] | red[2] | ... | red[1023] | +// +---------------+---------------+---------------+-----------+---------------+ 2048 +// | green[0] | green[1] | green[2] | ... | green[1023] | +// +---------------+---------------+---------------+-----------+---------------+ 4096 +// | blue[0] | blue[1] | blue[2] | ... | blue[1023] | +// +---------------+---------------+---------------+-----------+---------------+ 6144 +// +Method (PLGC, 3, NotSerialized) { + // Arg0 - Panel ID + // Arg1 - Data offset + // Arg2 - Data size + + // Based on the panel Id read the LGC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg1, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg1, Local1) + } + + // Arg2 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg2, 0x1000)) + { + Store(0x1000, Local2) + } + else + { + Store(Arg2, Local2) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local1, Local2), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local1, Local2); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local1), Multiply(0x8, Local2), RBUF) + + // Return the packet data + Return(RBUF) +} + + +// +// HSIC method - HSIC settings +// +// Hue, Saturation, Intensity, Contrast levels, the first parameter enable/disable HSIC control, +// followed by HSIC level values, each level ranges from -100 to 100, represented by a 32-bit integer: +// +// +--4 bytes--+--4 bytes--+--4 bytes--+--4 bytes--+--4 bytes--++ +// | Enable | Hue | Saturation| Intensity | Contrast | +// +-----------+-----------+-----------+-----------+-----------++ +// +// +Method (HSIC, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the HSIC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + + +// +// PGMT - panel gamut mapping table for HW which support 9x9x9 gamut mapping: +// +// This method returns the gamut mapping table for a panel. +// +// There are three components. Each component has 8 tables and a total of 729 entries. +// Each value is represented by a 16-bit integer: +// +// Table ID Entries +// 0 125 +// 1 100 +// 2 80 +// 3 100 +// 4 100 +// 5 80 +// 6 64 +// 7 80 +// +// +----- 16 bits -----+----- 16 bits ------+----- 16 bits -----+-----------+----- 16 bits -------+ +// | red_comp[0][0] | red_comp[0][1] | red_comp[0][2] | ... | red_comp[7][79] | +// +-------------------+--------------------+-------------------+---------------------------------+ +// | green_comp[0][0] | green_comp[0][1] | green_comp[0][2] | ... | green_comp[7][79] | +// +-------------------+--------------------+-------------------+---------------------------------+ +// | blue_comp[0][0] | blue_comp[0][1] | blue_comp[0][2] | ... | blue_comp[7][79] | +// +-------------------+--------------------+-------------------+---------------------------------+ +// +Method (PGMT, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GMT buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Arg1 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + + // Return the packet data + Return(RBUF) +} + + + +// +// PWGM - panel gamut mapping data for HW which support 17x17x17 gamut mapping +// +// This data's header which has two fields: +// NumSamplesPerColorComponent: Number samples per color component in gamut mapping table. +// NumSegmentsPerColor : Number of segments per color component. +// NumSegmentsPerColor must equal 0 or NumSamplesPerColorComponent -1. +// +// This data also can have two tables, one is 3d table, one is segment table. +// Segment table is only required if NumSegmentsPerColor != 0. +// +// 3d table: There are three components. If number samples per component is N = NumSamplesPerColorComponent, +// total entries are NxNxN per component. Each value is represented by a 16-bit integer: +// Segment table: There are three components, table entries are uNumSegmentsPerColor per component, +// each entry is 32 bit value. +// +// Table data header: +// +--------- 32 bits ----------+------- 32 bits -----+ +// | NumSamplesPerColorComponent| NumSegmentsPerColor | +// +----------------------------+---------------------+ 8 bytes +// +// 3d table: +// +---- 16 bits ----+---- 16 bits ----+---- 16 bits ----+-------------+------- 16 bits -----------+ 8 +// | red_comp[0] | red_comp[1] | red_comp[2] | ... | red_comp[N x N x N - 1 ] | +// +-----------------+-----------------+-----------------+-------------+---------------------------+ NxNxNx2 + 8 +// | green_comp[0] | green_comp[1] | green_comp[2] | ... | green_comp[N x N x N - 1] | +// +-----------------+-----------------+-----------------+-------------+---------------------------+ 2xNxNxNx2 + 8 +// | blue_comp[0] | blue_comp[1] | blue_comp[2] | ... | blue_comp[N x N x N - 1] | +// +-----------------+-----------------+-----------------+-------------+---------------------------+ 3xNxNxNx2 + 8 +// +// Segment table: ( if NumSegmentsPerColor = 0, there is no segment table). +// +----- 32 bits ------+----- 32 bits ------+------ 32 bits -----+-------------+-------- 32 bits -------+ 3xNxNxNx2 + 8 +// | sg_red_comp[[0] | sg_red_comp[1] | sg_red_comp[2] | ... | sg_red_comp[N-2] | +// +--------------------+--------------------+--------------------+-------------+------------------------+ (N-1)x4 + 3xNxNxNx2 + 8 +// | sg_green_comp[0] | sg_ green_comp[1] | sg_ green_comp[2] | ... | sg_green_comp[N-2] | +// +--------------------+--------------------+--------------------+-------------+------------------------+ 2x(N-1)x4 + 3xNxNxNx2 + 8 +// | sg_ blue_comp[0] | sg_ blue_comp[1] | sg_ blue_comp[2] | ... | sg_ blue_comp[N-2] | +// +--------------------+--------------------+------------------- +-------------+------------------------+ 3x(N-1)x4 + 3xNxNxNx2 + 8 +// +// Maximum size = 3 x(17 - 1) x 4 + 3 x 17 x 17 x 17 x 2 + 8 = 29678 bytes. +// +Method (PWGM, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the WGM buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Arg1 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + + // Return the packet data + Return(RBUF) +} + + + +// +// PGRT - panel gamma response table +// +// This method returns the Gamma response table for a panel. +// The table is given in 2 arrays, one representing the x axis or grayscale and other +// representing the y axis or luminance. +// +// The table is given in a 256 entries array, where the first entry value represents +// the luminance (Y) achieved when displaying black on the screen (shade value is 0 +// for all R, G and B) and the last entry represents the luminance (Y) achieved when +// displaying white on the screen (shade value is 255 for all R, G and B). +// +// The array must be 256 entries. +// +// The range of each entry must be from 0 to 0xffff +// +// Values are least significant byte first. E.g. {0x01, 0x00} represents 0x1 and +// {0x02, 0x01} represents 0x0102 +// +// +--- 2 bytes ---+--- 2 bytes ---+--- 2 bytes ---+-----------+--- 2 bytes ---+ +// | Y[0] | Y[1] | Y[2] | ... | Y[255] | +// +---------------+---------------+---------------+-----------+---------------+ +Method (PGRT, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GRT buffer and return the data + + // If nothing specified return NULL + + Name (RBUF, Buffer() {0x0}) + + // Return the packet data + Return(RBUF) +} + + +// +// PBRT - panel backlight response table +// +// This method returns the Backlight response table for a panel. +// The table is given in a 256 entries array, where the first entry value represents +// the backlight level (BL) to achieve 0 luminance and the last entry represents +// the highest backlight level to achieve the maximum desired luminance. +// In other words, this array serves as a map from luminance to backlight levels, +// where the index is the desired luminance level and the value (or output) is +// the backlight level to be sent to the hardware (backlight controller). +// +// The array must be 256 entries. +// +// The range of each entry must be from 0 to 0xffff +// +// Values are least significant byte first. E.g. {0x01, 0x00} represents 0x1 and +// {0x02, 0x01} represents 0x0102 +// +// +--- 2 bytes ---+--- 2 bytes ---+--- 2 bytes ---+-----------+--- 2 bytes ---+ +// | BL[0] | BL[1] | BL[2] | ... | BL[255] | +// +---------------+---------------+---------------+-----------+---------------+ +Method (PBRT, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the BRT buffer and return the data + + // If nothing specified return NULL + + Name (RBUF, Buffer(){0x0}) + + // Return the packet data + Return(RBUF) +} + +// +// PBRC - panel backlight response curve for CABL +// +// This method returns the Backlight response curve for a panel used specifically for CABL algorithm. +// The curve is represented in a maximum 1024 x 2 elements array, where the first entry in each row +// will be backlight level and next entry will be correponding luminance value. In other words, +// this array serves as a map from backlight to luminance levels. + +// First row will be number of control points in the backlight curve. Maximum number of points allowed is 1024. +// Points on the backlight response curve has to be specified in increasing order i.e last control point will +// correspond for maximum backlight value and first control point will correspond for minimum backlight value. + +// The buffer must be of 4*(2*x + 1) bytes. where x < 1024 is number of control points. +// +// The range of each backlight or luminance value must be from 0 to 0xffff. ( 2 bytes each ) +// +// Values are least significant byte first. E.g. {0x01, 0x00} represents 0x1 and +// {0x02, 0x01} represents 0x0102. + +// Below is an example of Backlight Response curve consisting of 5 control points. + +// +----- 2 bytes -----------+----- 2 bytes ------+ +// | table_length | | +// +-------------------------+--------------------+ +// | BacklightLevel[0] | Luminance[0] | +// +-------------------------+--------------------+ +// | BacklightLevel[1] | Luminance[1] | +// +-------------------------+--------------------+ +// | BacklightLevel[2] | Luminance[2] | +// +-------------------------+--------------------+ +// | BacklightLevel[3] | Luminance[3] | +// +-------------------------+--------------------+ +// | BacklightLevel[4] | Luminance[4] | +// +-------------------------+--------------------+ +Method (PBRC, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the BRC buffer and return the data + + // If nothing specified return NULL + + Name (RBUF, Buffer() {0x00,0x00}) + + // Return the packet data + Return(RBUF) +} + +// +// DITH method - Dithering settings +// +// Dithering matrix could have following two formats: +// +// Format 1: +// +--1 byte--------+--1 byte--------+--1 byte--------+--1 byte--------+ +// | Element[0,0] | Element[0,1] | Element[0,2] | Element[0,3] | +// | Element[1,0] | Element[1,1] | Element[1,2] | Element[1,3] | +// | Element[2,0] | Element[2,1] | Element[2,2] | Element[2,3] | +// | Element[3,0] | Element[3,1] | Element[3,2] | Element[3,3] | +// | Bit Depth C2 | Bit Depth C1 | Bit Depth C0 | Reserved(0x0) | +// +----------------+----------------+----------------+----------------+ +// | Dithering mode (4 bytes) (0: not supported, 1:Spatial, 2:Temporal)| +// +----------------+----------------+----------------+----------------+ +// +// There is dithering mode in Format 1. +// +// Format 2: +// +// +--1 byte--------+--1 byte--------+--1 byte--------+--1 byte--------++ +// | Element[0,0] | Element[0,1] | Element[0,2] | Element[0,3] | +// | Element[1,0] | Element[1,1] | Element[1,2] | Element[1,3] | +// | Element[2,0] | Element[2,1] | Element[2,2] | Element[2,3] | +// | Element[3,0] | Element[3,1] | Element[3,2] | Element[3,3] | +// | Bit Depth C2 | Bit Depth C1 | Bit Depth C0 | Reserved(0x0) | +// +----------------+----------------+----------------+----------------+ +// +// There is no dithering mode in Format 2. Default dither mode: spatial. +// +Method (DITH, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the DITH buffer and return the data + + // If nothing specified return NULL + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} +// Include primary panel specific configuration for backlight control packets +// +Include("backlightcfg.asl") diff --git a/dipper/display2.asl b/dipper/display2.asl new file mode 100755 index 0000000..b8724ef --- /dev/null +++ b/dipper/display2.asl @@ -0,0 +1,389 @@ +// +// This file contains the ACPI Extensions for Secondary Display Adapters +// + +// +// ROM2 Method - Used to retrieve proprietary ROM data for secondary panel +// +Method (ROM2, 3, NotSerialized) { + + // Include secondary panel specific ROM data + Include("panelcfg2.asl") + + //====================================================================================== + // Based on the panel Id(Arg2), store the buffer object into Local2 + // + // IMPORTANT: + // PCFG is buffer name for all default panel configurations + // All other dynamically detected panel configurations must not use this name + //====================================================================================== + Switch ( ToInteger (Arg2) ) + { + // Default case + Default { + Store (PCFG, Local2) + } + } + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(Local2))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(Local2))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(Local2), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBuf + CreateField(Local2, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + Return(RBUF) +} + +// +// IGC2 method - panel inverse gamma correction table. +// +// Secondary panel IGC2 configuration, format is same as IGCT of primary +// panel in display.asl +// +Method (IGC2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the IGC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// PCC2 method - panel color correction matrix +// Secondary panel PCC2 configuration, format is same as PPCC of primary +// panel in display.asl +// +Method (PCC2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the PCC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// GCT2 method - panel segment gamma correction table +// Secondary panel GCT2 configuration, format is same as PGCT of primary +// panel in display.asl +// +Method (GCT2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GCT buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + +// +// LGC2 method - panel linear gamma correction table +// Secondary panel LGC2 configuration, format is same as PLGC of primary +// panel in display.asl +// +Method (LGC2, 3, NotSerialized) { + + // Arg0 - Panel ID + // Arg1 - Data offset + // Arg2 - Data size + + // Based on the panel Id read the LGC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg1, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg1, Local1) + } + + // Arg2 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg2, 0x1000)) + { + Store(0x1000, Local2) + } + else + { + Store(Arg2, Local2) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local1, Local2), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local1, Local2); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local1), Multiply(0x8, Local2), RBUF) + + // Return the packet data + Return(RBUF) +} + + +// +// HSI2 method - HSIC settings +// Secondary panel HSI2 configuration, format is same as HSIC of primary +// panel in display.asl +// +Method (HSI2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the HSIC buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} + + + +// +// GMT2 - panel gamut mapping table for HW which support 9x9x9 gamut mapping: +// Secondary panel GMT2 configuration, format is same as PGMT of primary +// panel in display.asl +// +Method (GMT2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GMT buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Arg1 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + + // Return the packet data + Return(RBUF) +} + + + +// +// WGM2 - panel gamut mapping data for HW which support 17x17x17 gamut mapping +// Secondary panel WGM2 configuration, format is same as PWGM of primary +// panel in display.asl +// +Method (WGM2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the WGM buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (TBUF, Buffer() {0x0} ) + + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(TBUF))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Arg1 - Data size + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(TBUF))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(TBUF), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBUF + CreateField(TBUF, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + + // Return the packet data + Return(RBUF) +} + + + +// +// GRT2 - panel gamma response table +// Secondary panel GRT2 configuration, format is same as PGRT of primary +// panel in display.asl +// +Method (GRT2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the GRT buffer and return the data + + // If nothing specified return NULL + + Name (RBUF, Buffer() {0x0}) + + // Return the packet data + Return(RBUF) +} + + +// +// BRT2 - panel backlight response table +// Secondary panel BRT2 configuration, format is same as PBRT of primary +// panel in display.asl +// +Method (BRT2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the BRT buffer and return the data + + // If nothing specified return NULL + + Name (RBUF, Buffer() {0x0}) + + // Return the packet data + Return(RBUF) +} + +// +// DIT2 method - Dithering settings +// Secondary panel DIT2 configuration, format is same as DITH of primary +// panel in display.asl +// +Method (DIT2, 2, NotSerialized) { + // Arg0 - Panel ID + + // Arg1 - Data size + + // Based on the panel Id read the DITH buffer and return the data + + // If nothing specified return NULL + + // Create response buffer + Name (RBUF, Buffer() {0x0} ) + + // Return the packet data + Return(RBUF) +} +// Include secondary panel specific configuration for backlight control packets +// +Include("backlightcfg2.asl") diff --git a/dipper/displayext.asl b/dipper/displayext.asl new file mode 100755 index 0000000..c1c9f34 --- /dev/null +++ b/dipper/displayext.asl @@ -0,0 +1,49 @@ +// +// This file contains the ACPI Extensions for External Display Adapters +// + +// +// ROE1 Method - Used to retrieve proprietary ROM data for External display +// +Method (ROE1, 3, NotSerialized) { + + // Include external panel specific ROM data + Include("panelcfgext.asl") + + // Store the panel configuration + Store (PCFG, Local2) + + // Ensure offset does not exceed the buffer size + // otherwise return a Null terminated buffer + If (LGreaterEqual(Arg0, Sizeof(Local2))) + { + Return( Buffer(){0x0} ) + } + Else + { + // Make a local copy of the offset + Store(Arg0, Local0) + } + + // Ensure the size requested is less than 4k + If (LGreater(Arg1, 0x1000)) + { + Store(0x1000, Local1) + } + else + { + Store(Arg1, Local1) + } + + // Finaly ensure the total size does not exceed the size of the buffer + if (LGreater(Add(Local0, Local1), Sizeof(Local2))) + { + // Calculate the maximum size we can return + Subtract(Sizeof(Local2), Local0, Local1); + } + + // Multiply offset and size by 8 to convert to bytes and create the RBuf + CreateField(Local2, Multiply(0x8, Local0), Multiply(0x8, Local1), RBUF) + + Return(RBUF) +} diff --git a/dipper/dsdt_common.asl b/dipper/dsdt_common.asl new file mode 100755 index 0000000..7cb6338 --- /dev/null +++ b/dipper/dsdt_common.asl @@ -0,0 +1,148 @@ +// To enable SOC revision based run time differentiation, uncomment following line +// and uncomment SSID method in ABD device. The original string is artificailly set as +// 16 characters, so there is enough room to hold SOC revision string. +// To adjust the number, the MAX_SOCID_LEN macro as defined in ABD device.h should be +// adjusted at the same time. + +Name (SOID, 0x0141) // Holds the Chip Id +Name (SIDS, "SDM845") // Holds the Chip ID translated to a string +Name (SIDV, 0x00020001) // Holds the Chip Version as (major<<16)|(minor&0xffff) +Name (SVMJ, 0x02) // Holds the major Chip Version +Name (SVMI, One) // Holds the minor Chip Version +Name (SDFE, 0x4F) // Holds the Chip Family enum +Name (SFES, "899800000000000") // Holds the Chip Family translated to a string +Name (SIDM, 0x0000000FFFFF00FF) // Holds the Modem Support bit field +Name (SOSN, 0x000003F48D126594) +Name (RMTB, 0x85D00000) +Name (RMTX, 0x00200000) +Name (RFMB, Zero) +Name (RFMS, Zero) +Name (RFAB, Zero) +Name (RFAS, Zero) +Name (TPMA, 0x11111111) // Holds whether TPM is seperate app or combined with Winsecapp +Name (TDTV, 0x6654504D) // Holds TPM type, by default it set to fTPM type +Name (TCMA, 0x8AB00000) // Holds TrEE Carveout Memory Address +Name (TCML, 0x01400000) // Holds TrEE Carveout Memory Length +// Name (SOSI, 0xdeadbeefffffffff) // Holds the base address of the SoCInfo shared memory region used by ChipInfoLib + +//Audio Drivers +Include("audio.asl") + + // + // Storage - UFS/SD + // + Include("../Common/ufs.asl") + // Include("../Common/sdc.asl") // No SD support on polaris + + // + // ASL Bridge Device + // + Include("../Common/abd.asl") + + Name (ESNL, 20) // Exsoc name limit 20 characters + Name (DBFL, 23) // buffer Length, should be ESNL+3 + +// +// PMIC driver +// +Include("../Common/pmic_core.asl") + +// +// PMICTCC driver +// +Include("pmic_batt.asl") + + Include("pep.asl") + Include("../Common/bam.asl") + Include("buses.asl") + // MPROC Drivers (PIL Driver and Subsystem Drivers) + Include("../Common/win_mproc.asl") + Include("../Common/syscache.asl") + Include("../Common/HoyaSmmu.asl") + Include("graphics.asl") + + Include("../Common/SCM.asl"); + + // + // SPMI driver + // + Include("../Common/spmi.asl") + + // + // TLMM controller. + // + Include("qcgpio.asl") + + Include("../Common/pcie.asl") + + Include("../Common/cbsp_mproc.asl") + + Include("../Common/adsprpc.asl") + + // + // RemoteFS + // + Include("../Common/rfs.asl") + + + // Test Drivers + Include("testdev.asl") + // + + // + // Qualcomm IPA + Include("../Common/ipa.asl") + + Include("../Common/gsi.asl") + + // + //Qualcomm DIAG Service + // + Device (QDIG) + { + Name (_DEP, Package(0x1) + { + \_SB_.GLNK + }) + Name (_HID, "QCOM0225") + Alias(\_SB.PSUB, _SUB) + } + Include("../Common/qcdb.asl") + Include("../Common/pep_lpi.asl") + + // + // QcRNG Driver (qcsecuremsm) + // + Device (QRNG) + { + Name (_DEP, Package(0x1) { + \_SB_.PEP0, + }) + Name (_HID, "QCOM02FE") + Name (_UID, 0) + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // PRNG_CFG_EE2_EE2_PRNG_SUB register address space + Memory32Fixed (ReadWrite, 0x00793000, 0x00001000) + }) + Return (RBUF) + } + } + + // + // QCOM GPS + // + Include("../Common/gps.asl") + + // QDSS driver + Include("../Common/Qdss.asl") + +// QUPV3 GPI device node and resources +// +Include("../Common/qgpi.asl") + +Include("nfc.asl") + +Include("../Common/sar_manager.asl") diff --git a/dipper/graphics.asl b/dipper/graphics.asl new file mode 100755 index 0000000..d9a921a --- /dev/null +++ b/dipper/graphics.asl @@ -0,0 +1,3424 @@ +//-------------------------------------------------------------------------------------------------- +// GfxXMLToACPI Version 2.3. +//-------------------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------------------- +// This file contains all graphics ACPI Device Configuration Information and Methods +// +// !!WARNING: This is an auto-generated file and should NOT be edited by hand!! +// This file contains several interdependent ACPI methods that are all generated from +// a single XML source. Items in this file should not be updated manually, as they +// will be overwritten by the auto-generated output. Instead, modifications should be +// made to the XML source, such that they are applied across all relevant tables. +//-------------------------------------------------------------------------------------------------- + +Device (GPU0) +{ + Name (_HID, "QCOM027E") + Alias(\_SB.PSUB, _SUB) + Name (_CID, "ACPI\QCOM027E") + Name (_UID, 0) + Name (_HRV, 0x07C) + + // Expose the internal monitor device to allow it to be used in a thermal zone + // for thermal mitigation. + // + Device (MON0) + { + Method(_ADR) + { + // 0 is always the address assigned for the internal monitor. + // + Return(0) + } + } + + Name (_DEP, Package() + { + \_SB_.MMU0, + \_SB_.MMU1, + \_SB_.IMM0, + \_SB_.IMM1, + \_SB_.PEP0, + \_SB_.PMIC, + \_SB_.PILC, + \_SB_.RPEN, + \_SB_.TREE, + \_SB_.SCM0, + }) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // MDP register/memory space (IPCAT->SoC->Memory Maps->Config NOC->MMSS->MMSS_MDSS). Address range includes RSCC + // + Memory32Fixed(ReadWrite, 0x0AE00000, 0x00140000) + + // DP PHY register/memory space (IPCAT->SoC->Memory Maps->Config NOC->PERIPH_SS_AHB2PHY_NORTH) + // + Memory32Fixed(ReadWrite, 0x088E0000, 0x000F4000) + + // MDP Interrupt, vsync (IPCAT->SoC->Interrupts->SDM850->mdp_irq) + // + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {115} + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Memory32Fixed(ReadWrite, 0x05000000, 0x0003F010) + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Memory32Fixed(ReadWrite, 0x05060000, 0x0003F000) + + // GPU Interrupt (IPCAT->SoC->Interrupts->SDM850->gc_sys_irq[0]) (Source Subsystem = GPU Subsystem, Subsystem Port = gc_sys_irq[0]) + // + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {332} + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Memory32Fixed(ReadWrite, 0x0B280000, 0x0000FFFF) + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Memory32Fixed(ReadWrite, 0x0B480000, 0x00010000) + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Memory32Fixed(ReadWrite, 0x05090000, 0x00009000) + + // GPU RPMh CPRF register range + // + Memory32Fixed(ReadWrite, 0x0C200000, 0x0000FFFF) + + // VIDC register address space (IPCAT->SoC->Memory Maps->Config NOC->Video_SS_Wrapper) + // + Memory32Fixed(ReadWrite, 0x0AA00000, 0x00200000) + + // VIDC Interrupt (IPCAT->SoC->Interrupts->SDM850->VENUS_IRQ) + // + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {206} + + // VIDC Interrupt (IPCAT->SoC->Interrupts->SDM850->VENUS_WD_IRQ) + // + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {207} + + // TLMM GPIO used to reset the DSI panel + // + GpioIo(Exclusive, PullUp, 0, 0, , "\\_SB.GIO0", ,) {96} + + // TLMM GPIO used to select DSI panel mode + // + // GpioIo(Exclusive, PullUp, 0, 0, , "\\_SB.GIO0", ,) {52} + + // TLMM GPIO used to DP AUX polarity select + // + // GpioIo(Shared, PullUp, 0, 0, , "\\_SB.GIO0", ,) {51} + }) + Return (RBUF) + } + + //------------------------------------------------------------------------------ + // Resource Auxiliary Info + // This method is a companion method to the main _CRS resource method. It + // includes information for each resource, such as the owning component, a + // string identifier, etc. + //------------------------------------------------------------------------------ + // + Method (RESI, 0x0, NotSerialized) + { + Name (RINF, Package() + { + 3, // Table Format Major Version + 0, // Table Format Minor Version + + // MDP register/memory space (IPCAT->SoC->Memory Maps->Config NOC->MMSS->MMSS_MDSS). Address range includes RSCC + // + Package() + { + "RESOURCE", + "MDP_REGS", // Resource Name + "DISPLAY", // Owning Component + }, + + // DP PHY register/memory space (IPCAT->SoC->Memory Maps->Config NOC->PERIPH_SS_AHB2PHY_NORTH) + // + Package() + { + "RESOURCE", + "DP_PHY_REGS", // Resource Name + "DISPLAY", // Owning Component + }, + + // MDP Interrupt, vsync (IPCAT->SoC->Interrupts->SDM850->mdp_irq) + // + Package() + { + "RESOURCE", + "VSYNC_INTERRUPT", // Resource Name + "DISPLAY", // Owning Component + }, + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Package() + { + "RESOURCE", + "GFX_REGS", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Package() + { + "RESOURCE", + "GFX_REG_CONT", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU Interrupt (IPCAT->SoC->Interrupts->SDM850->gc_sys_irq[0]) (Source Subsystem = GPU Subsystem, Subsystem Port = gc_sys_irq[0]) + // + Package() + { + "RESOURCE", + "GFX_INTERRUPT", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Package() + { + "RESOURCE", + "GPU_PDC_SEQ_MEM", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Package() + { + "RESOURCE", + "GPU_PDC_REGS", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU register space (IPCAT->SoC->Memory Maps->Config NOC->A6X) from SWI Browser + // + Package() + { + "RESOURCE", + "GPU_CC", // Resource Name + "GRAPHICS", // Owning Component + }, + + // GPU RPMh CPRF register range + // + Package() + { + "RESOURCE", + "GPU_RPMH_CPRF", // Resource Name + "GRAPHICS", // Owning Component + }, + + // VIDC register address space (IPCAT->SoC->Memory Maps->Config NOC->Video_SS_Wrapper) + // + Package() + { + "RESOURCE", + "VIDEO_REGS", // Resource Name + "VIDEO", // Owning Component + }, + + // VIDC Interrupt (IPCAT->SoC->Interrupts->SDM850->VENUS_IRQ) + // + Package() + { + "RESOURCE", + "VIDC_INTERRUPT", // Resource Name + "VIDEO", // Owning Component + }, + + // VIDC Interrupt (IPCAT->SoC->Interrupts->SDM850->VENUS_WD_IRQ) + // + Package() + { + "RESOURCE", + "VIDC_WD_INTERRUPT", // Resource Name + "VIDEO", // Owning Component + }, + + // TLMM GPIO used to reset the DSI panel + // + Package() + { + "RESOURCE", + "DSI_PANEL_RESET", // Resource Name + "DISPLAY", // Owning Component + }, + + // TLMM GPIO used to select DSI panel mode + // + // Package() + // { + // "RESOURCE", + // "DSI_PANEL_MODE_SELECT", // Resource Name + // "DISPLAY", // Owning Component + // }, + + // TLMM GPIO used to DP AUX polarity select + // + // Package() + // { + // "RESOURCE", + // "DP_AUX", // Resource Name + // "DISPLAY", // Owning Component + // }, + }) + + Return (RINF) + } + + //------------------------------------------------------------------------------ + // Graphics Engines and Display Config + // This method encapsulates all per-platform configuration data for engines and + // the display. This method consists of three sub-packages. The first package + // encapsulates all configuration information for the supported engines. The + // second package encapsulates all display configuration data. The third + // package is the list of all page tables used by the SMMUs in the engines and + // display. + //------------------------------------------------------------------------------ + // + Method (ENGS) + { + Name (EBUF, Package() + { + 3, // Table Format Major Version + 2, // Table Format Minor Version + 0x00440029, // XML Common/Platform Source File Revision (16.16) + + //------------------------------------------------------------------------------ + // Graphics Engine List + // This package enumerates all of the expected engines that should be enumerated + // on this platform, as well as engine-specific configuration data. This + // includes resource assignments, power component assignments, MMU IDs, + // and even chip family information. + //------------------------------------------------------------------------------ + // + Package() + { + "ENGINES", + 6, // Number of engines + + Package() + { + "ENGINE", + "GRAPHICS", // Engine String Identifier + "Adreno6X", // Chip Family Identifier + 1, // Index of Primary Power Component + 2, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "MMUINFO", + "Miniport", // SMMU managed by miniport or engine + "ArmSmmuV2", // SMMU Family + 2, // Number of SMMU stages + 49, // Address bits + "V8L", // Address format + "SMMUID", ToUUID("9833C712-3292-4FFB-B0F4-2BD20E1F7F66"), + "SMMUINTERFACEID", ToUUID("00000000-0000-0000-0000-000000000000"), + // If default the above would be: + // ToUUID("00000000-0000-0000-0000-000000000000") + Package() + { + "PAGETABLEUSAGE", + 4, // Number of page tables + "GraphicsGlobalPT", 0, 0x03030000 , + "GraphicsPerProcessPT", 0, 0x03030000 , + "GraphicsSecurePT", 1, 0x030A0000 , + "GraphicsGmuPT", 3, 0x03030002 , + }, + }, + Package() + { + "PERF_CONTROLS", + Package() + { // CX_HS_MGMT + 1, // State Set Index + }, + Package() + { // + 3, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + Package() + { // GRAPHICS_BW_CONTROL + 4, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + }, + Package() + { + "THERMAL_DOMAINS", + "GPU", + }, + Package() + { + "PROPERTIES", + 3, // Number of properties + Package() + { + "GmemBaseAddr", // Property Name + 0x00000000, // Value + }, + Package() + { + "GmemSize", // Property Name + 0x00100000, // Value + }, + Package() + { + "SMMUCount", // Property Name + 0x00000001, // Value + }, + }, + }, + + Package() + { + "ENGINE", + "MDPBLT", // Engine String Identifier + "MDP5.x", // Chip Family Identifier + 2, // Index of Primary Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "SHAREDSMMU", + "ROTATOR", // Engine whose SMMU is shared + }, + Package() + { + "PERF_CONTROLS", + Package() + { // MDPBLT_CORE_CLOCK_CONTROL + 2, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + Package() + { // MDPBLT_AXI_BANDWIDTH_CONTROL + 3, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + }, + Package() + { + "THERMAL_DOMAINS", + "GPU", + }, + }, + + Package() + { + "ENGINE", + "ROTATOR", // Engine String Identifier + "MDP5.x", // Chip Family Identifier + 3, // Index of Primary Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "MMUINFO", + "Miniport", // SMMU managed by miniport or engine + "ArmSmmuV2", // SMMU Family + 2, // Number of SMMU stages + 32, // Address bits + "V7S", // Address format + "SMMUID", ToUUID("36079AE4-78E8-452D-AF50-0CFF78B2F1CA"), + "SMMUINTERFACEID", ToUUID("00000000-0000-0000-0000-000000000000"), + // If default the above would be: + // ToUUID("00000000-0000-0000-0000-000000000000") + Package() + { + "PAGETABLEUSAGE", + 2, // Number of page tables + "MdpNonSecurePT", + "MdpSecurePT", + }, + }, + Package() + { + "PERF_CONTROLS", + Package() + { // ROTATOR_CORE_CLOCK_CONTROL + 2, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + Package() + { // ROTATOR_AXI_BANDWIDTH_CONTROL + 3, // State Set Index + Package() + { + "LimitForPassiveCooling", // Property Name + 0x00000001, // Value + }, + }, + }, + Package() + { + "THERMAL_DOMAINS", + "GPU", + }, + }, + + Package() + { + "ENGINE", + "VIDEO", // Engine String Identifier + "Venus", // Chip Family Identifier + 4, // Index of Primary Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "MMUINFO", + "Engine", // SMMU managed by miniport or engine + "ArmSmmuV2", // SMMU Family + 2, // Number of SMMU stages + 32, // Address bits + "V7S", // Address format + "SMMUID", ToUUID("665E0F8E-ADD3-49D1-91BC-5540C5F57FBA"), + "SMMUINTERFACEID", ToUUID("1C3FC0E8-0B11-4EE0-BE89-3E21420A865F"), + // If default the above would be: + // ToUUID("00000000-0000-0000-0000-000000000000") + Package() + { + "PAGETABLEUSAGE", + 5, // Number of page tables + "VideoNonSecurePT", + "VideoSecurePT1", + "VideoSecurePT2", + "VideoSecurePT3", + "VideoSecurePT4", + }, + }, + Package() + { + "PERF_CONTROLS", + Package() + { // VIDEO_CORE_CLOCK_CONTROL + 2, // State Set Index + }, + Package() + { // VIDEO_AXI_PORT_BW + 3, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + Package() + { + "PROPERTIES", + 1, // Number of properties + Package() + { + "DecMaxFps", // Property Name + 0x0000003C, // Value + }, + }, + }, + + Package() + { + "ENGINE", + "CRYPTO", // Engine String Identifier + "Crypto1.0", // Chip Family Identifier + 5, // Index of Primary Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "MMUINFO", + "Miniport", // SMMU managed by miniport or engine + "ArmSmmuV2", // SMMU Family + 2, // Number of SMMU stages + 32, // Address bits + "V7S", // Address format + "SMMUID", ToUUID("36079AE4-78E8-452D-AF50-0CFF78B2F1CA"), + "SMMUINTERFACEID", ToUUID("00000000-0000-0000-0000-000000000000"), + // If default the above would be: + // ToUUID("00000000-0000-0000-0000-000000000000") + Package() + { + "PAGETABLEUSAGE", + 2, // Number of page tables + "CryptoNonSecurePT", + "CryptoSecurePT", + }, + }, + Package() + { + "PERF_CONTROLS", + Package() + { // CRYPTO_CORE_CLOCK_CONTROL + 2, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + }, + + Package() + { + "ENGINE", + "VIDEO_ENCODER", // Engine String Identifier + "Venus", // Chip Family Identifier + 6, // Index of Primary Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of Reset + Package() + { + "PERF_CONTROLS", + Package() + { // VIDEO_ENCODER_CORE_CLOCK_CONTROL + 2, // State Set Index + }, + Package() + { // VIDEO_ENCODER_AXI_PORT_BW + 3, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + }, + }, + + //------------------------------------------------------------------------------ + // Display Info Package + // This package enumerates all resources assigned to the display. Additionally, + // this routine includes any display configuration data, such as hotplug + // support. + //------------------------------------------------------------------------------ + // + Package() + { + "DISPLAYS", + "MDP5.x", // Chip Family Identifier + 3, // Number of displays + + Package() + { + "DISPLAY", + "INTERNAL1", // Display Name + + 0, // Index of Display Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of reset + + Package() + { + "PERF_CONTROLS", + Package() + { // INTERNAL1_SCAN_CONTROL + 2, // State Set Index + }, + Package() + { // INTERNAL1_CORE_CLOCK_CONTROL + 3, // State Set Index + }, + Package() + { // INTERNAL1_EBI_BANDWIDTH + 4, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + }, + Package() + { + "DISPLAY", + "INTERNAL2", // Display Name + + 7, // Index of Display Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of reset + + Package() + { + "PERF_CONTROLS", + Package() + { // INTERNAL2_SCAN_CONTROL + 2, // State Set Index + }, + Package() + { // INTERNAL2_CORE_CLOCK_CONTROL + 3, // State Set Index + }, + Package() + { // INTERNAL2_EBI_BANDWIDTH + 4, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + }, + Package() + { + "DISPLAY", + "EXTERNAL1", // Display Name + + 8, // Index of Display Power Component + 1, // P-State Set Index of Footswitch override + 0, // P-State Set Index of reset + + Package() + { + "PERF_CONTROLS", + Package() + { // EXTERNAL1_CORE_CLOCK_CONTROL + 2, // State Set Index + }, + Package() + { // EXTERNAL1_EBI_BANDWIDTH + 3, // State Set Index + }, + }, + Package() + { + "THERMAL_DOMAINS", + }, + }, + + Package() + { + "RESOURCES", + Package() + { + "MMUINFO", + "Miniport", // SMMU managed by miniport or engine + "ArmSmmuV2", // SMMU Family + 2, // Number of SMMU stages + 32, // Address bits + "V7S", // Address format + "SMMUID", ToUUID("36079AE4-78E8-452D-AF50-0CFF78B2F1CA"), + "SMMUINTERFACEID", ToUUID("00000000-0000-0000-0000-000000000000"), + // If default the above would be: + // ToUUID("00000000-0000-0000-0000-000000000000") + Package() + { + "PAGETABLEUSAGE", + 2, // Number of page tables + "MdpNonSecurePT", + "MdpSecurePT", + }, + }, + }, + Package() + { + "PRIMARY_SOURCE_MODES", + 32, // Number of Primary source modes + Package() + { + 640, // Width + 480, // Height + }, + Package() + { + 640, // Width + 360, // Height + }, + Package() + { + 800, // Width + 600, // Height + }, + Package() + { + 960, // Width + 540, // Height + }, + Package() + { + 1280, // Width + 720, // Height + }, + Package() + { + 1280, // Width + 1080, // Height + }, + Package() + { + 1024, // Width + 768, // Height + }, + Package() + { + 1152, // Width + 768, // Height + }, + Package() + { + 1280, // Width + 768, // Height + }, + Package() + { + 1360, // Width + 768, // Height + }, + Package() + { + 1366, // Width + 768, // Height + }, + Package() + { + 1600, // Width + 900, // Height + }, + Package() + { + 1280, // Width + 1024, // Height + }, + Package() + { + 1920, // Width + 1080, // Height + }, + Package() + { + 1920, // Width + 1200, // Height + }, + Package() + { + 1920, // Width + 1280, // Height + }, + Package() + { + 2048, // Width + 1080, // Height + }, + Package() + { + 2048, // Width + 1152, // Height + }, + Package() + { + 2048, // Width + 1536, // Height + }, + Package() + { + 2560, // Width + 1080, // Height + }, + Package() + { + 2560, // Width + 1600, // Height + }, + Package() + { + 2560, // Width + 1440, // Height + }, + Package() + { + 2560, // Width + 2048, // Height + }, + Package() + { + 3200, // Width + 1800, // Height + }, + Package() + { + 3200, // Width + 2400, // Height + }, + Package() + { + 3200, // Width + 2048, // Height + }, + Package() + { + 3440, // Width + 1440, // Height + }, + Package() + { + 3840, // Width + 1080, // Height + }, + Package() + { + 3840, // Width + 1600, // Height + }, + Package() + { + 3840, // Width + 2400, // Height + }, + Package() + { + 3840, // Width + 2160, // Height + }, + Package() + { + 4096, // Width + 2160, // Height + }, + }, + }, + + //------------------------------------------------------------------------------ + // Page Table List + // This package enumerates all of the page tables used by any of the displays + // and engines. Page tables defined here may be referenced by one or more engine + // or display. + //------------------------------------------------------------------------------ + // + Package() + { + "PAGETABLES", + 13, // Number of page tables + Package() + { + "GraphicsGlobalPT", // Name + 1, // Global + 0, // Secure + 1, // HighTTBR + 1, // HiddenFromOS + 0x8000000000, // VaStart + 0x800000000, // VaSizeBytes + }, + Package() + { + "GraphicsPerProcessPT", // Name + 0, // Global + 0, // Secure + 0, // HighTTBR + 0, // HiddenFromOS + 0x00400000, // VaStart + 0x7FFFC00000, // VaSizeBytes + }, + Package() + { + "GraphicsSecurePT", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0x8800000000, // VaStart + 0xC0000000, // VaSizeBytes + }, + Package() + { + "GraphicsGmuPT", // Name + 0, // Global + 0, // Secure + 0, // HighTTBR + 0, // HiddenFromOS + 0x60000000, // VaStart + 0x20000000, // VaSizeBytes + }, + Package() + { + "MdpNonSecurePT", // Name + 0, // Global + 0, // Secure + 0, // HighTTBR + 0, // HiddenFromOS + 0x40100000, // VaStart + 0xBFF00000, // VaSizeBytes + }, + Package() + { + "MdpSecurePT", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0x80000000, // VaStart + 0x80000000, // VaSizeBytes + }, + Package() + { + "VideoNonSecurePT", // Name + 0, // Global + 0, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0x00100000, // VaStart + 0xBFF00000, // VaSizeBytes + 0x0000001B, // VideoBufferMask + 0, // VideoCBIndex + }, + Package() + { + "VideoSecurePT1", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0xC0000000, // VaStart + 0x10000000, // VaSizeBytes + 0x00000009, // VideoBufferMask + 1, // VideoCBIndex + }, + Package() + { + "VideoSecurePT2", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0xD0000000, // VaStart + 0x10000000, // VaSizeBytes + 0x00000007, // VideoBufferMask + 2, // VideoCBIndex + }, + Package() + { + "VideoSecurePT3", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0xE0000000, // VaStart + 0x10000000, // VaSizeBytes + 0x00000002, // VideoBufferMask + 3, // VideoCBIndex + }, + Package() + { + "VideoSecurePT4", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0xF0000000, // VaStart + 0x10000000, // VaSizeBytes + 0x0000002A, // VideoBufferMask + 4, // VideoCBIndex + }, + Package() + { + "CryptoNonSecurePT", // Name + 0, // Global + 0, // Secure + 0, // HighTTBR + 0, // HiddenFromOS + 0x00100000, // VaStart + 0x7FF00000, // VaSizeBytes + }, + Package() + { + "CryptoSecurePT", // Name + 0, // Global + 1, // Secure + 0, // HighTTBR + 1, // HiddenFromOS + 0x80000000, // VaStart + 0x80000000, // VaSizeBytes + }, + }, + }) + + Return (EBUF) + } + + //------------------------------------------------------------------------------ + // Graphics Thermal Management Details + //------------------------------------------------------------------------------ + // + Method (TMDT) + { + Name (RBUF, Package() + { + 1, // Table Format Major Version + 0, // Table Format Minor Version + + // Thermal Domain Definitions + // + Package() + { + "THERMAL_DOMAINS", + 1, // Num Thermal Domains + + // Thermal Zone + // Domain Name Interface Name Endpoints + // ------------- -------------- ----------------------- + Package() { "GPU", "GPU0", Package() { "GRAPHICS", "MDPBLT", "ROTATOR", } }, + } + }) + + Return (RBUF) + } + + //------------------------------------------------------------------------------ + // Graphics PEP Component List + // This method is a companion method to the graphics entries inside PEP's DCFG + // method. It includes the same components, generated from a single XML source, + // with any additional information required to be passed to dxgkrnl. + //------------------------------------------------------------------------------ + // + Method (PMCL) + { + Name (RBUF, Package() + { + 3, // Table Format Major Version + 1, // Table Format Minor Version + 10, // Number of power components + + //---------------------------------------------------------------------------------- + // C0 - Internal (Primary) Display Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 0, // Component Index + Buffer() + { + 0x91, 0x59, 0x13, 0x2C, 0x91, 0x43, 0x33, 0x46, // GUID: {2C135991-4391-4633-90B1-FA96F2E2CC04} + 0x90, 0xB1, 0xFA, 0x96, 0xF2, 0xE2, 0xCC, 0x04 + }, + + "PRIMDISPLAY_POWER_STATES", // Common Name + "HW_BLOCK_MDP", // Hw Block associated with this component + + Package() + { + "DISPLAY", // Dxgkrnl Component Type + "INTERNAL1", + }, + + 2, // Number of F-States + 5, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 2 }, + Package() { "FSTATE", 1, "PWR_OFF", 1, 1, 1 }, + + //---------------------------------------------------------------------------------- + // C0.PS0 - Internal (Primary) Display: MDP Reset Control + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "INTERNAL1_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Display Core + }, + + //---------------------------------------------------------------------------------- + // C0.PS1 - Internal Display: MDP Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "INTERNAL1_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C0.PS2 - Internal (Primary) Display: Power states for MDP scan-out HW + // + // @Brief: + // - Used to dynamically control MDP related clocks within a PState + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "INTERNAL1_SCAN_CONTROL", + "*", // HW Revisions + "DISPLAY_SOURCE_SCAN_CTRL", // Resource Type + 5, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 4, 2 }, // Vote for all scan-out resources + Package() { "PSTATE", 1, 3, 2 }, // Vote for only MDP, DSI 0 and DSI 1 scan-out resources + Package() { "PSTATE", 2, 2, 2 }, // Vote for only MDP and DSI 0 scan-out resources + Package() { "PSTATE", 3, 1, 2 }, // Vote for only MDP and DSI 1 scan-out resources + Package() { "PSTATE", 4, 0, 2 }, // Remove votes for all scan-out resources + }, + + //---------------------------------------------------------------------------------- + // C0.PS3 - Internal (Primary) Display: MDP Core Clock Frequency + // + // @Brief: + // Notes: + // - This table reflects the frequency plan for the v1 part. + // - All core frequency votes are based on specific clock plan values and are cast + // 2 MHz below what we actually desire. This helps avoid potential issues with + // round-up when the actual clock frequency on real HW is slightly less than + // that which was advertized in the clock plan. + // - [NC] Temporarily moved all AHB bandwidth votes to F-states to help work around + // 64K size issue in the final AML. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "INTERNAL1_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 13, // Num P-States in Set + 4, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 430000000, 1 }, + Package() { "PSTATE", 1, 412500000, 1 }, + Package() { "PSTATE", 2, 344000000, 2 }, + Package() { "PSTATE", 3, 300000000, 2 }, + Package() { "PSTATE", 4, 275000000, 2 }, + Package() { "PSTATE", 5, 200000000, 2 }, + Package() { "PSTATE", 6, 171428571, 3 }, + Package() { "PSTATE", 7, 165000000, 3 }, + Package() { "PSTATE", 8, 150000000, 3 }, + Package() { "PSTATE", 9, 100000000, 3 }, + Package() { "PSTATE", 10, 85710000, 3 }, + Package() { "PSTATE", 11, 19200000, 3 }, + Package() { "PSTATE", 12, 0, 3 }, + }, + + //---------------------------------------------------------------------------------- + // C0.PS4 - Internal (Primary) Display: Display Bandwidth to EBI + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 4, // P-State Set Index + "INTERNAL1_EBI_BANDWIDTH", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 43, // Num P-States in Set + 28, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 13326000000, 0 }, + Package() { "PSTATE", 1, 12926000000, 0 }, + Package() { "PSTATE", 2, 12526000000, 0 }, + Package() { "PSTATE", 3, 12126000000, 0 }, + Package() { "PSTATE", 4, 11726000000, 0 }, + Package() { "PSTATE", 5, 11326000000, 0 }, + Package() { "PSTATE", 6, 10926000000, 0 }, + Package() { "PSTATE", 7, 10526000000, 0 }, + Package() { "PSTATE", 8, 10126000000, 1 }, + Package() { "PSTATE", 9, 9600000000, 1 }, + Package() { "PSTATE", 10, 9200000000, 1 }, + Package() { "PSTATE", 11, 8800000000, 1 }, + Package() { "PSTATE", 12, 8400000000, 1 }, + Package() { "PSTATE", 13, 8000000000, 1 }, + Package() { "PSTATE", 14, 7600000000, 1 }, + Package() { "PSTATE", 15, 7200000000, 1 }, + Package() { "PSTATE", 16, 6800000000, 1 }, + Package() { "PSTATE", 17, 6400000000, 1 }, + Package() { "PSTATE", 18, 6000000000, 1 }, + Package() { "PSTATE", 19, 5600000000, 1 }, + Package() { "PSTATE", 20, 5200000000, 2 }, + Package() { "PSTATE", 21, 4800000000, 2 }, + Package() { "PSTATE", 22, 4400000000, 2 }, + Package() { "PSTATE", 23, 4000000000, 2 }, + Package() { "PSTATE", 24, 3600000000, 2 }, + Package() { "PSTATE", 25, 3200000000, 2 }, + Package() { "PSTATE", 26, 2800000000, 2 }, + Package() { "PSTATE", 27, 2400000000, 2 }, + Package() { "PSTATE", 28, 2000000000, 2 }, + Package() { "PSTATE", 29, 1600000000, 2 }, + Package() { "PSTATE", 30, 1500000000, 2 }, + Package() { "PSTATE", 31, 1400000000, 2 }, + Package() { "PSTATE", 32, 1300000000, 2 }, + Package() { "PSTATE", 33, 1200000000, 2 }, + Package() { "PSTATE", 34, 1100000000, 2 }, + Package() { "PSTATE", 35, 1000000000, 2 }, + Package() { "PSTATE", 36, 900000000, 2 }, + Package() { "PSTATE", 37, 800000000, 2 }, + Package() { "PSTATE", 38, 700000000, 2 }, + Package() { "PSTATE", 39, 600000000, 2 }, + Package() { "PSTATE", 40, 500000000, 2 }, + Package() { "PSTATE", 41, 400000000, 2 }, + Package() { "PSTATE", 42, 0, 2 }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C1 - 3D Graphics Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 1, // Component Index + Buffer() + { + 0xB5, 0xF1, 0xBD, 0x30, 0xF7, 0x28, 0x0C, 0x4C, // GUID: {30BDF1B5-28F7-4C0C-AC47-273DD1401E11} + 0xAC, 0x47, 0x27, 0x3D, 0xD1, 0x40, 0x1E, 0x11 + }, + + "GRAPHICS_POWER_STATES", // Common Name + "HW_BLOCK_GRAPHICS", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "GRAPHICS", + }, + + 3, // Number of F-States + 5, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "PWR_OFF", 10000, 10, 2 }, + Package() { "FSTATE", 2, "PWR_OFF", 10001, 10, 1 }, + + //---------------------------------------------------------------------------------- + // C1.PS0 - 3D Graphics Core P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "GRAPHICS_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Graphics Core + }, + + //---------------------------------------------------------------------------------- + // C1.PS1 - 3D Graphics Core P-State Set: CX Headswitch Management + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "CX_HS_MGMT", + "*", // HW Revisions + "INTERNAL", // Resource Type + 3, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 2, 2 }, // Do Nothing + Package() { "PSTATE", 1, 1, 2 }, // CX Headswitch On + Package() { "PSTATE", 2, 0, 2 }, // CX Headswitch Off + }, + + //---------------------------------------------------------------------------------- + // C1.PS2 - 3D Graphics Core P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "GRAPHICS_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 1, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + + //---------------------------------------------------------------------------------- + // C1.PS3 + // << Placeholder for runtime patches: P001, P002 >> + //---------------------------------------------------------------------------------- + // + Package() + { + "ENGINE_PSTATE_SET", + 3, + }, + + //---------------------------------------------------------------------------------- + // C1.PS4 - 3D Graphics Core P-State Set: Bus 850 + //---------------------------------------------------------------------------------- + // + Package() + { + "ENGINE_PSTATE_SET", + 4, + "GRAPHICS_BW_CONTROL", + "BANDWIDTH", // Resource Type + 13, // Num P-States in Set + 0, // Num CustomData fields in Set + TRUE, // Has Thermal Thresholds + 4, // Initial P-State + 3, // Stable Power P-State + + // Voltage + // ID Value Level Thermal Thresholds + // --- ---------- ----- -------------------- + Package() { "PSTATE", 0, 7216000000, 384, Package() { "GPU", 100, } }, + Package() { "PSTATE", 1, 6220000000, 256, Package() { "GPU", 86, } }, + Package() { "PSTATE", 2, 5184000000, 256, Package() { "GPU", 72, } }, + Package() { "PSTATE", 3, 4068000000, 192, Package() { "GPU", 56, } }, + Package() { "PSTATE", 4, 3072000000, 128, Package() { "GPU", 42, } }, + Package() { "PSTATE", 5, 2724000000, 128, Package() { "GPU", 38, } }, + Package() { "PSTATE", 6, 2188000000, 128, Package() { "GPU", 30, } }, + Package() { "PSTATE", 7, 1648000000, 64, Package() { "GPU", 23, } }, + Package() { "PSTATE", 8, 1200000000, 48, Package() { "GPU", 17, } }, + Package() { "PSTATE", 9, 800000000, 48, Package() { "GPU", 11, } }, + Package() { "PSTATE", 10, 600000000, 48, Package() { "GPU", 8, } }, + Package() { "PSTATE", 11, 400000000, 48, Package() { "GPU", 0, } }, + Package() { "PSTATE", 12, 0, 0, Package() { "GPU", 0, } }, + }, + + }, + + //---------------------------------------------------------------------------------- + // C2 - MDP BLT Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 2, // Component Index + Buffer() + { + 0xDD, 0x2A, 0xCA, 0x07, 0x87, 0xDF, 0xE1, 0x49, // GUID: {07CA2ADD-DF87-49E1-8583-08687DC81C8E} + 0x85, 0x83, 0x08, 0x68, 0x7D, 0xC8, 0x1C, 0x8E + }, + + "MDPBLT_POWER_STATES", // Common Name + "HW_BLOCK_MDP", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "MDPBLT", + }, + + 3, // Number of F-States + 4, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "CLK_OFF", 10000, 0, 2 }, + Package() { "FSTATE", 2, "PWR_OFF", 100000, 0, 1 }, + + //---------------------------------------------------------------------------------- + // C2.PS0 - MDP BLT Core P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "MDPBLT_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Display Core + }, + + //---------------------------------------------------------------------------------- + // C2.PS1 - MDP BLT Core P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "MDPBLT_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C2.PS2 - MDP Core Performance: Core Clock Frequency + // + // @Brief: + // Notes: + // - All core frequency votes are based on specific clock plan values and are cast + // 2 MHz below what we actually desire. This helps avoid potential issues with + // round-up when the actual clock frequency on real HW is slightly less than + // that which was advertized in the clock plan. + // - [NC] Temporarily moved all AHB bandwidth votes to F-states to help work around + // 64K size issue in the final AML. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "MDPBLT_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 13, // Num P-States in Set + 8, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level Thermal Thresholds + // --- ---------- ----- -------------------- + Package() { "PSTATE", 0, 430000000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 1, 412500000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 2, 344000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 3, 300000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 4, 275000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 5, 200000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 6, 171428571, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 7, 165000000, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 8, 150000000, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 9, 100000000, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 10, 85710000, 3, Package() { "GPU", 0, } }, + Package() { "PSTATE", 11, 19200000, 3, Package() { "GPU", 0, } }, + Package() { "PSTATE", 12, 0, 3, Package() { "GPU", 0, } }, + }, + + //---------------------------------------------------------------------------------- + // C2.PS3 - MDP Core Performance: MDPBLT Bandwidth to EBI + // + // @Brief: + // Note (TODO: Update this comment): + // - AXI port 1 is strictly used by the BLT engine. The BLT engine will have definite + // modes of operation based on surface sizes and refresh rates. Instead of bothering + // to identify all possible modes, however, we simply build a table based on the + // possible combination of frequency levels between the core and EBI. With + // arbitrated and instantaneous bandwidth requests, these frequency levels represent + // all of the possible system configurations that can result from any request. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "MDPBLT_AXI_BANDWIDTH_CONTROL", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 50, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level Thermal Thresholds + // --- ---------- ----- -------------------- + Package() { "PSTATE", 0, 13326000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 1, 12926000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 2, 12526000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 3, 12126000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 4, 11726000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 5, 11326000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 6, 10926000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 7, 10526000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 8, 10126000000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 9, 9726000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 10, 9326000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 11, 8926000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 12, 8526000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 13, 8126000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 14, 7726000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 15, 7326000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 16, 6926000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 17, 6526000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 18, 6126000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 19, 5726000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 20, 5326000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 21, 4926000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 22, 4526000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 23, 4126000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 24, 3726000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 25, 3326000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 26, 2926000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 27, 2526000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 28, 2400000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 29, 2300000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 30, 2200000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 31, 2100000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 32, 2000000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 33, 1900000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 34, 1800000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 35, 1700000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 36, 1600000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 37, 1500000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 38, 1400000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 39, 1300000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 40, 1200000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 41, 1100000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 42, 1000000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 43, 900000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 44, 800000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 45, 700000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 46, 600000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 47, 500000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 48, 400000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 49, 0, 2, Package() { "GPU", 0, } }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C3 - Rotator Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 3, // Component Index + Buffer() + { + 0xF5, 0xFB, 0x5F, 0x4D, 0x91, 0xD7, 0xCD, 0x41, // GUID: {4D5FFBF5-D791-41CD-89CB-0154129BA607} + 0x89, 0xCB, 0x01, 0x54, 0x12, 0x9B, 0xA6, 0x07 + }, + + "ROTATOR_POWER_STATES", // Common Name + "HW_BLOCK_ROTATOR", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "ROTATOR", + }, + + 3, // Number of F-States + 4, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "CLK_OFF", 10000, 0, 2 }, + Package() { "FSTATE", 2, "PWR_OFF", 100000, 0, 1 }, + + //---------------------------------------------------------------------------------- + // C3.PS0 - Rotator Core P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "ROTATOR_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset MDP Core + }, + + //---------------------------------------------------------------------------------- + // C3.PS1 - Rotator Core P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "ROTATOR_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C3.PS2 - Rotator Core P-State Set: Rotator Core Clock Frequency + // + // @Brief: + // Notes: + // - All core frequency votes are based on specific clock plan values and are cast + // 2 MHz below what we actually desire. This helps avoid potential issues with + // round-up when the actual clock frequency on real HW is slightly less than + // that which was advertised in the clock plan. + // - This table reflects the frequency plans for the v1 and v2 parts. + // - [NC] Temporarily moved all AHB bandwidth votes to F-states to help work around + // 64K size issue in the final AML. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "ROTATOR_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 8, // Num P-States in Set + 5, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level Thermal Thresholds + // --- ---------- ----- -------------------- + Package() { "PSTATE", 0, 430000000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 1, 412500000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 2, 344000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 3, 300000000, 2, Package() { "GPU", 66, } }, + Package() { "PSTATE", 4, 171428571, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 5, 165000000, 3, Package() { "GPU", 33, } }, + Package() { "PSTATE", 6, 19200000, 3, Package() { "GPU", 0, } }, + Package() { "PSTATE", 7, 0, 3, Package() { "GPU", 0, } }, + }, + + //---------------------------------------------------------------------------------- + // C3.PS3 - Rotator Core P-State Set: Rotator Bandwidth to EBI + // + // @Brief: + // Note (TODO - Update comment): + // - AXI port 1 is strictly used by the BLT engine. The BLT engine will have definite + // modes of operation based on surface sizes and refresh rates. Instead of bothering + // to identify all possible modes, however, we simply build a table based on the + // possible combination of frequency levels between the core and EBI. With + // arbitrated and instantaneous bandwidth requests, these frequency levels represent + // all of the possible system configurations that can result from any request. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "ROTATOR_AXI_BANDWIDTH_CONTROL", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 50, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level Thermal Thresholds + // --- ---------- ----- -------------------- + Package() { "PSTATE", 0, 13326000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 1, 12926000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 2, 12526000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 3, 12126000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 4, 11726000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 5, 11326000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 6, 10926000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 7, 10526000000, 0, Package() { "GPU", 100, } }, + Package() { "PSTATE", 8, 10126000000, 1, Package() { "GPU", 100, } }, + Package() { "PSTATE", 9, 9726000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 10, 9326000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 11, 8926000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 12, 8526000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 13, 8126000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 14, 7726000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 15, 7326000000, 1, Package() { "GPU", 75, } }, + Package() { "PSTATE", 16, 6926000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 17, 6526000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 18, 6126000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 19, 5726000000, 1, Package() { "GPU", 50, } }, + Package() { "PSTATE", 20, 5326000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 21, 4926000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 22, 4526000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 23, 4126000000, 2, Package() { "GPU", 50, } }, + Package() { "PSTATE", 24, 3726000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 25, 3326000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 26, 2926000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 27, 2526000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 28, 2400000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 29, 2300000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 30, 2200000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 31, 2100000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 32, 2000000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 33, 1900000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 34, 1800000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 35, 1700000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 36, 1600000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 37, 1500000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 38, 1400000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 39, 1300000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 40, 1200000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 41, 1100000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 42, 1000000000, 2, Package() { "GPU", 25, } }, + Package() { "PSTATE", 43, 900000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 44, 800000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 45, 700000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 46, 600000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 47, 500000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 48, 400000000, 2, Package() { "GPU", 0, } }, + Package() { "PSTATE", 49, 0, 2, Package() { "GPU", 0, } }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C4 - Video Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 4, // Component Index + Buffer() + { + 0x1A, 0xBB, 0xE1, 0xD0, 0x3D, 0x70, 0xE8, 0x4B, // GUID: {D0E1BB1A-703D-4BE8-B450-64A4FBFCA6A8} + 0xB4, 0x50, 0x64, 0xA4, 0xFB, 0xFC, 0xA6, 0xA8 + }, + + "VIDEO_POWER_STATES", // Common Name + "HW_BLOCK_VIDEO", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "VIDEO", + }, + + 3, // Number of F-States + 4, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "CLK_OFF", 10000, 0, 2 }, + Package() { "FSTATE", 2, "PWR_OFF", 100000, 0, 1 }, + + //---------------------------------------------------------------------------------- + // C4.PS0 - Video Core P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "VIDEO_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Venus Core + }, + + //---------------------------------------------------------------------------------- + // C4.PS1 - Video Core P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "VIDEO_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 1, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C4.PS2 - Video Core Performance: Core Clock Frequency + // + // @Brief: + // Notes: + // - The use of a "CLOSEST" match for the highest frequency is defensive. Any attempt + // to request a frequency that's even 1 Hz higher than the maximum entry in Clkrgm's + // table will result in a silent failure and no change in clock frequency. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "VIDEO_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 7, // Num P-States in Set + 4, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 533000000, 0 }, + Package() { "PSTATE", 1, 444000000, 1 }, + Package() { "PSTATE", 2, 380000000, 2 }, + Package() { "PSTATE", 3, 320000000, 2 }, + Package() { "PSTATE", 4, 200000000, 2 }, + Package() { "PSTATE", 5, 100000000, 2 }, + Package() { "PSTATE", 6, 0, 3 }, + }, + + //---------------------------------------------------------------------------------- + // C4.PS3 - Video Performance: Bandwidth to EBI + // + // @Brief: + // AXI bandwidth values are represented by a max, min and step which covers all + // possible bandwidth values requested by video core for different decode and + // encode scenarios. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "VIDEO_AXI_PORT_BW", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 111, // Num P-States in Set + 108, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 22000000000, 0 }, + Package() { "PSTATE", 1, 21800000000, 0 }, + Package() { "PSTATE", 2, 21600000000, 0 }, + Package() { "PSTATE", 3, 21400000000, 0 }, + Package() { "PSTATE", 4, 21200000000, 0 }, + Package() { "PSTATE", 5, 21000000000, 0 }, + Package() { "PSTATE", 6, 20800000000, 0 }, + Package() { "PSTATE", 7, 20600000000, 0 }, + Package() { "PSTATE", 8, 20400000000, 0 }, + Package() { "PSTATE", 9, 20200000000, 0 }, + Package() { "PSTATE", 10, 20000000000, 0 }, + Package() { "PSTATE", 11, 19800000000, 0 }, + Package() { "PSTATE", 12, 19600000000, 0 }, + Package() { "PSTATE", 13, 19400000000, 0 }, + Package() { "PSTATE", 14, 19200000000, 0 }, + Package() { "PSTATE", 15, 19000000000, 0 }, + Package() { "PSTATE", 16, 18800000000, 0 }, + Package() { "PSTATE", 17, 18600000000, 0 }, + Package() { "PSTATE", 18, 18400000000, 0 }, + Package() { "PSTATE", 19, 18200000000, 0 }, + Package() { "PSTATE", 20, 18000000000, 0 }, + Package() { "PSTATE", 21, 17800000000, 0 }, + Package() { "PSTATE", 22, 17600000000, 0 }, + Package() { "PSTATE", 23, 17400000000, 0 }, + Package() { "PSTATE", 24, 17200000000, 0 }, + Package() { "PSTATE", 25, 17000000000, 0 }, + Package() { "PSTATE", 26, 16800000000, 0 }, + Package() { "PSTATE", 27, 16600000000, 0 }, + Package() { "PSTATE", 28, 16400000000, 0 }, + Package() { "PSTATE", 29, 16200000000, 0 }, + Package() { "PSTATE", 30, 16000000000, 0 }, + Package() { "PSTATE", 31, 15800000000, 0 }, + Package() { "PSTATE", 32, 15600000000, 0 }, + Package() { "PSTATE", 33, 15400000000, 0 }, + Package() { "PSTATE", 34, 15200000000, 0 }, + Package() { "PSTATE", 35, 15000000000, 0 }, + Package() { "PSTATE", 36, 14800000000, 0 }, + Package() { "PSTATE", 37, 14600000000, 0 }, + Package() { "PSTATE", 38, 14400000000, 0 }, + Package() { "PSTATE", 39, 14200000000, 0 }, + Package() { "PSTATE", 40, 14000000000, 0 }, + Package() { "PSTATE", 41, 13800000000, 0 }, + Package() { "PSTATE", 42, 13600000000, 0 }, + Package() { "PSTATE", 43, 13400000000, 0 }, + Package() { "PSTATE", 44, 13200000000, 0 }, + Package() { "PSTATE", 45, 13000000000, 0 }, + Package() { "PSTATE", 46, 12800000000, 0 }, + Package() { "PSTATE", 47, 12600000000, 0 }, + Package() { "PSTATE", 48, 12400000000, 0 }, + Package() { "PSTATE", 49, 12200000000, 0 }, + Package() { "PSTATE", 50, 12000000000, 0 }, + Package() { "PSTATE", 51, 11800000000, 0 }, + Package() { "PSTATE", 52, 11600000000, 0 }, + Package() { "PSTATE", 53, 11400000000, 0 }, + Package() { "PSTATE", 54, 11200000000, 0 }, + Package() { "PSTATE", 55, 11000000000, 0 }, + Package() { "PSTATE", 56, 10800000000, 0 }, + Package() { "PSTATE", 57, 10600000000, 0 }, + Package() { "PSTATE", 58, 10400000000, 0 }, + Package() { "PSTATE", 59, 10200000000, 0 }, + Package() { "PSTATE", 60, 10000000000, 0 }, + Package() { "PSTATE", 61, 9800000000, 0 }, + Package() { "PSTATE", 62, 9600000000, 0 }, + Package() { "PSTATE", 63, 9400000000, 0 }, + Package() { "PSTATE", 64, 9200000000, 0 }, + Package() { "PSTATE", 65, 9000000000, 0 }, + Package() { "PSTATE", 66, 8800000000, 0 }, + Package() { "PSTATE", 67, 8600000000, 0 }, + Package() { "PSTATE", 68, 8400000000, 0 }, + Package() { "PSTATE", 69, 8200000000, 0 }, + Package() { "PSTATE", 70, 8000000000, 0 }, + Package() { "PSTATE", 71, 7800000000, 0 }, + Package() { "PSTATE", 72, 7600000000, 0 }, + Package() { "PSTATE", 73, 7400000000, 0 }, + Package() { "PSTATE", 74, 7200000000, 0 }, + Package() { "PSTATE", 75, 7000000000, 0 }, + Package() { "PSTATE", 76, 6800000000, 0 }, + Package() { "PSTATE", 77, 6600000000, 0 }, + Package() { "PSTATE", 78, 6400000000, 0 }, + Package() { "PSTATE", 79, 6200000000, 0 }, + Package() { "PSTATE", 80, 6000000000, 0 }, + Package() { "PSTATE", 81, 5800000000, 0 }, + Package() { "PSTATE", 82, 5600000000, 0 }, + Package() { "PSTATE", 83, 5400000000, 0 }, + Package() { "PSTATE", 84, 5200000000, 0 }, + Package() { "PSTATE", 85, 5000000000, 0 }, + Package() { "PSTATE", 86, 4800000000, 0 }, + Package() { "PSTATE", 87, 4600000000, 0 }, + Package() { "PSTATE", 88, 4400000000, 0 }, + Package() { "PSTATE", 89, 4200000000, 0 }, + Package() { "PSTATE", 90, 4000000000, 0 }, + Package() { "PSTATE", 91, 3800000000, 0 }, + Package() { "PSTATE", 92, 3600000000, 0 }, + Package() { "PSTATE", 93, 3400000000, 0 }, + Package() { "PSTATE", 94, 3200000000, 0 }, + Package() { "PSTATE", 95, 3000000000, 0 }, + Package() { "PSTATE", 96, 2800000000, 0 }, + Package() { "PSTATE", 97, 2600000000, 0 }, + Package() { "PSTATE", 98, 2400000000, 0 }, + Package() { "PSTATE", 99, 2200000000, 0 }, + Package() { "PSTATE", 100, 2000000000, 0 }, + Package() { "PSTATE", 101, 1800000000, 0 }, + Package() { "PSTATE", 102, 1600000000, 0 }, + Package() { "PSTATE", 103, 1400000000, 0 }, + Package() { "PSTATE", 104, 1200000000, 0 }, + Package() { "PSTATE", 105, 1000000000, 0 }, + Package() { "PSTATE", 106, 800000000, 1 }, + Package() { "PSTATE", 107, 600000000, 1 }, + Package() { "PSTATE", 108, 400000000, 2 }, + Package() { "PSTATE", 109, 200000000, 2 }, + Package() { "PSTATE", 110, 0, 2 }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C5 - Crypto Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 5, // Component Index + Buffer() + { + 0xFA, 0x73, 0x4D, 0xCC, 0xC2, 0xC3, 0x7E, 0x4C, // GUID: {CC4D73FA-C3C2-4C7E-A217-D468F4611BBD} + 0xA2, 0x17, 0xD4, 0x68, 0xF4, 0x61, 0x1B, 0xBD + }, + + "CRYPTO_POWER_STATES", // Common Name + "HW_BLOCK_NONE", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "CRYPTO", + }, + + 2, // Number of F-States + 3, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "PWR_OFF", 100000, 0, 1 }, + + //---------------------------------------------------------------------------------- + // C5.PS0 - Crypto P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "CRYPTO_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Do Nothing + }, + + //---------------------------------------------------------------------------------- + // C5.PS1 - Crypto P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "CRYPTO_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 1, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C5.PS2 - Crypto Core Performance: Core Clock Frequency + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "CRYPTO_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 1, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 0, 0 }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C6 - Video Encoder Engine Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 6, // Component Index + Buffer() + { + 0x96, 0x50, 0xBE, 0xE6, 0xEC, 0x55, 0x91, 0x48, // GUID: {E6BE5096-55EC-4891-884B-0760BFC533B6} + 0x88, 0x4B, 0x07, 0x60, 0xBF, 0xC5, 0x33, 0xB6 + }, + + "VIDEO_ENCODER_POWER_STATES", // Common Name + "HW_BLOCK_VIDEO", // Hw Block associated with this component + + Package() + { + "ENGINE", // Dxgkrnl Component Type + "VIDEO_ENCODER", + }, + + 3, // Number of F-States + 4, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 3 }, + Package() { "FSTATE", 1, "CLK_OFF", 10000, 0, 2 }, + Package() { "FSTATE", 2, "PWR_OFF", 100000, 0, 1 }, + + //---------------------------------------------------------------------------------- + // C6.PS0 - Video Encoder P-State Set: Reset + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "VIDEO_ENCODER_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Venus Core + }, + + //---------------------------------------------------------------------------------- + // C6.PS1 - Video Encoder P-State Set: Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "VIDEO_ENCODER_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 1, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C6.PS2 - Video Encoder Core Performance: Core Clock Frequency + // + // @Brief: + // Notes: + // - The use of a "CLOSEST" match for the highest frequency is defensive. Any attempt + // to request a frequency that's even 1 Hz higher than the maximum entry in Clkrgm's + // table will result in a silent failure and no change in clock frequency. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "VIDEO_ENCODER_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 7, // Num P-States in Set + 4, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 533000000, 0 }, + Package() { "PSTATE", 1, 444000000, 1 }, + Package() { "PSTATE", 2, 404000000, 2 }, + Package() { "PSTATE", 3, 330000000, 2 }, + Package() { "PSTATE", 4, 200000000, 2 }, + Package() { "PSTATE", 5, 100000000, 2 }, + Package() { "PSTATE", 6, 0, 3 }, + }, + + //---------------------------------------------------------------------------------- + // C6.PS3 - Video Encoder Performance: Bandwidth to EBI + // + // @Brief: + // AXI bandwidth values are represented by a max, min and step which covers all + // possible bandwidth values requested by video core for different decode and + // encode scenarios. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "VIDEO_ENCODER_AXI_PORT_BW", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 111, // Num P-States in Set + 108, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 22000000000, 0 }, + Package() { "PSTATE", 1, 21800000000, 0 }, + Package() { "PSTATE", 2, 21600000000, 0 }, + Package() { "PSTATE", 3, 21400000000, 0 }, + Package() { "PSTATE", 4, 21200000000, 0 }, + Package() { "PSTATE", 5, 21000000000, 0 }, + Package() { "PSTATE", 6, 20800000000, 0 }, + Package() { "PSTATE", 7, 20600000000, 0 }, + Package() { "PSTATE", 8, 20400000000, 0 }, + Package() { "PSTATE", 9, 20200000000, 0 }, + Package() { "PSTATE", 10, 20000000000, 0 }, + Package() { "PSTATE", 11, 19800000000, 0 }, + Package() { "PSTATE", 12, 19600000000, 0 }, + Package() { "PSTATE", 13, 19400000000, 0 }, + Package() { "PSTATE", 14, 19200000000, 0 }, + Package() { "PSTATE", 15, 19000000000, 0 }, + Package() { "PSTATE", 16, 18800000000, 0 }, + Package() { "PSTATE", 17, 18600000000, 0 }, + Package() { "PSTATE", 18, 18400000000, 0 }, + Package() { "PSTATE", 19, 18200000000, 0 }, + Package() { "PSTATE", 20, 18000000000, 0 }, + Package() { "PSTATE", 21, 17800000000, 0 }, + Package() { "PSTATE", 22, 17600000000, 0 }, + Package() { "PSTATE", 23, 17400000000, 0 }, + Package() { "PSTATE", 24, 17200000000, 0 }, + Package() { "PSTATE", 25, 17000000000, 0 }, + Package() { "PSTATE", 26, 16800000000, 0 }, + Package() { "PSTATE", 27, 16600000000, 0 }, + Package() { "PSTATE", 28, 16400000000, 0 }, + Package() { "PSTATE", 29, 16200000000, 0 }, + Package() { "PSTATE", 30, 16000000000, 0 }, + Package() { "PSTATE", 31, 15800000000, 0 }, + Package() { "PSTATE", 32, 15600000000, 0 }, + Package() { "PSTATE", 33, 15400000000, 0 }, + Package() { "PSTATE", 34, 15200000000, 0 }, + Package() { "PSTATE", 35, 15000000000, 0 }, + Package() { "PSTATE", 36, 14800000000, 0 }, + Package() { "PSTATE", 37, 14600000000, 0 }, + Package() { "PSTATE", 38, 14400000000, 0 }, + Package() { "PSTATE", 39, 14200000000, 0 }, + Package() { "PSTATE", 40, 14000000000, 0 }, + Package() { "PSTATE", 41, 13800000000, 0 }, + Package() { "PSTATE", 42, 13600000000, 0 }, + Package() { "PSTATE", 43, 13400000000, 0 }, + Package() { "PSTATE", 44, 13200000000, 0 }, + Package() { "PSTATE", 45, 13000000000, 0 }, + Package() { "PSTATE", 46, 12800000000, 0 }, + Package() { "PSTATE", 47, 12600000000, 0 }, + Package() { "PSTATE", 48, 12400000000, 0 }, + Package() { "PSTATE", 49, 12200000000, 0 }, + Package() { "PSTATE", 50, 12000000000, 0 }, + Package() { "PSTATE", 51, 11800000000, 0 }, + Package() { "PSTATE", 52, 11600000000, 0 }, + Package() { "PSTATE", 53, 11400000000, 0 }, + Package() { "PSTATE", 54, 11200000000, 0 }, + Package() { "PSTATE", 55, 11000000000, 0 }, + Package() { "PSTATE", 56, 10800000000, 0 }, + Package() { "PSTATE", 57, 10600000000, 0 }, + Package() { "PSTATE", 58, 10400000000, 0 }, + Package() { "PSTATE", 59, 10200000000, 0 }, + Package() { "PSTATE", 60, 10000000000, 0 }, + Package() { "PSTATE", 61, 9800000000, 0 }, + Package() { "PSTATE", 62, 9600000000, 0 }, + Package() { "PSTATE", 63, 9400000000, 0 }, + Package() { "PSTATE", 64, 9200000000, 0 }, + Package() { "PSTATE", 65, 9000000000, 0 }, + Package() { "PSTATE", 66, 8800000000, 0 }, + Package() { "PSTATE", 67, 8600000000, 0 }, + Package() { "PSTATE", 68, 8400000000, 0 }, + Package() { "PSTATE", 69, 8200000000, 0 }, + Package() { "PSTATE", 70, 8000000000, 0 }, + Package() { "PSTATE", 71, 7800000000, 0 }, + Package() { "PSTATE", 72, 7600000000, 0 }, + Package() { "PSTATE", 73, 7400000000, 0 }, + Package() { "PSTATE", 74, 7200000000, 0 }, + Package() { "PSTATE", 75, 7000000000, 0 }, + Package() { "PSTATE", 76, 6800000000, 0 }, + Package() { "PSTATE", 77, 6600000000, 0 }, + Package() { "PSTATE", 78, 6400000000, 0 }, + Package() { "PSTATE", 79, 6200000000, 0 }, + Package() { "PSTATE", 80, 6000000000, 0 }, + Package() { "PSTATE", 81, 5800000000, 0 }, + Package() { "PSTATE", 82, 5600000000, 0 }, + Package() { "PSTATE", 83, 5400000000, 0 }, + Package() { "PSTATE", 84, 5200000000, 0 }, + Package() { "PSTATE", 85, 5000000000, 0 }, + Package() { "PSTATE", 86, 4800000000, 0 }, + Package() { "PSTATE", 87, 4600000000, 0 }, + Package() { "PSTATE", 88, 4400000000, 0 }, + Package() { "PSTATE", 89, 4200000000, 0 }, + Package() { "PSTATE", 90, 4000000000, 0 }, + Package() { "PSTATE", 91, 3800000000, 0 }, + Package() { "PSTATE", 92, 3600000000, 0 }, + Package() { "PSTATE", 93, 3400000000, 0 }, + Package() { "PSTATE", 94, 3200000000, 0 }, + Package() { "PSTATE", 95, 3000000000, 0 }, + Package() { "PSTATE", 96, 2800000000, 0 }, + Package() { "PSTATE", 97, 2600000000, 0 }, + Package() { "PSTATE", 98, 2400000000, 0 }, + Package() { "PSTATE", 99, 2200000000, 0 }, + Package() { "PSTATE", 100, 2000000000, 0 }, + Package() { "PSTATE", 101, 1800000000, 0 }, + Package() { "PSTATE", 102, 1600000000, 0 }, + Package() { "PSTATE", 103, 1400000000, 0 }, + Package() { "PSTATE", 104, 1200000000, 0 }, + Package() { "PSTATE", 105, 1000000000, 0 }, + Package() { "PSTATE", 106, 800000000, 1 }, + Package() { "PSTATE", 107, 600000000, 1 }, + Package() { "PSTATE", 108, 400000000, 2 }, + Package() { "PSTATE", 109, 200000000, 2 }, + Package() { "PSTATE", 110, 0, 2 }, + }, + + + Package() + { + "PROVIDERS", + 1, // Number of providers + Package() + { + 4, // VIDEO_POWER_STATES + }, + }, + }, + + //---------------------------------------------------------------------------------- + // C7 - Internal (Secondary) Display Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 7, // Component Index + Buffer() + { + 0x28, 0xE6, 0x2B, 0xC4, 0xBC, 0xD6, 0x55, 0x47, // GUID: {C42BE628-D6BC-4755-BFD5-5AF776797228} + 0xBF, 0xD5, 0x5A, 0xF7, 0x76, 0x79, 0x72, 0x28 + }, + + "SECDISPLAY_POWER_STATES", // Common Name + "HW_BLOCK_MDP", // Hw Block associated with this component + + Package() + { + "DISPLAY", // Dxgkrnl Component Type + "INTERNAL2", + }, + + 2, // Number of F-States + 5, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 2 }, + Package() { "FSTATE", 1, "PWR_OFF", 1, 1, 1 }, + + //---------------------------------------------------------------------------------- + // C7.PS0 - Internal (Secondary) Display: MDP Reset Control + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "INTERNAL2_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset Display Core + }, + + //---------------------------------------------------------------------------------- + // C7.PS1 - Internal (Secondary) Display : MDP Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "INTERNAL2_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C7.PS2 - Internal (Secondary) Display : Power states for MDP scan-out HW + // + // @Brief: + // - Used to dynamically control MDP related clocks within a PState + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "INTERNAL2_SCAN_CONTROL", + "*", // HW Revisions + "DISPLAY_SOURCE_SCAN_CTRL", // Resource Type + 5, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 4, 2 }, // Vote for all scan-out resources + Package() { "PSTATE", 1, 3, 2 }, // Vote for only MDP, DSI 0 and DSI 1 scan-out resources + Package() { "PSTATE", 2, 2, 2 }, // Vote for only MDP and DSI 0 scan-out resources + Package() { "PSTATE", 3, 1, 2 }, // Vote for only MDP and DSI 1 scan-out resources + Package() { "PSTATE", 4, 0, 2 }, // Remove votes for all scan-out resources + }, + + //---------------------------------------------------------------------------------- + // C7.PS3 - Internal (Secondary) Display : MDP Core Clock Frequency + // + // @Brief: + // Notes: + // - This table reflects the frequency plan for the v1 part. + // - All core frequency votes are based on specific clock plan values and are cast + // 2 MHz below what we actually desire. This helps avoid potential issues with + // round-up when the actual clock frequency on real HW is slightly less than + // that which was advertized in the clock plan. + // - [NC] Temporarily moved all AHB bandwidth votes to F-states to help work around + // 64K size issue in the final AML. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "INTERNAL2_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 13, // Num P-States in Set + 4, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 430000000, 1 }, + Package() { "PSTATE", 1, 412500000, 1 }, + Package() { "PSTATE", 2, 344000000, 2 }, + Package() { "PSTATE", 3, 300000000, 2 }, + Package() { "PSTATE", 4, 275000000, 2 }, + Package() { "PSTATE", 5, 200000000, 2 }, + Package() { "PSTATE", 6, 171428571, 3 }, + Package() { "PSTATE", 7, 165000000, 3 }, + Package() { "PSTATE", 8, 150000000, 3 }, + Package() { "PSTATE", 9, 100000000, 3 }, + Package() { "PSTATE", 10, 85710000, 3 }, + Package() { "PSTATE", 11, 19200000, 3 }, + Package() { "PSTATE", 12, 0, 3 }, + }, + + //---------------------------------------------------------------------------------- + // C7.PS4 - Internal (Secondary) Display : Display Bandwidth to EBI + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 4, // P-State Set Index + "INTERNAL2_EBI_BANDWIDTH", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 43, // Num P-States in Set + 28, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 13326000000, 0 }, + Package() { "PSTATE", 1, 12926000000, 0 }, + Package() { "PSTATE", 2, 12526000000, 0 }, + Package() { "PSTATE", 3, 12126000000, 0 }, + Package() { "PSTATE", 4, 11726000000, 0 }, + Package() { "PSTATE", 5, 11326000000, 0 }, + Package() { "PSTATE", 6, 10926000000, 0 }, + Package() { "PSTATE", 7, 10526000000, 0 }, + Package() { "PSTATE", 8, 10126000000, 1 }, + Package() { "PSTATE", 9, 9600000000, 1 }, + Package() { "PSTATE", 10, 9200000000, 1 }, + Package() { "PSTATE", 11, 8800000000, 1 }, + Package() { "PSTATE", 12, 8400000000, 1 }, + Package() { "PSTATE", 13, 8000000000, 1 }, + Package() { "PSTATE", 14, 7600000000, 1 }, + Package() { "PSTATE", 15, 7200000000, 1 }, + Package() { "PSTATE", 16, 6800000000, 1 }, + Package() { "PSTATE", 17, 6400000000, 1 }, + Package() { "PSTATE", 18, 6000000000, 1 }, + Package() { "PSTATE", 19, 5600000000, 1 }, + Package() { "PSTATE", 20, 5200000000, 2 }, + Package() { "PSTATE", 21, 4800000000, 2 }, + Package() { "PSTATE", 22, 4400000000, 2 }, + Package() { "PSTATE", 23, 4000000000, 2 }, + Package() { "PSTATE", 24, 3600000000, 2 }, + Package() { "PSTATE", 25, 3200000000, 2 }, + Package() { "PSTATE", 26, 2800000000, 2 }, + Package() { "PSTATE", 27, 2400000000, 2 }, + Package() { "PSTATE", 28, 2000000000, 2 }, + Package() { "PSTATE", 29, 1600000000, 2 }, + Package() { "PSTATE", 30, 1500000000, 2 }, + Package() { "PSTATE", 31, 1400000000, 2 }, + Package() { "PSTATE", 32, 1300000000, 2 }, + Package() { "PSTATE", 33, 1200000000, 2 }, + Package() { "PSTATE", 34, 1100000000, 2 }, + Package() { "PSTATE", 35, 1000000000, 2 }, + Package() { "PSTATE", 36, 900000000, 2 }, + Package() { "PSTATE", 37, 800000000, 2 }, + Package() { "PSTATE", 38, 700000000, 2 }, + Package() { "PSTATE", 39, 600000000, 2 }, + Package() { "PSTATE", 40, 500000000, 2 }, + Package() { "PSTATE", 41, 400000000, 2 }, + Package() { "PSTATE", 42, 0, 2 }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C8 - Display Port Power States + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 8, // Component Index + Buffer() + { + 0xD2, 0xAE, 0x8D, 0x81, 0x63, 0x9E, 0xD5, 0x49, // GUID: {818DAED2-9E63-49D5-BD12-B0951F7B0F6B} + 0xBD, 0x12, 0xB0, 0x95, 0x1F, 0x7B, 0x0F, 0x6B + }, + + "DP_POWER_STATES", // Common Name + "HW_BLOCK_MDP", // Hw Block associated with this component + + Package() + { + "DISPLAY", // Dxgkrnl Component Type + "EXTERNAL1", + }, + + 2, // Number of F-States + 4, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 2 }, + Package() { "FSTATE", 1, "PWR_OFF", 1, 1, 1 }, + + //---------------------------------------------------------------------------------- + // C8.PS0 - DP: MDP Reset Control + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 0, // P-State Set Index + "EXTERNAL1_RESET", + "*", // HW Revisions + "RESET", // Resource Type + 2, // Num P-States in Set + 0, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Do Nothing + Package() { "PSTATE", 1, 0, 2 }, // Reset MDSS Core + }, + + //---------------------------------------------------------------------------------- + // C8.PS1 - External Display: MDP Footswitch override + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 1, // P-State Set Index + "EXTERNAL1_FOOTSWITCH_OVERRIDE", + "*", // HW Revisions + "FOOTSWITCH_OVERRIDE", // Resource Type + 2, // Num P-States in Set + 0xFFFFFFFF, // Initial P-State (i.e. none) + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 1, 2 }, // Footswitch On + Package() { "PSTATE", 1, 0, 2 }, // Footswitch Off + }, + + //---------------------------------------------------------------------------------- + // C8.PS2 - DP: MDP Core Clock Frequency + // + // @Brief: + // Notes: + // - This table reflects the frequency plan for the v1 part. + // - All core frequency votes are based on specific clock plan values and are cast + // 2 MHz below what we actually desire. This helps avoid potential issues with + // round-up when the actual clock frequency on real HW is slightly less than + // that which was advertized in the clock plan. + // - [NC] Temporarily moved all AHB bandwidth votes to F-states to help work around + // 64K size issue in the final AML. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 2, // P-State Set Index + "EXTERNAL1_CORE_CLOCK_CONTROL", + "*", // HW Revisions + "CORE_CLOCK", // Resource Type + 13, // Num P-States in Set + 4, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 430000000, 1 }, + Package() { "PSTATE", 1, 412500000, 1 }, + Package() { "PSTATE", 2, 344000000, 2 }, + Package() { "PSTATE", 3, 300000000, 2 }, + Package() { "PSTATE", 4, 275000000, 2 }, + Package() { "PSTATE", 5, 200000000, 2 }, + Package() { "PSTATE", 6, 171428571, 3 }, + Package() { "PSTATE", 7, 165000000, 3 }, + Package() { "PSTATE", 8, 150000000, 3 }, + Package() { "PSTATE", 9, 100000000, 3 }, + Package() { "PSTATE", 10, 85710000, 3 }, + Package() { "PSTATE", 11, 19200000, 3 }, + Package() { "PSTATE", 12, 0, 3 }, + }, + + //---------------------------------------------------------------------------------- + // C8.PS3 - DP: Display Bandwidth to EBI + // + // @Brief: + // Notes: + // - AXI port 0 is strictly used by the scanout logic today, so the bandwidth values + // in this table were selected to span the full range of potential scanout needs for + // 8064 in such a way that no request will be rounded up by more than 10%. The + // bottom end of the range is driven by the simple scenario of a single RGB layer on + // a VGA sized primary display: + // + // 640 * 400 * 60Hz * 4Bytes/pixel = 73,728,000 Bytes/Sec + // + // The top end of the range is meant to support the maximum allowable primary display + // resolution (i.e. WUXGA) with one RGB layer and one YUV layer, plus an DP display + // with one RGB layer and one YUV layer: + // + // 1920 * 1200 * 60Hz * 4Bytes/Pixel = 552,960,000 Bytes/Sec + // + 1920 * 1200 * 60Hz * 1.5Bytes/Pixel = 207,360,000 Bytes/Sec + // + 1920 * 1080 * 60Hz * 4Bytes/Pixel = 497,664,000 Bytes/Sec + // + 1920 * 1080 * 60Hz * 1.5Bytes/Pixel = 186,624,000 Bytes/Sec + // ----------------------- + // 1,444,608,000 Bytes/Sec + // + // Within the table, the arbitrated bandwidth values are each padded by 10 0.000000or + // headroom, and the instantaneous bandwidth values are padded by an additional 10% + // to help account for the bursty nature of scan-line fetches. + //---------------------------------------------------------------------------------- + // + Package() + { + "PSTATE_SET", + 3, // P-State Set Index + "EXTERNAL1_EBI_BANDWIDTH", + "*", // HW Revisions + "BANDWIDTH", // Resource Type + 43, // Num P-States in Set + 28, // Initial P-State + 0, // Stable Power P-State (i.e. none) + + // Voltage + // ID Value Level + // --- ---------- ----- + Package() { "PSTATE", 0, 13326000000, 0 }, + Package() { "PSTATE", 1, 12926000000, 0 }, + Package() { "PSTATE", 2, 12526000000, 0 }, + Package() { "PSTATE", 3, 12126000000, 0 }, + Package() { "PSTATE", 4, 11726000000, 0 }, + Package() { "PSTATE", 5, 11326000000, 0 }, + Package() { "PSTATE", 6, 10926000000, 0 }, + Package() { "PSTATE", 7, 10526000000, 0 }, + Package() { "PSTATE", 8, 10126000000, 1 }, + Package() { "PSTATE", 9, 9600000000, 1 }, + Package() { "PSTATE", 10, 9200000000, 1 }, + Package() { "PSTATE", 11, 8800000000, 1 }, + Package() { "PSTATE", 12, 8400000000, 1 }, + Package() { "PSTATE", 13, 8000000000, 1 }, + Package() { "PSTATE", 14, 7600000000, 1 }, + Package() { "PSTATE", 15, 7200000000, 1 }, + Package() { "PSTATE", 16, 6800000000, 1 }, + Package() { "PSTATE", 17, 6400000000, 1 }, + Package() { "PSTATE", 18, 6000000000, 1 }, + Package() { "PSTATE", 19, 5600000000, 1 }, + Package() { "PSTATE", 20, 5200000000, 2 }, + Package() { "PSTATE", 21, 4800000000, 2 }, + Package() { "PSTATE", 22, 4400000000, 2 }, + Package() { "PSTATE", 23, 4000000000, 2 }, + Package() { "PSTATE", 24, 3600000000, 2 }, + Package() { "PSTATE", 25, 3200000000, 2 }, + Package() { "PSTATE", 26, 2800000000, 2 }, + Package() { "PSTATE", 27, 2400000000, 2 }, + Package() { "PSTATE", 28, 2000000000, 2 }, + Package() { "PSTATE", 29, 1600000000, 2 }, + Package() { "PSTATE", 30, 1500000000, 2 }, + Package() { "PSTATE", 31, 1400000000, 2 }, + Package() { "PSTATE", 32, 1300000000, 2 }, + Package() { "PSTATE", 33, 1200000000, 2 }, + Package() { "PSTATE", 34, 1100000000, 2 }, + Package() { "PSTATE", 35, 1000000000, 2 }, + Package() { "PSTATE", 36, 900000000, 2 }, + Package() { "PSTATE", 37, 800000000, 2 }, + Package() { "PSTATE", 38, 700000000, 2 }, + Package() { "PSTATE", 39, 600000000, 2 }, + Package() { "PSTATE", 40, 500000000, 2 }, + Package() { "PSTATE", 41, 400000000, 2 }, + Package() { "PSTATE", 42, 0, 2 }, + }, + + + }, + + //---------------------------------------------------------------------------------- + // C9 - Dummy Component for WP Workaround + //---------------------------------------------------------------------------------- + // + Package() + { + "COMPONENT", + 9, // Component Index + Buffer() + { + 0xDF, 0x0B, 0xD4, 0x8D, 0xBD, 0x6F, 0xED, 0x45, // GUID: {8DD40BDF-6FBD-45ED-8538-711D434B6BA1} + 0x85, 0x38, 0x71, 0x1D, 0x43, 0x4B, 0x6B, 0xA1 + }, + + "ALWAYS_ACTIVE_WP", // Common Name + "HW_BLOCK_NONE", // Hw Block associated with this component + + Package() + { + "UNMANAGED", // Dxgkrnl Component Type + }, + + 1, // Number of F-States + 0, // Number of P-State Sets + + // Logical Transition Residency Nominal + // ID Power State Latency Requirement Power + // --- ----------- ---------- ----------- ------- + Package() { "FSTATE", 0, "ALL_ON", 0, 0, 1 }, + + + }, + }) + + + // + //========================================================================================= + // Chip-Specific Patches + //========================================================================================= + // + + //----------------------------------------------------------------------------------------- + // Patch for C1.PS3 when: + // ChipVersion >= 2.0 + //----------------------------------------------------------------------------------------- + // + Name (P001, + //---------------------------------------------------------------------------------- + // C1.PS3 - 3D Graphics Core P-State Set: Engine Controlled Core Clock + // + // @Brief: + //---------------------------------------------------------------------------------- + // + Package() + { + "ENGINE_PSTATE_SET", + 3, + "GRAPHICS_FREQ_CONTROL", + "CORE_CLOCK", // Resource Type + 9, // Num P-States in Set + 1, // Num CustomData fields in Set + TRUE, // Has Thermal Thresholds + 5, // Initial P-State + 3, // Stable Power P-State + + // Voltage + // ID Value Level Thermal Thresholds Custom Data Fields + // --- ---------- ----- -------------------- -------------------- + Package() { "PSTATE", 0, 710000000, 0, Package() { "GPU", 100, }, Package() { 416 , } }, + Package() { "PSTATE", 1, 675000000, 1, Package() { "GPU", 91, }, Package() { 384 , } }, + Package() { "PSTATE", 2, 596000000, 2, Package() { "GPU", 81, }, Package() { 320 , } }, + Package() { "PSTATE", 3, 520000000, 3, Package() { "GPU", 71, }, Package() { 256 , } }, + Package() { "PSTATE", 4, 414000000, 4, Package() { "GPU", 56, }, Package() { 192 , } }, + Package() { "PSTATE", 5, 342000000, 5, Package() { "GPU", 47, }, Package() { 128 , } }, + Package() { "PSTATE", 6, 247000000, 6, Package() { "GPU", 35, }, Package() { 64 , } }, + Package() { "PSTATE", 7, 180000000, 7, Package() { "GPU", 0, }, Package() { 48 , } }, + Package() { "PSTATE", 8, 0, 8, Package() { "GPU", 0, }, Package() { 0 , } }, + } + ) + + //----------------------------------------------------------------------------------------- + // Patch for C1.PS3 when: + // No other matching conditions + //----------------------------------------------------------------------------------------- + // + Name (P002, + //---------------------------------------------------------------------------------- + // C1.PS3 - 3D Graphics Core P-State Set: Engine Controlled Core Clock + // + // @Brief: + //---------------------------------------------------------------------------------- + // + Package() + { + "ENGINE_PSTATE_SET", + 3, + "GRAPHICS_FREQ_CONTROL", + "CORE_CLOCK", // Resource Type + 2, // Num P-States in Set + 1, // Num CustomData fields in Set + TRUE, // Has Thermal Thresholds + 0, // Initial P-State + 0, // Stable Power P-State + + // Voltage + // ID Value Level Thermal Thresholds Custom Data Fields + // --- ---------- ----- -------------------- -------------------- + Package() { "PSTATE", 0, 280000000, 0, Package() { "GPU", 0, }, Package() { 128 , } }, + Package() { "PSTATE", 1, 0, 1, Package() { "GPU", 0, }, Package() { 0 , } }, + } + ) + + + // + //========================================================================================= + // Chip-Specific Patch Logic + //========================================================================================= + // + + // Apply C1.PS3 patch + // + If (LGreaterEqual(\_SB.SIDV,0x00020000)) + { + // ChipVersion >= 2.0 + // + Store(P001, Index(DeRefOf(Index(RBUF, 4)), 14)) + } + Else + { + // All other chips + // + Store(P002, Index(DeRefOf(Index(RBUF, 4)), 14)) + } + + Return (RBUF) + } + + // Include Display ACPI extensions, which include panel configuration (_ROM) method + // + Include("display.asl") + + // Include display adapter configuration for secondary display + // + Include("display2.asl") + + // Include display adapter configuration for external display + // + Include("displayext.asl") + + NAME(_DOD, Package() + { + 0x00024321, + }) + + // Enumeration and device info for the AVStream child driver + // + Device (AVS0) + { + // The address for this device (Same as in _DOD, above) + // + Name(_ADR, 0x00024321) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + }) + Return (RBUF) + } + + Name (_DEP, Package(0x3) + { + \_SB_.MMU0, + \_SB_.IMM0, + \_SB_.VFE0 + }) + } + + //------------------------------------------------------------------------------ + // _STA method + // _STA method, would be used to enable/disable GPU device from uefi menu. + //------------------------------------------------------------------------------ + // + Method (_STA, 0x0) + { + Return (0x0f) + } + + //------------------------------------------------------------------------------ + // Child Device Info + // This method includes information for child devices + //------------------------------------------------------------------------------ + // + Method (CHDV) + { + Name (CHIF, Package() + { + 1, // Number of Child devices + Package() + { + "CHILDDEV", + 0, // Child ID + 0x24321, // ACPI UID + "QCOM_AVStream_850", // Hardware ID + 0, // Instance ID + "Qualcomm Camera AVStream Mini Driver", // Device Text + + Package() + { + "COMPATIBLEIDS", + 2, // Number of Compatible IDs + "VEN_QCOM&DEV__AVSTREAM", // Compatible ID 1 + "QCOM_AVSTREAM", // Compatible ID 2 + }, + }, + }) + Return (CHIF) + } + + //------------------------------------------------------------------------------ + // DP CC status method, 0:CC1(Normal plugin), 1:CC2(Inverted plugin), 2: Open(unplugged in) + //------------------------------------------------------------------------------ + // + Method (DPCC, 2, NotSerialized) + { + // Arg0 - Panel ID + + // Arg1 - Data size + + return (\_SB_.CCST) + } + + //------------------------------------------------------------------------------ + // DP Pin assignment method + // 0x00: No DP cable is connected + // 0x01: DFP_D(Downstream Facing Port DP) Pin A + // 0x02: DFP_D(Downstream Facing Port DP) Pin B + // 0x03: DFP_D(Downstream Facing Port DP) Pin C + // 0x04: DFP_D(Downstream Facing Port DP) Pin D + // 0x05: DFP_D(Downstream Facing Port DP) Pin E + // 0x06: DFP_D(Downstream Facing Port DP) Pin F + // 0x07: UFP_D(Upstream Facing Port DP) Pin A + // 0x08: UFP_D(Upstream Facing Port DP) Pin B + // 0x09: UFP_D(Upstream Facing Port DP) Pin C + // 0x0A: UFP_D(Upstream Facing Port DP) Pin D + // 0x0B: UFP_D(Upstream Facing Port DP) Pin E + //------------------------------------------------------------------------------ + // + + // Method (DPIN, 2, NotSerialized) + // { + // // Arg0 - Panel ID + + // // Arg1 - Data size + + // return (\_SB_.PINA) + // } + + Method (REGR) + { + Name (RBUF, Package() + { + Package() + { + "ForceMaxPerf", + 0, + }, + Package() + { + "ForceStablePowerSettings", + 0, + }, + Package() + { + "ForceActive", + 1, + }, + Package() + { + "DeferForceActive", + 0, + }, + Package() + { + "PreventPowerCollapse", + 0, + }, + Package() + { + "DisableThermalMitigation", + 0, + }, + Package() + { + "DisableTzMDSSRestore", // 8998 Does not need TZ MDSS restore of registers. + 1, + }, + Package() + { + "UseLowPTForGfxPerProcess", // Use Low TTBR for Graphics Per-process page table. + 1, + }, + Package() + { + "DisableCDI", + 1, + }, + Package() + { + "GPU64bAddrEnabled", // Enabled GPU 64bit addressing + 1, + }, + Package() + { + "MaxPreemptionOffsets", // Maximum number of Preemption offsets. + 128, + }, + Package() + { + "MaxRequiredDmaQueueEntry", // Required DMA queue entries. + 8, + }, + Package() + { + "SupportsSecureInAperture", // Supports secure surfaces in the Aperture segment. + 1, + }, + Package() + { + "ZeroFlagSupportInPTE", // Supports zero flag in PTE + 1, + }, + Package() + { + "SupportsCacheCoherency", // Supports System wide coherency. + 1, + }, + Package() + { + "SupportsSHMBridge", // Supports SHM Bridge registration. + 0, + }, + Package() + { + "SecureCarveoutSize", // SecureCarveout Size for DRM playback + 2097152, + }, + Package() + { + "UBWCEnable", // 0 = Disable , 1 = Enable + 0, + }, + Package() + { + "allowDrmAbove1080p", // Allow DRM playback above 1080p + 1, + }, + Package() + { + "ZeroPageLowAddr", // Lower address of zero marker page + 0x85F00000, + }, + Package() + { + "ZeroPageHighAddr", // Higher address of zero marker page + 0x0, + }, + Package() + { + "KeepUefiBuffer", + 1, + }, + Package() + { + "GRAPHICS", + Package() + { + "EnableSystemCache", // 0 = Disable , 1 = Enable + 1, + }, + Package() + { + "EnableSysCacheForGpuhtw", // 0 = Disable , 1 = Enable(enable SystemCache to take effect) + 1, + }, + Package() + { + "DCVS", + Package() + { + "Enable", // 0 = FALSE, 1 = TRUE + 1, + }, + Package() + { + "IncreaseFilterBw", // Hz / 65536 + 131072, + }, + Package() + { + "DecreaseFilterBw", // Hz / 65536 + 13107, + }, + Package() + { + "TargetBusyPct", // Percentage + 85, + }, + Package() + { + "SampleRate", // Hz + 60, + }, + Package() + { + "TargetBusyPctOffscreen", // Percentage + 75, + }, + Package() + { + "SampleRateOffscreen", // Hz + 20, + }, + Package() + { + "GpuResetValue", // Hz + 290000000, + }, + Package() + { + "BusResetValue", // MB/s + 1200, + }, + }, + Package() + { + "A6x", + Package() + { + "DisableICG", // 1 = Disable GPU Clock Gating + 0, + }, + Package() + { + "DisableGmuCG", // 1 = Disable GMU Clock Gating. GMU CG cannot be enabled when ICG is disabled. + 0, + }, + Package() + { + "EnableFallbackToDisableSecureMode", // 1 = Enable the fallback. Fallback is only supported with non secure TZ. + 0, + }, + Package() + { + "DisableCPCrashDump", // 1 = Disable the Crash Dumper + 0, + }, + Package() + { + "Preemption", // 1 = SW preemption, 16 (0x10) = L0, 26 (0x1A) = L1A, 27 (0x1B) = L1B, 18 (0x12) = L2 + 26, + }, + }, + }, + Package() + { + "VIDEO", + Package() + { + "EnableSystemCache", // 0 = Disable , 1 = Enable + 1, + }, + }, + Package() + { + "CRYPTO", + Package() + { + "EnableCryptoVA", + 1, + }, + }, + Package() + { + "DISPLAY", + Package() + { + "DisableMiracast", // Miracast Setting + 1, + }, + Package() + { + "EnableOEMDriverDependency", // OEM Driver Load Configuration + 0, + }, + Package() + { + "EnableBridgeDriverDependency", // Bridge Driver Load Configuration + 0, + }, + Package() + { + "DisableRotator", // Disable or Enable Rotator Engine + 0, + }, + Package() + { + "DisableMDPBLT", // Disable MDP BLT Engine + 1, + }, + Package() + { + "DisableExternal", // Disable External Display + 3, + }, + }, + }) + + Return (RBUF) + } +} diff --git a/dipper/nfc.asl b/dipper/nfc.asl new file mode 100755 index 0000000..8445d32 --- /dev/null +++ b/dipper/nfc.asl @@ -0,0 +1,172 @@ +// +// NFC entry. +// +Device(NFCD) +{ + Name(_HID, "NXP1001") + Name(_CID, "ACPI\NXP1001") + Alias(\_SB.PSUB, _SUB) + Name(_CRS, ResourceTemplate() + { + I2CSerialBus(0x28, ControllerInitiated, 400000, AddressingMode7Bit, "\\_SB.I2C4", 0, ResourceConsumer, , ) + GpioInt(Level, ActiveHigh, Exclusive, PullDefault, 0, "\\_SB.GIO0", 0, ResourceConsumer, , ) {63} + }) +// ESE SPI GPIO + Name(NFCS, ResourceTemplate() + { + GpioIO(Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GIO0", 0, ResourceConsumer, , ) {116} + }) +// NFCC VEN GPIO + Name(NFCP, ResourceTemplate() + { + GpioIO(Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GIO0", 0, ResourceConsumer, , ) {12} + }) + Scope(GIO0) + { + OperationRegion(NFPO, GeneralPurposeIO, Zero, One) + } + Field(\_SB_.GIO0.NFPO, ByteAcc, NoLock, Preserve) + { + Connection(\_SB_.NFCD.NFCP), + MGPE, 1 + } + Method(POON, 0x0, NotSerialized) + { + Store(One, MGPE) + } + Method(POOF, 0x0, NotSerialized) + { + Store(Zero, MGPE) + } +//NFCC FW DOWNLOAD GPIO + Name(NFCF, ResourceTemplate() + { + GpioIO(Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GIO0", 0, ResourceConsumer, , ) {88} // Download + }) + Scope(GIO0) + { + OperationRegion(NFFO, GeneralPurposeIO, Zero, One) + } + Field(\_SB_.GIO0.NFFO, ByteAcc, NoLock, Preserve) + { + Connection(\_SB_.NFCD.NFCF), + MGFE, 1 + } + Method(FWON, 0x0, NotSerialized) + { + Store(One, MGFE) + } + Method(FWOF, 0x0, NotSerialized) + { + Store(Zero, MGFE) + } + Method(_DSM, 0x4, NotSerialized) + { + Store("Method NFC _DSM begin", Debug) + If(LEqual(Arg0, Buffer(0x10) + { + 0xc4, 0xf6, 0xe7, 0xa2, 0x38, 0x96, 0x85, 0x44, 0x9f, 0x12, 0x6b, 0x4e, + 0x20, 0xb6, 0x0d, 0x63 + })) + { + If(LEqual(Arg2, Zero)) + { + Store("Method NFC _DSM QUERY", Debug) + If(LEqual(Arg1, One)) + { + \_SB_.NFCD.POOF() + Sleep(0x14) + Return(Buffer(One) + { + 0x0f + }) + } + } + If(LEqual(Arg2, 0x2)) + { + Store("Method NFC _DSM SETPOWERMODE", Debug) + If(LEqual(Arg3, One)) + { + \_SB_.NFCD.POON() + Sleep(0x14) + } + If(LEqual(Arg3, Zero)) + { + \_SB_.NFCD.POOF() + Sleep(0x14) + } + } + If(LEqual(Arg2, One)) + { + Store("Method NFC _DSM SETFWMODE", Debug) +// +// Set the firmware mode to ON. +// + If(LEqual(Arg3, One)) + { + \_SB_.NFCD.FWON() +// +// Provide any delay required by the controller before toggling the power GPIO line. +// + Sleep(0x14) + \_SB_.NFCD.POOF() + Sleep(0x14) + \_SB_.NFCD.POON() + Sleep(0x14) + } +// +// Set the firmware mode to OFF. +// + If(LEqual(Arg3, Zero)) + { + \_SB_.NFCD.FWOF() + Sleep(0x14) + \_SB_.NFCD.POOF() + Sleep(0x14) + \_SB_.NFCD.POON() + Sleep(0x14) + } + } + If(LEqual(Arg2, 0x3)) + { + Store("Method NFC _DSM EEPROM Config", Debug) + Return(Buffer(0x13) + { + 0x9c, 0x1f, 0x38, 0x19, 0xa8, 0xb9, 0x4b, 0xab, 0xa1, 0xba, 0xd0, 0x20, + 0x76, 0x88, 0x2a, 0xe0, 0x03, 0x01, 0x11 + }) + } + } + } +//PEP Proxy Support + Name(PGID, Buffer(10) {"\\_SB.NFCD"}) // Device ID buffer - PGID( Pep given ID ) + Name(DBUF, Buffer(DBFL) {}) // Device ID buffer - PGID( Pep given ID ) + CreateByteField(DBUF, 0x0, STAT) // STATUS 1 BYTE + // HIDDEN 1 BYTE ( SIZE ) + CreateByteField(DBUF, 2, DVAL ) // Packet value, 1 BYTES Device Status + CreateField(DBUF, 24, 160, DEID) // Device ID, 20 BYTES(160 Bits) + Method (_S1D, 0) { Return (3) } // S1 => D3 + Method (_S2D, 0) { Return (3) } // S2 => D3 + Method (_S3D, 0) { Return (3) } // S3 => D3 + + Method(_PS0, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(0, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } + Method(_PS3, 0x0, NotSerialized) + { + Store(Buffer(ESNL){}, DEID) + Store(3, DVAL) + Store(PGID, DEID) + If(\_SB.ABD.AVBL) + { + Store(DBUF, \_SB.PEP0.FLD0) + } + } +} diff --git a/dipper/panelcfg.asl b/dipper/panelcfg.asl new file mode 100755 index 0000000..abeb2bb --- /dev/null +++ b/dipper/panelcfg.asl @@ -0,0 +1,89 @@ +Name (PCFG, Buffer (){ +" +SAMSUNG_EA8074_NOTCH_FHD +Samsung ea8074 Notch Single DSI Command Mode Panel (1080x2248 24bpp) + +1080 +56 +56 +18 +0 +0 +0 +2248 +26 +24 +12 +0 +0 +0 +False +False +False +0x0 + + +9 +3 + + +2 +0 +36 +1 +4 +0x3C0000 +False +False +True +1 +00 +True +True +True +2248 +2248 +7 +True +7 +True + + +05 11 00 +39 2B 00 00 08 c7 +39 F0 5A 5A +39 EF F0 31 00 33 31 14 35 +39 B0 01 +39 BB 03 +39 B0 4F +39 CB 00 +39 B0 6B +39 CB 00 +39 F7 03 +39 B0 05 +39 B1 10 +39 B0 02 +39 D5 02 17 54 14 +39 F0 A5 A5 +39 F0 5A 5A +39 Fc 5A 5A +39 D2 9F F0 +39 B0 0E +39 d2 70 +39 b0 04 +39 d2 20 +39 F0 A5 A5 +39 Fc A5 a5 +39 35 00 +39 51 00 00 +39 53 20 +39 55 00 +05 29 00 + + +3 +1 +430000 +323 +100 400000 1 0 +"}) diff --git a/dipper/panelcfg2.asl b/dipper/panelcfg2.asl new file mode 100755 index 0000000..02adcb3 --- /dev/null +++ b/dipper/panelcfg2.asl @@ -0,0 +1,6 @@ +// +// This file contains the Panel configuration for secondary display +// +// Panel configuration format is similar to primary panel in panelcfg.asl +// +Name (PCFG, Buffer() {0x0} ) diff --git a/dipper/panelcfgext.asl b/dipper/panelcfgext.asl new file mode 100755 index 0000000..a39fea6 --- /dev/null +++ b/dipper/panelcfgext.asl @@ -0,0 +1,7 @@ +// +// This file contains the Panel configuration for external display +// +// Panel configuration format is similar to primary panel in panelcfg.asl +// + +Name (PCFG, Buffer() {0x0} ) diff --git a/dipper/pep.asl b/dipper/pep.asl new file mode 100755 index 0000000..de49c9d --- /dev/null +++ b/dipper/pep.asl @@ -0,0 +1,12 @@ +//=========================================================================== +// +// DESCRIPTION +// The PEP Device & Driver Related Configuration +// +//=========================================================================== + +// Resources by area +Include("../Common/pep_common.asl") +Include("cust_camera_resources.asl") +//Include("nfc_resources.asl") //NFC +Include("cust_touch_resources.asl") diff --git a/dipper/pep_defaults.asl b/dipper/pep_defaults.asl new file mode 100755 index 0000000..c7b117d --- /dev/null +++ b/dipper/pep_defaults.asl @@ -0,0 +1,70 @@ +//=========================================================================== +// +// DESCRIPTION +// This file contains default resource information. These are applied at either +// PEP boot time, on the ScreenOn event or on demand by the PEP driver. +// +//=========================================================================== + +Scope(\_SB.PEP0) +{ + Method(LDRS){ + return(NDRS) + } + + Name( NDRS, + /** + * The default resources package is used by PEP to handle system default resources. + * Rather than having to declare them all in the SDF declaration, you define resources + * separately and annotate them by functionality. At runtime, the parsed resources + * will be placed into separate components within the SDF device node. + * + * The expected hiearchy of this package: + * DEFAULT_RESOURCES + * (WORKAROUND|OPTIMIZATION) + * String = Name + * For debugging and querying -- keep it short + * String = "BOOT", "SCREENON", "DEMAND" + * When to activate these resources + * RESOURCES + * The list of resources to activate for this set workaround / optimization + * + */ + + package(){ + "DEFAULT_RESOURCES", + + package() + { + "OPTIMIZATION", + "CPU_CNOC_VOTE", + "BOOT", + + package() + { + "RESOURCES", + + package() {"BUSARB", package() {3, "ICBID_MASTER_APPSS_PROC", "ICBID_SLAVE_CLK_CTL", 1, 1, "SUPPRESSIBLE" }}, + + package() + { + "PMICVREGVOTE", // PMIC VREG resource + package() + { + "PPP_RESOURCE_ID_BUCK_BOOST1_B", + 12, // Voltage Regulator type 12 = BOB + 0, // Voltage = 0V + 0, // SW Enable = Disable + 2, // BOB Mode = Auto + "HLOS_DRV", // Optional: DRV Id (HLOS_DRV / DISPLAY_DRV) + "SUPPRESSIBLE", // Optional: Set Type (REQUIRED / SUPPRESSIBLE) + } + }, + // TZ requirement for HW DRM + Package(){"CLOCK", Package(){"gcc_disp_ahb_clk", 1}},// enable clock + Package(){"CLOCK", Package(){"gcc_disp_ahb_clk", 9,8}},// mark suppressible + Package(){"CLOCK", Package(){"gcc_disp_ahb_clk", 9,12}},// always ON + }, + }, + }) +} diff --git a/dipper/pep_tsens.asl b/dipper/pep_tsens.asl new file mode 100755 index 0000000..0ba4a07 --- /dev/null +++ b/dipper/pep_tsens.asl @@ -0,0 +1,228 @@ +Scope(\_SB.PEP0) +{ + Method(CTSN) + { + return (THSD) + } + + Method(PEPH) + { + Return(Package() + { + "ACPI\\VEN_QCOM&DEV_0237", + }) + } + + Method(BCLH) + { + Return(Package() + { + "ACPI\\VEN_QCOM&DEV_0294", + }) + } + + // Thermal sensors PL specific configurations + Name(THSD, + + Package() + { + // Below package contains a list of all the identified physical thermal sensors mapped to unique HIDs + // + Package() + { + 21, //Total number of thermal physical sensors + + // sensor HID, sensor number associated to HID + Package() {"ACPI\\VEN_QCOM&DEV_027F", 0}, + Package() {"ACPI\\VEN_QCOM&DEV_0280", 1}, + Package() {"ACPI\\VEN_QCOM&DEV_0281", 2}, + Package() {"ACPI\\VEN_QCOM&DEV_0282", 3}, + Package() {"ACPI\\VEN_QCOM&DEV_0283", 4}, + Package() {"ACPI\\VEN_QCOM&DEV_0284", 5}, + Package() {"ACPI\\VEN_QCOM&DEV_0285", 6}, + Package() {"ACPI\\VEN_QCOM&DEV_0286", 7}, + Package() {"ACPI\\VEN_QCOM&DEV_0287", 8}, + Package() {"ACPI\\VEN_QCOM&DEV_0288", 9}, + Package() {"ACPI\\VEN_QCOM&DEV_0289", 10}, + Package() {"ACPI\\VEN_QCOM&DEV_02AB", 11}, + Package() {"ACPI\\VEN_QCOM&DEV_02AC", 12}, + Package() {"ACPI\\VEN_QCOM&DEV_02AD", 13}, + package() {"ACPI\\VEN_QCOM&DEV_02AE", 14}, + Package() {"ACPI\\VEN_QCOM&DEV_02AF", 15}, + Package() {"ACPI\\VEN_QCOM&DEV_02C8", 16}, + Package() {"ACPI\\VEN_QCOM&DEV_02C9", 17}, + Package() {"ACPI\\VEN_QCOM&DEV_02CA", 18}, + Package() {"ACPI\\VEN_QCOM&DEV_02CB", 19}, + Package() {"ACPI\\VEN_QCOM&DEV_02CC", 20}, + }, + + // TSENSLIST Package + // This package contains "lists" of thermal sensors + // each list maps to a virtual thermal sensor + // Always the first package should be BIG CPU, second one is LITTLE CPU and third one is ALL CPU SENSOR lists. + // Do not interchage inside packages. Always add new sensor list package at the end. + + Package() + { + 3, //Number of virtual sensors. + + Package() // sensors associated with Little CPU + { + "ACPI\\VEN_QCOM&DEV_02B0", + 21, // virtual sensor ID + 5, //Little cpu sensors + Package () {1, 2, 3, 4, 5}, + }, + + Package() // sensors associated with Big CPU + { + "ACPI\\VEN_QCOM&DEV_02B1", + 22, // virtual sensor ID + 5, //Big cpu sensors + Package () {6, 7, 8, 9, 10}, // as per thermal floor plan + }, + + Package() // All MSM sensors + { + "ACPI\\VEN_QCOM&DEV_02B2", + 23, // virtual sensor ID + 21, //It should be total number of sensors. + Package () {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, + }, + }, + + // Sensor HID to Vadc thermistor mapping package + // INX and this needs to be in sync + // channel list/names need to obtained from tsens team + Package () + { + 10, //Number of VADC channels + + // channels name sensor HID, Sensor number ADC type + Package() {"SYS_THERM1", "ACPI\\VEN_QCOM&DEV_0299", 0, 0}, //vadc = 0, rradc = 1 + Package() {"SYS_THERM2", "ACPI\\VEN_QCOM&DEV_029A", 1, 0 }, + Package() {"PA_THERM", "ACPI\\VEN_QCOM&DEV_029B", 2, 0 }, + Package() {"PA_THERM1", "ACPI\\VEN_QCOM&DEV_029C", 3, 0 }, + Package() {"SYS_THERM3", "ACPI\\VEN_QCOM&DEV_029D", 4, 0 }, + Package() {"PMIC_THERM", "ACPI\\VEN_QCOM&DEV_029E", 5, 0 }, + Package() {"SKIN_THERM", "ACPI\\VEN_QCOM&DEV_029F", 6, 1 }, + Package() {"PMIC_TEMP2", "ACPI\\VEN_QCOM&DEV_02A0", 7, 1 }, + Package() {"CHG_TEMP", "ACPI\\VEN_QCOM&DEV_02EE", 8, 1 }, + Package() {"BATT_THERM", "ACPI\\VEN_QCOM&DEV_02EF", 9, 1 }, + }, + + // Thermal Restriction data package + // high/low trigger point for each thermal restriction + // ID has to match to one of below enum from PEP_Themal_common.h + //typedef enum _INT_RESTR_ID + //{ + // FAST_THERMAL_MTG_RESTR_B_ID = 0x01, //Throttle just the big cluster to NOM + // LOW_TEMP_VOLTAGE_RESTR_ID = 0x02, //Vdd restriction at < 5C + // HIGH_TEMP_BOOST_RESTR_ID = 0x03, //Unused- Turn off Correlation + // NORMAL_TEMP_CL_RESTR_ID = 0x04, //8909 - Current Limiting - Disabled + // HIGH_TEMP_CL_RESTR_ID = 0x05, //8909 - Current Limiting - Disabled + // VERY_HIGH_TEMP_CL_RESTR_ID = 0x06, //8909 - Current Limiting - Disabled + // MAX_PERF_LIMITING_RESTR_ID = 0x7, //8994 - Num cores based perf limiting + // FAST_THERMAL_MTG_RESTR_L_ID = 0x8, //Throttle Little clusters to NOM + // INVALID_RESTR_ID = 0xffffffff, + //} INT_RESTR_ID, *PINT_RESTR_ID; + // + + Package () + { + 1, // number of Thermal Restrictions + Package () + { + 2, // tsensList. 2 indicates third package in TSENSLIST Package. In this case its All CPU sensors list + 2780, // Restriction ON temperature. ACPI uses 10s of K as temperatures, so 0C = 2730 ACPI UNITS. 2730+50=2780. + 2830, // Restriction OFF temperature. 100 + 2730 = 2830. + 2, // 2 - LOW_TEMP_VOLTAGE_RESTR_ID, Vdd restriction at < 5C + 1, // Restriction enabled = 1, disabled = 0. + }, + }, + + //QMI clients + Package () + { + 4, // Number Of QMI Clients. + Package () + { + "cpuv_restriction_cold", //mitigation device name + 1, //restriction ON = 1 and RESTRICTN OFF = 0 + 0, //MODEM QMI INSTANCE ID = 0 + }, + Package () + { + "cpuv_restriction_cold", //mitigation device name + 1, //restriction ON = 1 and RESTRICTN OFF = 0 + 1, //ADSP QMI INSTANCE ID = 1 + }, + Package () + { + "cpuv_restriction_cold", //mitigation device name + 1, //restriction ON = 1 and RESTRICTN OFF = 0 + 0x43, //CDSP QMI INSTANCE ID = 0x43 + }, + Package () + { + "cpuv_restriction_cold", //mitigation device name + 1, //restriction ON = 1 and RESTRICTN OFF = 0 + 0x53, //SLPI QMI INSTANCE ID = 0x53 + }, + }, + + // PPP PMIC VREG clients: ACPI is being parsed in the order defined in PEP_Thermal_Common.h + // Client info will be parsed incorrectly, if this package is removed. + Package () + { + 0, + }, + + // LTVR Package having 3 sub-packages: + // 1) Rail type from enum RAIL_TYPE in PEP_Thermal_Common.h + // 2) Voting type - available options are EnableKraitVFC(0), VoteViaPPP(1), VoteViaQMI(2), VoteViaAOP(3) and VoteViaCallBackObj(4) + // 3) Client subpackage number for Voting type clients package + // VoteViaAOP + // AOP does not require rail type to vote during LTVR. + // It just needs an event with value on or off and it places NOM vote on cx, mx & ebi. + // Only cx is added to get callback in LTVR. + // VoteViaCallBackObj + // LTVR callback notifies to all the registered clients. it is independent of rail type and voting type. + // + + Package () // LTVR VFC vote table + { + 7, // Available Rails + Package() { 0, //KRAIT = 0, + 0, //EnableKraitVFC = 0 + 0, // NULL + }, + Package() { 1, //CX = 1, + 3, //VoteViaAOP = 3 + 0, // NULL : Client data is not required; + }, + Package() { 3, //MSS = 3, + 2, //VoteViaQMI = 2 + 0, // 0 represents first package in QMI clients list + }, + Package() { 4, //ADSP = 4, + 2, //VoteViaQMI = 2 + 1, // 1 represents second package in QMI clients list + }, + Package() { 6, //CDSP = 6, + 2, //VoteViaQMI = 2 + 2, // 2 represents third package in QMI clients + }, + Package() { 8, //SLPI = 8, + 2, //VoteViaQMI = 2 + 3, // 3 represents forth package in QMI clients + }, + Package() { 2, //GFX = 2, NOP because call backs will be notified for all the registered clients. + // No need for separate rail entry for each of the rails which are relying on call backs. + 4, //VoteViaCallBackObj = 4. + 0, // NOP. + }, + } + } + ) +} diff --git a/dipper/plat_win_mproc.asl b/dipper/plat_win_mproc.asl new file mode 100755 index 0000000..07a6563 --- /dev/null +++ b/dipper/plat_win_mproc.asl @@ -0,0 +1,38 @@ +Scope(\_SB.PILC) +{ + Method (_SUB) { + return(\_SB.PSUB) + } +} + +Scope(\_SB.AMSS) +{ + Method (_SUB) { + return(\_SB.PSUB) + } +} + +//Disabling SCSS +Scope(\_SB.SCSS) +{ + Method(_STA, 0) + { + Return (Zero) + } +} + +Scope(\_SB.CDSP) +{ + Method(_STA, 0) + { + Return (0x0F) + } +} + +Scope(\_SB.ADSP) +{ + Method(_STA, 0) + { + Return (0x0F) + } +} diff --git a/dipper/pmic_batt.asl b/dipper/pmic_batt.asl new file mode 100755 index 0000000..dfde3aa --- /dev/null +++ b/dipper/pmic_batt.asl @@ -0,0 +1,552 @@ +// This file contains the Power Management IC (PMIC) +// ACPI device definitions, configuration and look-up tables. +// + +Include("cust_pmic_batt.asl") + + // PMIC EIC + //Device (PEIC) + //{ + // Name (_HID, "QCOM02D3") + // Alias(\_SB.PSUB, _SUB) + // Method (_CRS, 0x0, NotSerialized) { + // Name (RBUF, ResourceTemplate () { + // // SMB1380 + // I2CSerialBus( 0x08, , 400000,AddressingMode7Bit, "\\_SB.IC11",,,,) + // }) + // Return (RBUF) + // } + // Method (PMCF) { + // Name (CFG0, + // Package(){ + // //Charger Info + // 0, // I2c Index - Resource Index + // 2, // Charger IC Type - PLAT_CONFIG_CHG_IC_SMB1380 + // }) + // Return (CFG0) + // } + // + // Method (_STA) { + // Return (0xB) // Device is installable, functional & should not be visible in OSPM/Device Manager + // } + //} + + // + // PMIC Battery Manger Driver + // + Device (PMBT) { + Name (_HID, "QCOM0264") + Alias(\_SB.PSUB, _SUB) + Name (_DEP, Package(0x2) { + \_SB_.PMIC, + \_SB_.ADC1, + //\_SB_.PEIC + }) + + Method (_STA) { + Return (0xF) // Device is installable, functional & should not be visible in OSPM/Device Manager + } + + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () + { + //GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,) {208} // 0x80 - PM_INT__SCHG_CHGR__CHGR_ERROR_RT_STS - Charger Error Interrupt + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {336} // 0x210 - PM_INT__FG_BCL__IBT_HI - IBAT greater than threshold Interrupt. + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {337} // 0x211 - PM_INT__FG_BCL__IBT_THI - VBatt less than threshold Interrupt + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {352} // 0x220 - PM_INT__FG_MEM_IF__IMA_RDY - MEMIF access Interrupt + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {215} // 0x87 - PM_INT__SCHG_CHGR__CHGR_7 - Termination Current Interrupt + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {209} // 0x81 - PM_INT__SCHG_CHGR__CHARGING_STATE_CHANGE - Charger Inhibit Interrupt + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {329} // 0x209 - PM_INT__FG_BATT_INFO__VBT_LOW - VBAT_LOW Interrupt + //GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,) {240} // 0xA0 - PM_INT__SCHG_DC__DCIN_COLLAPSE - Qi Wireless Charger Interrupt + GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {331} // 0x20B - PM_INT__FG_BATT_INFO__BT_MISS - BATT_MISSING Interrupt + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {237} // 0x9D - PM_INT__SCHG_USB__USBIN_SOURCE_CHANGE - AICL_DONE IRQ (Rising Only) + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {232} // 0x98 - PM_INT__SCHG_USB__USBIN_COLLAPSE - USB_UV IRQ (Rising Only) + //GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {322} // 0x202 - PM_INT__FG_BATT_SOC__BSOC_DELTA - FULL_SOC Interrupt + //GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {323} // 0x203 - PM_INT__FG_BATT_SOC__MSOC_DELTA - EMPTY_SOC Interrupt + // GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {213} // 0x85 - PM_INT__SCHG_CHGR__FG_FVCAL_QUALIFIED - FVCAL_QUALIFIED IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {224} // 0x90 - PM_INT__SCHG_BATIF__BAT_TEMP - Jeita limit interrupt + + }) + Return (RBUF) + } + + //ACPI methods for Battery Manager Device + Method (BMNR) { + Name (CFG0, + Package(){ + 1, //* 0: Select Platform: 0- No HW, 1- SMChg+FGGge, 2- SMB3pChg+SMB3pGge, 3- LBChg+VMBMS + 0, //* 1: Error State Handling: 0- Don�t Shutdown, 1- Shutdown + 1, //* 2: Listen to BatteryClass: 0- No 1- Yes + 0, //* 3: Test Mode Power Flag: 0- Discharging, 1- PowerOnline+Charging + "CUST_PMIC" //* 4: cust_pmic config identifier + }) + Store(CUST, Index(CFG0, 4)) + Return (CFG0) + } + + //ACPI methods for Timer + Method (BTIM) { + Name (CFG0, + Package(){ + 30000, // Charging Heartbeat Timer + 10000, // Charging Tolerable Delay + 300000, // Discharging Heartbeat Timer + 120000, // Discharging Tolerable Delay + 0, // Poll Timer , 0=Timer not used. + 0, // Poll Tolerable Delay + 28080000, //Charging Timeout (TDone) Timer + 0, //Charging Timeout(TDone) Tolerable Delay + }) + Return (CFG0) + } + + + //ACPI methods for Battery Info + Method (BBAT) { + Name (CFG0, + Package(){ + 1, //* 0: Battery Technology + 0x4C494F4E, //* 1: Battery Chemistry: hex(LION) + 0xFFFFFFFF, //* 2: BFCC: (mWh), Design Capacity + 0xFFFFFFFF, //* 3: BFCC: (mWh), Full Charge Capacity + 0xFFFFFFFF, //* 4: PCT1: (% of FCC), Default Alert 1 + 0xFFFFFFFF, //* 5: PCT2: (% of FCC), Default Alert 2 + "QCOMBATT01", //* 6: Device Name + "Qualcomm", //* 7: Manufacture Name + "QCOMBAT01_07012011", //* 8: Battery Unique ID + "07012011", //* 9: Battery Serial Number + 19, //* 10: Battery Manufacture Date + 04, //* 11: Battery Manufacture Month + 2014 //* 12: Battery Manufacture Year + }) + //Local2 = Default Alert1 = PCT1 * BFCC / 100 + Multiply(PCT1,BFCC,Local0) + Divide(Local0, 100, Local1, Local2) + //Local3 = Default Alert2 = PCT2 * BFCC / 100 + Multiply(PCT2,BFCC,Local0) + Divide(Local0, 100, Local1, Local3) + Store(BFCC, Index(CFG0, 2)) + Store(BFCC, Index(CFG0, 3)) + Store(Local2, Index(CFG0, 4)) + Store(Local3, Index(CFG0, 5)) + Return (CFG0) + } + + //ACPI methods for Proprietary chargers + Method (BPCH) { + Name (CFG0, + Package(){ + 3000, // QC2.0 charger current = 3000mA + 3000, // QC3.0 charger current = 3000mA + 1500 // Invalid Wall charger current = 1500mA + }) + Return (CFG0) + } + + //ACPI methods for foldback chargers + Method (BFCH) { + Name (CFG0, + Package(){ + 1, // Feature enable/disable + 5, // No of consecutive times charger attach/detach + 5000, // msecs, Time elapsed between attach/detach + 900, // mA, Current setting for foldback charger + }) + Return (CFG0) + } + + //ACPI methods for coin cell charger + Method (BCCC) { + Name (CFG0, + Package(){ + 1, //Enable coin cell charger; 1 = enable, 0 = disable + 0, // RSET, 0=2K1, 1=1K7, 2=1K2, 3 = 0K8 + 0 // VSET, 0=2V5, 1=3V2, 2=3V1, 3=3V0 + }) + Return (CFG0) + } + + //ACPI methods for Recharge/Maintenance Mode + Method (BRCH) { + Name (CFG0, + Package(){ + 100, // Delta V Recharge threshold = 100mV + 0 // Delta V Recharge Reduction below Normal= 0mV + }) + Return (CFG0) + } + + //ACPI methods for Qi Charging + Method (_BQI) { + Name (CFG0, + Package(){ + 0, + }) + Return (CFG0) + } + + //ACPI methods for Interrupt Name + Method (BIRQ) { + Name (CFG0, + Package(){ + //"ChgError", //Charger Error + //"BclIrq1", //IBAT greater than threshold IRQ + //"BclIrq2", // VBAT less than threshold IRQ + //"MEMIFaccess", //MEMIF access granted IRQ + //"TccReached", // Termination Current IRQ + // "ChargerInhibit" // Charger Inhibit IRQ + "VbatLow", // VBAT LOW IRQ + //"QiWlcDet", // Qi charging + "BattMissing", // BATT_MISSING IRQ + "AiclDone", // AICL Done + // "UsbUv", //USB UV + //"SOCFull", //SOC Full IRQ + //"SOCEmpty", //SOC Empty IRQ + //"FvCal", //FVCAl IRQ + "JeitaLimit" //JEITA limit IRQ + }) + Return (CFG0) + } + //ACPI methods for Platform File + Method (BPLT) { + Name (CFG0, + Package(){ + 1024, //* 0: ACPI Version + 0xFFFFFFFF, //* 1: VNOM: (mV), Nominal Battery Voltage + 0xFFFFFFFF, //* 2: VLOW: (mV), Low Battery Voltage + 0xFFFFFFFF, //* 3: EMPT: (mV), VcutOff + 0xFFFFFFFF, //* 4: DCMA: (mA), DC Current + 1, //* 5: ChargePath Priority: Select 0 for DC, 1 for USB + 50, //* 6: RSLOW for maxFlashCurrentPrediction + 50, //* 7: RPARA for maxFlashCurrentPrediction + 5000, //* 8: VINFLASH for maxFlashCurrentPrediction + 8, //* 9: FlashParam for maxFlashCurrentPrediction + 1, //* 10: AFP Mode Supported + 80, //* 11: AFP Trigger Max Battery Temp (+80 deg C) + 0xFFFFFFEC, //* 12: AFP Trigger Min Battery Temp (-20 deg C) + 72, //* 13: Watchdog timer in secs + 100, //* 14: Charger iterm 100 mA for now + 30, //* 15: SRAM logging timer + 5, //* 16: VBATT average Window Size + 6, //* 17: Emergency Shutdown Initial SOC + 500, //* 18: SoC convergent point + 126, //* 19: LM_Threshold + 400, //* 20: MH_Threshold + 0xFFFFFFFF, //* 21: BOCP: (mA), OCP current used in BCL + 750, //* 22: soc (75%) below which no soc linearization even in CV charging + 1, //* 23: BMD - Battery Missing Detection Source when source is attached: BATT_ID (1=BATT_ID, 4=HW Misssing Algorithm) + 2, //* 24: ibat src sensing : 0 for batfet and 1 for external sensing + 50, //* 25: IFGD: (mA), FG Iterm delta; (iterm + this value) determines when FG report 100% + 10, //* 26: VFGD: (mV), CC to CV Vdelta; (Vfloat - this value) determine when FG report 100% + 1, //* 27: 0 - disable SOC linearization; 1 (nonzero): enable SOC linearization + 0xFFFFFFEC, //* 28: (Celcius), Temperature threshold do have different SOC slope limiter + 10, //* 29: (milli%) - SOC slope limiter when charging and at lower temperature than threshold + 10, //* 30: (milli%) - SOC slope limiter when charging and at higher temperature than threshold + 10, //* 31: (milli%) - SOC slope limiter when discharging and at lower temperature than threshold + 10, //* 32: (milli%) - SOC slope limiter when discharging and at higher temperature than threshold + 1, //* 33: 0 - disable FCC learning; 1 (nonzero): enable FCC leearning + 150, //* 34: maximum starting SOC (in tenth percent)at which FCC learning would be turned on during charging + 100, //* 35: maximum allowable decrement (in tenth percent) of battery capacity in FCC learning + 5, //* 36: maximum allowable increment (in tenth percent) of battery capacity in FCC learning + 10, //* 37: battery temperature in degree C below which switch to low temp ESR update steps + 0x02, //* 38: ESR update step tight, (2 * 0.001953 = 0.0039 = 0.4% max change each update) + 0x33, //* 39: ESR update step broad, (51* 0.001953 = 0.099603 = 10% max change each update) + 0x02, //* 40: ESR update step tight at low temp (below 10 degree, 0.4% max change each update) + 0x0A, //* 41: ESR update step broad at low temp (below 10 degree, 2% max change each update) + 0, //* 42: mOhm, RConn + 0, //* 43: Type C Thermal Mitigation Enable + 70, //* 44: Temperature to arm mitigation (degree C) + 50, //* 45: ICL adjustment (percent) + 60 //* 46: Temperature to disarm mitigation (degree C) + }) + Store(VNOM, Index(CFG0, 1)) + Store(VLOW, Index(CFG0, 2)) + Store(EMPT, Index(CFG0, 3)) + Store(DCMA, Index(CFG0, 4)) + Store(BOCP, Index(CFG0, 21)) + Store(IFGD, Index(CFG0, 25)) + Store(VFGD, Index(CFG0, 26)) + Return (CFG0) + } + + //ACPI methods for Platform File + Method (BPTM) { + Name (CFG0, + Package(){ + 15000, // Emergency Timer + 0, // Emergency Tolerable Delay + }) + Return (CFG0) + } + + //***************************************************** + // Battery Charge Table 1 (BCT1) + // Notes: used in Method(BJTA) & Method (BAT1) + //***************************************************** + Name (BCT1, Package(){ + 4350, //* 0: VDD1: (mV), Float Voltage (FV) + 2100, //* 1: FCC1: (mA), Full Charge Current (FCC) + 0, //* 2: HCLI: (C) hard cold limit - at which temperature charging will be disabled + 10, //* 3: SCLI: (C) soft cold limit - at which temperature charge current/float voltage will be reduced to JEITA compensated value + 45, //* 4: SHLI: (C) soft hot limit - at which temperature float voltage/charge current will be reduced to JEITA compensated value + 55, //* 5: HHLI: (C) hard hot limit - at which temperature charging will be disabled + 105, //* 6: FVC1: (mV) Float Voltage compensation (amount of FV reduction) when in battery hot-soft limit + 0, //* 7: (mV) Float Voltage compensation (amount of FV reduction) when in battery cold-soft limit + //* notes: put 0 value to disable + //* These values (10 vs 11) should be the same when HW JEITA is enabled + 0, //* 8: (mA) Charge Current compensation (amount of CC reduction) when in battery hot-soft limit + 1000, //* 9: CCC1: (mA) Charge Current compensation (amount of CC reduction) when in battery cold-soft limit + //* notes: put 0 value to disable + //* These values (12 vs 13) should be the same when HW JEITA is enabled + }) + + //ACPI methods for JEITA + Method (BJTA) { + Name (CFG0, + Package(){ + 2, //* 0: Select JEITA Configuration: 0- No JEITA, 1- SW JEITA, 2- HW JEITA + 2, //* 1: Temperature Hysteresis (in deg C) + Package(0xa){0,0,0,0,0,0,0,0,0,0} + //* 2: Structure for default charge table + }) + Store(VDD1, Index(\_SB_.PMBT.BCT1, 0)) + Store(FCC1, Index(\_SB_.PMBT.BCT1, 1)) + Store(HCLI, Index(\_SB_.PMBT.BCT1, 2)) + Store(SCLI, Index(\_SB_.PMBT.BCT1, 3)) + Store(SHLI, Index(\_SB_.PMBT.BCT1, 4)) + Store(HHLI, Index(\_SB_.PMBT.BCT1, 5)) + Store(FVC1, Index(\_SB_.PMBT.BCT1, 6)) + Store(CCC1, Index(\_SB_.PMBT.BCT1, 9)) + + //Use BCT1 as the Default Charge Table + Store(\_SB_.PMBT.BCT1, Index(CFG0, 2)) + Return (CFG0) + } + + //ACPI methods for Battery-1 (Ascent 860-82209-0000 3450mAh) + Method (BAT1) + { + Name (CFG0, + Package(){ + 0, //* 0: Battery Category: 0-NORMAL, 1-SMART + 0xFFFFFFEC, //* 1: min operating battery temp (-20 deg C) + 65, //* 2: max operating battery temp (+65 deg C) + Package(4){0,0,0,0}, //* 3: 128-bit battery info for future expansion + Package(0xa){0,0,0,0,0,0,0,0,0,0} + //* 4: Structure for charge table + }) + + //assign Charge Table to BCT1 + //Notes: 1) If the default charge table and desire charge table are different, + // Create another table (ex: BCT2) with the same structure as BCT1 and modify BCT1 below with the new table name + // 2) Method(BJTA) is parsed before this(BAT1) method in Battmngr module + // Method(BJTA) may be updating BCT1 parameters using configuration from cust_pmic_batt.asl (refer to BJTA method details) + // If BAT1 desires different value to be used (than what used in BJTA), pls change/update relevant parameter(s) here. + Store(\_SB_.PMBT.BCT1, Index(CFG0, 4)) + + Return (CFG0) + } + + //ACPI methods for Battery Error Handling + Method (BEHC) + { + //Actions for Battery Error Handling + // 0x0 - Do Nothing + // 0x1 - Reload Charge Table + // 0x2 - Error Shutdown + // 0x4 - Emergency Shutdown + // 0x8 - Enter Test Mode + Name (CFG0, + Package(){ + 1, //1-Feature Enable, 0-Feature Disable + 0x8, //Action(s) for DEBUG state -> Enter Test Mode + 0x1, //Action(s) for NORMAL state -> Reload Charge Table + 0x0, //Action(s) for SMART_AUTHENTICATED state -> Do nothing + 0x0, //Action(s) for UNKNOWN state -> Do nothing + 0x2, //Action(s) for NOT_PRESENT state -> Error Shutdown + 0x2, //Action(s) for INVALID state -> Error Shutdown + 0x4 //Action(s) for OUT_OP_RANGE state -> AFP for out of operational range + }) + Return (CFG0) + } + + //ACPI methods for Charge Table Management Configuration + Method (CTMC) + { + Name (CFG0, + Package(){ + 2000, //* 0: min RID for DEBUG category: 2K + 14000, //* 1: max RID for DEBUG category: 14K + 0xFFFFFFFF, //* 2: RID2: min RID for NORMAL category: 15K + 0xFFFFFFFF, //* 3: RID3: max RID for NORMAL category: 140K + 240000, //* 4: min RID for SMART category: 240K + 450000, //* 5: max RID for SMART category: 450K + 1, //* 6: Number of charging table + }) + Store(RID2, Index(CFG0, 2)) + Store(RID3, Index(CFG0, 3)) + Return (CFG0) + } + + //ACPI methods for Parallel Charging + Method (BMPC) { + Name (CFG0, + Package(){ + 0, //* 0: Feaature Enable. 1: Enabled, 0: Disable + 1, //* 1: Input Power Disctribution (HW) configuration: 0: MID-MID, 1: USBIN-USBIN + 7000, //* 2: (mW) Input Power Threshold to decide if parallel charging to be enabled or not + //* Note: Not applicable for MID-MID configuration + 1000, //* 3: (mA) Charge Current Threshold to decide if parallel charging to be enabled or not + 50, //* 4: (%) Slave Charger Initial Power Distribution + 60, //* 5: (mV) Slave Charger Float Voltage Headroom + 500, //* 6: (mA) Slave Charger Charge Current Done Threshold + 90, //* 7: Slave Charger Minimum Efficiency + 0, //* 8: Slave Charger HW ID. 0: SMB1380/1 + 70, //* 9: (%)Slave Charger Max Power Distribution: 70% + 0, //* 10: (%)Slave Charger Min Power Distribution: 0% + Package(0x4)//* 11: Thermal Balancing Configuration + { + 5, //11.1: (C)Temperature Difference to trigger thermal balancing. 0 to disable the feature + 5, //11.2: (%)Step to redistrubute the power + 120, //11.3: (Sec)Minimum Wait Time for each redistribution attempt + 5, //11.4: (C)Temperature Margin for Master Charger + } + }) + Return (CFG0) + } + } + + // + // PMIC Battery Miniclass Driver + // + Device (PMBM) { + Name (_HID, "QCOM0263") + Alias(\_SB.PSUB, _SUB) + Name (_DEP, Package(0x1) + { + \_SB_.PMBT + }) + + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () { + }) + Return (RBUF) + } + + Method (_STA) { + Return (0xF) // Device is installable, functional & should not be visible in OSPM/Device Manager + } + } + +// +//FGBCL Driver +// +Device (BCL1) { + Name (_HID, "QCOM02D6") + Alias(\_SB.PSUB, _SUB) + Name (_DEP, Package(0x1) + { + \_SB_.PMIC + }) + + Method (_STA) { + Return (0xF) // Device is installable, functional & should not be visible in OSPM/Device Manager + } + + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () { + GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,RawDataBuffer(){0x08}) {64} // 0x1E8 - PM_INT__BCL_COMP__VCOMP_LOW0 - VCOMP_LOW0 IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {65} // 0x1E9 - PM_INT__BCL_COMP__VCOMP_LOW1 - VCOMP_LOW1 IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {66} // 0x1EA - PM_INT__BCL_COMP__VCOMP_LOW2 - VCOMP_LOW2 IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {67} // 0x1EB - PM_INT__BCL_COMP__VCOMP_HI - VCOMP_HI IRQ + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {68} // 0x1EC - PM_INT__BCL_COMP__SYS_OK - SYS_OK IRQ + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {72} // 0x1F0 - PM_INT__BCL_PLM__VCOMP_LVL0_PLM - LVL0_PLM IRQ + //GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {74} // 0x1F2 -PM_INT__BCL_PLM__VCOMP_LVL2_PLM - LVL2_PLM IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {75} // 0x1F3 - PM_INT__BCL_PLM__VCOMP_BA - BAN alarm IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {336} // 0x210 - PM_INT__FG_BCL__IBT_HI - ibatt high IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {337} // 0x211 - PM_INT__FG_BCL__IBT_THI - ibatt too high IRQ + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {339} // 0x213 - PM_INT__FG_BCL__VBT_LO_CMP - vbatt low irq + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {340} // 0x214 - PM_INT__FG_BCL__VBT_TLO_CMP - vbatt too low irq + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {324} // 0x204 - PM_INT__FG_BATT_SOC__MSOC_LOW - MSOC_Low Interrupt + GpioInt(Edge, ActiveHigh, Shared, PullUp, 0, "\\_SB.PM01",,,,) {326} // 0x206 - PM_INT__FG_BATT_SOC__MSOC_HIGH - MSOC_HI Interrupt + GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,RawDataBuffer(){0x08}) {344} // 0x218 - PM_INT__FG_LMH__LMH_LVL0 - LMH_LVL0 IRQ + GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,RawDataBuffer(){0x08}) {345} // 0x219 - PM_INT__FG_LMH__LMH_LVL1 - LMH_LVL1 IRQ + GpioInt(Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.PM01",,,,RawDataBuffer(){0x08}) {346} // 0x21A - PM_INT__FG_LMH__LMH_LVL2 - LMH_LVL2 IRQ + + }) + Return (RBUF) + } + //ACPI methods for FGBCL device + Method (BCLS) { + Name (CFG0, + Package(){ + 3, //* FGBCL ACPI revision + 7, //* 0: BCL disabled, 1: vph_pwr bcl enabled, 2: fg vbatt enabled, 4: fg ibatt enabled + 5000, //* battery ocp current + 80, //* ibatt high threshold is set to 80 for 80% of OCP + 90, //* ibatt too high is set to 90 for 90% of OCP + 2800, //* vbatt low is set to 2800 mV + 2600, //* vbatt too low is set to 2600 mV + 3200, //* vcomp_low0 threshold is 3200 mv + 2750, //* vcomp_low1 threshold is 2750 mv + 2500, //* vcomp_low2 threshold is 2500 mV + 10, //* poll timer for battery soc polling. + 1, //* 1- enable battery percent notification. 0-disable battery percent notification + 2000, //* debug board Min battery ID in Ohm + 14000 //* debug board Max battery ID in Ohm + }) + Return (CFG0) + } + //ACPI methods for Interrupt Name + Method (BCLQ) { + Name (CFG0, + Package(){ + "VCOMP_LOW0", //vcomp_low0 IRQ + "VCOMP_LOW1", //vcomp_low1 IRQ + "VCOMP_LOW2", //vcomp_low2 IRQ + "VCOMP_HI", //vcomp_hi IRQ + //"SYS_OK", // sys_ok irq + //"LVL0_PLM", // LVL0_PLM IRQ + //"LVL1_PLM" // LVL1_PLM IRQ + //"LVL2_PLM", //LVL2_PLM IRQ + "BAN_ALARM", // BAN_ALARM IRQ + "IBATT_HI", // IBATT HIGH IRQ + "IBATT_THI", // IBATT TOO HIGH IRQ + "VBATT_LOW", // VBATT_LOW IRQ + "VBATT_TLOW", // VBATT TOO LOW IRQ + "MSOC_LOW", //monotonic soc low IRQ + "MSOC_HI", //monotonic soc high IRQ + "LMH_LVL0", //LMH_LVL0 IRQ + "LMH_LVL1", //LMH_LVL1 IRQ + "LMH_LVL2", //LMH_LVL2 IRQ + }) + Return (CFG0) + } +} + +// +//PMIC Type-C Controler Driver (PMICTCC) Driver +// +Device(PTCC) +{ + Name (_HID, "QCOM02E6") + Alias(\_SB.PSUB, _SUB) + Name (_DEP, Package(0x1) {\_SB_.PMIC}) + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () { + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {239} // 0x9F - PM_INT__SCHG_USB__TYPE_C_OR_RID_DETECTION_CHANGE - CC State Changed IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {270} // 0xBE - PM_INT__USB_PD__MESSAGE_RX_DISCARDED - Message RX Discarded IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {269} // 0xBD - PM_INT__USB_PD__MESSAGE_TX_DISCARDED - Message TX Discarded IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {268} // 0xBC - PM_INT__USB_PD__MESSAGE_TX_FAILED - Message TX Failed IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {267} // 0xBB - PM_INT__USB_PD__MESSAGE_RECEIVED - Message Received IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {266} // 0xBA - PM_INT__USB_PD__MESSAGE_SENT - Message Sent IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {265} // 0xB9 - PM_INT__USB_PD__SIGNAL_RECEIVED - Singal Received IRQ + GpioInt(Edge, ActiveHigh, SharedAndWake, PullNone, 0, "\\_SB.PM01",,,,) {264} // 0xB8 - PM_INT__USB_PD__SIGNAL_SENT - Signal Sent IRQ + GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {217} // 0x89 - PM_INT__SCHG_OTG__OTG_OVERCURRENT - OTG_OC_IRQ + GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {263} // 0xB7 - PM_INT__SCHG_MISC__SWITCHER_POWER_OK - SWITCHER_POWER_OK (CHG_MISC) + GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {235} // 0x9B - PM_INT__SCHG_USB__USBIN_OV - USBIN_OV (CHG_USB) + // GpioIo (Exclusive, PullUp, 0, 0, , "\\_SB.PM01", , , , ) {493} // 0x668 - PM_INT__PM2_GPIO14__GPIO_IN_STS - GPIO14B � For Type-C Debug Accessory Mode + }) + Return (RBUF) + } +} diff --git a/dipper/qcgpio.asl b/dipper/qcgpio.asl new file mode 100755 index 0000000..b253788 --- /dev/null +++ b/dipper/qcgpio.asl @@ -0,0 +1,44 @@ +// +// TLMM controller. +// +Device (GIO0) +{ + Name (_HID, "QCOM0217") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 0) + + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () + { + // TLMM register address space + Memory32Fixed (ReadWrite, 0x03400000, 0x00C00000) + + // Summary Interrupt shared by all banks + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {240} + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {240} + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {240} + Interrupt(ResourceConsumer, Edge, ActiveBoth, Shared, , , ) {648} // For PDC Wake up ::TLMM GPIo 126 SD Card Detection + Interrupt(ResourceConsumer, Edge, ActiveBoth, Shared, , , ) {568} // For PDC Wake up ::TLMM GPIo 54 + Interrupt(ResourceConsumer, Edge, ActiveBoth, Shared, , , ) {646} // For PDC Wake up ::TLMM GPIo 124, Hall sensor used for lid + }) + Return (RBUF) + } + // ACPI method to return Num pins + Method(OFNI, 0x0, NotSerialized) { + Name(RBUF, Buffer() + { + 0x96, // 0: TOTAL_GPIO_PINS + 0x00 // 1: TOTAL_GPIO_PINS + }) + Return (RBUF) + } + + Name(GABL, Zero) + Method(_REG, 0x2, NotSerialized) + { + If(LEqual(Arg0, 0x8)) + { + Store(Arg1, GABL) + } + } +} diff --git a/dipper/spi.asl b/dipper/spi.asl new file mode 100755 index 0000000..54adbb6 --- /dev/null +++ b/dipper/spi.asl @@ -0,0 +1,38 @@ + + // SPI1 - EPM + // + Device (SPI1) + { + Name (_HID, "QCOM021E") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 1) + Name (_DEP, Package(){\_SB_.PEP0, \_SB_.BAM3}) + Name (_CCA, 0) + + Method (_CRS) + { + Name (RBUF, ResourceTemplate() + { + + Memory32Fixed(ReadWrite, 0xf9923000, 0x00000800) + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {127} + }) + Return (RBUF) + } + Method (FNOC) + { + Name(RBUF, Buffer() + { + 0x01, // Controller Number + 0x00, // BamBaseAddress + 0x40, // BamBaseAddress + 0x90, // BamBaseAddress + 0xf9, // BamBaseAddress + 0x0d, // Input Pipe + 0x0c, // Output Pipe + 0x00, // Threshold + 0x01 // Threshold + }) + Return (RBUF) + } + } diff --git a/dipper/testdev.asl b/dipper/testdev.asl new file mode 100755 index 0000000..e69de29 diff --git a/dipper/usb.asl b/dipper/usb.asl new file mode 100755 index 0000000..62ff82b --- /dev/null +++ b/dipper/usb.asl @@ -0,0 +1,953 @@ +Name(QUFN, 0x0 ) //enable flag for QcUsbFN driver stack + +//Holds the DPDM Polarity +//USB_DPDM_INVALID_INVALID = 0 +//USB_DPDM_INVALID_FALLING = 1 +//USB_DPDM_INVALID_RISING = 2 +//USB_DPDM_FALLING_INVALID = 3 +//USB_DPDM_RISING_INVALID = 4 +//USB_DPDM_FALLING_FALLING = 5 +//USB_DPDM_FALLING_RISING = 6 +//USB_DPDM_RISING_FALLING = 7 +//USB_DPDM_RISING_RISING = 8 +Name(DPP0, Buffer(){0x0}) + +// +// USB Role Switch +// +Device(URS0) +{ + //select HID based on flag for QcUsbFN driver stack + Method (URSI) { + If(Lequal(\_SB.QUFN, 0x0)) { + return("QCOM0304") + } + Else{ + return ("QCOM0305") + } + } + + Alias(URSI, _HID) + + Name(_CID, "PNP0CA1") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 0) + Name(_CCA, Zero) // Cache-incoherent bus-master, Hardware does not manage cache coherency + Name(_DEP, Package(0x1) + { + \_SB_.PEP0 + }) + + Name(_CRS, ResourceTemplate() { + Memory32Fixed(ReadWrite, 0x0A600000, 0x000FFFFF) + }) + + // Dynamically enumerated device (host mode stack) on logical USB bus + Device(USB0) + { + Name(_ADR, 0) + Name(_S0W, 3) // Enable power management for SDM850 BU + + // _PLD as defined in the ACPI spec. The GroupToken and GroupPosition are used to + // derive a unique "Connector ID". The other fields are not really important. + Name(_PLD, Package() + { + Buffer() + { + 0x82, // Revision 2, ignore color. + 0x00,0x00,0x00, // Color (ignored). + 0x00,0x00,0x00,0x00, // Width and height. + 0x69, // User visible; Back panel; VerticalPos:Center. + 0x0c, // HorizontalPos:0; Shape:Vertical Rectangle; GroupOrientation:0. + 0x80,0x00, // Group Token:0; Group Position:1; So Connector ID is 1. + 0x00,0x00,0x00,0x00, // Not ejectable. + 0xFF,0xFF,0xFF,0xFF // Vert. and horiz. offsets not supplied. + } + }) + // _UPC as defined in the ACPI spec. + Name(_UPC, Package() + { + 0x01, // Port is connectable. + 0x09, // Connector type: Type C connector - USB2 and SS with switch. + 0x00000000, // Reserved0 - must be zero. + 0x00000000 // Reserved1 - must be zero. + }) + Name(_CRS, ResourceTemplate() { + // usb30_ctrl_irq[0] + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {0xA5} + // Qusb2Phy_intr + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0x17A} + // qmp_usb3_lfps_rxterm_irq + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0x206} + // eud_p0_dmse_int_mx - Rising Edge + Interrupt(ResourceConsumer, Edge, ActiveHigh, SharedAndWake, , , ) {0x208} + // eud_p0_dpse_int_mx - Rising Edge + Interrupt(ResourceConsumer, Edge, ActiveHigh, SharedAndWake, , , ) {0x209} + }) + + Method(_STA) + { + Return (0xf) + } + + //Method to set DPDM Polarity for Pep Driver + Method(DPM0, 0x1, NotSerialized) { + // ARG 0 � DPDM polarity + Store(Arg0, \_SB.DPP0) //DPDM Polarity + Notify(\_SB.PEP0, 0xA0) + } + + // Returns CC Out + Method(CCVL) { + // Return CC OUT + Return(\_SB.CCST) + } + //Returns High Speed Enumeration Flag + Method(HSEN) { + // Return High Speed Enumeration Flag + Return(\_SB.HSFL) + } + + /* HS enumeration fix + //HSEI: High Speed pullup gpio + Name (HSEI, ResourceTemplate () + { + GpioIo (Exclusive,PullNone,0,0, ,"\\_SB.GIO0", ,) {8} + }) + + //define 1 byte long operation region HLEN w/ base address == 0 under GPIO0 devnode namespace + Scope(\_SB.GIO0) { + OperationRegion(HLEN, GeneralPurposeIO, 0, 1) // Note: Region is less than 8 pins long + } + + //now connect HLEN field in op region w/ HSEI resource + Field(\_SB.GIO0.HLEN, ByteAcc, NoLock, Preserve) + { + //Connect field to HSEI physical object + Connection (\_SB.URS0.USB0.HSEI), // Following fields will be accessed atomically + MOD1, 1 //MOD1 - variable name, 1 == 1bit wide + } + */ + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Empty Package (Not used) + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // UFX interface identifier + case(ToUUID("CE2EE385-00E6-48CB-9F05-2EDB927C4899")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {0,2,3,4} supported + case(0) { Return(Buffer(){0x1D}); Break; } + // Function 0 only supported for invalid revision + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 2: Port type identification + // 0x00 � Regular USB + // 0x01 � HSIC + // 0x02 � SSIC + // 0x03 � 0xff reserved + case(2) { Return(0x0); Break; } + + // Function 3: Query Controller Capabilities + // bit 0 represents the support for software assisted USB endpoint offloading feature + // 1 - Offloading endpoint supported + case(3) { Return(0x1); Break; } + + // Function 4: Interrupter Number + case(4) { Return(0x2); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {CE2EE385-00E6-48CB-9F05-2EDB927C4899} + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + // + // The following values of PHY will be configured if OEMs do not + // overwrite the values. + // + // For SNPS core, PARAMETER_OVERRIDE_X is used to configure HS PHY. + // For SS PHY, PERIPH_SS_USB3PHY_QSERDES_TX_TX_DRV_LVL is used to tune swing + // and PERIPH_SS_USB3PHY_QSERDES_TX_TX_EMP_POST1_LVL for de_emphasis. + // + // AccessMethod: + // 0 - DirectAccess: The register address is accessed directly from the mapped memory. + // + Method(PHYC, 0x0, NotSerialized) { + Name (CFG0, Package() + { + // AccessMethod, REG ADDR, Value + // ------------------------------- + //Package() {0x0, 0x06AF8814, 0xD191A4}, // DirectAccess, HS PARAMETER_OVERRIDE_X_ADDR + //Package() {0x0, 0x06A3820C, 0x11}, // DirectAccess, SS QMP PHY TX Swing + //Package() {0x0, 0x06A38208, 0x21}, // DirectAccess, SS QMP PHY TX DE-Emphasis + }) + Return (CFG0) + } + + /* + Device(RHUB) + { + Name(_ADR, 0) // Value zero reserved for Root Hub + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Empty Package (Not used) + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // HS enumeration fix + case(ToUUID("A9A82A56-95A1-4B4A-B014-3BE47DF1B7D5")) + { + // Version selector + switch(ToInteger(Arg1)) + { + case(1) //DSM_SDM845_HS_RH_PORT_RESET_REVISION_1 + { + switch(ToInteger(Arg2)) //DSM_SDM845_HS_RH_PORT_RESET_FUNCTION_ + { + //DSM_SDM845_HS_RH_PORT_RESET_FUNCTION_PRE_RESET_ON - set GPIO high + case(1) + { + Store (0x01, \_SB.URS0.USB0.MOD1) + Return (Buffer(){0x01}) //return success + } + //DSM_SDM845_HS_RH_PORT_RESET_FUNCTION_POST_RESET_OFF - set GPIO low + case(0) + { + Store (0x00, \_SB.URS0.USB0.MOD1) + Return (Buffer(){0x01}) //return success + } + + default { Return (Buffer(){0x00})} + } + } + default { Return (Buffer(){0x00}) } + } + }//end (A9A82A56-95A1-4B4A-B014-3BE47DF1B7D5) + + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + } // Root Hub + */ + + } // USB0 + + // Dynamically enumerated device (peripheral mode stack) on logical USB bus + Device(UFN0) + { + Name(_ADR, 1) + Name(_S0W, 3) // Enable power management for Napali BU + // _PLD as defined in the ACPI spec. The GroupToken and GroupPosition are used to + // derive a unique "Connector ID". The other fields are not really important. + Name(_PLD, Package() + { + Buffer() + { + 0x82, // Revision 2, ignore color. + 0x00,0x00,0x00, // Color (ignored). + 0x00,0x00,0x00,0x00, // Width and height. + 0x69, // User visible; Back panel; VerticalPos:Center. + 0x0c, // HorizontalPos:0; Shape:Vertical Rectangle; GroupOrientation:0. + 0x80,0x00, // Group Token:0; Group Position:1; So Connector ID is 1. + 0x00,0x00,0x00,0x00, // Not ejectable. + 0xFF,0xFF,0xFF,0xFF // Vert. and horiz. offsets not supplied. + } + }) + // _UPC as defined in the ACPI spec. + Name(_UPC, Package() + { + 0x01, // Port is connectable. + 0x09, // Connector type: Type C connector - USB2 and SS with switch. + 0x00000000, // Reserved0 - must be zero. + 0x00000000 // Reserved1 - must be zero. + }) + Name(_CRS, ResourceTemplate() { + // usb30_ctrl_irq[0] + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {0xA5} + //usb30_power_event_irq + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0xA2} + }) + + // Returns CC Out + Method(CCVL) { + // Return CC OUT + Return(\_SB.CCST) + } + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Package that contains function-specific arguments + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // UFX interface identifier + case(ToUUID("FE56CFEB-49D5-4378-A8A2-2978DBE54AD2")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {1} supported + case(0) { Return(Buffer(){0x03}); Break; } + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 1: Return number of supported USB PHYSICAL endpoints + // Synopsys core configured to support 16 IN/16 OUT EPs, including EP0 + case(1) { Return(32); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {FE56CFEB-49D5-4378-A8A2-2978DBE54AD2} + + // QCOM specific interface identifier + case(ToUUID("18DE299F-9476-4FC9-B43B-8AEB713ED751")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {1} supported + case(0) { Return(Buffer(){0x03}); Break; } + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 1: Return device capabilities bitmap + // Bit Description + // --- ------------------------------- + // 0 Superspeed Gen1 supported + // 1 PMIC VBUS detection supported + // 2 USB PHY interrupt supported + // 3 Type-C supported + // 4 Delay USB initialization + // 5 HW based charger detection + case(1) { Return(0x39); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {18DE299F-9476-4FC9-B43B-8AEB713ED751} + + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + + // + // The following values of PHY will be configured if OEMs do not + // overwrite the values. + // + // For SNPS core, PARAMETER_OVERRIDE_X is used to configure HS PHY. + // For SS PHY, PERIPH_SS_USB3PHY_QSERDES_TX_TX_DRV_LVL is used to tune swing + // and PERIPH_SS_USB3PHY_QSERDES_TX_TX_EMP_POST1_LVL for de_emphasis. + // + // AccessMethod: + // 0 - DirectAccess: The register address is accessed directly from the mapped memory. + // + Method(PHYC, 0x0, NotSerialized) { + Name (CFG0, Package() + { + // AccessMethod, REG ADDR, Value + // ------------------------------- + //Package() {0x0, 0x06AF8814, 0xD191A4}, // DirectAccess, HS PARAMETER_OVERRIDE_X_ADDR + //Package() {0x0, 0x06A3820C, 0x11}, // DirectAccess, SS QMP PHY TX Swing + //Package() {0x0, 0x06A38208, 0x21}, // DirectAccess, SS QMP PHY TX DE-Emphasis + }) + Return (CFG0) + } + } // UFN0 +} // URS0 + +// HPD Notification Event in Display Driver +// HPD_STATUS_LOW_NOTIFY_EVENT - 0x92 +// HPD_STATUS_HIGH_NOTIFY_EVENT - 0x93 +// All other valus are invalid +Name(HPDB, 0x00000000) + +// DP Pin Assignment +// TYPEC_DISPLAYPORT_PINASSIGNMENTINVALID = 0x0 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTA = 0x01 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTB = 0x02 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTC = 0x03 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTD = 0x04 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTE = 0x05 +// TYPEC_DISPLAYPORT_DFPDPINASSIGNMENTF = 0x06 +// TYPEC_DISPLAYPORT_UFPDPINASSIGNMENTA = 0x07 +// TYPEC_DISPLAYPORT_UFPDPINASSIGNMENTB = 0x08 +// TYPEC_DISPLAYPORT_UFPDPINASSIGNMENTC = 0x09 +// TYPEC_DISPLAYPORT_UFPDPINASSIGNMENTD = 0x0A +// TYPEC_DISPLAYPORT_UFPDPINASSIGNMENTE = 0x0B +Name(PINA, 0x00000000) + +// Holds the CC OUT Status +// 0 -> CC1 +// 1 -> CC2 +// 2 -> CC Open +Name(CCST, Buffer(){0x02}) + +// Holds the HS Only enumeration Flag for display alternate mode +// 0 -> Super Speed Controller Enumeration support +// 1 -> High Speed Controller Enumeration support +// 2 -> Invalid +Name(HSFL, Buffer(){0x00}) + +// USB Capabilities bitmap +// Indicates the platform's USB capabilities, extend as required. +// Bit Description +// --- --------------------------------------------------- +// 0 Super Speed Gen1 supported (Synopsys IP) +// 1 PMIC VBUS detection supported +// 2 USB PHY interrupt supported (seperate from ULPI) +// 3 TypeC supported +Name(USBC, Buffer(){0x0B}) + + +// +// USB Type-C/PD Switch +// +Device(UCP0) +{ + Name(_HID, "QCOM02D0") // QCOM24D3 + Name(_DEP, Package(0x3) + { + \_SB_.PEP0, + \_SB_.PTCC, + \_SB_.URS0 + }) + + Device(CON0) + { + // These devices are not meant to be enumerated by ACPI, hence you should not assign + // HWIDs to them. Instead, use _ADR to assign unique addresses to them. + // The addresses are required to be a 0-based index of the connector. First connector + // should have "0", second one "1", etc. + Name(_ADR, 0x00000000) + // _PLD as defined in the ACPI spec. The GroupToken and GroupPosition are used to + // derive a unique "Connector ID". The other fields are not really important. + Name(_PLD, Package() + { + Buffer() + { + 0x82, // Revision 2, ignore color. + 0x00,0x00,0x00, // Color (ignored). + 0x00,0x00,0x00,0x00, // Width and height. + 0x69, // User visible; Back panel; VerticalPos:Center. + 0x0c, // HorizontalPos:0; Shape:Vertical Rectangle; GroupOrientation:0. + 0x80,0x00, // Group Token:0; Group Position:1; So Connector ID is 1. + 0x00,0x00,0x00,0x00, // Not ejectable. + 0xFF,0xFF,0xFF,0xFF // Vert. and horiz. offsets not supplied. + } + }) + // _UPC as defined in the ACPI spec. + Name(_UPC, Package() + { + 0x01, // Port is connectable. + 0x09, // Connector type: Type C connector - USB2 and SS with switch. + 0x00000000, // Reserved0 - must be zero. + 0x00000000 // Reserved1 - must be zero. + }) + Name(_DSD, Package() + { + // The UUID for Type-C connector capabilities. + ToUUID("6b856e62-40f4-4688-bd46-5e888a2260de"), + // The data structure which contains the connector capabilities. Each package + // element contains two elements: the capability type ID, and the capability data + // (which depends on the capability type). Note that any information defined here + // will override similar information described by the driver itself. For example, if + // the driver claims the port controller is DRP-capable, but ACPI says it is UFP-only + // ACPI will take precedence. + Package() + { + Package() {1, 4}, // Supported operating modes (DRP). + Package() {2, 3}, // Supported Type-C sourcing capabilities (DefaultUSB & 1500mA). + Package() {3, 0}, // Audio accessory capable (False). + Package() {4, 1}, // Is PD supported (True). + Package() {5, 3}, // Supported power roles (Sink and Source). + Package() + { + 6, // Capability type ID of PD Source Capabilities. + Package() + { + 0x00019096 // Source PDO #0: Fixed:5V, 1.5A. No need to describe fixed bits. + } + }, + Package() + { + 7, // Capability type ID of PD Sink Capabilities. + Package () + { + 0x0001912C, // Sink PDO #0: Fixed:5V, 3.0A. No need to describe fixed bits. + 0x0002D0C8, // Sink PDO #1: Fixed:9V, 2.0A. No need to describe fixed bits. + 0x0003C096, // Sink PDO #2: Fixed:12V, 1.5A. No need to describe fixed bits. + } + }, + Package() + { + 8, // Capability type ID of supported PD Alternate Modes. + Package() + { + 0xFF01, 0x3C86 // DFP_D capable (B0:1); DFP v1.3 signalling (B2:5); DP on Type-C plug (B6); + // usb r2.0 signalling not required (B7); Pin Assignment Supported - C,D,E,F (B8:15) + } + }, + Package() + { + 9, // Add Delay in loading of host stack + 1 + }, + Package() // Hardware CC debounce is supported + { + 0xA, + 1 + } + } + }) + } // Device(CON0) + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Package that contains function-specific arguments + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // QCOM specific interface identifier + case(ToUUID("18DE299F-9476-4FC9-B43B-8AEB713ED751")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {0,1} supported + case(0) { Return(Buffer(){0x01}); Break; } // TypeC support only, No PD + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function1: Return Capabilities Data Objects + case(1) { + switch(ToInteger(Arg3)) { + // Source Power PDO + case (0) { Return(Package(){0x36019050}); Break; } + // Sink Power PDO + case (1) { Return(Package(){0x3601912C}); Break; } + //default + default { Return (Package(){0x00}); Break; } + } + } + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {18DE299F-9476-4FC9-B43B-8AEB713ED751} + + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + // Method for updating the CC Out status and HS Mode Flag + // Arg 0 - CC Out value (CC1/CC2/CC Open) + // Arg 1 - HS Mode Flag (SS/HS/Invalid) + Method(CCOT, 0x2, NotSerialized) { + // ARG 0 - CC_OUT + Store(Arg0, \_SB.CCST) + Store(Arg1, \_SB.HSFL) + } + // Method for reading CC Out Value from Type-C client driver + // Only for sanity testing + Method(CCVL) { + // Return CC OUT + Return(\_SB.CCST) + } + + Method(HPDS, 0x0, NotSerialized) { + // Notify event ID - 0x92 to GFX driver on a hot plug-in event + Notify(\_SB.GPU0, 0x94) + } + + Method(HPDF, 0x2, NotSerialized) { + // ARG 0 - HPD Status + Store(Arg0, \_SB.HPDB) + // Arg 1 - Pin Assignment + Store(Arg1, \_SB.PINA) + // Invoke Display Driver HPD event + Notify(\_SB.GPU0, \_SB.HPDB) + } + + // Method for reading CC Out Value from Type-C client driver + // Only for sanity testing + Method(HPDV) { + // Return HPD + Return(\_SB.HPDB) + } + // Method for reading HPD and Pin Assignment values from Type-C client driver + // Only for sanity testing + Method(PINV) { + // Return Pin Assignment + Return(\_SB.PINA) + } + +} // UCP0 + +//Dummy device to allow KDNET on 2ndary port debugger registration +// Device (USB1) +// { +// Name (_DEP, Package(0x1) +// { +// \_SB_.PEP0 +// }) +// Name (_HID, "QCOM02BA") // QCOM02BA +// Name (_UID, 1) + +// //set device status as not present, disabled, not shown in UI, not functioning properly +// Name(STVL, 0x0) + +// Method (_STA) { +// Return (STVL) // return the current device status +// } +// } // USB1 + + +// +// USB Type-C Audio Driver +// +// Device (USBA) +// { +// Name (_DEP, Package(0x1) +// { +// \_SB_.IMM0 +// }) +// Name (_HID, "QCOM0300") +// Alias(\_SB.PSUB, _SUB) +// } + + +//URS1 specific +/* + +//Holds the DPDM Polarity +//USB_DPDM_INVALID_INVALID = 0 +//USB_DPDM_INVALID_FALLING = 1 +//USB_DPDM_INVALID_RISING = 2 +//USB_DPDM_FALLING_INVALID = 3 +//USB_DPDM_RISING_INVALID = 4 +//USB_DPDM_FALLING_FALLING = 5 +//USB_DPDM_FALLING_RISING = 6 +//USB_DPDM_RISING_FALLING = 7 +//USB_DPDM_RISING_RISING = 8 +Name(DPP1, Buffer(){0x0}) + +//USB Role Switch For Secondary Port +Device(URS1) +{ + Name(_HID, "QCOM0304") + Name(_CID, "PNP0CA1") + Alias(\_SB.PSUB, _SUB) + Name (_UID, 1) + Name(_CCA, Zero) // Cache-incoherent bus-master, Hardware does not manage cache coherency + Name(_DEP, Package(0x1) + { + \_SB_.PEP0 + }) + + Name(_CRS, ResourceTemplate() { + Memory32Fixed(ReadWrite, 0x0A800000, 0x000FFFFF) + //USBID pin Interrupt [USB_ID] + GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.PM01",,,,) {488} + }) + + // Dynamically enumerated device (host mode stack) on logical USB bus + Device(USB1) + { + Name(_ADR, 0) + Name(_S0W, 3) // Enable power management + // _PLD as defined in the ACPI spec. The GroupToken and GroupPosition are used to + // derive a unique "Connector ID". The other fields are not really important. + Name(_PLD, Package() + { + Buffer() + { + 0x82, // Revision 2, ignore color. + 0x00,0x00,0x00, // Color (ignored). + 0x00,0x00,0x00,0x00, // Width and height. + 0x69, // User visible; Back panel; VerticalPos:Center. + 0x0c, // HorizontalPos:0; Shape:Vertical Rectangle; GroupOrientation:0. + 0x80,0x01, // Group Token:0; Group Position:1; So Connector ID is 1. + 0x00,0x00,0x00,0x00, // Not ejectable. + 0xFF,0xFF,0xFF,0xFF // Vert. and horiz. offsets not supplied. + } + }) + // _UPC as defined in the ACPI spec. + Name(_UPC, Package() + { + 0x01, // Port is connectable. + 0x06, // Connector type: uAB + 0x00000000, // Reserved0 - must be zero. + 0x00000000 // Reserved1 - must be zero. + }) + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + //usb30_sec_ctrl_irq[0] + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {0xAA} + }) + Store(RBUF, Local0) + + ConcatenateResTemplate(Local0, ResourceTemplate() + { + //Qusb2Phy_sec_intr + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0x17B} + // qmp_usb3_lfps_rxterm_irq + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0x207} + // eud_p1_dmse_int_mx - Rising Edge + Interrupt(ResourceConsumer, Edge, ActiveHigh, SharedAndWake, , , ) {0x20A} + // eud_p1_dpse_int_mx - Rising Edge + Interrupt(ResourceConsumer, Edge, ActiveHigh, SharedAndWake, , , ) {0x20B} + }, Local1) + + Return(Local1) + } + + Method(_STA) + { + Return (0xf) + } + + //Method to set DPDM Polarity for Pep Driver + Method(DPM1, 0x1, NotSerialized) { + // ARG 0 � DPDM polarity + Store(Arg0, \_SB.DPP1) //DPDM Polarity + Notify(\_SB.PEP0, 0xA1) + } + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Empty Package (Not used) + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // UFX interface identifier + case(ToUUID("CE2EE385-00E6-48CB-9F05-2EDB927C4899")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {0,2,3} supported + case(0) { Return(Buffer(){0x0D}); Break; } + // Function 0 only supported for invalid revision + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 2: Port type identification + // 0x00 � Regular USB + // 0x01 � HSIC + // 0x02 � SSIC + // 0x03 � 0xff reserved + case(2) { Return(0x0); Break; } + + // Function 3: Query Controller Capabilities + // bit 0 represents the support for software assisted USB endpoint offloading feature + // 1 - Offloading endpoint supported + case(3) { Return(0x1); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {CE2EE385-00E6-48CB-9F05-2EDB927C4899} + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + // + // The following values of PHY will be configured if OEMs do not + // overwrite the values. + // + // For SNPS core, PARAMETER_OVERRIDE_X is used to configure HS PHY. + // For SS PHY, PERIPH_SS_USB3PHY_QSERDES_TX_TX_DRV_LVL is used to tune swing + // and PERIPH_SS_USB3PHY_QSERDES_TX_TX_EMP_POST1_LVL for de_emphasis. + // + // AccessMethod: + // 0 - DirectAccess: The register address is accessed directly from the mapped memory. + // + Method(PHYC, 0x0, NotSerialized) { + Name (CFG0, Package() + { + // AccessMethod, REG ADDR, Value + // ------------------------------- + //Package() {0x0, 0x06AF8814, 0xD191A4}, // DirectAccess, HS PARAMETER_OVERRIDE_X_ADDR + //Package() {0x0, 0x06A3820C, 0x11}, // DirectAccess, SS QMP PHY TX Swing + //Package() {0x0, 0x06A38208, 0x21}, // DirectAccess, SS QMP PHY TX DE-Emphasis + }) + Return (CFG0) + } + } // USB1 + + // Dynamically enumerated device (peripheral mode stack) on logical USB bus + Device(UFN1) + { + Name(_ADR, 1) + Name(_S0W, 3) // Enable power management + // _PLD as defined in the ACPI spec. The GroupToken and GroupPosition are used to + // derive a unique "Connector ID". The other fields are not really important. + Name(_PLD, Package() + { + Buffer() + { + 0x82, // Revision 2, ignore color. + 0x00,0x00,0x00, // Color (ignored). + 0x00,0x00,0x00,0x00, // Width and height. + 0x69, // User visible; Back panel; VerticalPos:Center. + 0x0c, // HorizontalPos:0; Shape:Vertical Rectangle; GroupOrientation:0. + 0x80,0x01, // Group Token:0; Group Position:1; So Connector ID is 1. + 0x00,0x00,0x00,0x00, // Not ejectable. + 0xFF,0xFF,0xFF,0xFF // Vert. and horiz. offsets not supplied. + } + }) + // _UPC as defined in the ACPI spec. + Name(_UPC, Package() + { + 0x01, // Port is connectable. + 0x09, // Connector type: Type C connector - USB2 and SS with switch. + 0x00000000, // Reserved0 - must be zero. + 0x00000000 // Reserved1 - must be zero. + }) + Name(_CRS, ResourceTemplate() { + // usb30_sec_ctrl_irq[0] + Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, , , ) {0xAA} + //usb30_sec_power_event_irq + Interrupt(ResourceConsumer, Level, ActiveHigh, SharedAndWake, , , ) {0xA7} + //Attach,Detach Interrupt [USB2_VUSB_DET] + GpioInt(Edge, ActiveBoth, ExclusiveAndWake, PullNone, 0, "\\_SB.PM01",,,,RawDataBuffer() {0x00, 0x00, 0x00, 0x00}) {487} + }) + + // Device Specific Method takes 4 args: + // Arg0 : Buffer containing a UUID [16 bytes] + // Arg1 : Integer containing the Revision ID + // Arg2 : Integer containing the Function Index + // Arg3 : Package that contains function-specific arguments + Method (_DSM, 0x4, NotSerialized) + { + // UUID selector + switch(ToBuffer(Arg0)) { + // UFX interface identifier + case(ToUUID("FE56CFEB-49D5-4378-A8A2-2978DBE54AD2")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {1} supported + case(0) { Return(Buffer(){0x03}); Break; } + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 1: Return number of supported USB PHYSICAL endpoints + // Synopsys core configured to support 16 IN/16 OUT EPs, including EP0 + case(1) { Return(32); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {FE56CFEB-49D5-4378-A8A2-2978DBE54AD2} + + // QCOM specific interface identifier + case(ToUUID("18DE299F-9476-4FC9-B43B-8AEB713ED751")) { + // Function selector + switch(ToInteger(Arg2)) { + // Function 0: Return supported functions, based on revision + case(0) { + // Version selector + switch(ToInteger(Arg1)) { + // Revision0: functions {1} supported + case(0) { Return(Buffer(){0x03}); Break; } + default { Return(Buffer(){0x01}); Break; } + } + // default + Return (Buffer(){0x00}); Break; + } + + // Function 1: Return device capabilities bitmap + // Bit Description + // --- ------------------------------- + // 0 Superspeed Gen1 supported + // 1 PMIC VBUS detection supported + // 2 USB PHY interrupt supported + // 3 Type-C supported + // 4 Delay USB initialization + // 5 HW based charger detection + case(1) { Return(0x33); Break; } + + default { Return (Buffer(){0x00}); Break; } + } // Function + } // {18DE299F-9476-4FC9-B43B-8AEB713ED751} + + default { Return (Buffer(){0x00}); Break; } + } // UUID + } // _DSM + + // + // The following values of PHY will be configured if OEMs do not + // overwrite the values. + // + // For SNPS core, PARAMETER_OVERRIDE_X is used to configure HS PHY. + // For SS PHY, PERIPH_SS_USB3PHY_QSERDES_TX_TX_DRV_LVL is used to tune swing + // and PERIPH_SS_USB3PHY_QSERDES_TX_TX_EMP_POST1_LVL for de_emphasis. + // + // AccessMethod: + // 0 - DirectAccess: The register address is accessed directly from the mapped memory. + // + Method(PHYC, 0x0, NotSerialized) { + Name (CFG0, Package() + { + // AccessMethod, REG ADDR, Value + // ------------------------------- + //Package() {0x0, 0x06AF8814, 0xD191A4}, // DirectAccess, HS PARAMETER_OVERRIDE_X_ADDR + //Package() {0x0, 0x06A3820C, 0x11}, // DirectAccess, SS QMP PHY TX Swing + //Package() {0x0, 0x06A38208, 0x21}, // DirectAccess, SS QMP PHY TX DE-Emphasis + }) + Return (CFG0) + } + } // UFN1 +} // URS1 +*/ diff --git a/dipper/wcnss_wlan.asl b/dipper/wcnss_wlan.asl new file mode 100755 index 0000000..f1e3803 --- /dev/null +++ b/dipper/wcnss_wlan.asl @@ -0,0 +1,101 @@ +// +// iHelium WLAN +// +Device (QWLN) +{ + Name(_ADR, 0) + Name(_DEP, Package(2) + { + \_SB.PEP0, + \_SB.MMU0 + }) + Name(_PRW, Package() {0,0}) // wakeable from S0 + Name(_S0W, 2) // S0 should put device in D2 for wake + Name(_S4W, 2) // all other Sx (just in case) should also wake from D2 + Name(_PRR, Package(0x1) { \_SB.AMSS.QWLN.WRST }) // Power resource reference for device reset and recovery. + + Method (_CRS, 0x0, NotSerialized) + { + Name (RBUF, ResourceTemplate () + { + // Shared memory + Memory32Fixed (ReadWrite, 0x18800000, 0x800000) //CE registers + Memory32Fixed (ReadWrite, 0xC250000, 0x10) //WCSSAON registers + Memory32Fixed (ReadWrite, 0x8E300000, 0x100000) //MSA image address + // CE interrupts + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {446} //CE0 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {447} //CE1 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, ExclusiveAndWake, , , ) {448} //CE2 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {449} //CE3 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {450} //CE4 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {451} //CE5 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {452} //CE6 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {453} //CE7 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {454} //CE8 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {455} //CE9 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {456} //CE10 interrupt + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive , , , ) {457} //CE11 interrupt + }) + Return (RBUF) + } + + // wlan msa memory size + Method (WMSA) + { + Return(Package () + { + 0x100000 + }) + } + + Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 + { + } + + Method (_PS2, 0, NotSerialized) // _PS2: Power State 2 + { + } + + Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 + { + } + + OperationRegion (WOPR, 0x80, Zero, 0x10) + Field (WOPR, DWordAcc, NoLock, Preserve) + { + Offset (0x04), + WTRG, 32 + } + + PowerResource(WRST, 0x5, 0x0) + { + // + // Dummy _ON, _OFF, and _STA methods. All power resources must have these + // three defined. + // + Method(_ON, 0x0, NotSerialized) + { + } + Method(_OFF, 0x0, NotSerialized) + { + } + Method(_STA, 0x0, NotSerialized) + { + Return(0xf) + } + Method(_RST, 0x0, NotSerialized) + { + WTRG = 0xABCD + } + } +} + +//agent driver of wlan for supporting windows thermal framework +Scope(\_SB) +{ + Device (COEX) + { + Name (_HID, "QCOM0295") + Alias(\_SB.PSUB, _SUB) + } +} diff --git a/dipper/wlan_11ad.asl b/dipper/wlan_11ad.asl new file mode 100755 index 0000000..aac73d8 --- /dev/null +++ b/dipper/wlan_11ad.asl @@ -0,0 +1,6 @@ +//WLAN_11ad driver ACPI Enumeration + +Method(_STA, 0) +{ + Return (0xF) +} -- 2.45.2