mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	Add x86 6.12 patches
This commit is contained in:
		
							parent
							
								
									ca46bd7e23
								
							
						
					
					
						commit
						f86e9251d2
					
				
					 2 changed files with 288 additions and 0 deletions
				
			
		|  | @ -0,0 +1,13 @@ | |||
| --- a/drivers/clocksource/timer-cs5535.c
 | ||||
| +++ b/drivers/clocksource/timer-cs5535.c
 | ||||
| @@ -127,7 +127,9 @@ static irqreturn_t mfgpt_tick(int irq, v
 | ||||
|  		cs5535_mfgpt_write(cs5535_event_clock, MFGPT_REG_SETUP, | ||||
|  				MFGPT_SETUP_CNTEN | MFGPT_SETUP_CMP2); | ||||
|   | ||||
| -	cs5535_clockevent.event_handler(&cs5535_clockevent);
 | ||||
| +	if (cs5535_clockevent.event_handler)
 | ||||
| +		cs5535_clockevent.event_handler(&cs5535_clockevent);
 | ||||
| +
 | ||||
|  	return IRQ_HANDLED; | ||||
|  } | ||||
|   | ||||
|  | @ -0,0 +1,275 @@ | |||
| From 970d9af9015a387bb81841faf05dcc1a171eb97a Mon Sep 17 00:00:00 2001 | ||||
| From: Philip Prindeville <philipp@redfish-solutions.com> | ||||
| Date: Sun, 1 Jan 2023 15:25:04 -0700 | ||||
| Subject: [PATCH v3 1/1] x86: Support APU5 in PCEngines platform driver | ||||
| To: platform-driver-x86@vger.kernel.org, linux-x86_64@vger.kernel.org | ||||
| Cc: Ed Wildgoose <lists@wildgooses.com>, Andres Salomon <dilinger@queued.net>, Andreas Eberlein <foodeas@aeberlein.de>, Paul Spooren <paul@spooren.de> | ||||
| 
 | ||||
| PCEngines make a number of SBC. APU5 has 5 mpcie slots + MSATA. | ||||
| It also has support for 3x LTE modems with 6x SIM slots (pairs with a | ||||
| SIM switch device). Each mpcie slot for modems has a reset GPIO | ||||
| 
 | ||||
| To ensure that the naming is sane between APU2-6 the GPIOS are | ||||
| renamed to be modem1-reset, modem2-reset, etc. This is significant | ||||
| because the slots that can be reset change between APU2 and APU3/4 | ||||
| 
 | ||||
| GPIO for simswap is moved to the end of the list as it could be dropped | ||||
| for APU2 boards (but causes no harm to leave it in, hardware could be | ||||
| added to a future rev of the board). | ||||
| 
 | ||||
| Structure of the GPIOs for APU5 is extremely similar to APU2-4, but | ||||
| many lines are moved around and there are simply more | ||||
| modems/resets/sim-swap lines to breakout. | ||||
| 
 | ||||
| Also added APU6, which is essentially APU4 with a different ethernet | ||||
| interface and SFP cage on eth0. | ||||
| 
 | ||||
| Revision history: | ||||
| 
 | ||||
| v1: originally titled, "apu6: add apu6 variation to apu2 driver family" | ||||
| this dealt only with detecting the APUv6, which is otherwise identical | ||||
| to the v4 excepting the SFP cage on eth0. | ||||
| 
 | ||||
| v2: at Ed's request, merged with his previous pull-request titled | ||||
| "x86: Support APU5 in PCEngines platform driver", and some cleanup | ||||
| to that changeset (including dropping the table "apu5_driver_data" | ||||
| which did not have a defined type "struct apu_driver_data"), but got | ||||
| mistitled when the Subject of that commit got accidentally dropped. | ||||
| 
 | ||||
| v3: retitled to match Ed's previous pull-request. | ||||
| 
 | ||||
| Cc: platform-driver-x86@vger.kernel.org | ||||
| Cc: linux-x86_64@vger.kernel.org | ||||
| Reviewed-by: Andreas Eberlein <foodeas@aeberlein.de> | ||||
| Reviewed-by: Paul Spooren <paul@spooren.de> | ||||
| Signed-off-by: Ed Wildgoose <lists@wildgooses.com> | ||||
| Sighed-off-by: Philip Prindeville <philipp@redfish-solutions.com> | ||||
| ---
 | ||||
|  drivers/leds/leds-apu.c                |   2 +- | ||||
|  drivers/platform/x86/Kconfig           |   4 +- | ||||
|  drivers/platform/x86/pcengines-apuv2.c | 118 ++++++++++++++++++++++--- | ||||
|  3 files changed, 107 insertions(+), 17 deletions(-) | ||||
| 
 | ||||
| --- a/drivers/leds/leds-apu.c
 | ||||
| +++ b/drivers/leds/leds-apu.c
 | ||||
| @@ -182,7 +182,7 @@ static int __init apu_led_init(void)
 | ||||
|  	int err; | ||||
|   | ||||
|  	if (!dmi_check_system(apu_led_dmi_table)) { | ||||
| -		pr_err("No PC Engines APUv1 board detected. For APUv2,3 support, enable CONFIG_PCENGINES_APU2\n");
 | ||||
| +		pr_err("No PC Engines APUv1 board detected. For APUv2,3,4,5,6 support, enable CONFIG_PCENGINES_APU2\n");
 | ||||
|  		return -ENODEV; | ||||
|  	} | ||||
|   | ||||
| --- a/drivers/platform/x86/Kconfig
 | ||||
| +++ b/drivers/platform/x86/Kconfig
 | ||||
| @@ -753,7 +753,7 @@ config XO1_RFKILL
 | ||||
|  	  laptop. | ||||
|   | ||||
|  config PCENGINES_APU2 | ||||
| -	tristate "PC Engines APUv2/3 front button and LEDs driver"
 | ||||
| +	tristate "PC Engines APUv2/3/4/5/6 front button and LEDs driver"
 | ||||
|  	depends on INPUT && INPUT_KEYBOARD && GPIOLIB | ||||
|  	depends on LEDS_CLASS | ||||
|  	select GPIO_AMD_FCH | ||||
| @@ -761,7 +761,7 @@ config PCENGINES_APU2
 | ||||
|  	select LEDS_GPIO | ||||
|  	help | ||||
|  	  This driver provides support for the front button and LEDs on | ||||
| -	  PC Engines APUv2/APUv3 board.
 | ||||
| +	  PC Engines APUv2/APUv3/APUv4/APUv5/APUv6 board.
 | ||||
|   | ||||
|  	  To compile this driver as a module, choose M here: the module | ||||
|  	  will be called pcengines-apuv2. | ||||
| --- a/drivers/platform/x86/pcengines-apuv2.c
 | ||||
| +++ b/drivers/platform/x86/pcengines-apuv2.c
 | ||||
| @@ -1,10 +1,12 @@
 | ||||
|  // SPDX-License-Identifier: GPL-2.0+ | ||||
|   | ||||
|  /* | ||||
| - * PC-Engines APUv2/APUv3 board platform driver
 | ||||
| + * PC-Engines APUv2-6 board platform driver
 | ||||
|   * for GPIO buttons and LEDs | ||||
|   * | ||||
|   * Copyright (C) 2018 metux IT consult | ||||
| + * Copyright (C) 2022 Ed Wildgoose <lists@wildgooses.com>
 | ||||
| + * Copyright (C) 2022 Philip Prindeville <philipp@redfish-solutions.com>
 | ||||
|   * Author: Enrico Weigelt <info@metux.net> | ||||
|   */ | ||||
|   | ||||
| @@ -22,38 +24,70 @@
 | ||||
|  #include <linux/platform_data/gpio/gpio-amd-fch.h> | ||||
|   | ||||
|  /* | ||||
| - * NOTE: this driver only supports APUv2/3 - not APUv1, as this one
 | ||||
| + * NOTE: this driver only supports APUv2-6 - not APUv1, as this one
 | ||||
|   * has completely different register layouts. | ||||
|   */ | ||||
|   | ||||
| +/*
 | ||||
| + * There are a number of APU variants, with differing features
 | ||||
| + * APU2 has SIM slots 1/2 mapping to mPCIe sockets 1/2
 | ||||
| + * APU3/4 moved SIM slot 1 to mPCIe socket 3, ie logically reversed
 | ||||
| + * However, most APU3/4 have a SIM switch which we default on to reverse
 | ||||
| + * the order and keep physical SIM order matching physical modem order
 | ||||
| + * APU6 is approximately the same as APU4 with different ethernet layout
 | ||||
| + *
 | ||||
| + * APU5 has 3x SIM sockets, all with a SIM switch
 | ||||
| + * several GPIOs are shuffled (see schematic), including MODESW
 | ||||
| + */
 | ||||
| +
 | ||||
|  /* Register mappings */ | ||||
|  #define APU2_GPIO_REG_LED1		AMD_FCH_GPIO_REG_GPIO57 | ||||
|  #define APU2_GPIO_REG_LED2		AMD_FCH_GPIO_REG_GPIO58 | ||||
|  #define APU2_GPIO_REG_LED3		AMD_FCH_GPIO_REG_GPIO59_DEVSLP1 | ||||
|  #define APU2_GPIO_REG_MODESW		AMD_FCH_GPIO_REG_GPIO32_GE1 | ||||
|  #define APU2_GPIO_REG_SIMSWAP		AMD_FCH_GPIO_REG_GPIO33_GE2 | ||||
| -#define APU2_GPIO_REG_MPCIE2		AMD_FCH_GPIO_REG_GPIO55_DEVSLP0
 | ||||
| -#define APU2_GPIO_REG_MPCIE3		AMD_FCH_GPIO_REG_GPIO51
 | ||||
| +#define APU2_GPIO_REG_RESETM1		AMD_FCH_GPIO_REG_GPIO51
 | ||||
| +#define APU2_GPIO_REG_RESETM2		AMD_FCH_GPIO_REG_GPIO55_DEVSLP0
 | ||||
| +
 | ||||
| +#define APU5_GPIO_REG_MODESW		AMT_FCH_GPIO_REG_GEVT22
 | ||||
| +#define APU5_GPIO_REG_SIMSWAP1		AMD_FCH_GPIO_REG_GPIO68
 | ||||
| +#define APU5_GPIO_REG_SIMSWAP2		AMD_FCH_GPIO_REG_GPIO32_GE1
 | ||||
| +#define APU5_GPIO_REG_SIMSWAP3		AMD_FCH_GPIO_REG_GPIO33_GE2
 | ||||
| +#define APU5_GPIO_REG_RESETM1		AMD_FCH_GPIO_REG_GPIO51
 | ||||
| +#define APU5_GPIO_REG_RESETM2		AMD_FCH_GPIO_REG_GPIO55_DEVSLP0
 | ||||
| +#define APU5_GPIO_REG_RESETM3		AMD_FCH_GPIO_REG_GPIO64
 | ||||
|   | ||||
|  /* Order in which the GPIO lines are defined in the register list */ | ||||
|  #define APU2_GPIO_LINE_LED1		0 | ||||
|  #define APU2_GPIO_LINE_LED2		1 | ||||
|  #define APU2_GPIO_LINE_LED3		2 | ||||
|  #define APU2_GPIO_LINE_MODESW		3 | ||||
| -#define APU2_GPIO_LINE_SIMSWAP		4
 | ||||
| -#define APU2_GPIO_LINE_MPCIE2		5
 | ||||
| -#define APU2_GPIO_LINE_MPCIE3		6
 | ||||
| +#define APU2_GPIO_LINE_RESETM1		4
 | ||||
| +#define APU2_GPIO_LINE_RESETM2		5
 | ||||
| +#define APU2_GPIO_LINE_SIMSWAP		6
 | ||||
| +
 | ||||
| +#define APU5_GPIO_LINE_LED1		0
 | ||||
| +#define APU5_GPIO_LINE_LED2		1
 | ||||
| +#define APU5_GPIO_LINE_LED3		2
 | ||||
| +#define APU5_GPIO_LINE_MODESW		3
 | ||||
| +#define APU5_GPIO_LINE_RESETM1		4
 | ||||
| +#define APU5_GPIO_LINE_RESETM2		5
 | ||||
| +#define APU5_GPIO_LINE_RESETM3		6
 | ||||
| +#define APU5_GPIO_LINE_SIMSWAP1		7
 | ||||
| +#define APU5_GPIO_LINE_SIMSWAP2		8
 | ||||
| +#define APU5_GPIO_LINE_SIMSWAP3		9
 | ||||
| +
 | ||||
|   | ||||
| -/* GPIO device */
 | ||||
| +/* GPIO device - APU2/3/4/6 */
 | ||||
|   | ||||
|  static int apu2_gpio_regs[] = { | ||||
|  	[APU2_GPIO_LINE_LED1]		= APU2_GPIO_REG_LED1, | ||||
|  	[APU2_GPIO_LINE_LED2]		= APU2_GPIO_REG_LED2, | ||||
|  	[APU2_GPIO_LINE_LED3]		= APU2_GPIO_REG_LED3, | ||||
|  	[APU2_GPIO_LINE_MODESW]		= APU2_GPIO_REG_MODESW, | ||||
| +	[APU2_GPIO_LINE_RESETM1]	= APU2_GPIO_REG_RESETM1,
 | ||||
| +	[APU2_GPIO_LINE_RESETM2]	= APU2_GPIO_REG_RESETM2,
 | ||||
|  	[APU2_GPIO_LINE_SIMSWAP]	= APU2_GPIO_REG_SIMSWAP, | ||||
| -	[APU2_GPIO_LINE_MPCIE2]		= APU2_GPIO_REG_MPCIE2,
 | ||||
| -	[APU2_GPIO_LINE_MPCIE3]		= APU2_GPIO_REG_MPCIE3,
 | ||||
|  }; | ||||
|   | ||||
|  static const char * const apu2_gpio_names[] = { | ||||
| @@ -61,9 +95,9 @@ static const char * const apu2_gpio_name
 | ||||
|  	[APU2_GPIO_LINE_LED2]		= "front-led2", | ||||
|  	[APU2_GPIO_LINE_LED3]		= "front-led3", | ||||
|  	[APU2_GPIO_LINE_MODESW]		= "front-button", | ||||
| +	[APU2_GPIO_LINE_RESETM1]	= "modem1-reset",
 | ||||
| +	[APU2_GPIO_LINE_RESETM2]	= "modem2-reset",
 | ||||
|  	[APU2_GPIO_LINE_SIMSWAP]	= "simswap", | ||||
| -	[APU2_GPIO_LINE_MPCIE2]		= "mpcie2_reset",
 | ||||
| -	[APU2_GPIO_LINE_MPCIE3]		= "mpcie3_reset",
 | ||||
|  }; | ||||
|   | ||||
|  static const struct amd_fch_gpio_pdata board_apu2 = { | ||||
| @@ -72,6 +106,40 @@ static const struct amd_fch_gpio_pdata b
 | ||||
|  	.gpio_names	= apu2_gpio_names, | ||||
|  }; | ||||
|   | ||||
| +/* GPIO device - APU5 */
 | ||||
| +
 | ||||
| +static int apu5_gpio_regs[] = {
 | ||||
| +	[APU5_GPIO_LINE_LED1]		= APU2_GPIO_REG_LED1,
 | ||||
| +	[APU5_GPIO_LINE_LED2]		= APU2_GPIO_REG_LED2,
 | ||||
| +	[APU5_GPIO_LINE_LED3]		= APU2_GPIO_REG_LED3,
 | ||||
| +	[APU5_GPIO_LINE_MODESW]		= APU5_GPIO_REG_MODESW,
 | ||||
| +	[APU5_GPIO_LINE_RESETM1]	= APU5_GPIO_REG_RESETM1,
 | ||||
| +	[APU5_GPIO_LINE_RESETM2]	= APU5_GPIO_REG_RESETM2,
 | ||||
| +	[APU5_GPIO_LINE_RESETM3]	= APU5_GPIO_REG_RESETM3,
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP1]	= APU5_GPIO_REG_SIMSWAP1,
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP2]	= APU5_GPIO_REG_SIMSWAP2,
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP3]	= APU5_GPIO_REG_SIMSWAP3,
 | ||||
| +};
 | ||||
| +
 | ||||
| +static const char * const apu5_gpio_names[] = {
 | ||||
| +	[APU5_GPIO_LINE_LED1]		= "front-led1",
 | ||||
| +	[APU5_GPIO_LINE_LED2]		= "front-led2",
 | ||||
| +	[APU5_GPIO_LINE_LED3]		= "front-led3",
 | ||||
| +	[APU5_GPIO_LINE_MODESW]		= "front-button",
 | ||||
| +	[APU5_GPIO_LINE_RESETM1]	= "modem1-reset",
 | ||||
| +	[APU5_GPIO_LINE_RESETM2]	= "modem2-reset",
 | ||||
| +	[APU5_GPIO_LINE_RESETM3]	= "modem3-reset",
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP1]	= "simswap1",
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP2]	= "simswap2",
 | ||||
| +	[APU5_GPIO_LINE_SIMSWAP3]	= "simswap3",
 | ||||
| +};
 | ||||
| +
 | ||||
| +static const struct amd_fch_gpio_pdata board_apu5 = {
 | ||||
| +	.gpio_num	= ARRAY_SIZE(apu5_gpio_regs),
 | ||||
| +	.gpio_reg	= apu5_gpio_regs,
 | ||||
| +	.gpio_names	= apu5_gpio_names,
 | ||||
| +};
 | ||||
| +
 | ||||
|  /* GPIO LEDs device */ | ||||
|   | ||||
|  static const struct gpio_led apu2_leds[] = { | ||||
| @@ -215,6 +283,24 @@ static const struct dmi_system_id apu_gp
 | ||||
|  		}, | ||||
|  		.driver_data = (void *)&board_apu2, | ||||
|  	}, | ||||
| +	/* APU5 w/ mainline BIOS */
 | ||||
| +	{
 | ||||
| +		.ident		= "apu5",
 | ||||
| +		.matches	= {
 | ||||
| +			DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
 | ||||
| +			DMI_MATCH(DMI_BOARD_NAME, "apu5")
 | ||||
| +		},
 | ||||
| +		.driver_data	= (void *)&board_apu5,
 | ||||
| +	},
 | ||||
| +	/* APU6 w/ mainline BIOS */
 | ||||
| +	{
 | ||||
| +		.ident		= "apu6",
 | ||||
| +		.matches	= {
 | ||||
| +			DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
 | ||||
| +			DMI_MATCH(DMI_BOARD_NAME, "apu6")
 | ||||
| +		},
 | ||||
| +		.driver_data	= (void *)&board_apu2,
 | ||||
| +	},
 | ||||
|  	{} | ||||
|  }; | ||||
|   | ||||
| @@ -249,7 +335,7 @@ static int __init apu_board_init(void)
 | ||||
|   | ||||
|  	id = dmi_first_match(apu_gpio_dmi_table); | ||||
|  	if (!id) { | ||||
| -		pr_err("failed to detect APU board via DMI\n");
 | ||||
| +		pr_err("No APU board detected via DMI\n");
 | ||||
|  		return -ENODEV; | ||||
|  	} | ||||
|   | ||||
| @@ -288,7 +374,7 @@ module_init(apu_board_init);
 | ||||
|  module_exit(apu_board_exit); | ||||
|   | ||||
|  MODULE_AUTHOR("Enrico Weigelt, metux IT consult <info@metux.net>"); | ||||
| -MODULE_DESCRIPTION("PC Engines APUv2/APUv3 board GPIO/LEDs/keys driver");
 | ||||
| +MODULE_DESCRIPTION("PC Engines APUv2-6 board GPIO/LEDs/keys driver");
 | ||||
|  MODULE_LICENSE("GPL"); | ||||
|  MODULE_DEVICE_TABLE(dmi, apu_gpio_dmi_table); | ||||
|  MODULE_SOFTDEP("pre: platform:" AMD_FCH_GPIO_DRIVER_NAME " platform:leds-gpio platform:gpio_keys_polled"); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue