fw_config
	field DB_PORTS 0 3
		option DB_PORTS_NONE 0
		option DB_PORTS_2C_2A 1
		option DB_PORTS_1C_LTE 2
		option DB_PORTS_1A_HDMI 3
		option DB_PORTS_1C_1A 4
		option DB_PORTS_LTE_HDMI 5
		option DB_PORTS_1C_1A_LTE 6
		option DB_PORTS_1C 7
		option DB_PORTS_1A_HDMI_LTE 8
		option DB_PORTS_LTE 9
	end
	field STYLUS 4
		option STYLUS_ABSENT 0
		option STYLUS_PRESENT 1
	end
	field TOUCHSCREEN 5
		option TOUCHSCREEN_ABSENT	0
		option TOUCHSCREEN_PRESENT	1
	end
        field TABLETMODE 10
                option TABLETMODE_DISABLED 0
                option TABLETMODE_ENABLED 1
        end
	field LTE 11
		option LTE_ABSENT 0
		option LTE_PRESENT 1
	end
	field AUDIO_AMP 14 16
		option UNPROVISIONED 0
		option MAX98360 1
		option RT1015_I2C 2
		option RT1015P_AUTO 3
		option ALC5650 4
	end
	field EXT_VR 18
		option EXT_VR_PRESENT 0
		option EXT_VR_ABSENT 1
	end
end

chip soc/intel/jasperlake
	device cpu_cluster 0 on end

	# GPE configuration
	# Note that GPE events called out in ASL code rely on this
	# route, i.e., if this route changes then the affected GPE
	# offset bits also need to be changed.
	# DW0 is used by:
	#   - GPP_B3 - TRACKPAD_INT_ODL
	#   - GPP_B4 - H1_AP_INT_ODL
	# DW1 is used by:
	#   - GPP_C12 - AP_PEN_DET_ODL
	# DW2 is used by:
	#   - GPP_D0 - WWAN_HOST_WAKE
	#   - GPP_D3 - WLAN_PCIE_WAKE_ODL
	# EC_AP_WAKE_ODL is routed to LAN_WAKE#/GPD02 & is part of DW3.
	register "pmc_gpe0_dw0" = "PMC_GPP_B"
	register "pmc_gpe0_dw1" = "PMC_GPP_C"
	register "pmc_gpe0_dw2" = "PMC_GPP_D"

	# EC host command ranges are in 0x800-0x8ff & 0x200-0x20f
	register "gen1_dec" = "0x00fc0801"
	register "gen2_dec" = "0x000c0201"
	# EC memory map range is 0x900-0x9ff
	register "gen3_dec" = "0x00fc0901"

	# USB Port Configuration
	register "usb2_ports[0]" = "USB2_PORT_MID(OC_SKIP)"	# Type-C Port C0
	register "usb2_ports[1]" = "USB2_PORT_MID(OC_SKIP)"	# Type-C Port C1
	register "usb2_ports[2]" = "USB2_PORT_MID(OC_SKIP)"	# Type-A Port A0
	register "usb2_ports[3]" = "USB2_PORT_MID(OC_SKIP)"	# Type-A Port A1
	register "usb2_ports[4]" = "USB2_PORT_MID(OC_SKIP)"	# Discrete Bluetooth
	register "usb2_ports[7]" = "USB2_PORT_MID(OC_SKIP)"	# Integrated Bluetooth

	register "usb3_ports[0]" = "USB3_PORT_DEFAULT(OC_SKIP)"	# USB3/2 Type-C Port C0
	register "usb3_ports[1]" = "USB3_PORT_DEFAULT(OC_SKIP)"	# USB3/2 Type-C Port C1
	register "usb3_ports[2]" = "USB3_PORT_DEFAULT(OC_SKIP)"	# USB3/1 Type-A Port A0
	register "usb3_ports[3]" = "USB3_PORT_DEFAULT(OC_SKIP)"	# USB3/1 Type-A Port A1

	register "SerialIoI2cMode" = "{
		[PchSerialIoIndexI2C0]  = PchSerialIoPci,
		[PchSerialIoIndexI2C1]  = PchSerialIoPci,
		[PchSerialIoIndexI2C2]  = PchSerialIoPci,
		[PchSerialIoIndexI2C3]  = PchSerialIoPci,
		[PchSerialIoIndexI2C4]  = PchSerialIoPci,
		[PchSerialIoIndexI2C5]  = PchSerialIoDisabled,
	}"

	register "SerialIoGSpiMode" = "{
		[PchSerialIoIndexGSPI0] = PchSerialIoPci,
		[PchSerialIoIndexGSPI1] = PchSerialIoDisabled,
		[PchSerialIoIndexGSPI2] = PchSerialIoDisabled,
	}"

	register "SerialIoGSpiCsMode" = "{
		[PchSerialIoIndexGSPI0] = 1,
		[PchSerialIoIndexGSPI1] = 0,
		[PchSerialIoIndexGSPI2] = 0,
	}"

	register "SerialIoGSpiCsState" = "{
		[PchSerialIoIndexGSPI0] = 0,
		[PchSerialIoIndexGSPI1] = 0,
		[PchSerialIoIndexGSPI2] = 0,
	}"

	register "SerialIoUartMode" = "{
		[PchSerialIoIndexUART0] = PchSerialIoDisabled,
		[PchSerialIoIndexUART1] = PchSerialIoDisabled,
		[PchSerialIoIndexUART2] = PchSerialIoSkipInit,
	}"

	register "PcieClkSrcUsage[0]" = "0xff"
	register "PcieClkSrcUsage[1]" = "0xff"
	register "PcieClkSrcUsage[2]" = "0xff"
	# PCIe Clock Source 4 (index 3) is used by WLAN on PCIe Root Port 8 (index 7)
	register "PcieClkSrcUsage[3]" = "7"
	register "PcieClkSrcUsage[4]" = "0xff"
	register "PcieClkSrcUsage[5]" = "0xff"

	# PCIE Clock Request to Clock Source Mapping
	register "PcieClkSrcClkReq[0]" = "0"
	register "PcieClkSrcClkReq[1]" = "1"
	register "PcieClkSrcClkReq[2]" = "2"
	register "PcieClkSrcClkReq[3]" = "3"
	register "PcieClkSrcClkReq[4]" = "4"
	register "PcieClkSrcClkReq[5]" = "5"

	# Audio related configurations
	register "PchHdaDspEnable" = "1"
	register "PchHdaAudioLinkHdaEnable" = "1"
	register "PchHdaAudioLinkSspEnable[0]" = "1"
	register "PchHdaAudioLinkSspEnable[1]" = "1"
	register "PchHdaAudioLinkDmicEnable[0]" = "1"
	register "PchHdaAudioLinkDmicEnable[1]" = "1"

	# Enable EMMC HS400 mode
	register "ScsEmmcHs400Enabled" = "1"

	# GPIO for SD card detect
	register "sdcard_cd_gpio" = "VGPIO_39"
	# SD card power enable polarity
	register "SdCardPowerEnableActiveHigh" = "1"

	# Enable S0ix support
	register "s0ix_enable" = "true"

	# Display related UPDs
	# Select eDP for port A
	register "DdiPortAConfig" = "1"

	# Enable HPD for DDI ports B/C
	register "DdiPortBHpd" = "1"
	register "DdiPortCHpd" = "1"
	# Enable DDC for DDI ports B/C
	register "DdiPortBDdc" = "1"
	register "DdiPortCDdc" = "1"

	# Enable DPTF
	register "dptf_enable" = "1"

	# Power limit config
	register "power_limits_config[JSL_N4500_6W_CORE]" = "{
		.tdp_pl1_override = 6,
		.tdp_pl2_override = 20,
	}"

	register "power_limits_config[JSL_N6000_6W_CORE]" = "{
		.tdp_pl1_override = 6,
		.tdp_pl2_override = 20,
	}"

	register "power_limits_config[JSL_N5100_6W_CORE]" = "{
		.tdp_pl1_override = 6,
		.tdp_pl2_override = 20,
	}"

	register "power_limits_config[JSL_N4505_10W_CORE]" = "{
		.tdp_pl1_override = 10,
		.tdp_pl2_override = 25,
	}"

	register "power_limits_config[JSL_N5105_10W_CORE]" = "{
		.tdp_pl1_override = 10,
		.tdp_pl2_override = 25,
	}"

	register "power_limits_config[JSL_N6005_10W_CORE]" = "{
		.tdp_pl1_override = 10,
		.tdp_pl2_override = 25,
	}"

	register "tcc_offset" = "10"     # TCC of 90C

	# VR config settings
	# Imon Slope correction specified in 1/100 increment values. Range is 0-200.
	# Eg: 125 = 1.25
	register "ImonSlope" = "100"

	# Imon offset correction. Value is a 2's complement signed integer.
	# Units 1/1000, Range 0-63999.
	# For an offset = 12.580, use 12580
	register "ImonOffset" = "0"

	# Skip the CPU replacement check
	register "SkipCpuReplacementCheck" = "1"

	# Sagv Configuration
	register "SaGv" = "SaGv_Enabled"

	# Set the minimum assertion width
	register "PchPmSlpS3MinAssert"  = "3"  # 50ms
	register "PchPmSlpS4MinAssert"  = "1"  # 1s
	register "PchPmSlpSusMinAssert" = "3"  # 1s
	register "PchPmSlpAMinAssert"   = "3"  # 98ms

	# NOTE: Duration programmed in the below register should never be smaller than the
	# stretch duration programmed in the following registers -
	#       - GEN_PMCON_A.SLP_S3_MIN_ASST_WDTH (PchPmSlpS3MinAssert)
	#       - GEN_PMCON_A.S4MAW (PchPmSlpS4MinAssert)
	#       - PM_CFG.SLP_A_MIN_ASST_WDTH (PchPmSlpAMinAssert)
	#       - PM_CFG.SLP_LAN_MIN_ASST_WDTH
	register "PchPmPwrCycDur" = "1"       # 1s

	# Set xHCI LFPS period sampling off time, the default is 9ms.
	register "xhci_lfps_sampling_offtime_ms" = "9"

	device domain 0 on
		device pci 00.0 on end # Host Bridge
		device pci 02.0 on
			register "gfx" = "GMA_DEFAULT_PANEL(0)"
		end # Integrated Graphics Device
		device pci 04.0 on
			# Default DPTF Policy for all Dedede boards if not overridden
			chip drivers/intel/dptf
				## Passive Policy
				register "policies.passive" = "{
					[0] = DPTF_PASSIVE(CPU, CPU,           90, 10000),
					[1] = DPTF_PASSIVE(CPU, TEMP_SENSOR_0, 80, 60000),
					[2] = DPTF_PASSIVE(CPU, TEMP_SENSOR_1, 55, 15000),
					[3] = DPTF_PASSIVE(CHARGER, TEMP_SENSOR_2, 75, 15000)
				}"

				## Critical Policy
				register "policies.critical" = "{
					[0] = DPTF_CRITICAL(CPU,           105, SHUTDOWN),
					[1] = DPTF_CRITICAL(TEMP_SENSOR_0, 90, SHUTDOWN),
					[2] = DPTF_CRITICAL(TEMP_SENSOR_1, 80, SHUTDOWN),
					[3] = DPTF_CRITICAL(TEMP_SENSOR_2, 90, SHUTDOWN)
				}"

				## Power Limits Control
				register "controls.power_limits" = "{
					.pl1 = {
						.min_power = 3000,
						.max_power = 6000,
						.time_window_min = 1 * MSECS_PER_SEC,
						.time_window_max = 1 * MSECS_PER_SEC,
						.granularity = 200,
					},
					.pl2 = {
						.min_power = 20000,
						.max_power = 20000,
						.time_window_min = 1 * MSECS_PER_SEC,
						.time_window_max = 1 * MSECS_PER_SEC,
						.granularity = 1000,
					}
				}"

				register "options.tsr[0].desc" = ""Memory""
				register "options.tsr[1].desc" = ""Ambient""
				register "options.tsr[2].desc" = ""Charger""

				## Charger Performance Control (Control, mA)
				register "controls.charger_perf" = "{
					[0] = { 255, 3000 },
					[1] = {  24, 1500 },
					[2] = {  16, 1000 },
					[3] = {   8,  500 }
				}"

				device generic 0 on end
			end
		end # SA Thermal device
		device pci 05.0 off end # IPU
		device pci 09.0 off end # Intel Trace Hub
		device pci 12.6 off end # GSPI 2
		device pci 14.0 on
			chip drivers/usb/acpi
				register "desc" = ""Root Hub""
				register "type" = "UPC_TYPE_HUB"
				device usb 0.0 on
					chip drivers/usb/acpi
						register "desc" = ""Left Type-C Port""
						register "type" = "UPC_TYPE_C_USB2_SS_SWITCH"
						register "group" = "ACPI_PLD_GROUP(1, 1)"
						device usb 2.0 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Right Type-C Port""
						register "type" = "UPC_TYPE_C_USB2_SS_SWITCH"
						register "group" = "ACPI_PLD_GROUP(2, 1)"
						device usb 2.1 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Left Type-A Port""
						register "type" = "UPC_TYPE_A"
						register "group" = "ACPI_PLD_GROUP(1, 2)"
						device usb 2.2 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Right Type-A Port""
						register "type" = "UPC_TYPE_A"
						register "group" = "ACPI_PLD_GROUP(2, 2)"
						device usb 2.3 on end
					end
					chip drivers/usb/acpi
						device usb 2.4 off end
					end
					chip drivers/usb/acpi
						device usb 2.5 off end
					end
					chip drivers/usb/acpi
						device usb 2.6 off end
					end
					chip drivers/usb/acpi
						register "desc" = ""Bluetooth""
						register "type" = "UPC_TYPE_INTERNAL"
						register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPP_H19)"
						device usb 2.7 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Left Type-C Port""
						register "type" = "UPC_TYPE_C_USB2_SS_SWITCH"
						register "group" = "ACPI_PLD_GROUP(1, 1)"
						device usb 3.0 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Right Type-C Port""
						register "type" = "UPC_TYPE_C_USB2_SS_SWITCH"
						register "group" = "ACPI_PLD_GROUP(2, 1)"
						device usb 3.1 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Left Type-A Port""
						register "type" = "UPC_TYPE_USB3_A"
						register "group" = "ACPI_PLD_GROUP(1, 2)"
						device usb 3.2 on end
					end
					chip drivers/usb/acpi
						register "desc" = ""Right Type-A Port""
						register "type" = "UPC_TYPE_USB3_A"
						register "group" = "ACPI_PLD_GROUP(2, 2)"
						device usb 3.3 on end
					end
				end
			end
		end # USB xHCI
		device pci 14.1 off end # USB xDCI (OTG)
		device pci 14.2 alias shared_ram on end # PMC SRAM
		device pci 14.3 on
			chip drivers/wifi/generic
				register "wake" = "GPE0_PME_B0"
				device generic 0 on end
			end
		end # CNVi wifi
		device pci 14.5 on  end # SDCard
		device pci 15.0 on  end # I2C 0
		device pci 15.1 on  end # I2C 1
		device pci 15.2 on  end # I2C 2
		device pci 15.3 on  end # I2C 3
		device pci 16.0 on  end # HECI 1
		device pci 16.1 off end # HECI 2
		device pci 16.4 off end # HECI 3
		device pci 16.5 off end # HECI 4
		device pci 17.0 off end # SATA
		device pci 19.0 on  end # I2C 4
		device pci 19.1 off end # I2C 5
		device pci 19.2 on  end # UART 2
		device pci 1a.0 on  end # eMMC
		device pci 1c.0 off end # PCI Express Root Port 1
		device pci 1c.1 off end # PCI Express Root Port 2
		device pci 1c.2 off end # PCI Express Root Port 3
		device pci 1c.3 off end # PCI Express Root Port 4
		device pci 1c.4 off end # PCI Express Root Port 5
		device pci 1c.5 off end # PCI Express Root Port 6
		device pci 1c.6 off end # PCI Express Root Port 7
		# External PCIe port 4 is mapped to PCIe Root port 8
		device pci 1c.7 on  end # PCI Express Root Port 8 - hosts M.2 E-key WLAN
		device pci 1e.0 off end # UART 0
		device pci 1e.1 off end # UART 1
		device pci 1e.2 on
			chip drivers/spi/acpi
				register "hid" = "ACPI_DT_NAMESPACE_HID"
				register "compat_string" = ""google,cr50""
				register "irq" = "ACPI_IRQ_EDGE_LOW(GPP_B4_IRQ)"
				device spi 0 on end
			end
		end # GSPI 0
		device pci 1e.3 off end # GSPI 1
		device pci 1f.0 on
			chip ec/google/chromeec
				device pnp 0c09.0 on end
			end
		end # eSPI Interface
		device pci 1f.1 on  end # P2SB
		device pci 1f.2 hidden end # Power Management Controller
		device pci 1f.3 on
			chip drivers/sof
				register "spkr_tplg" = "rt1015"
				register "jack_tplg" = "rt5682"
				register "mic_tplg" = "_2ch_pdm0"
				device generic 0 on
					probe AUDIO_AMP RT1015_I2C
					probe AUDIO_AMP RT1015P_AUTO
					probe AUDIO_AMP UNPROVISIONED
				end
			end
			chip drivers/sof
				register "spkr_tplg" = "max98360a"
				register "jack_tplg" = "rt5682"
				register "mic_tplg" = "_2ch_pdm0"
				device generic 0 on
					probe AUDIO_AMP MAX98360
				end
			end
		end # Intel HDA/cAVS
		device pci 1f.4 off end # SMBus
		device pci 1f.5 on  end # PCH SPI
		device pci 1f.7 off end # Intel Trace Hub
	end
end