From c756be2b2b4624d8fb7a1e14e69fc70591c86546 Mon Sep 17 00:00:00 2001 From: Bill XIE Date: Thu, 16 Mar 2023 16:37:22 +0800 Subject: [PATCH] mb/hp/snb_ivb_laptops: Add HP EliteBook 2170p as 2570p variant Most of the code is taken from 2570p, adjusted with autoport, SuperIO from 8470p and inteltool, GPIO config from inteltool via autoport. The laptop works well under coreboot with SeaBIOS 1.16.1 payload, running Debian GNU/Linux with kernel 6.1.15. Signed-off-by: Bill XIE Change-Id: I854104516d5b6fbd78ee2989197000a7dbb85136 Reviewed-on: https://review.coreboot.org/c/coreboot/+/73856 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- Documentation/mainboard/hp/2170p.md | 91 +++++++ Documentation/mainboard/hp/2170p_flash.jpg | Bin 0 -> 51705 bytes Documentation/mainboard/index.md | 1 + src/mainboard/hp/snb_ivb_laptops/Kconfig | 14 +- src/mainboard/hp/snb_ivb_laptops/Kconfig.name | 3 + .../variants/2170p/board_info.txt | 7 + .../snb_ivb_laptops/variants/2170p/data.vbt | Bin 0 -> 4280 bytes .../variants/2170p/early_init.c | 43 ++++ .../variants/2170p/gma-mainboard.ads | 22 ++ .../hp/snb_ivb_laptops/variants/2170p/gpio.c | 229 ++++++++++++++++++ .../snb_ivb_laptops/variants/2170p/hda_verb.c | 32 +++ .../variants/2170p/overridetree.cb | 59 +++++ 12 files changed, 500 insertions(+), 1 deletion(-) create mode 100644 Documentation/mainboard/hp/2170p.md create mode 100644 Documentation/mainboard/hp/2170p_flash.jpg create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/board_info.txt create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/data.vbt create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/early_init.c create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/gma-mainboard.ads create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/gpio.c create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/hda_verb.c create mode 100644 src/mainboard/hp/snb_ivb_laptops/variants/2170p/overridetree.cb diff --git a/Documentation/mainboard/hp/2170p.md b/Documentation/mainboard/hp/2170p.md new file mode 100644 index 0000000000..5f67c38b11 --- /dev/null +++ b/Documentation/mainboard/hp/2170p.md @@ -0,0 +1,91 @@ +# HP EliteBook 2170p + +This page is about the notebook [HP EliteBook 2170p]. + +## Release status + +HP EliteBook 2170p was released in 2012 and is now end of life. +It can be bought from a secondhand market like Taobao or eBay. + +## Required proprietary blobs + +The following blobs are required to operate the hardware: +1. EC firmware +2. Intel ME firmware + +EC firmware can be retrieved from the HP firmware update image, or the firmware +backup of the laptop. EC Firmware is part of the coreboot build process. +The guide on extracting EC firmware and using it to build coreboot is in +document [HP Laptops with KBC1126 Embedded Controller](hp_kbc1126_laptops). + +Intel ME firmware is in the flash chip. It is not needed when building coreboot. + +## Programming + +The flash chip is located between the memory slots, WWAN card and CPU, +covered by the base enclosure, which needs to be removed according to +the [Maintenance and Service Guide] to access the flash chip. Unlike +other variants, the flash chip on 2170p is socketed, so it can be taken +off and operated with an external programmer. + +Pin 1 of the flash chip is at the side near the CPU. + +![Flash Chip in 2170p](2170p_flash.jpg) + +For more details have a look at the general [flashing tutorial]. + +## Debugging + +The board can be debugged with serial port on the dock or EHCI debug. +The EHCI debug port is the left USB3 port. + +## Test status + +### Known issues + +- GRUB payload freezes if at_keyboard module is in the GRUB image + ([bug #141]) + +### Untested + +- Fingerprint Reader +- Dock: Parallel port, PS/2 mouse, S-Video port + +### Working + +- Integrated graphics init with libgfxinit +- SATA +- Audio: speaker and microphone +- Ethernet +- WLAN +- WWAN +- Bluetooth +- SD Card Reader +- SmartCard Reader +- USB +- DisplayPort +- Keyboard, touchpad and trackpoint +- EC ACPI support and thermal control +- Dock: all USB ports, DVI-D, Serial debug, PS/2 keyboard +- TPM +- Internal flashing when IFD is unlocked +- Using `me_cleaner` + + +## Technology + +```eval_rst ++------------------+--------------------------------------------------+ +| CPU | Intel Sandy/Ivy Bridge (FCPGA988) | ++------------------+--------------------------------------------------+ +| PCH | Intel Panther Point QM77 | ++------------------+--------------------------------------------------+ +| EC | SMSC KBC1126 | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +[HP EliteBook 2170p]: https://support.hp.com/us-en/product/hp-elitebook-2170p-notebook-pc/5245427 +[Maintenance and Service Guide]: http://h10032.www1.hp.com/ctg/Manual/c03387961.pdf +[flashing tutorial]: ../../tutorial/flashing_firmware/ext_power.md diff --git a/Documentation/mainboard/hp/2170p_flash.jpg b/Documentation/mainboard/hp/2170p_flash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16cef8adc3e59bd585d545bc99824eb457c5a146 GIT binary patch literal 51705 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 S*C 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 +#include +#include +#include +#include + +#define SERIAL_DEV PNP_DEV(0x4e, LPC47N217_SP1) + +const struct southbridge_usb_port mainboard_usb_ports[] = { + { 1, 1, 0 }, /* SSP1: dock */ + { 1, 1, 0 }, /* SSP2: left, EHCI Debug */ + { 0, 1, 1 }, /* SSP3 */ + { 1, 1, 1 }, /* SSP4: right */ + { 0, 0, 2 }, /* B0P5 */ + { 0, 0, 2 }, /* B0P6 */ + { 0, 0, 3 }, /* B0P7 */ + { 1, 0, 3 }, /* B0P8: smart card reader */ + { 1, 0, 4 }, /* B1P1: fingerprint reader */ + { 1, 0, 4 }, /* B1P2: (EHCI Debug) wlan usb */ + { 1, 1, 5 }, /* B1P3: Camera */ + { 1, 0, 5 }, /* B1P4 */ + { 1, 0, 6 }, /* B1P5: wwan USB */ + { 0, 0, 6 }, /* B1P6 */ +}; + +void bootblock_mainboard_early_init(void) +{ + lpc47n217_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE); + kbc1126_enter_conf(); + kbc1126_mailbox_init(); + kbc1126_kbc_init(); + kbc1126_ec_init(); + kbc1126_pm1_init(); + kbc1126_exit_conf(); +} + +void mainboard_get_spd(spd_raw_data *spd, bool id_only) +{ + read_spd(&spd[0], 0x50, id_only); + read_spd(&spd[2], 0x52, id_only); +} diff --git a/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gma-mainboard.ads b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gma-mainboard.ads new file mode 100644 index 0000000000..3df1e37f3e --- /dev/null +++ b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gma-mainboard.ads @@ -0,0 +1,22 @@ +-- SPDX-License-Identifier: GPL-2.0-or-later + +with HW.GFX.GMA; +with HW.GFX.GMA.Display_Probing; + +use HW.GFX.GMA; +use HW.GFX.GMA.Display_Probing; + +private package GMA.Mainboard is + + ports : constant Port_List := + (DP1, + DP2, + DP3, + HDMI1, + HDMI2, + HDMI3, + Analog, + LVDS, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gpio.c b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gpio.c new file mode 100644 index 0000000000..9b2babf7b9 --- /dev/null +++ b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/gpio.c @@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +static const struct pch_gpio_set1 pch_gpio_set1_mode = { + .gpio0 = GPIO_MODE_GPIO, + .gpio1 = GPIO_MODE_GPIO, + .gpio2 = GPIO_MODE_GPIO, + .gpio3 = GPIO_MODE_GPIO, + .gpio4 = GPIO_MODE_GPIO, + .gpio5 = GPIO_MODE_NATIVE, + .gpio6 = GPIO_MODE_GPIO, + .gpio7 = GPIO_MODE_GPIO, + .gpio8 = GPIO_MODE_GPIO, + .gpio9 = GPIO_MODE_NATIVE, + .gpio10 = GPIO_MODE_GPIO, + .gpio11 = GPIO_MODE_GPIO, + .gpio12 = GPIO_MODE_NATIVE, + .gpio13 = GPIO_MODE_GPIO, + .gpio14 = GPIO_MODE_GPIO, + .gpio15 = GPIO_MODE_GPIO, + .gpio16 = GPIO_MODE_GPIO, + .gpio17 = GPIO_MODE_GPIO, + .gpio18 = GPIO_MODE_GPIO, + .gpio19 = GPIO_MODE_NATIVE, + .gpio20 = GPIO_MODE_NATIVE, + .gpio21 = GPIO_MODE_GPIO, + .gpio22 = GPIO_MODE_GPIO, + .gpio23 = GPIO_MODE_GPIO, + .gpio24 = GPIO_MODE_GPIO, + .gpio25 = GPIO_MODE_NATIVE, + .gpio26 = GPIO_MODE_NATIVE, + .gpio27 = GPIO_MODE_GPIO, + .gpio28 = GPIO_MODE_GPIO, + .gpio29 = GPIO_MODE_GPIO, + .gpio30 = GPIO_MODE_NATIVE, + .gpio31 = GPIO_MODE_NATIVE, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_direction = { + .gpio0 = GPIO_DIR_OUTPUT, + .gpio1 = GPIO_DIR_INPUT, + .gpio2 = GPIO_DIR_OUTPUT, + .gpio3 = GPIO_DIR_INPUT, + .gpio4 = GPIO_DIR_INPUT, + .gpio6 = GPIO_DIR_INPUT, + .gpio7 = GPIO_DIR_INPUT, + .gpio8 = GPIO_DIR_INPUT, + .gpio10 = GPIO_DIR_INPUT, + .gpio11 = GPIO_DIR_OUTPUT, + .gpio13 = GPIO_DIR_INPUT, + .gpio14 = GPIO_DIR_INPUT, + .gpio15 = GPIO_DIR_INPUT, + .gpio16 = GPIO_DIR_INPUT, + .gpio17 = GPIO_DIR_OUTPUT, + .gpio18 = GPIO_DIR_INPUT, + .gpio21 = GPIO_DIR_INPUT, + .gpio22 = GPIO_DIR_OUTPUT, + .gpio23 = GPIO_DIR_INPUT, + .gpio24 = GPIO_DIR_OUTPUT, + .gpio27 = GPIO_DIR_OUTPUT, + .gpio28 = GPIO_DIR_OUTPUT, + .gpio29 = GPIO_DIR_OUTPUT, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_level = { + .gpio0 = GPIO_LEVEL_LOW, + .gpio2 = GPIO_LEVEL_HIGH, + .gpio8 = GPIO_LEVEL_LOW, + .gpio11 = GPIO_LEVEL_LOW, + .gpio17 = GPIO_LEVEL_HIGH, + .gpio22 = GPIO_LEVEL_HIGH, + .gpio24 = GPIO_LEVEL_LOW, + .gpio27 = GPIO_LEVEL_LOW, + .gpio28 = GPIO_LEVEL_LOW, + .gpio29 = GPIO_LEVEL_HIGH, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_reset = { + .gpio24 = GPIO_RESET_RSMRST, + .gpio30 = GPIO_RESET_RSMRST, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_invert = { + .gpio1 = GPIO_INVERT, + .gpio3 = GPIO_INVERT, + .gpio6 = GPIO_INVERT, + .gpio7 = GPIO_INVERT, + .gpio10 = GPIO_INVERT, + .gpio13 = GPIO_INVERT, + .gpio14 = GPIO_INVERT, +}; + +static const struct pch_gpio_set1 pch_gpio_set1_blink = { +}; + +static const struct pch_gpio_set2 pch_gpio_set2_mode = { + .gpio32 = GPIO_MODE_NATIVE, + .gpio33 = GPIO_MODE_GPIO, + .gpio34 = GPIO_MODE_GPIO, + .gpio35 = GPIO_MODE_GPIO, + .gpio36 = GPIO_MODE_GPIO, + .gpio37 = GPIO_MODE_GPIO, + .gpio38 = GPIO_MODE_GPIO, + .gpio39 = GPIO_MODE_GPIO, + .gpio40 = GPIO_MODE_NATIVE, + .gpio41 = GPIO_MODE_NATIVE, + .gpio42 = GPIO_MODE_NATIVE, + .gpio43 = GPIO_MODE_NATIVE, + .gpio44 = GPIO_MODE_GPIO, + .gpio45 = GPIO_MODE_NATIVE, + .gpio46 = GPIO_MODE_GPIO, + .gpio47 = GPIO_MODE_NATIVE, + .gpio48 = GPIO_MODE_GPIO, + .gpio49 = GPIO_MODE_GPIO, + .gpio50 = GPIO_MODE_GPIO, + .gpio51 = GPIO_MODE_GPIO, + .gpio52 = GPIO_MODE_GPIO, + .gpio53 = GPIO_MODE_GPIO, + .gpio54 = GPIO_MODE_GPIO, + .gpio55 = GPIO_MODE_GPIO, + .gpio56 = GPIO_MODE_NATIVE, + .gpio57 = GPIO_MODE_GPIO, + .gpio58 = GPIO_MODE_NATIVE, + .gpio59 = GPIO_MODE_NATIVE, + .gpio60 = GPIO_MODE_GPIO, + .gpio61 = GPIO_MODE_GPIO, + .gpio62 = GPIO_MODE_NATIVE, + .gpio63 = GPIO_MODE_NATIVE, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_direction = { + .gpio33 = GPIO_DIR_OUTPUT, + .gpio34 = GPIO_DIR_INPUT, + .gpio35 = GPIO_DIR_OUTPUT, + .gpio36 = GPIO_DIR_OUTPUT, + .gpio37 = GPIO_DIR_OUTPUT, + .gpio38 = GPIO_DIR_INPUT, + .gpio39 = GPIO_DIR_INPUT, + .gpio44 = GPIO_DIR_INPUT, + .gpio46 = GPIO_DIR_INPUT, + .gpio48 = GPIO_DIR_INPUT, + .gpio49 = GPIO_DIR_OUTPUT, + .gpio50 = GPIO_DIR_INPUT, + .gpio51 = GPIO_DIR_INPUT, + .gpio52 = GPIO_DIR_INPUT, + .gpio53 = GPIO_DIR_OUTPUT, + .gpio54 = GPIO_DIR_INPUT, + .gpio55 = GPIO_DIR_INPUT, + .gpio57 = GPIO_DIR_OUTPUT, + .gpio60 = GPIO_DIR_OUTPUT, + .gpio61 = GPIO_DIR_OUTPUT, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_level = { + .gpio33 = GPIO_LEVEL_LOW, + .gpio35 = GPIO_LEVEL_LOW, + .gpio36 = GPIO_LEVEL_LOW, + .gpio37 = GPIO_LEVEL_LOW, + .gpio46 = GPIO_LEVEL_LOW, + .gpio49 = GPIO_LEVEL_LOW, + .gpio53 = GPIO_LEVEL_HIGH, + .gpio57 = GPIO_LEVEL_HIGH, + .gpio60 = GPIO_LEVEL_HIGH, + .gpio61 = GPIO_LEVEL_LOW, +}; + +static const struct pch_gpio_set2 pch_gpio_set2_reset = { +}; + +static const struct pch_gpio_set3 pch_gpio_set3_mode = { + .gpio64 = GPIO_MODE_NATIVE, + .gpio65 = GPIO_MODE_NATIVE, + .gpio66 = GPIO_MODE_NATIVE, + .gpio67 = GPIO_MODE_NATIVE, + .gpio68 = GPIO_MODE_GPIO, + .gpio69 = GPIO_MODE_GPIO, + .gpio70 = GPIO_MODE_GPIO, + .gpio71 = GPIO_MODE_GPIO, + .gpio72 = GPIO_MODE_GPIO, + .gpio73 = GPIO_MODE_GPIO, + .gpio74 = GPIO_MODE_GPIO, + .gpio75 = GPIO_MODE_NATIVE, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_direction = { + .gpio68 = GPIO_DIR_OUTPUT, + .gpio69 = GPIO_DIR_INPUT, + .gpio70 = GPIO_DIR_OUTPUT, + .gpio71 = GPIO_DIR_OUTPUT, + .gpio72 = GPIO_DIR_OUTPUT, + .gpio73 = GPIO_DIR_OUTPUT, + .gpio74 = GPIO_DIR_OUTPUT, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_level = { + .gpio68 = GPIO_LEVEL_HIGH, + .gpio70 = GPIO_LEVEL_HIGH, + .gpio71 = GPIO_LEVEL_HIGH, + .gpio72 = GPIO_LEVEL_LOW, + .gpio73 = GPIO_LEVEL_HIGH, + .gpio74 = GPIO_LEVEL_HIGH, +}; + +static const struct pch_gpio_set3 pch_gpio_set3_reset = { +}; + +const struct pch_gpio_map mainboard_gpio_map = { + .set1 = { + .mode = &pch_gpio_set1_mode, + .direction = &pch_gpio_set1_direction, + .level = &pch_gpio_set1_level, + .blink = &pch_gpio_set1_blink, + .invert = &pch_gpio_set1_invert, + .reset = &pch_gpio_set1_reset, + }, + .set2 = { + .mode = &pch_gpio_set2_mode, + .direction = &pch_gpio_set2_direction, + .level = &pch_gpio_set2_level, + .reset = &pch_gpio_set2_reset, + }, + .set3 = { + .mode = &pch_gpio_set3_mode, + .direction = &pch_gpio_set3_direction, + .level = &pch_gpio_set3_level, + .reset = &pch_gpio_set3_reset, + }, +}; diff --git a/src/mainboard/hp/snb_ivb_laptops/variants/2170p/hda_verb.c b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/hda_verb.c new file mode 100644 index 0000000000..c4c0286ae5 --- /dev/null +++ b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/hda_verb.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + 0x111d7605, /* Codec Vendor / Device ID: IDT */ + 0x103c1815, /* Subsystem ID */ + 11, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(0, 0x103c1815), + AZALIA_PIN_CFG(0, 0x0a, 0x21011030), + AZALIA_PIN_CFG(0, 0x0b, 0x0421101f), + AZALIA_PIN_CFG(0, 0x0c, 0x03a11020), + AZALIA_PIN_CFG(0, 0x0d, 0x90170110), + AZALIA_PIN_CFG(0, 0x0e, 0x40f000f0), + AZALIA_PIN_CFG(0, 0x0f, 0x2181102e), + AZALIA_PIN_CFG(0, 0x10, 0x40f000f0), + AZALIA_PIN_CFG(0, 0x11, 0xd5a30140), + AZALIA_PIN_CFG(0, 0x1f, 0x40f000f0), + AZALIA_PIN_CFG(0, 0x20, 0x40f000f0), + + 0x80862806, /* Codec Vendor / Device ID: Intel */ + 0x80860101, /* Subsystem ID */ + 4, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(3, 0x80860101), + AZALIA_PIN_CFG(3, 0x05, 0x18560010), + AZALIA_PIN_CFG(3, 0x06, 0x18560020), + AZALIA_PIN_CFG(3, 0x07, 0x18560030), +}; + +const u32 pc_beep_verbs[0] = {}; + +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/hp/snb_ivb_laptops/variants/2170p/overridetree.cb b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/overridetree.cb new file mode 100644 index 0000000000..8f35eee65c --- /dev/null +++ b/src/mainboard/hp/snb_ivb_laptops/variants/2170p/overridetree.cb @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +chip northbridge/intel/sandybridge + register "gpu_cpu_backlight" = "0x0000040e" + register "gpu_panel_power_backlight_off_delay" = "2000" + register "gpu_pch_backlight" = "0x0d9c0d9c" + device domain 0 on + subsystemid 0x103c 0x1815 inherit + + device pci 01.0 off end # PCIe Bridge for discrete graphics + device pci 02.0 on end # Internal graphics + + chip southbridge/intel/bd82x6x # Intel Series 7 Panther Point PCH + # mailbox at 0x200/0x201 and PM1 at 0x220 + register "gen1_dec" = "0x007c0201" + register "gen2_dec" = "0x000c0101" + register "gen3_dec" = "0x00fcfe01" + register "gen4_dec" = "0x000402e9" + register "gpi6_routing" = "2" + register "pcie_hotplug_map" = "{ 0, 0, 1, 0, 0, 0, 0, 0 }" + # HDD(0), ODD(1), mSATA(2), eSATA(4) + register "sata_port_map" = "0x3f" + register "superspeed_capable_ports" = "0x0000000f" + register "xhci_overcurrent_mapping" = "0x00000c03" + register "xhci_switchable_ports" = "0x0000000f" + + device pci 14.0 on end # USB 3.0 Controller + device pci 16.0 on end # Management Engine KT + device pci 1c.0 on end # PCIe Port #1 + device pci 1c.1 off end # PCIe Port #2 + device pci 1c.2 on end # PCIe Port #3, SD/MMC + device pci 1c.3 on end # PCIe Port #4, WLAN + device pci 1c.4 off end # PCIe Port #5 + device pci 1c.5 off end # PCIe Port #6 + device pci 1c.6 off end # PCIe Port #7 + device pci 1c.7 off end # PCIe Port #8 + device pci 1f.0 on # LPC bridge + chip ec/hp/kbc1126 + register "ec_data_port" = "0x62" + register "ec_cmd_port" = "0x66" + register "ec_ctrl_reg" = "0x81" + register "ec_fan_ctrl_value" = "0x70" + device pnp ff.1 off end + end + chip superio/smsc/lpc47n217 + device pnp 4e.3 on # Parallel + io 0x60 = 0x378 + irq 0x70 = 7 + end + device pnp 4e.4 on # COM1 + io 0x60 = 0x3f8 + irq 0x70 = 4 + end + device pnp 4e.5 off end # COM2 + end + end + end + end +end